# Portable provider handoff proof

Real web app, Chromium incognito, 1280x800 CSS pixels, light theme, device scale 2.
Base: 25c5032b3b194c1a9601bbfa3e612a7516e650a7
Head: 4cef96c259b3a1a99c41ab341f291525da0fc296
Each checkout used vp i and its own fresh .t3, with T3CODE_DEV_SEED=0.

## Seed (identical per checkout)

Create a scratch git project containing one empty commit, then from the checkout:

```sh
T3CODE_DEV_SEED=0 T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD=0 vp run dev --no-seed
node apps/server/src/bin.ts project add "$SCRATCH_PROJECT" --title 'Portable handoff' --base-dir .t3
node apps/server/src/bin.ts thread start "$SCRATCH_PROJECT" 'Make a todo list' --title 'Detached history' --provider devReplay --model todo-list --wait --json --base-dir .t3
```

Both runs completed with `todo list fixture complete`.
Pair the browser and open the returned thread by its environment/thread URL.
Click its sidebar Settle thread button (inside the thread row).
Stop the dev server through the retained shell session (Ctrl-C); confirm its listener is gone.
Verify session status stopped and provider-session-binding count zero.
Apply fixture.py (the equivalent SQL UPDATE was applied during capture).
Restart the same checkout with the same dev command. Open a fresh incognito tab,
newly paired, then navigate to the thread by its URL. Hide Thread details so no
host label appears in captures.

## Browser interactions recorded

1. Click the composer `Plan and reads` model button.
2. Hover and click the Codex rail button.
3. On base: click is blocked; Codex and Claude have disabled=true and the accessible
   label `Codex is unavailable in this thread. Start a new thread to switch providers.`
   No forced click, RPC switch, or send bypass was attempted.
4. On head: both are enabled; clicking Codex lists its models.
5. Click GPT-6-Luna, type the following into the composer, and click Submit message:
   `What was the last assistant sentence in our earlier conversation? Reply with that sentence only. Do not run tools.`
6. Head completed with `todo list fixture complete`; the UI displays
   `Context handoff Plan and reads → 6 Luna`.

Base and head used the same fixture and interactions up to the blocked base click.
Head's next send used real Codex GPT-6-Luna, since a generated answer dependent on
prior history was needed to demonstrate history delivery. Replay seeded the history.
Screenshots selected for evidence were checked with two captures at least 500ms
apart with ImageMagick AE=0. Recordings were inspected via sampled contact sheets.

## Limits

The missing native reference was made offline by hand, matching triage; this proof
does not establish a natural user flow producing that state. Mobile and the
Electron shell were not run. No code changes, tests, commits, or forge writes.
