Found by the P2 final whole-branch review (named check 1).
Scenario: live timeline open on a running run + scrolled up (detached marker showing) → the run completes. The marker persists on the now-finished run's replay view until esc/re-open.
Cause: the detached gate reads selectedRun?.status from the buildRunsIndex snapshot taken at open time (still "running"), and run completion does not call releaseLiveTimeline() (only close/onCancel/re-open do — fleet-panel.ts).
Impact: cosmetic; gestures unchanged; self-corrects on esc or re-open.
Fix direction: in the live-append subscription, detect the terminal event for the runId and call releaseLiveTimeline() before renderShell(); or re-read the run status from the index in the detached computation.
Found during #104 P2 (PR #110). CI smoke window: fleet-p2-smoke2.
Found by the P2 final whole-branch review (named check 1).
Scenario: live timeline open on a running run + scrolled up (detached marker showing) → the run completes. The marker persists on the now-finished run's replay view until esc/re-open.
Cause: the detached gate reads
selectedRun?.statusfrom thebuildRunsIndexsnapshot taken at open time (still "running"), and run completion does not callreleaseLiveTimeline()(only close/onCancel/re-open do — fleet-panel.ts).Impact: cosmetic; gestures unchanged; self-corrects on esc or re-open.
Fix direction: in the live-append subscription, detect the terminal event for the runId and call
releaseLiveTimeline()beforerenderShell(); or re-read the run status from the index in the detached computation.Found during #104 P2 (PR #110). CI smoke window: fleet-p2-smoke2.