## Evidence

Captured **4/4 requested missing rows: S1, S4, S5, C2** (**4/15 named matrix rows** receive new captures in this pass). The remaining rows are accounted for below according to the supplied matrix’s collapse/no-extra-capture decisions. No required row is missing. PR [#33239](https://git.cafe/pingdotgg/t3code/pull/33239), [GitHub mirror](https://github.com/pingdotgg/t3code/pull/33239). The PR was not edited.

Baseline [4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63); after [53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746), the local main-merged head. Both ran from their own checkout. Service evidence uses Node v26.12.1/Linux x64, the real ServerSelfUpdate/pinned-runtime code, an injected HttpClient and deterministic Effect TestClock. Each row has a fresh synthetic harness home. Server captures have no viewport/theme.

**S1 — checksums HTTP 504; server transcript; viewport/theme: not applicable.** At virtual 0 ms: request SHA256SUMS → HTTP 504 → service failure → empty staging/runtime versions → no process calls or launcher handoff.

| Before | After |
| --- | --- |
| `Could not prepare t3@1.1.0.`<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | `Could not prepare t3@1.1.0 while downloading the t3 release checksums (HTTP 504 from cdn.example).`<br>[53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) |

Paired runtime capture: [S1-transcript.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/62fd3661c539f8e0/S1-transcript.md)

**S4 — download timeout; server transcript; viewport/theme: not applicable.** At virtual 0 ms: hold request headers; 59,000 ms: still pending; 60,000 ms: timeout interrupts request → service failure → empty staging/runtime versions → no process calls or handoff. This is deterministic Effect TestClock time, not wall-clock time.

| Before | After |
| --- | --- |
| `Could not prepare t3@1.1.0.`<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | `Could not prepare t3@1.1.0 while downloading the t3 release checksums (timed out) (from github.com).`<br>[53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) |

Paired runtime capture: [S4-transcript.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f5e46b114f44b27e/S4-transcript.md)

**S5 — checksum verification failure; server transcript; viewport/theme: not applicable.** At virtual 0 ms: HTTP 200 checksum file with deliberately wrong digest → HTTP 200 synthetic archive bytes → checksum verification failure → empty staging/runtime versions → no extraction, preflight or handoff.

| Before | After |
| --- | --- |
| `Could not prepare t3@1.1.0.`<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | `Could not prepare t3@1.1.0 while verifying the t3 release archive checksum.`<br>[53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) |

Paired runtime capture: [S5-transcript.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76c5842511d8368d/S5-transcript.md)

**C2 — web 390×844 dark, client-state harness on the real dev app; not a live update.** Each revision’s real service error is injected into its existing update-state atom and toast manager. Dev servers are unmanaged, so a release-URL override alone cannot reach this failure path. The captured message is 49 characters before and 207 after.

T3 Browser panel; Chrome 157.0.0.0 on Linux x64; CSS viewport 390×844; DPR 2 (780×1688 PNG/video); pointer capable; no device emulation; browser/app font scaling 100% (16px root); dark. Date frozen at 2026-11-10T12:00:00Z; interaction timers remain real. Both fresh dev servers used T3CODE_DEV_SEED=0, separate homes and their own revision’s migrations. All scroll containers at (0,0). Preview exposes no reduced-motion control; the identical client harness suppresses CSS animations/transitions. Fonts loaded and module/network requests settled before the stills.

Same scripted interaction, with actual timestamps relative to the seeded error:

| Interaction, seconds from seeded error | Before | After |
| --- | ---: | ---: |
| Inject real service error into client state and toast | 0.001 | 0.001 |
| Native clipboard write resolves with complete message | 2.309 | 2.321 |
| Copy click logged | 2.322 | 2.379 |
| “Copied error” feedback and exact full-text write verified | 3.351 | 3.450 |
| Close toast through its real manager | 5.083 | 5.214 |
| Hover truncated Settings Version row | 6.607 | 6.700 |
| Full tooltip visible; hold through end | ~7.8–11.1 | ~7.9–11.4 |

| Before | After |
| --- | --- |
| [C2-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/51eebe12cd21429b/C2-before.mp4)<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | [C2-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/707a9130e6679c8f/C2-after.mp4)<br>[53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) |

| C2 tooltip, 390×844 dark | Before | After | Diff0 | DiffT |
| --- | --- | --- | --- | --- |
| Settled final frame; full reason revealed | ![C2-before-tooltip.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f9655ea965f92c70/C2-before-tooltip.png)<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | ![C2-after-tooltip.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc7952db28efbe41/C2-after-tooltip.png)<br>[53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) | ![C2-tooltip-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/598fe22c6ff0c097/C2-tooltip-diff0.png)<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) → [53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) | ![C2-tooltip-diffT3.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fee0c889b9ac2e74/C2-tooltip-diffT3.png)<br>[4c361199f4](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) → [53d9b7c289](https://git.cafe/pingdotgg/t3code/commit/53d9b7c2892601b6b9999f97f2db5b3cbf272746) |

Diff0: absolute RGB difference ×255. DiffT: white where maximum RGB channel difference >3/255. Each side’s stability pair is pixel-identical at zero tolerance. All stills/diffs and representative toast/copy/reveal/final recording frames were opened and inspected.

What else changed:

- The service message grows from 49 to 207 characters; the after toast reaches its existing four-line clamp, while the before toast wraps to two lines.
- The taller toast moves its centered copy control down; the same click follows that control. Both recordings show successful copy feedback. The native clipboard write contains every character, including the complete long hostname.
- The Settings row remains truncated to the same visible prefix. Its tooltip grows wider and taller, moves upward to stay anchored above the row, and covers more of the machine/Version header. It reveals the added step, HTTP 504 and full hostname.
- Supplementary tooltip PNGs differ only inside the tooltip and its shadow, in raw pixel bounds x=130..769, y=101..299. Outside that region, the zero-threshold comparison finds 0 changed pixels. There are 94,472 changed pixels at zero threshold and 93,202 at a max-channel difference greater than 3/255. No masking, alignment or resizing was applied.
- Recording durations are 11.145 s before and 11.379 s after because of tool overhead; actual action timestamps are above. These are the same ordered interactions, not synchronized video-frame diffs.

**Rebuild scripts and source artifacts**

- [runtime-driver.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b2f28615938064c/runtime-driver.mjs) — identical executable service driver on both sides; writes a new timestamped run directory.
- [client-state-driver.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/514d789ac6da976d/client-state-driver.js) — identical client seed/clipboard audit; only checkout, revision error text and side label vary.
- [browser-workflow.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9c35f53871fe7a6c/browser-workflow.md) — isolated server commands, browser setup, exact actions, timing and limits.
- [make-diffs.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b2e74fcf195e3c90/make-diffs.sh) and [verify-pixels.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad82dadaf3cb4cfe/verify-pixels.py) — raw-image diffs and zero-threshold accounting.
- [make-transcripts.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7833bd118f617b6/make-transcripts.py) — paired transcript sheet generator.
- [raw-evidence.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54fd219b95e5e230/raw-evidence.zip) — all raw runtime JSON/logs, payloads, browser audit JSON, stability pairs, draft/review captures, scripts and SHA-256 manifest. No app homes, databases, credentials or provider state are included.
- [focused-tests-after.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fa1de5800add1618/focused-tests-after.log) — the existing selfUpdate test file passed, 15/15. This supports the capture; it does not replace any capture.

**Other matrix rows / unverified scope**

| Row | This pass |
| --- | --- |
| S2 | No extra capture per matrix; existing HTTP 403/503 substitutions ran within the 15 passing focused tests. |
| S3 | No separate capture per matrix; timeout row S4 captures the host-only optional-metadata shape. Connection refusal was not independently exercised. |
| S6 | No extra capture per matrix; managed-mirror-missing remains existing-test scope. |
| S7 | No extra capture per matrix; preflight-blocked branch not independently captured. |
| S8 | No extra capture per matrix; no claim to have exercised every unchanged gate/success/cached/handoff case. |
| S9 | No extra capture per matrix; retry is covered by the existing passing HTTP tests, not a live restart. |
| C1 | Collapsed into C2 per matrix; S1 supplies the ordinary service-message baseline. |
| C3 | No extra capture per matrix; active-thread composer not visually verified. |
| C4 | No extra capture per matrix; auto-balanced composer not visually verified. |
| C5 | No extra capture per matrix; batch/sidebar/track-switch UI not visually verified. |
| C6 | No native capture required by matrix; iOS/Android not visually verified. |

Requested rows unverified: **none**. Live service-managed update/restart and real release-mirror networking are unverified; the explicitly permitted H1/H3 harnesses were used. Browser clipboard read-back was unavailable; successful native write and UI feedback were verified instead. Both sides emit the same existing React div-inside-p warning in the Version description, without an observed visual regression. No light/wide duplicate was requested or captured.

Cleanup: both dev runners and their server/web children stopped; all four capture ports closed; the owned preview tab closed; before checkout removed; after checkout stayed at the requested head with no uncommitted changes. Available disk space at teardown: 109 GB. No source edits, commits, pushes, PR edits, real provider turns, or live T3 database access.

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

FRICTION:

- tool | Shared browser denies clipboard reads; native write interception plus resolved-write and feedback checks supplied the copy proof | expose optional clipboard read permission.
- tool | Preview has no reduced-motion control; identical harness CSS suppresses animation/transition | expose media emulation.
- tool | Browser tools choose their own artifact paths; generated captures were copied into the required scratch directory | allow a caller-selected artifact directory.
- tool | Short selector `h3` was rejected by preview; a specific attribute selector worked | accept valid short CSS selectors.

**Verbatim ghdrop output — assets**

![C2-before-tooltip.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f9655ea965f92c70/C2-before-tooltip.png)
![C2-after-tooltip.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc7952db28efbe41/C2-after-tooltip.png)
![C2-tooltip-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/598fe22c6ff0c097/C2-tooltip-diff0.png)
![C2-tooltip-diffT3.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fee0c889b9ac2e74/C2-tooltip-diffT3.png)
[C2-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/51eebe12cd21429b/C2-before.mp4)
[C2-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/707a9130e6679c8f/C2-after.mp4)
[S1-transcript.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/62fd3661c539f8e0/S1-transcript.md)
[S4-transcript.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f5e46b114f44b27e/S4-transcript.md)
[S5-transcript.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76c5842511d8368d/S5-transcript.md)
[runtime-driver.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b2f28615938064c/runtime-driver.mjs)
[client-state-driver.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/514d789ac6da976d/client-state-driver.js)
[browser-workflow.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9c35f53871fe7a6c/browser-workflow.md)
[make-diffs.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b2e74fcf195e3c90/make-diffs.sh)
[verify-pixels.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad82dadaf3cb4cfe/verify-pixels.py)
[make-transcripts.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7833bd118f617b6/make-transcripts.py)
[raw-evidence.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54fd219b95e5e230/raw-evidence.zip)
[focused-tests-after.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fa1de5800add1618/focused-tests-after.log)

**Verbatim ghdrop output — sheets and index builder**

[C2-sheet.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c42d6d0f34f777b6/C2-sheet.md)
[build-index.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b7012bfd204d7789/build-index.py)

[teardown-report.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/101cb6dc3004e30c/teardown-report.txt)
