# Issue 15873 — matched web evidence

Captured 2026-10-22 UTC. This is evidence for review, **not a readiness or merge verdict**. Prior round 2 verdicts were FIX_FIRST for evidence. No PR was created, no push or merge performed.

- BEFORE product: [ed9b7ca9c5](https://git.cafe/pingdotgg/t3code/commit/ed9b7ca9c53843ea1e6b466bf7d52928d10e7db0), full SHA `ed9b7ca9c53843ea1e6b466bf7d52928d10e7db0` (requested future merge-base).
- AFTER implementation: [7d869fd13b](https://git.cafe/pingdotgg/t3code/commit/7d869fd13b74f7cc040ad23f375ab01f36bc9afe), full SHA `7d869fd13b74f7cc040ad23f375ab01f36bc9afe`.
- Exact AFTER checkout/fixture revision: [7dcb809db8](https://git.cafe/pingdotgg/t3code/commit/7dcb809db870aa1903a6031cdf93b6155ac8124d), full SHA `7dcb809db870aa1903a6031cdf93b6155ac8124d`. Fixture commit is local/unpushed at handoff. Only README, seed.py and runtime.json added; no implementation changes.
- Original genuine repro provenance: [b5a226e49c](https://git.cafe/pingdotgg/t3code/commit/b5a226e49c52ecab4ddc2d678a7012d97e651a6a). Public issue: [#15873](https://git.cafe/pingdotgg/t3code/issues/15873). Original export retained at `/tmp/15873-runtime-fixture.json`; not published.
- Fixture runtime.json SHA256: `935b1004d0d84417858e469dfe8b3db13a9a10c2a9a074fb5eb4d1680ecae967`.

## Environment and reproduction

Worktree `/home/ubuntu/wt/issue-15873`, restored to branch `fix/issue-15873` at 7dcb809db8. Browser is product-native T3 server preview, own tab `tab_l_6e549cef-3988-4dbf-afd5-b7128d4b53ce`. Chrome 154 on Linux x86_64; `devicePixelRatio=2`, zoom 1, loaded default fonts, interface 16px/prompt 14px/code 13px, default light/dark palettes. Browser language en-US and timezone UTC were verified; rendered messages show “yesterday at 11:xx PM”. Process Node v24.21.0 used identically on both SHAs; BEFORE contains the new Node26 pin, so this does not validate the new release toolchain.

Viewport grid: 1440×1000 and 390×844 **CSS px**. Narrow output is web, not native mobile. Saved narrow PNG is 780×1688. The snapshot tool internally caps wide output at 1280px, producing 1280×889 from 1440×1000 at DPR2. PNGs here are the exact original tool files, with no subsequent scaling, cropping, alignment or masking. Thus wide PNG diffs are **not full-framebuffer proof**. Original MP4 recordings preserve 2880×2000 wide or780×1688 narrow; they are compressed/lossy and not used for pixel counts. No source/MCP modification or alternate automation used to bypass the cap.

Fixed presentation Date: epoch `1792627200000`, `2026-10-22T00:00:00.000Z`; JS Date constructor/Date.now overridden through preview_evaluate after hydration, while requestAnimationFrame/timers continue normally. Fixture timestamps are fixed. This is presentation-clock control, not a frozen provider/backend clock. All captured rows are completed snapshots.

Isolated runtime home `.t3/capture`, database `.t3/capture/userdata/statev2.sqlite`. Schema copied/migrated from disposable worktree state; orchestration, projection and auth rows cleared before seeding. Never opened installed `~/.t3/userdata` database read-write. Product recovery stopped five ready fixture sessions and resumed zero runs/effects. Original `.t3/userdata/statev2.sqlite` preserved. AFTER used `PATH="$PWD/node_modules/.bin:$PATH" vp run dev --home-dir "$PWD/.t3/capture"`; BEFORE web used same runner and backend directly used `node apps/server/src/bin.ts --base-dir "$PWD/.t3/capture" --port 16526 --dev-url http://localhost:8486 --no-browser`. Actual web/server ports8486/16526. No VITE_HTTP_URL or VITE_WS_URL set.

Reproduction: select the product SHA; create a clean migrated disposable home, stop server, run the committed `seed.py` with `python3 -B`, then start on that home. Authenticate with a newly minted private pairing URL (none published). Route first segment is environment ID, **not project ID**; use the environment's current ID and the seeder's printed thread ID. The old `/tmp/issue-15873-capture/routes.json` has project IDs in its first segment and is only a fixture identity map, not valid direct URLs. Actual captured environment ID and routes are recorded per checkpoint in the manifest. Hide main sidebar and thread details, leave terminal/right panels closed, blur composer, move pointer to(1,1), wait for `document.fonts.ready` and projection acknowledgment. For standard stills scroll `.messages-timeline-scroll` to end for six animation frames; G-history uses scrollTop0. Snapshot state stores actual offsets, height and scroll extent. Wide G/A/C/L fit without scrolling; S crosses the end boundary after insertion and scrolls11CSS px, so its earlier content shifts upward accordingly. Long reveal scrolls to the end of the expanded body. Find action attempts begin from history top using real Control+F, input, Enter/Shift+Enter and Escape; the recording audit below limits which results are visible. Later fixture navigation uses production TanStack router through preview_evaluate; original wide-light clip also includes a cold A reload/reconnect.

Fixtures G/A/C/L and settled-S are rendering replays, not fresh provider sessions. G preserves genuine three-run structure; A/L remove intermediate run and renumber later run/positions; C moves synthetic answer to its question run before its final acknowledgment. Native item identities are distinct across fixtures to avoid global primary-key overwrites. Seeder validates retained run/node references, unique timeline ordinals, message/timeline text/run agreement, and schema columns were checked against the migrated DB. All generated runs are completed. Checkpoint refs are synthetic and do not point at actual checkpoint Git objects; revert actions are not certified. Direct projections do not create coherent business-event histories; no provider/event lifecycle claim follows.

## Comparison method

For every pair, decode original PNG to RGB; channel delta is absolute integer difference. Diff0 image is `min(delta×8,255)` on black. Count a Diff0 changed pixel iff any RGB channel differs at all. DiffT uses a fixed **max-channel delta>16/255** criterion, painted magenta on black; no ignored regions. Threshold chosen before comparison; no tolerance tuning. Counts and SHA256 hashes are retained in comparisons.json; rerun `python3 compare.py` after downloading/pointing the manifest to originals. No unexplained-zero or “nothing else changed” claim is made. C's exact equality applies only to the four captured collapsed settled control states.

30 pairs:20 timeline,4 Find,4 expanded-L comparisons,2 G-history. For expanded-L, BEFORE aliases its corresponding absent-bubble baseline; there is no BEFORE expand control. Eight recordings below supplement stills; they do not prove hot projection insertion, active steering or unexecuted controls.

## Captured sequences and pairs

**Recording audit correction:** narration below lists tool wall-clock action attempts, not certified media seek times. The recordings do not establish every narrated outcome. AFTER/390/light shows next (PTS 25.412→25.503) and previous (25.814), but no closed Find frame. AFTER/1440/dark ends while the multiple query is searching; BEFORE/1440/light and dark end at the exclusive query's 0/0 state. AFTER/1440/light ends with the unrelated query searching. BEFORE/390/dark does show Find closed at PTS 23.924. Complete per-cell navigation/close outcomes remain unverified. These recordings certify only their observable settled states and interactions.

Clip timestamps below are wall-clock offsets from recording_start, measured from tool step timestamps, rounded to0.01s. They identify action initiation; recorded encoders may omit idle frames and the original wide-light reconnect interrupts automation. Do not treat a selected still as a provider transition. Each checkpoint also retains actual UTC capture time in the manifest. Ordered narration appears before each group's comparison table.

### 1440 CSS px — light

**BEFORE recording:** [before-1440-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/41bd0fc5f42cf5ad/before-1440-light.mp4). Start `2026-10-22T01:12:26.614Z`; native video 2880×2000; media duration 25.716s.

00:04.32 navigate G; 00:10.54 navigate A; 00:12.54 navigate S; 00:15.71 navigate C; 00:19.43 navigate L; 00:22.55 navigate G; 00:25.42 Find open; 00:25.80 Find exclusive query; 00:27.13 Find multiple query; 00:27.42 Find next; 00:27.60 Find previous; 00:27.80 Find close.

**AFTER recording:** [after-1440-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/34be10ba35f20f5a/after-1440-light.mp4). Start `2026-10-22T01:00:32.627Z`; native video 2880×2000; media duration 203.110s.

00:10.41 navigate A; 01:38.43 navigate S; 01:51.02 navigate C; 02:01.83 navigate L; 02:36.41 L expand; 02:44.75 navigate G; 02:51.61 Find open; 02:52.92 Find exclusive; 03:16.92 Find multiple; 03:21.02 next match; 03:23.43 previous match; 03:24.52 Find no results; 03:25.52 Find close.

| Row | Before | After | Diff0 ×8 | DiffT >16 | Changed pixels 0 / T | Visible differences and limits |
|---|---|---|---|---|---|---|
| G | [before-G-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/880cf4a8bef63480/before-G-1440-light.png) | [after-G-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5ad96411ab6b822a/after-G-1440-light.png) | [diff0-G-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/39b58a1659b5d2b2/diff0-G-1440-light.png) | [difft-G-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/081343a6c24c0992/difft-G-1440-light.png) | 33,601 / 6,246 | One chronological late-answer user bubble added between queued-run reply and final acknowledgment; acknowledgment moves down; minimap gains user entry. At390, end-follow changes scrollTop and visible earlier history, including content behind the translucent composer; composer stays over the feed. |
| A | [before-A-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/704ed5147d9bc6a9/before-A-1440-light.png) | [after-A-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b72666ffb520b23b/after-A-1440-light.png) | [diff0-A-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc122e7848879d39/diff0-A-1440-light.png) | [difft-A-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c7759e3bcf2efbc/difft-A-1440-light.png) | 33,509 / 6,181 | Adjacent later-run answer becomes a separate bubble; final acknowledgment moves down; minimap gains entry. Narrow end-follow scrolls earlier content upward to retain the final reply. Literal RUN N+2 acknowledgment text is retained from G although derived run ordinal is2. |
| S | [before-S-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a097aa73e1aeb0b/before-S-1440-light.png) | [after-S-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/13db01d19065bc53/after-S-1440-light.png) | [diff0-S-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db6c2c1a57ee0fd8/diff0-S-1440-light.png) | [difft-S-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/90841c57b9cb8eb6/difft-S-1440-light.png) | 102,931 / 44,337 | Settled synthetic steer bubble plus Steer marker appears; final acknowledgment moves down and minimap gains entry. Wide AFTER content scrolls11CSS px; narrow end-follow shifts earlier content. No active-run/working/streaming/provider-steer claim. |
| C | [before-C-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c759d7d047c5e218/before-C-1440-light.png) | [after-C-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6424141ac0a4787/after-C-1440-light.png) | [diff0-C-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6689e43ea0ce0ad6/diff0-C-1440-light.png) | [difft-C-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/65ad8b23edd0010f/difft-C-1440-light.png) | 0 / 0 | Exactly identical originals at Diff0 and DiffT. Same-run answer remains folded; no separate bubble. Expanded card/hot map transition not captured. |
| L | [before-L-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c3cffdf23ba2858b/before-L-1440-light.png) | [after-L-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/93230b0a206e39d2/after-L-1440-light.png) | [diff0-L-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bd6f05ee74bf2f2f/diff0-L-1440-light.png) | [difft-L-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/114b7463632731a8/difft-L-1440-light.png) | 108,998 / 14,043 | Collapsed long later-run bubble and Show full message control appear, final acknowledgment/minimap move; narrow end-follow shifts earlier history. Question preview remains present. |
| F | [before-F-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b9c0219270b5e08d/before-F-1440-light.png) | [after-F-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/210c7e6a704db4cf/after-F-1440-light.png) | [diff0-F-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/55b4b4bf241fabd5/diff0-F-1440-light.png) | [difft-F-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/96e5c92da7d3d9c9/difft-F-1440-light.png) | 33,753 / 7,421 | Real progressive Find counter changes0/0→1/1; zero-match red state becomes selected answer highlight; new bubble/reply positioning and minimap change. Narrow Find scrolls/reveals answer from history, changing visible earlier content. |
| L-expanded | [before-L-expanded-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f7f7dca246a75458/before-L-expanded-1440-light.png) | [after-L-expanded-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/92ebac8f14a3929d/after-L-expanded-1440-light.png) | [diff0-L-expanded-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1efb579c1709caf2/diff0-L-expanded-1440-light.png) | [difft-L-expanded-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/157ae259a13ea232/difft-L-expanded-1440-light.png) | 251,072 / 42,199 | BEFORE has no late-answer bubble or expand action. AFTER shows expanded numbered text, wrapped code block, tail token and Show less; body extends above viewport at end anchor, earlier content scrolls out, final acknowledgment/minimap move. Controls/background seen through translucent composer can differ with underlying feed. |

### 390 CSS px — light

**BEFORE recording:** [before-390-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2f482c3b27fb8237/before-390-light.mp4). Start `2026-10-22T01:11:10.442Z`; native video 780×1688; media duration 42.142s.

00:01.68 navigate G; 00:05.50 history scroll top; 00:06.38 history scroll bottom; 00:07.01 navigate A; 00:13.89 navigate S; 00:21.68 navigate C; 00:26.98 navigate L; 00:32.51 navigate G; 00:36.18 Find open; 00:38.41 Find exclusive query; 00:40.51 Find multiple query; 00:41.50 Find next; 00:41.69 Find previous; 00:42.30 Find close.

**AFTER recording:** [after-390-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a4a06d88e8aab2ea/after-390-light.mp4). Start `2026-10-22T01:04:38.530Z`; native video 780×1688; media duration 25.847s.

00:01.58 navigate G; 00:04.42 history scroll top; 00:06.39 history scroll bottom; 00:07.40 navigate A; 00:11.69 navigate S; 00:14.69 navigate C; 00:16.68 navigate L; 00:18.90 L expand; 00:20.79 L collapse; 00:22.20 navigate G; 00:24.28 Find open; 00:24.53 Find exclusive query; 00:25.80 Find multiple query; 00:26.20 Find next; 00:26.32 Find previous; 00:26.60 Find close.

| Row | Before | After | Diff0 ×8 | DiffT >16 | Changed pixels 0 / T | Visible differences and limits |
|---|---|---|---|---|---|---|
| G | [before-G-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f97d583bff060e98/before-G-390-light.png) | [after-G-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/af93c14e8f1a6f0d/after-G-390-light.png) | [diff0-G-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d14ae474744e73e5/diff0-G-390-light.png) | [difft-G-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0fefdef1256d4ec9/difft-G-390-light.png) | 455,933 / 66,034 | One chronological late-answer user bubble added between queued-run reply and final acknowledgment; acknowledgment moves down; minimap gains user entry. At390, end-follow changes scrollTop and visible earlier history, including content behind the translucent composer; composer stays over the feed. |
| G-history | [before-G-history-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1ac08501eaf229b3/before-G-history-390-light.png) | [after-G-history-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3779e03704553208/after-G-history-390-light.png) | [diff0-G-history-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6a2aea30ae3989b5/diff0-G-history-390-light.png) | [difft-G-history-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc1db1c459e4ae9b/difft-G-history-390-light.png) | 47,502 / 4,824 | At scrollTop0 the earlier prompt/question/queued prompt stay anchored. Lower viewport now shows later-answer content instead of old acknowledgment, including pixels beneath translucent composer. Scroll extent increases and minimap/navigation state reflects additional entry. |
| A | [before-A-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/52a827f391d7f6f3/before-A-390-light.png) | [after-A-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/40094fd398c74a08/after-A-390-light.png) | [diff0-A-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/faa43e7ff6e57d11/diff0-A-390-light.png) | [difft-A-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fd754f2087d7de27/difft-A-390-light.png) | 402,525 / 83,659 | Adjacent later-run answer becomes a separate bubble; final acknowledgment moves down; minimap gains entry. Narrow end-follow scrolls earlier content upward to retain the final reply. Literal RUN N+2 acknowledgment text is retained from G although derived run ordinal is2. |
| S | [before-S-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bdfae781cec439b1/before-S-390-light.png) | [after-S-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/362c08c73e5c2ccd/after-S-390-light.png) | [diff0-S-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/64ab9ca081873a23/diff0-S-390-light.png) | [difft-S-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/42c251362aa328ed/difft-S-390-light.png) | 459,274 / 66,142 | Settled synthetic steer bubble plus Steer marker appears; final acknowledgment moves down and minimap gains entry. Wide AFTER content scrolls11CSS px; narrow end-follow shifts earlier content. No active-run/working/streaming/provider-steer claim. |
| C | [before-C-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ae37e45d43a15542/before-C-390-light.png) | [after-C-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85f8ec908948a407/after-C-390-light.png) | [diff0-C-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54b38c279d4f816c/diff0-C-390-light.png) | [difft-C-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a5c5255e152bd9d/difft-C-390-light.png) | 0 / 0 | Exactly identical originals at Diff0 and DiffT. Same-run answer remains folded; no separate bubble. Expanded card/hot map transition not captured. |
| L | [before-L-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a4ac4bc0de62f4be/before-L-390-light.png) | [after-L-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cd729a315acdd8d/after-L-390-light.png) | [diff0-L-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6746ad2081cc564d/diff0-L-390-light.png) | [difft-L-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/48bec2d089604b0c/difft-L-390-light.png) | 539,198 / 85,534 | Collapsed long later-run bubble and Show full message control appear, final acknowledgment/minimap move; narrow end-follow shifts earlier history. Question preview remains present. |
| F | [before-F-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/181589ac864d2dc9/before-F-390-light.png) | [after-F-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8b42a9df261bbfb6/after-F-390-light.png) | [diff0-F-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6c3a42465a96115d/diff0-F-390-light.png) | [difft-F-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1381eb93205eb207/difft-F-390-light.png) | 624,196 / 89,954 | Real progressive Find counter changes0/0→1/1; zero-match red state becomes selected answer highlight; new bubble/reply positioning and minimap change. Narrow Find scrolls/reveals answer from history, changing visible earlier content. |
| L-expanded | [before-L-expanded-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fbcb486379cc921c/before-L-expanded-390-light.png) | [after-L-expanded-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb47dbeb9b8ce7ce/after-L-expanded-390-light.png) | [diff0-L-expanded-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/caca367cf9c0290f/diff0-L-expanded-390-light.png) | [difft-L-expanded-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/27b0f03658341b64/difft-L-expanded-390-light.png) | 357,440 / 91,491 | BEFORE has no late-answer bubble or expand action. AFTER shows expanded numbered text, wrapped code block, tail token and Show less; body extends above viewport at end anchor, earlier content scrolls out, final acknowledgment/minimap move. Controls/background seen through translucent composer can differ with underlying feed. |

### 390 CSS px — dark

**BEFORE recording:** [before-390-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cae8f2cc8cfb758e/before-390-dark.mp4). Start `2026-10-22T01:11:55.118Z`; native video 780×1688; media duration 23.957s.

00:02.21 navigate G; 00:05.69 history scroll top; 00:07.29 history scroll bottom; 00:08.09 navigate A; 00:10.60 navigate S; 00:13.03 navigate C; 00:15.70 navigate L; 00:17.63 navigate G; 00:20.34 Find open; 00:21.24 Find exclusive query; 00:23.21 Find multiple query; 00:23.80 Find next; 00:24.13 Find previous; 00:24.33 Find close.

**AFTER recording:** [after-390-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/282eef3282c7eb89/after-390-dark.mp4). Start `2026-10-22T01:05:12.545Z`; native video 780×1688; media duration 29.498s.

00:01.31 navigate G; 00:05.29 history scroll top; 00:06.38 history scroll bottom; 00:07.00 navigate A; 00:09.57 navigate S; 00:11.87 navigate C; 00:14.38 navigate L; 00:17.90 L expand; 00:20.10 L collapse; 00:22.30 navigate G; 00:26.00 Find open; 00:26.41 Find exclusive query; 00:28.97 Find multiple query; 00:29.48 Find next; 00:29.68 Find previous; 00:29.80 Find close.

| Row | Before | After | Diff0 ×8 | DiffT >16 | Changed pixels 0 / T | Visible differences and limits |
|---|---|---|---|---|---|---|
| G | [before-G-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e827a848e704718/before-G-390-dark.png) | [after-G-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b7640e66fba833a/after-G-390-dark.png) | [diff0-G-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0e92c88d5a619d4/diff0-G-390-dark.png) | [difft-G-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0edc47fbfb4bed77/difft-G-390-dark.png) | 452,936 / 67,416 | One chronological late-answer user bubble added between queued-run reply and final acknowledgment; acknowledgment moves down; minimap gains user entry. At390, end-follow changes scrollTop and visible earlier history, including content behind the translucent composer; composer stays over the feed. |
| G-history | [before-G-history-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee6fecb83e810239/before-G-history-390-dark.png) | [after-G-history-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/165ab9ac31f419e3/after-G-history-390-dark.png) | [diff0-G-history-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0f8a7a8036f80ab6/diff0-G-history-390-dark.png) | [difft-G-history-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/601d9e025ba8a603/difft-G-history-390-dark.png) | 36,640 / 4,923 | At scrollTop0 the earlier prompt/question/queued prompt stay anchored. Lower viewport now shows later-answer content instead of old acknowledgment, including pixels beneath translucent composer. Scroll extent increases and minimap/navigation state reflects additional entry. |
| A | [before-A-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/548d2e01e12a0563/before-A-390-dark.png) | [after-A-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4e869cbb9e3211b1/after-A-390-dark.png) | [diff0-A-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/96c057d14361bd5f/diff0-A-390-dark.png) | [difft-A-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b936cde438cb8ee/difft-A-390-dark.png) | 400,260 / 85,374 | Adjacent later-run answer becomes a separate bubble; final acknowledgment moves down; minimap gains entry. Narrow end-follow scrolls earlier content upward to retain the final reply. Literal RUN N+2 acknowledgment text is retained from G although derived run ordinal is2. |
| S | [before-S-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e23e1d9a4680d060/before-S-390-dark.png) | [after-S-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4638f6beb0d443a7/after-S-390-dark.png) | [diff0-S-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3ebf94b520c7da44/diff0-S-390-dark.png) | [difft-S-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/57ea9c9267f278b1/difft-S-390-dark.png) | 456,280 / 67,471 | Settled synthetic steer bubble plus Steer marker appears; final acknowledgment moves down and minimap gains entry. Wide AFTER content scrolls11CSS px; narrow end-follow shifts earlier content. No active-run/working/streaming/provider-steer claim. |
| C | [before-C-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/19ca495b35c3a9ca/before-C-390-dark.png) | [after-C-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e63fb23798b425f7/after-C-390-dark.png) | [diff0-C-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0df2905ebb647e0b/diff0-C-390-dark.png) | [difft-C-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d48e35fad03c2ae2/difft-C-390-dark.png) | 0 / 0 | Exactly identical originals at Diff0 and DiffT. Same-run answer remains folded; no separate bubble. Expanded card/hot map transition not captured. |
| L | [before-L-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ae6f1a40f554cb0d/before-L-390-dark.png) | [after-L-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d9527765e3bfc2d5/after-L-390-dark.png) | [diff0-L-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a0a96ed68885892e/diff0-L-390-dark.png) | [difft-L-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/203edd44a5997082/difft-L-390-dark.png) | 536,238 / 86,993 | Collapsed long later-run bubble and Show full message control appear, final acknowledgment/minimap move; narrow end-follow shifts earlier history. Question preview remains present. |
| F | [before-F-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8af9a3dfd847714/before-F-390-dark.png) | [after-F-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70b95bbaddef0af3/after-F-390-dark.png) | [diff0-F-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0ef7fd12f8c64480/diff0-F-390-dark.png) | [difft-F-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/434f43325547f371/difft-F-390-dark.png) | 612,811 / 91,561 | Real progressive Find counter changes0/0→1/1; zero-match red state becomes selected answer highlight; new bubble/reply positioning and minimap change. Narrow Find scrolls/reveals answer from history, changing visible earlier content. |
| L-expanded | [before-L-expanded-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/847555d6fc9c9ed4/before-L-expanded-390-dark.png) | [after-L-expanded-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/04b421da697d95c5/after-L-expanded-390-dark.png) | [diff0-L-expanded-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f8918421337a7dc/diff0-L-expanded-390-dark.png) | [difft-L-expanded-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5f8fb3b4905df4da/difft-L-expanded-390-dark.png) | 355,105 / 102,874 | BEFORE has no late-answer bubble or expand action. AFTER shows expanded numbered text, wrapped code block, tail token and Show less; body extends above viewport at end anchor, earlier content scrolls out, final acknowledgment/minimap move. Controls/background seen through translucent composer can differ with underlying feed. |

### 1440 CSS px — dark

**BEFORE recording:** [before-1440-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/be9ba3dae3fe5943/before-1440-dark.mp4). Start `2026-10-22T01:12:57.427Z`; native video 2880×2000; media duration 19.715s.

00:03.41 navigate G; 00:05.82 navigate A; 00:08.18 navigate S; 00:11.39 navigate C; 00:13.62 navigate L; 00:16.21 navigate G; 00:18.53 Find open; 00:18.89 Find exclusive query; 00:20.29 Find multiple query; 00:20.71 Find next; 00:20.82 Find previous; 00:20.99 Find close.

**AFTER recording:** [after-1440-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c1ae8f376c342af5/after-1440-dark.mp4). Start `2026-10-22T01:05:45.051Z`; native video 2880×2000; media duration 62.581s.

00:04.50 navigate G; 00:07.59 navigate A; 00:13.18 navigate S; 00:21.16 navigate C; 00:30.59 navigate L; 00:35.57 L expand; 00:44.38 L collapse; 00:49.40 navigate G; 00:55.80 Find open; 00:56.97 Find exclusive query; 01:00.27 Find multiple query; 01:03.19 Find next; 01:03.36 Find previous; 01:03.76 Find close.

| Row | Before | After | Diff0 ×8 | DiffT >16 | Changed pixels 0 / T | Visible differences and limits |
|---|---|---|---|---|---|---|
| G | [before-G-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d08e680599cd54af/before-G-1440-dark.png) | [after-G-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a4faeb53d88d9da8/after-G-1440-dark.png) | [diff0-G-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/485bb7e23ccdfbe3/diff0-G-1440-dark.png) | [difft-G-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e20086fae90e2cf8/difft-G-1440-dark.png) | 33,556 / 6,442 | One chronological late-answer user bubble added between queued-run reply and final acknowledgment; acknowledgment moves down; minimap gains user entry. At390, end-follow changes scrollTop and visible earlier history, including content behind the translucent composer; composer stays over the feed. |
| A | [before-A-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d28c171f148af76e/before-A-1440-dark.png) | [after-A-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee6b198fda88fba0/after-A-1440-dark.png) | [diff0-A-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/859599cf35a98750/diff0-A-1440-dark.png) | [difft-A-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a6566e5de781c0b0/difft-A-1440-dark.png) | 33,463 / 6,377 | Adjacent later-run answer becomes a separate bubble; final acknowledgment moves down; minimap gains entry. Narrow end-follow scrolls earlier content upward to retain the final reply. Literal RUN N+2 acknowledgment text is retained from G although derived run ordinal is2. |
| S | [before-S-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d61574cd7daacd17/before-S-1440-dark.png) | [after-S-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2427d087610db32/after-S-1440-dark.png) | [diff0-S-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f11658d52cd1599a/diff0-S-1440-dark.png) | [difft-S-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f9d2dcaf41ec2782/difft-S-1440-dark.png) | 102,313 / 45,314 | Settled synthetic steer bubble plus Steer marker appears; final acknowledgment moves down and minimap gains entry. Wide AFTER content scrolls11CSS px; narrow end-follow shifts earlier content. No active-run/working/streaming/provider-steer claim. |
| C | [before-C-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/118c30699e801239/before-C-1440-dark.png) | [after-C-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e874aac53217640/after-C-1440-dark.png) | [diff0-C-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/719de73314e45b7f/diff0-C-1440-dark.png) | [difft-C-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5035f8dfbe75e88b/difft-C-1440-dark.png) | 0 / 0 | Exactly identical originals at Diff0 and DiffT. Same-run answer remains folded; no separate bubble. Expanded card/hot map transition not captured. |
| L | [before-L-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/645e3fbdb7b36faa/before-L-1440-dark.png) | [after-L-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/117739cd1788cbcb/after-L-1440-dark.png) | [diff0-L-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d8872724200f122/diff0-L-1440-dark.png) | [difft-L-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5e982d7ae0d3b3b1/difft-L-1440-dark.png) | 108,957 / 14,417 | Collapsed long later-run bubble and Show full message control appear, final acknowledgment/minimap move; narrow end-follow shifts earlier history. Question preview remains present. |
| F | [before-F-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/141a343b49b8bdad/before-F-1440-dark.png) | [after-F-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f69fc4b7ab76be5a/after-F-1440-dark.png) | [diff0-F-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d488254c6cbba3f1/diff0-F-1440-dark.png) | [difft-F-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b69b1a9e18b1f2c4/difft-F-1440-dark.png) | 33,739 / 7,621 | Real progressive Find counter changes0/0→1/1; zero-match red state becomes selected answer highlight; new bubble/reply positioning and minimap change. Narrow Find scrolls/reveals answer from history, changing visible earlier content. |
| L-expanded | [before-L-expanded-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f407be99ec835aef/before-L-expanded-1440-dark.png) | [after-L-expanded-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7e0a878901d7740e/after-L-expanded-1440-dark.png) | [diff0-L-expanded-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66cad7151a743fd5/diff0-L-expanded-1440-dark.png) | [difft-L-expanded-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a497fd79d0e96d8e/difft-L-expanded-1440-dark.png) | 250,686 / 44,381 | BEFORE has no late-answer bubble or expand action. AFTER shows expanded numbered text, wrapped code block, tail token and Show less; body extends above viewport at end anchor, earlier content scrolls out, final acknowledgment/minimap move. Controls/background seen through translucent composer can differ with underlying feed. |

## Coverage and gaps for proof audit pass 2

- **G/A/S/C/L settled WEB geometry/theme grid:** captured. S is explicitly synthetic settled intent replay, not active steering. G top/bottom context is supplied at390. L collapsed/revealed captured; final line/wide block visible in revealed end checkpoint. C collapsed same-run control exactly equal across all four cells.
- **F real WEB progressive Find:** captured0/0→1/1 in four cells; query LATE ANSWER PROBE occurs in card history DOM but card answers are excluded from server Find documents. Multiple-result ACKNOWLEDGED BLUE query, Enter/Shift+Enter navigation and Escape recorded. Blank/unrelated-zero query only in original wide-light AFTER clip. Nonprogressive flag path, forced latency/error/retry and >17-document window unverified. Loading/searching phases may occur in clips; no claim every intermediate frame was observed.
- **G/A/C hot/mounted transitions, cache identity, answer dispatch/echo, route reload convergence, live-follow during actual insertion:** unverified. Recordings show settled route navigation, scrolling and local disclosure/Find, not hot store mutation. No new provider sessions were started.
- **K:** cache reassociation/null/orphan/inherited/anchored duplicate harness unverified visually; prior focused tests were reported by lead, not rerun in this capture task.
- **I:** L show-full/show-less interactions captured. Copy/clipboard verification, timestamp action hover/focus, question-card expanded disclosure and revert confirmation unverified. Synthetic checkpoint refs cannot certify actual revert.
- **Q/B:** empty/loading/error/retry, sparse-count/setup/first-message anchor, history pagination and failed/interrupted-run disclosure not captured. No invented empty async-answer flow.
- **Native iOS G/A/S/C/L/F/N and all hot/cache/disclosure rows:** unverified. EAS authenticated/available; owned session01a1611e-849f-76bf-abb4-b660782bdd05 reached iPhone17/iOS26.5 ready. Agent-device device listing succeeded. Opening com.t3tools.t3code.preview failed: `COMMAND_FAILED: Simulator device failed to launch ... Hint: The app bundle is not installed on this simulator. Run install before open.` Available simulator artifacts belong to unrelated commits; none used as proof. No current-source native fixture build/profile/transport harness prepared; user explicitly bounded this work. Session stop confirmed; generated credential dotenv removed. No native phone/tablet/theme grid. Maintainer needs source-matched native builds and production-route replay for remaining native proof.
- **N native global search:** unverified. Source audit found no production native answer-level Find; do not interpret web390 as native or add a fake native Find claim.
- **Desktop Electron shell/IPC and native Android:** unverified; route to maintainer. Web desktop layout is not shell certification.
- **Connection modes/providers:** local isolated snapshots only; remote/relay/tunnel, multi-environment/device and non-Codex runtime dispatch unverified.

This reduces redundant controls to named unverified rows while retaining all five affected/control fixture paths. It does not waive pass-1's stronger transition/native requirements. Parent may submit these artifacts to the final allowed review round; this capture step does not declare readiness.


## Reproducibility artifacts

- [capture-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8cb7a6ce66ac7421/capture-manifest.json)
- [comparisons.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1ef6aab639f58ad2/comparisons.json)
- [compare.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a7e876a86449203d/compare.py)
- [browser-state.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1366442f179b9a01/browser-state.json)
- [video-metadata.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2ba6e2fe4eec54b8/video-metadata.json)

The manifest includes exact UTC checkpoint/step times, original file paths, measured scroll state, browser helper expressions, native video dimensions/durations/seek validation and clip hashes. comparisons.json carries all original/diff SHA256 values and counts. browser-state.json contains only selected UI settings (no cookies, auth or tokens). Runtime fixture/source identity scan confirmed zero overlapping UUID/native-item IDs. No credential/session files were published.

## Handoff and cleanup

Branch restored to fix/issue-15873 at7dcb809db8; clean working tree. BEFORE/AFTER owned servers stopped;8486/16526 have no listener at handoff. Temporary native credential dotenv removed; EAS stop confirmed. Isolated seeded DB retained in `.t3/capture` for pass2; browser tab retained on last BEFORE page (server is stopped). Only fixtures committed; no evidence PNG/video committed. Original interrupted scripts/data preserved through completion, __pycache__ excluded.

Independent parent check (extra, not substituted for pairs): `/tmp/15873-primary-browser-check.json`, exactly one G answer between queued reply and final acknowledgment, Find1/1 at7dcb. Pass2 should independently regenerate G390/light plus F from committed fixture and product SHAs, download originals, verify SHA256, rerun compare.py and reconcile pixels. The final main merge and implementation tests are parent's remaining work.

FRICTION — tool: snapshot wide PNG capped1280; one preview host reconnect recovered via status/retry; FFmpeg bundled build lacks MP4 demuxer, so recordings retained as originals and dimensions/duration verified by browser HTMLVideoElement metadata and successful decoded seek at85% for all eight uploads; full visual playback not independently certified. infra: old owned watcher restarted on checkout, stopped after port/cwd confirmation; direct tracked backend used for BEFORE. native: simulator available but current app absent and unrelated builds rejected as proof. upload: initial128-file bulk request failed HTTP500 Decode error; batches of6 with bounded single-file fallback succeeded. scope: hot-cache/active-steer/native rows explicitly unverified. review: no readiness/merge verdict. forge: no PR/push/merge.
