Windows Desktop 26.818.8289.0: live projection drops completed assistant output present in JSONL
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
Summary
On the latest Codex Desktop for Windows, completed assistant output is durably present in the canonical session JSONL, but the live Desktop/thread projection reports the completed turn with zero items and no latest assistant message.
A full app restart reconstructs previously missing turns from JSONL, but every new turn after restart immediately reproduces the empty live projection. This points to a real-time event ingestion, incremental projection, cursor synchronization, or local result-index update failure rather than a model/agent execution failure.
This report is filed on behalf of a user who reproduced and reviewed the evidence below. Exact private thread/turn identifiers and sanitized JSONL slices can be supplied privately to OpenAI.
Environment
- Windows native Codex agent / PowerShell
- App package:
OpenAI.Codex_26.818.8289.0_x64 ChatGPT.exefile version:151.0.7922.170- Bundled command runner:
codex-command-runner-0.149.0-alpha.4.3 - Installed from Microsoft Store and confirmed up to date
- Full app restart already attempted
- Local Git worktree projects
- Session transcripts under
%USERPROFILE%\.codex\sessions
What issue are you seeing?
A turn starts, produces a complete assistant response, and completes successfully. Its session JSONL contains:
event_msg.task_started- a
response_itemcontaining the assistant output event_msg.task_complete- a non-empty
task_complete.last_agent_message
The live Desktop/thread projection nevertheless reports that same completed turn as:
items=[]
itemCount=0
latestAssistantMessageId=null
latestAssistantMessage=null
latestToolMarkerId=null
The completed response is therefore presented as though the agent never started or returned nothing.
Minimal reproduction
- Open an existing local Codex task.
- Send a zero-tool prompt requiring one exact short response.
- Wait for the turn to reach
completed. - Inspect the Desktop task and structured thread result.
- Observe
itemCount=0and no assistant message. - Inspect the matching JSONL under
%USERPROFILE%\.codex\sessions. - Observe the complete assistant
response_itemand non-emptytask_complete.last_agent_message.
The issue also reproduces in a newer/fresh task, so it is not limited to one old thread. Two post-restart zero-tool smoke tests produced exact 95-character and 107-character assistant responses in JSONL, while the live projection remained empty.
Restart behavior
A complete app restart caused previously missing historical turns to become visible again. Three old turns that had appeared as items=0 were rebuilt with 119, 5, and 3 items respectively.
Any new turn sent after the restart immediately reproduced the same empty live projection.
This suggests:
- startup/history reconstruction from canonical JSONL works;
- real-time event ingestion or incremental thread projection does not;
- alternatively, a live cursor/result-index snapshot is not being invalidated after completion.
Additional evidence
Three earlier affected turns each produced complete assistant output in JSONL:
- 11,887 characters; first token after 21,046 ms
- 8,359 characters; first token after 17,385 ms
- 8,356 characters; first token after 9,448 ms
All had valid task_complete records but were absent from the live projection before restart.
What this is not
- Not a model no-response: complete assistant outputs exist.
- Not a rate-limit failure.
- Not an approval wait.
- Not a Git/worktree failure.
- Not caused by tools: minimal reproductions used zero tools.
- Not specific to one old thread.
- Not fixed by updating or fully restarting the app.
Expected behavior
When a local turn reaches completed and its canonical rollout contains a completed assistant response_item and non-empty task_complete.last_agent_message, the incremental projection should expose that same assistant item without requiring an application restart.
If incremental projection cannot advance, Desktop should surface a synchronization error and rebuild from canonical history rather than reporting a successful but empty turn.
Impact
This is operationally dangerous for agentic orchestration because a completed task looks like a no-start. It can cause:
- duplicate retries;
- multiple conflicting outputs for the same logical event;
- unnecessary Worker/Leader replacement;
- false stuck-state detection;
- incorrect automation decisions.
Temporary workaround
Treat the session JSONL as authoritative and only classify a true no-start when both are true:
- no assistant
response_itemexists for the turn; and task_complete.last_agent_messageis empty or absent.
An empty Desktop projection alone is not treated as evidence of failure. Orchestration is deduplicated by (thread_id, turn_id).
Requested diagnostics/recovery
Please consider:
- detecting live projection/cursor divergence and automatically replaying from canonical JSONL;
- a supported projection-only rebuild command that preserves sessions, worktrees, automations, and Git state;
- Windows documentation for Desktop/app-server projection logs;
- a
codex doctorcheck comparing rollout tail, projection cursor, projected turn/item counts, and completion metadata.
Possibly related, but not duplicates
- #40014 — completed answer visible in Desktop UI while
read_threadreturnsitems: []. Here both Desktop UI and the structured thread projection omit the answer, while JSONL contains it. - #38792 — desynchronized
thread_historyprojection cursors are not repaired on resume. - #35746 — paginated history drops valid rollout records and advances projection state incorrectly.
- #40151 — Windows Desktop misses a persisted transcript interval during live execution.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the completed zero-tool turn and compare the live Desktop/thread projection with the canonical JSONL under %USERPROFILE%.codex\sessions. Trace the real-time ingestion, incremental projection, cursor synchronization, and local result-index update paths, using the listed related issues for context. Done means completed assistant items and last_agent_message appear without restart, or divergence triggers a canonical-history rebuild or clear synchronization error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100