[Windows App 26.820.7780.0] Second manual message can freeze before turn/start after cross-task message injection

Open 💬 2 comments Opened Aug 26, 2026 by ashjo42
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

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 (build 26200)

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

  1. Start a source task in Codex Desktop.
  2. Create or open a separate local target task.
  3. From the source task, send a prompt to the target using the built-in task/thread messaging capability.
  4. Confirm that the target shows the cross-task banner and that the target assistant completes its reply.
  5. Focus the target task.
  6. Type a short plaintext follow-up in the visible composer, such as second-round test.
  7. Click Send.
  8. Observe that the Send control becomes a spinner/busy indicator, but the message is not submitted and no turn/start is emitted.
  9. Fully quit Codex Desktop and relaunch it.
  10. Return to the same task and send a short manual message again.
  11. 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 --all reported 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/start or 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.

View original on GitHub ↗

2 Comments

github-actions[bot] contributor · 2 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #39513

Powered by Codex Action

ashjo42 · 2 days ago

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 → 0
  • thread_titles_over_limit: 375 → 0
  • thread_first_user_message_over_limit: 376 → 0
  • extended-path rows: 22 rollout paths / 3,706 cwd rows → 0
  • logs_mb: 425.6 → 0.0 (the old log database was moved to the recoverable log archive)
  • active thread rows: 1,092 → 1,092
  • active session size: 7.358 GB → 7.358 GB
  • archived session size: 70.115 GB → 70.115 GB
  • session and worktree archive candidates during apply: 0
  • backup state_5.sqlite integrity: ok
  • repaired live state_5.sqlite integrity: ok

No 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:

  • metadata repair candidates: 2
  • logs_mb: 5.4
  • SQLite remained readable

Failure 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:

Received turn/started for unknown conversation
Received turn/completed for unknown conversation

During the reported failed manual-click window, no additional target turn/start appeared. Subsequent cross-task fallback delivery did produce a normal turn/start in 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.