# Handoff history proof

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

Base bfec2754b8bc4a6451cfd21cb128545ab138b795, head c2c187dc6750da2ae6eb2f782b61adde506dbf96.

Run each checkout with dependencies installed and a different fresh HOME_DIR (never a live T3 home):

```sh
T3CODE_DEV_SEED=0 node scripts/scenarios/start-app.ts web "$HOME_DIR" 127.0.0.1 "$PORT"
```

Place driver.cjs and agent.cjs together, then use the same commands on each checkout:

```sh
node driver.cjs "$CHECKOUT" "$HOME_DIR" "http://127.0.0.1:$PORT" init
# Open HOME_DIR/pairing-path on this origin in the web client, then open ACP history handoff.
# Start recording before these three commands:
node driver.cjs "$CHECKOUT" "$HOME_DIR" "http://127.0.0.1:$PORT" away
node driver.cjs "$CHECKOUT" "$HOME_DIR" "http://127.0.0.1:$PORT" back
node driver.cjs "$CHECKOUT" "$HOME_DIR" "http://127.0.0.1:$PORT" check
```

The init action creates a git project through the CLI and registers a local acpRegistry peer through server.updateSettings. It sends 13 completed turns through the CLI. The synthetic peer emits approximately 41 KB of English command output per turn and reports neither usage_update nor a context window. On both commits T3 persists 13 command outputs totalling 104,364 characters (all ASCII). The peer persists its per-session prompt counters and original session id independently of T3; its final reply compares the actual ACP session id with that original id.

The away/back actions use the application's orchestration RPC to change provider selection. Away sends and completes one Replay (dev) multi-turn prompt. Check sends the final ACP prompt. The same real server, ACP adapter, orchestration, persistence, and web UI paths run on both commits. No unit or integration test supplies the verdict.

Environment for both captures: Linux web development app, shared preview Chromium browser, light theme, 1280 x 800 CSS viewport, fresh synthetic database, no copied data. Still captures were checked for pixel equality across screenshots more than 500 ms apart. Recordings cover provider switching and the final reply; frames were visually inspected before upload.

Observed base: REPLACEMENT, native prompt count 1; server warning reason handoff_budget_exhausted and errorTag ContextHandoffBudgetError. The old native conversation still has 13 prompts and a new conversation receives the final prompt.

Observed head: ORIGINAL, native prompt count 14; the original native conversation receives the final prompt and no recovery warning appears.

The scenario file is the attempted runner reproduction, not the successful proof: two runs stopped on harness setup/navigation or sidebar click targeting before provider switching. The manual driver and captures are the evidence.
