Repository navigation
Desktop App: paginated thread history is replaced by a single interrupted initial turn after update #40452
Description
What variant of Codex are you using?
Codex Desktop App on Windows 11, signed in through a ChatGPT account.
Summary
After a recent Desktop App update, previously completed tasks can open with only their first user message and a partial initial assistant response. The displayed turn is marked interrupted and no further history is available.
This is not lost rollout data: the canonical local JSONL for the same task contains the full completed conversation and tool activity.
Reproduction pattern
- Use Codex Desktop for a multi-turn task, including tool use and delegated tasks.
- Let the task complete or continue it across several turns.
- Update/restart Codex Desktop.
- Reopen the existing task.
- Observe that the UI shows only the initial turn as
interrupted; there is no available older/newer page.
Observed on two independent tasks.
Expected behavior
Completed tasks should display their complete historical turns after a Desktop App update or restart.
Actual behavior
The Desktop UI / thread reader returns only the first fragment of the conversation:
- first user message;
- partial first assistant message;
- turn status
interrupted; - no additional history (
hasMore=false).
Local evidence (redacted and aggregate-only)
For two affected Desktop tasks, the corresponding canonical rollout JSONL files parse cleanly and contain:
- task A: 18 user messages, 42 assistant messages, 15 completed turns;
- task B: 13 user messages, 67 assistant messages, 9 completed turns.
Both affected threads use history_mode=paginated. A comparable unaffected current Desktop thread uses legacy history. The primary local SQLite state passes integrity checks, and its rollout paths/timestamps match the complete JSONL files.
No raw prompts, credentials, project names, local paths, or thread IDs are included here.
Related issue
This looks like the Desktop/App manifestation of #37577, which reports the same completed-rollout-to-interrupted reconstruction failure through CLI resume/app-server. The difference here is that it is visible directly in Codex Desktop UI after an update.
User feedback: Linux and Remote also show truncated paginated history
- Source: [Bug] Paginated thread history projection stops at a token_count record #40342
- Source: [Bug] Paginated thread history projection stops at a token_count record #40342 (comment)
- Source: [Bug] Paginated thread history projection stops at a token_count record #40342 (comment)
- Source: [Bug] Paginated thread history projection stops at a token_count record #40342 (comment)
- Type: external
- User reports:
- “Reproduces across Linux Desktop, laptop Remote, and mobile Remote.”
- “the Desktop/thread reader returns only one
interruptedturn and reports no additional page” while the rollout contains later completed turns. - On a remote Ubuntu 24.04 host, “24/24 paginated-history threads have incomplete projections” and “The affected rollout files remain present and valid.”
Activity
github-actions commentedon Aug 24, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
someone114514 commentedon Aug 26, 2026
I can corroborate this on a newer Windows Desktop build, with a precise restart/resume trace and an active Goal continuation.
Environment
26.818.5229.00.149.0-alpha.4.1Observed sequence (UTC)
task_startedat2026-08-25T14:25:27Zand persisted normal messages/tool items.14:31:48Z, Desktop loggedRecoverable Chromium child process gone ... processType=GPU reason=crashed exitCode=2.14:31:55Z, the same Desktop build launched again; there was no update or graceful-quit record.14:32:16Z, Desktop reported the initial turn aslatestTurnStatus=interrupted.14:32:56Z, Desktop issuedthread/goal/setand started a Goal continuation with a new turn ID.task_complete,turn_aborted, or another terminal lifecycle event for the initial turn.Resulting inconsistency
The rollout was about 131 MB at inspection time. A lifecycle snapshot contained 11
task_started, 8task_complete, 1 intentionalturn_aborted, and 1 then-active diagnostic turn, leaving exactly 1 historical orphaned start (the initial turn). It had also undergone 20 compactions.However, Desktop/app
thread/readreturned only the initial turn:The later completed turns were visible in the raw rollout but absent from the read model. The UI consequently placed very early setup commentary next to much later completion/follow-up messages, making old work appear current.
This was not project or rollout corruption: the Git worktree/commits were intact, JSONL parsed, the durable Goal had been cleared, and there were no queued follow-ups.
Why this case may help
This provides a concrete producer-side path for the orphan described here and in #40836:
Expected recovery behavior:
turn_id; an older orphan must not act as a pagination barrier.I did not edit the JSONL or SQLite state and have not attached raw logs because they contain private prompts, local paths, and tool output. I can provide a sanitized event fixture or submit the existing session through in-app feedback if maintainers need it.
ikekou commentedon Aug 29, 2026
Additional macOS reproduction: network interruption followed by stale thread history
I can reproduce the same completed-rollout-to-single-interrupted-turn failure on macOS.
Environment
history_mode=paginatedTimeline
net::ERR_INTERNET_DISCONNECTEDandThread catalog sync failed.write EPIPE, followed by the localAppServerConnectiontransitioning throughstop_processtodisconnected.interrupted, with no additional page (hasMore=false/ no next cursor).Durable local evidence
The canonical rollout JSONL is still present and parses normally:
task_completeeventstask_completeis at 23:33:46 UTC, about 12.5 hours after task creationHowever, the matching entry in
session_index.jsonlstill has its creation-timeupdated_atvalue (10:57:34 UTC), even though the rollout continued through 23:33 UTC.This suggests that the network/app-server interruption may be one trigger: later turns continue to append successfully to the canonical rollout, while the thread catalog/history projection remains pinned to the initial interrupted turn and is not reconciled afterward.
I have not modified the rollout, index, cache, or state databases and have not attempted any repair. I have intentionally omitted raw prompts, project names, local paths, credentials, and the task ID from this public comment. I can provide the task ID and narrowly redacted log excerpts through a private support channel if useful.
romankoss commentedon Aug 30, 2026
Additional Windows + ChatGPT mobile Remote reproduction, originally reported in #41707.
I can confirm the same thread-history projection failure on a newer Windows Desktop build:
10.0.19042OpenAI.Codex_26.825.6671.0_x64151.0.7922.1740.151.0-alpha.7.2(one older affected thread originated on0.150.0-alpha.12.2)The common preceding action was opening several existing Desktop-origin tasks through ChatGPT mobile Remote when the phone showed only partial/early history. Returning to Desktop left those tasks present and recent, but their projected histories had regressed.
Sanitized evidence from two affected tasks:
task_completeevents, 4 non-empty final answers. Desktop/app reader: only the first interrupted turn,hasMore: false.task_completeevents, 11 non-empty final answers. Desktop/app reader: only 3 turns,hasMore: false.The original rollout JSONL files parse successfully and retain the later completed work.
session_index.jsonltimestamps were stale relative to the final rollout events.Recovery behavior adds another signal: sending a new recovery marker to one affected task worked immediately. For the older task, the first send advanced
updatedAtbut remained invisible; after explicitly navigating to/load the task and resending, a new completed turn was created. Historical pagination still remained truncated. This suggests new turns can be accepted while the older history projection/index is incomplete.No raw logs, prompts, project names, or local paths are attached. The fuller duplicate report is #41707.
LemonCANDY42 commentedon Sep 4, 2026
Additional macOS corroboration: duplicate ordinal stalls paginated history projection
I am adding privacy-preserving, read-only local evidence that matches the duplicate-ordinal projection failure in #41566 and explains the visible truncated-history symptom here.
26.901.31953(Apple Silicon).cli_version = 0.150.0-alpha.12.2; this is its recorded writer version, not a claim that the currently installed bundle created the discontinuity.0, reaches ordinal30249, and has one observed continuity break:event_msg/token_countat ordinal21832is immediately followed byevent_msg/thread_settings_appliedwith the same ordinal; the next record istask_startedat21833.thread_history_projection_stateexpects ordinal21833, while the rollout record is ordinal21832. Local app logs independently containexpected ordinal 21833, got 21832twice.task_completeevents after this discontinuity. The corresponding derivedthread_turnstable has only 59 rows; its highest materialized turn-start ordinal is21049, before the break.21833at a record numbered21832, with about 95 MB of valid raw rollout remaining beyond its cursor. It did not self-heal.quick_checkpasses for both the state and history SQLite databases. I did not alter the rollout, SQLite state, cache, or any task.A second independent local paginated rollout has the same
token_count -> thread_settings_appliedduplicate-ordinal pair at a different ordinal. I am not attaching thread IDs, prompts, paths, task names, raw logs, or rollout content. This looks like a macOS instance of the same projection barrier, rather than transcript deletion.LemonCANDY42 commentedon Sep 5, 2026
Recovery result: a derived-projection-only repair restored a second macOS thread
I can add a privacy-preserving recovery outcome for a separate affected local paginated thread. Its recorded writer version is
0.153.3, so this symptom is not confined to the earlier0.150.0-alpha.12.2rollout noted above.Before recovery, the reader returned only one initial interrupted turn with no further page. The canonical JSONL had four
task_startedand threetask_completeevents. At the projection cursor, the stored next ordinal wasN, but the record at that byte offset was a duplicatedN-1thread_settings_appliedevent immediately after aN-1token_countevent; later records resumed atN.After first making a full SQLite backup, I changed only the derived
thread_history_projection_statebyte cursor to skip that single already-duplicated metadata record, while leaving its expected next ordinal unchanged. I did not change the canonical rollout, prompts, task data, cache, or state database. The materializer then advanced to the rollout EOF.Verification after recovery:
quick_checkpassed for both the live database and the pre-repair backup.This is not a supported general workaround. It was appropriate only after confirming the exact
expected N / encountered duplicated N-1signature and retaining a full backup. It nevertheless shows that the missing transcript was recoverable from the canonical rollout and that a supported, guarded reindex/reconciliation command could repair affected threads without rewriting user content. This matches the failure family in #41566.YihengLabs commentedon Sep 8, 2026
Adding a macOS reproduction that closely matches this issue.
Environment
Observed behavior
After a desktop app update/restart, seven older pinned local threads lost their visible conversation history. Three newer comparable threads still display their history normally.
For affected threads:
hasMore=false);Read-only diagnostic evidence
PRAGMA quick_checkandPRAGMA integrity_checkboth returnedokfor the relevant SQLite databases.codex doctoron both 0.147.0 and 0.153.4 reported:rollout files are missing from the state DBduplicate thread inventory entries foundthread_history_1.sqlite, several affected threads had zero materialized turns and zero materialized items even though their projection state indicated that the rollout had already been consumed.No raw transcripts, thread IDs, local paths, usernames, account identifiers, or private project names are included here.
A supported, non-destructive “rebuild/reindex thread history from rollout JSONL” operation would be very helpful, especially when the source transcript and SQLite integrity checks are both healthy.
jide commentedon Sep 13, 2026
I also have the same issue