openai / openai/codex

Windows Codex Desktop selectively loses historical local sessions while older legacy threads survive, alongside incomplete project-assignment migration

Open
#41,874 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug session windows-os
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What version of the Codex App are you using (From “About Codex” dialog)?

26.825.6671

What subscription do you have?

ChatGPT Plus

What platform is your computer?

Windows 11 Home 25H2, build 26200.9168, AMD64 (64-bit)

What issue are you seeing?

Codex Desktop on Windows shows two distinct local-history failures:

  1. Incomplete project-assignment migration. Existing threads survived on disk but lost their Project association. The persisted migration state was projectsMigrated = true while threadAssignmentsMigrated = false. Before a backed-up repair, 0 of 11 uniquely attributable Project-to-thread assignments were present in threads.project_id; the legacy JSON assignment map held 9 of 11, while sidebar ordering retained all 11.

  2. Selective session/rollout loss. I remember additional primary conversations in the “3D打印产品报价系统” Project from approximately one to two months earlier. Those conversations are absent from every local store and VSS snapshot examined, although still older May 2026 legacy threads remain intact and usable.

The user-visible symptom was that Projects still existed, but some historical conversations disappeared. Some surviving conversations could be reassociated with their Projects, but the remembered missing primary conversations cannot currently be recovered because their thread rows and rollout files are absent from every available local dataset and snapshot.

This is not a claim that all history disappeared, and I cannot identify a specific Codex, ChatGPT, or Windows update as the cause.

What steps can reproduce the bug?

I do not currently have a deterministic reproduction because the loss appears to have occurred during an earlier in-place app/project migration.

Observed sequence:

  1. Use Codex Desktop on Windows over multiple months with several local Projects and local conversation history.
  2. Update Windows, Codex Desktop, and ChatGPT Desktop in place over time. I did not uninstall/reinstall Codex or ChatGPT and did not reinstall Windows.
  3. After later app/project migrations, some Projects still exist but part of their historical conversation list is missing.
  4. Inspecting local Codex state showed projectsMigrated=true while threadAssignmentsMigrated=false.
  5. Surviving threads could be reassigned because their SQLite rows and rollout files still existed.
  6. Other remembered primary conversations could not be found in:
    • state_5.sqlite
    • sessions/rollout-*.jsonl
    • session_index.jsonl
    • thread_history_1.sqlite
    • the pre-repair backup
    • two Windows VSS snapshots

Important control case:
A May 21, 2026 legacy primary thread still exists and works normally in the UI, even though it is older than the missing conversations. Its rollout is intact and hash-identical across live data and VSS snapshots.

Stable pre-investigation baseline:

  • 4 Projects
  • 44 threads
  • 44 rollout/session files
  • 18 primary user threads
  • 26 child/helper threads

Two additional guardian/review threads were generated only during the forensic investigation and are not recovered history.

What is the expected behavior?
  • App updates and Project migrations should preserve all existing primary local sessions and rollout files.
  • Migrated Projects should retain their thread assignments, or provide a supported reconciliation/recovery path.
  • Threads that cannot be assigned to a Project should remain available as Projectless rather than disappearing.
  • Older local conversations should not selectively disappear while even older legacy conversations remain intact.
Additional information

Key forensic findings:

  • A May 21, 2026 legacy Project thread remains fully usable.
  • Its rollout is 37,462,645 bytes / 756 records and is hash-identical in live data, VSS7, and VSS8.
  • It is absent from both session_index.jsonl and thread_history_1.sqlite, showing those indexes are not required for historical survival.
  • A July 28 quotation-system thread also survives and underwent the same legacy Project ID -> app-server Project ID remapping.
  • Project-assignment migration was incomplete, but this only explains surviving threads losing Project membership; it cannot explain remembered sessions whose SQLite rows and rollout files are entirely absent.
  • VSS snapshots from Aug 30 and Aug 31 contained no additional thread/session IDs outside the live set.
  • logs_2.sqlite contained additional internal thread IDs, but forensic classification identified no missing primary-user conversation among them.

Related but not identical: #26157, #41867, and #41864.

#26157 appears to cover the project/sidebar mapping failure where the underlying local sessions still exist. My case additionally includes remembered primary conversations for which neither the thread rows nor rollout/session files are present in the live store or available VSS snapshots.

02_TECHNICAL_TIMELINE.md
03_DATASET_SUMMARY.md
05_PROJECT_MIGRATION_SUMMARY.md
06_VSS_FORENSICS.md
07_PRIVACY_REDACTION_REPORT.md

I have a redacted diagnostic package containing a technical timeline, dataset comparison, Project-migration analysis, and VSS forensic results. Raw SQLite databases, rollout files, prompts, source code, credentials, and account identifiers are not included.

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 reviewing the migration state and the named stores: state_5.sqlite, sessions/rollout-*.jsonl, session_index.jsonl, and thread_history_1.sqlite, using the attached forensic summaries as context. There is no deterministic reproduction or source entry point identified, so first establish how project assignments and primary sessions are migrated. Done means updates preserve existing sessions and assignments, or retain unassigned threads through a supported recovery path.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, sqlite
Domain
databases, desktop, operating-systems
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
24/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.