# Verification evidence — fresh round 2

Issue [#21087](https://git.cafe/pingdotgg/t3code/issues/21087). Base [b5a226e49c](https://git.cafe/pingdotgg/t3code/commit/b5a226e49c52ecab4ddc2d678a7012d97e651a6a) → final [150961baea](https://git.cafe/pingdotgg/t3code/commit/150961baea123868a67464c57f33cf15517abce7). All captures here are fresh; no old partial pair is reused. **Affected static layouts are verified; the complete interaction matrix is not fully verified.** No new regression observed. A4's former overflow is fixed: its authored 120px failure card now grows from112px to366px, with the explanation inside and the settled label below.

Exact coverage: **13 mandatory matrix rows (A1–A5, R1–R8), plus2 source-inspected H exclusions; 24 fresh static pairs =48 whole-surface PNGs, 48 diff PNGs, and14 recordings.** A1–A5 each have all4 required viewport/theme combinations; R1 inline has4 pairs and block is adjacent to A1. A5 is labeled actual-component harness. Several subcontrols remain unverified below; this is not a claim of complete merge readiness.

## Lead before/after

Before — narrow dark, real read/operate-only paired web:

![Before: generic denied host video with futile Retry, adjacent image explanation](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6ef3f2c127f45197/before-a1-390-dark.png)

After — same fixture and viewport, final HEAD:

![After: video explains missing host-file access and removes Retry; image unchanged](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a42e92bd38568336/after-a1-390-dark.png)

Before — authored120px card:

![Before: authored120px generic failure and cramped Retry](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/41d731d51aa137e9/before-a4-390-dark.png)

After — authored120px card grows to366px:

![After: complete permission explanation contained inside authored120px card without settled-label overlap](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4aa6dbb9619ed441/after-a4-390-dark.png)

## Environment and controls

Linux x86_64, Chrome154.0.0.0 desktop UA. CSS viewports1440×1000 and390×1000; DPR2; visualViewport.scale1 (100%); standard system sans, root16px, alert14px. Web-only390 is not native mobile. Whole surface retained, no crops/alignment/resizing before diffs. Native preview wide stills are1280×889, downscaled from CSS1440×1000 (x0.888889,y0.889); narrow stills780×2000 (DPR2). Recordings preserve whole surface; actual stream dimensions and variable encoded durations are in video metadata. Preview screenshot pixels must not be described as CSS pixels.

Settled static Date frozen to2026-10-22T12:05:00Z; fixture timestamps12:00Z. Performance/media clock stays live. Same fixtures, scroll0, theme, closed main sidebar/thread-details/right panel/terminal, pointer at blank bottom-right coordinate; focus blurred. Every capture records measured bounds and pressed states. A5 uses overlay scroll0 and actual V2ItemInspector, real restricted session, with a visible HARNESS label. No production renderer, permission, auth, modes, scopes/grants policy, sandbox, or MCP edits. Verification pairings only: restricted effective permissions exactly read+operate; playback pairing additionally filesystem:read, verified through read-only session endpoint. Pairing screens/tokens excluded. On recovery the endpoint's legacy scopes field still listed earlier scopes while effective permissions correctly included filesystem:read; claims use effective permissions.

Isolated synthetic home `/home/ubuntu/wt/issue-21087/.t3/evidence`; environment `dfd81181-5286-4a7c-97b7-8780f412d479`; routes `media-permission-a1` through `a5`, `r1/r2/r3/r7/r8`. No live DB copied/read/written this round. Existing synthetic projections reused unchanged across base/final. Source is already committed in [92182743d2](https://git.cafe/pingdotgg/t3code/commit/92182743d2a8101b9d9c72fedba7a1e9dbd7a5bd): [seeder](https://git.cafe/pingdotgg/t3code/blob/150961baea123868a67464c57f33cf15517abce7/scripts/seed-media-permission-fixture.py), [harness](https://git.cafe/pingdotgg/t3code/blob/150961baea123868a67464c57f33cf15517abce7/scripts/media-permission-evidence-harness.js). Seeder generates PNG/H.264 and coherent completed projection records; no provider runs. At base, committed harness source was retained under/tmp and evaluated with Vite-resolvable React imports; actual components always came from selected base/final checkout. No new source modifications or commits this round.

Media unchanged across both phases: MP4 SHA256 `14828a3ac3b5c95243fe1975856300e57f35634769413305d01c83193a7f90e3`; PNG `1069ec4862884e212adda3c24ffdc49731c5794d0379f3213b6367783b77f8f5`. Recovery file absent at each phase start, copied from same MP4 only during the scripted recovery. Fresh server per phase clears signed-URL cache.

## Every matrix row

| Row | Fresh before/after evidence | Unverified control / exact limit |
|---|---|---|
| A1 | P static, denied Retry recordings wide-light/narrow-dark. Before generic→Retrying→same generic; after permission explanation, zero Retry/Open. Adjacent block image unchanged. | None for denied appearance/Retry; reconnect pairing itself stays private. |
| A2 | P empty-label static, no doubled/leading separator, removes Retry. | No distinct interaction quota. |
| A3 | P both long prose and140-character unbroken basename. Both explanations contained; page scrollWidth equals viewport. | No extra native-mobile claim. |
| A4 | P actual assistant raw-HTML authored120×68 path. Final measured120×366; no horizontal overflow/settled overlap. | Very narrow authored width naturally breaks words; not enlarged cosmetically. |
| A5 | P actual V2ItemInspector in explicitly labeled harness, italic inherited; explanation fits. | Matched media context-menu open/close and disabled save/open actions UNVERIFIED: earlier right-click exposed no useful inspectable menu, and this round reused the existing harness without fabricating a native/DOM menu. Source guards inspected, not runtime proof. Production expanded reasoning renderer not claimed. |
| R1 | Block shares A1; inline at P; narrow pairs exactly pixel identical. Granted host image loads320×180 in paired real playback clips. | Denied→permitted pairing transition itself not recorded because it contains a token; matched endpoints and effective permissions verified. |
| R2 | Both real missing-file Retry rejection and controlled player disabled Retrying→Reject→Retry. Wide real recovery clips and harness clips at both endpoints. | Narrow real missing-file recovery not duplicated; wide sequence proves recovery, narrow generic/decode endpoint appears in real clips. |
| R3 | Real missing asset→create MP4→Retry→play/pause at wide-light in both phases; corrupt host remains generic/retryable with Open in browser at both endpoints. | Narrow file-creation recovery sequence not repeated; no signed-URL renewal/playhead claim. |
| R4 | Actual ChatMarkdownAssetImage GitHub-resource failure with good local fallback plays/pauses; fragment#t=0.1. Both endpoints/phases, labeled harness. | Not actual PR surface or public GitHub service. Unsupported example.invalid resource deliberately forces asset failure. |
| R5 | Broken fallback generic+Retry+Open original; click Retry remains generic. Both endpoints/phases. | Deferred fallback refresh resolution/rejection UNVERIFIED; deferred controls exercise MediaVideoPlayer separately and cannot establish asset-hook fallback refresh semantics. |
| R6 | Actual MediaVideoPlayer loading→Resolve→play/pause, both endpoints/phases. | Session-query pending→denied, pending→query-error, and independently delayed asset-hook loading→success UNVERIFIED: committed harness controls player props only; deterministic transport/query interception was not implemented. Do not infer those hook timelines from this clip. |
| R7 | Real filesystem-read pairing, signed host MP4#t=0.1 load/play/pause and PNG320×180, both phases/endpoints. Prior restricted endpoints recorded separately. | Pairing/token screen deliberately omitted; same-file restored playback proved on R7 fixture, not a continuously recorded A1 re-pair. |
| R8 | Actual ordinary HTTP good video play/pause plus corrupt neighbor generic Retry/Open original at both endpoints/phases. | Broken direct control is visible; its Retry click not separately exercised (host decode Retry is exercised under R3). |
| H1 | Source-inspected exclusion retained from matrix. | sourceFailed+nonnullsrc precedence/onOpen overlay not runtime-exercised. |
| H2 | Source-inspected exclusions retained from matrix. | workspace alias/attachment/tool-output/synthetic denied+fallback combinations not runtime-exercised; no production caller quota added. |

P =1440 light/dark and390 light/dark. Separate native mobile, desktop shell/native menu, original macOS/Linux remote pairing, relay/tunnel and multi-environment modes remain unverified/out of this web evidence scope. Desktop shares renderer but was not launched. Providers/entry points/services/contracts unchanged. No broad checks/tests were run for this evidence-only round.

## Static pairs, SHAs and diffs

Diff0 =absolute RGB difference at threshold0 amplified8×, clamped255. Diff16 =per-pixel maximum channel delta **>16**, magenta on black. No alignment, crop or normalization. All incidental differences retained. Statistics include exact changed-pixel counts/bounds.

| Row / CSS viewport / theme | Before<br>[b5a226e49c](https://git.cafe/pingdotgg/t3code/commit/b5a226e49c52ecab4ddc2d678a7012d97e651a6a) | After<br>[150961baea](https://git.cafe/pingdotgg/t3code/commit/150961baea123868a67464c57f33cf15517abce7) | Diff0 ×8<br>base→final | Diff16 >16<br>base→final |
|---|---|---|---|---|
| a1 / 1440×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0b33b29f6cad3c72/before-a1-1440-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/512cba70dfc9b6ee/after-a1-1440-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/21d19ea2a6481037/diff0-a1-1440-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a954a2b6aa0841f1/diff16-a1-1440-light.png) |
| a1 / 1440×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e7576da30efc16f2/before-a1-1440-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/99694ddd4d856148/after-a1-1440-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d6560a2bccf3562/diff0-a1-1440-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e0967229635be26/diff16-a1-1440-dark.png) |
| a1 / 390×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da82c76c019b980b/before-a1-390-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a76d6988c139ce0/after-a1-390-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e5511f8fa410fd8/diff0-a1-390-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7124633ce4b83329/diff16-a1-390-light.png) |
| a1 / 390×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6ef3f2c127f45197/before-a1-390-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a42e92bd38568336/after-a1-390-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eddc68ddfbd2fba6/diff0-a1-390-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3aa32ccce7c2b916/diff16-a1-390-dark.png) |
| a2 / 1440×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c8c3b29f9957d8f8/before-a2-1440-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14c2468f84391ced/after-a2-1440-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ac02e554025df17b/diff0-a2-1440-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/762ee73276cf2e5c/diff16-a2-1440-light.png) |
| a2 / 1440×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/10d7a9f9a23d6c68/before-a2-1440-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a7e89e5ba0a4931c/after-a2-1440-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/02e587065d82efd8/diff0-a2-1440-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8ed56df9a5e9e19/diff16-a2-1440-dark.png) |
| a2 / 390×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9b7ebdd326305cf0/before-a2-390-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6fd7abd5b90d8f6f/after-a2-390-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/768959b96845ce34/diff0-a2-390-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fdf3a95165b4f965/diff16-a2-390-light.png) |
| a2 / 390×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74612877b5db3c48/before-a2-390-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2bbbf7fd039e9a42/after-a2-390-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/070dd5309bfc6f79/diff0-a2-390-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5559ead3f74526e5/diff16-a2-390-dark.png) |
| a3 / 1440×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/53646e129a3fa8dd/before-a3-1440-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db559d149ef97358/after-a3-1440-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3a96557275b4599b/diff0-a3-1440-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f79b6bef8fe410a0/diff16-a3-1440-light.png) |
| a3 / 1440×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9263e4819fb17612/before-a3-1440-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a2f3ce47977d5873/after-a3-1440-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d601e4d24d7017b0/diff0-a3-1440-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ab26bc45bb4b7d21/diff16-a3-1440-dark.png) |
| a3 / 390×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/92068e42f28a7b85/before-a3-390-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/294e082780d1ea8c/after-a3-390-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad18adffbefcee79/diff0-a3-390-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/78b03101ef122bdc/diff16-a3-390-light.png) |
| a3 / 390×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b39362ec81f0e2ac/before-a3-390-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7092a09d77aecf26/after-a3-390-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95d4033cbfc3abb3/diff0-a3-390-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd3916e91dcce216/diff16-a3-390-dark.png) |
| a4 / 1440×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/46193b0e89c4e197/before-a4-1440-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2dd02685c9546deb/after-a4-1440-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/493f70a963dfb3d1/diff0-a4-1440-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e69f22153744ee34/diff16-a4-1440-light.png) |
| a4 / 1440×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/863004f6be6a1a5b/before-a4-1440-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dab46091586ee8bd/after-a4-1440-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b7003845d8d92dfb/diff0-a4-1440-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a63b26e88d0a3c5b/diff16-a4-1440-dark.png) |
| a4 / 390×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22169c9fbb4edcf8/before-a4-390-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e00db4d6bcd87798/after-a4-390-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e0ae39124401ee61/diff0-a4-390-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f28f76aa1731885a/diff16-a4-390-light.png) |
| a4 / 390×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/41d731d51aa137e9/before-a4-390-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4aa6dbb9619ed441/after-a4-390-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ce3757f31be81be/diff0-a4-390-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b599df77cdb38c88/diff16-a4-390-dark.png) |
| a5-harness / 1440×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6f9e28afbbb64255/before-a5-harness-1440-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a2a97546664ec98/after-a5-harness-1440-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b559942edf148d8a/diff0-a5-harness-1440-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/55a4d07ce4beb65a/diff16-a5-harness-1440-light.png) |
| a5-harness / 1440×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fd370ee27d8b1082/before-a5-harness-1440-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1904d260421dba21/after-a5-harness-1440-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d065031d7e551cfd/diff0-a5-harness-1440-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1dbad5b97d61398a/diff16-a5-harness-1440-dark.png) |
| a5-harness / 390×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ae2554757e5a3d58/before-a5-harness-390-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/607d0d8b1c477529/after-a5-harness-390-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70e616f2716472fb/diff0-a5-harness-390-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cab20dd1837041a7/diff16-a5-harness-390-light.png) |
| a5-harness / 390×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5800e7f083c679d3/before-a5-harness-390-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/12b96e2b4915572b/after-a5-harness-390-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/57572c23e5fdddee/diff0-a5-harness-390-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d24dc830ee16bcaf/diff16-a5-harness-390-dark.png) |
| r1 / 1440×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ccecbc9e4ab70008/before-r1-1440-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/55deaf8cffbdfef3/after-r1-1440-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d210ea18fea0fc9d/diff0-r1-1440-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3677668f05054dc/diff16-r1-1440-light.png) |
| r1 / 1440×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6224b1b45a8e217e/before-r1-1440-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6eb11a87dca3fecd/after-r1-1440-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b62d41053cacfdb/diff0-r1-1440-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ff9203209f4030da/diff16-r1-1440-dark.png) |
| r1 / 390×1000 / light | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/11ec7d963698a0b6/before-r1-390-light.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1fcc0e49442a25bc/after-r1-390-light.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ac58cedf8ec8ac5f/diff0-r1-390-light.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3f8f0a1b6941392/diff16-r1-390-light.png) |
| r1 / 390×1000 / dark | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9fa31471ef325069/before-r1-390-dark.png) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54a0e33eac25e984/after-r1-390-dark.png) | [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f69dc9dab75190e5/diff0-r1-390-dark.png) | [Diff16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8336e2e4b7324d1/diff16-r1-390-dark.png) |

## Every visible difference

- A1: video text gains access explanation; Retry disappears; icon/text recenter and wrap. Adjacent image/card/status remain unchanged. Wide top-left sidebar icon has tiny antialias deltas.
- A2: same changes without a label/separator; wrapping and icon position change. Wide-light has a tiny composer-edge delta near the lower-right editor; no text/control change there. Wide sidebar icon antialias deltas retained.
- A3: both long labels gain the explanation; line wrapping, centering and icon positions change; both Retry buttons disappear. Content stays within the same width, no page horizontal scroll. Wide sidebar icon tiny deltas retained.
- A4: generic text/Retry replaced by long explanation; card grows112→366px, text is contained and wraps into short fragments, icon moves, settled status moves down254px. The former cramped Retry is removed. Card width stays120px. Wide sidebar icon tiny deltas retained.
- A5 actual-inspector harness: italic failure text gains detail and rewraps/recenters; Retry disappears. The removed Retry hover/focus background is included in dark diff pixels. Harness label and enclosure unchanged; no fabricated application inspector navigation.
- R1: narrow light/dark are exactly zero pixels changed. Wide dark12 pixels at delta0, zero above16; wide light23 pixels at delta0, one above16. All are in top-left sidebar icon, outside inline media; no image wording/layout changes.
- Recordings: denial after has no Retry action to click. Generic retry/recovery/fallback/direct controls keep generic wording and working playback. Navigation/loading splashes and native video playhead/control visibility vary in timing; videos are matched scripts, not pixel-diff claims. New message explanation/card sizing are the only intended product changes. No claim that every encoded frame or antialias pixel is identical.

## Recordings — narrated timestamps

No audio track/narration was added; the following text narrates the matched scripted actions. **Action timestamps are performance-clock elapsed time, not encoded MP4 time.** Preview recording removes/compresses some idle time: e.g.3s denied hold encodes0.788s wide after,3.255s narrow after. Raw step timestamps, start/stop UTC, dimensions and exact MP4 durations are linked below. Do not infer request latency from MP4 duration.

Denied script in both endpoints: action t0 initial restricted A1; t+1.0s before clicks Retry; by t+3.0s same generic failure with Retry is back. After t0→t+3.0s holds same A1, verifies zero Retry/Open and explanatory text; a nonexistent Retry cannot be clicked. The narrow clip includes the pending Retrying state; do not infer a settled response from its tail frames. The settled generic/Retry endpoint is established by the static before-A1 capture and action log, and the wide sequence records the retry attempt. Before videos encode2.215s wide/1.458s narrow; after0.788s wide/3.255s narrow.

Harness matched sequence (elapsed offsets vary<0.4s): t0 good fallback; t+1.2s played/paused; t+2.4s broken fallback generic+Retry+Open original; click Retry, t+3.4s still generic; t+4.4s controlled pending Retrying disabled; t+5.1s Reject→Retry; t+5.6s pending second Retry; t+7.3s Resolve→played/paused; t+8.0s loading slot; t+9.7s Resolve→played/paused. Four clips encode10.08–10.78s. These timestamps come from actual step logs, not promises stated without observation. The harness's explicit Resolve/Reject controls remain visible and label its artificial boundary.

Real matched sequence: navigate R7 (initial loading splash), play for1.3s then pause, verify#t=0.1 and320×180 image; navigate R3, click Retry on corrupt host MP4, wait1.3s, verify generic Retry/Open in browser; navigate R8, play good HTTP video for1.3s then pause, broken HTTP neighbor visible with generic Retry/Open original. Whole sequence encodes before21.249s/13.237s and after19.251s/12.614s (wide/narrow). Navigation timings differ; the logs give performance timestamp within each newly navigated document. Native video playhead advances about1.4s for fragment playback. Each sequence includes whole-surface splash frames, not cuts hiding loading.

Real wide recovery in both phases: t0 missing-file generic; click Retry; t+1.3s generic Retry retained; operator copies fixture MP4 at the same path; click Retry; by about t+1.7s the video is mounted; play1.3s and pause. Encoded before3.638s/after3.577s. Browser observes successful asset recovery; this is not permission being granted by Retry. Separate real pairing restored filesystem access before these recordings.

Plain video links below are verbatim ghdrop stdout (no rewritten video URLs):

after-denied-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/63c32c24d7b570c0/after-denied-1440-light.mp4

after-denied-390-dark.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/515bed62fbf6410c/after-denied-390-dark.mp4

after-harness-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9837e8edec4e91f1/after-harness-1440-light.mp4

after-harness-390-dark.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/73f50217d5ea3a71/after-harness-390-dark.mp4

after-real-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2cb168dcb4923d4a/after-real-1440-light.mp4

after-real-390-dark.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/09c9d0e357f31c4c/after-real-390-dark.mp4

after-recovery-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/465c30386a3485f4/after-recovery-1440-light.mp4

before-denied-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f861507324c2ef5c/before-denied-1440-light.mp4

before-denied-390-dark.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b42a64d6788631f8/before-denied-390-dark.mp4

before-harness-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0d9c12be3d07265/before-harness-1440-light.mp4

before-harness-390-dark.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9b516dfcfb4f37b2/before-harness-390-dark.mp4

before-real-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fb8fd91393092ff4/before-real-1440-light.mp4

before-real-390-dark.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3ee371a9177dab7f/before-real-390-dark.mp4

before-recovery-1440-light.mp4

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f4871fc108fc7052/before-recovery-1440-light.mp4

## Machine-readable evidence

[capture-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95b3652f89b587ea/capture-manifest.json)

[recording-log.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2730064b23c4725b/recording-log.json)

[diff-statistics.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9de8bb2621fb5c4/diff-statistics.json)

[video-metadata.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/68d43ff7f067fd52/video-metadata.json)

## Unverified controls carried forward

A5 media-menu interaction; R1/R7 continuous pairing transition; R5 asset-hook fallback resolve/reject; R6 session pending→denied/error and independent asset loading; R8 direct broken Retry click; narrow actual file-creation recovery; H1/H2 defensive combinations; desktop/native-mobile/remote modes. Reasons are in the complete matrix above. No mandatory row is removed or silently marked passed. Existing committed harness cannot prove query transport timelines by changing player props, and no substitute is represented as that proof.

## FRICTION

- Prior native preview wide PNG downscales1440×1000→1280×889; report both CSS and output dimensions, never conflate them.
- Prior evaluate has15s maximum and continues timed-out JS; all scripts here split into<15s calls. No interrupted recording reused.
- Prior panel state persisted across responsive changes, obscured A1 and produced wide mismatches. This round explicitly closes pressed panels after each route/viewport, resets scroll/focus, moves pointer blank, saves measured states, inspects whole images. No earlier A1 before pair reused.
- Prior role locator exact=true was unsupported; DOM exact button matching used for scripted controls.
- Prior dynamic React imports needed module.default normalization; committed harness preserves it, base evaluation resolves React through Vite optimized paths.
- Prior pairing hash URL could fail to visibly re-pair; this round uses query pairing URL and verifies effective permissions after routing. Legacy scopes response can differ from permissions; use permissions.
- Prior recovery cache could retain successful signed URL; recovery file absent and fresh phase server used. Narrow real file-creation recovery explicitly not duplicated.
- Prior media-menu right-click produced no usable inspectable menu; menu interaction remains unverified, no synthetic menu fabricated.
- Prior A4 was112px high with320px text; fixed final capture measures366px high and contains text. No production changes by capturer.
- This round preview_status initially unavailable; preview_open about:blank rejected “Invalid preview URL (parse: https:; input length11)”. Retrying preview_open with no URL successfully created owned tab. No standalone browser used.
- Initial pairing returned bootstrap thread and permission-change notification; direct fixture routing, exact effective-permission read and notification dismissal preceded captures.
- One startup wait timed out while Vite was ready but server had not bound yet; after listener became healthy, navigation succeeded. No failed startup frames used for static captures.
- Evaluator rejected harness expression with trailing whitespace; trim then run succeeded. No production/harness source change needed.
- Recorder variable-duration compression shortens idle holds; measured action logs and encoded metadata are separate. No latency claim from compressed playback.

## Handoff

Checkout restored to `fix/issue-21087`, HEAD150961baea123868a67464c57f33cf15517abce7, clean. Base process groups1080191 and1088761 stopped by captured PGID. Final isolated server intentionally retained for primary integrated pass under user handoff authorization: **runner PID/PGID1091969**, server PID1092197 port13866, Vite PID1092183 port5826, home `/home/ubuntu/wt/issue-21087/.t3/evidence`. Detached start has no retained PTY session. Primary owns teardown with exact captured process group. Logs under/tmp/issue-21087-round2/final-dev.log (private; not uploaded). Own preview tab closed; no other tab operated. No push, forge write, PR creation, new commit or committed screenshot. ghdrop uploads only explicitly requested public evidence. `docs/EVIDENCE.md` was absent in checkout and no copy found under/home/ubuntu.

Skills: [test-t3-app](/home/ubuntu/t3code/.agents/skills/test-t3-app/SKILL.md), [ghdrop](/home/ubuntu/.codex/skills/ghdrop/SKILL.md). Model/harness: gpt-6.1-sol / Codex in T3 Code; native preview only.
