Repository navigation
[Desktop][Windows] Thread-control send/archive can hang without an observable result #41565
Description
What version of the Codex App are you using?
Codex Desktop for Windows OpenAI.Codex 26.818.5345.0 (Microsoft Store package).
What platform is your computer?
Windows desktop.
What issue are you seeing?
The Codex Desktop thread-control tools can hang without returning a result, leaving it impossible to tell whether an operation applied:
read_threadsend_message_to_threadset_thread_archived
This is a data-safety problem for session cleanup: an archive or handoff must be treated as unknown when the call never acknowledges, so users cannot safely retry or move to the next source.
Reproduction observed
- Start several
read_threadcalls concurrently. - Observe that the control call can remain pending for several minutes with no structured result.
- Afterward, call
send_message_to_threadorset_thread_archivedfor a different thread. - Those calls can also remain pending beyond a bounded wait, with no confirmation that the request reached the provider.
- A later single read may succeed quickly, so the failure is intermittent rather than a total desktop-app outage.
The calls were stopped after bounded waits. No completion result or provider-state readback was returned. The send therefore remained unproven, and the archive state remained unknown.
Expected behavior
Every thread-control operation should either:
- return a bounded, structured success/error result; or
- return an operation ID immediately and expose durable status polling until a terminal state.
An unacknowledged operation must not leave callers unable to determine whether it applied.
Requested repair
- Serialize or otherwise isolate app thread-control operations so concurrent reads cannot block later mutation requests.
- Return an
operationIdimmediately for send/archive operations. - Add durable status polling with a terminal result and explicit thread lifecycle state, including
archived: true/false. - Require/support idempotency keys for send/archive operations.
- On timeout, return a structured
UNKNOWN — verification requiredresponse rather than hanging. - Add regression coverage for concurrent reads followed by send/archive, an injected delayed acknowledgement, and recovery without duplicate message or lost archive state.
The existing thread-handoff operation/status pattern is a useful model for this interface.
Safety workaround
Until this is fixed: persist a local recovery card before each operation, allow one thread-control operation at a time, stop after a short bound, do not blindly retry, and require both receiver readback and archive-state readback before calling a cleanup result complete.
No transcripts, task identifiers, account data, credentials, or local filesystem paths are included here.
Activity
github-actions commentedon Aug 29, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Stillm007 commentedon Aug 29, 2026
Follow-up reproduction after the initial report:
A one-at-a-time recovery sequence showed that the failure is intermittent, not cleared:
list_threadsreturned in about one second.read_threadfor an existing receiving thread returned in under two seconds.set_thread_archivedfor one separately approved source returned a structured generic error in about half a second; no archive success was claimed.list_threadsverification exceeded a 45-second safety bound and was stopped.No retry or further mutation followed. This demonstrates that a successful sequential send/read does not prove archive or list reliability, and reinforces the need for independent operation status plus explicit thread state rather than treating a returned tool invocation as a completed provider transaction.
No transcript content, task IDs, local paths, account data, or credentials are included.