# Captures for [#22803](https://git.cafe/pingdotgg/t3code/pulls/22803)

Compared before [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) (`e27a03e94d43b504cfc3933282af913763312afd`) and after [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) (`b0e0163e805da78f5156ca283cc35f3367a6df9f`). [Proof matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/63924d1b41f8fd38/pr-22803-matrix.md). Capture date: 2026-10-21 UTC.

8 before/after recording pairs (16 videos), one static pair, two static diff images. Seven of nine matrix rows have the specified UI evidence; R3/R4 provide real-app RPC harness recordings with the narrow Stop-button click explicitly unverified. R5/R6 dispatch the message through the normal authenticated command API, then answer in the browser. No question state was inserted into SQLite or changed in the DOM.

## Rows

| Row | Script | CSS viewport | Theme | Status |
|---|---|---|---|---|
| [R1](#r1) | Stop button | 1440×900 | light | Recording pair |
| [R2](#r2) | Stop button | 1440×900 | dark | Recording pair |
| [R3](#r3) | Stop RPC harness — UI button unverified | 390×844 | light | Harness only; button unverified |
| [R4](#r4) | Stop RPC harness — UI button unverified | 390×844 | dark | Harness only; button unverified |
| [R5](#r5) | New-message steering RPC | 1440×900 | light | Recording pair |
| [R6](#r6) | New-message steering RPC | 390×844 | dark | Recording pair |
| [R7](#r7) | Provider transport failure | 1440×900 | dark | Recording pair |
| [R8](#r8) | Provider transport failure | 390×844 | light | Recording pair |
| [S9](#s9) | Pending question card | 1440×900 | light | Static pair + two diffs |

## How the real app was driven

Both detached worktrees ran their own `vp run dev`, isolated gitignored `.t3` state and identical synthetic project. `T3CODE_DEV_SEED=0` skipped copying real conversations. The local executable `cli/claude` in the runtime archive was first on each server PATH (SHA-256 `0bc59e00d055c57aa5dcd31d96414994e389b0a1a3a258a0aa54ec8fe19cafcd`). This differs from the matrix’s proposed provider Binary path setting: PATH resolution selects the same executable mechanism for the production SDK. It implements the installed Claude SDK stream-json protocol: assistant `AskUserQuestion` tool-use plus `can_use_tool` control request. The production SDK, adapter, orchestrator, projection, WebSocket and question UI are real. No subscription or Claude inference was used. The model label is Claude Fable 5.1, with a local protocol stub behind it.

For every row, create a normal thread under the synthetic project, select Claude, type **Ask me to choose Red or Blue.**, submit, and wait for **Which color should we use?** with Red/Blue. Then start recording. The recording script begins with the pending card already present; all actions after that are timed below. Each revision uses the same script and stub. Blue auto-submits when clicked.

Stop: click the visible desktop **Stop generation** button; wait for **Run interrupted**; type the same prompt again; click Blue on fresh Q2 and observe **Answer received: Blue**. R3/R4: the 390 px pending-question composer renders no Stop button, so call `threadEnvironment.interruptTurn.run` through the existing authenticated browser command registry instead. This is the Stop command, but does not verify a narrow button interaction.

Steering: pending-question mode reserves the composer for answers, so invoke authenticated `message.dispatch` with text **Replace the question**, `dispatchMode.type=steer_active` and the active run ID, through the app command registry. This substitutes for another client sending the message; it does not type into this browser composer. The stub receives this user message and emits `control_cancel_request` for Q1 while keeping the run alive. Hold Q2 behind SIGUSR2, observe the cancellation interval, then release Q2. Click the first visible Blue option. Before: Q1 stays active and receives the click, but provider delivery is stale; Q2 remains pending and no Blue acknowledgement appears. After: Q1 is cancelled, Q2 alone appears and Blue is acknowledged. The cancelled runtime request/node/turn-item statuses are included in the trace.

Failure: send SIGUSR1 only to the PID captured from this fixture invocation. The stub exits 17, so the actual SDK transport fails. Observe **Provider turn failed.**, then send a fresh prompt and answer Blue. This is an actual process/transport failure, not a mocked UI error.

Stop and failure already withdraw Q1 on the base revision through terminal cleanup. Their before/after recordings are regression controls, not claims that those surfaces changed visibly. Nonterminal steering is the distinguishing regression.

## Rendering environment

Host fs-10 (hostname); machine marker says freestyle. Linux x86_64; T3 collaborative Chromium preview, Chrome/154.0.0.0 desktop user agent; DPR 2; no mobile user agent. CSS viewports 1440×900 and 390×844; video pixels 2880×1800 and 780×1688. Local web origins before localhost:7010 and after localhost:5823; server ports 15050 and 13863. Light background `oklch(0.992 0 0)`, dark `oklch(0.145 0 none)`. Full surface recorded, no crop. Snapshot tool downsamples the static 1440×900 surface to 1280×800. Clocks/IDs were not frozen. No visual DOM edits or masks.

Initial disk free 5.9 GB; 4.2 GB before upload (above 2 GB stop threshold). Both worktrees installed with worktree-local `vp i`. Servers run from their respective worktrees, never live userdata. Recording files returned in this VM’s attachments directory were copied out as explicitly authorized.

## Runtime evidence

[runtime-evidence.tar.gz](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/988d2aa653ff4c3e/runtime-evidence.tar.gz)

[focused-test.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/258d360f4ba3fd7f/focused-test.txt)

Archive contains per-row timestamps, thread routes, read-only projection snapshots, selected stub protocol logs, identical fixture source, capture helpers, ffprobe dimensions/durations and media SHA-256 hashes. It excludes pairing credentials, startup URLs, live settings and discarded setup/probe captures. Focused test: `vp test run apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts -t "withdraws an aborted AskUserQuestion"`: 1 passed, 203 filtered/skipped. No repository-wide checks.

## R1

**Stop button — 1440×900, light — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.010 | 0.009 |
| Click Stop generation | 1.512 | 1.511 |
| Run interrupted; Q1 no longer actionable | 2.717 | 2.555 |
| Type fresh recovery prompt | 4.259 | 4.117 |
| Fresh recovery Q2 visible | 5.563 | 5.807 |
| Click Blue (the option submits immediately) | 6.564 | 6.809 |
| Blue acknowledged | 7.888 | 8.450 |
| Final state held | 9.840 | 10.369 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 3.2s: Q1 withdrawn; interrupted run | 3.1s: Q1 withdrawn; interrupted run |
| 7.1s: Fresh Q2 and answer interaction | 7.3s: Fresh Q2 and answer interaction |
| 9.6s: Blue acknowledged | 10.2s: Blue acknowledged |

Before starts 2026-10-21T20:22:10.088Z; after starts 2026-10-21T20:22:30.554Z.

| Before | After |
|---|---|
| [R1-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d9fb16bc926e0321/R1-before.mp4) | [R1-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/00eff3ebea26ecce/R1-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 1440×900; light; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 10.270s; thread `4860cd10-5acb-47dd-92a6-1842e10ab4fa`.
Environment after: CSS 1440×900; light; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 10.800s; thread `941b4ad9-a7e2-4638-9777-b108160b7ac2`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-275080.ndjson`, `protocol/stub-275397.ndjson` |
| after | `protocol/stub-275572.ndjson`, `protocol/stub-275870.ndjson` |

Observed on both revisions: Q1 stops being actionable on terminal cleanup; fresh Q2 accepts Blue and the assistant acknowledges it. 

## R2

**Stop button — 1440×900, dark — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.011 | 0.010 |
| Click Stop generation | 1.513 | 1.512 |
| Run interrupted; Q1 no longer actionable | 2.883 | 2.899 |
| Type fresh recovery prompt | 4.501 | 4.400 |
| Fresh recovery Q2 visible | 6.043 | 5.697 |
| Click Blue (the option submits immediately) | 7.045 | 6.699 |
| Blue acknowledged | 8.678 | 8.393 |
| Final state held | 10.602 | 10.347 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 4.2s: Q1 withdrawn; interrupted run | 3.4s: Q1 withdrawn; interrupted run |
| 7.5s: Fresh Q2 and answer interaction | 7.2s: Fresh Q2 and answer interaction |
| 10.4s: Blue acknowledged | 10.1s: Blue acknowledged |

Before starts 2026-10-21T20:22:49.742Z; after starts 2026-10-21T20:23:07.143Z.

| Before | After |
|---|---|
| [R2-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ddbcf87c1ff2db2d/R2-before.mp4) | [R2-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a13e411830c4dcc/R2-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 1440×900; dark; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 11.009s; thread `deaff0e4-7f41-4d9c-98ad-1abbd417b2b5`.
Environment after: CSS 1440×900; dark; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 10.742s; thread `46ca0ba4-66c2-454c-98e2-02a2083176ee`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-275983.ndjson`, `protocol/stub-276323.ndjson` |
| after | `protocol/stub-276437.ndjson`, `protocol/stub-276771.ndjson` |

Observed on both revisions: Q1 stops being actionable on terminal cleanup; fresh Q2 accepts Blue and the assistant acknowledges it. 

## R3

**Stop RPC harness — UI button unverified — 390×844, light — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.018 | 0.047 |
| Narrow Stop button unavailable; invoke same interruptTurn command through RPC harness | 1.520 | 1.548 |
| Run interrupted; Q1 no longer actionable | 2.032 | 1.990 |
| Type fresh recovery prompt | 3.542 | 3.499 |
| Fresh recovery Q2 visible | 4.773 | 4.722 |
| Click Blue (the option submits immediately) | 5.775 | 5.723 |
| Blue acknowledged | 6.809 | 6.867 |
| Final state held | 8.712 | 8.777 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 2.5s: Q1 withdrawn; interrupted run | 2.5s: Q1 withdrawn; interrupted run |
| 6.3s: Fresh Q2 and answer interaction | 6.2s: Fresh Q2 and answer interaction |
| 8.5s: Blue acknowledged | 8.6s: Blue acknowledged |

Before starts 2026-10-21T20:26:27.257Z; after starts 2026-10-21T20:26:42.769Z.

| Before | After |
|---|---|
| [R3-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/964350ffdfbd6f96/R3-before.mp4) | [R3-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2e19aed88af358cb/R3-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 390×844; light; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 8.924s; thread `c3a19206-6ad3-4eeb-a529-39e5d7a1f9d7`.
Environment after: CSS 390×844; light; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 9.014s; thread `e1d7d69e-95d7-4573-b9eb-d480d6971d3e`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-279641.ndjson`, `protocol/stub-279950.ndjson` |
| after | `protocol/stub-280081.ndjson`, `protocol/stub-280367.ndjson` |

Observed on both revisions: Q1 stops being actionable on terminal cleanup; fresh Q2 accepts Blue and the assistant acknowledges it. **UI Stop-button interaction unverified:** cancellation was driven through the labelled RPC harness.

## R4

**Stop RPC harness — UI button unverified — 390×844, dark — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.036 | 0.010 |
| Narrow Stop button unavailable; invoke same interruptTurn command through RPC harness | 1.537 | 1.511 |
| Run interrupted; Q1 no longer actionable | 2.126 | 2.005 |
| Type fresh recovery prompt | 3.634 | 3.506 |
| Fresh recovery Q2 visible | 4.828 | 4.810 |
| Click Blue (the option submits immediately) | 5.830 | 5.811 |
| Blue acknowledged | 7.074 | 7.006 |
| Final state held | 8.972 | 8.989 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 2.6s: Q1 withdrawn; interrupted run | 2.5s: Q1 withdrawn; interrupted run |
| 6.3s: Fresh Q2 and answer interaction | 6.3s: Fresh Q2 and answer interaction |
| 8.8s: Blue acknowledged | 8.8s: Blue acknowledged |

Before starts 2026-10-21T20:27:03.506Z; after starts 2026-10-21T20:29:02.915Z.

| Before | After |
|---|---|
| [R4-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8db2a8825a0a7a98/R4-before.mp4) | [R4-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b2ffff3cd883f8a/R4-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 390×844; dark; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 9.198s; thread `e4440c04-835d-489b-8d36-b0c17e9f7c73`.
Environment after: CSS 390×844; dark; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 9.205s; thread `52bf0833-4801-41b0-8a0d-a9a160934c6a`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-280480.ndjson`, `protocol/stub-280802.ndjson` |
| after | `protocol/stub-281872.ndjson`, `protocol/stub-282082.ndjson` |

Observed on both revisions: Q1 stops being actionable on terminal cleanup; fresh Q2 accepts Blue and the assistant acknowledges it. **UI Stop-button interaction unverified:** cancellation was driven through the labelled RPC harness.

## R5

**New-message steering RPC — 1440×900, light — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.011 | 0.011 |
| Send Replace the question through authenticated active-steer RPC | 1.512 | 1.512 |
| Observe Q1 after nonterminal cancellation | 3.459 | 3.559 |
| Release Q2 through fixture gate | 5.065 | 5.162 |
| Observe queue after replacement | 6.753 | 6.832 |
| Click visible Blue option (submits immediately) | 7.651 | 7.742 |
| Observe delivery outcome | 10.518 | 10.526 |
| Final state held | 12.423 | 12.424 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 4.0s: Q1 still actionable after steer | 4.1s: Q1 withdrawn; no pending question |
| 8.2s: Q1 still ahead of replacement | 8.2s: Replacement Q2 and answer interaction |
| 12.2s: Replacement still pending; no Blue acknowledgement | 12.2s: Blue acknowledged |

Before starts 2026-10-21T20:20:44.398Z; after starts 2026-10-21T20:21:07.217Z.

| Before | After |
|---|---|
| [R5-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1ade30d8a03086c/R5-before.mp4) | [R5-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/59adbc3267a14b43/R5-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 1440×900; light; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 12.973s; thread `d03830e7-a1c1-474a-9737-dc57eab4b339`.
Environment after: CSS 1440×900; light; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 12.898s; thread `a954c268-d82a-474a-a711-e70c42a1cc2d`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-272965.ndjson` |
| after | `protocol/stub-273402.ndjson` |

Observed: before retains original Q1 during the cancellation interval and shows two queued questions after Q2 arrives; clicking Blue resolves the stale Q1 only in the projection, leaving Q2 pending and the run running. After withdraws Q1 before Q2 is released; Blue resolves Q2 and the run completes. The video shows the visible difference; projection and protocol traces corroborate delivery.

## R6

**New-message steering RPC — 390×844, dark — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.012 | 0.011 |
| Send Replace the question through authenticated active-steer RPC | 1.513 | 1.514 |
| Observe Q1 after nonterminal cancellation | 3.306 | 3.530 |
| Release Q2 through fixture gate | 4.908 | 5.124 |
| Observe queue after replacement | 6.571 | 6.790 |
| Click visible Blue option (submits immediately) | 7.468 | 7.703 |
| Observe delivery outcome | 9.761 | 10.176 |
| Final state held | 11.651 | 12.069 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 3.8s: Q1 still actionable after steer | 4.0s: Q1 withdrawn; no pending question |
| 8.0s: Q1 still ahead of replacement | 8.2s: Replacement Q2 and answer interaction |
| 11.5s: Replacement still pending; no Blue acknowledgement | 11.9s: Blue acknowledged |

Before starts 2026-10-21T20:21:26.500Z; after starts 2026-10-21T20:21:45.640Z.

| Before | After |
|---|---|
| [R6-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7357de9576bbab11/R6-before.mp4) | [R6-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a66d1f30d760e35/R6-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 390×844; dark; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 11.848s; thread `ec038edf-8b2a-474f-8c7f-b0af6a8667c1`.
Environment after: CSS 390×844; dark; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 12.277s; thread `6cff87dc-4c1a-4115-ae93-33a4731654f5`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-274248.ndjson` |
| after | `protocol/stub-274667.ndjson` |

Observed: before retains original Q1 during the cancellation interval and shows two queued questions after Q2 arrives; clicking Blue resolves the stale Q1 only in the projection, leaving Q2 pending and the run running. After withdraws Q1 before Q2 is released; Blue resolves Q2 and the run completes. The video shows the visible difference; projection and protocol traces corroborate delivery.

## R7

**Provider transport failure — 1440×900, dark — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.013 | 0.009 |
| Trigger fixture transport failure: captured stub PID exits 17 | 1.514 | 1.510 |
| Failed run visible; Q1 withdrawn | 2.552 | 2.017 |
| Type fresh recovery prompt | 4.080 | 3.511 |
| Fresh recovery Q2 visible | 6.166 | 5.127 |
| Click Blue (the option submits immediately) | 7.168 | 6.129 |
| Blue acknowledged | 8.950 | 7.332 |
| Final state held | 10.872 | 9.250 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 3.0s: Q1 withdrawn; failed run | 2.5s: Q1 withdrawn; failed run |
| 7.5s: Fresh Q2 and answer interaction | 6.6s: Fresh Q2 and answer interaction |
| 10.5s: Blue acknowledged | 9.0s: Blue acknowledged |

Before starts 2026-10-21T20:32:31.883Z; after starts 2026-10-21T20:25:33.074Z.

| Before | After |
|---|---|
| [R7-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cb54d0888cd612b6/R7-before.mp4) | [R7-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6a2776f66b24d35/R7-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 1440×900; dark; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 11.453s; thread `f876b27e-e1d0-4801-bd6d-1b52a2ea05b2`.
Environment after: CSS 1440×900; dark; DPR 2; Chrome 154/Linux; encoded 2880×1800; duration 9.680s; thread `65da117f-fe12-4f0d-a45c-fd95a6105694`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-286415.ndjson`, `protocol/stub-287289.ndjson` |
| after | `protocol/stub-278424.ndjson`, `protocol/stub-278713.ndjson` |

Observed on both revisions: Q1 stops being actionable on terminal cleanup; fresh Q2 accepts Blue and the assistant acknowledges it. 

## R8

**Provider transport failure — 390×844, light — recording.**

Script log (seconds on the tool capture-start clock). Action rows mark command initiation; observation rows mark the wait response. These wall-clock log values are not exact encoded-video frame timecodes. The separately decoded visible checkpoints below identify what is visible at video playback times.

| Logged step | Before (s) | After (s) |
|---|---:|---:|
| Pending original Q1 visible | 0.011 | 0.009 |
| Trigger fixture transport failure: captured stub PID exits 17 | 1.513 | 1.511 |
| Failed run visible; Q1 withdrawn | 2.013 | 2.033 |
| Type fresh recovery prompt | 3.510 | 3.534 |
| Fresh recovery Q2 visible | 4.780 | 4.836 |
| Click Blue (the option submits immediately) | 5.781 | 5.838 |
| Blue acknowledged | 6.907 | 6.901 |
| Final state held | 8.833 | 8.807 |

Narration at decoded video checkpoints (playback seconds; these are samples, not claims of the first changed frame):

| Before | After |
|---|---|
| 1.0s: Q1 pending | 1.0s: Q1 pending |
| 2.5s: Q1 withdrawn; failed run | 2.5s: Q1 withdrawn; failed run |
| 6.3s: Fresh Q2 and answer interaction | 6.3s: Fresh Q2 and answer interaction |
| 8.5s: Blue acknowledged | 8.5s: Blue acknowledged |

Before starts 2026-10-21T20:25:48.966Z; after starts 2026-10-21T20:26:07.809Z.

| Before | After |
|---|---|
| [R8-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b2b721a7da867276/R8-before.mp4) | [R8-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0308f73c1d5c43b7/R8-after.mp4) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment before: CSS 390×844; light; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 9.045s; thread `4bb271b9-217f-4691-b12e-c4970ea30212`.
Environment after: CSS 390×844; light; DPR 2; Chrome 154/Linux; encoded 780×1688; duration 9.030s; thread `a130ae70-c506-4bec-9a1c-e90cab33c700`.

Protocol correlation (archive paths; all request IDs and emission/projection deltas are in `protocol-correlations.json`):

| Revision | Fixture logs |
|---|---|
| before | `protocol/stub-278838.ndjson`, `protocol/stub-279118.ndjson` |
| after | `protocol/stub-279252.ndjson`, `protocol/stub-279512.ndjson` |

Observed on both revisions: Q1 stops being actionable on terminal cleanup; fresh Q2 accepts Blue and the assistant acknowledges it. 

## S9

**Pending question card — 1440×900, light — static.** Seed with the same initial prompt, wait for Q1 and capture the whole surface. Stills are only for this static state.

| Before | After |
|---|---|
| ![S9-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9a02417090c3750e/S9-before.png) | ![S9-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/24bfb14f770e874a/S9-after.png) |
| SHA [e27a03e94d](https://git.cafe/pingdotgg/t3code/commit/e27a03e94d43b504cfc3933282af913763312afd) | SHA [b0e0163e80](https://git.cafe/pingdotgg/t3code/commit/b0e0163e805da78f5156ca283cc35f3367a6df9f) |

Environment per still: CSS 1440×900; light; DPR2; Chrome154/Linux; snapshot output1280×800. Before thread `2b0666f8-884a-4653-a73c-75fc34737cd3`; after thread `e5b93c2b-5819-4e0b-9960-5f68cf30c7cc`.

Absolute RGB difference:

![S9-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a80fa2a946f8edea/S9-diff.png)

Difference with Pillow contrast enhanced ×5 (display aid):

![S9-diff-5x.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a8f4607c01406a9f/S9-diff-5x.png)

Rebuild: `ImageChops.difference(before.convert("RGB"), after.convert("RGB"))`; count any nonzero channel. 385/1,024,000 changed pixels (0.03759765625%); mean absolute channel delta 0.0049303385/255. `package.py` in the archive reproduces these images and metrics. This measures the supplied pair, not a claim of identical live pixels on later recapture.

## What else changed

The production diff only changes Claude AskUserQuestion cancellation handling and its focused tests. No web styles or components changed. Capture differences unrelated to that patch include independent environment/thread/session/tool IDs, local ports/worktree paths, UTC message times, title-generation timing, Working durations, responsive layout and intentional themes. The same stub binary/hash, prompt and gates were used on both revisions. The static difference is exclusively the “Input requested” label’s shimmer animation phase in bounding box (372,194)–(448,206); the clock, title and other text are identical in this pair.

## Out of scope and unverified

- R3/R4 actual narrow Stop-button clicks: unverified because the pending question surface has no rendered Stop button at 390 px. Real-app RPC cancellation recordings are supplied, clearly labelled.
- R5/R6 local-composer typing of an interrupting message: not exercised; pending-question mode uses that composer for answers. The existing authenticated command API sends the real message instead, as the matrix anticipated for a second-client harness.
- Remaining viewport/theme cross-product combinations for steering and failure: omitted to cap the diff-sized matrix at eight recording rows plus one still.
- Native mobile, Electron shell, tunnel/relay/multiple environments, other providers and non-question permission prompts: outside this Claude adapter cancellation diff and the authorized web capture matrix.
- Real Claude binary/subscription behavior and additional timing races: not exercised; the same deterministic SDK protocol stub drives both revisions.

Capture: Codex gpt-6.1-sol; proof audit requested separately from Claude Opus 5.5.

## Re-audit changes and remaining limitations

[First proof audit](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c8e461dbd2127476/pr-22803-proof-audit-2.md) found R3/R4 insufficient against the original matrix. That matrix has not been narrowed or rewritten; those button-click rows remain unverified. The seven other rows were judged sufficient.

Corrections for re-audit: added decoded playback checkpoints above every pair, while retaining and accurately labelling the original action/wait logs; correlated all 32 requests across the 16 recordings to their initial and recovery stub logs; archived the logs for every row; identified S9’s precise shimmer-phase delta; explicitly documented PATH wiring in place of the proposed provider Binary path.

R7-before was re-recorded with the identical failure/recovery script at 20:32 UTC because its original capture-start clock did not align with encoded duration. The new recording, thread, metadata, snapshots and logs are supplied together. The three extra 20:32 stub starts seen by the first auditor belong to this setup/re-recording; the selected initial failure and recovery processes are explicitly correlated in the revised archive. The unselected setup invocation and old R7 media are excluded.

The focused adapter test generated a temporary Vite config under a watched package node_modules directory, causing the after dev runner to restart its server at 20:27:13 UTC between capture runs. No recording was in progress. The replacement listener PID was captured from its port and verified by worktree cwd. The source SHA and fixture did not change.

The first auditor independently rebuilt the S9 diff from image files; a new auditor browser profile could not reuse the capture session’s pairing. No live re-capture is claimed by that audit. Its pixel rebuild was identical to the uploaded diff.
