Activity
Every action sent to a device leaves a receipt: what was asked for, which lease and fencing token carried it, which frame it was bound to, and what happened. This is the record you reconcile against, not a log tail.
Complete and attributable — every value on screen comes from a named field of a receipt.
Receipt stream
One row per action sent to a device. Newest first, with anything needing attention lifted to the top.
- 2 Outcome unknown
- 1 Stale frame
- 1 Device disconnected
- 1 Device command failed
- typeTextondev_pixel7_a19adb_realtextLength 24 charsOutcome unknown
action_outcome_unknownThe control plane lost the result of this action in transit; reconcile the device state manually.
The physical effect is not knowable from here. Check the device. This always arrives together with Needs review.
Receipt failure reason: Outcome unknown The result was lost in transit. Whether the device carried it out is not knowable from here — check the device and reconcile.
- requested
- 2026-09-04T06:27:24.131Z
- failed
- 2026-09-04T06:27:27.031Z
- lease
- lease_QmT4vR
- fencing
- 114
- frame
- frm_38_02be
agent:run_9fK2mQ:f38:44f0c1Receipt status: Needs review2900 ms - pressKeyondev_robotarm_r04robot_handkey KEYCODE_ENTEROutcome unknown
action_outcome_unknownThe control plane restarted while this action was in flight; reconcile the device state manually.
The physical effect is not knowable from here. Check the device. This always arrives together with Needs review.
Receipt failure reason: Interrupted by restart The control plane restarted while this action was in flight. Whether the device carried it out is not knowable from here — check the device and reconcile.
- requested
- 2026-09-04T06:15:50.131Z
- failed
- 2026-09-04T06:15:54.731Z
- lease
- lease_Hg22nP
- fencing
- 96
agent:run_9fK2mQ:f31:9bd772Receipt status: Needs review4600 ms - tapondev_pixel7_a19adb_realx 264 · y 1602Stale frame
stale_frame· retryableAction was bound to frame frm_35_11ac, which is no longer the device's current frame.
The worker decided from an out-of-date frame. That is a worker-side problem, not a broken device.
- requested
- 2026-09-04T06:23:56.131Z
- failed
- 2026-09-04T06:23:57.431Z
- lease
- lease_QmT4vR
- fencing
- 112
- frame
- frm_35_11ac
agent:run_9fK2mQ:f36:c7194eReceipt status: Failed1300 ms - swipeondev_cloudphone_c02adb_cloudfrom 540, 900 · to 540, 900 · durationMs 850Shown exactly as the API recorded it: a swipe whose start and end are the same point. How this should read is still an open glossary question.Device disconnected
device_disconnected· retryableThe device dropped its transport mid-action.
The device dropped mid-action. Wait for it to come back, or use a different device.
- requested
- 2026-09-04T06:19:11.131Z
- failed
- 2026-09-04T06:19:12.231Z
- lease
- lease_Wd91kZ
- fencing
- 108
agent:run_9fK2mQ:f34:3ff5a0Receipt status: Failed1100 ms - openAppondev_emulator_e01emulatorappId com.example.missingDevice command failed
backend_command_failed· retryableam start returned: Error type 3, Activity class does not exist.
Read the message below. This one is retryable.
- requested
- 2026-09-04T06:17:26.131Z
- failed
- 2026-09-04T06:17:26.931Z
- lease
- lease_Yy73mB
- fencing
- 104
agent:run_9fK2mQ:f33:8a0d5cReceipt status: Failed800 ms - tapondev_pixel7_a19adb_realx 812 · y 244
- requested
- 2026-09-04T06:13:36.131Z
- committed
- 2026-09-04T06:13:37.013Z
- lease
- lease_QmT4vR
- fencing
- 94
- frame
- frm_30_7710
agent:run_9fK2mQ:f30:5d2b81Receipt status: Committed882 ms - swipeondev_pixel7_a19adb_realfrom 540, 900 · to 540, 900 · durationMs 850Shown exactly as the API recorded it: a swipe whose start and end are the same point. How this should read is still an open glossary question.
- requested
- 2026-09-04T06:10:54.131Z
- committed
- 2026-09-04T06:10:55.286Z
- lease
- lease_QmT4vR
- fencing
- 91
- frame
- frm_29_44de
agent:run_9fK2mQ:f29:e61a03Receipt status: Committed1155 ms - typeTextondev_cloudphone_c02adb_cloudtextLength 11 chars
- requested
- 2026-09-04T06:06:08.131Z
- committed
- 2026-09-04T06:06:09.729Z
- lease
- lease_Wd91kZ
- fencing
- 88
agent:run_9fK2mQ:f27:0c47f9Receipt status: Committed1598 ms - pressKeyondev_emulator_e01emulatorkey KEYCODE_BACK
- requested
- 2026-09-04T06:02:35.131Z
- committed
- 2026-09-04T06:02:35.868Z
- lease
- lease_Yy73mB
- fencing
- 81
agent:run_9fK2mQ:f24:b9e250Receipt status: Committed737 ms
Wording still owned elsewhere
The glossary covers every status value on this screen. These are the adjacent strings it has not settled — none of them are invented here.
- Availability — the derived “can I use this device right now” valuegate glossary §7.3 / §5 disagreement 5, owner + API sideuntil then Not shown. Online is never presented as leasable.
- Device Unavailable Reason `leased`gate glossary §7.9, owner decision OD-04until then Not shown. Its natural label is “In use”, which is the undecided Availability word.
- Error grouping headings (`Device error` / `API error`)gate glossary §5 disagreement 13, owneruntil then Failures group by their own error code, with no invented parent category.
- How a zero-distance swipe (MCP `long_press`) should readgate glossary §5 disagreement 10until then The receipt's own value is shown unedited: action `swipe` with identical from/to. A tooltip states the value is as recorded.
- Where `internal_error` and `backend_resolution_failed` send the usergate owner decision OD-04 (no support channel decided)until then The code and message are shown with no destination attached.
- Fidelity tier values (`software` / `hid` / `physical`)gate glossary §7 has no table for them; §7 covers the status and error closed setsuntil then Printed as the API spells them, under a heading that names the field. D05's three tiers are shown as a badge; `hid` has no backend declaring it today.
- Capability descriptor values (`per_key_visual`, `framebuffer`, `uiautomator`, …)gate glossary §7 has no table for them eitheruntil then The code value is printed and explained in the API's own words from `src/core/capabilities.ts`, rather than replaced by a label this console coined.
- Key lifecycle — the derived “where is this key in its life” valuegate glossary §7 has no table for API keys; the API has no status column on `api_keys` eitheruntil then Five values derived from `revokedAt`, `expiresAt` and the clock, shown under a heading that names the fields rather than as a status vocabulary. `Expiring soon` is this console's word for a distinction the API does not draw.
- How many task tools `tasks:run` without `devices:act` silently losesgate HQ docs say four (`key-flows.md` BP-05, `state-matrix.md` §2.10); the API says fiveuntil then The count and the names are read from the mirrored `SCOPE_TOOLS`, so the form states five and lists them. `list_tasks` joined the scope after those documents were written.
- Provisioning status values (`none` / `pending` / `active` / `revoked`)gate glossary §7 has no table for admission; D04 owns the surfaceuntil then Printed as the API spells them, under a heading that names the field. Each has a meaning line written here rather than a label, so nothing reads as an approved status word.
- Retention class and delete mode values (`debug` / `audit_opt_in`, `hard_delete` / `crypto_shred`)gate glossary §7 has no table for them; ADR-011 D2 owns the vocabularyuntil then Printed raw under field-shaped headings, with ADR-011's own account beside each. Shown as platform policy, never as this organization's configured values — those are not readable from a browser at all (ADR-011 D4).
- `frame_not_found` (API-85) — label and messagegate glossary §7 has no row for it; the API registered the code after the table was writtenuntil then Carried in the code set (it is the API's wire contract) but deliberately unlabelled: a receipt bearing it renders the raw code via `errorCodeLabel()`, with no next-step advice, until §7 adds a row.