A failed or dead run explains itself in Activity

Task 7541 · Done · Coder · created · updated

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.

Pull request

Artifacts

Activity

  • Created
  • Run
  • Runner started
  • Runner ended (done)