# Native Claude stall and recovery: real isolated server evidence

No browser, test runner, repository edits, commits, pushes, merges, watches or forge writes were performed by this evidence task. The real source server used only /tmp/issue-24842-runtime/home, never the live T3 database. The conversation data was synthetic.

## Provenance

Stall server: [3e5eaa4d1a](https://git.cafe/pingdotgg/t3code/commit/3e5eaa4d1a0979fa2e0d1e96ebe30c0c643c8021); clean launch diff SHA-256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (0 bytes).
Recovery server: [d5f70eefb9](https://git.cafe/pingdotgg/t3code/commit/d5f70eefb9f607dedb1c55170994021334e9468f); restarted after failure persisted. Final HEAD observed: [d5f70eefb9](https://git.cafe/pingdotgg/t3code/commit/d5f70eefb9f607dedb1c55170994021334e9468f). Clean recovery launch diff SHA-256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (0 bytes).
Final patch versus [264969317c](https://git.cafe/pingdotgg/t3code/commit/264969317c): SHA-256 0ed9c7e0ce3f6a66991a91ded2463fa13acb5ebb63a1ee2ef0286659889c1005, 78897 bytes.
Adapter equivalence after inlining the failure-code constant: True; normalized SHA-256 ffd6612224717e75301a0cac05da01fec30bd57cbc2040cd16b309e3fd49bae6. This full-adapter equivalence comparison is against cleanup commit [8892c55d28](https://git.cafe/pingdotgg/t3code/commit/8892c55d28). The final recovery commit additionally cancels the watchdog before Stop and guards Stop settlement by active-turn ownership. The recovery server has the service-side history stall detector removed.
Final stall-watchdog section equivalent: True; SHA-256 4969748dbff728d0e3183a720cefd94f1e26253421145cff3096185710137dba. Final adapter SHA-256 ab7ecd74a7424ea2c82343930cd717773dc36947ae3fb3adab69c2542326affd.

Launch source file SHA-256:

- apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts: d1ee98c0d8543197dba99d8af91c30df53b18434da62f8deed785500ad4eea77
- apps/server/src/orchestration-v2/ProviderTurnStartService.ts: e6f71025d6a38209f1d74aea849c150a78818e1d68cf7dd50be4135d35aadd74
- packages/provider-core/src/server/failure.ts: abfb58db3686528a25d9632e2ecafeca1c9d86763b44dea37d0f70b71991631a

## Runtime transcript (UTC)

- 2026-10-25T23:40:58.183Z spawned {"harnessPid": 1448534, "serverPid": 1448601, "isolated": true}
- 2026-10-25T23:41:17.787Z model_upstream_response {"status": 200}
- 2026-10-25T23:41:18.536Z model_upstream_response {"status": 200}
- 2026-10-25T23:41:21.092Z model_request_held {}
- 2026-10-25T23:47:16.755Z held_request_closed {}
- 2026-10-25T23:47:17.530Z model_request_held {}
- 2026-10-25T23:51:23.372Z held_request_closed {}
- 2026-10-25T23:51:34.049Z server_exit {"code": 130, "signal": null}
- 2026-10-25T23:51:34.307Z spawned {"harnessPid": 1468277, "serverPid": 1468316, "isolated": true}
- 2026-10-25T23:52:02.621Z model_upstream_response {"status": 200}
- 2026-10-25T23:52:03.315Z model_upstream_response {"status": 200}
- 2026-10-25T23:52:19.523Z server_exit {"code": 130, "signal": null}
- Persisted run 1: status=completed; startedAt=2026-10-25T23:41:15.211Z; completedAt=2026-10-25T23:41:18.627Z.
  Assistant: READY
- Persisted run 2: status=failed; startedAt=2026-10-25T23:41:20.934Z; completedAt=2026-10-25T23:51:21.075Z.
- Persisted run 3: status=completed; startedAt=2026-10-25T23:52:00.295Z; completedAt=2026-10-25T23:52:03.498Z.
  Assistant: ORCHID
Persisted stall failure: {"class": "transport_error", "message": "Claude made no progress for ten minutes. Send again to retry.", "code": "native_session_stalled", "retryable": true}

Native session reference changed after restart: True. Native identifiers omitted.
Recovery handoff: strategy=full_thread_summary; status=ready; delivery metadata omitted from the RPC projection; no inline/injected delivery claim is made.

## Limits and friction

This demonstrates one held native turn (including its client retry), the real ten-minute native_session_stalled path, and a healthy fresh-session/full_thread_summary recovery after a server restart. It does not reproduce large-context compaction or hung Stop; those require separate deterministic test evidence.
The native client closed its first held request after roughly six minutes and retried; the proxy also held that retry. No model response bytes were delivered during the hold.
Driver friction: one projection RPC exceeded its 30-second observation timeout near the deadline. The server and held request stayed alive; a subsequent direct RPC captured the persisted failure before restart. Preflight friction: initial fixture driver name was corrected from claude to claudeAgent; that server performed no model run and was stopped. First timed-driver invocation raced server startup (ECONNREFUSED); rerun after listening succeeded. The healthy retry had a restart gate; the observation timeout ended the initial driver before that gate was reached. Recovery ran separately after restart on the final commit.

Cleanup (PIDs captured at spawn):

Preflight PIDs 1438196 (harness) and 1438210 (server) were also confirmed exited before the timed run.

cleanup-stall.json: {"harness": {"pid": 1448534, "alive": false}, "server": {"pid": 1448601, "alive": false}}
cleanup.json: {"harness": {"pid": 1468277, "alive": false}, "server": {"pid": 1468316, "alive": false}}

All companion scripts are included in repro-scripts.tar.gz. Private logs, auth, homes, projections and patches are excluded. Published with the ghdrop skill.
