# Boundary proof driver

The final evidence uses two actual Electron builds, one per commit, each with a fresh database and separate Electron profile. Both have one synthetic project and one UI-composed user message: a title line followed by 120 numbered lines. The replay turn finishes with `first fixture turn complete`; Stop is not raced against replay startup or completion.

1. Install each checkout with `vp i`. Electron's installer is `node apps/desktop/node_modules/electron/install.js`.
2. Run `prepare-fixture.cjs <checkout> <synthetic-project-directory>` once per fresh home. It creates only synthetic data and configures the free replay provider, which bundled desktop dev does not register automatically.
3. In each checkout start `T3CODE_DEV_SEED=0 T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD=0 T3CODE_DESKTOP_REMOTE_DEBUGGING_PORT=<port> XDG_CONFIG_HOME=<separate-profile-directory> headless-desktop vp run dev:desktop`. Use a separate CDP port per app. Finish onboarding without importing any history. Add the synthetic project with title `Boundary demo` through the UI or the CLI shown in the fixture script.
4. Run `PORT=<port> node setup-ui.cjs <checkout>`. It sends the message through the real composer, waits for replay completion, expands it, opens Browser and example.com, and enables the responsive toolbar.
5. Run `PORT=<port> node normalize.cjs <checkout>` to set the same title and 1024x768 responsive size. App window is 1100x780, light theme, DPR 1.
6. Run `EVIDENCE_TIME=<same-ISO-time-for-both-sides> node capture.cjs <checkout> <port> <new-output-directory> <before|after>`. The clock override fixes Date only so relative age labels do not change during the capture; timers and interactions run normally. The actual captured value was 2026-11-12T10:30:30Z.
7. Run `node completion.cjs <checkout> <port> <output-directory> <before|after>` for the completed-state screenshot and synthetic transcript hash.

Each still is saved only after screenshots 500 ms apart match byte for byte. Videos contain screenshots of the actual app at their captured timestamps; an evidence-only caption and red pointer marker identify the scripted action. They are absent from the stills. Screenshots that time out during a recording are retried at the next sample. Final recordings had no frame retries.

Both sides start each drag with scrollTop=2600 and the same dimensions. At x=615 a 200px upward drag tests the right edge of the visible chat thumb. At x=611 the same drag checks the thumb's left edge. At x=619 an 80px rightward drag tests the panel boundary; x=625 tests the viewport rail. The driver resets layout through the actual controls between actions. It then enables CDP touch emulation, verifies the coarse CSS path, and performs an actual CDP touch drag from x=617. This is emulation, not physical touchscreen hardware.

No tests are used as proof. The measurements are observations made during the captured real-app interactions. AI-assisted; verified with the tests and tools listed above.
