# Session continuity proof

The same driver and browser actions ran against two isolated real servers, one at the base and one at the fix. Both started with T3CODE_DEV_SEED=0. Browser: Chromium, 1280 x 800 CSS pixels, light theme. Provider: real Claude Code 2.1.322. No replay provider or automated test supplied the evidence.

1. In each checkout, run `vp i`, then `T3CODE_DEV_SEED=0 vp run dev`.
2. Choose a new output directory for each run. Run `PROOF_PROVIDER_MODEL=<configured-provider-model> python3 driver.py <checkout> <output> setup`. It creates a synthetic git project, registers it through the real CLI, and completes alpha and beta turns.
3. Run `python3 driver.py <checkout> <output> remove`. It removes only the alpha assistant response from the native JSONL and remembers the original native session ID.
4. In the web client, open Session continuity proof, expand the beta message, choose Edit from here, and choose Revert and keep changes.
5. Replace the restored composer text with `Reply with gamma only.` and submit. In this environment an automatic Background activity updated turn followed the failed gamma turn and failed against the same missing resume cursor. These are runs 3 and 4. This is the second rejected attempt in place of an explicit delta send; it happened on both commits.
6. Run `python3 driver.py <checkout> <output> state` and retain the output. Base has delivery pending; head has no delivery marker.
7. Run `python3 driver.py <checkout> <output> restore`. This writes the saved JSONL to the ORIGINAL session file, independently of the active binding.
8. In the web composer send `Reply with epsilon only.`. Both reply epsilon. Run `python3 driver.py <checkout> <output> state` again. Base changes the native session and creates full_thread_summary; head keeps its original native session and uses delta_since_target_last_seen.

The runtime transcripts contain the read-only database observations, selected server-log output, and a native JSONL check: epsilon exists in the base's new session but not its repaired original; on head epsilon exists in the original session.

The recordings show the real browser flow from rewind through failure and recovery. Final screenshots were taken twice, more than 500 ms apart, and were byte-identical before redaction. Captures crop out the workspace and composer controls; grey rectangles redact runtime model identifiers. No relevant error, prompt, response, or Context handoff label was changed. Both videos were decoded and their frames reviewed before upload.

No repository files were changed or committed. No tests were used as evidence.

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