codex - 💡(How to fix) Fix Codex Desktop macOS: side chat receives turns but is not persisted, then Fork fails with no rollout found [3 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openai/codex#22001Fetched 2026-05-11 03:21:18
View on GitHub
Comments
3
Participants
2
Timeline
7
Reactions
0
Author
Timeline (top)
labeled ×4commented ×3

Error Message

2026-05-10T05:52:15.417Z error [electron-message-handler] Conversation state not found conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 2026-05-10T05:52:15.420Z error [electron-message-handler] Conversation state not found conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 2026-05-10T07:09:29.115Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork 2026-05-10T07:09:33.839Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork 2026-05-10T07:09:34.602Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork I avoided attaching full logs, database dumps, or rollout files because they can include private project/thread context. The excerpts above are limited to method names, timestamps, ids, and error messages.

Root Cause

I am filing this separately because the visible failure here is immediate thread/fork failure from a side chat, and I was able to confirm the same local-state mismatch without dumping any message content.

Code Example

2026-05-10T05:52:15.417Z error [electron-message-handler] Conversation state not found conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282
2026-05-10T05:52:15.420Z error [electron-message-handler] Conversation state not found conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282
2026-05-10T05:52:15.422Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=thread/inject_items ... errorCode=null
2026-05-10T05:52:29.569Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=turn/start ... errorCode=null
2026-05-10T06:15:49.193Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=turn/start ... errorCode=null
2026-05-10T06:40:13.546Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=turn/start ... errorCode=null
2026-05-10T06:52:15.432Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=thread/unsubscribe ... errorCode=null
2026-05-10T07:09:29.114Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=thread/fork ... errorCode=-32600
2026-05-10T07:09:29.115Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork
2026-05-10T07:09:33.839Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork
2026-05-10T07:09:34.602Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork

---

sqlite3 ~/.codex/state_5.sqlite "SELECT COUNT(*) FROM threads WHERE id='019e1071-83e9-72e3-b7c6-6abb38f9c282';"
# 0

sqlite3 ~/.codex/state_5.sqlite "SELECT parent_thread_id, child_thread_id, status FROM thread_spawn_edges WHERE child_thread_id='019e1071-83e9-72e3-b7c6-6abb38f9c282' OR parent_thread_id='019e1071-83e9-72e3-b7c6-6abb38f9c282';"
# no rows

find ~/.codex/sessions/2026/05/10 -maxdepth 1 -name '*019e1071-83e9-72e3-b7c6-6abb38f9c282*' -print
# no files
RAW_BUFFERClick to expand / collapse

What version of the Codex App are you using?

Codex Desktop for macOS 26.506.31421 (2620)

What subscription do you have?

Pro

What platform is your computer?

  • Darwin 25.3.0
  • Apple Silicon / arm64

What issue are you seeing?

Forking a side chat in Codex Desktop for macOS fails with a Failed to fork chat toast. After checking local metadata and app logs, this looks like another instance of the side-chat persistence mismatch described in #20944, but on a newer macOS app build.

Related issues:

  • #20944
  • #20977

I am filing this separately because the visible failure here is immediate thread/fork failure from a side chat, and I was able to confirm the same local-state mismatch without dumping any message content.

For the failing side-chat conversation id 019e1071-83e9-72e3-b7c6-6abb38f9c282:

  • The app log first shows Conversation state not found for that id.
  • Immediately after, thread/inject_items succeeds for that same id.
  • Multiple later turn/start calls succeed for that same id.
  • The browser-use route is captured and later completed for that same id.
  • thread/unsubscribe succeeds for that same id.
  • Later, thread/fork fails three times for that same id with no rollout found for thread id ....
  • ~/.codex/state_5.sqlite has no row in threads for that id.
  • ~/.codex/state_5.sqlite has no matching parent or child row in thread_spawn_edges for that id.
  • ~/.codex/sessions/2026/05/10 has no rollout JSONL file matching that id.

So the side chat appears usable while it is active in the renderer, but it is never registered as a persisted thread and never gets a rollout file. Fork then calls thread/fork with that side-chat conversation id and fails because the app/server cannot find a rollout for it.

Steps to reproduce

I do not have a clean minimal repro yet, but this happened during normal Codex Desktop usage:

  1. Open an existing Codex Desktop conversation.
  2. Start a side chat from that conversation.
  3. Run work in the side chat.
  4. Use the Fork action from the side chat.
  5. The app shows Failed to fork chat.

Expected behavior

Either:

  • Side chats should be persisted before they can receive turns and before the Fork action is available, so thread/fork has a valid thread row and rollout path.

Or:

  • If side chats are intentionally ephemeral/non-forkable, the UI should not expose Fork for them and should explain that they cannot be promoted to regular chats.

Local evidence

Log excerpts from ~/Library/Logs/com.openai.codex/2026/05/10/...log, with no message content included:

2026-05-10T05:52:15.417Z error [electron-message-handler] Conversation state not found conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282
2026-05-10T05:52:15.420Z error [electron-message-handler] Conversation state not found conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282
2026-05-10T05:52:15.422Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=thread/inject_items ... errorCode=null
2026-05-10T05:52:29.569Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=turn/start ... errorCode=null
2026-05-10T06:15:49.193Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=turn/start ... errorCode=null
2026-05-10T06:40:13.546Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=turn/start ... errorCode=null
2026-05-10T06:52:15.432Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=thread/unsubscribe ... errorCode=null
2026-05-10T07:09:29.114Z info [AppServerConnection] response_routed ... conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... method=thread/fork ... errorCode=-32600
2026-05-10T07:09:29.115Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork
2026-05-10T07:09:33.839Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork
2026-05-10T07:09:34.602Z error [electron-message-handler] Request failed conversationId=019e1071-83e9-72e3-b7c6-6abb38f9c282 ... error={"code":-32600,"message":"no rollout found for thread id 019e1071-83e9-72e3-b7c6-6abb38f9c282"} ... method=thread/fork

Metadata checks:

sqlite3 ~/.codex/state_5.sqlite "SELECT COUNT(*) FROM threads WHERE id='019e1071-83e9-72e3-b7c6-6abb38f9c282';"
# 0

sqlite3 ~/.codex/state_5.sqlite "SELECT parent_thread_id, child_thread_id, status FROM thread_spawn_edges WHERE child_thread_id='019e1071-83e9-72e3-b7c6-6abb38f9c282' OR parent_thread_id='019e1071-83e9-72e3-b7c6-6abb38f9c282';"
# no rows

find ~/.codex/sessions/2026/05/10 -maxdepth 1 -name '*019e1071-83e9-72e3-b7c6-6abb38f9c282*' -print
# no files

I also saw several nearby Received turn/started for unknown conversation log entries for other conversation ids during the same app session, which may be related, but I have not traced those ids deeply.

Additional information

I avoided attaching full logs, database dumps, or rollout files because they can include private project/thread context. The excerpts above are limited to method names, timestamps, ids, and error messages.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Either:

  • Side chats should be persisted before they can receive turns and before the Fork action is available, so thread/fork has a valid thread row and rollout path.

Or:

  • If side chats are intentionally ephemeral/non-forkable, the UI should not expose Fork for them and should explain that they cannot be promoted to regular chats.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

codex - 💡(How to fix) Fix Codex Desktop macOS: side chat receives turns but is not persisted, then Fork fails with no rollout found [3 comments, 2 participants]