# F12 — capture2 merged evidence

**CAPTURED — web resolved annotation and activity thread; native Activity→Discussion→Back. No server Resolve toggle.**

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.

HARNESS reviewThreads supplies one resolved thread with two short media-table comments. Web Code uses the real proof.txt diff annotation, initially collapsed, then opens; Timeline opens the activity discussion. Native client resolved filter is enabled, then the actual Discussion route opens and Back returns. No resolve/comment RPC is sent.

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

## F12-activity-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=130668/86855; bounds=[136, 906, 720, 1717]. 

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F12-activity-web-narrow-dark-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd4e6b862f60d7a0/F12-activity-web-narrow-dark-before.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | ![F12-activity-web-narrow-dark-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/733c0c3123854159/F12-activity-web-narrow-dark-after.png)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F12-activity-web-narrow-dark-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb2813c14c4ef0e0/F12-activity-web-narrow-dark-diff0.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F12-activity-web-narrow-dark-diff12.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7bb94cb9d0326d6/F12-activity-web-narrow-dark-diff12.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

Settling partners: [F12-activity-web-narrow-dark-before-settle1.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/11af656a8544375a/F12-activity-web-narrow-dark-before-settle1.png) · [F12-activity-web-narrow-dark-after-settle1.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95de646cf63186e9/F12-activity-web-narrow-dark-after-settle1.png). 

## F12-annotation-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=239475/170995; bounds=[62, 680, 768, 1622]. 

| Before | After | Diff0 | DiffT |
|---|---|---|---|
| ![F12-annotation-web-narrow-dark-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/81e44843acde60a4/F12-annotation-web-narrow-dark-before.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | ![F12-annotation-web-narrow-dark-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d2323352418cb04/F12-annotation-web-narrow-dark-after.png)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F12-annotation-web-narrow-dark-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3ace2b3b47ab48be/F12-annotation-web-narrow-dark-diff0.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) | ![F12-annotation-web-narrow-dark-diff12.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c1ff694d98868770/F12-annotation-web-narrow-dark-diff12.png)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6)→[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

Settling partners: [F12-annotation-web-narrow-dark-before-settle1.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6bc5c06684178b09/F12-annotation-web-narrow-dark-before-settle1.png) · [F12-annotation-web-narrow-dark-after-settle1.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/315586bbfa716357/F12-annotation-web-narrow-dark-after-settle1.png). 

## ios — Activity → Discussion → Back

Resolved filter is enabled locally before recording. Open the actual activity discussion, show both real comment containers, then Back. No Resolve mutation. Action timestamps below are seconds from each record-start completion; preparation is excluded. The recorder may stop encoding unchanged frames before the stop-call clock.

Before: 6.0s press Open resolved discussion in proof.txt; 12.9s back; 16.4s record stop.

After: 6.0s press Open resolved discussion in proof.txt; 13.4s back; 17.1s record stop.

| Before | After |
|---|---|
| [F12-ios-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d3412cd4025ca01/F12-ios-before.mp4)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | [F12-ios-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f466fba3f1eec832/F12-ios-after.mp4)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

before action clock: [F12-ios-before-events.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/59fa4f950ae472b8/F12-ios-before-events.json) · after action clock: [F12-ios-after-events.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e9a9a188be47149/F12-ios-after-events.json) · 

## android — Activity → Discussion → Back

Resolved filter is enabled locally before recording. Open the actual activity discussion, show both real comment containers, then Back. No Resolve mutation. Action timestamps below are seconds from each record-start completion; preparation is excluded. The recorder may stop encoding unchanged frames before the stop-call clock.

Before: 6.0s press Open resolved discussion in proof.txt; 16.3s back; 20.3s record stop.

After: 6.0s press Open resolved discussion in proof.txt; 16.8s back; 20.3s record stop.

| Before | After |
|---|---|
| [F12-android-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a48892e617c54a3/F12-android-before.mp4)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | [F12-android-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1683c7599610d75a/F12-android-after.mp4)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |

before action clock: [F12-android-before-events.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/651c2bd140e814ba/F12-android-before-events.json) · after action clock: [F12-android-after-events.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dbba01c220f29965/F12-android-after-events.json) · 

## Web narrow dark — annotation

At≈0s the resolved annotation/activity discussion is collapsed; at≈1s open it; at≈3s pause media after loading both cell videos; hold the expanded result. Exact web sequence is in web-sequence.md and browser-f12record.js. Action timestamps below are seconds from each record-start completion; preparation is excluded. The recorder may stop encoding unchanged frames before the stop-call clock.

| Before | After |
|---|---|
| [F12-annotation-web-narrow-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/738b95825a31d7f5/F12-annotation-web-narrow-dark-before.mp4)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | [F12-annotation-web-narrow-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/68b644dfb88dc7b5/F12-annotation-web-narrow-dark-after.mp4)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |



## Web narrow dark — activity

At≈0s the resolved annotation/activity discussion is collapsed; at≈1s open it; at≈3s pause media after loading both cell videos; hold the expanded result. Exact web sequence is in web-sequence.md and browser-f12record.js. Action timestamps below are seconds from each record-start completion; preparation is excluded. The recorder may stop encoding unchanged frames before the stop-call clock.

| Before | After |
|---|---|
| [F12-activity-web-narrow-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8485a42942b2dcab/F12-activity-web-narrow-dark-before.mp4)<br>[32ecd71726](https://git.cafe/pingdotgg/t3code/commit/32ecd71726fee16f335484c1f95cbce126d461f6) | [F12-activity-web-narrow-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/79046b935fb57ec7/F12-activity-web-narrow-dark-after.mp4)<br>[57eaadd11e](https://git.cafe/pingdotgg/t3code/commit/57eaadd11e361b203d165aa9b64f3951df6cbdb4) |



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)
