Windows Desktop 26.818.8289.0: live projection drops completed assistant output present in JSONL

Open 💬 4 comments Opened Aug 25, 2026 by a546er729TSJ
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

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.exe file 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:

  1. event_msg.task_started
  2. a response_item containing the assistant output
  3. event_msg.task_complete
  4. 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

  1. Open an existing local Codex task.
  2. Send a zero-tool prompt requiring one exact short response.
  3. Wait for the turn to reach completed.
  4. Inspect the Desktop task and structured thread result.
  5. Observe itemCount=0 and no assistant message.
  6. Inspect the matching JSONL under %USERPROFILE%\.codex\sessions.
  7. Observe the complete assistant response_item and non-empty task_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:

  1. no assistant response_item exists for the turn; and
  2. task_complete.last_agent_message is 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 doctor check 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_thread returns items: []. Here both Desktop UI and the structured thread projection omit the answer, while JSONL contains it.
  • #38792 — desynchronized thread_history projection 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.

View original on GitHub ↗

4 Comments

github-actions[bot] contributor · 3 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #40151

Powered by Codex Action

a546er729TSJ · 3 days ago

I reviewed #40151. It appears related, but it does not match this failure mode.

  • #40151 is a long-running Goal/compaction case where Desktop stops appending a middle interval and later resumes showing a new suffix without backfilling the gap. That report explicitly uses legacy history with no projection ordinals.
  • #40512 reproduces on zero-tool, exact short-response turns, including a fresh task. The entire completed turn is projected as items=[], with no latest assistant message, even though the canonical JSONL contains the assistant response_item and non-empty task_complete.last_agent_message.
  • A full restart rebuilds the previously missing completed turns from JSONL, but the very next live turn immediately reproduces the empty projection. This is a repeatable cold-rebuild/warm-incremental failure, not a one-time missing interval around compaction.

#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.

nos1609 · 2 days ago

Additional sanitized Remote SSH-backed variant.

Observed on the current 0.149.x line through Windows Codex Desktop with a Linux-backed task:

  • the Desktop UI shows the affected turns as empty;
  • a fresh paginated read_thread returns the same turns with status=completed and items=[];
  • one page contains seven completed empty turns and two interrupted empty turns;
  • the completed empty turns have nonzero durations ranging from 35.6 seconds to 7,519.2 seconds (about 2 hours 5 minutes);
  • adjacent turns in the same task return large, normal item collections, so the reader is not globally unable to read the task.

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.

nos1609 · 1 hour ago

Additional sanitized evidence from the same Remote SSH-backed failure class, now narrowed to the Windows Desktop host projection.

Environment:

  • Windows Codex Desktop MSIX: 26.825.3734.0 (ARM64)
  • remote Codex CLI/app-server: 0.150.1
  • paginated remote task, idle after completion

Observed through the native Desktop connector:

  • the latest three completed turns are returned with exact turn metadata but items: [];
  • the immediately preceding completed turn returns 30 normal items;
  • repeated fresh read_thread calls return the same empty result.

Canonical and remote projection checks:

  • rollout size: 22,214,026 bytes, 2,469 valid JSONL records;
  • rollout ordinals are continuous from 0 through 2,468, with no duplicates or gaps;
  • the materialization cursor is exactly at EOF and the next expected ordinal is 2,469;
  • SQLite quick_check is ok;
  • the task projects 14 turns and 892 items;
  • the three affected turns contain 83, 68, and 8 projected items respectively;
  • each affected turn has a non-empty user message and final assistant message;
  • every stored summary item ID resolves to exactly one projected item.

Decisive protocol comparison:

Using the existing remote app-server connection without restarting or reindexing anything:

  1. thread/read(includeTurns: false)
  2. thread/turns/list(itemsView: "summary", sortDirection: "desc")

returned correct user and final assistant summaries for all three affected turns. Repeating thread/turns/list with itemsView: "full" returned the complete 83/68/8 item arrays.

The native Desktop read_thread still returned items: [] 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_thread immediately. 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.