# Evidence pass 3 — mobile code fences

PR [#33680](https://git.cafe/pingdotgg/t3code/pull/33680). New capture source: before [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545); after [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b). Historical crop repairs retain their original source SHAs below; they are not recaptures at the latest head.

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

Outcome: all 11 historical target-crop repairs are complete. New Android before/after recordings cover W1/L1 and P1, plus matched S1 replays; iOS W1/L1 is head-only. U1 fits at default size. T1 fails: at 22 pt / OS 3.2, the head vertically clips Kotlin, Diff and Objective-C labels while baseline headers grow. The fixed header height is visible in [CodeBlockFrame.tsx](https://git.cafe/pingdotgg/t3code/blob/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b/apps/mobile/src/native/CodeBlockFrame.tsx#L89). The single matched diff frame sample is worse on head (214/305 janky frames vs 207/345); it is not a performance pass.

## Target crop repair — all 11 historical still pairs

Every rectangle is `(left, top, right, bottom)`, in original screenshot pixels, right/bottom exclusive. Each subregion is aligned independently on its own block header, using equal crop dimensions on both sides and no rescaling. Thus shifted block origins and different body heights remain visible without turning unrelated vertical scroll displacement into a claimed token-color change. C2 had an independent scroll anchor: this repair does not establish precise whole-feed layout equivalence. Multi-region files concatenate crops vertically with equal gray 16-pixel separators; separators are identical on both sides and contribute zero diff pixels. K3 targets the attachment menu and keyboard, not code colors. No crop includes the clock, timestamp, or composer caret.

Diff0 is ImageMagick `compare -metric AE -fuzz 0% -highlight-color white -lowlight-color black`: every changed pixel is amplified to white. Diff2% uses 2% fuzz. Masks compare the crops, not full screens. All 11 four-column comparison sheets were visually inspected before upload. No target crop is a replacement screenshot.

### Historical rendering environments

Pass 1 Android: pooled Pixel 9, Android 16/API 36 from runtime descriptor, 1080×2424 pixels, logical viewport/DPR not independently measured. OS font scale 1.0 was measured on the original lease; replacement-device scale and default app text size were not independently confirmed. App text size 16 is the source default. Pass 1 iOS: pooled iPhone 18 Pro, iOS 27.2 from catalog, 1206×2622 pixels, logical viewport 402×874, requested DPR 3; OS text size large/default, app size source default 16. C1 themes are in row labels; all other repaired rows dark. Matching models and screenshot sizes do not prove the same emulator instance across pass-1 before/after.

Pass 2 W1: same iPhone 18 Pro simulator lease on both sides, dark, 1206×2622, 402×874 at DPR 3, OS category large; app default 16 not independently read back. Pass 2 K3: same replacement Pixel 9 lease on both sides, dark, Android 16/API 36, 1080×2424; logical viewport/DPR and exact multiplier were not independently measured. Gboard and menu interiors are identical at zero fuzz.

The 18 pass-1 source images each match at least two archived raw samples; manifests specify >=500 ms. The provided pass-2 document claims settled pairs, but its final raw-sample archive was not linked; this pass cannot independently validate those four originals’ raw intervals. This limit remains explicit. Prior pass-1 raw samples are reuploaded with this pass.

### C1-android-dark — target crop

Diff/Kotlin gain token colors; fallback header glyphs, borders, code baselines and heights change. Native TypeScript aligned target is unchanged. Excluded: clock/timestamps, composer/glass pixels, surrounding user bubble movement.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| C1-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b4981f06ba32238a/C1-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b79f19a2431ac2e3/C1-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/045b01f7a59fd176/C1-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a602836ebde47eed/C1-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Diff | [50, 798, 1030, 1312] | [50, 775, 1030, 1289] |
| Kotlin | [50, 1342, 1030, 1676] | [50, 1331, 1030, 1665] |
| TypeScript control | [50, 1703, 1030, 2026] | [50, 1704, 1030, 2027] |

Changed pixels in concatenated target crops: Diff0 75081; Diff2% 73930.

![Before target crop / After target crop / Diff0 amplified / Diff2% — C1-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70e4fed4a3db1367/C1-android-dark-target-crop-sheet.png)

### C1-android-light — target crop

Diff/Kotlin gain token colors; fallback header glyphs, borders, code baselines and heights change. Native TypeScript aligned target is unchanged. Excluded: clock/timestamps, composer/glass pixels, surrounding user bubble movement.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| C1-android-light | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/949e5fe7f23ec1a4/C1-android-light-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f624f5d3182efb53/C1-android-light-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/43fe261180d988a0/C1-android-light-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/072ce49fd3137f22/C1-android-light-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Diff | [50, 798, 1030, 1312] | [50, 775, 1030, 1289] |
| Kotlin | [50, 1342, 1030, 1676] | [50, 1331, 1030, 1665] |
| TypeScript control | [50, 1703, 1030, 2026] | [50, 1704, 1030, 2027] |

Changed pixels in concatenated target crops: Diff0 75175; Diff2% 52450.

![Before target crop / After target crop / Diff0 amplified / Diff2% — C1-android-light](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bba590530f40ed66/C1-android-light-target-crop-sheet.png)

### C1-ios-dark — target crop

Diff/Kotlin gain token colors; fallback header glyphs, borders, code baselines and heights change. Native TypeScript aligned target is unchanged. Excluded: clock/timestamps, composer/glass pixels, surrounding user bubble movement.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| C1-ios-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5569e88d4e4e5b18/C1-ios-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49bf748ee22772dd/C1-ios-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b3f25af3281080c1/C1-ios-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9ed506e3d08c0d82/C1-ios-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Diff | [60, 805, 1146, 1380] | [60, 775, 1146, 1350] |
| Kotlin | [60, 1423, 1146, 1792] | [60, 1408, 1146, 1777] |
| TypeScript control | [60, 1834, 1146, 2187] | [60, 1834, 1146, 2187] |

Changed pixels in concatenated target crops: Diff0 91713; Diff2% 88303.

![Before target crop / After target crop / Diff0 amplified / Diff2% — C1-ios-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/032af0e48a3dc376/C1-ios-dark-target-crop-sheet.png)

### C1-ios-light — target crop

Diff/Kotlin gain token colors; fallback header glyphs, borders, code baselines and heights change. Native TypeScript aligned target is unchanged. Excluded: clock/timestamps, composer/glass pixels, surrounding user bubble movement.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| C1-ios-light | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8ba31a3666371b5b/C1-ios-light-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aeef8f495b2297bb/C1-ios-light-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/415ac624d5bc4500/C1-ios-light-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a5143bb8563c6aa4/C1-ios-light-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Diff | [60, 805, 1146, 1380] | [60, 775, 1146, 1350] |
| Kotlin | [60, 1423, 1146, 1792] | [60, 1408, 1146, 1777] |
| TypeScript control | [60, 1834, 1146, 2187] | [60, 1834, 1146, 2187] |

Changed pixels in concatenated target crops: Diff0 91009; Diff2% 68367.

![Before target crop / After target crop / Diff0 amplified / Diff2% — C1-ios-light](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/923d910427dd9a49/C1-ios-light-target-crop-sheet.png)

### C2-bottom-android-dark — target crop

Six bodies gain colors; glyphs, baselines, frame extents change. Each language is aligned separately because scroll anchor and block heights differed. Excluded: timestamp and feed scroll displacement.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| C2-bottom-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c220a6b5ca664245/C2-bottom-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cbee70faeb6cbad/C2-bottom-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5219e3c76320fa63/C2-bottom-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d1170c67aec2f611/C2-bottom-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Swift | [50, 268, 1030, 545] | [50, 275, 1030, 552] |
| Dart | [50, 568, 1030, 838] | [50, 587, 1030, 857] |
| Ruby | [50, 868, 1030, 1199] | [50, 899, 1030, 1230] |
| SQL | [50, 1229, 1030, 1499] | [50, 1272, 1030, 1542] |
| C++ | [50, 1529, 1030, 1799] | [50, 1584, 1030, 1854] |
| Kt | [50, 1829, 1030, 2038] | [50, 1896, 1030, 2105] |

Changed pixels in concatenated target crops: Diff0 161245; Diff2% 158950.

![Before target crop / After target crop / Diff0 amplified / Diff2% — C2-bottom-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/623152da7f1ca901/C2-bottom-android-dark-target-crop-sheet.png)

### E1-E2-android-dark — target crop

Empty SQL/whitespace Ruby remain empty; header/frame geometry changes. Kotlin/Fortran gain colors; the huge line remains plain and following line gains colors. Excluded: clipped preceding non-target block and timestamp.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| E1-E2-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cc16868eace73364/E1-E2-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e75d31439c2a56b/E1-E2-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/28ea0dcc0b6d16e0/E1-E2-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b5667f5315afc8bb/E1-E2-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Independent Kotlin | [50, 748, 1030, 957] | [50, 636, 1030, 845] |
| Empty SQL | [50, 987, 1030, 1187] | [50, 887, 1030, 1087] |
| Whitespace Ruby | [50, 1209, 1030, 1479] | [50, 1129, 1030, 1399] |
| Fortran | [50, 1509, 1030, 1779] | [50, 1441, 1030, 1711] |
| Long-line Kotlin | [50, 1809, 1030, 2079] | [50, 1753, 1030, 2023] |

Changed pixels in concatenated target crops: Diff0 130425; Diff2% 128581.

![Before target crop / After target crop / Diff0 amplified / Diff2% — E1-E2-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0dfe2321106f9bba/E1-E2-android-dark-target-crop-sheet.png)

### M2-android-dark — target crop

Aligned malformed/empty Mermaid assistant frames have zero changed pixels. Excluded timestamp and duplicate user-role frames.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| M2-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a264b62d033498c/M2-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e5da44edc3c0fc9/M2-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f6c6fec9b092faf/M2-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dc74f17f6213b505/M2-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Malformed Mermaid | [50, 1197, 1030, 1680] | [50, 1198, 1030, 1681] |
| Empty Mermaid | [50, 1718, 1030, 2023] | [50, 1719, 1030, 2024] |

Changed pixels in concatenated target crops: Diff0 0; Diff2% 0.

![Before target crop / After target crop / Diff0 amplified / Diff2% — M2-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/357ee551947ed922/M2-android-dark-target-crop-sheet.png)

### M4-android-dark — target crop

Uppercase MERMAID gains fallback colors/actions/geometry; lowercase diagram and math controls are unchanged after alignment. Excluded timestamp and upstream vertical displacement.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| M4-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a1571b1a95cae06b/M4-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a203178b184db275/M4-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7c273b59b07659c0/M4-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1b69eeb12fc19a8c/M4-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| mermaid diagram | [50, 806, 1030, 1122] | [50, 794, 1030, 1110] |
| MERMAID code | [50, 1164, 1030, 1434] | [50, 1152, 1030, 1422] |
| math control | [50, 1464, 1030, 1661] | [50, 1464, 1030, 1661] |
| MATH control | [50, 1703, 1030, 2022] | [50, 1703, 1030, 2022] |

Changed pixels in concatenated target crops: Diff0 28792; Diff2% 28317.

![Before target crop / After target crop / Diff0 amplified / Diff2% — M4-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2da3718fc628aaf/M4-android-dark-target-crop-sheet.png)

### R1-android-dark — target crop

Review Kotlin gains colors and header/frame changes; native diff sibling remains unchanged. Excluded card title/bubble movement and timestamps.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [0f0c652771](https://git.cafe/pingdotgg/t3code/commit/0f0c65277170275015ac8cd050a22ceba6b88163) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| R1-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0421ba88ba19765b/R1-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8c8d919d88231185/R1-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/900982499876bb94/R1-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d35eccdd284faa52/R1-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Review Kotlin | [254, 1451, 976, 1662] | [254, 1439, 976, 1650] |
| Native diff sibling | [226, 1679, 1002, 1793] | [226, 1679, 1002, 1793] |

Changed pixels in concatenated target crops: Diff0 11333; Diff2% 10970.

![Before target crop / After target crop / Diff0 amplified / Diff2% — R1-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e75c7c74637e14c8/R1-android-dark-target-crop-sheet.png)

### W1-ios-dark — target crop

Kotlin gains token colors, header glyph/frame and body metric changes; neighboring Kotlin remains unwrapped. Excluded status clocks/timestamps/composer.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [63069af964](https://git.cafe/pingdotgg/t3code/commit/63069af9644a7b85993ad6fee73de314efac088e) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| W1-ios-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a8a7d942795101fc/W1-ios-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b030223a55762bd3/W1-ios-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/65383630f15db937/W1-ios-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/acffa73edd366dd1/W1-ios-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Wide Kotlin | [60, 1423, 1146, 1927] | [60, 1393, 1146, 1897] |
| Independent Kotlin | [60, 1972, 1146, 2202] | [60, 1957, 1146, 2187] |

Changed pixels in concatenated target crops: Diff0 102030; Diff2% 98488.

![Before target crop / After target crop / Diff0 amplified / Diff2% — W1-ios-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/766c86e510996c3e/W1-ios-dark-target-crop-sheet.png)

### K3-android-dark — target crop

No changes in target attachment-menu/keyboard interiors at either threshold. Code behind menu is outside this parity claim; excluded composer caret and timestamp.

| Target crop / device-theme | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [63069af964](https://git.cafe/pingdotgg/t3code/commit/63069af9644a7b85993ad6fee73de314efac088e) | Diff0 amplified | Diff2% |
|---|---|---|---|---|
| K3-android-dark | [before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/799887f5c42b8642/K3-android-dark-target-crop-before.png) | [after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9506555e580b2487/K3-android-dark-target-crop-after.png) | [Diff0-amplified](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb33b6d618163e01/K3-android-dark-target-crop-Diff0-amplified.png) | [Diff2percent](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a3f223b6e90b020/K3-android-dark-target-crop-Diff2percent.png) |

| Region | Before rectangle | After rectangle |
|---|---|---|
| Attachment menu | [32, 1100, 685, 1387] | [32, 1100, 685, 1387] |
| Keyboard | [0, 1541, 1080, 2424] | [0, 1541, 1080, 2424] |

Changed pixels in concatenated target crops: Diff0 0; Diff2% 0.

![Before target crop / After target crop / Diff0 amplified / Diff2% — K3-android-dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ab4e916353d7da2/K3-android-dark-target-crop-sheet.png)

## Verbatim crop upload output

![C1-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/045b01f7a59fd176/C1-android-dark-target-crop-Diff0-amplified.png)
![C1-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a602836ebde47eed/C1-android-dark-target-crop-Diff2percent.png)
![C1-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b79f19a2431ac2e3/C1-android-dark-target-crop-after.png)
![C1-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b4981f06ba32238a/C1-android-dark-target-crop-before.png)
![C1-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70e4fed4a3db1367/C1-android-dark-target-crop-sheet.png)
![C1-android-light-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/43fe261180d988a0/C1-android-light-target-crop-Diff0-amplified.png)
![C1-android-light-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/072ce49fd3137f22/C1-android-light-target-crop-Diff2percent.png)
![C1-android-light-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f624f5d3182efb53/C1-android-light-target-crop-after.png)
![C1-android-light-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/949e5fe7f23ec1a4/C1-android-light-target-crop-before.png)
![C1-android-light-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bba590530f40ed66/C1-android-light-target-crop-sheet.png)
![C1-ios-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b3f25af3281080c1/C1-ios-dark-target-crop-Diff0-amplified.png)
![C1-ios-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9ed506e3d08c0d82/C1-ios-dark-target-crop-Diff2percent.png)
![C1-ios-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49bf748ee22772dd/C1-ios-dark-target-crop-after.png)
![C1-ios-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5569e88d4e4e5b18/C1-ios-dark-target-crop-before.png)
![C1-ios-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/032af0e48a3dc376/C1-ios-dark-target-crop-sheet.png)
![C1-ios-light-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/415ac624d5bc4500/C1-ios-light-target-crop-Diff0-amplified.png)
![C1-ios-light-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a5143bb8563c6aa4/C1-ios-light-target-crop-Diff2percent.png)
![C1-ios-light-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aeef8f495b2297bb/C1-ios-light-target-crop-after.png)
![C1-ios-light-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8ba31a3666371b5b/C1-ios-light-target-crop-before.png)
![C1-ios-light-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/923d910427dd9a49/C1-ios-light-target-crop-sheet.png)
![C2-bottom-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5219e3c76320fa63/C2-bottom-android-dark-target-crop-Diff0-amplified.png)
![C2-bottom-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d1170c67aec2f611/C2-bottom-android-dark-target-crop-Diff2percent.png)
![C2-bottom-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cbee70faeb6cbad/C2-bottom-android-dark-target-crop-after.png)
![C2-bottom-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c220a6b5ca664245/C2-bottom-android-dark-target-crop-before.png)
![C2-bottom-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/623152da7f1ca901/C2-bottom-android-dark-target-crop-sheet.png)
![E1-E2-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/28ea0dcc0b6d16e0/E1-E2-android-dark-target-crop-Diff0-amplified.png)
![E1-E2-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b5667f5315afc8bb/E1-E2-android-dark-target-crop-Diff2percent.png)
![E1-E2-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e75d31439c2a56b/E1-E2-android-dark-target-crop-after.png)
![E1-E2-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cc16868eace73364/E1-E2-android-dark-target-crop-before.png)
![E1-E2-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0dfe2321106f9bba/E1-E2-android-dark-target-crop-sheet.png)
![K3-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb33b6d618163e01/K3-android-dark-target-crop-Diff0-amplified.png)
![K3-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a3f223b6e90b020/K3-android-dark-target-crop-Diff2percent.png)
![K3-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9506555e580b2487/K3-android-dark-target-crop-after.png)
![K3-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/799887f5c42b8642/K3-android-dark-target-crop-before.png)
![K3-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ab4e916353d7da2/K3-android-dark-target-crop-sheet.png)
![M2-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f6c6fec9b092faf/M2-android-dark-target-crop-Diff0-amplified.png)
![M2-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dc74f17f6213b505/M2-android-dark-target-crop-Diff2percent.png)
![M2-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e5da44edc3c0fc9/M2-android-dark-target-crop-after.png)
![M2-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a264b62d033498c/M2-android-dark-target-crop-before.png)
![M2-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/357ee551947ed922/M2-android-dark-target-crop-sheet.png)
![M4-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7c273b59b07659c0/M4-android-dark-target-crop-Diff0-amplified.png)
![M4-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1b69eeb12fc19a8c/M4-android-dark-target-crop-Diff2percent.png)
![M4-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a203178b184db275/M4-android-dark-target-crop-after.png)
![M4-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a1571b1a95cae06b/M4-android-dark-target-crop-before.png)
![M4-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2da3718fc628aaf/M4-android-dark-target-crop-sheet.png)
![R1-android-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/900982499876bb94/R1-android-dark-target-crop-Diff0-amplified.png)
![R1-android-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d35eccdd284faa52/R1-android-dark-target-crop-Diff2percent.png)
![R1-android-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8c8d919d88231185/R1-android-dark-target-crop-after.png)
![R1-android-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0421ba88ba19765b/R1-android-dark-target-crop-before.png)
![R1-android-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e75c7c74637e14c8/R1-android-dark-target-crop-sheet.png)
![W1-ios-dark-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/65383630f15db937/W1-ios-dark-target-crop-Diff0-amplified.png)
![W1-ios-dark-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/acffa73edd366dd1/W1-ios-dark-target-crop-Diff2percent.png)
![W1-ios-dark-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b030223a55762bd3/W1-ios-dark-target-crop-after.png)
![W1-ios-dark-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a8a7d942795101fc/W1-ios-dark-target-crop-before.png)
![W1-ios-dark-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/766c86e510996c3e/W1-ios-dark-target-crop-sheet.png)
[crop-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4983b72188bf691a/crop-manifest.json)
[crop-repair.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0a925c0e721b8f73/crop-repair.py)

## New captures at the requested head

All new rows use synthetic RPC-seeded fixtures only; the per-side assistant bytes were compared with the seed. The same Pixel 9 lease, installed native fingerprint, T3 Code theme, Material navigation, and bottom-anchored feed are used for Android. Baseline JavaScript runs on Metro 8082, head on 8081. Backends use fresh checkout-local state and `T3CODE_DEV_SEED=0`. No paid provider turn was used.

Android: Pixel 9, Android 16 / API 36 (pool descriptor), 1080×2424 pixels, measured DPR 2.625; derived full-screen logical extent 411.429×923.429 dp. Insets reduce the content viewport. Default app Text size 16 pt was read in Settings; largest 22 pt was selected and read back. Default OS category `large` is 1.0; maximum supported category `accessibility-extra-extra-extra-large` reports 3.2. OS changes were followed by app relaunch. iOS: same iPhone 18 Pro lease for the head interaction, iOS 27.2 (pool catalog), logical 402×874; recording 1206×2622 at DPR 3, inspection screenshots returned 402×874 at 1x. OS category large; app source default 16, not independently read on iOS.

Every accepted new still has two pixel-identical RGB screenshots at least 500 ms apart, with normalized status bar, in the raw archive. Failed or duplicate attempts are retained as raw samples and are not additional proof. The maximum-text screenshots intentionally document reproducible clipping; those are findings, not transient bad captures. Every accepted still and recording was visually inspected before upload.

### W1 / L1 — wide Kotlin and menu recovery

Android head steps, video seconds: 0–11 pan/back/pan; 12–16 long-press while panned and menu; 16–18 outside-tap dismissal; 18–25 pan again; 26–28 enable wrap; 30–34 long-press wrapped body; 34–36 Copy; 39–41 disable wrap; 41–47 pan/back. Both fences end unwrapped. Android shows its copied-text overlay; direct clipboard read is unsupported, so this does not claim exact clipboard bytes.

iOS head steps, video seconds: 0–9 pan/back/pan; 10–15 long-press menu; 15–17 outside dismissal; 18–23 pan again; 25–28 wrap; 30–34 long-press; 34–36 Copy; 38–40 unwrap; 40–45 pan/back. Only the head was captured on iOS in this pass, as permitted by the brief.

| Row / environment | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b) | Result |
|---|---|---|---|
| W1/L1 Android dark, 16 pt / scale 1.0 | [W1-L1-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/242fdab469acff83/W1-L1-android-dark-before.mp4) | [W1-L1-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4c34a1bf7c385e07/W1-L1-android-dark-after.mp4) | Both sides complete sequence; baseline has a pool retry pause |
| W1/L1 iOS dark, default text | Unverified in pass 3 | [W1-L1-ios-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/39c05f8d6808d64f/W1-L1-ios-dark-after.mp4) | Head interaction passes |

What else changed: fallback token colors; wrap/copy header glyphs; fallback frame height and code baselines. Whole-screen timestamps and platform chrome are incidental. Adjacent independent Kotlin fence remains unwrapped. No iOS before/after equivalence is claimed.

### U1 / T1 — own message, light theme, maximum text

| Row / Pixel 9 light | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b) | Result |
|---|---|---|---|
| U1 default 16 pt / OS 1.0 | [U1-android-light-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/81c9332d17634cda/U1-android-light-before.png) | [U1-android-light-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d3dd2686ad9c1e96/U1-android-light-after.png) | Kotlin/diff labels and actions fit; token colors added |
| T1 Objective-C, 22 pt / OS 3.2 | [T1-android-light-max-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/be38abdaac045432/T1-android-light-max-before.png) | [T1-android-light-max-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f19a2ea31a8f6d99/T1-android-light-max-after.png) | Regression: label vertically clipped at head; baseline grows and ellipsizes horizontally |
| T1 own Kotlin, 22 pt / OS 3.2 | [T1-own-bubble-android-light-max-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d9ed05914cb7af47/T1-own-bubble-android-light-max-before.png) | [T1-own-bubble-android-light-max-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6d3c28472e90ecf7/T1-own-bubble-android-light-max-after.png) | Same vertical clipping in head user-bubble header; icons visible |

The maximum-text case fails the requested no-clipping check. In the head, the fixed 32 dp React header does not grow with scaled label text; baseline native headers grow with system text and use a horizontal ellipsis. The Objective-C head label is visibly cut by the header’s bottom border. The own Kotlin label is also cut. Action icons remain visible and separated; this still-only check does not independently prove enlarged hit-target behavior. A separate settled pair captures the own diff header at maximum scale and shows the same vertical clipping regression. Other navigation, composer and timestamp text also clips at OS 3.2 on both sides; those are outside the target crop and are not attributed to this PR.

#### T1-Objective-C-android-light-max — target crop

Rectangles (xyxy, exclusive), independently aligned to each block’s own header; no scaling: `[{"target": "Objective-C header and first line", "before": [50, 1153, 1030, 1653], "after": [50, 1270, 1030, 1770]}]`. Equal crop sizes include changed frame/body geometry. No clock, message timestamp or composer.

What else changed: token colors, header glyphs, header height, borders, baselines, body spacing. In the maximum-text targets, baseline action glyphs scale while head icons retain their fixed size.

![Before target crop / After target crop / Diff0 amplified / Diff2% — T1-Objective-C-android-light-max](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb1d2bfaf5f7dca0/T1-Objective-C-android-light-max-target-crop-sheet.png)

#### T1-user-Kotlin-android-light-max — target crop

Rectangles (xyxy, exclusive), independently aligned to each block’s own header; no scaling: `[{"target": "Own Kotlin header and first line", "before": [222, 1505, 1006, 2005], "after": [222, 1505, 1006, 2005]}]`. Equal crop sizes include changed frame/body geometry. No clock, message timestamp or composer.

What else changed: token colors, header glyphs, header height, borders, baselines, body spacing. In the maximum-text targets, baseline action glyphs scale while head icons retain their fixed size.

![Before target crop / After target crop / Diff0 amplified / Diff2% — T1-user-Kotlin-android-light-max](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8bed01f95eebf6b2/T1-user-Kotlin-android-light-max-target-crop-sheet.png)

#### U1-android-light — target crop

Rectangles (xyxy, exclusive), independently aligned to each block’s own header; no scaling: `[{"target": "Own Kotlin", "before": [222, 1043, 1006, 1337], "after": [222, 1007, 1006, 1301]}, {"target": "Own Diff", "before": [222, 1343, 1006, 1613], "after": [222, 1319, 1006, 1589]}, {"target": "Assistant Objective-C", "before": [50, 1765, 1030, 2035], "after": [50, 1753, 1030, 2023]}]`. Equal crop sizes include changed frame/body geometry. No clock, message timestamp or composer.

What else changed: token colors, header glyphs, header height, borders, baselines, body spacing. In the maximum-text targets, baseline action glyphs scale while head icons retain their fixed size.

![Before target crop / After target crop / Diff0 amplified / Diff2% — U1-android-light](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1bd9825724baf830/U1-android-light-target-crop-sheet.png)

### Public upload output (new captures; verbatim)

[W1-L1-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4c34a1bf7c385e07/W1-L1-android-dark-after.mp4)
[W1-android-after-public-actions.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f23010acc40ca9df/W1-android-after-public-actions.json)

[W1-L1-ios-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/39c05f8d6808d64f/W1-L1-ios-dark-after.mp4)
[W1-ios-after-public-actions.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7aaba9663143588e/W1-ios-after-public-actions.json)

![U1-android-light-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d3dd2686ad9c1e96/U1-android-light-after.png)
![T1-android-light-max-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f19a2ea31a8f6d99/T1-android-light-max-after.png)
![T1-own-bubble-android-light-max-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6d3c28472e90ecf7/T1-own-bubble-android-light-max-after.png)
[render-environment-measurements.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f9617dde4f2e743/render-environment-measurements.json)

![T1-android-light-max-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/be38abdaac045432/T1-android-light-max-before.png)
![T1-own-bubble-android-light-max-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d9ed05914cb7af47/T1-own-bubble-android-light-max-before.png)

![U1-android-light-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/81c9332d17634cda/U1-android-light-before.png)

![T1-Objective-C-android-light-max-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/07dab73f082f4a60/T1-Objective-C-android-light-max-target-crop-Diff0-amplified.png)
![T1-Objective-C-android-light-max-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ed31d018c3ce6d29/T1-Objective-C-android-light-max-target-crop-Diff2percent.png)
![T1-Objective-C-android-light-max-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da13f65c918f6b84/T1-Objective-C-android-light-max-target-crop-after.png)
![T1-Objective-C-android-light-max-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/03ee53660c100feb/T1-Objective-C-android-light-max-target-crop-before.png)
![T1-Objective-C-android-light-max-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb1d2bfaf5f7dca0/T1-Objective-C-android-light-max-target-crop-sheet.png)
![T1-user-Kotlin-android-light-max-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/192f1a6654493b5f/T1-user-Kotlin-android-light-max-target-crop-Diff0-amplified.png)
![T1-user-Kotlin-android-light-max-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/661e46b95cf72b40/T1-user-Kotlin-android-light-max-target-crop-Diff2percent.png)
![T1-user-Kotlin-android-light-max-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/adf93c9aca36e553/T1-user-Kotlin-android-light-max-target-crop-after.png)
![T1-user-Kotlin-android-light-max-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/50aec4f50b8f878c/T1-user-Kotlin-android-light-max-target-crop-before.png)
![T1-user-Kotlin-android-light-max-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8bed01f95eebf6b2/T1-user-Kotlin-android-light-max-target-crop-sheet.png)
[new-crop-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a3a25c6856e1f598/new-crop-manifest.json)
[new-crop-repair.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/056e81e7be85fdb3/new-crop-repair.py)

![U1-android-light-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db7d3fe8aa63ccce/U1-android-light-target-crop-Diff0-amplified.png)
![U1-android-light-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/773cb9ffb4ce0977/U1-android-light-target-crop-Diff2percent.png)
![U1-android-light-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bd2370e6aa6ccb73/U1-android-light-target-crop-after.png)
![U1-android-light-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6dbf3376b9a46018/U1-android-light-target-crop-before.png)
![U1-android-light-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1bd9825724baf830/U1-android-light-target-crop-sheet.png)
[new-crop-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7eabe9389dfc828c/new-crop-manifest.json)


Baseline Android W1/L1 steps, video seconds: 0–10 pan/back/pan; 11–18 long-press menu; 18–81 the menu remains open while one pool command retries after 60 s; 81–83 dismiss; 84–89 pan again; 91–93 wrap; 94–98 long-press; 98–100 Copy; 103–104 unwrap; 105–110 pan/back. This pause is tooling latency, not an app responsiveness measurement. Video ends at the last encoded changing frame (111.46 s); the recording window was 116.9 s. Both before and after are bottom anchored at the same fixture, default text and dark theme.

[W1-L1-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/242fdab469acff83/W1-L1-android-dark-before.mp4)
## Placement and streaming recordings

### P1 — Pixel 9, Android dark, 16 pt / OS scale 1.0

Steps and video seconds for each pair: before, 0–5 closed details with quoted Kotlin and NOTE diff visible; 5.4–7.3 open details; 7.3–13.2 inspect nested Kotlin; 13.2–15.2 close. After, 0–5.6 closed; 5.6–7.4 open; 7.4–12.8 inspect; 12.8–14.4 close. Both use the same seed, device, theme, and bottom feed anchor. Opening details adds content above that anchor and shifts the feed on both sides.

| Row | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b) | Result |
|---|---|---|---|
| P1 blockquote, NOTE, details | [P1-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d3a3462e3797e35/P1-android-dark-before.mp4) | [P1-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc67f1382e432ed3/P1-android-dark-after.mp4) | All three placements render; details opens and closes |

What else changed: Kotlin/diff/nested Kotlin gain token colors; header glyphs, fallback heights, baselines, and padding change. Quote rail, NOTE callout and disclosure remain present. These recordings do not claim zero geometry change.

### S1 — Pixel 9, Android dark, 16 pt / OS scale 1.0

Kotlin steps and video seconds: wrap an existing earlier fence before recording; 0–3 reset the frame counter and send the second fixture; 3–17 observe the earlier fence still wrapped while the replay emits 30 lines at 500 ms/line; around 17–19 the second body appears near completion; about 24–28 scroll back to show the earlier fence still wrapped. On the head video the scroll-back state is in its last encoded frame (26.70 s); its screenshot and accessibility tree independently show `Disable line wrap` on the first fence and `Wrap lines` on the second. Baseline video is 28.80 s. These are client-visible cadence captures, not evidence of visibly incremental line growth.

Diff steps and video seconds: 0–2 reset frame collection and send the identical 400-body-line diff; replay emits at 120 ms/line, approximately 48.5 s total. Both bodies appear only near completion, around 50–54 s (baseline) and 55–58 s (head). Recordings continue through the rendered colored/plain body and Done. The same client-visible streaming cadence exists on both sides and is not introduced by this PR. The event transcript corroborates that the first persisted assistant update contains the full fence, not each line.

| Row | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b) | Result |
|---|---|---|---|
| Kotlin 30-line replay + prior wrap retention | [S1-stream-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad76c17e86d1105c/S1-stream-android-dark-before.mp4) | [S1-stream-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/78f22c414d1b19aa/S1-stream-android-dark-after.mp4) | Captured both; body appears near completion |
| Matched 400-line diff replay + frame windows | [S1-diffstream-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3fa812e12ecdf3b9/S1-diffstream-android-dark-before.mp4) | [S1-diffstream-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85a4766e68e8dce3/S1-diffstream-android-dark-after.mp4) | Captured both; body appears near completion |

The Android tool resets gfxinfo after each read. For each diff run, the first read returns immediately before send; the second is requested on the subscription event containing the closing fence, without a fixed completion sleep or polling. Both use this exact boundary definition. Frame reads take roughly 1.6–1.9 s; they include RPC/UI transit and measure the emulator process, not video FPS. The closing boundary is the persisted wire event, not a separately synchronized post-layout frame.

| Matched diff window | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b) |
|---|---|---|
| Send → closing event | 48.913 s | 49.497 s |
| Measured gfxinfo window | 50.567 s | 51.403 s |
| Total frames | 345 | 305 |
| Missed/janky frames | 207 | 214 |
| Reported dropped percent | 60% | 70.2% |

This single head sample reports more dropped frames than baseline. It does not establish a performance pass or a stable regression magnitude; no repeatability claim is made. What else changed: head body has diff token colors, changed code/header geometry and glyphs. Working-label updates and platform scheduling contribute to the frame sample; no other app interaction was issued inside either measured diff window. Kotlin frame reads are included for transparency, but the earlier baseline version of that helper ended at Done about 0.9 s after the closing fence, so those are not offered as a matched performance pair.

### Maximum-text own diff — final settled pair

| Pixel 9 light, 22 pt / OS 3.2 | Before — [633438d54f](https://git.cafe/pingdotgg/t3code/commit/633438d54f17b99f73f1a09466ecbe4a6aa0d545) | After — [c6afa44bc6](https://git.cafe/pingdotgg/t3code/commit/c6afa44bc640c3b6ab0173a87d2dd185c358bb2b) |
|---|---|---|
| Own diff header | [T1-own-diff-android-light-max-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6ec7026091f85cf/T1-own-diff-android-light-max-before.png) | [T1-own-diff-android-light-max-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f61210c193965f3b/T1-own-diff-android-light-max-after.png) |

Target crop rectangles (xyxy): `[{"target": "Own Diff header and first line", "before": [222, 711, 1006, 1261], "after": [222, 944, 1006, 1494]}]`. Each crop is aligned to that block’s own header, equal 784×550 pixels, no scaling. The same 550-pixel older-content pan is applied from the bottom anchor; different block heights move the header, so screen-coordinate crops would not match. What else changed: header height and glyph scale, token colors, code baseline and body spacing. No timestamp, status bar or composer is included.

![Before target crop / After target crop / Diff0 amplified / Diff2% — maximum-text own diff](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b45d03cfa48cee44/T1-user-Diff-android-light-max-target-crop-sheet.png)

### Recording target viewport crops

These are supplemental fixed interaction-viewport crops of the whole recordings, with no spatial scaling or timing edits. Android rectangle `(32, 290, 1048, 2130)`; iOS recording-pixel rectangle `(36, 450, 1170, 2320)`. They exclude navigation/status/composer chrome while retaining the code areas and menus as they move. They can retain message timestamps and edge-clipped offscreen content; they are not used for token-color pixel comparisons. All nine cropped recordings were decoded and visually checked, including last frames where sparse Android encoding omits a stationary tail. Use the separately aligned still crops for Diff0/Diff2 comparisons.

### Remaining unverified / limits

- S1 visibly incremental Kotlin-line growth: unverified because both versions buffer the visible fence body until near completion, despite the synthetic 500 ms/line input. Prior-wrap retention is verified on both.
- W1/L1 iOS before: not captured in pass 3; after-only was permitted. Historical pass-2 aligned W1 still remains above.
- Maximum-text wrap/copy hit-target execution and exact clipboard bytes: not independently checked; stills prove the clipping and icon placement. Default-size interaction sequence is recorded on Android and iOS.
- Pass-2 raw settled samples were not available from the supplied links; the provided still claims are retained with that explicit provenance limit.
- Single emulator performance samples do not establish a broad performance result.

### Additional upload output (verbatim)

[P1-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d3a3462e3797e35/P1-android-dark-before.mp4)

[P1-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc67f1382e432ed3/P1-android-dark-after.mp4)

[S1-stream-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad76c17e86d1105c/S1-stream-android-dark-before.mp4)
[S1-diffstream-android-dark-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3fa812e12ecdf3b9/S1-diffstream-android-dark-before.mp4)
[W1-android-before-public-actions.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8b31ab0f3a2b46b4/W1-android-before-public-actions.json)

[S1-stream-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/78f22c414d1b19aa/S1-stream-android-dark-after.mp4)

[S1-diffstream-android-dark-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85a4766e68e8dce3/S1-diffstream-android-dark-after.mp4)

[P1-android-dark-after-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2e922334ac3e176/P1-android-dark-after-target-viewport.mp4)
[P1-android-dark-before-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3fcd7ffc79d92ae/P1-android-dark-before-target-viewport.mp4)
[S1-diffstream-android-dark-after-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2cd3a528cbf87b37/S1-diffstream-android-dark-after-target-viewport.mp4)
[S1-diffstream-android-dark-before-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/574fc270bcfb5aea/S1-diffstream-android-dark-before-target-viewport.mp4)
[S1-stream-android-dark-after-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/61cbf762b779ae34/S1-stream-android-dark-after-target-viewport.mp4)
[S1-stream-android-dark-before-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e65a5875105ceae4/S1-stream-android-dark-before-target-viewport.mp4)
[W1-L1-android-dark-after-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/29b48cb54b07b1e1/W1-L1-android-dark-after-target-viewport.mp4)
[W1-L1-android-dark-before-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8701887dfe05183a/W1-L1-android-dark-before-target-viewport.mp4)
[W1-L1-ios-dark-after-target-viewport.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/754812f8d6e8a1d7/W1-L1-ios-dark-after-target-viewport.mp4)
[recording-crop-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d986eea608d9f52e/recording-crop-manifest.json)
[stream-matched-summary.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2b83b2d629155d38/stream-matched-summary.json)

![T1-own-diff-android-light-max-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6ec7026091f85cf/T1-own-diff-android-light-max-before.png)
![T1-own-diff-android-light-max-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f61210c193965f3b/T1-own-diff-android-light-max-after.png)
![T1-user-Diff-android-light-max-target-crop-Diff0-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/036a94f44ac9afea/T1-user-Diff-android-light-max-target-crop-Diff0-amplified.png)
![T1-user-Diff-android-light-max-target-crop-Diff2percent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db815a839031d9a6/T1-user-Diff-android-light-max-target-crop-Diff2percent.png)
![T1-user-Diff-android-light-max-target-crop-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/65182af136ef62e9/T1-user-Diff-android-light-max-target-crop-after.png)
![T1-user-Diff-android-light-max-target-crop-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/baeea314cb9de35e/T1-user-Diff-android-light-max-target-crop-before.png)
![T1-user-Diff-android-light-max-target-crop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b45d03cfa48cee44/T1-user-Diff-android-light-max-target-crop-sheet.png)
[new-crop-manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/041a32149dddcf42/new-crop-manifest.json)
[new-crop-repair.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c21914b83956ca4b/new-crop-repair.py)
[raw-settled-frame-samples-pass3.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4b66354d4aa22de9/raw-settled-frame-samples-pass3.zip)


## Packages, provenance and cleanup

All accepted full-screen recordings, supplemental target viewport crops, whole-screen settled stills, aligned code-block crops and Diff0/Diff2 masks are linked above. The artifacts archive includes all capture/seed/crop/review scripts, source synthetic fixtures, sanitized action and frame records, precision manifests, and inspection images. The raw archive contains all new still attempts and available pass-1 settled samples. Private auth files and backend/Metro logs are excluded. The rejected-takes archive is diagnostics only, not credited proof; corrected accepted takes were captured afterward. No rejected take changes a reported pass.

All four leases opened in this pass (`cap3-android`, `cap3-ios`, `cap3b-android`, `cap3b-ios`) were closed. All captured server/Metro process groups were stopped; their tracked `/proc` entries and all six own listening ports were absent afterward. Both own worktrees were removed with `git worktree remove --force`. The lead worktree was not built in or modified. No PR body edit, commit or push was made. CI checks and reviews were not assessed. Scratch and public evidence remain under `/tmp/lead-33680-r2/capture-3/`; no source data came from live T3 userdata.

### Package upload output (verbatim)

[target-crop-repair-pass3.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/792e4467f08ab98e/target-crop-repair-pass3.zip)
[prior-sample-validation.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1eb764e7848e283e/prior-sample-validation.json)

[capture-drivers-and-artifacts-pass3.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2187ce82683f355/capture-drivers-and-artifacts-pass3.zip)
[rejected-capture-diagnostics-pass3.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6243e26b8193b289/rejected-capture-diagnostics-pass3.zip)
[process-cleanup.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7027a97acf9dda52/process-cleanup.json)

FRICTION:

tool | Pillow absent; system pip externally managed | Used a scratch virtualenv.
runbook | dev:client already supplies --lan; extra --host lan rejected | Relaunched with --port only.
tool | Pool calls intermittently returned Remote daemon unavailable; retried after a minute | Stable gateway/worker connection.
runbook | Opened leases from main checkout but installed from own capture checkout; device ownership refused iOS install | Run connect/open/install/all actions from one working directory.
tool | iOS system Open prompt persists through alert helper deadline; repeated launch links queued prompts | Wait for and dismiss system prompt before sending more links.
model | First W1 Android take used a wrapped-body coordinate that moved with bottom anchoring | Select wrapped body by its fresh accessibility ref.
runbook | Android clipboard read is unsupported; optional diagnostic aborted second recording after Copy | Treat native clipboard read as optional and verify Copy action visually.
tool | Repeated daemon outages interrupt otherwise successful actions across both platforms; retries once after >=60s are recorded | Stable pool gateway/worker service.
runbook | Current swipe command rejects a duration positional argument | Use gesture pan for timed drags.
tool | Android screenrecord drops unchanged tails and sparse seeks can miss final states | Decode sequentially and inspect the last encoded frame.
