# PR #33440 capture matrix (scoped by the lead from the auditor's pass-1 matrix)

Auditor pass-1 matrix (full input-space inventory, P01–P25): https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8984726b10401a5c/capture-matrix.md

The diff changes one branch: after a *successful save-and-send* from the citation comment box, `onRestoreFocus` only focuses the editor instead of moving the caret after the chip. The not-sent branch (plain Save, Cancel, Escape, outside click, Tab) is byte-identical to main. The rows below are one per distinct outcome of the changed branch, plus the controls that show the unchanged branch did not move.

Revisions: before = f7281124ba923aef7e917bc8cf6d02878a49edd3 (merge-base, main), after = f3e4dd630e14f9fd4502eaba762aa940f8806ebb (PR head, v2: the send callback reports whether it dispatched; blocked sends and the no-callback Settings preview restore the caret after the chip).
Profiles: D = 1440×1000, dark, Chromium/Linux, hardware Ctrl. N = 390×844, light, Chromium/Linux narrow viewport.

| Row | Auditor ID | Fixture | Diff reach | Seeding | Capture | Status |
|---|---|---|---|---|---|---|
| R1 | P01 | Reporter's steps: prompt `check it again `, cite a short selection from a Replay assistant reply, Ctrl+Enter in the untouched empty comment box. Then wait for the turn to finish and type `fresh draft`. | Changed branch, send clears the prompt | Real app, `T3CODE_DEV_SEED=0 vp run dev`, Replay (dev) "Multi turn" | Recording before+after at D; recording before+after at N; final-frame stills + Diff0/DiffT for each pair | affected |
| R2 | P21 (also covers P15's class: a save-and-send whose send does not clear the prompt) | Settings → Appearance typography preview: paste a serialized citation so it tokenizes, open its comment, Ctrl+Enter (no send callback), then reopen, plain Save (Enter), type `after` | Changed branch, send does not clear; then shows the sent flag resets so the next Save restores the caret after the chip | Real app, `/settings/appearance` | Recording before+after at D; final-frame stills + diffs | affected |
| R2b | P21/P15 (immediate typing) | Settings → Appearance preview (simple and advanced): paste a serialized citation, open its empty comment, Ctrl+Enter, then type `after` IMMEDIATELY without reopening or clicking | Changed branch, dispatch reported false: caret must land right after the chip (as on main). eb8ab9da9e (v1 head) put it before the chip; include a v1 recording as the regression reference | Real app, `/settings/appearance` | Recording before (main) + after (head) at D, plus a v1 (eb8ab9da9e) recording labelled "intermediate head, superseded"; final-frame stills + Diff0/DiffT for main vs head | affected |
| R3 | P07 | Control: plain Save via Enter in a new comment with text after the chip, then type `after` | Unchanged branch (control) | Real app, Replay thread | Recording before+after at D | control |
| R4 | P12 | Control: real pointer click on main Send while the empty comment box is open | Unchanged path (issue's contrast case) | Real app, Replay thread | Recording after at D (before optional) | control |
| R5 | P16 | Ctrl+Enter from an empty comment while a Replay turn is running (Follow-up behavior = Queue) | Changed branch via queued submit | Real app, Replay "Multi turn"/"Showcase" if the turn runs long enough to act during it | Recording before+after at D, or listed unverified with the reason if Replay turns are too short to act during | affected |

Determinism (pass-2 findings): server-authored timestamps and Replay turn durations vary per run. Mask them in stills and recordings with an injected, labelled CSS rule (e.g. hide or blank the timestamp and `Worked for …` elements identically on both sides) so diffs light up only for the change. State the mask in the environment line.

Blocked chat sends (no model, compressing image, validation) take the same `dispatched = false` branch as R2b; they are covered by the browser test `keeps the caret after the citation when save-and-send is blocked` and are not seeded in the real app.

Dropped rows and why:
- P02 (rich/wrapped/narrow/multi-chip), P04–P06, P08, P14: same changed-branch outcome as R1 (send clears); layout is untouched by the diff (no CSS change). R1 at N covers narrow+light.
- P03 (macOS Cmd+Enter): `metaKey || ctrlKey` share one condition in the comment editor; nothing in the diff is platform-specific. Not run; stated in the PR body.
- P09–P11, P13, P19, P20, P22, P23, P25: exercise only the not-sent restore branch or guards the diff does not touch; R3 is the control for that branch.
- P15, P17: same "send did not clear" / "send dispatched" classes as R2 / R5.
- P18, P24: harness-only rewrite/speech timing paths; the new branch reads and resets one ref and has no timing of its own. Covered by the browser test for the decisive sequence.
