Device Access Roadmap
Target state: Device Access and Browsers
Working principles
- [x] Keep the authoritative access model in core runtime.
- [x] Expose reusable SDK helpers before proliferating skill-local logic.
- [x] Separate bootstrap issuance from long-lived access policy.
- [x] Treat browser and member links with the same operator mental model.
- [x] Keep
web_desktopcompact by moving section operations into settings modals.
Locked target decisions
- [x] Treat
DeviceInventoryServiceas a canonical aggregation layer, not as a replacement raw-data registry. - [x] Keep
access_linksas the authoritative source for durable access policy. - [x] Keep
subnet_directoryas the authoritative source for remembered member runtime snapshots and capacity. - [x] Keep live browser and member-link layers as the authoritative source for transient presence.
- [x] Keep skill access to device inventory and device commands SDK-first rather than
services.*-first. - [x] Converge the device-facing connectivity field on
connected_to_subnet, while preserving low-level route detail separately.
Core access model
- [x] Rename the desktop surface from
ApplicationstoDevices. - [x] Define and use the terms
device,client,access link,detach, anddisplay_name. - [x] Introduce a runtime-owned access link registry backed by durable state.
- [x] Support browser links keyed by
device_id. - [x] Support member links keyed by
node_id. - [x] Store display name, lifetime mode, expiry, revocation, last seen, connectivity, and webspace affinity.
- [x] Publish SDK helpers under
sdk.data.access_links.
Device inventory model
- [x] Introduce
DeviceInventoryServiceas the core aggregation layer over policy, remembered runtime state, and live presence. - [x] Define one canonical
DeviceRecordread model for both browser and member endpoints. - [x] Standardize device references as
browser:<device_id>andmember:<node_id>. - [x] Keep the default
DeviceRecordfocused on identity, policy, observation, and runtime state. - [x] Keep command availability out of
DeviceRecordand expose it through a separate command-profile surface. - [x] Keep diagnostics and provenance out of
DeviceRecordand expose them through an explicit inspect surface. - [x] Rename the device-facing member connectivity field from
connected_to_hubtoconnected_to_subnet. - [x] Preserve a compatibility alias or adapter for existing
connected_to_hubconsumers during migration. - [x] Preserve
route_modeand related routing detail separately from device-facing connectivity.
SDK-first device surfaces
- [x] Publish aggregated device read APIs under
sdk.data.devices. - [x] Publish device command APIs under
sdk.data.device_access. - [ ] Keep
sdk.data.access_linksas the low-level access-policy surface. - [x] Migrate device skills to SDK entrypoints instead of direct
services.*imports. - [x] Expose a stable settings-schema or command-profile contract through the SDK for modal and assistant consumers.
Enforcement and lifecycle
- [x] Enforce browser policy on live ingress using
device_id. - [x] Ensure browser HTTP requests carry
X-AdaOS-Device-Id. - [x] Enforce member policy on hub-side member hello or registration.
- [x] Deny revoked and expired links before they become active runtime sessions.
- [ ] Add true issuer-side autorotation for permanent browser access.
- [ ] Fan out revocation into all active server-side browser session state.
Browser observability
- [x] Ship
browsers_skillas the first consumer of the access-link registry. - [x] Publish browser inventories into Yjs projections.
- [x] Expose skill actions for rename, lifetime changes, and detach.
- [x] Present
DevicesandClientsas separate browser groups. - [x] Ignore bootstrap approvals that never turned into real browser usage.
- [x] Skip archival storage for expired browser clients.
- [ ] Group browser inventory explicitly by last or current webspace in the operator UI.
- [ ] Add browser settings UX parity between transient client modal and skill-hosted modal flow.
web_desktop device shell
- [x] Add a
Browsersentry point to theDevicespanel. - [x] Replace per-section action rows with a single settings affordance.
- [x] Move
Apps,Marketplace,Hide, rename, lifetime, andDetachinto device settings UX. - [x] Keep compact-screen labels short and icon-first where needed.
- [x] Route all device settings actions through one stable generic modal contract.
- [ ] Add confirmation and richer status messaging for destructive detach flows.
Node-scoped operations inside device context
- [x] Keep
Appsbound to the current node context. - [x] Keep
Marketplacebound to the current node context. - [x] Filter
Marketplaceto items not yet installed on that node. - [x] Keep
HideorShowas presentation-only desktop state. - [ ] Unify node capability management and device access management under one reusable settings schema.
Browser and member convergence
- [x] Use the same access policy concepts for browsers and member nodes.
- [x] Allow rename for member devices through runtime-controlled node naming flows.
- [x] Allow detach for connected members through link manager unregistration.
- [x] Build a reconciler that materializes a consistent device aggregate from policy, remembered runtime state, and live presence.
- [x] Define how
observed_onlydevices are promoted into managed policy records, if at all. - [ ] Define the merge rules for
display_name,node_names,hostname, and effective device naming. - [ ] Define offline behavior for members detached while currently disconnected.
- [ ] Close policy/runtime drift for revoke, rename, expiry, and offline-detach flows.
System-model alignment
- [x] Move device-facing projections to
DeviceInventoryServicerather than rebuilding them ad hoc fromsubnet_directoryand link state. - [ ] Keep topology and routing projections separate from device inventory semantics.
- [x] Migrate user-facing device status fields and labels onto the canonical
DeviceRecordvocabulary.
Voice and automation follow-up
- [ ] Use
display_nameas the canonical voice-facing device label. - [ ] Expose device policies to automation and assistant skills.
- [ ] Support operator and assistant intents such as:
- [ ] "disconnect the living room TV"
- [ ] "show apps on kitchen tablet"
- [ ] "give this browser access for one day"
Recommended execution order
- [x] Phase 0 and Phase 1: vocabulary and core access model.
- [x] Phase 2: ingress enforcement.
- [x] Phase 3: first browser observability slice.
- [x] Phase 4:
web_desktopdevice shell. - [x] Phase 5:
DeviceInventoryService, canonicalDeviceRecord, and device reference normalization. - [x] Phase 6: SDK-first
devicesanddevice_accesssurfaces plus skill migration off direct service imports. - [x] Phase 7: unified settings contract and command-profile surface.
- [~] Phase 8: browser and member convergence cleanup, reconciler rollout, and
connected_to_subnetmigration. - [ ] Phase 9: issuer-side autorotation.
- [ ] Phase 10: system-model, voice, and automation integration.