# issue24745 — executed evidence, pass 1

Matched real-web captures compare [c79ef8c454](https://git.cafe/pingdotgg/t3code/commit/c79ef8c454e1268ff79da5a9dcb74572e86f7861) with [4e080eb004](https://git.cafe/pingdotgg/t3code/commit/4e080eb004ead1a450214326e52bec98c9f52dba). C/Q/L/N/R passed. H is not runtime-verified; A is source-only. This is frontend proof using normalized projection fixtures, not provider/backend lifecycle verification.

## Matrix and interaction recordings

| Row | Result | Before recording | After recording |
|---|---|---|---|
| C, 1440 light | PASS: question and answer-before preserved; fix shows informational toast and leaves draft-before/zero contexts. Base silently overwrites hidden draft and adds hello. | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0ef948bf8a83038a/beforeDesktopC.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/25e4bbeac5f5fe1d/afterDesktopC.mp4) |
| C, 390 dark | PASS: real terminal selection/menu works; readable toast, preserved answer, no overflow. | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c997c8b4aa9cb3ea/beforeNarrowC.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8489f868b0ac4152/narrowC.mp4) |
| Q, 1440 light | PASS: normalized allowCustomAnswer:false, two options, multiSelect:true; selected Beta remains. Base silent return becomes toast, zero draft delta. | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47de7e0064213a8d/beforeQvideo.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/193ca4d79dc546f9/afterQvideo.mp4) |
| L, 1440 light | PASS: initialAnswer defined, allowCustomAnswer:true; literal @test and backtick-delimited hello unchanged. Base silent return becomes toast, zero draft delta. | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/091a996d13bc98bf/beforeLvideo.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4c9e48cd5c649a19/afterLvideo.mp4) |
| R, 1440 light | PASS: real question dismissal reveals base leaked terminal reference; fix ordinary draft remains draft-before, zero contexts BEFORE retry. | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3acfd7cc15988749/beforeRecovery.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/398e4409ecacc31a/afterQLRN.mp4) |
| N, 1440 light | PASS: no question; retry adds exactly one hello context, preserving draft-before, no rejection toast; composer focus behaves as before. | [Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22c2d7bade43c657/beforeNormal.mp4) | [After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/398e4409ecacc31a/afterQLRN.mp4) |
| H | NOT RUNTIME-VERIFIED: no hold/defer control. Typing hold clears on composer blur and after 1500ms; selecting terminal releases it. Source inspected: held request normalizes activePendingProgress to null. No synthetic held UI state invented. | — | — |
| A | SOURCE ONLY: unchanged no-active-thread return precedes toast and draft mutation; terminal action is thread-bound. | — | — |

The continuous after recording covers question transitions, Q, L, question closure, inspection before retry, and normal retry. Separate C clips show the rejected custom-answer interaction. Q uses multi-select because single-select auto-submits after 200ms.

## Representative recovery frames

Before — after closing the question, the rejected terminal excerpt has leaked into the ordinary draft:

![Before: question closure exposes answer-before and leaked Terminal 1 line 1 reference](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67b154fb0b5bb1dc/beforeR.png)

After — before retry, the original ordinary draft is intact:

![After: question closure leaves draft-before with no terminal reference](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5cc58a23ce2b99bc/afterR.png)

## Four width/theme combinations

![After: custom question and informational toast at 1440 light](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c1cd0a9c583299d/afterC.png)

![After: custom question and informational toast at 390 dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ec2dcb96945e00fa/dark390.png)

![After: custom question and informational toast at 1440 dark](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/325d360fa03a8701/dark1440.png)

![After: custom question and informational toast at 390 light](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/44a3b16a7abe5904/light390.png)

## Matched settled frames and pixel checks

- C1440: [Before still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7dcd9001044ad6a7/beforeC.png) / [After still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c1cd0a9c583299d/afterC.png)
- C390: [Before still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ec4f333aad805338/before390.png) / [After still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ec2dcb96945e00fa/dark390.png)
- Q: [Before still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7e7b0da2462980a0/beforeQ.png) / [After still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/01f73415aa354733/afterQ.png)
- L: [Before still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6cbe02b0a91340ae/beforeL.png) / [After still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2cc610d2f1f75f0a/afterL.png)
- N: [Before still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ede9936c47337bf9/beforeN.png) / [After still](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/059418aea749c824/afterN.png)

Channel threshold >8/255. C desktop, C responsive, Q and L have **zero changed pixels outside the expected toast/shadow and identified blinking caret/cursor masks**. N is unmasked: 125/1,024,000 pixels (0.012207%) changed, below the disclosed 0.02% tolerance (age label/caret/thin sidebar raster). Masks and raw counts are in the reproducible diff script/results. The tolerance was selected during capture review, not prescribed by the supplied matrix. Images and recording start/middle/end frames were visually inspected, including the final base recovery frame. No toast DOM/CSS manipulation.

Full credential-free capture/replay bundle: [issue-24745-replay.tar.gz](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a359bf979f41e351/issue-24745-replay.tar.gz).

## Replay and independent rebuild

- [REPLAY.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8872a6e41a30c06e/REPLAY.md)
- [capture-driver.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e61fa2963f0b1314/capture-driver.mjs)
- [seed.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1170200951ce2da4/seed.py)
- [fixture.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ef015751158ca9c0/fixture.json)
- [state-observations.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/344c7c9e65f2c31c/state-observations.json)
- [diff.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/199dc7ba9c2b62b8/diff.py)
- [diff-results.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c00ddedf107843a3/diff-results.json)

Local artifact root: `/tmp/issue-24745-evidence`. The driver was actually run on replacement base 390-dark C and base/fix L captures. Fixtures preserve app-authored request/node/run/thread relationships, with C custom answer, Q choice-only, and L literal fields explicitly recorded. The test action always uses real terminal selection and Add to chat. Fixture setup alone uses the app draft store to establish independent draft-before/zero-context state.

## Environment, changes and FRICTION

- Linux, local real web app, worktree `/home/ubuntu/wt/issue-24745`; branch `fix/issue-24745`, clean at the fix head. Reused ports 6294/14334; one dev runner at a time. Final owned runner session **50783** remains live. Own incognito Browser tab `tab_3_4e75d5a9-0bf1-4234-b878-be4537fd7733`; parent tab untouched.
- CSS viewports 1440x900 and 390x844, DPR2. Videos are 2880x1800 / 780x1688. Native Browser saved desktop PNGs downsize to1280x800; responsive PNGs are780x1688. Responsive web is not native mobile coverage. Electron shares this composer but its shell was not separately tested; no relay/tunnel claim.
- No implementation edits, commits, pushes, PRs, public comments, merges or watches. Only isolated `.t3` projection fixtures, browser draft/test state and harmless terminal hello were changed. Live home DB untouched. Offline helper backups retained locally. Read-only baseline DB and private pairing/server logs excluded from uploads.
- Original runner session44732 could not be controlled through this harness. Exact port owners were verified against this worktree, reported, stopped by captured PID, and the same runner restarted for offline fixture seeding. No pattern kill and no concurrent replacement server.
- Offline projection updates do not advance event cursors: cached browser state initially hid seeded requests. Cleared only this dedicated incognito profile's app cache, then reloaded. No user's normal browser cache cleared.
- Single-select Q auto-submits too quickly for terminal selection; multiSelect:true keeps a real chosen option pending. Narrow terminal selection/menu succeeded without a substitute action. H remains the explicit unreachable-state limitation above.
- Final retained app state: questions dismissed; ordinary draft `draft-before`, zero terminal contexts; terminal hello at line1; 1440 light. No extra running provider turn created by capture.

Captured with Codex harness, gpt-6.1-sol. Uploaded with the ghdrop skill; browser verification followed test-t3-app.
