Codex App crashes when opening Archived Conversations with API key auth
What version of the Codex App are you using?
26.623.141536 (bundle version 4753)
What subscription do you have?
API key authentication only, not ChatGPT auth.
What platform is your computer?
Darwin 25.5.0 arm64 arm
What issue are you seeing?
Opening Settings -> Archived conversations crashes the app route with the React error boundary:
Cannot read properties of undefined (reading 'title')
The component stack points at DataControlsSettings in the data-controls bundle. Around the same flow, the app also attempts a ChatGPT backend request for archived tasks:
GET https://chatgpt.com/backend-api/wham/tasks/list?limit=20&task_filter=archived
For API-key auth, there is no ChatGPT backend token attached, so this request can return 401. The UI should not crash in this mode.
What steps can reproduce the bug?
- Use Codex App with API key authentication only.
- Open Settings.
- Click Archived conversations.
- Observe the route crash/error boundary.
What is the expected behavior?
The Archived conversations page should render local archived conversations, or an empty/error state, without crashing. In API-key auth mode, ChatGPT-only archived task fetching should either be skipped or its 401/403 result should be fully isolated from the local archived conversation UI.
Additional information
A local investigation suggests this is not caused by malformed local archived thread records:
- The app-server
thread/listresponse completes successfully immediately before the React error boundary fires. - Local archived thread storage has non-null/non-empty title/preview fields.
- The v2
ThreadAPI shape exposesnameandpreview, nottitle; the frontend archived page normalizes local threads into its own{ title }entry shape. - The archived cloud task query in the current bundle appears to catch 401/403/404 and return an empty page, so the 401 itself should not be enough to crash.
The likely issue is a frontend data-shape/cache assumption in the archived conversations page or shared thread list atoms. The current bundle contains unsafe title reads in the archived list dependency graph, including:
e.title.localeCompare(t.title)
and a shared local thread atom comparison similar to:
t.conversation.title === m.title
If a stale or malformed runtime/cache entry reaches either path, the whole settings route crashes instead of defensively rebuilding/filtering the entry.