# Cold conversation handoff reproduction

Environment: web development app, Linux, shared preview browser, 1280 x 800 CSS pixels, light theme. Two isolated checkouts and fresh per-checkout databases. No live database was copied.

The scenario fixture only starts replay-provider threads. It cannot create the required Claude provider thread or its historical token usage, so this reproduction uses an offline projection fixture for the starting UI state. Subsequent model selection, send, handoff, compaction, and provider runs use the real app and server.

For each checkout:

1. Install with `vp i`, then start `T3CODE_DEV_SEED=0 vp run dev`.
2. Create an empty git repository as a synthetic workspace, with an empty initial commit.
3. `node apps/server/src/bin.ts project add "$WORKSPACE" --title 'Compaction demonstration' --base-dir .t3`
4. `node apps/server/src/bin.ts thread start "$WORKSPACE" 'Review the project' --title 'Cold conversation' --provider devReplay --model multi-turn --wait --json --base-dir .t3`
5. Stop the dev server. Run `SOURCE_MODEL="$CLAUDE_MODEL" python3 seed.py "$CHECKOUT"`, where CLAUDE_MODEL is the selected supported Claude model identifier. The seed changes the synthetic conversation to Claude, gives it 250,000 used tokens and a historical timestamp with an expired five-minute cache TTL, and sets idle compaction to onReturn. It does not rewrite the event log.
6. Restart `T3CODE_DEV_SEED=0 vp run dev`. Pair the browser and open Cold conversation. Close the thread details panel to keep the machine label out of captures.
7. Confirm Compact 250k / Compact and send is offered.
8. Open the model picker, search Codex, select the same supported Codex model on both sides, and type `keep going` in the composer. Click the editor to dismiss the model menu. Send with the composer's primary send action (Enter or its button).
9. Observe: base retains the offer and runs /compact, queues keep going, then shows Context compacted before sending. Head removes the offer and sends keep going directly through the context handoff.

Model label text is blurred in captures for privacy; provider icons and behavior remain visible. The head video is an excerpt beginning at the Codex picker and includes model selection and send. The base recording includes the initial offer, model switch, queued message, and compaction. The base follow-up was stopped after the compaction and original-message dispatch were visible. The head follow-up completed with a response explaining the synthetic workspace is empty.

Each final still was selected only after two screenshots at least 500 ms apart were byte-identical in pixel comparison. Recordings were inspected using extracted frames and contact sheets.

AI-assisted; verified with the tests and tools listed above.
