macOS: completed long Goal task resumes with markedStreaming=true and persistent Stop button
<!-- Title: macOS: completed long Goal task resumes with markedStreaming=true and persistent Stop button -->
Description
The Stop button remains visible in one completed Codex task even when nothing
is running. Fully quitting and restarting the desktop app does not clear it.
This task had completed a roughly four-hour working session with an active
Goal. The Goal completed successfully and was automatically cleared. This has
not happened with any other Goal or task.
Observed sequence
- Run a Codex task with a Goal for roughly four hours.
- Allow the Goal and its final turn to complete successfully.
- Confirm that the Goal is automatically cleared.
- Fully quit the desktop app with
Cmd+Q. - Reopen the app and return to the completed task.
- Observe the composer before submitting another message.
This sequence has not reproduced the problem with any other Goal. The issue has
only occurred in this specific task after its roughly four-hour session, so
these are the observed conditions rather than a deterministic reproducer.
Actual behavior
The composer displays the Stop button even though the task has no running Goal,
turn, terminal, or recorded command process. The button remains after a
complete application restart.
Read-only local diagnosis
The desktop startup log records this successful resume event for the affected
task:
2026-07-27T10:42:18.313Z
maybe_resume_success
latestTurnId=019fa328-ab55-7f82-be9d-4b6d4b0a3f8e
latestTurnStatus=completed
markedStreaming=true
The completed backend state and streaming marker therefore disagree in the
same resume event. Separate read-only checks found:
- no active Goal;
- no attached terminal;
- every turn before the next submitted message was completed;
- none of the command-process IDs recorded for this task still existed.
This suggests that desktop resume or hydration restores a stale streaming state
after the latest turn has already completed.
Expected behavior
The composer should display the Send button whenever the task has no active
turn. Restoring a completed task after an application restart should not retain
stale running-state UI.
Scope
- Reproduces in one long-running task only.
- Has not occurred with any other Goal or task.
- The affected task remains the only known occurrence.
- Task ID:
019f9b08-b2fc-7902-a462-af168f600607
Environment
- Codex desktop version:
26.721.41059 (5848) - macOS:
26.5.2 (25F84) - Architecture: Apple Silicon (
arm64) - First observed: July 27, 2026, approximately 5:56 AM CDT
Related reports
- #35099 reports the same completed-task and persistent-Stop mismatch after a
restart on Windows.
- #24467 reports
latestTurnStatus=completedwithmarkedStreaming=trueafter
resuming long macOS threads.
- #34026 reports completed backend turns remaining visually active after
desktop state restoration on Windows.
- #24287 reports broader macOS session and Goal state desynchronization.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
This is on macOS, so maybe it warrants it's own ticket. The other potential duplicate tickets are for Windows.
Additional macOS reproduction on a newer Desktop build.
Environment
26.721.81911(build5973)26.3(25D125)arm64)User-visible behavior
This has occurred repeatedly, not just once in a single task:
Read-only state comparison
A cross-thread status read reported the affected task as idle, with its latest turn completed successfully. The Desktop renderer log nevertheless recorded the following for the same task:
Around turn completion, both the primary renderer and the avatar overlay also logged:
No raw logs are attached because they contain local paths and conversation data. Thread IDs, item IDs, project names, and user paths are intentionally omitted.
Expected behavior
When the latest backend turn is
completedand the task is idle, Desktop resume/hydration should clear the streaming marker and immediately enable the composer. Recovery should not require quitting the entire app, especially when unrelated local tasks are still running.Additional reproducible variant affecting both Codex Desktop and the Codex VS Code extension, with a reliable workaround.
Environment
26.727.51351(build6119)26.727.4081626.5.2(build25F84)arm64)Observed behavior
After a long Goal finished, the same thread continued to show the
Pursuing goalbanner and its Edit / Pause / Clear / Show full goal controls in both Codex Desktop and the VS Code extension.Read-only checks disagreed with the UI:
get_goalresult wasgoal: null;goals_1.sqlitedatabase had no rows inthread_goals;Clicking the banner's
Clear goalcontrol did not remove it while a response was active. The composer-level Clear control also had no effect. Reloading the VS Code window did not clear the banner, and the same stale Goal state remained visible across both clients.Reliable workaround
finalizar).The original Goal objective, thread IDs, local paths, and conversation contents are intentionally omitted.
Why this seems useful
Editing the objective appears to force a Goal-state write/rehydration that makes Clear work again. Because the same stale banner was visible in Desktop and VS Code while the Goal database was already empty, this looks like a shared thread/Goal hydration mismatch rather than only a renderer cache problem.
Expected behavior
get_goalis null.Clear goalshould be idempotent and remove stale UI state even when no backend Goal row exists.Additional macOS reproduction on a newer Desktop build, with a paused (not completed) Goal and a sanitized read-only state correlation.
Environment
26.803.41515(build6321)15.5(build24F74)arm64)Observed behavior
A long-running Goal had accumulated
3h 23m 49sof active Goal time. I clicked Pause, then clicked the composer-level Stop button. After more than 60 seconds:Paused;The inconsistent state survived Desktop process restart/resume.
Sanitized read-only diagnosis
I correlated the affected thread using its persisted paused Goal state and the exact Goal duration visible in the UI. No thread IDs, project names, paths, prompts, file contents, or raw logs are included below.
The persisted Goal row reported:
The sanitized rollout/Desktop timeline was:
After that
task_started, the rollout contains notask_complete,turn_aborted, or turn-levelerror. All inspected visible tool calls before the stall had completed. Around the pause/Stop action, the Desktop log contains the Goal-state update but no correspondingturn/interruptentry.This suggests that the Goal pause was persisted successfully, but the in-progress turn was neither interrupted nor reconciled. On resume/hydration, Desktop continued restoring the stale turn as
inProgresswithmarkedStreaming=true.Expected behavior
This appears closely related to the original completed-Goal report, but the distinguishing variant is: the Goal is persistently paused, while its old turn remains in-progress/streaming and cannot be stopped.