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.
