# Proof audit, pass 1 — [#32583](https://git.cafe/pingdotgg/t3code/pull/32583)

Findings: existing proof covers the reported single-steer bug and normal-finish clearing. Five affected combinations lack a test assertion or runtime excerpt: different-agent isolation, interrupted-prompt retention across `/compress`, retention after a rejected send, repeated interruption chaining, and native-image interruption. These are evidence gaps, not demonstrated implementation defects.

Reviewed local merged head [91fe6b5](https://git.cafe/pingdotgg/t3code/commit/91fe6b522ee68435bfeb4fbd162b260207319d2f), branch `fix/issue-32568`, against its main parent [41443e5](https://git.cafe/pingdotgg/t3code/commit/41443e5706c4605bc3efc17bcf431970488a146d). The remote PR head remains [c5ecf6e](https://git.cafe/pingdotgg/t3code/commit/c5ecf6eed2ce271104eb408b57a389e2c3b7eb7f). The main-parent diff contains only the adapter, adapter unit test, and steering transcript. The local `main` branch is older, so it was not used as the merged-head comparison base.

`git diff --exit-code` confirmed both adapter files are identical between captured after-revision [53b1848](https://git.cafe/pingdotgg/t3code/commit/53b18482fc), pushed PR head, and reviewed merged head. The steering fixture is also unchanged between pushed and merged heads. Thus the existing adapter transcript evidence survives the local merge.

Evidence inspected:

- **U:** [adapter regression test](https://git.cafe/pingdotgg/t3code/blob/c5ecf6eed2ce271104eb408b57a389e2c3b7eb7f/packages/provider-cursor/src/server/adapter.test.ts#L816), including both sends after interruption and the post-completion assertion. Independently rerun at the merged head: **22/22 adapter tests passed**. The PR body records the regression test failing before the fix; this audit did not independently rerun the historical red revision.
- **R:** [steering replay transcript](https://git.cafe/pingdotgg/t3code/blob/c5ecf6eed2ce271104eb408b57a389e2c3b7eb7f/apps/server/src/orchestration-v2/testkit/fixtures/message_steering/cursor_transcript.ndjson#L9), replay harness outbound matching, and projection assertions. Independently rerun both `message_steering` and explicit `restart_active`: **2/2 selected replay tests passed**, nine unrelated cases excluded by the name filter. The modified outbound fixture expectation is automated protocol proof, not a newly recorded real-API response to the modified prompt.
- **T:** The PR body's Verification section and all three details blocks: before protocol excerpt at [25bf84a](https://git.cafe/pingdotgg/t3code/commit/25bf84ab07), after protocol excerpt at the captured after-revision, and real Cursor SDK cancellation/control script and output. The before replacement contains only the correction; the after replacement includes the original story request and correction and returns a pig story. The SDK repro shows cancelled requests missing from history, with a completed-run control retaining the original. Historical excerpts were inspected as published; no paid API run was repeated.

## Behavioral matrix

`needs-capture` means the row currently has neither an existing assertion nor an existing runtime transcript showing the interrupted-prompt combination. A focused adapter test is an acceptable and preferred way to close a deterministic row; if no such test is added, obtain a real-app/real-Cursor protocol transcript for that row. Code inspection alone is not counted as execution proof. The eight rows below reduce to seven adapter scenarios because ordinary Stop and steer share the same interruption/carry primitive.

| Row | Path and expected result | Diff affected? | Existing proof and its limit | Status | Minimum missing proof / new runtime need |
|---|---|---|---|---|---|
| R1 | Same-agent steer after interrupt: replacement carries original request plus correction | Yes, core behavior | U asserts both strings after `interruptTurn`; R checks exact replacement outbound text and interrupted/completed attempts; T demonstrates real app + API before/after and explains cancelled-history loss | proven-by-existing | None; no new runtime transcript |
| R2 | Normal finish: subsequent ordinary message carries nothing | Yes, clearing boundary | U finishes the replacement, awaits terminal completion, sends a third prompt, and asserts original request absent; SDK completed-run control supports provider history behavior | proven-by-existing | None; no new runtime transcript |
| R3 | Different native agent: ignore interrupted text belonging to the previous agent | Yes, agent-id guard | No assertion sends to agent B with agent A's interrupted prompt pending. Instruction-delivery test uses one native agent throughout | needs-capture | Focused adapter assertion: interrupt A, send to B, show A's marker absent. Otherwise real-app agent-switch transcript |
| R4 | `/compress`: summarize without consuming the pending interrupted prompt; next ordinary message carries it | Yes, special command and clear guard | Existing compaction tests prove summarize/instruction reset, but never compact with interrupted text pending or inspect the following carry | needs-capture | Focused assertion: interrupt A, compact, send B; verify summarize remains separate and A survives. Otherwise equivalent real-app transcript |
| R5 | Failed send: a send rejected before acceptance preserves carry for retry | Yes, clearing occurs after successful SDK send | No interrupted-state + rejected-send + retry assertion. Wait-result/transport-error tests are not this failure boundary | needs-capture | Focused assertion: interrupt A, reject `session.send`, retry B, inspect retained A. Otherwise real-app failed-send/retry transcript; do not confuse a later failed run with a rejected send |
| R6 | Repeated steers: A interrupted by B, then B interrupted by C; final send carries A + B + C | Yes, stored prompt includes prior carry | U and R perform only one interruption; T's separate before variants are not chained steers | needs-capture | Focused two-interruption assertion checking order and all three markers. Otherwise one real-app repeated-steer transcript |
| R7 | Plain Stop then a later message on the same live agent: carry the stopped request | Yes, interruption applies beyond steering | U directly calls `interruptTurn` and subsequently `startTurn`; no steer intent is passed to the adapter. Active hard Stop reaches the same cancellation/finalization path. This proves the adapter behavior at the lowest changed layer | proven-by-existing | None for this in-session path. Persistence through server/session restart is outside the implementation and claim |
| R8 | Native-image interrupted prompt: carry original text and saved image paths; do not resend old native image bytes | Yes, stored carry is text; native images are built only from the new message's attachments | PR explicitly says untested. U has empty attachment arrays. Shared attachment helper tests establish path formatting, but not Cursor's image-bearing interruption and next send | needs-capture | Focused adapter assertion with an initial native image and later text-only message: original path/text present, old image payload absent. Otherwise real-app image + interrupt transcript showing outbound payload shape |

## Scope and minimum follow-up

There are no changed render paths. UI screenshots, desktop builds, and mobile captures do not close these server adapter gaps. The existing real-app protocol excerpt already satisfies the server-only runtime-transcript requirement for the main bug; it should not be rerun just to obtain a screenshot.

Prefer adding the five small missing adapter assertions to the existing regression setup. With those automated proofs, **no additional real Cursor API transcript is necessary** for these deterministic branches. If the lead chooses runtime evidence instead, capture only R3–R6 and R8, combining compatible steps and using outbound prompt/payload assertions rather than subjective generated prose. Never publish private runtime model identifiers in new artifacts. This uploaded matrix contains none.

Read-only audit: no source edits, pushes, comments, or real Cursor calls. All audit-created configuration and logs are under the requested scratch directory; test caches were disabled/redirected there. Worktree remained clean. The focused tests used scratch configuration copies of repository settings solely to redirect cache/temp writes. No full repository checks were run. Coverage was completed within the 45-minute budget.

FRICTION: none

VERDICT: INSUFFICIENT R3 different agent; R4 /compress retention; R5 failed-send retention; R6 repeated steers; R8 native-image carry
