VS Code extension queued follow-up messages sometimes disappear before transcript delivery
What happened?
In the Codex VS Code extension, follow-up messages queued while Codex is actively working sometimes disappear before they are delivered to the chat transcript.
From the user side, the composer accepts the message and appears to queue it, but the message later vanishes. The message never appears in the transcript, and the agent does not receive it.
This happened multiple times in one session. It occurred both when pressing Enter and when clicking the Send button, so it does not appear to be limited to keyboard handling.
Expected behavior
Queued follow-up messages should persist and be delivered on the next turn, or the UI should show an explicit failure without clearing the draft.
Actual behavior
The queued message sometimes disappears and never appears in the transcript. In some cases, a later queued message appears to overwrite or replace the previous queued message; in other cases, queued messages append as expected.
Relevant logs
From the Codex extension log:
2026-07-04 20:17:43.880 [warning] [IpcClient] Received broadcast but no handler is configured method=thread-queued-followups-changed
2026-07-04 20:17:43.924 [warning] [queued-followups] Failed to release send lock conversationId=019f2ead-049d-7813-8cf3-12485edd7d7d error={}
The logs also show many repeated warnings like:
[IpcClient] Received broadcast but no handler is configured method=thread-stream-state-changed
And extension-host errors earlier in the same session:
PendingMigrationError: navigator is now a global in nodejs
TypeError: this.diffPanel.dispose is not a function
Error: Channel has been closed
Environment
- Codex VS Code extension:
openai.chatgptversion26.623.101652 - Display name:
Codex – OpenAI’s coding agent - Codex CLI:
codex-cli 0.142.5 - VS Code remote/server setup
- Remote extension host platform: Linux x64
- Client target platform seen in logs:
win32-x64 - Extension setting defaults from package metadata:
chatgpt.followUpQueueMode:queuechatgpt.composerEnterBehavior:enter
Workaround
Avoid queued follow-ups and use steering instead. Setting chatgpt.followUpQueueMode to steer appears like the safest workaround because the issue seems tied to the queued-followups path.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional extension evidence supporting the send-lock/broadcast theory:
1.130.0-insider26.715.31925chatgpt.followUpQueueMode = "queue"At
2026-07-22 07:24:54 UTC, a queued follow-up disappeared from the extension, but core received the identical message three times with distinct turn IDs within 32 ms. The prior turn was still running, and all three duplicates completed; there was no failed submission or aborted turn.This suggests stale queue consumers can replay the same message after the temporary send lock is released because successful delivery is not durably recorded.
I downloaded today’s official extension update,
26.715.61943, and compared the relevant implementation. Its enqueue, owner/follower broadcast, send-lock, and post-send removal logic is semantically unchanged from26.715.31925; I found no fix there.Suggested fix: app-server-owned atomic claim-and-consume, idempotent
turn/startkeyed by(threadId, queuedMessageId), revisioned broadcasts, and composer clearing only after durable acknowledgement.Related: [#34599](https://github.com/openai/codex/issues/34599), [#34021](https://github.com/openai/codex/issues/34021).
I’m seeing the same behavior: a follow-up submitted during an active turn can clear from the composer without remaining visible or being reliably processed.
The uncertainty materially increases usage consumption. Users must resend missing instructions and repeat affected work, while prompts that arrive late can trigger duplicate processing and consume additional quota.
Confirming this on VS Code 1.132.0, Linux x64 under WSL2.
This is user-input data loss in the primary instruction channel, not a cosmetic queue glitch. While Codex is working, the composer visibly accepts a follow-up message and clears it, but the message can then disappear completely: it is absent from the transcript, absent from the queue, never acknowledged, and never received by the agent.
This workflow previously allowed follow-up messages to stack reliably. It now fails often enough that the only safe workaround is to wait for the agent to finish or copy every message before submitting it. That defeats one of the central benefits of an agentic coding interface: correcting, steering, and extending the work while it is underway.
A submitted instruction needs a durable, visible delivery state:
Reproduction:
Silently destroying instructions after presenting submission as successful violates the most basic contract of a chat interface. It wastes the user's work, can make Codex perform the wrong changes, and forces users to distrust every mid-run submission. This should be treated as a high-severity reliability defect.
Additional Windows reproduction with an owner/follower transition after an IPC reset.
Environment:
Observed behavior:
Sanitized diagnostic timeline:
owner.follower; a different/stale client remained registered as the owner.[IpcClient] Received broadcast but no handler is configured method=thread-queued-followups-changedPersistence checks:
user_message, user-role message, steer event, or turn input.This suggests that after the renderer reconnects as a follower, the UI can clear the composer and mutate the follow-up queue without successfully forwarding the message to the owner or preserving it for later delivery.
Expected behavior: