Problem
OpenCodex initially matches the running and unread indicators shown by Codex Desktop, but the browser state drifts after additional turns. Some still-running tasks lose their running indicator, and unread blue dots can disagree with Desktop.
This status is used to decide whether a task is complete, so delayed updates are acceptable but false idle/running results are not. Requiring Codex Desktop to start with a CDP debugging port is also not an acceptable runtime dependency.
Reproduction
- Open the same task list in Codex Desktop and OpenCodex.
- Start or continue several tasks and confirm the initial running indicators match.
- Continue conversations in Codex Desktop so the sidebar catalog hydrates additional pages and receives more status events.
- Compare the browser sidebar with Desktop again.
The browser gradually loses some running indicators or unread state while Desktop remains correct.
Root causes
- A paginated sidebar catalog was treated as a complete snapshot, so omitted threads were unsubscribed.
- App-host
thread/status/changed values could overwrite more reliable persisted lifecycle evidence.
- Status replay could occur before the renderer finished hydrating its thread rows.
- Reused observer initialize request IDs could be deduplicated across restarts.
Expected behavior
- Running/idle state comes from persisted Codex transcript lifecycle evidence.
- Desktop read-state and the persisted unread atom remain authoritative for blue dots.
- Incomplete evidence is rendered as an explicit pending state, never assumed idle.
- Paginated catalogs retain existing subscriptions.
- Renderer hydration triggers targeted replay without requiring CDP.
Acceptance criteria
- Browser and Desktop converge on the same running and unread state after additional turns and reconnects.
- Unknown state may be delayed or pending, but must not be reported as a confirmed terminal state.
- No CDP launch flag or debugging port is required.
- Regression tests cover transcript restoration, pagination, status precedence, renderer-ready replay, unread state, and subscription lifecycle.
Problem
OpenCodex initially matches the running and unread indicators shown by Codex Desktop, but the browser state drifts after additional turns. Some still-running tasks lose their running indicator, and unread blue dots can disagree with Desktop.
This status is used to decide whether a task is complete, so delayed updates are acceptable but false idle/running results are not. Requiring Codex Desktop to start with a CDP debugging port is also not an acceptable runtime dependency.
Reproduction
The browser gradually loses some running indicators or unread state while Desktop remains correct.
Root causes
thread/status/changedvalues could overwrite more reliable persisted lifecycle evidence.Expected behavior
Acceptance criteria