Regression: Desktop 26.707 replays legacy thread history and emits 1,282 parse errors per page, freezing the Windows UI
Summary
Codex Desktop 26.707 on Windows becomes work-blocking after opening a large thread created by an earlier Desktop version.
The affected rollout contains legacy response_item/tool_search_output records with this shape:
{
"type": "tool_search_output",
"call_id": "<redacted>",
"status": "completed",
"execution": "<redacted>",
"tools_summary": {"omitted_tool_count": 1}
}
The current parser requires a tools field. Every history reconstruction emits one parse error for each legacy record. At the same time, each thread/turns/list request reconstructs the complete rollout instead of only the requested page. Background hydration therefore repeatedly parses the entire file, floods the trace database, raises app-server/renderer memory, and eventually makes the whole Desktop window nearly unresponsive.
This is a high-severity, work-blocking regression. Smaller control threads in the same profile remain responsive, and system RAM is not exhausted.
Environment
- Codex Desktop package:
26.707.3748.0 - Desktop client version in app-server traces:
26.707.31428 - Bundled Codex CLI:
0.144.0-alpha.4 - Windows 11 x64, build
22631 - Local Codex Home
- Thread was created and used across earlier Codex Desktop versions
Reproduction
- Use Codex Desktop 26.707 on Windows.
- Open a long thread created by an earlier version whose JSONL contains legacy
tool_search_output.tools_summaryrecords withouttools. - The recent tail appears first and the UI is initially responsive.
- Leave the thread open or scroll into older history.
- Desktop requests older pages through
thread/turns/list. - Observe that each page request reconstructs the complete rollout.
- During each reconstruction, app-server repeatedly logs
failed to parse rollout line: missing field \tools\``. - After hydration continues, scrolling, clicking, switching threads, and the entire Desktop window become extremely sluggish or unresponsive.
Sanitized measurements from one affected thread
- Rollout size:
228,385,027 bytes(about217.8 MiB) - JSONL records:
362,562 - Reconstructed rollout items:
361,280 - Legacy
tool_search_outputrecords usingtools_summary:1,281 - Legacy
thread_name_updatedevent rejected as an unknown variant:1 - Parse errors per complete reconstruction:
1,282 - Additional trace rows observed during a 10-second replay sample: about
1,960 - app-server working set observed: about
0.55-0.92 GiB - primary renderer working set observed: about
0.51-0.55 GiB logs_2.sqlite: about2.11 GiB- WAL: about
71.5 MiB - System still had more than 8 GiB free RAM, so this was not whole-system memory exhaustion
The same Codex Home was fully audited without loading all rollouts into memory: 302/302 registered thread files parsed as valid JSONL. Across those files, 1,348 legacy tools_summary records and 50 thread_name_updated events were found, which indicates this is a persisted-history compatibility issue rather than corruption of one file.
Sanitized trace pattern
app_server.client_version="26.707.31428"
rpc.method="thread/turns/list"
failed to parse rollout line: missing field `tools`
apply_rollout_reconstruction{
thread_id=<redacted>,
rollout_item_count=361280
}
Expected behavior
- Rollout parsing remains backward-compatible with legacy
tool_search_output.tools_summaryrecords. - Unknown historical event variants do not generate one error on every replay.
thread/turns/listreads or caches only the requested page instead of reconstructing the complete rollout for every page.- Hydration and rendering stay bounded for large threads.
- Repeated per-record parse errors are aggregated/rate-limited instead of expanding the trace DB indefinitely.
Related issues
- #25215: paginated
thread/turns/liststill replays the complete rollout - #32154: 26.707 Windows thread switching repeatedly reads history and stalls the UI
- #25390: severe sluggishness opening large local threads on Windows
- #21134: long threads increase app-server/renderer memory and log churn
- #31995: 26.707 history tail/pagination behavior
I did not attach the rollout, state database, trace database, or screenshots because they contain private prompts, local paths, and credentials. I can provide a synthetic legacy JSONL reproducer if maintainers specify the preferred format.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗