Fix sending messages during active turns#3919
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 9361c84. Configure here.
ApprovabilityVerdict: Approved Straightforward bug fix that adds tracking for the latest user message ID to properly acknowledge steering messages during active turns. The change is self-contained with clear intent, good documentation, and comprehensive test coverage. You can customize Macroscope's approvability policy. Learn more. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9361c84e3b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
For those who also come across this issue/waiting for it to be merged, a current workaround you can do is swap to a different thread, then come back to the broken thread and you're able to send messages again |
* Fix dropped events during initial thread snapshot (pingdotgg#4079) * [codex] fix mobile composer Enter behavior (pingdotgg#3930) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * feat: draft hero landing on the index route (pingdotgg#4055) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * feat: file explorer mention actions and zoom-aware context menus (pingdotgg#4054) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): avoid duplicate mention text on paste Co-authored-by: codex <codex@users.noreply.github.com> * fix(mobile): restore iOS home screen branding (pingdotgg#4025) Co-authored-by: Julius Marminge <julius0216@outlook.com> * perf(client): defer active thread cache writes (pingdotgg#4006) * Default diffs to working changes (pingdotgg#3974) Co-authored-by: Julius Marminge <julius0216@outlook.com> * Add Grok to marketing site provider list (pingdotgg#3484) * Fix reopening existing Diff tab (pingdotgg#3973) Co-authored-by: Julius Marminge <julius0216@outlook.com> * Fix sending messages during active turns (pingdotgg#3919) Co-authored-by: Julius Marminge <julius0216@outlook.com> * [codex] Route OpenCode missing-session errors through Effect (pingdotgg#3608) Co-authored-by: Codex <codex@openai.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * [fix/feat:ui] Show default option badge (pingdotgg#3232) Co-authored-by: Julius Marminge <julius0216@outlook.com> * [fix/feat:ui] Preserve open-in editor brand colors (pingdotgg#3225) Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(web): handle macOS Home and End in composer (pingdotgg#2508) Co-authored-by: Julius Marminge <julius0216@outlook.com> * Allow failed remote environments to be removed (pingdotgg#4084) Co-authored-by: Julius Marminge <julius0216@outlook.com> * [codex] canonicalize client timestamps (pingdotgg#4112) * [fix/feat:ui] Make selected menu checks blue (pingdotgg#3234) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * fix(desktop): Validate WSL node version against engine range after probe success (pingdotgg#3621) Co-authored-by: Julius Marminge <julius0216@outlook.com> * Refresh splash screen and favicon branding (pingdotgg#4120) * Add terminal selection copy action (pingdotgg#2904) * fix(sync): reconcile upstream changes with fork-local behaviour Two merge-introduced incompatibilities from the 20260719 upstream sync: - Normalizer: upstream's client-timestamp canonicalization (da3c203) rewrote bootstrap.createThread.createdAt, which BootstrapTurnStartDispatcher uses to fingerprint a replayed bootstrap turn against the thread it already created. Every retry would miss that check and create a duplicate thread. Keep the client's bootstrap timestamp as the stable identity; the turn-level createdAt is still canonicalized. - ThreadTerminalDrawer: upstream's terminal selection copy action (1735e27) passed a Terminal to writeSystemMessage, which this fork narrowed to accept a TerminalWriteQueue. Use terminalWriterRef, matching the other call sites. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Ishan <ishansachu1@gmail.com> Co-authored-by: Maxwell Young <maxtheyoung@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: Chris Michael Guzman <67719167+Chrrxs@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Aditya Mer <101453576+Aditya190803@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: Codex <codex@openai.com> Co-authored-by: ss <69873514+sandersonstabo@users.noreply.github.com> Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com> Co-authored-by: Noah Zepner <noah@zepner.dev> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: wizzoapp[bot] <254688279+wizzoapp[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit d8b12ae)
…ngdotgg#4055–pingdotgg#4164) (#175) * feat: draft hero landing on the index route (pingdotgg#4055) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> (cherry picked from commit 1bd2fa2) * feat: file explorer mention actions and zoom-aware context menus (pingdotgg#4054) Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit 4cfec8c) * fix(web): avoid duplicate mention text on paste Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 2318e00) * Default diffs to working changes (pingdotgg#3974) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit 38e0bb0) * Fix reopening existing Diff tab (pingdotgg#3973) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit 31caa56) * Fix sending messages during active turns (pingdotgg#3919) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit d8b12ae) * [fix/feat:ui] Show default option badge (pingdotgg#3232) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit c0e161a) * [fix/feat:ui] Preserve open-in editor brand colors (pingdotgg#3225) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit e63403f) * fix(web): handle macOS Home and End in composer (pingdotgg#2508) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit b859a57) * Allow failed remote environments to be removed (pingdotgg#4084) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit 0506508) * [fix/feat:ui] Make selected menu checks blue (pingdotgg#3234) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 5c66110) * Add terminal selection copy action (pingdotgg#2904) (cherry picked from commit 1735e27) * fix(web): improve dev sidebar backdrop contrast & remove version pills (pingdotgg#4166) (cherry picked from commit b511227) * Fix draft banner stack overlap (pingdotgg#4164) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 7e1a0d5) --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: ss <69873514+sandersonstabo@users.noreply.github.com> Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com> Co-authored-by: Noah Zepner <noah@zepner.dev> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: maria <maria@kuuro.net>
…ngdotgg#4055–pingdotgg#4164) (#175) (#177) * feat: draft hero landing on the index route (pingdotgg#4055) (cherry picked from commit 1bd2fa2) * feat: file explorer mention actions and zoom-aware context menus (pingdotgg#4054) (cherry picked from commit 4cfec8c) * fix(web): avoid duplicate mention text on paste (cherry picked from commit 2318e00) * Default diffs to working changes (pingdotgg#3974) (cherry picked from commit 38e0bb0) * Fix reopening existing Diff tab (pingdotgg#3973) (cherry picked from commit 31caa56) * Fix sending messages during active turns (pingdotgg#3919) (cherry picked from commit d8b12ae) * [fix/feat:ui] Show default option badge (pingdotgg#3232) (cherry picked from commit c0e161a) * [fix/feat:ui] Preserve open-in editor brand colors (pingdotgg#3225) (cherry picked from commit e63403f) * fix(web): handle macOS Home and End in composer (pingdotgg#2508) (cherry picked from commit b859a57) * Allow failed remote environments to be removed (pingdotgg#4084) (cherry picked from commit 0506508) * [fix/feat:ui] Make selected menu checks blue (pingdotgg#3234) (cherry picked from commit 5c66110) * Add terminal selection copy action (pingdotgg#2904) (cherry picked from commit 1735e27) * fix(web): improve dev sidebar backdrop contrast & remove version pills (pingdotgg#4166) (cherry picked from commit b511227) * Fix draft banner stack overlap (pingdotgg#4164) (cherry picked from commit 7e1a0d5) --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: ss <69873514+sandersonstabo@users.noreply.github.com> Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com> Co-authored-by: Noah Zepner <noah@zepner.dev> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: maria <maria@kuuro.net>

What changed
Why
Messages sent while an agent was already working remain on the current turn. The composer only recognized server acknowledgment when turn metadata changed, so its local sending state could remain stuck until the thread was remounted by navigating away and back.
This change also treats the newly projected user message as acknowledgment, allowing subsequent steering messages without thread navigation.
Validation
pnpm exec vp test apps/web/src/components/ChatView.logic.test.tspnpm exec vp checkpnpm exec vp run typecheckNote
Fix message sending during active turns by recognizing steering messages as server acknowledgment
hasServerAcknowledgedLocalDispatchnow returnstrueduring a running turn when the latest user message ID changes, treating a projected steering message as server acknowledgmentLocalDispatchSnapshotgains alatestUserMessageIdfield, captured viafindLastover messages withrole === 'user'at snapshot creation timeChatView.useLocalDispatchStatepasses the currentlatestUserMessageIdinto the acknowledgment check, clearingactiveLocalDispatchand unblockingisSendBusysooner when a steering message appearsMacroscope summarized d84bb40.
Note
Low Risk
Targeted chat UI state logic with unit tests; no auth, data, or API surface changes.
Overview
Fixes the composer staying in a Sending / busy state when users send steering messages while a turn is already running.
Local dispatch acknowledgment now records the latest user message id in
LocalDispatchSnapshotand passes the live id fromuseLocalDispatchState. During the running phase,hasServerAcknowledgedLocalDispatchtreats a change in that id as server acknowledgment—even when turn metadata is unchanged—soactiveLocalDispatchclears andisSendBusyrecovers without navigating away.Regression coverage adds the steering-on-current-turn case in
ChatView.logic.test.ts.Reviewed by Cursor Bugbot for commit d84bb40. Bugbot is set up for automated code reviews on this repo. Configure here.