Native still recapture for [#28097](https://git.cafe/pingdotgg/t3code/pull/28097), lead-28097-r2, fs-32.

**Outside the PR title:** Diff0 exposes small native status-glyph, navigation/text-edge and composer-shadow rasterization differences at or below 8/255. DiffT (>8/255) contains only the changed privacy guidance and the warning/card layout it moves. No “nothing else changed” claim is made.

Captured **13/13 before/after still pairs**, across seven phone/theme cases. These replace the rejected native stills, not the 14 accepted recordings. The recording links, encoded timestamps, milestone sheets and neighbor-frame review links below are inherited verbatim from the accepted native report; no new recordings were made.

Before: [eef35b0](https://git.cafe/pingdotgg/t3code/commit/eef35b0262f24e83ef09cd4d2a59b4baed1c2581). After: [8d1ec13](https://git.cafe/pingdotgg/t3code/commit/8d1ec13ca126532d1ec083f62e15985f756a2bb8). Each ran from its own detached checkout, through the actual React Native app and production RPC against three fresh synthetic backends. T3CODE_DEV_SEED=0; fake HOME, Grok CLI and fetch preload; no live T3 data read or copied. Single has one privacy account; A/B each have three privacy accounts, one successful Weekly 73% account and one generic forbidden account. A supplies the composer thread. No component harness was used.

Application JavaScript Date is frozen at 2026-11-03T00:00:00Z. Every still uses `agent-device screenshot --normalize-status-bar`. Each accepted still has two consecutive, pixel-identical RGB screenshots separated by a 500ms inter-command wait. Screenshots are full surfaces, without cropping, masking or pixel editing. iOS Reduce Motion and Prefer Non-Blinking Cursor were enabled on both revisions; Android animation scales were zero. Theme, text, IME and scroll state match within each pair. Recording conditions remain those documented in the inherited report.

Diff0 is absolute per-channel RGB delta amplified ×16 and clamped at255, with zero threshold. DiffT highlights max-channel delta >8/255 in pink over a dim baseline. Every before, after, Diff0 and DiffT was visually reviewed together; threshold checks also verified zero changed pixels in status/header and, for composer rows, composer/keyboard regions.

What else changed, re-derived from the new stills:

- M2: privacy notices now carry the xAI Privacy Mode instruction, including the environment prefix when both A and B are selected. Longer text wraps and changes notice height/lower visible content. Generic forbidden notices and Weekly 73% data retain their wording and values.
- M3: the single privacy warning grows upward; its heading and close affordance move with it. With the keyboard visible it covers more of the empty-feed hint. Composer and software keyboard stay in place.
- M4: longer privacy warnings change row heights and move separators, the healthy usage bar and the generic-error card inside the bounded five-card scroller. The bottom state reveals the final privacy warning. The surrounding thread, composer and keyboard remain fixed.
- R1: the initial single-account warning expands to fit the new guidance. Recovery/refresh interactions are covered by the unchanged accepted recordings.
- At zero threshold only, faint native chrome/text-edge/shadow variation remains as disclosed above. No unrelated change exceeds8/255 in the accepted comparisons.

Statistics: [diff-statistics.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d80d0bf44439a370/diff-statistics.json); settled-frame and hash verification: [native-still-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a65e9a9ab5844400/native-still-verification.json)

**M2-ios-dark**

Environment: agent-device pooled iPhone 17 Pro simulator, real React Native dev client; 402×874 pt, DPR 3, font scale 1; stills 402×874, native video 1206×2622; system iOS keyboard. Theme: dark. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 2s — Both environments; 25s — Native environment menu; 32s — B excluded; A only; 41s — A after pull-to-refresh; 54s — All environments restored.

After narration: 2s — Both environments; 28s — Native environment menu; 38s — B excluded; A only; 49s — A after pull-to-refresh; 57s — All environments restored.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| M2-ios-dark | top: ![M2-ios-dark-top-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f70b34145699e9b2/M2-ios-dark-top-before.png)<br>one: ![M2-ios-dark-one-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/066248879e489591/M2-ios-dark-one-before.png) | top: ![M2-ios-dark-top-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/037ea5735d0a9c67/M2-ios-dark-top-after.png)<br>one: ![M2-ios-dark-one-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f60ffd86f1dd006d/M2-ios-dark-one-after.png) | top: ![M2-ios-dark-top-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5f2a8d02214a7065/M2-ios-dark-top-diff0.png)<br>one: ![M2-ios-dark-one-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a345397fd1e4d85/M2-ios-dark-one-diff0.png) | top: ![M2-ios-dark-top-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b7623d3e2f30cc2b/M2-ios-dark-top-diff8.png)<br>one: ![M2-ios-dark-one-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/88609ec918fed2fc/M2-ios-dark-one-diff8.png) | before: [M2-ios-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74f39d5687038a22/M2-ios-dark-before.mp4)<br>![M2-ios-dark-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cb52357de2a0f5a8/M2-ios-dark-before-milestones.png)<br>after: [M2-ios-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0fce8e00f40b81e/M2-ios-dark-after.mp4)<br>![M2-ios-dark-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/38dd9fc0699bd33e/M2-ios-dark-after-milestones.png) |

Encoded neighbor-frame review: before: ![M2-ios-dark-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1548a1b9c4331cca/M2-ios-dark-before-frame-review.png) [M2-ios-dark-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/23d8632721ace6fe/M2-ios-dark-before-verification.json); after: ![M2-ios-dark-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b87a0df408470299/M2-ios-dark-after-frame-review.png) [M2-ios-dark-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4541e49fa61a9563/M2-ios-dark-after-verification.json).

New full-surface comparison sheets: ![M2-ios-dark-top-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/168ec737b65f04f0/M2-ios-dark-top-sheet.png); ![M2-ios-dark-one-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2526ece483c7397/M2-ios-dark-one-sheet.png)

**M2-android-light**

Environment: agent-device pooled Pixel 9 emulator, Android 16/API 36, real React Native dev client; 411.4286×923.4286 dp, DPR 2.625, font scale 1; full surface 1080×2424; real Gboard. M3 sequence video adds a 64-pixel external label banner (1080×2488). Theme: light. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 2s — Both environments; 8s — Scroll to lower notices; 17s — Native environment menu; 24s — B excluded; A only; 34s — A after pull-to-refresh; 39.5s — All environments restored.

After narration: 2s — Both environments; 11s — Scroll to lower notices; 22s — Native environment menu; 28s — B excluded; A only; 37s — A after pull-to-refresh; 44s — All environments restored.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| M2-android-light | top: ![M2-android-light-top-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c981351d1784d0dc/M2-android-light-top-before.png)<br>one: ![M2-android-light-one-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8889f8ef6b350fbf/M2-android-light-one-before.png) | top: ![M2-android-light-top-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/400d4ac601045ce1/M2-android-light-top-after.png)<br>one: ![M2-android-light-one-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e681662da6e7d142/M2-android-light-one-after.png) | top: ![M2-android-light-top-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c1a053e0bdee0009/M2-android-light-top-diff0.png)<br>one: ![M2-android-light-one-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0b1d1c0eec6d9b2/M2-android-light-one-diff0.png) | top: ![M2-android-light-top-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e0fc09bc24cad42f/M2-android-light-top-diff8.png)<br>one: ![M2-android-light-one-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eca1fee5c80c39c7/M2-android-light-one-diff8.png) | before: [M2-android-light-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b2ca85a2a86f9916/M2-android-light-before.mp4)<br>![M2-android-light-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0401e8804babd853/M2-android-light-before-milestones.png)<br>after: [M2-android-light-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/31b1031a667b2693/M2-android-light-after.mp4)<br>![M2-android-light-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74ab47598a78de8f/M2-android-light-after-milestones.png) |

Encoded neighbor-frame review: before: ![M2-android-light-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/622513d9f5e4fb1c/M2-android-light-before-frame-review.png) [M2-android-light-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ee32e8f86f4b003/M2-android-light-before-verification.json); after: ![M2-android-light-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3abcbe7c23249ed8/M2-android-light-after-frame-review.png) [M2-android-light-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf305496bec832ef/M2-android-light-after-verification.json).

New full-surface comparison sheets: ![M2-android-light-top-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7202edb4d054d9a4/M2-android-light-top-sheet.png); ![M2-android-light-one-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4138a833c09061fc/M2-android-light-one-sheet.png)

**M3-ios-light**

Environment: agent-device pooled iPhone 17 Pro simulator, real React Native dev client; 402×874 pt, DPR 3, font scale 1; stills 402×874, native video 1206×2622; system iOS keyboard. Theme: light. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 2s — Empty thread; 11s — Exact /usage-limits typed; 17s — Send: warning; keyboard shown; 26s — Keyboard hidden; 31s — Dismissed; 37s — Slash-menu command; 42s — Menu selection reopens warning; 49s — Keyboard hidden again.

After narration: 2s — Empty thread; 11s — Exact /usage-limits typed; 18s — Send: warning; keyboard shown; 27s — Keyboard hidden; 31s — Dismissed; 38s — Slash-menu command; 46s — Menu selection reopens warning; 55s — Keyboard hidden again.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| M3-ios-light | keyboard: ![M3-ios-light-keyboard-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7240035be02db587/M3-ios-light-keyboard-before.png)<br>hidden: ![M3-ios-light-hidden-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85e1e68dd04d966b/M3-ios-light-hidden-before.png) | keyboard: ![M3-ios-light-keyboard-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d170a0bd45e86f4/M3-ios-light-keyboard-after.png)<br>hidden: ![M3-ios-light-hidden-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eeb3765befd4e1f3/M3-ios-light-hidden-after.png) | keyboard: ![M3-ios-light-keyboard-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1dd63863e648ab53/M3-ios-light-keyboard-diff0.png)<br>hidden: ![M3-ios-light-hidden-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/389fa1fe4adb2d60/M3-ios-light-hidden-diff0.png) | keyboard: ![M3-ios-light-keyboard-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/de85b09ae71a1ef3/M3-ios-light-keyboard-diff8.png)<br>hidden: ![M3-ios-light-hidden-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d0b83b88bfe63c19/M3-ios-light-hidden-diff8.png) | before: [M3-ios-light-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d8b5b400f0c7c811/M3-ios-light-before.mp4)<br>![M3-ios-light-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4776627b4a110298/M3-ios-light-before-milestones.png)<br>after: [M3-ios-light-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/77c6a86618674712/M3-ios-light-after.mp4)<br>![M3-ios-light-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2ebbd97fe368c520/M3-ios-light-after-milestones.png) |

Encoded neighbor-frame review: before: ![M3-ios-light-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7487397f0f806319/M3-ios-light-before-frame-review.png) [M3-ios-light-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/719a87cae5d4a8e3/M3-ios-light-before-verification.json); after: ![M3-ios-light-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/804d3a8fee705549/M3-ios-light-after-frame-review.png) [M3-ios-light-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/96d385cb3a309b97/M3-ios-light-after-verification.json).

New full-surface comparison sheets: ![M3-ios-light-keyboard-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/785d7fe6a81f2979/M3-ios-light-keyboard-sheet.png); ![M3-ios-light-hidden-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a6135c4f0a72382b/M3-ios-light-hidden-sheet.png)

**M3-android-dark**

Environment: agent-device pooled Pixel 9 emulator, Android 16/API 36, real React Native dev client; 411.4286×923.4286 dp, DPR 2.625, font scale 1; full surface 1080×2424; real Gboard. M3 sequence video adds a 64-pixel external label banner (1080×2488). Theme: dark. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 1s — Empty thread; 5s — Exact /usage-limits typed; 9s — Send: warning; keyboard shown; 13s — Keyboard hidden; 17s — Dismissed; 21s — Slash-menu command; 25s — Menu selection reopens warning; 29s — Keyboard hidden again.

After narration: 1s — Empty thread; 5s — Exact /usage-limits typed; 9s — Send: warning; keyboard shown; 13s — Keyboard hidden; 17s — Dismissed; 21s — Slash-menu command; 25s — Menu selection reopens warning; 29s — Keyboard hidden again.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| M3-android-dark | keyboard: ![M3-android-dark-keyboard-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/20030aeaedf575d7/M3-android-dark-keyboard-before.png)<br>hidden: ![M3-android-dark-hidden-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c3d605a64cb89eb1/M3-android-dark-hidden-before.png) | keyboard: ![M3-android-dark-keyboard-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b4c210f8d81a34f8/M3-android-dark-keyboard-after.png)<br>hidden: ![M3-android-dark-hidden-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6e6a2f95aabfbe6/M3-android-dark-hidden-after.png) | keyboard: ![M3-android-dark-keyboard-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/91b29c7477180524/M3-android-dark-keyboard-diff0.png)<br>hidden: ![M3-android-dark-hidden-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a5855444a0256760/M3-android-dark-hidden-diff0.png) | keyboard: ![M3-android-dark-keyboard-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3dab5485f4f88829/M3-android-dark-keyboard-diff8.png)<br>hidden: ![M3-android-dark-hidden-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea015bfab86e3fbd/M3-android-dark-hidden-diff8.png) | before: [M3-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d4d7721489533aa2/M3-android-dark-before.mp4)<br>![M3-android-dark-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/473aeea95e71ffe3/M3-android-dark-before-milestones.png)<br>after: [M3-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d746148481fc38f4/M3-android-dark-after.mp4)<br>![M3-android-dark-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6ccf24ef6e380d0f/M3-android-dark-after-milestones.png) |

Encoded neighbor-frame review: before: ![M3-android-dark-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9016dd51e8e8db3/M3-android-dark-before-frame-review.png) [M3-android-dark-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9381e18c022ac32c/M3-android-dark-before-verification.json); after: ![M3-android-dark-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a97b3ad114a74ff/M3-android-dark-after-frame-review.png) [M3-android-dark-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/45448de8ce2136bb/M3-android-dark-after-verification.json).

New full-surface comparison sheets: ![M3-android-dark-keyboard-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/62988befce5b575d/M3-android-dark-keyboard-sheet.png); ![M3-android-dark-hidden-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bfc2dd26892dffd0/M3-android-dark-hidden-sheet.png)

**M4-ios-dark**

Environment: agent-device pooled iPhone 17 Pro simulator, real React Native dev client; 402×874 pt, DPR 3, font scale 1; stills 402×874, native video 1206×2622; system iOS keyboard. Theme: dark. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 2s — Empty thread; 12s — Exact command typed; 23s — Five-card panel; keyboard shown; 36s — First account label revealed; 49s — Last card; keyboard shown; 58s — Keyboard hidden; 66s — Returned to first card; 74s — Dismissed via first card.

After narration: 2s — Empty thread; 12s — Exact command typed; 20s — Five-card panel; keyboard shown; 29s — First account label revealed; 40s — Last card; keyboard shown; 50s — Keyboard hidden; 59s — Returned to first card; 67s — Dismissed via first card.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| M4-ios-dark | top-keyboard: ![M4-ios-dark-top-keyboard-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba0c109104b623bf/M4-ios-dark-top-keyboard-before.png)<br>bottom-keyboard: ![M4-ios-dark-bottom-keyboard-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a4356d2f39cc9bb6/M4-ios-dark-bottom-keyboard-before.png) | top-keyboard: ![M4-ios-dark-top-keyboard-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5ea7c9c82e41733b/M4-ios-dark-top-keyboard-after.png)<br>bottom-keyboard: ![M4-ios-dark-bottom-keyboard-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22c30525cb194ae7/M4-ios-dark-bottom-keyboard-after.png) | top-keyboard: ![M4-ios-dark-top-keyboard-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e79ef07daab10dc0/M4-ios-dark-top-keyboard-diff0.png)<br>bottom-keyboard: ![M4-ios-dark-bottom-keyboard-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/acbff0b3f1e3fce8/M4-ios-dark-bottom-keyboard-diff0.png) | top-keyboard: ![M4-ios-dark-top-keyboard-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db3ecb50971be090/M4-ios-dark-top-keyboard-diff8.png)<br>bottom-keyboard: ![M4-ios-dark-bottom-keyboard-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d9219e1c4f4d9c9/M4-ios-dark-bottom-keyboard-diff8.png) | before: [M4-ios-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/65cadb6cf3ffc93e/M4-ios-dark-before.mp4)<br>![M4-ios-dark-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/de2ca6bb2e08a6ce/M4-ios-dark-before-milestones.png)<br>after: [M4-ios-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bfed3ddf69f35033/M4-ios-dark-after.mp4)<br>![M4-ios-dark-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f46b76b547092e5/M4-ios-dark-after-milestones.png) |

Encoded neighbor-frame review: before: ![M4-ios-dark-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/27c103b72bbf52cc/M4-ios-dark-before-frame-review.png) [M4-ios-dark-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1cac784455b1670c/M4-ios-dark-before-verification.json); after: ![M4-ios-dark-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3847f164116a20e5/M4-ios-dark-after-frame-review.png) [M4-ios-dark-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7e3c592ff351356b/M4-ios-dark-after-verification.json).

New full-surface comparison sheets: ![M4-ios-dark-top-keyboard-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee9b44375afeacd3/M4-ios-dark-top-keyboard-sheet.png); ![M4-ios-dark-bottom-keyboard-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54576953020b8a89/M4-ios-dark-bottom-keyboard-sheet.png)

**M4-android-light**

Environment: agent-device pooled Pixel 9 emulator, Android 16/API 36, real React Native dev client; 411.4286×923.4286 dp, DPR 2.625, font scale 1; full surface 1080×2424; real Gboard. M3 sequence video adds a 64-pixel external label banner (1080×2488). Theme: light. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 2s — Empty thread; 14s — Exact command typed; 26s — Five-card panel; keyboard shown; 41s — First account label revealed; 58s — Last card; keyboard shown; 66s — Keyboard hidden; 73s — Returned to first card; 82s — Dismissed via first card.

After narration: 2s — Empty thread; 12s — Exact command typed; 20s — Five-card panel; keyboard shown; 29s — First account label revealed; 40s — Last card; keyboard shown; 51s — Keyboard hidden; 60s — Returned to first card; 68s — Dismissed via first card.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| M4-android-light | top-keyboard: ![M4-android-light-top-keyboard-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1df4963105e15826/M4-android-light-top-keyboard-before.png)<br>bottom-keyboard: ![M4-android-light-bottom-keyboard-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/04fa97a60a2570f4/M4-android-light-bottom-keyboard-before.png) | top-keyboard: ![M4-android-light-top-keyboard-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/195afdc1c1ebdfad/M4-android-light-top-keyboard-after.png)<br>bottom-keyboard: ![M4-android-light-bottom-keyboard-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a951e5a37c9d4cd/M4-android-light-bottom-keyboard-after.png) | top-keyboard: ![M4-android-light-top-keyboard-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/40bace9b3fd30654/M4-android-light-top-keyboard-diff0.png)<br>bottom-keyboard: ![M4-android-light-bottom-keyboard-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1dcf074d17dd5532/M4-android-light-bottom-keyboard-diff0.png) | top-keyboard: ![M4-android-light-top-keyboard-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e7d90bf6bf30637b/M4-android-light-top-keyboard-diff8.png)<br>bottom-keyboard: ![M4-android-light-bottom-keyboard-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2534a92aa68b43ed/M4-android-light-bottom-keyboard-diff8.png) | before: [M4-android-light-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf4301700f2d64d1/M4-android-light-before.mp4)<br>![M4-android-light-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e07854682d35541/M4-android-light-before-milestones.png)<br>after: [M4-android-light-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e8cd7cb554b00fb/M4-android-light-after.mp4)<br>![M4-android-light-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7c1fa6d11751c628/M4-android-light-after-milestones.png) |

Encoded neighbor-frame review: before: ![M4-android-light-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a80c637d3be78fbf/M4-android-light-before-frame-review.png) [M4-android-light-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c2b7cb4151949cda/M4-android-light-before-verification.json); after: ![M4-android-light-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/09ac2018cab82278/M4-android-light-after-frame-review.png) [M4-android-light-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/df47fd1f6cea1322/M4-android-light-after-verification.json).

New full-surface comparison sheets: ![M4-android-light-top-keyboard-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cd7b084873bcc98/M4-android-light-top-keyboard-sheet.png); ![M4-android-light-bottom-keyboard-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e029553bd5f316b/M4-android-light-bottom-keyboard-sheet.png)

**R1-ios-light**

Environment: agent-device pooled iPhone 17 Pro simulator, real React Native dev client; 402×874 pt, DPR 3, font scale 1; stills 402×874, native video 1206×2622; system iOS keyboard. Theme: light. Remote tailnet connection to this VM’s isolated backend; one Metro at a time.

Before narration: 2s — Privacy response: warning; 11s — Stub success + refresh: Weekly 73%; 22s — Stub privacy + refresh: retains 73%; 35s — Fresh backend: warning again.

After narration: 2s — Privacy response: warning; 10s — Stub success + refresh: Weekly 73%; 20s — Stub privacy + refresh: retains 73%; 31s — Fresh backend: warning again.

| Row | Before | After | Diff0 | DiffT (>8/255) | Recording(s) |
| --- | --- | --- | --- | --- | --- |
| R1-ios-light | warning: ![R1-ios-light-warning-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2f772daf31c487f6/R1-ios-light-warning-before.png) | warning: ![R1-ios-light-warning-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c342441cc8404f19/R1-ios-light-warning-after.png) | warning: ![R1-ios-light-warning-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/247eb2edb6480d5d/R1-ios-light-warning-diff0.png) | warning: ![R1-ios-light-warning-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6f33398783e769a8/R1-ios-light-warning-diff8.png) | before: [R1-ios-light-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/263c3b5a72bacf09/R1-ios-light-before.mp4)<br>![R1-ios-light-before-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2e7059aac0d8d54a/R1-ios-light-before-milestones.png)<br>after: [R1-ios-light-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9ae0ee87724393e/R1-ios-light-after.mp4)<br>![R1-ios-light-after-milestones.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/58e4179a44f476e3/R1-ios-light-after-milestones.png) |

Encoded neighbor-frame review: before: ![R1-ios-light-before-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d677ee3f079eefa/R1-ios-light-before-frame-review.png) [R1-ios-light-before-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/33b781d453bb4d0e/R1-ios-light-before-verification.json); after: ![R1-ios-light-after-frame-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/83bbc61a230ff2b4/R1-ios-light-after-frame-review.png) [R1-ios-light-after-verification.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d8a236e79f85030d/R1-ios-light-after-verification.json).

New full-surface comparison sheets: ![R1-ios-light-warning-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2107ef5bacd5b8d7/R1-ios-light-warning-sheet.png)

Reproduction scripts, seeds and audit artifacts:

- [native-scripts-and-seeds.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cc411022dcca7dd2/native-scripts-and-seeds.zip)
- [native-raw-logs-redacted.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a9d08781bacf8f56/native-raw-logs-redacted.zip)
- [native-raw-captures-1.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/368c8a284f156b92/native-raw-captures-1.zip)

Unverified: none; all 13 assigned still pairs captured and reviewed.

The script archive contains REPRODUCE-STILLS.md, fresh synthetic fixtures, fake Grok CLI/fetch preload, native pairing/seed/theme/clock scripts, still driver, settled-frame acceptance checks, diff builder, accepted manifest and packaging/report drivers. The raw capture archives also contain rejected exploratory samples; only accepted.json and the table above identify accepted evidence. Redacted logs include two-frame settle manifests. No newly recorded videos are included.

Cleanup: both own worktrees removed; all owned backends and Metro stopped; every opened session received an explicit close command. No PR edit, push, comment, source modification or subagent.

FRICTION:

- tool | Public artifact downloads returned403 through urllib; curl worked. | Consistent download support.
- tool | Normalized iOS screenshots still animate the charging glyph; repeated unchanged-state samples were needed for identical consecutive frames. | A nonanimated normalized battery glyph.
- tool | An app-id close released device bindings; reinstalling into an old session exposed a stale Metro target. Fresh named sessions and selecting the newest matching target recovered. | Separate app-close and lease-close semantics, and remove stale CDP targets.
- tool | Android Limits had AX content but briefly painted a blank body; rejected those frames and switched Cost then Limits to repaint. | Consistent native redraw after navigation.
- model | The initial M2 guard treated the warning list as a composer footer and rejected expected text reflow; narrowed it to status/header for M2 and retained full visual diff review. | Apply region checks by page state.
- runbook | iOS enclosing AX switch labels did not toggle Motion preferences; fresh inner switch refs did. | Document the actionable inner refs.
- tool | iOS daemon was temporarily unavailable; retried after the required minute and recovered. Android lease had expired when explicit close was sent. | Stable daemon access and clearer lease-expiry/close feedback.

CAPTURE_DONE 13/13
