# F04 — capture2 merged evidence

**CAPTURED — retained matched gallery/strip flows plus normal link/reference cell on web, iOS and Android.**

HARNESS synthetic RPC data around real app routes. Before [32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6); after [57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4). Web Chrome156/Linux preview, no emulation,390×1000CSS,DPR2,fontScale1,dark. iPhone17Pro402×874pt,DPR3,fontScale1,light; still402×874/video1206×2622. Pixel9 API36,411.4286×923.4286dp,DPR2.625,fontScale1,dark (F01 both themes);1080×2424px. Agent-device/Simlock cached clients. JS clock08:00Z for stills; OS clock remains in full native frames. No independent Electron run; desktop shares web renderer.

The new fixture adds a normal Markdown documentation link and a reference in a text cell before the image/video rows. The after cell autolinks the reference through the real repository context; the base renderer displays the reference as text. Duplicate inline media remain; strip URLs are deduplicated. Gallery recordings use the previous fixture without this added text-only cell, as explicitly allowed by the addendum.

[Retained previous F04 proof, including earlier full tables/recordings](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/759c2057de864a11/F04-sheet.md). This sheet supersedes its coverage/status wording.

## F04-link-android-dark — Android dark,411.4286×923.4286dp

Two frames500ms apart: before=True, after=True. Diff0=RGBabsolute difference×16; DiffT=per-channel>12/255. Changed pixels0/T12=682397/651126; bounds=[42, 1059, 1038, 2304]. Before/After show full surfaces; Diff0/DiffT use the same status-bar crop: (0,120,1080,2424), Android rows120..2423.

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F04-link-android-dark-before-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1b400f4efa665f8/F04-link-android-dark-before-full.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | ![F04-link-android-dark-after-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94a824c4d57d8d17/F04-link-android-dark-after-full.png)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F04-link-android-dark-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cce204fe96ea5038/F04-link-android-dark-diff0.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F04-link-android-dark-diff12.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/30f6b13f7b626e03/F04-link-android-dark-diff12.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

Settling partners: [F04-link-android-dark-before-settle1-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/25520ac9b5899d06/F04-link-android-dark-before-settle1-full.png) · [F04-link-android-dark-after-settle1-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ccd7c0fe66787e88/F04-link-android-dark-after-settle1-full.png). Cropped source pair: [F04-link-android-dark-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4d2d7a9e4c9d55df/F04-link-android-dark-before.png) · [F04-link-android-dark-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f5e47c7a9b60f4d/F04-link-android-dark-after.png).

## F04-link-ios-light — iOS light,402×874pt

Two frames500ms apart: before=True, after=True. Diff0=RGBabsolute difference×16; DiffT=per-channel>12/255. Changed pixels0/T12=112692/106375; bounds=[16, 266, 386, 811]. Before/After show full surfaces; Diff0/DiffT use the same status-bar crop: (0,62,402,873), iOS rows62..872.

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F04-link-ios-light-before-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2cec5caefd7207f1/F04-link-ios-light-before-full.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | ![F04-link-ios-light-after-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b96a936ce6e9b3b/F04-link-ios-light-after-full.png)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F04-link-ios-light-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1549dd74553e372/F04-link-ios-light-diff0.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F04-link-ios-light-diff12.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/348fb79abc016a03/F04-link-ios-light-diff12.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

Settling partners: [F04-link-ios-light-before-settle1-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9b27b84695af84d5/F04-link-ios-light-before-settle1-full.png) · [F04-link-ios-light-after-settle1-full.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a565c7b779b310e3/F04-link-ios-light-after-settle1-full.png). Cropped source pair: [F04-link-ios-light-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8deae3471d5c7928/F04-link-ios-light-before.png) · [F04-link-ios-light-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cdb9f20b891efaf9/F04-link-ios-light-after.png).

## F04-link-web-narrow-dark — web narrow dark,390×1000CSS,DPR2

Two frames500ms apart: before=True, after=True. Diff0=RGBabsolute difference×16; DiffT=per-channel>12/255. Changed pixels0/T12=401988/346318; bounds=[94, 37, 731, 2000]. 

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F04-link-web-narrow-dark-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/299b0e8450a01472/F04-link-web-narrow-dark-before.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | ![F04-link-web-narrow-dark-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0eca42f68cc9e34/F04-link-web-narrow-dark-after.png)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F04-link-web-narrow-dark-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/567c4e7176318045/F04-link-web-narrow-dark-diff0.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F04-link-web-narrow-dark-diff12.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a6d05b97abf750e/F04-link-web-narrow-dark-diff12.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

Settling partners: [F04-link-web-narrow-dark-before-settle1.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/77ae34b4be1d774f/F04-link-web-narrow-dark-before-settle1.png) · [F04-link-web-narrow-dark-after-settle1.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/62238ebd8066df48/F04-link-web-narrow-dark-after-settle1.png). 

Scripts: [fixtures.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/02339fcdd64099b9/fixtures.json) · [proxy.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/423f2adfdadd429d/proxy.mjs) · [native-control.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7077291dac5bc0d0/native-control.py) · [web-sequence.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2da090fd55f92cd/web-sequence.md) · [capture2-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b7c4ba222afa00cc/capture2-manifest.json) · [recording2-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e4b84f26f5ca1e52/recording2-manifest.json) · [rebuild-capture2.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eedbcec94acc9c24/rebuild-capture2.md) · [rebuild-capture2.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2c8c8c89810f1b20/rebuild-capture2.zip)
