# Delegated follow-up proof

Real web client, real server, fresh synthetic state per commit, headless Chromium at 1280 × 800 in the light theme. The scripted ACP agent makes real MCP calls; it does not insert task state or synthesize completion wakes.

1. Apply `proof-harness.patch` in a current main worktree with the scenario runner.
2. Copy `delegated-followup-waits.e2e.ts` to `scripts/scenarios/`.
3. Set `T3_PROOF_AGENT_PATH` to the absolute path of `delegation-replay.mjs`, and set `T3_SCENARIO_INHERIT_ENV=T3_PROOF_AGENT_PATH`.
4. Run `T3CODE_DEV_SEED=0 vp run scenarios:prove scripts/scenarios/delegated-followup-waits.e2e.ts --base b5c0ee56fa1134332503639a29b0bc1efa5add7c --head 43861e7fc3340b8d9c21b942e7324c5bca6ac5c6 --upload-command "ghdrop upload"` in a terminal/PTY.

The driver starts async child B, receives READY, queues B a follow-up, and has B start async C. C waits 40 seconds and replies CHECK; B ends its first follow-up turn with INTERIM. B then processes the real completion wake for 15 seconds and replies FINAL with CHECK. Parent A reads the original and follow-up task status while C runs and again during B's wake, then ends its turn. Its next turn must be the server's automatic delivery of the follow-up result. The scenario visits B to capture C running and B's final answer, and checks that the parent receives FINAL exactly once with the original READY result intact.

Session files only restore the scripted actor and coordinate navigation and wake inspection. Asserted task states and delivered results come from the live server MCP calls and web UI.

The harness patch registers the scripted ACP provider and URL-encodes thread IDs in the navigation fixture. It does not change either app commit under comparison.

Proof prepared by gpt-6.1-sol through the Codex harness.
