Start a fresh Codex thread when the saved one cannot be resumed
A Codex session whose saved thread is gone no longer stays stuck; the next message starts a new thread.
When Codex refused to resume a session’s saved thread (for example because its transcript was gone), the turn was recorded as uncertain and every later turn tried the same dead thread and failed the same way.
The turn now fails clearly as protocol/thread_unavailable, which is not retryable, and the session forgets that thread. Your next message starts a fresh Codex thread and runs. The failed turn is deliberately not retried on a new thread by itself, so you can see the context was lost.
Changes
runtime/failure.tsaddsTHREAD_UNAVAILABLE;runtime/codex.tsends the turn as failed whenthread/resumeorthread/forkis refused.NativeSessionStore.forget()clears only that provider’snativeThreadId.
Evidence
No screenshot: Backend change; the app shows its existing protocol-failure text.