# Proof audit pass 2 — SUFFICIENT

Read-only evidence audit for [#18383](https://git.cafe/pingdotgg/t3code/pulls/18383), [GitHub mirror #18383](https://github.com/pingdotgg/t3code/pull/18383).

Reviewed head [222d071698](https://git.cafe/pingdotgg/t3code/commit/222d071698229a5413d17be49735bc56a5e1fa35) against [3cc31ed27c](https://git.cafe/pingdotgg/t3code/commit/3cc31ed27c8956b36cee35a50509fb7c6869592b). Original contribution [f4ef53f86a](https://github.com/saphid/t3code/commit/f4ef53f86a8c47a6bc6820e294700dac981313b6) is provenance, not the replay before source.

D default 5 s: SUFFICIENT. C configured 250 ms: SUFFICIENT. S cooperative default: SUFFICIENT. No production defect found within this proof audit. All three before/after pairs independently replayed successfully using real AcpSessionRuntime, real NodeServices child processes, and real stdio ACP terminal requests. No render paths changed; screenshot/diff/pixel deltas are inapplicable. This is functional process/protocol evidence.

## Source and evidence integrity

Both terminal-manager sources independently rebuilt from git show into this audit directory, byte-identical to supplied captures. Test capture matches committed head. Downloaded matrix matches matrix-required.md byte-for-byte. Every uploaded driver, peer, six transcript files, test log and timing file matches its retained local counterpart. See source-checks.txt for hashes. Full committed diff inspected: only terminal-manager production code and its focused tests changed. Runtime and stock mock source have no base/head diff. Checkout HEAD is the stated SHA and git status is clean before/after execution.

The audit replay uses the supplied final driver and peer with only /tmp/ev-18383 relocated to /tmp/to-18383-audit; source modules were independently reconstructed, not imported from the capture directory. Dependency resolution uses apps/server/node_modules. All conditions within each before/after pair are identical except terminal-manager source. D omits the option, C sets 250 millis directly on the manager; C does not establish a public adapter configuration setting. S installs its SIGTERM handler before READY and re-raises SIGTERM after removing the handler. D/C install ignore trap before READY and retain the same shell/sleep fixture. Readiness PIDs and descendants, not agent PIDs, are observed.

## Actual timing and process observations

All times below are milliseconds relative to driver kill dispatch. Request-arrival timestamps are separately included to expose transport overhead. Each tuple is kill request / wait request / kill response / wait response, including JSON-RPC IDs. Before D/C responses happen only AFTER labeled safety cleanup; they are not escalation success. Full UTC timestamps, actual ps output, all terminal requests/responses and release boundaries are in events.txt; every JSON line from all twelve transcripts was parsed.

| Set | Case | PIDs shell/node; descendants | ACP tuples (method request/response, ID, ms) | Process observations |
| --- | --- | --- | --- | --- |
| capture | before-D | 1430683; [1430684] | kill request id=3 +5.190; wait_for_exit request id=4 +5.190; wait_for_exit response id=4 +5468.937; kill response id=3 +5471.009 | 1430683 live +259.702; 1430684 live +327.625; 1430683 live +4532.894; 1430684 live +4554.057; 1430683 live +5419.065; 1430684 live +5454.825; SAFETY +5455.144 |
| capture | before-C | 1430797; [1430798] | kill request id=3 +6.739; wait_for_exit request id=4 +6.739; kill response id=3 +700.560; wait_for_exit response id=4 +706.955 | 1430797 live +131.067; 1430798 live +153.151; 1430797 live +657.363; 1430798 live +693.422; SAFETY +693.781 |
| capture | before-S | 1430831; [] | kill request id=4 +6.722; wait_for_exit request id=5 +6.722; wait_for_exit response id=5 +19.832; kill response id=4 +20.828 | 1430831 absent +116.378; 1430831 absent +619.453 |
| capture | after-D | 1431068; [1431070] | kill request id=3 +8.240; wait_for_exit request id=4 +8.240; wait_for_exit response id=4 +5028.362; kill response id=3 +5029.706 | 1431068 live +221.450; 1431070 live +238.225; 1431068 live +4520.509; 1431070 live +4535.407; 1431068 absent +5317.939; 1431070 absent +5334.343 |
| capture | after-C | 1431794; [1431795] | kill request id=3 +4.457; wait_for_exit request id=4 +7.253; wait_for_exit response id=4 +268.721; kill response id=3 +269.795 | 1431794 live +117.576; 1431795 live +135.139; 1431794 absent +622.956; 1431795 absent +644.202 |
| capture | after-S | 1431828; [] | kill request id=5 +6.531; wait_for_exit request id=6 +9.869; wait_for_exit response id=6 +17.471; kill response id=5 +18.445 | 1431828 absent +130.129; 1431828 absent +618.709 |
| independent replay | before-D | 1439115; [1439116] | kill request id=3 +5.057; wait_for_exit request id=4 +5.057; wait_for_exit response id=4 +5377.504; kill response id=3 +5379.173 | 1439115 live +215.899; 1439116 live +231.228; 1439115 live +4516.723; 1439116 live +4537.088; 1439115 live +5327.735; 1439116 live +5363.906; SAFETY +5364.068 |
| independent replay | before-C | 1440544; [1440545] | kill request id=3 +8.129; wait_for_exit request id=4 +8.129; wait_for_exit response id=4 +663.179; kill response id=3 +664.593 | 1440544 live +118.797; 1440545 live +136.305; 1440544 live +635.789; 1440545 live +656.104; SAFETY +656.343 |
| independent replay | before-S | 1441331; [] | kill request id=5 +6.242; wait_for_exit request id=6 +6.242; wait_for_exit response id=6 +19.199; kill response id=5 +20.235 | 1441331 absent +119.231; 1441331 absent +621.578 |
| independent replay | after-D | 1441375; [1441376] | kill request id=3 +4.445; wait_for_exit request id=4 +4.445; wait_for_exit response id=4 +5021.266; kill response id=3 +5022.319 | 1441375 live +221.112; 1441376 live +242.146; 1441375 live +4532.277; 1441376 live +4556.442; 1441375 absent +5325.785; 1441376 absent +5356.605 |
| independent replay | after-C | 1442236; [1442237] | kill request id=3 +5.625; wait_for_exit request id=4 +5.625; wait_for_exit response id=4 +277.055; kill response id=3 +277.996 | 1442236 live +119.568; 1442237 live +137.562; 1442236 absent +636.551; 1442237 absent +659.793 |
| independent replay | after-S | 1442625; [] | kill request id=8 +7.263; wait_for_exit request id=9 +7.263; wait_for_exit response id=9 +32.372; kill response id=8 +33.058 | 1442625 absent +138.734; 1442625 absent +689.746 |

D independent after: wait SIGKILL at 5021.266 ms, kill {} at 5022.319 ms; relative to actual incoming kill, 5016.821 / 5017.874 ms. Both PIDs live through 4556.442 ms and absent by 5356.605 ms. Before PIDs live through 5363.906 ms and both requests pending until safety at 5364.068 ms.

C independent after: wait SIGKILL at 277.055 ms, kill {} at 277.996 ms; relative to actual incoming kill, 271.430 / 272.371 ms. Both PIDs live through 137.562 ms and absent by 659.793 ms. Before both live through 656.104 ms and both requests pending until safety at 656.343 ms.

S independent: before wait SIGTERM 19.199 ms and kill {} 20.235 ms; after wait SIGTERM 32.372 ms and kill {} 33.058 ms. Response deltas +13.173 / +12.823 ms are ordinary wall-clock variation; both end promptly, well before 5 s. No safety signals in S or any after run. No finite speedup is claimed for D/C: before requires external cleanup, so subtracting cleanup-induced response times would be misleading.

All twelve runs retain READY in final output, assert output.exitStatus equals wait_for_exit, and release only after PID observations and output assertions. After D/C report SIGKILL; S reports SIGTERM. Output retention, successful kill {}, and wait/output agreement remain functionally equivalent, while ignoring processes now terminate within configured/default grace.

## Boundary and tests

The final peer's _test/terminal-proof forks agent.client.extRequest and immediately returns an operation ID. The separate _test/terminal-result handler reports stored completion. This frees the read loop to receive the nested terminal response; raw logs confirm actual incoming terminal/create, output, kill, wait_for_exit, release and matching outgoing responses. Polling is only a bounded scratch control bridge; it does not emulate kill, handle exit, or manufacture ACP responses. No synchronous nested request deadlock remains in these runs.

Production adapter wiring inspected at packages/provider-acp/src/server/adapter.ts:5896: create policy guard then manager.create, and output/wait/kill/release direct real manager methods. The standalone runtime intentionally bypasses adapter startup/policy guards; this is the requested matrix boundary, not a full adapter/server smoke test. Linux/POSIX only; Windows behavior not established here.

Focused tests rerun: vp test run packages/provider-acp/src/server/clientTerminals.test.ts — 1 file, 13/13 passed, 10.44 s. Original 13/13 / 12.61 s claim consistent with committed test source and independent rerun. Deterministic default/configured cases prove live/pending at deadline minus 1 ms and completion at deadline with simulated handles; the ready real-process regression and ACP replay establish actual OS behavior. No repo-wide checks run.

## Cleanup and FRICTION

Audit scratch path: /tmp/to-18383-audit (including node_modules symlink pointing to /home/ubuntu/wt/pr-18383/apps/server/node_modules). Delete only /tmp/to-18383-audit when its uploaded bundle is no longer needed; it contains no source fixture state. Preserve /tmp/ev-18383 and its original exploratory fixture. No fixture directory, production file, git index/ref, server, browser, database, push, PR comment, or watch was changed. Required app PR association was registered. Replay before D/C safety kills target only PIDs captured from READY/parent relationships; after and S cleanup is normal terminal/release and disposeAll after observation. Exact process cleanup observations appended below.

FRICTION: initial supplied synchronous bridge deadlocked; final asynchronous bridge inspected and successfully replayed. This audit did not touch the initial exploratory fixture or its natural expiry. urllib and web reader received HTTP 403/inaccessible on artifact retrieval; curl fetched the matrix and all uploads successfully and byte comparison passed. A first analyzer invocation raced a still-running replay and saw no kill dispatch; rerun after completion succeeded. No proof limitation results. Wall-clock ps sampling includes execution overhead; deterministic tests supply exact deadlines. Capture row C uses allowed 250 ms instead of preferred 1 s and proves completion well before 5 s.

Harness: Codex in T3 Code, gpt-6.1-sol.

Captured replay PIDs final ps (exit 1):
```text
    PID    PPID STAT COMMAND
```
