A failed or dead run explains itself in Activity
Goal: an operator can see from the console alone why a run died (which node, which VM, the recorded cause), without reaching the host. Today, debugging ACP, SDK and MicroVM runs on dev (tasks 5092/5093/5104/5112/5113/5116) left "session vanished" or "the runner crashed (its session left no trace)", while the node had recorded a precise cause. Supersedes drafts 7493, 7520, 7527 (items 1, 2, 4), 7506 (UI items), 7479 (item 3), 7505 (item 10) and 7511.
**Task › Activity / Why it failed**
- Name the node, the VM and the node's recorded failure sentence instead of "session vanished" or "left no trace". Turn a raw VM UUID into a next step (retry, or pick another node).
- A reset keeps earlier attempts' activity, collapsed, rather than wiping it.
- "Runner started" appears once per attempt.
- "Notification — not sent — no recipient" rows stay out of the task timeline.
- The session link goes to the console's own Audit › Sessions row for any non-Claude-Code run (SDK, Codex, ACP), never to claude.ai.
- An ACP cumulative `usage_update.cost` (`cost_kind: "cumulative"`) is labelled as the session total, distinct from a per-turn cost.
**Audit › Sessions**
- Each row shows its break detail (cause and detail).
- An ended ACP session with `events_last_seq = 0` is flagged "no events received".
- The last dead-lettered (4xx) event batch's status and detail show on the row.
- A session row ends when its task attempt ends: no "running / Transcript pending" left after a failure.
- An attempt that never registered a session row still appears, with its failure reason.
- The page takes a session-id search param (`?q=<id>`), so a timeline entry can deep-link to one row.
**Node page**
- Show recent daemon `log_findings` and link to pane logs.
- List companion CLIs (`pi` beside `pi-acp`) and flag a missing one, since postinst installs `pi` with `|| true`.
- Health's "Relaunch storm" links to the task and its sessions.
Out of scope: liveness or ingest logic, and MicroVM placement (MicroVM task).
Done means:
- Each item is shipped, with a screenshot of its surface, or declined with a one-line reason in the PR.
- A unit test pins the cumulative-cost label and the session-link target.
Required checks: ./dc check full
Outcome
Dead runs now explain themselves: Activity shows node, VM, cause and next step; Sessions shows end detail, no-events, refused batch and no-session attempts, ?q= deep link; Node shows CLIs/companions and earlier findings. PR #6163 merged (a2bfa38), deploy green. Full gate: API unit failures reproduce on develop.
Artifacts
Activity
- Created
- Run
- Runner started
- Runner ended (done)