Repository navigation
cmux-next: composer controls stay grouped and steady during a turn (hq#1957 item 15) - #20443
teamleaderleo wants to merge 13 commits into
Conversation
…r inset hq#1957 composer controls row (item 15). A gallery entry (agent-pane.composer-row) draws Leo's row (Claude Opus 5.5, ring, Medium, Auto), a long model name, the chat-wide allowance chip and a queued running turn at 420, 720 and 1100 px. The browser test measures it: one contiguous left cluster, free space only before mic/Send, no cut label while the row has room, permission labels cut first and the model last, and the footer inset from the card's bottom edge. Red: CMUX_BROWSER_TESTS=1 bun test test/composer-row-layout.test.ts -> 0 pass, 12 fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hq#1957 composer controls row (item 15). The permission chip was a fixed 180 px wide behind a flex spacer, so the row kept a large empty gap while the model and effort chips truncated, and below 480 px the model went icon-only before anything else. - The chips hug their controls (+, model, ring, effort, permission mode, then the granted status); mic and Send/Stop keep margin-left: auto. Free space sits only between the two clusters. The permission chip stays in the left cluster with the other session settings; the right cluster stays the input's own actions. - A short row drops the permission labels to their lock first (composerRowFit.ts measures the row and sets data-fit=icons; hidden labels stay laid out so the decision never toggles to measure), then effort shortens, the model last (flex-shrink weights 1e5:1 with min widths). The 480 px icon-only model and fixed access widths are gone. - The footer grows with its content (min-height, no fixed height), never shrinks, and keeps the bar's 12 px side inset and a 10 px bottom inset inside the card. The composer-menu-width case that pinned the 180 px chip now checks the contract that mattered: a mode change moves no other control. Green: CMUX_BROWSER_TESTS=1 bun test test/composer-row-layout.test.ts -> 12 pass, 0 fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hq#1957 composer controls row (item 15), layout-shift follow-up. A gallery entry (agent-pane.composer-turn-cycle) opens a chat's first turn idle, before any context usage, and its cycle play delivers running, one then three subagents, a subagent's permission ask, a queued prompt and finished through the pane bridge. The browser test checks that the prompt, controls row, footer and every control keep their boxes within 0.5 px at 420, 720 and 1100 px, and that typing during the turn (Stop -> Steer + Send) moves neither the mic nor Send. Red: CMUX_BROWSER_TESTS=1 bun test test/composer-turn-cycle.test.ts -> 0 pass, 6 fail (the context ring mounts when the turn starts and shifts effort and the permission chip; Steer lands between the mic and Send and pushes the mic left). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hq#1957 composer controls row (item 15), layout-shift follow-up. - The context ring holds its slot from the session's start (inert until the first usage report, as ContextRing already draws it) instead of mounting when the turn starts, which slid effort and the permission chip 34 px right on every chat's first turn. - Steer comes in at the leading edge of the right cluster, so when typing during a turn turns Stop into Steer and Send, the mic and Send keep their places (it used to land between them and push the mic left). The queued-prompt stack, a subagent's permission ask and the PR dock already grow upward over the transcript; Send and Stop share one 32 px circle. Green: CMUX_BROWSER_TESTS=1 bun test test/composer-turn-cycle.test.ts -> 6 pass, 0 fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
…xel band (hq#1957 item 15) Red: bun test test/composer-row-fit.test.ts -> 1 pass, 2 fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#1957 item 15) Hysteresis on the labels/icons switch so a sub-pixel squeeze cannot flip it every frame; drops a leftover spacer from the dictation gallery. Green: bun test test/composer-row-fit.test.ts -> 3 pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
|
red: web / Web status; do not merge until green; see lane-rules |
|
Unclear: CI failed on
Not re-run automatically: Written by |
…ct row) hq#1957 item 15 compact row. Leo's nightly row reads as toy blocks: a context ring that looks like a spinner, uneven gaps, two locks (Auto and the "Trusted this chat's..." status chip) and a large white Stop disc. The row-layout test now checks, at 420, 720 and 1100 px in every variant: the left cluster's controls sit 8-12 px apart and within 1 px of each other; no ring or spinner in the row; one lock at most; no granted-status chip; Stop's glyph is a square of at most 12 px; and Stop takes Send's box (within 0.5 px) and its resting fill. The turn-cycle test checks no ring or spinner, one lock and no status chip in every phase, and no longer tracks the ring's slot. Red: CMUX_BROWSER_TESTS=1 bun test test/composer-row-layout.test.ts test/composer-turn-cycle.test.ts -> 3 pass, 30 fail (model-effort 36 px apart around the ring, effort-access 2 px; ring in the row in every phase; 2 locks and the status chip in "granted"; Stop's fill rgb(255,255,255) against Send's grey). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Agents: |
…t row)
hq#1957 item 15 compact row. The row is "+ · model · effort · access" on the left and
mic, then Send/Stop on the right, with free space only between the two.
- Gaps: the chips sit the bar's 8 px apart (they were 2 px, plus the ring's 36 px slot), so
the left cluster's gaps are all 8 px. Model, effort and access are the bar's regular 28 px
(were 30) with tighter padding.
- Hover: the shared quiet wash (ui.css --ui-hover's fallback, the control's ink at 6% over
the card; 12% on press) tight to the control, in place of the opaque composer-hover block.
Mic, Plan and Steer use it too.
- No context ring in the row. This undoes the earlier fixed ring slot. The chat's usage is
in the model chip's tooltip ("Opus 5.5 · 42% of context used", the existing picker.context
string), shown while showContextUsage is on. The row's right-click no longer offers
Hide/Show Context Usage, which has no control to act on now. Compact stays reachable as
/compact. ContextRing itself and its gallery are kept.
- One lock: the granted-permission status chip (PermissionStatus) is no longer placed in the
row. The component and its gallery stay. Trust undo and chat-allowance revoke keep their
other entry points in App.tsx.
- Stop is Send's 28 px circle at its resting fill (the accent at 34% over the base), with a
7 px square in the text color, not a white disc. Its hover and press step the circle.
- composerRowFit.ts no longer watches the status chip. Galleries drop the ring plays
(composer context-usage-menu, picker context-details/context-focus).
Green: CMUX_BROWSER_TESTS=1 bun test test/composer-*.test.ts -> 53 pass, 0 fail
(composer-row-layout + composer-turn-cycle: 33 pass, 0 fail). bun run check -> pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Bead |
Gallery1819 states changed: agent-pane.permission-panel/expanded, agent-pane.transcript/long-code, agent-pane.artifact-panel/closed, agent-pane.artifact-panel/markdown, agent-pane.artifact-panel/html, ... · 88 new states · 24 removed states · 53 play checks failed Diff page and renders (the run's 1813 more on the diff page. Live preview (follows this branch; start it with
Play checks failed (0 px anchor movement, 0 layout shift, no frame over 33 ms unless the entry gives a reason):
244 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes. |
…lass (hq#1957 border hunt) Red: CMUX_BROWSER_TESTS=1 bun test test/composer-edges.test.ts -> 0 pass, 5 fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…asured at rest (hq#1957 border hunt) Red (New Tab box): CMUX_BROWSER_TESTS=1 bun test test/composer-edges.test.ts -> New Tab box: no drop shadow fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ass shadow and rim (hq#1957 border hunt) The composer card keeps only its --acpmux-composer-edge hairline (clear under appearance.borders = none); permission cards take the same hairline and no shadow; the New Tab box loses its drop shadow at rest and on focus. Focus still steps the edge toward the accent. Green: CMUX_BROWSER_TESTS=1 bun test test/composer-edges.test.ts -> 6 pass. Related composer/New Tab/permission suites: 132 pass, 1 fail (new-tab-chat-title-width, fails identically on the base). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#1957 border hunt) The permission panel's gallery entry loaded only styles.css and sat outside .acpmux-shell, so the card's edge rules (composerLocation.css, --acpmux-composer-edge) never applied and its edge checks passed vacuously. The entry now loads the pane's stylesheets inside the shell, and a guard keeps the card's one .5px hairline (Leo: a thin Liquid Glass rim is good, don't strip it to zero). Red on the pre-fix CSS (1bebce0): 1 pass, 6 fail. Green: 7 pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- vp fmt webviews/src/agent-session/acpmux/modelPickerLayout.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38521546851






Fixes the agent composer's controls row and stops the composer from shifting during a turn (hq#1957 item 15; Leo: "this is super weird", "so much layout shift while a subagent runs").
Controls row
Layout shift during a turn
Compact row (Leo: "tonka toys")
/compactstill works.Edges (border hunt, op-next-theme)
--acpmux-composer-edgehairline, whichappearance.borders = noneclears (Leo: a thin Liquid Glass rim is good, don't strip it to zero)..acpmux-shell. Before this, its edge checks measured an unstyled card and passed without testing anything.borders = none.Verification
CMUX_BROWSER_TESTS=1 bun test test/composer-edges.test.tswas red at 4580bd4 (0/5) and at acab5b5 (New Tab), and is green 6/6 at a585a87. With the real permission card measured (600aa9e), the CSS from before the fix fails 6 of 7 checks and the fix passes 7/7. Of the related composer, New Tab and permission suites, 132 pass and 1 fails:new-tab-chat-title-width, which fails the same way on the base.CMUX_BROWSER_TESTS=1 bun test test/composer-row-layout.test.ts test/composer-turn-cycle.test.tswas red at d5fa4a0 (3 pass, 30 fail) and green at 1bebce0.bun test test/composer-*.test.tspasses 53/53. Captures are on big-red at/tmp/cg-lane-adopt-dogfood/compact-{before,after}-*.png.CMUX_BROWSER_TESTS=1 bun test test/composer-row-layout.test.ts: red 0/12 on eddade2, green 12/12.CMUX_BROWSER_TESTS=1 bun test test/composer-turn-cycle.test.ts: red 0/6 on 3979132, green 6/6. It checks that the input and every control stay within 0.5px through idle → running → 1 subagent → 3 subagents → asking → queued → finished.bun test test/composer-row-fit.test.ts(switch hysteresis): red 1/3, green 3/3.bun run checkpasses; a review subagent found no blockers, and its flip-flop finding is fixed above./tmp/cg-lane-adopt-dogfood/composer-*.png.Changelog
Fixed: the agent composer's controls form one compact row (stop matches send, no spinner) and no longer shift while a turn or subagent runs.
🤖 Generated with Claude Code