Repository navigation
Codex Desktop Remote Control transcript remains partial after sequence gap despite complete canonical history #35727
Description
App version
- Viewer Mac: Codex App
26.721.41059(bundle5848) - Host Mac: Codex App
26.721.41059(bundle5848) - Connection: macOS Codex Desktop to macOS Codex Desktop through Remote Control
Issue
A remote task continues normally on the host and reaches completion, but the viewer Mac shows only an early portion of the streamed transcript. The viewer pane never appends the remaining progress or final response, even though canonical thread history on the host contains the completed turn.
In one reproduced incident on 2026-07-28:
- Approximately 03:28 UTC: the remote turn began.
- Approximately 03:37 UTC: the viewer detected a Remote Control sequence gap.
- Approximately 04:00 UTC: the host completed the turn normally.
- After completion: canonical thread history returned the complete final response, while the viewer pane remained partial.
The host app-server stayed running. Both devices used the same Codex build, so this does not appear to be version skew.
Minimal reproduction
- Connect from one Mac running Codex Desktop to another Mac through Remote Control.
- Start a sufficiently long or event-heavy task on the host and keep its task pane open on the viewer.
- Allow a brief relay/WebSocket interruption or sequence gap to occur while the turn is streaming.
- Observe that the host continues executing and eventually completes.
- Observe that the viewer transcript stops at an earlier point and does not receive the remaining progress or final response.
- Read the completed turn from canonical thread history and confirm that the missing final content was persisted on the host.
Expected behavior
After a sequence gap or reconnect, the viewer should rehydrate the active turn from canonical history and then resume live deltas. A completed host turn should always become complete in the viewer pane.
Actual behavior
The viewer reconnects, but its renderer can retain an incomplete turn. Logs then contain missing-state errors and later output deltas are dropped. The visible transcript remains permanently partial even after the host completes.
Sanitized evidence
Across the examined 2026-07-27 to 2026-07-28 window for the affected host connection, the viewer recorded:
- 24 sequence-gap events
- 26 pong timeouts
- 6 unknown-stream events
Relevant viewer-log strings:
remote control app-server stream sequence gap detected
remote control app-server stream became unknown
Synthesizing missing turn
Item not found in turn state
outputDelta for missing item
The evidence supports, but does not conclusively prove, this recovery failure: after a gap or reconnect, incremental renderer state is incomplete; later events refer to missing turns/items and are discarded. A robust recovery path would replace or reconcile the active renderer turn from canonical thread/read state before processing more deltas.
Potentially related issues
- macOS Codex App repeatedly resets healthy Remote Control streams with "stream became unknown" and sequence gaps #32241 reports the same recurring
stream became unknownandsequence gap detectedRemote Control resets. This report adds the persistent post-reconnect transcript-hydration failure despite complete canonical history. - macOS remote control stalls: host app-server responsive but remote manager stays disconnected #23482 reports Remote Control state-propagation problems and unknown-conversation events while the host app-server remains responsive.
No transcript bodies, prompts, project or personal names, local paths, account or host identifiers, thread or turn identifiers, task URLs, credentials, tokens, or raw logs are included.
Activity
github-actions commentedon Jul 28, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
jonathanli12 commentedon Jul 28, 2026
Additional sanitized evidence from the representative reconnect:
previousStreamingCount=11,previousRoleCount=5, andmarkedCount=5, so only a subset of tasks previously considered streaming were marked as needing resume.thread/read/thread/resumepath for the current route and reported reconnect recovery done.This does not prove the subset-marking logic is the sole cause, but it narrows the likely failure boundary: reconnect recovery can report success without replacing all stale renderer turn/item state from canonical history.
hd2210 commentedon Oct 12, 2026
I can reproduce what appears to be the same Remote Control streaming/synchronization issue in a Mac-to-Mac setup.
Environment
26.1007.30912on both MacsSymptoms
This is reproducible and significantly affects long-running tasks.
Diagnostic findings
I examined both the Codex app-server SQLite logs and the Codex Desktop application logs.
The client-side Desktop logs contain repeated occurrences of:
SEQUENCE_GAPUNKNOWN_CONVERSATIONTRANSPORT_CLOSEDCONNECTION_FAILEDWEBSOCKET_ERROR4000There were multiple clusters of sequence-gap errors, along with repeated WebSocket and transport failures.
The Rust-side app-server logs also showed intermittent remote-control WebSocket disconnections, including:
And reconnection failures such as:
These Rust-side connection errors were observed on the MacBook Air, although they may relate to its own Remote Control host connection rather than the client-side subscription to the Mac mini.
Troubleshooting performed
26.1007.30912).Suspected issue
The behavior suggests that the remote event stream may be interrupted or develop a sequence gap, and the client does not reliably recover its live subscription afterward.
The fact that reopening the session immediately restores the complete output suggests that the host-side execution and persisted conversation state remain intact, while the client-side live synchronization becomes stale.
I cannot yet determine whether the initial interruption is caused by the network/proxy or the Remote Control transport itself. However, the failure to recover live updates appears to be an important part of the issue.
Expected behavior
Remote Control should automatically reconnect, recover any missing events, and continue streaming new output without requiring the user to manually leave and reopen the session.
Is this a known issue in build
26.1007.30912? Are there any workarounds or additional diagnostics that would help identify why live event synchronization fails to recover?I can provide additional sanitized logs or perform targeted tests if needed.