[Windows App 26.820.7780.0] Second manual message can freeze before turn/start after cross-task message injection
What version of the Codex App are you using?
- OpenAI.Codex:
26.820.7780.0 - Bundled app server:
codex-cli 0.150.0-alpha.8 - Chromium runtime:
151.0.7922.170
What platform are you using?
- Windows 11 Pro x64
- OS version:
10.0.26200(build26200)
What issue are you seeing?
A target task can become unable to submit its next manual composer message after it receives a message from another Codex task.
The cross-task message is delivered and rendered with the banner:
Sent by ChatGPT from another task
The target assistant can complete that turn normally. However, when the user types the next simple plaintext message in the target task and clicks Send, the Send button changes into a spinner/busy state and the UI becomes stuck. No new user turn appears and, critically, no corresponding app-server turn/start request is logged.
A full quit and relaunch of Codex Desktop restores the composer. The same manual follow-up then produces turn/start immediately.
This was encountered across three consecutive repair/validation attempts. Local inspection covered two prior repair tasks and the current reproduction. Earlier attempts incorrectly treated successful programmatic cross-task delivery as proof that the visible composer was fixed; it is not, because that path bypasses the failing renderer/composer submission path.
Steps to reproduce
- Start a source task in Codex Desktop.
- Create or open a separate local target task.
- From the source task, send a prompt to the target using the built-in task/thread messaging capability.
- Confirm that the target shows the cross-task banner and that the target assistant completes its reply.
- Focus the target task.
- Type a short plaintext follow-up in the visible composer, such as
second-round test. - Click Send.
- Observe that the Send control becomes a spinner/busy indicator, but the message is not submitted and no
turn/startis emitted. - Fully quit Codex Desktop and relaunch it.
- Return to the same task and send a short manual message again.
- Observe that submission now succeeds.
Evidence
On the affected pre-restart app session:
- The target task had events for the preceding turn, but the failed manual click did not add another
turn/start. - The renderer logged state-reconciliation failures such as:
Item not found in turn state
Dropping commandExecution/outputDelta for missing item
- Other recent affected sessions also contained:
Received turn/started for unknown conversation
Rebinding placeholder latest turn to incoming event
After a full quit/relaunch, without changing the persisted task corpus or performing the planned metadata cleanup:
2026-08-26T04:42:22.061Z method=turn/start durationMs=23 errorCode=null
2026-08-26T04:43:57.765Z method=turn/start durationMs=317 errorCode=null
Those were the second and third messages sent through the visible composer after restart.
Additional controls:
codex doctor --json --allreported authentication, network, WebSocket, and database-integrity checks healthy.- Programmatic cross-task delivery remained functional, which shows that the target thread and backend were reachable while the visible composer path was stuck.
- The persisted state was unchanged across the recovery restart. This points to stale in-memory renderer/turn ownership or composer state rather than a backend outage.
- The local corpus is large (approximately 1,090 active tasks, a 425.6 MB
logs_2.sqlite, and 7.3 GB of active rollout files). This may amplify the bug, but it is not a proven root cause: SQLite integrity was OK, and restart recovered submission without cleaning those files.
Task IDs, usernames, local paths, message contents, and raw logs are omitted for privacy. Sanitized excerpts can be provided if maintainers request them.
Expected behavior
- Receiving a cross-task message must not poison the target task's next manual composer submission.
- Clicking Send should either produce an authoritative
turn/startor return an actionable error and restore the composer; it must not remain indefinitely busy before app-server submission. - Renderer state should reconcile completed/incoming turns idempotently, including placeholder turns and events received for a task that is not currently focused.
- A full Desktop restart should not be required to send the next message.
Possibly related issues
- #24263 — renderer reload/rebind followed by
Item not found in turn state - #34255 — composer stops sending after switching among tasks
- #25779 — unbounded session/turn state meta issue
- #24287 — renderer loses active-turn/session state, though that report often involves prompts already accepted by the backend
This report is distinct because the failed click can be localized before turn/start, and the trigger involves a task that first received a message from another task.
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Update: full local-state repair succeeded, but the composer failure still reproduces
This rules out the previously suspected metadata/log bloat as the primary cause.
Maintenance completed successfully
A manual foreground repair was run with Codex and app-server fully exited. It created a timestamped backup, completed the repair, ran a post-repair report, and checked SQLite integrity.
Before → immediately after repair:
thread_metadata_repair_candidates: 378 → 0thread_titles_over_limit: 375 → 0thread_first_user_message_over_limit: 376 → 0logs_mb: 425.6 → 0.0 (the old log database was moved to the recoverable log archive)state_5.sqliteintegrity: okstate_5.sqliteintegrity: okNo sessions, projects, worktrees, or authentication data were removed or archived.
After relaunch and a small amount of new activity, the local report remained small/healthy relative to the pre-repair state:
logs_mb: 5.4Failure still reproduces
Despite the successful cleanup, the next manual composer message in the affected task still could not be sent. The user had to use cross-task delivery again to report the failure; that fallback must not be treated as evidence that the visible composer works.
The fresh renderer log after the cleanup/relaunch again contains conversation-registration desynchronization:
During the reported failed manual-click window, no additional target
turn/startappeared. Subsequent cross-task fallback delivery did produce a normalturn/startin about 28 ms, confirming that the app-server/backend path remained reachable while the visible composer path was unusable.Updated conclusion
Large local metadata and the 425.6 MB log database were real maintenance issues, but they were not the root cause of this second-message submission failure. The remaining evidence points to a renderer-side conversation registration / turn ownership / reconciliation bug triggered around incoming cross-task/delegated turns. A local database cleanup is not an effective workaround.
Raw logs, task IDs, local paths, and private transcripts remain omitted. Sanitized bounded excerpts can be provided if needed.