🤖 fix: pin queued follow-ups above chat input to prevent jumpy scroll#2661
🤖 fix: pin queued follow-ups above chat input to prevent jumpy scroll#2661ethanndickson wants to merge 6 commits intomainfrom
Conversation
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 667c460774
ℹ️ 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".
| const previewText = | ||
| message.content || (hasAuxiliaryContent ? auxiliaryPreview : "Queued message ready"); |
There was a problem hiding this comment.
Strip serialized review blocks from queued preview text
When a user queues a message with attached reviews (for example during an active stream), message.content can contain model-formatted review payloads like <review>…</review> generated by formatReviewForModel, and this banner now renders that raw string directly. In this fixed-position area that can expose internal markup and large code snippets to users, making the queued preview noisy and misleading; the previous UserMessageContent path stripped these tags when structured reviews were present. Please derive preview text from cleaned content (or from reviews metadata) instead of rendering message.content verbatim.
Useful? React with 👍 / 👎.
Summary
This PR moves queued follow-up messages out of the scrollable transcript and into a fixed banner directly above the chat input. The queued UI is now explicit and action-oriented (Edit + Send now), with a bubble-style card inside the banner so queued content is clearly distinguishable from other banners.
Background
At narrow/mobile viewport widths, transcript layout changes during bash/tool handoffs caused visible scroll jumps. The core issue was that the queued message lived inside the scroll container, so any upstream/downstream height change (tool card expand/collapse, streaming footer, barriers) displaced it and forced visible snapping.
Key investigation outcomes:
column-reverseimproved one class of jump but introduced end-of-stream footer regressions.Conclusion: the robust fix is structural—remove queued UI from transcript scroll flow.
Implementation
ChatInputPane(fixed area aboveChatInput).QueuedEdit,Send nowSend nownow matchesEditvisual toneValidation
make static-checkbun test ./tests/ui/chat/queuedMessageBanner.test.tsxbun test ./tests/ui/chat/sendModeDropdown.test.tsRisks
ReviewsBanner/warnings.Generated with
mux• Model:openai:gpt-5.3-codex• Thinking:xhigh• Cost:$4.64