openai / openai/codex

[app][macOS][26.810.41047] Realtime voice leaves an orphan thread that cannot be opened, archived, or deleted

Open
#38,965 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug session
Dominant language
Rust
Stars
125k
Forks
19.5k
PR merge metrics
PR metrics pending

Description

App version

ChatGPT/Codex Desktop 26.810.41047 (build 6570)

Subscription

ChatGPT Pro

Platform

macOS 26.4.1 (25E253), Apple Silicon arm64

Issue

A realtime voice conversation left a visible orphan entry in the Codex task sidebar. The entry cannot be opened, archived, or deleted.

Opening it shows:

Failed to resume conversation
failed to resolve rollout path `<CODEX_HOME>/sessions/2026/08/14/rollout-...jsonl`: file does not exist

Local inspection confirms an inconsistent state:

  • no matching rollout exists under sessions/ or archived_sessions/;
  • no matching row exists in state_5.sqlite.threads;
  • the app's global UI state still contains the thread ID in the projectless-thread list, permission state, thread-reference capability, and output-directory map;
  • the desktop logs repeatedly report failureReason=rollout_not_found and thread not loaded;
  • removing those stale UI references while the app is running does not work because the app writes them back.

Steps to reproduce

  1. Start a new realtime voice conversation in Codex Desktop.
  2. End or leave the voice conversation.
  3. Observe that the voice-created task remains in the sidebar.
  4. Try to open, archive, or delete the task.

The exact creation condition may be intermittent. Multiple realtime voice conversations have shown similar cleanup problems.

Actual behavior

The sidebar retains a task whose backing rollout and database record do not exist. Selecting it repeatedly attempts hydration and shows a recovery error. Because the thread cannot be loaded, normal archive/delete controls cannot clean it up.

Expected behavior

Realtime voice startup and shutdown should be transactional:

  • materialize the thread, database row, and rollout before exposing it as a normal task; or
  • if creation or shutdown fails, remove all provisional UI/index state;
  • when hydration detects rollout_not_found, offer a safe "Remove stale entry" action rather than leaving an undeletable sidebar item.

Related issue

This appears related to #35252, which reports failed cleanup of an unmaterialized provisional realtime voice thread on Windows. This report covers a macOS variant where the provisional entry survives as an orphan after both the rollout and database row are absent.

Privacy

The public report intentionally omits the account ID, full local username/path, conversation contents, exact thread ID, and contact email. These can be provided privately to OpenAI Support if required.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the intermittent realtime voice lifecycle and tracing how the thread is written to global UI state, state_5.sqlite.threads, and the sessions or archived_sessions paths. Compare the macOS behavior with related issue #35252 and inspect handling of rollout_not_found; done means failed voice creation or shutdown cannot leave an undeletable sidebar entry and stale entries can be safely removed.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, rust
Domain
desktop
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.