Repository navigation
cmux-next: one type scale for the app and the webviews; the composer on it (cx-vzzg8) - #20385
Conversation
|
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 |
|
all web/size checks green |
|
Passes: CI passes on CI passes on Written by |
|
|
This comment has been minimized.
This comment has been minimized.
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. |
|
cmux-next tour of The tour job failed before the tour ran (build or setup); the run log has the output. The tour produced no media. Tours are data in |
|
Visual preview of c2a03f7: in the maintainers' private review feed. |
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. |
This comment has been minimized.
This comment has been minimized.
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. |
Gallery293 states changed: agent-pane.transcript/web-video-loaded, agent-pane.artifact-panel/markdown, agent-pane.artifact-panel/html, agent-pane.header-tools/customize-menu, agent-pane.dictation/hide, ... · 24 new states · 102 play checks failed Diff page and renders (the run's 287 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):
370 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes. |
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. |
Replays #20385's change onto current feat-cmux-next as one commit; the branch's base merges and catch-up commits are dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
375a9ae to
13ff303
Compare
|
Receipt for
|
Replays #20385's change onto current feat-cmux-next as one commit; the branch's base merges and catch-up commits are dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13ff303 to
b12cd74
Compare
Replays #20385's change onto current feat-cmux-next as one commit; the branch's base merges and catch-up commits are dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… chip feat-cmux-next's per-mode access chip now shows "Default" at rest; this PR changes type sizes, not that label, so the test keeps only the title and accessible-text checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
b12cd74 to
c2a03f7
Compare
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39167093482 at 8638bd1 failed: cmux-next perf gate. |






Leo (coherence pass): "we ought to be unifying more font sizes and all that". This is the first batch. It adds one type scale shared by the app and the webviews, ratchets on both sides, and moves the agent composer, its footer and the menus it opens onto the scale.
Captures
Fleet DEV builds of base (8d6b152) and this head (29ce023), same showcase scene, light and dark. Each row crops one surface from the real window: base on the left, this PR on the right, at 2x of the capture host's 1x display. The base computer chip showed the capture host's name, so it is painted over.
What changes:
The Home channels page title is unchanged in these builds, so it is not shown.
Light
Dark
The scale
schemas/type-scale/type-scale.jsonis the only definition:--text-content).scripts/cmux-next/gen-type-scale.pywrites two copies from it:--text-*and new--weight-*tokens, as a generated block inpages/shared/desktop.css;TypeScale(CmuxNextDesign/TypeScale.generated.swift).--checkruns inbun run checkand in the cmux-next checks.The only visible change to the scale itself is web headings, from 17 to 20 px, to match the app's 20 pt titles. That reaches every page using the heading token: Home channels, the changelog and debug settings. Two "+" glyph buttons that borrowed the heading step for their glyph now use the title step.
Ratchets
check-type-scale.py(unchanged; its baseline goes down by 2).check-swift-type-scale.pyfails the cmux-next checks (newType scalestep, which also runs the generator's--check) on a new literal font size or a weight other than regular and semibold. Its baseline holds today's 162 raw sizes and 32 off-scale weights. A count below the baseline also fails until the baseline is lowered, so it only moves down.type-inventory.pyprints each surface's sizes and weights, native and web. The tables below come from it.The composer and its footer
The composer, its scope row (the footer) and every menu and dialog it opens now draw only scale text:
ui.css. Shortcuts are now 11 and the viewer text 13.The defaults for menu shortcuts and fields live in
popupSurface.css, so every host gets them.Footer content trim
Leo says the footer still "tells too much". op-next-composer-footer-cx, which owns the footer's layout and the permission card, agreed to this text-only trim. Queue, PR dock and permission-card markup are unchanged.
webviews/test/composer-footer-essentials.test.ts(browser lane) checks the model chip and the access chip's title on gallery variantfooter-essentials, the folder name onfooter-essentials-new-chat, pluscomposer-context/ssh-chat.Test
webviews/test/composer-type-scale.test.ts(browser lane) loads 40 gallery states ofagent-pane.composer,agent-pane.composer-contextandagent-pane.composer-pickersin Chromium. That covers idle, working, queued, attachments, and the slash, folder, model, effort, reasoning and access menus. In each state it reads the computed font size and weight of every element that draws text.queued-long(a timing-only gallery play) and made the test fail when a variant's play never ran, so the head runs 40 states.bun run checkpasses. The app compiles the generatedTypeScale; no existing Swift font changes in this batch.Inventory
Before (base):
After (this PR):
Native sizes like
13[12]areTypographyfonts at comfortable size, with the compact density's size in brackets.Next batches
Typographybuilds its fonts fromTypeScale, dropping 10.5, 16, 18 and 22, and medium moves to semibold. Then the raw sizes in Feed, Server pages, Tasks and the browser chrome.In the app (first capture)
DEV builds of base and this head (base merged), same scene: a seeded chat beside a New Tab page. The type differences are small, so the first image is 2x crops of the chat composer footer, the New Tab composer and the New Tab model menu (base left, this PR right). The base host chip is painted over. The visible change in the footer is the machine chip, now an icon. The second image is both windows at 1x.
Changelog
Changed: The agent composer, its footer and its menus use one set of font sizes and weights, shared with the rest of the app; page headings are 20 px, and the composer footer shows less text (the model without its vendor).
🤖 Generated with Claude Code