Codex app crashes when opening pinned recovered side/review threads after restart/update
Summary
After a Codex app update/restart, some active threads and side chats became hard to find. One side/review thread was still readable by id, but it did not show up in search or the sidebar. When I tried to recover it by pinning/forking it, clicking the pinned entry crashed the Codex app.
There seem to be two related problems:
- A local side/review thread can become orphaned: readable by id, but missing from sidebar/search.
- Pinning or forking that recovered thread can create a sidebar entry that crashes the app when clicked.
Impact
- It looks like work is lost even though the local thread still exists.
- The user cannot safely open some recovered/pinned threads.
- Side chats are difficult to recover after app restart/update.
- A bad pinned entry can become a repeat crash trigger.
What happened
Observed while recovering project work after a Codex update.
Relevant ids:
- Parent visible thread:
019e985a-cc21-7f13-af7c-516efa6fc47a - Orphaned side/review thread:
019e98ee-b189-71d2-8892-12a0964190f3 - Fork created from that side/review thread:
019e9905-a22f-7e72-b433-d03067cfd5d2 - Earlier pinned candidate, later unpinned:
019e176b-2f25-7a10-a379-ecfa2325e6b1
The side/review thread existed locally and was not archived:
id: 019e98ee-b189-71d2-8892-12a0964190f3
archived: 0
created: 2026-06-05 13:57:20
updated: 2026-06-05 14:18:31
It could be read directly by id, but search did not find it:
codex_app.list_threads query "019e98ee-b189-71d2-8892-12a0964190f3" -> []
codex_app.list_threads query "Codex agent history" -> []
Renaming it failed:
No AppServerManager registered for conversationId: 019e98ee-b189-71d2-8892-12a0964190f3
Pinning it still succeeded:
set_thread_pinned 019e98ee-b189-71d2-8892-12a0964190f3 pinned=true -> success
Forking it also succeeded:
sourceThreadId: 019e98ee-b189-71d2-8892-12a0964190f3
threadId: 019e9905-a22f-7e72-b433-d03067cfd5d2
environment: same-directory
The fork could be renamed and pinned:
set_thread_title 019e9905-a22f-7e72-b433-d03067cfd5d2 "Recovered side review fork" -> success
set_thread_pinned 019e9905-a22f-7e72-b433-d03067cfd5d2 pinned=true -> success
After that, clicking the pinned entries crashed the Codex app. I unpinned these ids as a workaround:
019e9905-a22f-7e72-b433-d03067cfd5d2
019e98ee-b189-71d2-8892-12a0964190f3
019e985a-cc21-7f13-af7c-516efa6fc47a
019e176b-2f25-7a10-a379-ecfa2325e6b1
Expected behavior
- If a thread exists locally and is not archived, it should either show up in search/sidebar or have a clear recovery path.
- If the app cannot load a thread because there is no AppServerManager for it, pinning should not silently succeed.
- Clicking a pinned thread should never crash the app.
- A forked side/review thread should be visible and safe to open.
- Side/review threads should remain connected to their parent thread, or at least be recoverable after restart/update.
Actual behavior
- Direct id read worked, but sidebar/search could not find the thread.
- Rename failed with
No AppServerManager registered. - Pinning still succeeded.
- Clicking the pinned recovered/forked thread crashed the app.
Suggested fix areas
- Validate that a thread is loadable before allowing it to be pinned.
- Make pinned-thread navigation handle missing/unregistered app-server conversations safely.
- Reconcile local thread rows, rollout files, archived state, and app-server registrations during startup.
- Keep side/review threads linked to their parent in a way the UI can recover after restart.
- Make thread search find readable local threads by exact id.
Workaround
I unpinned the affected entries. Forking the orphaned side thread did make a visible thread, but pinning/opening it from the pinned area still appeared unsafe.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗