Paginated history can reconstruct completed turns as “interrupted” on resume
Summary
After upgrading Codex CLI from 0.146.0 to 0.147.0, previously completed conversations no longer replay correctly with codex resume.
The resumed conversation shows only the beginning of the first turn and then:
Conversation interrupted - tell the model what to do differently. Something went wrong? Hit `/feedback` to report the issue.
However, the underlying rollout JSONL is complete and contains the full turn, including subsequent assistant/tool activity and an explicit task_complete.
This appears to be a bug in paginated history reconstruction rather than missing or corrupted rollout data.
Environment
- Codex CLI:
0.147.0 - Previously:
0.146.0 - OS: Linux
- Installation: native Codex install script
Reproduction
- Have an existing conversation containing one or more normally completed turns.
- Upgrade to
0.147.0. - Resume the conversation with:
codex resume
- The TUI displays only the beginning of the conversation and then marks it as interrupted.
Evidence
The underlying rollout JSONL remains intact.
For the affected turn, the rollout contains:
task_started
...
assistant/tool activity
...
final assistant output
task_complete
There are also later completed turns in the same rollout.
I queried codex app-server directly using thread/resume with paginated history. The app-server returned the affected historical turn approximately as:
thread status: idle
history mode: paginated
turn status: interrupted
items: 4
This is inconsistent with the canonical rollout, where the same turn continues substantially further and ends with task_complete.
Using excludeTurns: false did not restore the full history; the thread was still returned in paginated mode with the same truncated/interrupted reconstruction.
Troubleshooting attempted
I tried:
- downgrading to
0.146.0; - deleting and rebuilding the Codex SQLite state database;
- restarting Codex and resuming the same conversation.
The problem remained.
The rollout JSONL itself remained complete.
Suspected failure mode
It appears that paginated history reconstruction is materialising only a partial fragment of a completed turn.
Because the completion boundary is not included in the reconstructed fragment, the turn is subsequently treated as interrupted even though the rollout contains a valid task_complete.
Conceptually:
complete rollout
↓
paginated history reconstruction
↓
partial historical turn
↓
completion boundary not observed
↓
turn classified as interrupted
↓
TUI displays “Conversation interrupted”
The incorrect interrupted status is already present in the thread/resume app-server response, so the problem does not appear to be limited to TUI rendering.
Expected behaviour
Completed historical turns should be reconstructed as completed and their full conversation history should remain available after resume.
Actual behaviour
A completed historical turn is returned as interrupted with only a small subset of its items, and later history is not displayed.
Data integrity
The underlying rollout data appears to be intact. This looks like a paginated history reconstruction/migration issue rather than conversation data loss.
5 Comments
I’m testing Codex Rescue
0.1.0a3against real resume/history failures. This case is useful because your canonical rollout is complete (task_completepresent) while the paginated resume projection reports it as interrupted.Rescue reads the local rollout directly, so an independent
doctorresult can help separate rollout damage from app-server reconstruction damage. It does not claim to repair the paginated-history bug itself.If you still have the affected thread, would you be willing to try:
If it selects the right session, sanitized
salvage --fork/verifyoutput would also be useful. Please don’t post raw rollout data, prompts, SQLite DBs, credentials, or private paths.https://github.com/shleder/codex-rescue
Same issue. After I run codex resume <session_id>, I can only see my first message and the error message:
Confirmed on Codex Desktop for Windows 11 after a recent app update (desktop package build
26.818.8289.0). This is reproducible across two independent desktop threads and is not rollout-data loss.Observed in the Desktop UI /
thread/read:interrupted;hasMore=false.The corresponding canonical rollout JSONL files parse cleanly and contain complete work:
Both affected threads use
history_mode=paginated; a comparable unaffected current Desktop thread useslegacy. The primary local SQLite store passes integrity checks, and its rollout paths/timestamps match the complete JSONL files.This therefore appears to affect Desktop/App history reconstruction too, not only CLI resume. No paths, prompts, project names, thread IDs, or credentials are included here. I can provide redacted aggregate diagnostics privately if maintainers need them.
Additional Desktop + Remote SSH reproduction (2026-08-25 UTC).
Environment:
Observed:
Expected:
Privacy note:
No thread IDs, titles, prompts, workspace names, project paths, filenames, screenshots, raw transcripts, raw logs, account details, credentials, or personal information are included.
For anyone whose completed turns now render as 'interrupted': in the cases I checked, the loss is projection-side - the original turns are still present in the rollout JSONL.
vetto rescue diagnose <session.jsonl>classifies the file read-only (duplicate ordinals, oversized/malformed records) so you can tell damaged source from broken reconstruction before retrying resumes.