# Evidence recapture — A plain, B plain, I rich

Before [becf853def](https://github.com/pingdotgg/t3code/commit/becf853defb6127dbe4447860383777d69346b6f) → After [643fca70b2](https://github.com/pingdotgg/t3code/commit/643fca70b2b1b4e502ed84df68e23f90de939cd4). Only these three row/mode combinations were recaptured.

Linux; agent-browser 0.39.4; Chrome for Testing 156.0.8078.47 headless; 1440×900 light; DPR 1; zoom/font scaling 100%; body 16px, composer 14px; reduced motion; browser/server clock 2026-10-27 02:00:00 UTC. Fresh worktree databases; T3CODE_DEV_SEED=0; synthetic thread.create via guarded app RPC and original text/plain paste seeds; no provider turn.

A uses the original driver with 2.5-second holds and character-by-character typing. Before A uses the native agent-browser recorder; After A and both I recordings use actual CDP screenshots at 10fps, encoded afterward to H.264; no speed changes. The latter avoids intermittent native live-encoder failures.

I raises only the editor maximum height from 208px to 420px before capturing. All seeded content fits without scrolling: scrollTop=0 and scrollHeight≤clientHeight at every pre-action checkpoint. Rich Shift+Enter on the empty nested item invokes the editor’s existing structural lift. Before and After match for all five input and output documents; this is parity, not evidence of the PR’s plain-path lift helper.

Every final still has fonts ready, caret blurred, mouse parked at (1400,100), and two whole-viewport screenshots 500ms apart with exact AE=0. No masks or cropped comparisons. Diff0 = absolute RGB difference ×16; DiffT = ImageMagick compare at 2% fuzz. All final stills and decoded held recording frames were visually inspected.

## A / plain

Before: 00:00.0 paste ""; caret -1; 00:03.9 1; 00:06.6 .; 00:09.3 Space; 00:11.9 type "parent"; 00:16.1 Shift+Enter; 00:18.8 Tab; 00:21.5 type "child"; 00:25.4 paste "1. parent\n2. child"; caret 15; 00:29.2 Tab; 00:31.9 type "X"; 00:34.9 Backspace

After: 00:00.0 paste ""; caret -1; 00:03.9 1; 00:06.7 .; 00:09.4 Space; 00:12.1 type "parent"; 00:16.1 Shift+Enter; 00:18.9 Tab; 00:21.6 type "child"; 00:25.5 paste "1. parent\n2. child"; caret 15; 00:29.4 Tab; 00:32.1 type "X"; 00:35.0 Backspace

| Before recording | After recording |
|---|---|
| [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1840f8f9da300529/before-plain-A.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/792057a298680d19/after-plain-A.mp4) |

Whole-viewport [Before / After / Diff0 / DiffT sheet](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5dfaee372f74bea7/plain-A-sheet.png). AE0=328; AE2%=321; difference bounding box=[378, 805, 425, 816].

Generated child: `1. parent\n  2. child` → `1. parent\n   1. child`. Existing-child X insertion confirms the caret stays between ch and ild on both sides.

## B / plain

Before: 00:00.0 paste "10. parent\n11. child"; caret 17; 00:03.9 Tab; 00:06.5 type "X"; 00:09.4 Backspace

After: 00:00.0 paste "10. parent\n11. child"; caret 17; 00:03.9 Tab; 00:06.5 type "X"; 00:09.4 Backspace

Whole-viewport [Before / After / Diff0 / DiffT sheet](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0a0886c717348a9/plain-B-sheet.png). AE0=380; AE2%=371; difference bounding box=[377, 805, 429, 816].

Canonical text: `10. parent\n  11. child` → `10. parent\n    1. child`. All differing pixels lie inside the changed child text; zero outside. The previous Send-shadow differences are absent.

## I / rich

Before: 00:00.0 paste "1. a\n   1. \n2. b\n   1. descendant\n03. c\n\n9. untouched"; caret 11; 00:04.1 full list visible: middle lift; 00:06.3 Shift+Enter; 00:09.0 type "X"; 00:14.2 paste "1) a\n   1) \n2) b\n   1) descendant\n03) c\n\n9) untouched"; caret 11; 00:18.3 full list visible: paren parent; 00:20.6 Shift+Enter; 00:23.2 type "X"; 00:28.4 paste "1. a\n   1. \n2. b\n3) delimiter\n4. untouched"; caret 11; 00:32.6 full list visible: delimiter stops renumber; 00:35.0 Shift+Enter; 00:37.8 type "X"; 00:43.1 paste "1. a\n   1. \n2. b\nprose\n4. untouched"; caret 11; 00:47.2 full list visible: prose stops renumber; 00:49.5 Shift+Enter; 00:52.2 type "X"; 00:57.4 paste "1. outer\n   1. a\n      1. \n   2. b\n2. untouched"; caret 26; 01:01.5 full list visible: shallower stops renumber; 01:03.9 Shift+Enter; 01:06.6 type "X"

After: 00:00.0 paste "1. a\n   1. \n2. b\n   1. descendant\n03. c\n\n9. untouched"; caret 11; 00:04.2 full list visible: middle lift; 00:06.4 Shift+Enter; 00:09.2 type "X"; 00:14.3 paste "1) a\n   1) \n2) b\n   1) descendant\n03) c\n\n9) untouched"; caret 11; 00:18.4 full list visible: paren parent; 00:20.5 Shift+Enter; 00:23.2 type "X"; 00:28.4 paste "1. a\n   1. \n2. b\n3) delimiter\n4. untouched"; caret 11; 00:32.4 full list visible: delimiter stops renumber; 00:34.7 Shift+Enter; 00:37.4 type "X"; 00:42.4 paste "1. a\n   1. \n2. b\nprose\n4. untouched"; caret 11; 00:46.4 full list visible: prose stops renumber; 00:48.7 Shift+Enter; 00:51.3 type "X"; 00:56.4 paste "1. outer\n   1. a\n      1. \n   2. b\n2. untouched"; caret 26; 01:00.4 full list visible: shallower stops renumber; 01:02.6 Shift+Enter; 01:05.3 type "X"

| Before recording | After recording |
|---|---|
| [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6724359dad606beb/before-rich-I.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d648198a0bf2f606/after-rich-I.mp4) |

Whole-viewport [Before / After / Diff0 / DiffT sheet](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9eacb088833d7d25/rich-I-sheet.png). AE0=0; AE2%=0; difference bounding box=None.

No Before/After document difference at any variant. Primary and paren variants promote the empty nested item, renumber b/c and preserve the separated 9. untouched. Delimiter and prose boundaries and the shallower parent boundary match on both revisions.

## Preserved scope and limitations

Original [full index](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/731f8988f9aee143/Evidence-index.md) and [scripts/seeds](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea21a807edd0d02d/scripts-and-seeds.zip) remain the source for every other row; their A-plain and I-rich recording chapters and B-plain sheet are superseded above.

Rich J: the rich composer lifts through its own structural list command, unchanged by this PR; Before and After match. The checked-task fixture retains nested items on both revisions; no task-parent list-exit claim is made.

M retains the existing continuation-prose limitation on both revisions; this capture does not claim that limitation is fixed.

A/B sent chapters remain RPC-seeded real renderer; Submit path not exercised. H whitespace, L rich prefix and N unreachable/literal-answer states remain clearly labelled harness coverage. No native mobile verification.

Changed drivers, final raw stills, settle pairs, metadata, decoded-frame review sheets and hashes: [archive](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ced17b1d9385440d/recapture-scripts-and-captures.zip).
