===== METADATA / COMMANDS ===== Worktree: /home/ubuntu/wt/pr-23840 HEAD: 1fba4795e3342b9a4db956f25391bde81e0b0fab Merge-base with fetched origin/main: ef92441313da327139df75daa8f723c0f42348f6 All production code on the before side matches the merge-base. Only the final regression test file is overlaid as the unchanged test driver. Install: vp install Green cwd: /home/ubuntu/wt/pr-23840/apps/server Green command: vp test run src/orchestration-v2/Adapters/CodexAdapterV2.test.ts src/orchestration-v2/ProviderContinuationService.test.ts src/orchestration-v2/ProviderRuntimeRecoveryService.test.ts Green exit: 0; final adapter and final test file; 104 passed. Base baseline: same command/cwd, both changed files temporarily replaced by merge-base contents; 100 passed, exit 0. Red: same command/cwd, merge-base adapter and unchanged final-head regression test file. Exit 1; 4 failed, 100 passed (104); two assertions expected 1/actual 0 and two existing 120-second missing-continuation timeouts. Head server: T3CODE_DEV_SEED=0 vp run dev:server --home-dir /tmp/ev-23840/head-home Before server: T3CODE_DEV_SEED=0 vp run dev:server --home-dir /tmp/ev-23840/before-home Both used actual server port 13852, host 127.0.0.1. Recorded owners: head 784938; before 793748. Checked each /proc/PID/cwd is this worktree's apps/server before SIGTERM. Also terminated their own captured Node watch parents 784929/793742 so file restoration cannot restart a server. Principal head driver: node /tmp/ev-23840/case.mjs late /tmp/ev-23840/late.prompt Principal before driver: EV_RUN=before node /tmp/ev-23840/case.mjs late /tmp/ev-23840/late.prompt The EV_RUN switch selects only the fresh T3-home auth cookie/log; request/prompt/model bytes are unchanged. It does not change provider behavior. Runtime driver uses authenticated real WebSocket RPC, then closes. It never calls native wait_agent, never sends a second input to the principal thread, and reads only fresh /tmp T3 databases via mode=ro. Additional head case driver invocations use case.mjs with nested/foreground/later/interrupted/resume/childinterrupt/barrier and the corresponding .prompt file. Later root2, interrupt and recovery requests are recorded in their driver transcripts and the persisted messages/events. Supplemental failed-child proof is synthetic replay only, copied/transformed in /tmp without changing repository code. make-focused.py records the exact transformation. It ran against head before the before-side source swap. Supplemental command cwd apps/server: vp test run --config /tmp/ev-23840/focused.config.ts -t 'EV23840 focused replay' Supplemental exit 0; 1 passed, 79 skipped. This does not claim a real Codex failed-child execution. No real T3 database was read, copied, opened or seeded. Only real Codex credentials/config were used by the real CLI; no credentials, pairing URLs, injected instructions or reasoning are published. Additional cancelled-parent late-delivery proof: fresh /tmp/ev-23840/gate2-home, same final head; real Codex native executable through the external codex-gate stdio wrapper. The wrapper holds only real native child terminal/subAgentActivity completion lines, never alters or synthesizes them, and records each raw-line SHA256 before and after release. Native child actually finished before interruption; its completion delivery was deliberately delayed until after persisted parent interruption. This is a real runtime transport-ordering fixture, not a claim of naturally occurring delayed work. Gate server: T3CODE_DEV_SEED=0 vp run dev:server --home-dir /tmp/ev-23840/gate2-home. Port owner 799149; captured Node watch parent 799143. An initial wrapper attempt in gate-home hit an existing control socket left by the provider catalog probe, causing two failed starts before any children existed. Corrected wrapper uses a unique socket per process; fresh gate2-home started successfully. Those failed starts are not native-child failure evidence. Gate case: EV_RUN=gate2 node /tmp/ev-23840/case.mjs cancelgate /tmp/ev-23840/cancelgate.prompt Gated driver: EV_RUN=gate2 node /tmp/ev-23840/gated-cancellation.mjs. Uses filesystem events and read-only SQLite to await actual held-completion and persisted interrupted-root milestones, then releases byte-identical native frames over a local control socket. No timing sleep establishes the observation boundary. Post-gate boundary: a real eligible barrier child wakes another root through the same continuation queue; after barrier completion the interrupted root still has one run and no server-created continuation. An explicit fresh user recovery turn is then sent and must complete. Final cleanup verification before publication: all recorded server owners, their own Node watch parents, and captured native Codex child PIDs are exited (process-cleanup.json); port 13852 has no listener. Repository source restored with matching SHA256s and empty git status. No commits, pushes, merges, reviews, comments, assignments or PR watching were performed. ===== GREEN: FINAL HEAD (exit 0) ===== note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /home/ubuntu/wt/pr-23840/apps/server Test Files 3 passed (3) Tests 104 passed (104) Start at 21:36:31 Duration 20.28s (transform 43%, import 39%, tests 17%, setup 1%) Import 847 modules were evaluated 2051 times · 7.77s total, 39% of tracked time ~4.56s faster with isolate: false — shared modules are evaluated once per worker instead of once per file learn more: https://vitest.dev/guide/improving-performance#test-isolation ===== BASELINE: BOTH MERGE-BASE FILES (exit 0) ===== note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /home/ubuntu/wt/pr-23840/apps/server Test Files 3 passed (3) Tests 100 passed (100) Start at 21:46:03 Duration 15.13s (import 62%, transform 21%, tests 15%, setup 2%) Import 847 modules were evaluated 2051 times · 9.09s total, 62% of tracked time ~5.33s faster with isolate: false — shared modules are evaluated once per worker instead of once per file learn more: https://vitest.dev/guide/improving-performance#test-isolation ===== RED: MERGE-BASE PRODUCTION, UNCHANGED FINAL REGRESSION DRIVER (exit 1) ===== note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /home/ubuntu/wt/pr-23840/apps/server stdout | src/orchestration-v2/Adapters/CodexAdapterV2.test.ts > CodexAdapterV2 post-settle continuation > wakes the parent when a native child finishes after the parent's turn [21:46:34.549] ERROR (#7193): Error [AssertionError]: expected [] to have a length of 1 but got +0 at /home/ubuntu/wt/pr-23840/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts:4953:16 { actual: 0, expected: 1, showDiff: true, [cause]: undefined } stdout | src/orchestration-v2/Adapters/CodexAdapterV2.test.ts > CodexAdapterV2 post-settle continuation > preserves a subagent result across a trailing empty final and resume [21:50:34.703] ERROR (#7359): Error [AssertionError]: expected [] to have a length of 1 but got +0 at /home/ubuntu/wt/pr-23840/apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts:5379:16 { actual: 0, expected: 1, showDiff: true, [cause]: undefined } ❯ src/orchestration-v2/Adapters/CodexAdapterV2.test.ts (80 tests | 4 failed) 242366ms ❯ CodexAdapterV2 post-settle continuation (69) × wakes the parent when a native child finishes after the parent's turn 12ms × names a late child spawned without a prompt in its wake 120006ms × wakes the root only when its direct child finishes, not a grandchild 120102ms × preserves a subagent result across a trailing empty final and resume 14ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 4 ⎯⎯⎯⎯⎯⎯⎯ FAIL src/orchestration-v2/Adapters/CodexAdapterV2.test.ts > CodexAdapterV2 post-settle continuation > wakes the parent when a native child finishes after the parent's turn AssertionError: expected [] to have a length of 1 but got +0 - Expected + Received - 1 + 0 ❯ src/orchestration-v2/Adapters/CodexAdapterV2.test.ts:4953:16 4951| ); 4952| assert.equal(harness.subagentUpdates().at(-1)?.subagent.status… 4953| assert.lengthOf(harness.continuationRequests, 1); | ^ 4954| assert.include(harness.continuationRequests[0]?.detail, "NATIV… 4955| assert.equal(harness.continuationRequests[0]?.delivery, "messa… ❯ ~effect/Effect/successCont ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:1422:28 ❯ ~effect/Effect/evaluate ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/core.ts:585:30 ❯ FiberImpl.runLoop ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:654:41 ❯ FiberImpl.evaluate ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:595:23 ❯ FiberImpl.evaluate ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:589:27 ❯ Array. ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:1025:13 ❯ MixedSchedulerDispatcher.runTasks ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/Scheduler.ts:254:17 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/4]⎯ FAIL src/orchestration-v2/Adapters/CodexAdapterV2.test.ts > CodexAdapterV2 post-settle continuation > names a late child spawned without a prompt in its wake Error: Test timed out in 120000ms. If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". ❯ src/orchestration-v2/Adapters/CodexAdapterV2.test.ts:4975:6 4973| }; 4974| 4975| it.effect("names a late child spawned without a prompt in its wake",… | ^ 4976| Effect.scoped( 4977| Effect.gen(function* () { ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/4]⎯ FAIL src/orchestration-v2/Adapters/CodexAdapterV2.test.ts > CodexAdapterV2 post-settle continuation > wakes the root only when its direct child finishes, not a grandchild Error: Test timed out in 120000ms. If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". ❯ src/orchestration-v2/Adapters/CodexAdapterV2.test.ts:5047:6 5045| ); 5046| 5047| it.effect("wakes the root only when its direct child finishes, not a… | ^ 5048| Effect.scoped( 5049| Effect.gen(function* () { ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/4]⎯ FAIL src/orchestration-v2/Adapters/CodexAdapterV2.test.ts > CodexAdapterV2 post-settle continuation > preserves a subagent result across a trailing empty final and resume AssertionError: expected [] to have a length of 1 but got +0 - Expected + Received - 1 + 0 ❯ src/orchestration-v2/Adapters/CodexAdapterV2.test.ts:5379:16 5377| assert.lengthOf(harness.terminalEvents(), 1); 5378| // The first child turn finished inside the root turn; only th… 5379| assert.lengthOf(harness.continuationRequests, 1); | ^ 5380| assert.include(harness.continuationRequests[0]?.detail, "CODEX… 5381| }).pipe( ❯ ~effect/Effect/successCont ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:1422:28 ❯ ~effect/Effect/evaluate ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/core.ts:585:30 ❯ FiberImpl.runLoop ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:654:41 ❯ FiberImpl.evaluate ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:595:23 ❯ FiberImpl.evaluate ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:589:27 ❯ Array. ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:1025:13 ❯ MixedSchedulerDispatcher.runTasks ../../node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/Scheduler.ts:254:17 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/4]⎯ Test Files 1 failed | 2 passed (3) Tests 4 failed | 100 passed (104) Start at 21:46:28 Duration 252.10s (tests 96%, import 3%, transform 1%) ===== SUPPLEMENTAL FAILED CHILD: REPLAY ONLY (exit 0) ===== note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /tmp/ev-23840 stdout | focused-failed.test.ts > CodexAdapterV2 post-settle continuation > EV23840 focused replay: failed direct child offers one message_text wake EV23840_FOCUSED_FAILED_CHILD [{"threadId":"thread-codex-resume-subagent","providerThreadId":"provider-thread:provider:codex:native-thread:native-codex-resume-thread","driver":"codex","detail":"Subagent failed: /root/resume_agent\n\nResult:\nEV23840_FAILED_CHILD_PARTIAL_DETAIL","delivery":"message_text","notification":{"source":{"kind":"subagent","childThreadId":"thread:provider:codex:native-thread:native-codex-resume-child-thread"},"outcome":"failed","summary":"Subagent \"/root/resume_agent\" failed"}}] ↓ focused-failed.test.ts > CodexAdapterV2 context usage > uses the current context rather than cumulative processed tokens ↓ focused-failed.test.ts > CodexAdapterV2 assistant message streaming > flushes buffered text synchronously before item and turn completion ↓ focused-failed.test.ts > CodexAdapterV2 runtime policy > derives concrete Codex turn policies from every T3 runtime mode ↓ focused-failed.test.ts > CodexAdapterV2 runtime policy > sends MCP app model context as untrusted Codex context ↓ focused-failed.test.ts > CodexAdapterV2 native protocol logging > logs decoded app-server frames once with credentials redacted ↓ focused-failed.test.ts > CodexAdapterV2 rollback mapping > derives native rollback count from durable provider turns ↓ focused-failed.test.ts > CodexAdapterV2 fork boundary > resolves the selected provider turn to an inclusive native fork boundary ↓ focused-failed.test.ts > CodexAdapterV2 fork boundary > keeps the rollback-count fallback when the boundary turn lacks a native id ↓ focused-failed.test.ts > CodexAdapterV2 session initialize > sends one initialize when two threads start on a fresh session at once ↓ focused-failed.test.ts > CodexAdapterV2 session initialize > retries initialize after a failed handshake ↓ focused-failed.test.ts > CodexAdapterV2 session initialize > completes the handshake after a caller is interrupted mid-initialize ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > delivers native history with supported app-server protocol ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > delivers native history with unsupported app-server protocol ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > delivers native history with invalid app-server protocol ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > adds the session MCP server without replacing launch-argument servers ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > replays historical and dotted MCP config while enforcing other thread config ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > waits for native start before interrupting an acknowledged queued turn ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > keeps an asynchronous Codex question actionable after the turn completes ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > stops asking for commands the user allowed for the session ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > preserves T3 context on the wire and restores it after compaction ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > compacts Codex with the native RPC and completes the compaction turn ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > settles unfinished compaction on failed without changing completed compaction ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > settles unfinished compaction on interrupted without changing completed compaction ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > settles unfinished compaction on Stop without changing completed compaction ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > resumes a provider thread without requesting or decoding its history ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > recovers archived-session errors ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > preserves missing-thread errors ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > propagates unarchive missing-thread err… ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > does not retry archived errors twice ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > resolves retryable app-server errors on resumed provider activity ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > retains Codex reasoning parts when the turn is completed ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > retains Codex reasoning parts when the turn is interrupted ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > suppresses a trailing empty final answer after a non-empty final answer ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > keeps commands interrupted after native thread closure (persistent tool: false) ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > keeps commands interrupted after native thread closure (persistent tool: true) ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > stops a command after root completion when termination returns true ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > stops a command after root completion when termination returns false ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > stops a command after root completion when termination returns still_running ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > stops a command after root completion when termination returns thread_unloaded ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > stops a completed run's background command without a client-supplied run ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > Stop ends a background command no Codex process tracks any more ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > contains commands that start before and after the interrupt response ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > contains descendant commands and keeps Stop authoritative ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > interrupts descendants that start after the initial Stop snapshot ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from usage evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from replacement evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from late-reset evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from matching-details evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from deferred-reset evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from retry evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from exhausted-429 evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from exhausted-500 evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > classifies Codex terminal failures from chatgpt-workspace-limit evidence ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > honors completion HTTP status from 500 to 429 (retry: false) ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > honors completion HTTP status from 429 to 500 (retry: true) ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > honors completion HTTP status from 429 to null (retry: false) ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > honors completion HTTP status from 429 to null (retry: true) ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > terminalizes running command items before turn.terminal on failed turns ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > captures an MCP app's resource and holds the turn open until it lands ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > terminalizes leftover nonpersistent dynamic tools when a completed turn never closes them ✓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > EV23840 focused replay: failed direct child offers one message_text wake 52ms ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > names a late child spawned without a prompt in its wake ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > wakes the root only when its direct child finishes, not a grandchild ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > leaves a late child's result to the root's next turn when one is running ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > keeps model/rerouted child metadata when an older lookup finishes later ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > preserves a subagent result across a trailing empty final and resume ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > normalizes subagent shutdown without losing its lifecycle ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > normalizes subagent activity-completed without losing its lifecycle ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > normalizes subagent late-activity-completed without losing its lifecycle ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > normalizes subagent stale-running without losing its lifecycle ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > normalizes subagent duplicate-completed without losing its lifecycle ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > fails honestly when rolling back a legacy Codex thread ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > falls back to fork-local thread/revert on paginated history when the source turn lacks a native reference ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > native goals > keeps a /goal run open across the turns Codex continues on its own ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > native goals > settles a run held for the next goal turn when Stop arrives in between ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > native goals > moves a Stop that names an earlier goal turn to the turn Codex continued with ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > native goals > pauses an active goal before Stop interrupts its turn ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > Codex file-change approval paths > answers without waiting for late paths or borrowing another item's paths ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > Codex file-change approval paths > matches file paths to items approved out of order ↓ focused-failed.test.ts > CodexAdapterV2 post-settle continuation > Codex file-change approval paths > keeps every path of a completed multi-file patch Test Files 1 passed (1) Tests 1 passed | 79 skipped (80) Start at 21:50:54 Duration 10.03s (transform 72%, import 27%, tests 1%) ===== PROOF-ONLY ASSERTIONS ===== PASS head and merge-base identity PASS red exact exit/result PASS green exact result PASS source restored clean PASS principal strict ordering PASS principal native relationship PASS principal exactly one external prompt and one server delivery PASS principal exact durable child text PASS principal parent consumes result PASS principal native spawn evidence PASS principal no native wait/sleep PASS before same prompt PASS before no wake after observation boundary PASS foreground child completes during active root PASS foreground no extra wake and native result consumed PASS later child completes during active root PASS later no extra wake and native result consumed PASS nested intermediate terminal boundary PASS nested later FIFO boundary before direct completion PASS nested exactly one later direct wake PASS resume correct distinct result once each PASS interrupted-parent no wake before recovery boundary PASS explicit fresh recovery only PASS interrupted child with settled root PASS focused failure-only evidence classified PASS all children terminal at final boundary PASS no pending/running effects PASS later eligible FIFO continuation processed PASS no duplicate runs after settling PASS gated runtime at final head PASS real frames released byte-identically PASS successful real child frame delivered after parent interrupted PASS server actually received released completed frame PASS late completed delivery does not resurrect parent PASS gated later FIFO observation boundary PASS gated terminal status and result retained PASS gated explicit recovery succeeds and only two root runs PASS gated no pending effects or active children PASS 38 proof assertions; no source correctness or merge-readiness review performed