Windows Desktop 26.818.8289.0: live projection drops completed assistant output present in JSONL
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.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I reviewed #40151. It appears related, but it does not match this failure mode.
items=[], with no latest assistant message, even though the canonical JSONL contains the assistantresponse_itemand non-emptytask_complete.last_agent_message.#40014 is closer because it also involves a completed turn returning
items: []. The important distinction is that #40014 reports the full assistant answer remains visible in the Desktop UI, while in #40512 the Desktop-visible/thread result is also missing until restart; only the canonical JSONL contains the completed output.I’m therefore keeping this issue open unless maintainers determine that these symptoms share the same underlying bug.
Additional sanitized Remote SSH-backed variant.
Observed on the current 0.149.x line through Windows Codex Desktop with a Linux-backed task:
read_threadreturns the same turns withstatus=completedanditems=[];This differs from #40014, where the assistant answer remains visible in the UI while only the structured reader is empty. In this occurrence both user-visible UI and structured projection are empty.
Evidence boundary: the canonical rollout on the remote host was not inspected through a shell in this pass, so I am not claiming yet that each affected turn contains a persisted final assistant item. The confirmed result is the repeated completed/nonzero-duration turn metadata paired with an empty UI and empty structured projection.
Project names, prompts, local paths, hostnames, IP addresses, account data, and task/turn IDs are omitted.
Additional sanitized evidence from the same Remote SSH-backed failure class, now narrowed to the Windows Desktop host projection.
Environment:
26.825.3734.0(ARM64)0.150.1Observed through the native Desktop connector:
items: [];read_threadcalls return the same empty result.Canonical and remote projection checks:
quick_checkisok;Decisive protocol comparison:
Using the existing remote app-server connection without restarting or reindexing anything:
thread/read(includeTurns: false)thread/turns/list(itemsView: "summary", sortDirection: "desc")returned correct user and final assistant summaries for all three affected turns. Repeating
thread/turns/listwithitemsView: "full"returned the complete 83/68/8 item arrays.The native Desktop
read_threadstill returneditems: []for those exact turns immediately afterward.This places the failure downstream of canonical rollout persistence, SQLite materialization, the remote app-server pagination implementation, and the custom MCP bridge. The remaining failing boundary is the Windows Desktop host projection / native connector snapshot.
An apparent cutoff near rollout ordinal 2,000 was incidental: direct app-server summary and full reads both work beyond that ordinal, so this is not a canonical 2,000-item limit.
No rollout, database, task metadata, or process state was modified. Project names, prompts, task/turn IDs, paths, hostnames, addresses, account data, and credentials are omitted.
Recovery control
A full exit and restart of Windows Codex Desktop restored the same native
read_threadimmediately. The four latest completed turns then returned 83, 68, 8, and 30 items respectively; every turn contained both its user message and final assistant message.No remote app-server, rollout, SQLite, task metadata, or configuration was changed between the failing read and the successful post-restart read. This confirms a warm Windows Desktop projection/cache failure and establishes a full Desktop restart as a temporary recovery path.