Repository navigation
fix(agent-chat): a rejected queue Save hands its text back; Move and Resume catch rejections - #29595
Conversation
…Resume leave no unhandled rejection Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5de8df9724303a872254
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Passes: CI passes on CI passes on Written by web and size checks: green Shipped in:
|
|
Review (codex gpt-6.1-sol xhigh, next-review): BLOCK at 6ca0470 BLOCK at 6ca0470 Visual verdict: After/before gallery states and the PR screenshot match; no layout regressions.
|
|
Review (codex-review-box/gpt-6-astra high, lane-place on a fleet lane host; posted by the research overseer because the box host could not write to GitHub): SHIP at 6ca0470 SHIP at 6ca0470 Visual verdict: after screenshot reviewed; no repeated controls, bloated menu, or off-screen layout.
Follow-ups:
|
…tored; no fixed wait in the test Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5de8df9724303a872254
|
Review (codex-review-box/gpt-6-astra high, lane-place on a fleet lane host; posted by the research overseer because the box host could not write to GitHub): BLOCK at a6536dd BLOCK at a6536dd Visual verdict: BLOCK. Opened all 17 after screenshots. The queue follows ChatGPT’s compact composer pattern, but the subagent tray has repeated per-row controls.
No regression found in the changed rejection handlers. Tests could not run because Bun and dependencies are absent. |
|
Review (codex-review-box/gpt-6-astra high, lane-place on a fleet lane host; posted by the research overseer because the box host could not write to GitHub): BLOCK at 74ca67d BLOCK at 74ca67d Visual verdict: BLOCK — inspected all 17 after images against the compact ChatGPT/Claude composer pattern.
No additional defect found in the rejection-handling diff. Tests could not run because Bun is unavailable. |
|
Ruling on the BLOCK at 74ca67d (#29595 (comment)): it does not block this PR. Its one finding, This PR lands pinned to 74ca67d once its per-test webview verdict (web / react-apps-base-check) is green. |
|
Review (codex gpt-6-astra high, router-review): BLOCK at 74ca67d BLOCK at 74ca67d Visual verdict: All supplied before/after gallery renders match; no visible layout regressions.
|
…s the row's editor; only a gone row restores to the composer Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5de8df9724303a872254
|
Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 0e6a0b6 BLOCK at 0e6a0b6 Visual verdict: Reviewed all 16 gallery pairs and the PR screenshot; no visual regression.
Confirmed with a handler-level reproduction against base and head. Both changed files transpile; the Bun suite was unavailable locally. |
…an cannot reopen its text Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5de8df9724303a872254
|
Review (codex, router-review): SHIP at 6f6fb2b Reviewer: codex gpt-6.1-sol xhigh, fast tier. Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at 6f6fb2b Visual verdict: Reviewed the PR screenshot and all 16 gallery pairs; no new layout regression.
Both changed files parse. The Bun suite could not run because Bun and project dependencies are absent. Follow-ups:
|
…; drop the void on a void value Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5de8df9724303a872254
|
Review (codex gpt-6.1-sol xhigh via router-review, diff-scoped; posted by the research overseer because router-review's post timed out on GitHub): SHIP at 2b8ef43 SHIP at 2b8ef43 Visual verdict: before/after gallery pairs match; no repeated controls, bloated menus, or off-screen layouts.
Follow-ups:
|
Agent chat, waiting-prompt queue: the queue's edit calls go through
editQueued, which rejects when the bridge fails (not connected, timed out, a host refusal). Three call sites handled only afalseanswer:onLost, so the typed text was neither saved nor handed back, and the row reverted to the old text, with an unhandled rejection logged. Now: if the call failed before acpmux could have it (native.not_connected, a typed host refusal) the row is still queued, so its editor reopens with the typed text (restoring to the composer as well would show the prompt twice); if the row is gone by the time the queue next draws, the open editor hands the text back to the composer as it already does. Each row's latest Save is tracked: an older Save that fails after a newer Save of the same row began is ignored, so it cannot reopen superseded text (that stale editor would autosave the old text over the newer save when clicked away). If several Saves fail in one batch (one bridge reconnect) the first reopens its editor and claims it at once; the others wait, each keeping its own text, and reopen one at a time as each editor closes (a waiting row that has gone hands its text to the composer, and one saved again since is dropped). If acpmux answered no (the prompt already started) the text goes to the composer as before. After a timeout or a closed socket (native.timed_out,transport.closed,transport.stale_connection) the request may already be applied, so nothing is restored or reopened; the queue's next snapshot shows the truth..finallyon the call re-threw the rejection unhandled. Now it is caught.Tests (
ComposerQueue.test.tsx): a failed Save reopens the editor withfirst, rewordedfor not-connected and a typed refusal and restores nothing to the composer; a reopened editor hands the text back if the row is gone; a timeout or closed socket restores and reopens nothing; an answered-no still restores to the composer; none leaves an unhandled rejection (two macrotask turns, no fixed delay). The reopen tests fail against the previous behavior;bun test src/agent-session/acpmux/ComposerQueue.test.tsx: 35 pass (including overlapping saves with deferred promises: A pending, B saved, A rejects, B succeeds; and two saves failing in one batch),scripts/check-fixed-waits.ts0 on baseline.After (Linux gallery, Chromium, at the PR head), the composer with two queued prompts above the field:
Viewed the after image: the queue renders as before (two rows above the field, steer/queue hint, the controls row); the change is only in what happens when a queue call rejects.
Risk: contained to the three handlers; a call that resolves behaves as before.
Agent session: agent session