Skip to content

[Desktop][Windows] Thread-control send/archive can hang without an observable result #41565

Open

Description

@Stillm007

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_thread
  • send_message_to_thread
  • set_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

  1. Start several read_thread calls concurrently.
  2. Observe that the control call can remain pending for several minutes with no structured result.
  3. Afterward, call send_message_to_thread or set_thread_archived for a different thread.
  4. Those calls can also remain pending beyond a bounded wait, with no confirmation that the request reached the provider.
  5. 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

  1. Serialize or otherwise isolate app thread-control operations so concurrent reads cannot block later mutation requests.
  2. Return an operationId immediately for send/archive operations.
  3. Add durable status polling with a terminal result and explicit thread lifecycle state, including archived: true/false.
  4. Require/support idempotency keys for send/archive operations.
  5. On timeout, return a structured UNKNOWN — verification required response rather than hanging.
  6. 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

  1. added
    bugSomething isn't working
    appIssues related to the Codex desktop app
    windows-osIssues related to Codex on Windows systems
    tool-callsIssues related to tool calling
    sessionIssues involving session (thread) management, resuming, forking, naming, archiving
    on Aug 29, 2026
  2. github-actions commented on Aug 29, 2026

    @github-actions
    Contributor

    Potential duplicates detected. Please review them and close your issue if it is a duplicate.

    Powered by Codex Action

  3. Stillm007 commented on Aug 29, 2026

    @Stillm007
    Author

    Follow-up reproduction after the initial report:

    A one-at-a-time recovery sequence showed that the failure is intermittent, not cleared:

    1. list_threads returned in about one second.
    2. read_thread for an existing receiving thread returned in under two seconds.
    3. One internal FYI handoff completed in about three seconds, and immediate receiver readback found the exact handoff once.
    4. set_thread_archived for one separately approved source returned a structured generic error in about half a second; no archive success was claimed.
    5. The next fresh list_threads verification 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbugSomething isn't workingsessionIssues involving session (thread) management, resuming, forking, naming, archivingtool-callsIssues related to tool callingwindows-osIssues related to Codex on Windows systems

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions