Codex Desktop Windows 26.616: local project threads appear, but opening one marks cwd missing and collapses project sidebar to No chats
What version of the Codex App are you using?
26.616.4196.0
What subscription do you have?
ChatGPT Plus
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
Windows 11 Pro, Version 25H2, OS build 26200.8655
---
What issue are you seeing?
Codex Desktop on Windows 26.616.4196.0 initially shows existing local project threads under saved local project groups. After a short refresh, affected local project groups collapse to No chats.
This happens in two ways:
- Sometimes the threads appear after launch and then disappear automatically without any click or interaction.
- If I click a thread under an affected local project before the refresh happens, the thread opens in the main pane, then Codex immediately removes visible thread entries from affected local project groups in the left sidebar and shows
No chats.
When the clicked thread opens, the main pane displays:
current working directory missing
This chat's working directory no longer exists
Local diagnostics show the working directory does exist on disk. This appears to be a Windows Codex Desktop path-normalization / project-to-thread mapping / sidebar refresh bug, not actual data loss and not an actually missing folder.
Important observation: one local/internal .codex project thread remained visible and persisted after clicking it. The disappearing behavior appears focused on local document/project roots under %USERPROFILE%\Documents\..., not every sidebar entry universally.
---
What steps can reproduce the bug?
Reproduction path A: automatic refresh failure
- Open Codex Desktop on Windows.
- Wait a few seconds for the sidebar to populate.
- Observe that saved local project groups initially show existing threads.
- Do not click anything.
- After a short refresh, affected local project groups switch to
No chats.
Reproduction path B: thread-open failure
- Open Codex Desktop on Windows.
- Wait a few seconds for the sidebar to populate.
- Observe that saved local project groups initially show existing threads.
- Click one thread under an affected local project rooted under
%USERPROFILE%\Documents\.... - The selected thread opens successfully in the main pane.
- Immediately afterward:
- the clicked thread disappears from the left sidebar,
- other affected local project groups switch to
No chats, - the main pane shows
current working directory missing, - Codex says
This chat's working directory no longer exists.
Control observation
Clicking an internal/local .codex project thread does not reproduce the same disappearing behavior. That thread remains visible.
This suggests the issue is specific to local document/project root resolution or thread-to-project mapping, not a universal sidebar rendering failure.
---
What is the expected behavior?
If a local project thread exists and its working directory exists on disk, opening the thread should not cause Codex to:
- mark the working directory as missing,
- remove that thread from the project group,
- collapse other local project groups to
No chats.
Codex should normalize equivalent Windows path forms and preserve the project-to-thread mapping.
For example, Codex should treat these as the same real folder:
C:\Users\<redacted>\Documents\Project
\\?\C:\Users\<redacted>\Documents\Project
The sidebar should continue showing the existing local project threads after launch, refresh, or opening one of them.
---
Additional information
Environment
Product: Codex Desktop app
Platform: Windows 11 x64
Windows version: Windows 11 Pro, Version 25H2, OS build 26200.8655
Platform string: Microsoft Windows NT 10.0.26200.0 x64
Installed app package: OpenAI.Codex 26.616.4196.0
Package full name: OpenAI.Codex_26.616.4196.0_x64__2p2nqsd0c76g0
Install location: C:\Program Files\WindowsApps\OpenAI.Codex_26.616.4196.0_x64__2p2nqsd0c76g0
Codex home: %USERPROFILE%\.codex
Local state DB: %USERPROFILE%\.codex\state_5.sqlite
Shell used for diagnostics: PowerShell 7.6.3
Subscription: ChatGPT Plus
---
Local diagnostic evidence
1. The affected project folders exist
Read-only diagnostics show the local project folders exist:
C:\Users\<redacted>\Documents\Job Applications
C:\Users\<redacted>\Documents\Job Applications\<Affected Project>
C:\Users\<redacted>\Documents\PCCS Writing System
C:\Users\<redacted>\Documents
All returned:
exists_as_recorded = true
is_dir_as_recorded = true
2. The thread cwd paths also resolve
Affected threads.cwd values in state_5.sqlite use extended Windows path form, for example:
\\?\C:\Users\<redacted>\Documents\Job Applications
\\?\C:\Users\<redacted>\Documents\Job Applications\<Affected Project>
\\?\C:\Users\<redacted>\Documents\PCCS Writing System
Read-only diagnostics showed these paths exist as recorded:
exists_as_recorded = true
is_dir_as_recorded = true
So the app's current working directory missing banner is not accurate in the file-system sense.
3. Active workspace root and thread cwd differ only by path representation
After opening the affected project thread, global state showed the active workspace root in canonical form:
C:\Users\<redacted>\Documents\Job Applications\<Affected Project>
But the thread row in SQLite used extended path form:
\\?\C:\Users\<redacted>\Documents\Job Applications\<Affected Project>
These refer to the same folder, but Codex appears to treat them as non-equivalent when opening the thread.
4. Thread workspace-root hints appear incomplete
Diagnostics initially showed:
thread_workspace_root_hint_count = 4
thread_workspace_root_hints_related = []
So affected local project threads appeared to lack explicit thread-workspace-root-hints entries even though their cwd values and saved workspace roots were present.
This may be part of the sidebar/project-to-thread mapping failure.
5. SQLite integrity is OK
SQLite reported:
integrity = ok
journal_mode = wal
This does not look like database corruption.
---
Prior local repair experiments already tried
I tried several local-state repair experiments before filing this report.
Static canonicalization
Canonicalized local roots across:
%USERPROFILE%\.codex\config.toml
%USERPROFILE%\.codex\.codex-global-state.json
%USERPROFILE%\.codex\chrome-native-hosts-v2.json
%LOCALAPPDATA%\OpenAI\Codex\chrome-native-hosts-v2.json
%USERPROFILE%\.codex\state_5.sqlite
Result: local project threads still disappeared after Codex refresh/open.
Parallel extended-root project test
Added an explicit project root in extended path form:
\\?\C:\Users\<redacted>\Documents\Job Applications
The state retained it, but the UI ignored/de-duplicated/filtered it and did not resolve the disappearing sidebar issue.
Replacement extended-root project test
Replaced the canonical project root with the extended root form in config.toml and .codex-global-state.json.
Result: the replacement state remained, but the UI still dropped the project chats.
SQLite trigger normalization test
Temporarily installed SQLite triggers to keep affected threads.cwd rows canonical even if Codex runtime rewrote them to \\?\C:\....
Post-launch diagnostics showed:
verdict = TRIGGERS_HELD_DATABASE_CANONICAL_BUT_UI_STILL_DROPPED_CHATS
extended_row_count = 0
canonical_row_count = 11
required_triggers_present = true
integrity = ok
So even when the database was held canonical, the UI still dropped the project chats. The test triggers were rolled back.
---
Additional controlled test: single-thread hint repair
I then ran a controlled single-thread metadata repair test against a disposable test thread:
019ed828-f473-7411-aa83-2bfd09770d80
The test set both:
threads.cwd = C:\Users\<redacted>\Documents\Job Applications
thread-workspace-root-hints[thread_id] = C:\Users\<redacted>\Documents\Job Applications
The pre-launch postcheck showed the repair applied successfully:
apply_effective = true
target_cwd_is_desired = true
hint_is_desired = true
sqlite integrity = ok
After opening Codex and letting the sidebar refresh/fail without clicking anything, I ran a read-only verification.
Result:
verdict = CODEX_RUNTIME_REVERTED_SQLITE_CWD_ONLY
Current state after Codex ran:
thread-workspace-root-hints[thread_id] = C:\Users\<redacted>\Documents\Job Applications
threads.cwd = \\?\C:\Users\<redacted>\Documents\Job Applications
The explicit thread workspace-root hint stayed in place, but Codex runtime rewrote the SQLite threads.cwd value back to extended Windows path form.
The normalized path still exists on disk:
target_cwd_normalized = C:\Users\<redacted>\Documents\Job Applications
target_cwd_normalized_exists = true
So Codex Desktop runtime appears to rewrite or persist local thread cwd values in \\?\C:\... form while other app state such as saved workspace roots and workspace-root hints may use canonical C:\... form.
This strengthens the suspicion that the Windows app is failing to normalize equivalent path forms during sidebar/project/thread reconciliation.
---
Current hypothesis
Codex Desktop on Windows is failing to reconcile local project threads when:
- saved workspace roots are canonical
C:\..., - thread
cwdvalues are\\?\C:\..., - explicit
thread-workspace-root-hintsare missing, incomplete, or not enough to overridecwd, - and the app refreshes the sidebar or opens a local project thread.
The app appears to treat equivalent paths as non-equivalent or invalid, shows current working directory missing, and refreshes the sidebar to No chats.
---
Why this is likely an app bug
The local folders exist. The SQLite rows exist. The app can initially list the threads. The failure occurs during app-side validation or refresh.
Codex should not show current working directory missing when the path exists and resolves on Windows.
Codex should also not remove all project thread entries from the sidebar after opening one valid local project thread, or after an automatic sidebar refresh.
---
Related reports / potential duplicates
Potential duplicates detected by GitHub Actions appear related but not exact duplicates:
- #28348 — related to project/sidebar mapping and
No chats, but appears broader and includes duplicate project entries and CLI-visible history. - #28094 — closest root-cause-family match because it involves valid working directories being reported missing due to path handling / path normalization problems.
- #27516 — closest behavioral match because it describes a thread reappearing and then disappearing from the project sidebar when clicked.
This issue may be another manifestation of the same broader sidebar/path-normalization bug family, but it includes additional controlled diagnostics showing that Codex runtime itself reverted the SQLite cwd value while preserving the explicit workspace-root hint.
Other related reports in openai/codex include:
- #19290 — Windows Desktop sidebar shows
No chatswhile Search/local data still works - #22796 — Project sidebar shows
No chatswhile local sessions still exist - #21581 — Desktop sidebar/search hides older local project chats although thread data still exists
- #25084 — Codex Desktop hides active project chat history while local threads remain on disk
- #27251 — Latest update partially restores history but older project histories remain missing
---
Impact
This is a data-loss-class UX problem even though the underlying data may still exist.
The affected project threads contain development history, workflow history, validation notes, generated files, and task continuity. Losing normal sidebar access makes it difficult to resume work safely.
---
Requested maintainer guidance
Please confirm whether Codex Desktop has a supported way to rebuild or repair the project-to-thread/sidebar index from durable local state, including:
state_5.sqlitesession_index.jsonl.codex/sessions- saved workspace roots
thread-workspace-root-hints- persisted permissions / writable roots
- canonical and extended Windows path variants
At minimum, Codex Desktop should normalize equivalent Windows path forms such as:
C:\Users\<redacted>\Documents\Project
\\?\C:\Users\<redacted>\Documents\Project
before deciding that a working directory is missing or before removing project threads from the sidebar.
---
Attachments
I can provide redacted screenshots showing:
- project threads visible before refresh/click,
- project groups changed to
No chatsafter refresh/click, - the main pane showing
current working directory missing.
I prefer not to upload full .codex databases, full .codex-global-state.json, or session transcript files publicly because they may contain private local project or conversation data.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Confirmed for both native and WSL modes.
TL;DR
I hit what looks like the same Windows Desktop project-sidebar collapse. In my case, the chats were not deleted; existing local history was still present, but project grouping failed because Codex had mixed incompatible
cwd/ project-root path dialects across local state.Important: I have WSL installed on this machine, but I did not intentionally configure Codex into a split WSL/native-Windows setup. The evidence suggests Codex created, preserved, or failed to reconcile that split across Desktop/CLI/runtime updates and restarts.
The broken state involved path forms such as:
The durable repair was not just editing one DB column. First repairs normalized
state_5.sqlite,sqlite/codex-dev.db, global project roots/hints, thread assignments, rollout metadata, and config into a consistent WSL-style state. The final durable step was to migrate those active path surfaces atomically from WSL-style/mnt/c/Users/...paths to native WindowsC:\Users\...paths and setrunCodexInWindowsSubsystemForLinux = false.Environment
OpenAI.Codex_26.623.4041.0_x64__2p2nqsd0c76g00.138.0to0.142.2OpenAI.Codex_26.623.8305.0_x64__2p2nqsd0c76g00.142.2on Windows; update check reported0.142.4availableC:\Users\<user>\...\project/mnt/c/Users/<user>/.../projectUser-visible symptom
Saved projects were still visible in the Codex Desktop sidebar, but all project panes showed
No chats.The behavior matched this issue closely:
No chats.Important timing detail
In my case the break appears to have started when I updated the CLI/runtime from around
0.138.0to0.142.2, not only after a visible Desktop app update.At least one affected session had old rollout metadata like:
The newer
0.142.xruntime appears to have consumed legacy Windowssession_meta.payload.cwdvalues differently and produced malformed or inconsistentcwdvalues that the Desktop sidebar later grouped on.So this may be a migration/compatibility bug between older session metadata and newer CLI/app-server/runtime behavior, not only a renderer/sidebar display bug.
Key local finding
The live Desktop renderer had thread/conversation objects whose
cwdhad been transformed into this malformed shape:That path obviously cannot match any saved project root. As a result, the sidebar grouping logic treated existing chats as outside their projects, and the project panes rendered as
No chats.This looks related to #23189, except my malformed suffix was a normal
C:\Users\...path rather than a\\wsl$\...path.Data was not deleted
Local checks showed that the chats still existed:
.codex/state_5.sqlitestill contained thread rows..codex/sessions/**/*.jsonlrollout files still existed..codex/session_index.jsonlstill listed sessions.recentRenderableCount: 96.cwdrepair.ok.After the durable native-Windows repair, verification showed:
codex doctorstill reported a warning that some rollout files were missing from the state DB, but those were internal guardian/subagent/exec or archived rollout files. They were not the user-facing project chats that had disappeared from panes.Local stores involved
The issue was not isolated to one store. Relevant local state existed across:
Some stores had already-correct values while the live Desktop renderer still had stale/malformed
cwdvalues. That made “SQLite looks correct” insufficient to guarantee that the sidebar would group correctly.Path forms observed during the incident
Equivalent roots appeared in multiple string forms:
The project sidebar appears to rely on normalized project-root/
cwdmatching. If any of these forms fail to canonicalize to the same project key, existing chats can become invisible under their project.One nuance from the final working state:
\\?\C:\Users\...was not fatal by itself. Somestate_5.sqlitecwdrows used that extended-prefix form after repair, but app-server normalized them back toC:\Users\...and project filtering worked. The fatal issue was the split across incompatible dialects, especiallyC:\mnt\c\Users\...and theapp/resources/C:\Users\...malformed path.What fixed it
There were two repair stages.
First, a WSL-mode repair normalized legacy Windows
cwdvalues in rollout JSONL session metadata. Many rollout JSONL files had oldsession_meta.payload.cwdvalues stored as Windows paths:After the newer runtime/app consumed them, the live
cwdcould become:A structural repair converted only
session_meta.payload.cwdvalues from Windows form to WSL form, for example:That repair changed:
This helped restore many project panes, but it was not the final durable fix. At one point, after Windows sleep/wake, Codex showed an Electron-style renderer reload error. Clicking
Reloadreopened the app, but project panes were almost all empty again. A full app restart restored the panes.Separately, while investigating repeated local tool-call failures that the agent had to retry or rephrase, I discovered that my Codex install had ended up in a split WSL/native-Windows setup. When iterating on this, the project panes became empty again. That split turned out to be directly relevant. The final durable repair was an audited native-Windows migration.
At the time of migration, the dry run showed planned normalization of:
The final repaired state used native Windows paths consistently for active project/thread metadata:
and rejected the invalid transition form:
The active path surfaces that had to be consistent were:
state_5.sqlite, tablethreads.cwdsqlite/codex-dev.db, tablelocal_thread_catalog.cwd.codex-global-state.jsonelectron-saved-workspace-rootsproject-orderthread-workspace-root-hintsthread-project-assignmentsactive-workspace-rootssession_meta.payload.cwdturn_context.payload.cwdturn_context.payload.workspace_rootsconfig.tomlrunCodexInWindowsSubsystemForLinux = falseWSLENVC:\mnt\c\...After this, app-server project filters returned the expected project threads.
During debugging, some individual threads could still be found through direct search/app-server queries even while project panes were empty. I would not treat that as a true project-level exception; it looked more like different local sources winning during hydration at different moments. The consistent user-visible failure was that saved project panes could collapse to
No chatsdespite the underlying thread files and DB rows still existing.Hypothesis
This looks like a migration/compatibility bug triggered by newer Codex CLI/app-server/runtime reading older local session metadata, combined with incomplete reconciliation between WSL-mode and native-Windows-mode local state.
The likely chain in my case was:
session_meta.payload.cwdasC:\Users\<user>\....0.138.0to0.142.2.cwdvalues relative to the packaged app resource directory.cwdbecame:``
text
``/mnt/c/Program Files/WindowsApps/OpenAI.Codex_.../app/resources/C:\Users\<user>\...\project
cwd.``
text
``C:\mnt\c\Users\<user>\...
No chats.Suggested fix direction
The app probably needs a migration/backfill step that canonicalizes project/thread
cwdvalues across all local sources.At minimum, it should normalize and reconcile:
state_5.sqlitethreads.cwd.codex-global-state.jsonsaved project rootsthread-workspace-root-hintsthread-project-assignmentssession_meta.payload.cwdin rollout JSONLconfig.tomlruntime mode and active local source/tool pathsThe sidebar should probably group by a canonical project identity/key instead of exact raw
cwdstrings.Equivalent forms should collapse to the same key, including:
This form should be treated as invalid and repaired, not preserved as native Windows:
This malformed form should also be detected and repaired explicitly:
That should be interpreted as a bad resource-relative Windows path and normalized back to the captured Windows path, not treated as a real project
cwd.Conclusion
The UI made it look like project history was lost, but the local history was still present. The failure was in migration/hydration/grouping.
A built-in repair tool or automatic backfill would prevent users from manually editing
.codexstate, restoring backups, or assuming their chats were deleted.Adding more evidence because my prior email reply appears to have bounced from [[notifications@github.com](mailto:notifications@github.com)](mailto:notifications@github.com) with a mailbox quota error.
I performed a staged local-state reset on Windows Codex Desktop.
Environment:
Results:
Result:
“Invalid request: AbsolutePathBuf deserialized without a base path”
Result:
Observed result:
Interpretation: