Before/after proof for [#20134](https://github.com/pingdotgg/t3code/pull/20134)

Integrated head: [c9fea7e](https://github.com/okbexx/t3code/commit/c9fea7efd0e735b29dbc5eb054cc13bc79890989)
Base: [1451e7c](https://github.com/pingdotgg/t3code/commit/1451e7cb23034d29774338608368a15d8845df36)
Original contributor head: [8c60ec3](https://github.com/okbexx/t3code/commit/8c60ec367d7395433da8ab62a12bd58707f46a52)

Deterministic SDK frames exercise the real Claude adapter. SQL and memory projection tests prove attention persistence and automatic-settlement eligibility. This does not claim an authenticated live Claude classifier or rule denial.

Tests before and after:

- Main baseline: 296 cases (286 adapter, 10 settlement). Contributor after merging main: 303 (291 + 12). Takeover: 301 (289 + 12). Added cases reduced from seven to five; all main coverage preserved. Removed duplicate mode, formatting and replay assertions, and narrowed the redundant settlement matrix.
- Five target cases fail against main production: foreground SDK notice, held-wake ownership in two modes, SQL attention persistence, and the memory settlement hold. T3-handled decline/question controls already pass on main. Production source was restored byte for byte after this check.
- Before the steering follow-up, 388/388 cases across 40 files passed in an independent combined run on cf0b4c4: 301 adapter/settlement and 87 persistence/dependent cases. The second review caught five migration-manifest expectation failures after adding migration 065; all five are fixed. One recorded Claude user-decline fixture also passes; 143 other replay cases were skipped.
- Contracts and server typechecks, scoped lint, formatting and diff checks pass. One existing unused adapter layer warning remains.

Four independent review rounds used Claude Opus 5.5 and GPT-6 Sol. Earlier rounds found and fixed the settlement query regression, unclear documentation and stale migration test expectations. A configured bot then found that active steering lost a segment’s permission denials; the fourth whole-PR round from both reviewers confirmed the fix and found no code blockers.

Steering follow-up on c9fea7e:

- Extended the existing four-row steering test; no cases added. Against cf0b4c4 production: 287 passed, two expected failures for missing notices after active steering.
- The fix stores denials in a bounded per-turn map before the steering early return. Repeated tool IDs count once, and the final T3-handled denial filter still applies.
- On c9fea7e, all 301 adapter/settlement tests pass. Both steering abort reasons retain the earlier-only Write denial, deduplicate repeated Bash denials and emit one notice with the raw reason before the terminal event. No early notice is emitted.
- Server typecheck, scoped lint, format and diff checks pass. The 87 persistence/dependent cases and their code are unchanged; they were not rerun for this adapter-only follow-up.
- Client notice formatting and wire representation are unchanged. The previous isolated fixture proves presentation only; no live steering or settlement claim is inferred from it.

Performance:

- First review found that attention lookup scanned the latest run's turn-item payloads.
- Migration 065 adds a partial index on (thread_id, run_id) for system notices with needsAttention=true. The actual query plan uses this index.
- Alternating warm samples of the complete query on an independent scratch copy: median 20.101 ms before, 5.760 ms after; identical 169 result rows. This does not measure contention in the running server.
- Independent main-versus-final measurements: 4.74 ms versus 5.22 ms warm median, with identical 169 rows.
- Exact migration SQL applied twice successfully. Existing flagged rows were indexed, and changing the flag to false or omitting it restored candidate eligibility. These mutations occurred only on a scratch copy, inside a rolled-back transaction.

Linux client and API:

- Captured the notice emitted by the real adapter regression (one passed, 288 skipped), then seeded its content as an explicit visual fixture in the worktree's isolated .t3 while the server was stopped. Its completed run and user row are fixtures. Backend claims above come from tests.
- Restarted the isolated server on 14774/web 6734 and paired the collaborative browser. The bounded thread API with orchestration protocol 2 returns HTTP 200 and one notice with needsAttention=true:

  Claude denied 2 actions (Bash, Write): Auto policy blocked this command: it writes outside the workspace.

- The browser accessibility tree contains the full notice and raw reason under Activity. The client loads the completed run.
- A screenshot was captured and inspected, but the headless renderer draws all text as blank glyphs despite normal font styles. The image is unusable and is not published. API, accessibility and test evidence substitute for it; visual approval is not claimed.

Not verified: an authenticated live Claude CLI classifier/rule denial, live steering/held-wake timing, macOS, Windows, Electron desktop, iOS or Android. No model was invoked for the fixture. No merge performed.

Migration 065 must be renumbered if main introduces another 065 before landing. CI on the pushed head is a separate gate; no readiness claim is made before it passes.
