Proof audit, pass 1, for [#32851](https://git.cafe/pingdotgg/t3code/pull/32851), branch `fix/issue-32829`, head [dca900efbf](https://git.cafe/pingdotgg/t3code/commit/dca900efbf60a471a0bd4aa0a923cfb0db4b2570). Read-only; no edits to the checkout, server launches, PR comments, pushes, or live-state access. The Git remote confirms this published head. GitCafe's PR metadata still reports [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748); its body and linked artifacts were read as historical evidence, not as proof of the current head.

Later during the audit, concurrent uncommitted changes appeared in the adapter and its tests, adding a roster `command` field. They were not made by this auditor and are outside this pinned report. Those changes would alter Details content and require a fresh R01/U04 assessment if committed. The focused checks ran before these edits, with clean status observed after completion.

**Findings first.**

1. **The existing after recordings for idle Stop (R02) and mid-turn Stop (R03) are stale as behavioural proof of this head.** Their after SHA is [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748). Since then, [8f0c659786](https://git.cafe/pingdotgg/t3code/commit/8f0c659786) changed the executed Stop path to fork cleanup, bound its head start to three seconds, join it after interrupting the foreground, and retain adopted child sessions; [dca900efbf](https://git.cafe/pingdotgg/t3code/commit/dca900efbf60a471a0bd4aa0a923cfb0db4b2570) changed idle-wait registration. See [Stop scheduling](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/provider-opencode/src/server/v2/adapter.ts#L3629) and [awaitIdle](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/provider-opencode/src/server/v2/adapter.ts#L775). The recordings remain useful historical UI evidence, but need after-only recapture on the current head, with process/roster/run-count transcripts. Keep the existing before controls. No new light/narrow cross-product is needed.

2. **The unconditional “Stop removes every running shell, including one launched during Stop” claim is too broad for the current head.** The new passing test [tracks a shell a held subagent launches while Stop’s last pass interrupts it](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/apps/server/src/orchestration-v2/Adapters/OpenCode2AdapterV2.test.ts#L1505) asserts that Stop returns with `sh_escape` still in the roster as an unnamed `command`, and pending work remains true. R23 below records this distinct outcome. It must be disclosed separately from the ordinary empty-roster Stop examples. This is a directly observed test assertion, not a live reproduction or a claim that all Stop paths leak. This audit does not propose changing the implementation.

3. **R01's running row, R04's graceful-restart note, and R05's successful natural-completion notification remain valid evidence for those exact inputs.** Their roster, report, notification, recovery and rendering branches are unchanged on the relevant paths. The later changes are in Stop, unknown/discarded-child tracking and held-event ordering. R01's earlier stills use the same roster shape; its later after transcript confirms a valid native shell id accepted by the unchanged launch predicate at the latest capture SHA. None of this upgrades the artifacts into current-head live runs.

4. **The linked deterministic log was old.** It recorded 19 selected tests on [c88510a576](https://git.cafe/pingdotgg/t3code/commit/c88510a57629353853b405fbb6f0ca578e98fb40). I reran the focused adapter/recovery checks on the audited head: **29 selected tests passed across four files**, 134 excluded by name filter. See [current proof checks](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e511c45b547adfcf/proof-checks.md). This refresh covers the new adopted-child, held-end and three-second foreground-interrupt cases without pretending they were filmed in the app. It does not cover every admitted gap listed below, nor the precise newly fixed idle-registration race.

The fixture space below was derived from the three-file PR diff against its merge base, then traced through its consumers. The earlier matrix supplies stable row identifiers but was not treated as the source of truth. The merged main changes do not alter the listed roster/notification/restart paths; the relevant consumer diffs were checked too.

**Observable paths and all affected data.** [syncRoster](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/provider-opencode/src/server/v2/adapter.ts#L1299) emits running subagent entries first (`taskId`, `kind: subagent`, optional description and childThreadId), then shells (`taskId`, `kind: command`, optional trimmed description and parentTaskId). A live background call supplies parentTaskId; an ended call does not. No new command, itemId, awaited, sourceThreadId or exitCode is emitted. Shell launch requires `status: running` and a Shell.ID accepted by the provider schema; duplicate or already-ended launches do not add work. Shell end removes the id, records sourceId/text/outcome, and can leave a pending report until its inbox item is delivered, cancelled or consumed by a wake. User-stopped-only wakes are suppressed; mixed natural/stopped wakes continue. Adopted sessions can produce unnamed shell entries without creating a child call.

The shared [pending-work derivation](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/shared/src/orchestrationV2PendingBackgroundWork.ts#L236) gates rows during active runs and merges/deduplicates settled rosters with turn items. [presentation](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/client-runtime/src/state/threadExecution.ts#L568) selects no row, one named/unnamed command, multiple commands, or commands mixed with subagents. Commands alone do not hold sidebar completion; subagents do. [web row](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/apps/web/src/components/chat/ThreadActivityBanners.tsx#L171) chooses terminal versus mixed icon, progress/combined description, optional duration and child Open action by matching ids, Details, and Stop. [Details](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/apps/web/src/components/chat/BackgroundWorkDetails.tsx#L22) shows output/command blocks only when explicit fields or a real matching turn item provide them. A shell id and tool-call id generally differ, so R01 correctly shows a title/status without invented output or duration. [web lifecycle](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/apps/web/src/components/chat/useThreadLifecycle.tsx#L411) hides the background row during active work, runs the shared interrupt command, and drives pending/error/retry/permission states.

[shell report translation](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/provider-opencode/src/server/v2/adapter.ts#L2389) feeds [notification summaries](https://git.cafe/pingdotgg/t3code/blob/dca900efbf60a471a0bd4aa0a923cfb0db4b2570/packages/provider-core/src/server/notification.ts#L24) through continuation requests. Summary branches include completed/failed/cancelled/unknown, unnamed labels, first-line/80-character shortening, 2–3 named reports, count-only reports, and mixed subagent/command sources; exit-code suffixes are unreachable from this adapter's new reports. `command` is encoded as legacy `background_command` by the existing contract. A single command notification has no child navigation. Shared projection persistence and recovery read the roster, deduplicate shells under their active subagent parent, clear it on restart and deliver the cancellation note with the next applicable user message. Shell-only work also keeps event ingestion and idle unload alive, prevents rollback, and prevents context-budget handoff from discarding work. Fork's check differs and does not reject a shell merely for being in the roster.

Web and Electron share these components. Native mobile separately renders its floating status and background-work sheet using the shared presentation; its command rows have no child chevron. Existing composer/row Stop, mobile Stop, and service-based CLI/MCP interrupt operations reach the same adapter; no Settings or palette feature was added, and no new entry point or contract changed. Steering/non-user interruption takes the foreground-only branch. Local, remote/relay and tunnel carry the same unchanged contract. This audit does not claim a native-client, remote-mode, other-provider, OpenCode v1, macOS or Windows run.

**Seed and proof notation.** A = a real OpenCode 2.2.6 turn through an isolated dev server, exact native shell tool `background: true`, command `sleep 500`, then finish the root turn; verify `shellID` and `status: running`. B = A followed by foreground `sleep 40` within the same turn, Stop while both owned PIDs are alive. C = A with `sleep 20; echo done`, then let it complete. D = tracked isolated-server graceful restart, then an explicit message requesting the restart note. Use the existing linked seed/driver scripts with fresh thread ids; an ampersand shell or a database-injected roster is not equivalent. No server was started in this audit. H = deterministic adapter replay with gated provider events, fake replies and TestClock. H orderings can occur live, but a real model cannot reliably seed their exact race/error/order combinations, so they are labelled unit-only. P = inherited shared presentation/service harness, not a staged real OpenCode run.

Every row involving interaction or time is marked **recording**; a server-only recording may be an ordered runtime/event/test transcript rather than an MP4. A **missing** artifact does not imply a new UI test or live model is required. Unit-only PASS means the exact inspected replay assertions passed in this audit; GAP means that specific behavior has no direct proof. Optional inherited UI shapes are explicitly optional.

| Fixture | Diff affects | Data / branch / observable result | How to seed | Minimum evidence | Already linked evidence at current head |
|---|---|---|---|---|---|
| R01 · settled named shell | Yes | One command entry with description, pending=true; `Running · sleep 500`, Details/Stop; sidebar can be settled. Before: PID alive, roster empty, no row. | A before/after. Exact test: lists a background shell still running after the turn as pending work. | **recording** 1440×900 dark; paired settled stills, Details open and runtime roster/PID. | **STILL VALID.** Inspected all four paired sheets (1440/390, dark/light), before clip and after Details clip. Stills at [c88510a576](https://git.cafe/pingdotgg/t3code/commit/c88510a57629353853b405fbb6f0ca578e98fb40); after transcript at [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748) confirms same roster. syncRoster and client paths unchanged. New launch validation does not change these valid native ids. UNIT PASS. |
| R02 · idle Stop | Yes | One command → user row Stop → shell removed, empty roster, pending false; stopped-only report starts no continuation. | A then click actual web row Stop. Exact test: removes a running background shell on a user Stop. | **recording** 1440×900 dark; click plus owned PID, roster, bounded run-count window. | **STALE behaviour.** Inspected final [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748) clip and +177s transcript: historical outcome proven. Cleanup scheduling and idle registration changed at current head. Recapture after only. UNIT PASS now. |
| R03 · active foreground Stop | Yes | Background shell + foreground tool; background row hidden while working. Composer Stop interrupts run, ends both PIDs, clears roster; stopped wake creates no follow-up. | B, actual web composer Stop. Exact test: leaves no work pending when Stop removes a shell during a turn. | **recording** 1440×900 dark plus synchronized two-PID/roster/run transcript. | **STALE behaviour.** Inspected paired recordings and final [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748) after clip, +148s transcript. Front-end state is historical valid; forked cleanup/foreground ordering and awaitIdle changed. Recapture after only. UNIT PASS now. |
| R04 · graceful server restart | Indirect | Persist command, terminate isolated backend, restart: shell gone, roster cleared, cancellation event/note; next explicit input carries note; no plain-shell auto-continuation. | A → D; verify input, not just recovery event. | **recording** ordered runtime/PID/recovery/input transcript; no web viewport. | **STILL VALID.** Read paired original and later after transcript: next native user input contains shell command/id note. Recovery/note and roster branch unchanged since [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748). Graceful only; abrupt crash missing. Shared UNIT PASS. |
| R05 · natural success | Yes | End removes shell; completed command report and native text feed continuation; terminal icon and `Command "…" finished`; continuation reply. | C. | **recording** ordered runtime/continuation transcript and one web clip, 1440×900 light acceptable. | **STILL VALID.** Viewed paired videos including last after frame and all four sheets. [975c0819bc](https://git.cafe/pingdotgg/t3code/commit/975c0819bcf72251867f53f62d0b96e572844f6f) visuals, [4b55798444](https://git.cafe/pingdotgg/t3code/commit/4b557984448fd3d2e5bb506b3d9ff180e32f7748) runtime. trackShellEnd, onWake, offerWake, formatter/render paths unchanged for root success. Failure variants are N01–N07. |
| R06 · live background child owns shell | Yes | Subagent first; command with parentTaskId=call id; childThreadId on subagent. Root/ancestor updates; Waiting presentation. | H; lists a subagent's background shell under the subagent that started it. A live native task/child shell is possible but non-deterministic. | **recording** replay transcript; optional 1440×900 dark mixed-row image. | **MISSING live; UNIT-ONLY PASS now.** Ordinary known-child ownership branch unchanged; original test log can remain historical. No new live capture required. |
| R07 · finished child leaves shell | Yes | Call settles: plain command without parentTaskId; Running rather than Waiting; user Stop removes child shell and starts no child follow-up. | H; lists a finished subagent's background shell as a plain command a Stop removes. | **recording** replay roster transition and Stop transcript. | **MISSING live; UNIT-ONLY PASS now.** Shape assertion and Stop case refreshed; older Stop execution log is stale. Same final visual as R01. |
| R08 · known-session held wake | Yes | Root autonomous wake holds events; known shell counted on arrival before replay, possibly no description; Stop can see it before continuation. | H; removes a shell launched by a wake still waiting for its continuation. | **recording** gated replay transcript; no additional required web image. | **MISSING live; UNIT-ONLY PASS now.** Old Stop-only log stale; current replay exercises held-wake Stop. Unnamed visual is U01. |
| R09 · unknown held child / grandchild replay | Yes | Child state initially absent; nearest ancestor holds nested events. Replay establishes call then counts shell once, fills label, sets parent id. | H; lists a subagent's shell from a held wake under the subagent once the wake runs; lists a grandchild's shell from a held wake once the wake runs. | **recording** gated replay with child/grandchild rosters. | **MISSING live; UNIT-ONLY PASS now** for both depths. Original linked log predates full grandchild coverage; no screenshot claimed. |
| R10 · discard held child wake | Yes | Stop/reconnect/drop of earlier wake retires unnamed children, adopts still-running shells, and interrupts strays. Successful Stop removes shells; failed removal retains them. | H; removes a subagent's shell from a held wake that Stop discards; keeps a held subagent's shell tracked when a reconnect discards its wake. | **recording** replay transcript. | **STALE old unit log; UNIT-ONLY PASS now.** discard/adoption changed. R18, R22 and R23 separate retained-shell results. |
| R11 · launches during Stop | Yes | New shell during removal, foreground interrupt, background-child interrupt, held wake/child interrupt; newly announced child during removal. Drain sees late work and sweeps again after observed ends. | H; current six tests named removes/stops … while Stop removes/interrupted/interrupts …; include held child and held wake. | **recording** gated replay milestone/roster/remove-id transcript, not a two-row still. | **STALE old logs; UNIT-ONLY PASS now.** Existing live R02/R03 do not seed these races. Final stray-pass exception is R23. |
| R12 · mixed stopped and natural wake | Yes | Stopped A and natural B share report wake: suppress neither whole wake nor B report; native B_DONE reaches continuation, reports aggregate, roster empty. | H; continues a wake that a stopped shell shares with a finished one. | **recording** replay/continuation transcript. | **MISSING live; UNIT-ONLY PASS now.** Test proves B_DONE and roster; it does not assert every aggregate notification string/outcome (N06/N07). |
| R13 · steering/non-user interrupt | Indirect | requestRuntimeRestart absent/false interrupts foreground but preserves shells; true enters Stop. Guard provider-turn mismatch/no turn. | Real active turn then genuine steer/restart, or H direct interrupt flag; normal send/queue alone is not equivalent. | **recording** ordered request flags/roster/process transcript. | **MISSING direct shell proof / GAP.** Inherited subagent steering test is not a shell assertion. No live steering claim in index; preserve limitation. |
| R14 · successful shell reconciliation | Yes | Reconnect gets running/nonrunning/typed-not-found shell: keep/prune and publish; active-turn history can backfill a missed launch then prune it. | H break/resubscribe, session.active/history and shell.get replies. Real network loss possible, not a T3 restart. | **recording** replay/GET/history/roster transcript. | **MISSING / GAP** for direct shell running, nonrunning, ShellNotFound, LocationNotFound and lost-launch/backfill variants. R15 does not prove these. |
| R15 · failed optional reconciliation | Yes | Unexpected shell.get failure/timeout retains shell and stream; concurrent checks bound multi-shell stalls to one check budget. | H; keeps a background shell tracked when its check fails after a reconnect; deterministic TestClock/gates for multi-shell stall. | **recording** replay warnings/roster transcript. | **MISSING live; UNIT-ONLY PASS now** for single HTTP error. **GAP** timeout and concurrent multi-shell variants; do not infer timeout proof from one HTTP error. |
| R16 · reconnect exhausted | Yes | Clear shells/reports/end ids, emit empty roster before ending stream; no claim of OS process termination/restart cancellation note. Active turn failure is separate state. | H; clears a background shell from the roster when the stream cannot reconnect. | **recording** terminal stream/roster ordering transcript. | **MISSING live; UNIT-ONLY PASS now** for shell after completed root. No live transport-failure or active-shell-turn teardown claim. |
| R17 · event filters/dedup/order | Yes | Valid running shell id only; non-running/missing/invalid ids ignored. Duplicate launch and tracked end-before-launch do not add duplicates/ghost shell. Non-shell/non-synthetic reports ignored; delivered/cancelled inbox removes pending report. | H duplicate/reordered/malformed-but-decodable events and cancelled/delivered inbox; real completion supplies ordinary events only. | **recording** labelled adapter replay; no web required. | **MISSING / GAP** for direct exhaustive filter, duplicate, tracked end-before-launch and inbox-cleanup proof. Held end-before-launch now has its own passing case R24; replay-count aspects R09/R12 pass. |
| R18 · remove failure, retry, directory | Yes | LocationNotFound counts as removed; unexpected error/timeout retains unconfirmed shell, attempts once per Stop, later Stop can retry. Use launch directory even if session directory moves. Unreachable child interrupt must not be falsely settled. | H; retries a held subagent's shell whose remove failed on the next Stop; fake typed failure/timeouts and changed directory for rest. | **recording** remove arguments/replies/roster/retry transcript. | **MISSING live; UNIT-ONLY PASS now** for held-shell error retained then removed on second Stop. **GAP** direct LocationNotFound, directory move, full timeout result and unreachable-child outcome. |
| R19 · pending-work consumers | Indirect | Shell keeps per-thread/global pending true, ingestion/idle unload pinned; rollback and context-budget handoff refuse; after end/Stop release. Shell-only fork is not refused just by pending roster; preserve manager pin ceiling. | A plus real operations; H/P service tests and TestClock for idle pin; cannot seed adapter state by database edit alone. | **recording** operation/probe transcript; no long live idle wait needed. | **MISSING shell-specific integration / GAP.** Adapter pending assertions pass, consumers inspected. Shared service coverage is not an OpenCode shell integration run. |
| R20 · restart child ownership | Indirect | Recovery groups/deduplicates shell under still-live subagent; finished child leaves ordinary shell cancellation note. Parent entries precede command entries. | H/P; wakes the run whose subagent lost its shell, past a wake cut before it started; names a lost subagent by the id the agent resumes it with; R06/R07 adapter shapes. | **recording** named-test transcript sufficient; no new web capture. | **MISSING live; UNIT-ONLY PASS now** for shared recovery/note plus adapter shapes. No filmed live native-child restart claim. |
| R21 · propagation/isolation and label keys | Yes | Root/ancestor/subtree scoping, global versus per-thread pending, Stop one root only; kind/description/parent changes publish even at same roster length. Held labels depend on call-input matching; reused call ids across sessions are a separate unproven variant. | H two roots, nested calls, same-size roster change and repeated call ids. Simple child/grandchild cases already run. | **recording** exact scoped rosters, labels and removed ids. | **MISSING full direct proof / GAP.** R06/R07/R09 prove simple/nested shapes only; no multi-root or repeated-call-id guarantee claimed. |
| R22 · adopted child reports, then launches again | Yes; latest fix | Reconnect discards held child; retained shell later ends and wakes child; new launch remains owned by root as plain command without description/parentTaskId. Future end releases it; stop-origin report can schedule stray interruption. New descendants of strays are adopted too. | H; tracks a shell a reconnect-discarded subagent launches after its kept shell ends. Exact live ordering not controllable. | **recording** replay roster transcript; unnamed visual is inherited U01. | **MISSING in linked index; UNIT-ONLY PASS now** for retained-follow-up roster/pending. Recursive adopted descendant and adopted end-before-launch variants still lack direct test. Earlier captures cannot prove new tracking. |
| R23 · final stray Stop launches another shell | Yes; latest fix | Final stray interrupt wakes/ends child which emits another launch: Stop returns with unnamed sh_escape tracked, pending=true. Row can remain/reappear; this is not the R02/R03 empty outcome. | H; tracks a shell a held subagent launches while Stop's last pass interrupts it. Real deterministic seed unavailable. | **recording** replay assertion transcript; no mandatory model-driven video. | **MISSING in linked index; UNIT-ONLY PASS now** for this retained-shell outcome. Correct unconditional Stop prose. Another Stop or natural end of this exact escaping shell is not asserted by this test. |
| R24 · held end precedes launch result | Yes; latest fix | Unknown held child reports end before tool success; discard/reconcile must not resurrect dead shell or make a shell.get call for it. Final roster empty/pending false. | H; keeps no held shell whose end arrived before its launch result. | **recording** replay ordering/roster transcript. | **MISSING in linked index; UNIT-ONLY PASS now.** heldShells gained an end tombstone after capture SHA. Existing R01–R05 do not cover it. |
| R25 · shell cleanup stalls | Yes; latest fix | Remove hangs; foreground interrupt begins after at most three seconds of cleanup head start rather than waiting its ten-second timeout. Foreground terminal interrupted; cleanup/pending may remain. This does not promise whole Stop settles within three seconds. | H; stops the turn within the outer Stop deadline while a shell removal stalls; TestClock advances 3 seconds. Real transport stall can be induced but exact timing is not a model seed. | **recording** deterministic replay/TestClock transcript; no deliberately slowed production for video. | **MISSING in linked index; UNIT-ONLY PASS now.** Old R03 ordinary fast-removal clip never exercises the new deadline branch. Test asserts foreground terminal, not full Stop completion or final empty roster. |
| R26 · session goes idle during waiter setup | Yes; final one-line fix | Execution end between busy check and waiter installation: second busy check returns immediately; avoid a phantom ten-second wait. Includes already-idle fast return and normal registered-waiter completion. | H must gate registration/Deferred allocation and interleave execution end. Real model cannot deterministically seed this scheduling edge. | **recording** gated concurrency transcript/unit test, no web needed. | **MISSING dedicated race proof / GAP.** Current tests exercise surrounding Stop cases but do not force this exact registration window. Do not call it a filmed or specifically tested regression. |
| R27 · natural child-shell follow-up | Yes via report routing | A known native subagent shell naturally ends; its session starts again. takeReports permits natural reports then startChildTurn creates a child turn, rather than root onWake continuation; stopped-only child report instead starts none. | H known-child shell/report/started sequence; live native child possible but exact scheduling not guaranteed. | **recording** child-turn ids, report and roster transcript. | **MISSING direct natural child-shell proof / GAP.** R07 current PASS asserts no child turn for stopped shell; inherited subagent follow-up tests do not prove natural shell text/child turn specifically. |
| R28 · user joins a running autonomous wake | Yes indirectly through shell replay | An explicit new user turn takes a running held execution, replays buffered shell launches and replaces the continuation. Normal runWake replays only its selected wake and discards earlier held wakes, adopting their shells. Counts and command labels must not duplicate. | H pending shell-owning wake, then direct user startTurn versus continuation startTurn; real model timing cannot deterministically select held window. | **recording** replay/run ownership/roster transcript. | **MISSING direct shell user-join proof / GAP.** R09/R12 test continuation replay; discard behavior is partly R10/R22. No live new-message join claimed. |
| N01 · natural failed shell | Yes via new report | Native shell state error → failed command notification, removed roster, report text continuation. Foreground nonzero-shell test is not this branch. | A using delayed command ending nonzero, or H with state error not user-stopped. | **recording** runtime/replay report/continuation transcript; optional 1440×900 dark notification. | **MISSING direct OpenCode background-failure proof.** Shared formatter has existing command-failure assertions; source inspected, not rerun. Live R05 covers success only. |
| N02 · natural cancellation | Yes via new report | state cancelled without user Stop tombstone → cancelled outcome / Command … was stopped, continuation can run; user Stop-only case instead suppresses wake. | H report cancelled without stopped id. Not user Stop, which seeds R02. | **recording** replay report/wake/notification transcript. | **MISSING / GAP** direct shell cancellation wake/notification. No live assertion. |
| N03 · unknown shell outcome | Yes via new report | Missing/unrecognized metadata state → unknown outcome, finished wording, native text continuation; no synthetic exit code. | H synthetic shell report with absent/unknown state. | **recording** replay report/continuation transcript. | **MISSING / GAP** direct shell unknown-state proof; shared formatting path inspected. |
| N04 · unnamed/long/multiline completion label | Indirect formatter branch newly reached | Unnamed shell report → Command finished; labels use first line and max 80 characters, safe shortening. Tracking gained after discard has no command label. | H unnamed held/adopted launch then end; long/multiline A or P formatter inputs. | **recording** report-to-notification transcript; optional narrow still for wrapping. | **MISSING direct adapter label-variant proof.** Existing shared formatter test asserts multiline and long command shortening; source inspected only. Ordinary named R05 remains valid. |
| N05 · 2–3 named command reports | Indirect formatter branch newly reached | One wake carries multiple named command reports: joined command names, command source/terminal icon, combined outcome. | H two/three shell end reports before execution starts; live two/three short shells possible but coalescing not guaranteed. | **recording** ordered inbox/wake/notification transcript; optional 1440×900 dark. | **MISSING direct aggregate notification proof.** R12 asserts B_DONE continuation/roster, not full notification data. |
| N06 · count-only notification | Indirect formatter branch newly reached | More than three reports, or all labels absent: N commands finished/failed/were stopped rather than name list. | H four shell ends or unnamed report batch; P summary helper. | **recording** aggregated-wake transcript; optional 1440×900 dark. | **MISSING direct command-batch proof.** Existing shared formatter count test uses subagents, not actual shell batch; source inspected only. |
| N07 · mixed command/subagent or outcome batch | Indirect formatter branch newly reached | Mixed kinds use background_task source; mixed outcomes prioritize failed, then cancelled, then all-completed/unknown. Up to three named reports list names; larger/unnamed use background tasks count. | H child and shell reports in one wake; P formatter mixed inputs. | **recording** mixed inbox/wake/notification transcript; optional 1440×900 dark. | **MISSING direct adapter aggregate proof.** Shared formatter has mixed stopped subagent+command test, source inspected; R12 only partially overlaps. Unconditional generic Background activity updated is no longer correct for known shell reports. |
| N08 · report delivered during an active execution | Yes via new report bookkeeping | Shell report arrives while foreground remains active and its inbox item is delivered/cancelled there: shell roster clears, report is consumed/removed; no new root wake/command notification is required solely by that report. A separate execution start is what selects onWake. | H enqueue/end/deliver while active; live short background shell plus longer foreground tool can seed this, but scheduling and delivery are provider-controlled. | **recording** execution/inbox/roster/run-count transcript. | **MISSING direct natural active-turn shell proof / GAP.** Mid-turn Stop R03 uses a stopped report and cannot prove natural delivery; R17 covers filter/bookkeeping source only. |
| U01 · unnamed command row | Indirect inherited UI | No description/blank description → Running a command, no child Open; Details title command; no matched output/duration unless matching actual item. May later gain description on replay. | R08/R22/R23 H; optional P client fixture. | Optional still 1440×900 dark; **recording** for later label update. | **MISSING optional capture.** Shared presentation source inspected; unit-only unnamed roster current PASS. No new visual test requested. |
| U02 · multiple command row | Indirect inherited UI | Two commands → terminal icon/Running 2 commands, combined labels and two Details sections; 2→1→0 count transition. | Two live A shells; H/P for stable transitions. | Optional 1440×900 dark; **recording** for Details/count changes. | **MISSING optional capture.** R12 proves two-command roster, not painted count/Details. No new styling changed. |
| U03 · command plus subagent | Indirect inherited UI | Waiting, subagent ordering/mixed icon; latest child progress or combined description; childThreadId allows Open only on child, then Running command after child settles. | R06→R07 H; real native task possible but not required to stage. P for progress and Open. | Optional 1440×900 dark; **recording** transition/Open/Details. | **MISSING optional capture.** Current adapter ownership tests PASS; no live mixed-row/progress/navigation claim. |
| U04 · Details / long text / real item match | Indirect inherited UI | Plain/multiline label versus monospace matching command; truncation/wrapping. Details open/close; output/duration conditional on true turn-item match. No invented shell-id/tool-id match. | A named or long/multiline command; P for matching-item variant. | **recording** interaction; optional 390×844 dark long-command case. | **STILL VALID for R01 Details open**, observed sleep 500/Running; dialog ends open. **MISSING** close and long/multiline/matched-output variants, optional inherited branches. Details source unchanged. |
| U05 · Stop pending/disabled/error/retry | Indirect inherited UI; R02/R03 timing affected | Stop → disabled/Stopping → gone or retained; auth disables; failed request shows thread error and permits retry; accepted request stays pending while listed until retry timer. Foreground interrupt request can replace Now row. | R02/R03 real interaction; P permissions/rejection/deadline; R18 retained shell; R25 stalled cleanup. | **recording**; required R02/R03 1440×900 dark, optional P auth/error/retry. | **STALE current Stop timing proof**, inherited control rendering unchanged. Pending/error/auth/retry variants not comprehensively captured. Existing shared isBackgroundWorkStopPending tests are inherited, not run here. |
| U06 · mobile/desktop and connection surfaces | Indirect existing clients | Electron shares web; native mobile floating status and Background work sheet independently render same command/mixed/empty shapes and child navigation. Remote/relay/tunnel share payload, destination permissions unchanged. | Real native mobile connected to same A thread, or P native harness; desktop web wrapper; remote paired browser. | Optional device/client **recording** for navigation/Stop; not part of minimum server-only web proof. | **MISSING independent native/remote captures**, explicitly unverified. 390px web capture is not an iOS/Android test. Other adapters untouched. |

**Minimum capture set.** Reuse the already linked paired R01 static/Details evidence and R05 successful completion evidence, and the R04 before/after ordered runtime transcript. Keep historical before controls. The **required new set is exactly two after recordings on the audited head**, each 1440×900 CSS × dark: R02 idle row Stop and R03 composer Stop mid-turn, with matching roster, owned fixture PIDs and persisted run/descendant counts. R03 must catch both PIDs alive before the click; its background row is intentionally hidden during the active run. R02 should start with the named Running row. End each on settled UI, and report an explicit bounded no-follow-up observation window; pair that bounded live observation with the deterministic stopped-wake tests. No new 390px/light versions are required because no client style/layout changed. A static before/after pair alone cannot replace these interaction recordings.

The source-derived remaining rows are either deterministic unit-only scenarios or explicitly admitted gaps/optional inherited visuals, as labelled. This pass does not turn all admitted gaps into additional mandatory videos or tests. It does require the evidence narrative to disclose R23 rather than claim every Stop variant ends with no work. The current [current proof checks](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e511c45b547adfcf/proof-checks.md) can be linked alongside retained historical logs to refresh unit-only provenance; no new live artifact is needed for the precisely ordered R22/R24/R25 fixtures. The exact R26 race remains unproven by a dedicated interleaving.

**What I opened.** Downloaded the full index and earlier matrix, all four R01 sheets and all four R05 sheets, the paired R01 clips, final R02 clip, paired R03 clips including the later final after clip, paired R05 clips, five latest after transcripts and the original paired restart transcript. Extracted five spaced frames per video with ffmpeg, inspected those frames, and separately inspected the R05 last frame and R01 first frame. The R05 last frame visibly contains the command-finished notification and completion reply; the spaced frames alone missed its late appearance. R01 Details remains open at the recording's end; closing is not proven. R02 clears its row; R03 shows Run interrupted / Stopped by user, while its transcript proves the hidden roster clears. The sheets show the acknowledged duration-number changes; no additional layout regression was visible. No new runtime capture was made.

**Freshness checks.** Compared each capture revision to the head with `git diff <capture> HEAD -- <relevant paths>`. Since the latest runtime/Stop capture, the adapter diff touches Fiber import/three-second delay, adopted ownership/event handling, held-shell end tombstones, Stop scheduling, unload cleanup and the second busy check. `syncRoster`, `trackShellEnd`, `takeReports/onWake/offerWake` for ordinary known-root completion and recovery/notification/presentation/Details source are unchanged. Since the earlier static captures, launch validation and deeper unknown-child handling also changed; the later valid-id R01/R05 runtime confirmations avoid treating invalid-id or unknown-child cases as proven by those static pictures. Checked merged-main consumer diffs too: shared presentation/Details/recovery/notification and relevant runtime paths are unchanged; the web ChatView merge changes concern minimap context, and orchestrator changes concern queued restart/cohort cancellation, not the simple successful root fixtures. The remote main may advance during an audit; this report is pinned to the requested head and its actual merge base, not a claim about a later main build.

FRICTION: forge metadata | GitCafe PR metadata lagged behind the published branch and still named the older capture head; audited the brief's head after confirming it with git ls-remote | current head metadata would remove ambiguity.
FRICTION: artifact download | Python's default urllib request was rejected with HTTP 403; curl downloaded the same public artifacts successfully (python3 was available; python alias was absent) | use curl for these artifact URLs.
VERDICT: INSUFFICIENT R02 and R03 after recordings are stale on the current Stop implementation; disclose the distinct R23 retained-shell outcome
