Mission history + replay

Every finished mission gets a Completed tab entry: directive, status, duration, task/finding counts, and a best-effort learned-linkage (promoted proposals whose signature matches one of the mission’s findings) — /api/history lists all of them, /api/history/{id} drills into one mission’s phases, tasks, findings, and executions.

Replay reconstructs from durable rows

A ▶ replay button rebuilds the whole build from durable rows only: BuildReplayStream merges task lifecycle events (created/claimed/ done/cancelled/superseded), findings, and executions — plus the telemetry event log where present — into one time-ordered stream, served at /api/replay?mission=N. No positions are ever recorded; the replay client recomputes layout itself through the same render path the live canvas uses, at 1×–16× with a scrub bar, so the same recording looks right at any window size, and live SSE simply pauses while replaying.

Honest fidelity limits, today

Global-ambience telemetry — claim_made/claim_released/host_seen/ memory_written — is recorded with mission_id=0 by design and is deliberately excluded from this merge; a mission’s replay is built from its task/finding/execution/mission-event rows alone. A mission recorded before richer telemetry shipped, or one with no telemetry at all, still replays correctly from those rows (graceful degradation) — it just won’t show the ambience layer until mission_id is threaded through everywhere that emits it, an open follow-up, not something this page claims already works.

The tapes on the site’s recordings page play through the same player the daemon’s Completed tab uses — see the UI tour’s Completed page for the replay bar inside the daemon’s console. (This page used to say the landing page’s hero was such a replay; the front page no longer carries one.)

corral-observe, a credentialed reverse proxy for remote viewing, forwards this same UI — history and replay included — to anyone holding a read-only observer token; corral-top is a lighter terminal viewport over the adjacent live /api/state snapshot. See their pages in the CLI reference.