# Recapture 3 driver notes

New source revisions: before feb9c6b8425efc05dd0d3b198999ef90e16fc62c, after c6b46f306c2a5c6e7d0b4eb9d83b275d658256cf. The consolidated report assigns every asset to its revision. Historical scripts are retained as reusable inputs; only successful result directories cited by the consolidated report are accepted evidence.

1. Create the two detached worktrees at the requested revisions and install dependencies. Start each using `T3CODE_DEV_SEED=0 vp run dev`; never seed from live userdata. `start-dev.py` tracks the process groups. Private startup logs and pairing credentials are not in this bundle.
2. Run `scripts/seed.py` for each side, then `start-browser.py`. `scripts/browser-driver.mjs` uses the locally generated pairing links and hosts a private local driver endpoint. `scripts/drive.py before|after <script>` executes one script in that browser context. Every capture script creates a timestamped output directory under the single scratch root.
3. Prepare synthetic long Showcase history through `prepare-long.js`, using real Replay adapter turns and held approval. `setup-browser.js` sets the panel setting, closes details and prints synthetic terminal content. Install `inspect-global.js` / `install-measurements.js` for the read-only React-state, item-size, geometry and post-mount ResizeObserver samplers. Keep their setup outside the recording.
4. Successful primary runs use `capture-r01.js`, `capture-r01-still.js`, `capture-r11.js`, `capture-r09-recorded.js`, `capture-r04.js`, `capture-r02.js`, `capture-r03.js`, `capture-r05.js`, `capture-r06-final.js`, `capture-r07.js`, and `capture-g01-harness.js`. Use the existing preparation helpers to hold the corresponding approval scenario and geometry. The report’s traces record actual starting content, height, working/follow states and actions. Later rows extend synthetic history; do not compare different rows' total content heights.
5. `capture-r09-recorded.js` preserves the successful recorded R09 driver with the 120 ms delay after clicking end. `capture-r09.js`, `-v2.js` and `-v3.js` show rejected subsequent attempts to require fully settled following during the short markdown interval. They are not accepted captures. R02’s extra size attribution uses `capture-r02-size.js` and the enriched item-size sampler.
6. `noise-reading.js` runs eight same-build released-reading/drag repetitions. `noise-contexts.js` uses six fresh browser contexts. Each static result requires two equal screenshots 500 ms apart. Normal motion is retained for the motion-subject reading experiment; the direct R05/R06/R07 repeats use reduced motion for stills.
7. `process.py` creates H.264 viewing copies plus lossless PNG archives. `select-r01.py` and `select-r02.py` select equal painted viewport heights; the latter reads the recorded reopen frame index. `measure-painted.py` locates unchanged glyph/image templates independently in PNG pixels and reports unmeasurable occluded markers explicitly. `diffs-current.py` computes unmasked zero/16-channel-threshold comparisons. `build-ro.py` retains every observer delivery; `build-consolidated.py` also translates deliveries and action marks onto each video's clock.
8. `upload.py` uses only `ghdrop upload -m` and saves exact stdout. No private startup logs, browser credentials, databases or raw setup responses are uploaded. The final report includes the exact upload output. `cleanup.py` stops only process groups captured at spawn; the two worktrees are removed with literal paths after all accepted captures are uploaded.

The worktrees and process groups have now been removed/stopped. Recreate them to rerun. The source PNG archives and traces allow auditing without rerunning a provider.

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