I hit this today on T3 Code desktop 0.1.0 (Beta), macOS 27.0.1 arm64, Claude Agent SDK / Opus 5.5. Same recovery loop, but it started with a SQLite lock rather than an MCP registration timeout. It connects this report with #15542.
The thread showed a provider error, but its Claude process and subagents were still working. Sending another message failed immediately. /compact failed too. I had other threads running, so restarting the whole app wasn't a useful way out.
Here's what we found in the local trace and database:
- At 19:34:17–19:34:22 UTC on October 20,
orchestrationV2.EventSink.writefailed after about 5.18 seconds withLockTimeoutError→database is locked. We haven't established what held the lock. - App run 236 became
failed, while its provider turn stayedrunning. New runs failed withClaude provider turn …ordinal…236… is still active. - Subsequent recovery logged
Provider resume failed; attempting a fresh native session, withreason: uncertain_history_delivery. T3 replaced the original native-session reference with a fresh one and left full-thread handoffs ready to deliver. - After interrupting the stuck turn, the next message failed with
Insufficient context allowance for the provider handoff. /compactthen completed withNot enough messages to compact.It was acting on the empty replacement session. Sending another message brought back the context-allowance error.
The original native conversation was still on disk. Its last recorded usage was 307,706 / 1,000,000 tokens. It hadn't run out of context.
We recovered this one thread without restarting T3: backed up its state, interrupted the orphaned turn through T3's command API, detached its provider session, then repaired the affected projection rows to point back to the original native conversation, superseded the two unused full-thread handoffs, and reconciled the interrupted provider turn. A diagnostic message then got a normal answer. The T3 server PID stayed the same. This stopped the thread's two remaining subagents; other chats kept running.
That was a one-off repair, not a workaround I'd want people to have to repeat. The app should be able to stop the orphaned turn and resume the existing conversation. If recovery creates an empty session, telling the user to compact it just sends them in circles.
I don't have a deterministic reproduction, and I haven't tested a newer build. The sequence above is from this incident. Conversation contents, local paths and session IDs are omitted.