# PR #23559 proof audit, pass 2

**Verdict: SUFFICIENT**

Before = 8d3b061121, after = 2d0622b17b (fix). Head c990ba1b46 adds only the dev driver script.
Unit test names: T1, T2[s], and T3[x] are defined in the pass-1 matrix (`apps/server/src/orchestration-v2/CommandPolicy.test.ts`).

## Final row table

| # | Row | Expected before → after | Evidence | Status |
|---|---|---|---|---|
| 1 | steer, run `preparing` | rejected → queue_after_active | [runtime-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/de9fe9261b16a421/runtime-before.json) (900002: `OrchestrationV2DispatchCommandError`) / [runtime-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b01cc8e030068b91/runtime-after.json) (910002: Success); T2[preparing] | covered-runtime (rows 1–3 together; the transcript records no exact gap substate) + covered-unit for each row |
| 2 | steer, run `starting` | rejected → queue_after_active | same transcripts; T2[starting] | covered-runtime (shared with rows 1 and 3) + covered-unit |
| 3 | steer, running, no provider turn | rejected → queue_after_active | same transcripts; T3["has not started"] | covered-runtime (shared with rows 1 and 2) + covered-unit |
| 4 | steer, provider turn `pending` | rejected → queue_after_active | T3["is pending"] | covered-unit (narrow race) |
| 5 | steer, provider turn `completed`, run active | rejected → queue_after_active | T3["has completed"] | covered-unit (tight timing) |
| 6 | steer, running turn from previous attempt | rejected → queue_after_active | T3["belongs to a previous attempt"] | covered-unit (needs synthetic state) |
| 7 | steer, running matching turn (control) | steer_active → steer_active | [r7-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5ee459142f4189ac/r7-before.json), [r7-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a6c0e9f7cc984c1/r7-after.json), r7-after-rebuild.json (this pass); T1 3rd assert | covered-runtime. Both builds: provider turn `running` at dispatch, ok, inputIntent `steer` in run 1, 1 run, `ROW7_STEERED` |
| 8 | restart, gap states (control) | restart_active → restart_active | T2[*] / T3[*] restart asserts | covered-unit |
| 9 | restart, running matching turn (control) | unchanged | [r9-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4e086f5c8885ba04/r9-before.json), [r9-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eae3216ecdb83c87/r9-after.json) | covered-runtime (Claude only): both builds reject with "Claude cannot redirect an active run" (UserFacingErrors capability message), no second run, `ROW9_FIRST_DONE`. Identical behaviour; no unit fixture (pre-existing gap, non-blocking) |
| 10 | auto, gap states | queue_after_active (unchanged) | T2[*] / T3[*] auto asserts | covered-unit |
| 11 | auto, running matching turn | per capability (unchanged) | T1 asserts 2, 4, 5 | covered-unit |
| 12 | no active run | start_immediately | runtime-before 900001 / runtime-after 910001: Success; T1 1st assert | covered-runtime + covered-unit (auto only) |

No row is unverified.

## SHA check
- runtime-before `base: 8d3b061121` ✔; runtime-after `head: 2d0622b17b` ✔
- r7-before, r9-before: serverSha 8d3b061121fe… with clean tree ✔
- r7-after, r9-after: serverSha 2d0622b17b4c… with clean tree ✔
- r7-after-rebuild: serverSha c990ba1b4649… with clean tree. `git diff --stat 2d0622b17b c990ba1b46` touches only `apps/server/scripts/verify-steer-running-turn.ts` (+370), so the server code is identical ✔

## Rebuild (row 7, after build, at c990ba1b46, port 47431, isolated /tmp home)
Exit 0. Provider turn `running` at dispatch. Dispatch response `{ok: true, sequence: 24}`. User messages `[turn_start, steer]`, both in run 1. deliveredIntoActiveRun=true, runCount=1, run `completed`, assistant marker `ROW7_STEERED`. **Matches r7-after.json.** The spawned server PID 1677009 and its process group were gone afterwards, with no listener on 47431. The temporary home and project were deleted.

## Driver review (`apps/server/scripts/verify-steer-running-turn.ts`)
- It asserts that `--home` is not under `~/.t3` and strips `T3CODE_*` env vars from the server env.
- It kills only its own spawned child (SIGTERM, then SIGKILL) and then that child's detached process group. It does no pattern kills.
- It is not shipped: `apps/server/package.json` `files: ["dist"]`, there is no package script, and nothing else references it. It sits next to `verify-background-live.ts`.
