# Evidence

**Recapture pass 2:** F2 and F5 replaced after audit; accepted F1/F3/F4 links and evidence retained unchanged. F5 masks only the live status bar for comparison; its native back button and all other unchanged content compare at zero differing pixels.

For [#32951](https://git.cafe/pingdotgg/t3code/pull/32951), before [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) versus after [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605). Five of five affected matrix rows captured; the two unchanged controls C1/C2 have no mandatory captures. This follows the matrix minimum: dark 1280×900 web and dark 390×844 native. No light, 1440-wide, or separate Electron run is claimed.

Both sides ran the real server from the specified checkout. F1–F4 used independently fresh synthetic databases made by each server. Accepted F5 holds one synthetic environment identity and one mounted native detail screen constant while switching the real server revision; the PR changes no mobile/client/contracts code. No live database was read or migrated. The same seed drivers, synthetic paths and peer instances were used on each side. F2/F5 synthetic paths are now under evidence-capture-2; F1/F3/F4 retain evidence-capture-1 paths. No user data is involved. Auth environment variables were removed from the dev-server environment, and the synthetic Claude homes started empty. Provider initialization reported unauthenticated; no agent turn ran. The cwd and config directory refer to the server filesystem.

Supported rows used real Claude CLI 2.1.321. F2 used real Claude CLI 2.1.100, classified unsupported by the active policy (required >=2.1.301), while initialization still reported unauthenticated. The long basename contains 180 `L` characters. Short and instance-environment peers are included in F1; their selected editor is represented by the long-path editor.

## F1 — Settings inline list + long-path editor — 1280×900 — dark

Environment (both sides): Chromium 148.0.7778.96 via Playwright 1.60, headed Xvfb on Linux; no device emulation; viewport 1280×900 CSS px, DPR 1, font scaling 100%, dark, reduced motion, en-US/UTC. Browser Date fixed at 2026-11-10 09:00 UTC after initial render; server clock live. F1 uses X11 cropped to the complete browser viewport; videos use Playwright recording at 1280×900.

The list clamps each summary to two lines; the selected editor shows the complete cwd, config directory and final API-key sentence. The config-path input itself scrolls horizontally, independently of the fully wrapped status text.

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F1-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4fa6aba4de1a161a/F1-before.png)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | ![F1-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1e333b42be1f268e/F1-after.png)<br>[7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | ![F1-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6a1810fd9adad017/F1-Diff0.png)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | ![F1-DiffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/51f5b66d72b502ef/F1-DiffT.png)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) |

## F2 — Settings compatibility diagnostic, list + editor — 1280×900 — dark

Environment (both sides): Chromium 148.0.7778.96 via Playwright 1.60, headed Xvfb/Linux, 1280×900 CSS px, DPR 1, font scaling 100%, dark, reduced motion, en-US/UTC. Browser/server clocks live, with no visible time-dependent field. ffmpeg records the X11 surface at 25 fps, cropping only browser chrome at +0+87. No video interpolation or blended frames. The whole viewport is retained.

Same scripted keyboard sequence, with timestamps extracted from each delivered MP4 and opened for inspection:

Before: 0.00s diagnostics closed → 1.55s keyboard focus list diagnostic → **3.56s list tooltip settled** → 5.58s Escape closes list → 6.80s keyboard focus editor Status → **8.80s editor tooltip settled** → 10.81s Escape closes editor.

After: 0.00s diagnostics closed → 1.56s keyboard focus list diagnostic → **3.59s list tooltip settled** → 5.61s Escape closes list → 6.83s keyboard focus editor Status → **8.83s editor tooltip settled** → 10.85s Escape closes editor.

Tab input establishes keyboard modality before each trigger receives focus. This is the matrix's keyboard-focus path; the list selection button intercepts pointer hover over the label. Both complete tooltips are visibly open at their settled timestamps. Before shows the complete legacy two-line instruction; after shows the cwd, full 180-character-basename directory, and final API-key sentence in both popups. Unsupported and its icon remain. No content/status injection was used. Every narrated timestamp was extracted using ffmpeg and inspected, along with full-clip 2 fps contact sheets. No ghosting was seen.

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| [F2-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0ba445bcb8116239/F2-before.mp4)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | [F2-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54442617e3c33da6/F2-after.mp4)<br>[7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | N/A — recording, no still pair<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | N/A — recording, no still pair<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) |

## F3 — Chat banner clamp + hover tooltip — 1280×900 — dark

Environment (both sides): Chromium 148.0.7778.96 via Playwright 1.60, headed Xvfb on Linux; no device emulation; viewport 1280×900 CSS px, DPR 1, font scaling 100%, dark, reduced motion, en-US/UTC. Browser Date fixed at 2026-11-10 09:00 UTC after initial render; server clock live. F1 uses X11 cropped to the complete browser viewport; videos use Playwright recording at 1280×900.

Same scripted interaction; timestamps are seconds into each clip (settle delays vary):

Before: 0.50s Clamped banner, tooltip closed → 3.00s Hover banner description → 5.81s Full banner tooltip settled → 7.85s Move away, tooltip closes.

After: 0.50s Clamped banner, tooltip closed → 3.95s Hover banner description → 8.66s Full banner tooltip settled → 10.70s Move away, tooltip closes.

The three-line banner shows the start of the config directory but truncates its 180-character basename and following instruction. Hover reaches the full directory and end of the instruction. Refresh and dismiss remain visible.

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| [F3-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8c764b3f01f55841/F3-before.mp4)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | [F3-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/894c18f3d078e5b9/F3-after.mp4)<br>[7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | N/A — recording, no still pair<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | N/A — recording, no still pair<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) |

## F4 — Model-picker unavailable provider-icon tooltip — 1280×900 — dark

Environment (both sides): Chromium 148.0.7778.96 via Playwright 1.60, headed Xvfb on Linux; no device emulation; viewport 1280×900 CSS px, DPR 1, font scaling 100%, dark, reduced motion, en-US/UTC. Browser Date fixed at 2026-11-10 09:00 UTC after initial render; server clock live. F1 uses X11 cropped to the complete browser viewport; videos use Playwright recording at 1280×900.

Same scripted interaction; timestamps are seconds into each clip (settle delays vary):

Before: 0.00s Picker closed → 1.62s Open model picker, empty search → 2.68s Hover unavailable Claude proof icon → 5.83s Full prefixed tooltip settled → 7.87s Close picker.

After: 0.00s Picker closed → 1.59s Open model picker, empty search → 2.64s Hover unavailable Claude proof icon → 8.76s Full prefixed tooltip settled → 10.81s Close picker.

The disabled icon’s wrapper remains hoverable. Its full `Claude proof: Unavailable.` message and directory are visible without a clamp. The separate three-line ModelPickerContent setup notice is unreachable for this Claude snapshot (`hasProviderSetup` is false); no artificial capture of that branch is claimed.

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| [F4-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/57123a8f8dde95bd/F4-before.mp4)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | [F4-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ce4afd5dd77fc10b/F4-after.mp4)<br>[7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | N/A — recording, no still pair<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | N/A — recording, no still pair<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) |

## F5 — Native environment provider detail — 390×844 — dark

Environment (both sides): **one leased iPhone 13 simulator**, iOS 27.2, native T3 Code Dev 0.1.8; 390×844 logical viewport, native DPR 3, agent-device screenshots 390×844 at 1×, text-size medium, runtime fontScale 0.941, dark. **Reduce Transparency enabled for both accepted stills.** OS clock live; no agent-device clock/status-bar override is exposed. No browser emulation. Native motion setting unchanged; whole-surface frames are pixel-stable.

Both servers use the same synthetic fixture and environment identity. The native detail screen remains mounted on the after checkout's Metro bundle while the backend switches between the specified before/after commits. The production diff is only ClaudeProvider.ts plus its tests; native/client-runtime/contracts code is byte-identical across this comparison. This avoids recreating the iOS back button, which left seven corner pixels of rasterization noise even with Reduce Transparency. No native text, health response, or image pixels were injected/replaced. The real before server supplies the legacy message; the real after server supplies the new one.

The existing native ScrollView is positioned at contentOffset y=261 on both sides. Native Text has no line limit; the complete selected-provider message including final API-key guidance fits. Two whole-surface screenshots with **500 ms between captures** compare at decoded AE 0 before accepting each still. The unmodified whole-surface stills below preserve the live clock (before 2:25; after 2:27).

**Diff mask, and only mask:** rectangle **x=0, y=0, width=390, height=44**, half-open bounds `[0,390) × [0,44)`; both comparison inputs are filled black there. This covers only the status bar, including its clock and return-to-Settings breadcrumb. Stills remain entirely unmasked. No alignment/registration, native cropping, back-button mask, or pixel replacement is used. **All unmasked pixels above y=471 are identical, including the entire native back button.**

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F5-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/df63b5b5c93cc0b3/F5-before.png)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | ![F5-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c41bbf27cacb7213/F5-after.png)<br>[7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | ![F5-Diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/97d902a05d159e02/F5-Diff0.png)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) | ![F5-DiffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fdefd3d9b27a3e6a/F5-DiffT.png)<br>[633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) → [7dec8630ec](https://git.cafe/pingdotgg/t3code/commit/7dec8630ec2b07bcacacb2b9f0d9e4d3fd5bc605) |

## Settled frames and diffs

F1's accepted round-1 proof is unchanged. For replacement F2, each settled popup requires decoded-pixel-identical desktop captures 600 ms apart; every narrated timestamp was extracted from the delivered clip and opened. Both clips were also inspected throughout using 2 fps contact sheets. Direct X11 recording avoids the previous ghosting issue.

For replacement F5, each accepted unmasked whole-surface still has two pixel-identical frames 500 ms apart, compared with ImageMagick AE on decoded pixels, not PNG bytes. Both stills and both newly generated diffs were opened after final processing and before uploading. Attempts with back-button differences were rejected and retained locally.

Diff0 is zero threshold (0% fuzz), amplified as binary magenta changed pixels against dark unchanged pixels. DiffT uses a stated **2% ImageMagick fuzz threshold**. F1 uses its original full viewport comparison. F5 uses only the exact status-bar mask specified above.

- F1 unchanged: Diff0 AE 93866; DiffT AE 89130.
- F5 replacement: **Diff0 AE 28195; DiffT AE 25350.** Unmasked change bounds: x=31…357, y=471…839 inclusive. Header AE 0; all unmasked pixels above the authentication message AE 0.

## What else changed

- F1: the list summaries now show the longer wording and truncate after two lines. The complete editor status wraps to more lines, increasing its height by 96 px and shifting Display name/Runtime and later fields down; Launch arguments moves below the viewport. The surrounding Settings layout is otherwise unchanged.
- F2: Unsupported and the compatibility icon remain. Both tooltips grow to fit the new message and collision-position below their triggers instead of above. Peer list summaries also show the longer wording. The binary path, keyboard steps and surrounding Settings layout are the same on both sides.
- F3: the longer description expands the banner from its short centered width to almost the full content width and adds two text lines. Refresh/dismiss positions follow the larger banner. The full tooltip is taller and collision-positioned below instead of above. The draft/project/composer remain the same.
- F4: the unavailable tooltip is taller and shifts upward to stay in the viewport. The changed banner behind the picker is also visible. The picker is empty because all enabled synthetic Claude instances are signed out; this is the same before and after.
- F5: the complete message makes Claude proof taller; Update Claude proof moves down, and Z env/Z short follow. Z short falls below the after viewport; Z env is partially visible. All unchanged content above the message, including the back button, is pixel-identical after the status-bar-only mask. The unmasked live clock changes independently and is explicitly excluded from both diffs.

## Unverified conditions and exclusions

All five affected rows have both captures; F1/F3/F4 are the previously accepted assets, unchanged. F2/F5 are this replacement pass. F5 status-bar time is not frozen and is excluded from both diffs with the exact disclosed rectangle; whole-surface stills are unmasked. Reduce Transparency and a single mounted native renderer were required to remove unrelated native back-button pixels. These are rendering controls applied equally, not product changes. The native motion setting is unchanged, with verified pixel stability. No separate Electron run, alternate theme/viewport, Android run, or unchanged C1/C2 visual control is claimed. No tests or CI/review state were reassessed during this capture-only task.

## Drivers and seeds

The updated archive contains all round-1 scripts under `original/`, plus the F2/F5 replacement drivers, timestamp reports, dimensions, mask/AE metrics, and a reproduction README under `recapture/`. Runtime databases, credentials, configuration files and private logs are excluded. Original scripts are retained for F1/F3/F4; use recapture drivers for F2/F5.

[capture-scripts-recapture.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/907d9fb0668738ef/capture-scripts-recapture.zip)

## Cleanup and attribution

All dev servers, Metro/Xvfb processes and the one device lease started for this pass were stopped using captured process IDs/session names. Ports 38684, 46724 and 8081 are no longer listening. The temporary before worktree was removed. The after checkout remains at the requested head with no tracked changes. No commit, push, PR edit or real agent turn was performed. Checks and reviews were not assessed in this evidence-only pass.

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