Changelog
What's new.
Every improvement to the platform, as it ships.
· MCPGatewayService
Every SI gets the report tools by its rights; config_* gated by rights, not audience
SITP TP00, owner decisions 2026-10-18: - reports_list, reports_run and metrics_get drop CP14's WATCH charter switch: an SI is offered them by VIEW_REPORTS and the Reports app, as a person is, whatever its WATCH items or its org's disclosure mode. - config_* are no longer HUMAN_ONLY: they are offered by their rights, and SecurityService's ConfigureAccess checks the same rights per subject and change. Their four rights are on the SI floor, so charters and SI configuration stay a person's in practice. - ToolVisibility reads an SI's rights less AiRightsFloor.NEVER_GRANTABLE (defence in depth): a floor right in an SI session opens no tool. Snapshots regenerated: the AUDIT/default SI lists gain exactly the three report tools; nothing else changes.
· MediaService
?session= pins an attachment read, an edit, an unsend and a reaction to one conversation (SITP TP13)
The Tool Plane checks a run's audience on the conversation an SI names. A message id or an attachment id alone could reach another conversation the SI also belongs to, so these four endpoints now take an optional ?session=<guid>: a message or attachment of any other conversation answers 404 before anything is read or changed. Without the parameter every endpoint answers as before.
· kamo-shared-library
An SI never signs, prescribes, orders, immunizes, breaks the glass, merges charts or bulk-exports patients
SITP TP00, owner decision 2026-10-18: in Patient Records an SI drafts only (and may post payments behind approval). Nine EHR rights join AiRightsFloor.NEVER_GRANTABLE, so no role, template, supervisor grant or direct-order delegation can give them to an SI member.
· kamo-internal
Share devices from the device page and the Devices list through SP04's dialog; one sharing client
· kamo-internal
Settings, alarms - routing defaults per severity
· kamo-internal
The IoT Devices guided tour
· kamo-internal
The /settings/iot page - tabs, help, settings-menu topic and landing section
· kamo-internal
Settings, alarms - maintenance and design suppression, quality figures, and the tab
· kamo-internal
Settings, alarms - rules with preview and backtest, and escalation policies
· kamo-internal
/iot/shared - outgoing shares with keyset paging and safe row actions, the details drawer, and shares received
· kamo-internal
The Advanced tab marks the simulator as a test tool that cannot be enabled (SP14)
The view gains testOnly; visibleActions never offers ENABLE for a test-only connector (the server already omits it); TEST_ONLY_PROVIDER and the four simulator test codes are known codes; the card shows a Test only chip and a one-line hint. The provider type is widened locally (IotProviderType | 'KAMO_SIMULATOR'): @kamo/iot-core is not republished for a platform-only test tool.
· kamo-internal
The automation builder - actions, save-time confirmation, webhook secrets, test and backtest
· kamo-internal
Device page - access and shared-outside sections
· kamo-marketing
DRAFT FOR COUNSEL - list the connected-device clauses on the Terms and Privacy pages (IoT SP14, T-31)
Material change under Terms section 15: effective 30 days after this goes live. Branch iot/sp14-legal-draft only; never push before the owner says counsel approved the text and the dictionary half (iot/sp14-legal-draft) is live.
· kamo-marketing
DRAFT FOR COUNSEL - list the connected-device clauses on the Terms and Privacy pages (IoT SP14, T-31)
Material change under Terms section 15: effective 30 days after this goes live. Branch iot/sp14-legal-draft only; never push before the owner says counsel approved the text and the dictionary half (iot/sp14-legal-draft) is live.
· kamo-marketing
Guard that the Terms and Privacy pages and their dictionary text land together (SP14)
· kamo-marketing
The generated device-compatibility page and its copy guard, closed until announced (SP14)
The list is the live feed; the words are dictionary copy; a gap fails the next build.
· kamo-marketing
IOT_ANNOUNCED flag, the unheld-claims guard, the /features category and the capabilities group (SP14)
Nothing is announced: the flag defaults false. The guard scans only the new IoT copy.
· DaemonService
IotCanaryJob, the five-minute IoT canary tick (IoT SP14 D7)
· APIService
GET /api/public/iot/providers, the device-compatibility feed (IoT SP14 D2)
· InitializerService
IoT Devices on every paid KamoUniverse rung and no free one (IoT SP14 D3)
· kamo-shared-library
KAMO_SIMULATOR, the 22nd provider type (test-only; SP14)
Appended last; the client catalogue JSON keeps the 21 program types (@kamo/iot-core is unchanged).
· MediaService
An IoT alarm names its iOS notification category (SP10)
Without aps.category iOS shows the alarm with no Acknowledge or Open buttons: the categoryId data key is only a custom property.
· kamo-internal
Share device access from tickets and Exec2Exec, the card in both, and the recipient pages (IoT SP04)
The ticket header's action row and all three Exec2Exec header strips offer the share action (Exec2ExecHeaderActions keeps the meeting button beside it). An IOT_SHARE system event renders as IotShareCard in a ticket (SystemMessage) and in an Exec2Exec conversation (detected from the message text before a bubble is built). /shared-devices lists what was shared with the member; /shared-devices/<id> reads the share and mints ONE handoff from an effect, never during render, then leaves for kamo-iot. Neither page reads organization.isIot: a recipient need not hold the app.
· kamo-internal
The sharing client and the Share device access dialog, button and card (IoT SP04)
The member-side of sharing (spec 4.16): app/lib/iot/sharesApi.ts is @kamo/iot-core's createSharesApi over a same-origin @kamo/net ApiClient on this app's authenticatedFetch (refusals are IotShareError with the server's code; the member's own session ending is SESSION_REQUIRED, an unreachable server NETWORK). The four-step dialog (who, what, until, review) with the password re-check, the conversation button (app + MANAGE_IOT_SHARING + no god window + S14 says there is somebody to share with) and the chat card that reads its share back before offering Open, Manage or Revoke. A custom end is a wall time in the member's profile zone (the tasks' dueInstantFromInput) and every "until" is rendered with useFormatters, so the server-timestamp guard holds. The alias "iot" is reserved locally. The BFF relay for /me/verify-password is created here (SP05 has not). Depends on @kamo/iot-core ^0.3.1 (published) and the dictionary keys iot.sharing.* and sharedDevices.* (live).
· kamo-internal
Devices on Accounts, Leads, Contacts and work orders (SP13)
· kamo-internal
Devices panel for Accounts and Contacts - data layer, live updates, tag and untag (SP13)
· kamo-shared-library
IoT Sharing Access report, registry guards, fifteen seed reports
· kamo-shared-library
IoT Alarm Response and IoT Device Availability reports
· SecurityService
Report option providers and Account merge keeps tagged devices (SP13)

Your universe is waiting.
Start free in minutes. Add products whenever you are ready — no migration, no new logins.
Free forever — no credit card required