# Narrow evidence retake

For [PR #28195](https://git.cafe/pingdotgg/t3code/pull/28195), before is [15fe283272](https://git.cafe/pingdotgg/t3code/commit/15fe2832727893cbdd2214383f9f971474849695), after is [9e4299152e](https://git.cafe/pingdotgg/t3code/commit/9e4299152ede4514520d37791b603e2613095d51).

Retakes only B0/V1 web 390×844 light and dark. The other seven scoped entries retain their previous auditor acceptance. This run makes no new claim about those entries.

1. Create detached baseline worktree `/home/ubuntu/wt/pr-28195-base` at the before commit and install with `vp install`. The head worktree is `/home/ubuntu/wt/pr-28195`. Drivers live in `/tmp/lead-28195-r1/evidence-capture-2/`. `rpc-driver.mjs` defines the roots and selected actual ports (server/web 15362/7322 before, 15866/7826 after); update them if occupied.
2. Start each server with `T3CODE_DEV_SEED=0 vp run dev`. Retain the terminal sessions/PIDs. No data from the VM's live T3 home is used. This retake reused the explicitly authorized, recovered synthetic head database from the previous capture; the deleted baseline was rebuilt from a fresh database.
3. Create the synthetic empty git workspace `/tmp/lead-28195-r1/evidence-capture-2/workspace` with one empty commit. `node seed-and-send.mjs before seed` creates the project/thread and sends the original two prompts using real Codex `gpt-6-luna`, low reasoning, standard service tier. It waits for terminal orchestration events. Replies must be exactly `Remembered.` and `Still remembered.`. For a fresh head reproduction, run the same seed command with `after`.
4. Stop the baseline server. `python3 repoint-native.py before` backs up its synthetic DB and changes only the provider-thread native ID to the same nonexistent ID used previously. Restart with `T3CODE_DEV_SEED=0 vp run dev`, then `node seed-and-send.mjs before third`. The reply must be `PELICAN`; the log must show `resume_failed`. To rebuild head from fresh state, do the same stop/fault/restart/third steps with `after`.
5. `python3 transcript.py before S1` and `python3 transcript.py after S1` read only the authorized fixture DBs. All six message roles and text must match exactly; head alone has one handoff item at ordinal 3,000,000 before turn 3.
6. `node capture-stills.mjs before` and `node capture-stills.mjs after` each create a timestamped output directory. Browser is headless Chromium 148.0.7778.96 through Playwright on Linux x86_64, no device emulation, viewport 390×844, DPR 1, font scale 1, light/dark, reduced motion, fixed JS clock 2026-11-03 02:00 UTC. Close the right panel through its UI. Scroll the actual timeline to `scrollTop=0` on both sides. Turn 1 remains fully visible; turn 2's bubble top is y=293 and prompt text top is y=305 on both sides. No CSS, DOM structure, message text, or screenshots are edited to create this framing. Every message must be above the composer and below the top fade. Wait for network idle and fonts, then accept only two screenshot frames 500 ms apart that are pixel-identical. Retained `-settle.png` files and metadata prove this.
7. `python3 make-diffs.py <before-output-directory> <after-output-directory>` creates a new timestamped diff directory. Diff0 marks every nonzero max-channel RGB delta magenta, including a one-level change; DiffT16 marks delta >16/255 amber; black is unchanged. All 390×844 pixels are compared. Sheets place whole frames side by side beneath SHA labels.
8. `python3 validate-retake.py` checks identical message text, environment, scroll and turn-2 geometry, full message bounds, settled pixels, divider counts, 48 px turn-3 displacement and regional pixel deltas. The validation helper expects one completed capture directory per side. Open every submitted capture, diff, and sheet before upload.
9. Upload with `ghdrop upload -m`. Only synthetic transcripts, scripts, metadata and reviewed evidence are submitted. Never upload private server logs, authentication, pairing URLs or database files. Stop only servers you started using retained sessions. Remove the disposable baseline worktree. Preserve the head worktree and both scratch directories for the lead. No PR edit, commit, or push.

## Differences in both retaken rows

- Head adds the completed `Context handoff 6 Luna → 6 Luna` divider.
- Turn 3's prompt and PELICAN reply move down exactly 48 px; turns 1–2 keep the same geometry and text.
- The existing `Scroll to end` control appears only after: with scrollTop=0, head content is 839 px in a 792 px timeline viewport; before content is 792 px. The control does not cover any message.
- At zero threshold, light has three one-level RGB differences on turn-2 bubble corners. Dark has 17 one-level RGB differences on composer corners/edges. They disappear at the stated threshold. Header and all text above turn 3 are otherwise pixel-identical; light composer is pixel-identical. These small edge differences are reported, not suppressed.
- No message is clipped or faded. Unlike the rejected pair, earlier messages do not move upward.

The shared preview browser reported Chrome 156/DPR 2, so the retake uses the user's explicitly requested Chromium 148/Playwright environment instead. Diagnostic `inspect-anchor.mjs` records the real scroll and paragraph geometry; its preliminary screenshots are not the submitted stills.
