# Rebuild the evidence

This packet compares [71ba6b374c](https://git.cafe/pingdotgg/t3code/commit/71ba6b374c0b0181130c0cc3b3d5aaa3387ada67) and [4e67414bc8](https://git.cafe/pingdotgg/t3code/commit/4e67414bc8739ddf2938bdce40b03a613a19172c). No app source changes, database copies, commits, or PRs were made during capture.

Use the uploaded scripts together in `/tmp/issue-lead-25676-r5/evidence-capture/`; scripts have this absolute root and the two checkout paths explicitly recorded. The archive includes every scratch `.mjs` and `.py` script, including diagnostic probes. Canonical drivers are listed below; probes are not required to rebuild the selected captures.

1. Create the before worktree at `/home/ubuntu/wt/issue-25676-before` at the base SHA and run `vp install`. Keep the existing after checkout at its pinned head.
2. On each side start `T3CODE_DEV_SEED=0 vp run dev --home-dir /tmp/issue-lead-25676-r5/evidence-capture/<side>-home` from that checkout. Use fresh homes created by each checkout's own migrations. Do not use an installed T3 database. Save stdout privately to `<side>-server.log`. Ports come from the real dev-runner line. `launch-server.py <side>` is a detached alternative which records its PID, process group and log path; point the expected `<side>-server.log` at that log when using it.
3. Run `node inspect.mjs <side>` to consume that fresh instance's pairing URL and save local browser auth. Auth files, pairing URLs, and server logs are private and intentionally excluded from uploads. The script contains no credential literal.
4. `node make-fixtures.mjs` writes the synthetic fixture JSON/Markdown and short draft. The supplied three draft files were already present; for a clean recreation make three synthetic Markdown files with those basenames in `/tmp/issue-lead-25676-r5/drafts/`. Their contents need only a synthetic heading; the table geometry depends on paths/basenames.
5. For each side run `node seed.mjs <side>`, `node seed-shapes.mjs <side>`, `node seed-boundaries.mjs <side>`, and `node seed-single.mjs <side>`. Codex `gpt-6.1-sol`, low effort, was used to echo the exact assistant Markdown; the context variants are real user messages sent through the normal app RPC with real uploaded attachments and synthetic context records. No direct database writes are used. F3 intentionally stops a deferred turn before a provider starts; the red interrupted status is seed scaffolding visible identically on both sides.
6. `node validate-seeds.mjs <side>` checks the provider replies byte for byte. The uploaded validation receipts include SHA-256 hashes. Retry a provider seed with a fresh thread/home if it deviates; do not capture a different reply.
7. Static drivers: `capture-static.mjs <side> classic|dark|expanded`; `capture-single.mjs <side> narrow|narrow-dark`; `capture-boundaries.mjs <side>`; `capture-extra.mjs <side> F3|F3-expanded|F5`; `capture-copy.mjs <side>` for the settled CSV Copied still.
8. Recordings: `record-flows.mjs <side> F7|F8-expanded|F9`; `record-fileflow.mjs <side> F8-collapsed`; `record-shapes.mjs <side> narrow|wide`. F9 is explicitly a production ChatMarkdown harness for precise token boundaries, with real observers and no CSS overrides. All other rows are in the real app.
9. Drivers create timestamped output directories. Read each `RUN` line for its location. `make-manifest.mjs` resolves the selected run logs; `compare.mjs manifest.json` creates both full-frame diffs. `inspect-artifacts.py` makes review montages and extracts video frames. The uploaded manifest records the exact selected original paths.

Environment: Linux x86_64, Playwright 1.60.0, headless Chromium 148.0.7778.96, DPR 1, no device emulation, browser zoom/font scaling 100%, en-US/UTC, reduced motion, frozen Date `2026-10-27T00:00:00Z`. Real timers continue so tooltip and 1200ms copy feedback can run. Viewports are 1440×1000 and 390×844 CSS pixels. Narrow recordings are padded to a 1440×1000 video canvas; the app itself remains 390×844 except the explicitly scripted resize excursion. Light/classic and dark/New design cover the two font-size rules, with light/New design at narrow width and an extra narrow dark smoke pair.

Before each accepted still, the driver waits for network idle and fonts, then requires two byte-identical PNGs 500ms apart. Recording uses serialized full-browser screenshots at a minimum 100ms interval, encoded with original elapsed-time durations at 30fps; frames repeat between samples. The recorder serializes its screenshot calls with still capture to avoid Chromium capture races. Earlier CDP and concurrent-screenshot runs were superseded while investigating apparent missing text in the inspection preview. Raw PNG header regions were intact and identical; the apparent omissions came from the inspection preview. Selected recordings use the final serialized method.

Diff0: absolute RGB channel differences multiplied by 255, saturating at 255; any one-level channel change is visible. DiffT: a pixel is magenta when its maximum RGB channel difference is greater than 8/255, otherwise the before image is dimmed to 15%. This is a visibility threshold, not a claim of equality. Only the zero-threshold count establishes identical frames.

Every accepted before/after still and both diff images was opened in review montages before upload. Recordings were inspected through extracted frames across their scripted steps. Existing expanded-table text overlap and a width-limited file-path tooltip are visible on both builds; neither is evidence of this CSS rule changing expanded layout or tooltip behavior. No Safari, Firefox, native Electron shell, native mobile, hosted/relay or tunnel execution is claimed.
