# Rebuild the synthetic evidence

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

Use a fresh browser profile for each revision and keep that profile/origin across reloads. No real T3 database is a seed. The two tested revisions are [b8c2cfad6b](https://git.cafe/pingdotgg/t3code/commit/b8c2cfad6b3363c4da144a859073b41ec77579ab) and [34e0e58371](https://git.cafe/pingdotgg/t3code/commit/34e0e583712d760bf3dc5d5ea4772a4e4ec6345f).

1. Create a checkout for each revision next to the main checkout. Run `vp install` in each. Run `seed.sh /absolute/scratch/run-<timestamp>-<revision>` to create an independent `repo-fixture` for each side. Run `seed-optional.sh <fixture-repository>` before the optional rows. The files and commit order are identical on both sides; absolute scratch paths differ.
2. Start one checkout at a time with `T3CODE_DEV_SEED=0 NODE_OPTIONS=--require=<absolute-path>/freeze-clock.cjs vp run dev`. Read server and web ports from its dev-runner log. Pair a dedicated T3 preview browser through that server's startup pairing URL. Never publish that URL or the logs. Never set VITE_HTTP_URL/VITE_WS_URL. Stop only captured process IDs, or verified port owners whose `/proc/<pid>/cwd` is this checkout.
3. Resize the browser to 1600 by 1000 CSS pixels, dark. Evaluate `browser-prelude.js` after pairing and every full navigation. This freezes wall time and suppresses animations/transitions/caret; it does not alter monotonic time or timer scheduling. The preview tools lack a reduced-motion media override; CSS suppression was used instead.
4. Sidebar Add project → Local folder → Enter path. Type the generated `repo-fixture` path and Enter. In the new draft select the dev Replay provider and its neutral **Multi turn** fixture. Keep any private provider identifiers outside recordings. Send `Reply with the single word ok.` and wait for `first fixture turn complete`. Rename to Thread A using the thread actions menu. Turn off the thread details panel.
5. New thread in repo-fixture → send `Reply with the single word yes.` → wait for the same completed Replay response → rename Thread B. Return to A. Toggle right panel → Files → math.ts. Hide the file explorer after opening. The captured desktop panel uses its default 540 CSS pixel width.
6. The `capture-driver.mjs` module accepts the T3 preview tool facade and a tab ID. Its `run` method replays the `minimum` plan in `action-plans.json`; it creates real comments through the gutter/textarea/Comment controls. The plan records A L2, B initially empty, B L6, B→A→B→A, normal reload, then actual math.ts tab closure/reopen. The Ctrl+R attempt at 66 seconds did not navigate in this headless browser; the explicit `location.reload()` at 84.5 seconds is the recorded normal reload. No comment is recreated between a transition and its result.
7. A settled capture awaits fonts and idle resources, saves two full-surface frames 500 ms apart, and retains the frame only if PIL ImageChops finds no changed pixel. The 1440 by 1000 light key frame is A after B→A, with no new comment submission. `make-diffs.py` creates absolute RGB differences amplified 32 times at zero threshold, and a second diff highlighting maximum-channel differences greater than 16/255.

## Optional recording setup and plans

`action-plans.json` includes the actual per-revision action logs. The driver accepts each optional action list after the corresponding setup below. The original logs have times of action completion for optional rows; minimum-plan times are dispatch times. Failed scroll lookup in O4 has no app effect and can be omitted. The fixture is 12 short lines and requires no vertical scroll.

- **O1/O2:** Create a completed Replay thread named Optional proof. Open math.ts with the explorer hidden. Replay afterO1O2. On the baseline enable `skipUnavailableDelete`: a missing restored block has no Delete control, so the driver records that step as unavailable. It does not reseed a block. The baseline successfully deletes the newly added Temporary block at about 89s. The original restored math comments have no inline blocks or Delete controls, so baseline delete-to-empty for those comments is unverified; its final chips retain those original math comments. The fixed recording exercises actual restored-comment deletion and ends with only the other-file chip. O1 capture follows close/reopen; O2 follows deletion/cancel/keyboard submit and a final close/reopen.
- **O3:** Create a completed Replay thread named Edit proof with the original math.ts. Open the source. The plan adds L2, inserts a first blank line using actual editor input, lets save settle, switches through B and back, captures L3, then attempts Ctrl+Z. Both captures observed no Undo change; editor instance identity was not instrumented, so history preservation is unverified. After recording, remove the first blank line in the editor and confirm the saved fixture returns to the original before O4.
- **O4:** Create a completed Replay thread named Theme proof with original math.ts. Replay the multiline L2 comment, dark→light appearance change, 900 by 900 resize, explorer open, word-wrap off/on. At 900 pixels the file view can cover the composer; use the desktop frame to judge the chip. The recording also contains an outside click closing the narrow sheet on the fixed side. The settled narrow still was retaken with the file view open and explorer hidden, giving about 377 CSS pixels of source.
- **O5:** In Theme proof open notes.md, source mode, explorer hidden, 1600 by 1000 dark. Replay afterO5: L2 comment, rendered Markdown, back to source. Rendered mode intentionally contains no inline source annotation.
- **O6:** Start a new unsent draft, with no provider turn. Turn off details, open Files/math.ts. Replay afterO6, which adds the draft L2 comment and closes/reopens the actual file tab.

The optional O3–O6 comparison stills were retaken with the main sidebar hidden on both sides to remove equal-time thread ordering differences. The O4/O5 settled stills were taken after both comments existed: math.ts L2 and notes.md L2 chips both remain, while only the selected file's block appears. The original recordings keep the sidebar visible and show creation and interactions. They contain synthetic fixture ordering differences, not production UI changes.

O3 also has a short supplemental paired recording on a fresh completed thread named Remap proof. With the sidebar hidden, add L2, insert a first blank line, allow save to settle, navigate to B's actual route and back, then capture the restored L3 position. These full navigations remount the page; the original O3 recordings cover the sidebar target-switch path. Supplemental stills use this identical fresh setup and only differ in the restored block. No hidden state injection is used.

After evidence capture, both temporary checkouts and all owned servers/tabs were removed. Uploaded originals remain in the assigned private scratch directory for the lead. No source edits or repository commits were made.
