Skip to content

cmux-next: one type scale for the app and the webviews; the composer on it (cx-vzzg8) - #20385

Merged
teamleaderleo merged 2 commits into
feat-cmux-nextfrom
op-next-icons/type-scale
Oct 18, 2026
Merged

teamleaderleo merged 2 commits into
feat-cmux-nextfrom
op-next-icons/type-scale

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

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

Type scale before and after, light

Dark

Type scale before and after, dark

The scale

schemas/type-scale/type-scale.json is the only definition:

  • Sizes: caption 11, detail 12, body 13, title 15, heading 20 (pt in the app, px in the webviews).
  • Weights: regular 400, emphasis 600.
  • Reading content: the transcript and prompt are not a step. They keep following the user's agent pane font size (--text-content).

scripts/cmux-next/gen-type-scale.py writes two copies from it:

  • the webviews' --text-* and new --weight-* tokens, as a generated block in pages/shared/desktop.css;
  • the app's TypeScale (CmuxNextDesign/TypeScale.generated.swift).

--check runs in bun run check and 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

  • Web: check-type-scale.py (unchanged; its baseline goes down by 2).
  • App: the new check-swift-type-scale.py fails the cmux-next checks (new Type scale step, 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.
  • Inventory: type-inventory.py prints 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:

  • Search fields: the folder and model search fields drew the browser's 13.33 px because fields do not inherit the page font. They are now 13 (body).
  • Shortcuts and the PDF viewer: menu shortcut digits and the PDF viewer's title and page count fell back to 16 px, because the agent pane loads no ui.css. Shortcuts are now 11 and the viewer text 13.
  • Weights:
    • Menu group labels moved from 500 to 600.
    • The access menu's rows moved from 500 to 400.
    • The context-usage figure moved from 14 px/500 to 13/600.
    • Project badges moved from 10 px/650 to 11/600.
    • Glyph labels moved from 500 and 700 to 600.

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 variant footer-essentials, the folder name on footer-essentials-new-chat, plus composer-context/ssh-chat.

  • red (e6d964d): CI react-apps-check fails "the bar and scope row show the essentials"; the full-access and other-machine tests pass.
  • green (b675da9): all three pass. Tests that read the model's full name now read it from the chip's title.

Test

webviews/test/composer-type-scale.test.ts (browser lane) loads 40 gallery states of agent-pane.composer, agent-pane.composer-context and agent-pane.composer-pickers in 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.

  • red (231d3b2): 10 of 41 states fail, with 13.33 and 16 px fallbacks, 500 and 650 weights, a 10 px badge and a 14 px figure.
  • green (4050d79): 41 of 41 pass. The review pass since then dropped 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 check passes. The app compiles the generated TypeScale; no existing Swift font changes in this batch.

Inventory

Before (base):

Web sizes weights
Composer and footer 11, 12, 13, 15, 17 500, 700
New Tab 11.5, 12, 12.5, 13, 13.5, 15, 18 400, 500, 600
Agent chat 10, 11, 11.5, 12, 12.5, 13, 14, 15, 15.75, 17, 17.5, 18, 20, 21, 22 400, 500, 600, 650
Chats list (Home) 11, 12, 13, 15, 17 400, 500, 600, 700
Agent Activity 11, 12, 13, 15 500, 600
Settings pages 10, 11, 11.5, 12, 12.5, 13, 15, 16, 20, 22 400, 500, 600, 650
Shared web UI (menus, fields) 11, 12, 13 500, 600, 700
Other web 9, 10, 10.5, 11, 11.5, 12, 12.5, 13, 14, 15, 16, 17, 18, 19, 20 400, 500, 600, 700
all (20 sizes, 5 weights) 9, 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 14, 15, 15.75, 16, 17, 17.5, 18, 19, 20, 21, 22 400, 500, 600, 650, 700
Native sizes weights
Sidebar (rows, cards) 11[10.5], 12[11], 13[12] 400, 500, 600
Tab strip 11[10.5], 11, 13[12] 400, 500
Titlebar and window chrome 11[10.5], 13[12] 400, 500
Settings 11[10.5], 12[11], 13[12], 22[20] 400, 500, 600
Palette and menus 11[10.5], 12[11], 13[12], 18[16] 400, 500, 600
Browser chrome 9, 11[10.5], 11, 12[11], 13[12], 13 400, 500, 600
Design (shared controls) 10, 11[10.5], 13[12] 400, 500, 600, 800
Feed 10.5, 11, 11.5, 12, 12.5, 13, 14, 16 500, 600
Server pages 10.5, 11, 11.5, 12, 12.5, 13, 14, 15, 17, 18, 20, 34 500, 600
Tasks 9, 10.5, 11, 11.5, 12, 12.5, 14, 17 500, 600, 800
Home (native transcript) 11[10.5], 12, 12[11], 13[12], 13, 15, 22[20] 400, 500, 600
Onboarding 11, 11[10.5], 13, 15, 22 400, 500, 600
Terminal overlays 11[10.5], 12, 13[12] 400, 500, 600
Other native 0, 10, 11[10.5], 11, 12[11], 12, 13[12], 14[13], 20, 22[20] 400, 500, 600
all (23 sizes, 4 weights) 0, 9, 10, 10.5, 11[10.5], 11, 11.5, 12[11], 12, 12.5, 13[12], 13, 14, 14[13], 15, 16, 17, 18[16], 18, 20, 22[20], 22, 34 400, 500, 600, 800

After (this PR):

Web sizes weights
Composer and footer 11, 12, 13, 15 600
New Tab 11.5, 12, 12.5, 13, 13.5, 15, 18 400, 500, 600
Agent chat 10, 11, 11.5, 12, 12.5, 13, 14, 15, 15.75, 17.5, 18, 20, 21, 22 400, 500, 600
Chats list (Home) 11, 12, 13, 15, 20 400, 500, 600, 700
Agent Activity 11, 12, 13, 15 500, 600
Settings pages 10, 11, 11.5, 12, 12.5, 13, 15, 16, 20, 22 400, 500, 600, 650
Shared web UI (menus, fields) 11, 12, 13 500, 600, 700
Other web 9, 10, 10.5, 11, 11.5, 12, 12.5, 13, 14, 15, 16, 17, 18, 19, 20 400, 500, 600, 700
all (20 sizes, 5 weights) 9, 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 14, 15, 15.75, 16, 17, 17.5, 18, 19, 20, 21, 22 400, 500, 600, 650, 700
Native sizes weights
Sidebar (rows, cards) 11[10.5], 12[11], 13[12] 400, 500, 600
Tab strip 11[10.5], 11, 13[12] 400, 500
Titlebar and window chrome 11[10.5], 13[12] 400, 500
Settings 11[10.5], 12[11], 13[12], 22[20] 400, 500, 600
Palette and menus 11[10.5], 12[11], 13[12], 18[16] 400, 500, 600
Browser chrome 9, 11[10.5], 11, 12[11], 13[12], 13 400, 500, 600
Design (shared controls) 10, 11[10.5], 13[12] 400, 500, 600, 800
Feed 10.5, 11, 11.5, 12, 12.5, 13, 14, 16 500, 600
Server pages 10.5, 11, 11.5, 12, 12.5, 13, 14, 15, 17, 18, 20, 34 500, 600
Tasks 9, 10.5, 11, 11.5, 12, 12.5, 14, 17 500, 600, 800
Home (native transcript) 11[10.5], 12, 12[11], 13[12], 13, 15, 22[20] 400, 500, 600
Onboarding 11, 11[10.5], 13, 15, 22 400, 500, 600
Terminal overlays 11[10.5], 12, 13[12] 400, 500, 600
Other native 0, 10, 11[10.5], 11, 12[11], 12, 13[12], 14[13], 20, 22[20] 400, 500, 600
all (23 sizes, 4 weights) 0, 9, 10, 10.5, 11[10.5], 11, 11.5, 12[11], 12, 12.5, 13[12], 13, 14, 14[13], 15, 16, 17, 18[16], 18, 20, 22[20], 22, 34 400, 500, 600, 800

Native sizes like 13[12] are Typography fonts at comfortable size, with the compact density's size in brackets.

Next batches

  • Native: Typography builds its fonts from TypeScale, 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.
  • Web: New Tab, agent chat, Settings pages and the remaining raw sizes and weights.

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.

typescale before after

typescale window 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

@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: bd387182-adab-430b-8995-196ea982a489

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

all web/size checks green

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Passes: CI passes on c2a03f7505.

CI passes on c2a03f7505 (run 39141365283 attempt 1).

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards passes on c2a03f7505 (https://github.com/manaflow-ai/cmux/actions/runs/39141365283). This covers only the fast guards, not CI: CI's result is the ci-status check, and the CI failure attribution comment names any failing test.

@blacksmith-sh

This comment has been minimized.

@cursor

cursor Bot commented Oct 14, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot 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.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

cmux-next tour of c2a03f7505b07ca00fc3513175aefde7da9c75b7 (run)

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 scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

@teamleaderleo teamleaderleo added the show-leo Waiting for Leo to see captures before merge label Oct 14, 2026
@teamleaderleo

teamleaderleo commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator Author

Visual preview of c2a03f7: in the maintainers' private review feed.

@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@blacksmith-sh

This comment has been minimized.

@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Gallery

Review in feed

293 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 gallery-pr artifact)

State Before · after
agent-pane.transcript/web-video-loaded (Apple System Colors, webkit)
agent-pane.artifact-panel/markdown (Apple System Colors Light, webkit)
agent-pane.artifact-panel/html (Apple System Colors, chromium)
agent-pane.header-tools/customize-menu (Apple System Colors Light, chromium)
agent-pane.dictation/hide (Apple System Colors, webkit)
agent-pane.composer/context-menu (Apple System Colors Light, chromium)

287 more on the diff page.

Live preview (follows this branch; start it with scripts/gallery-live.sh up <branch> from an hq checkout):

  • agent-pane.transcript/web-video-loaded: /wt/op-next-icons-type-scale/?entry=agent-pane.transcript#/agent-pane.transcript/web-video-loaded
  • agent-pane.artifact-panel/markdown: /wt/op-next-icons-type-scale/?entry=agent-pane.artifact-panel#/agent-pane.artifact-panel/markdown
  • agent-pane.artifact-panel/html: /wt/op-next-icons-type-scale/?entry=agent-pane.artifact-panel#/agent-pane.artifact-panel/html
  • agent-pane.header-tools/customize-menu: /wt/op-next-icons-type-scale/?entry=agent-pane.header-tools#/agent-pane.header-tools/customize-menu
  • agent-pane.dictation/hide: /wt/op-next-icons-type-scale/?entry=agent-pane.dictation#/agent-pane.dictation/hide
  • agent-pane.composer/context-menu: /wt/op-next-icons-type-scale/?entry=agent-pane.composer#/agent-pane.composer/context-menu
  • 102 more on the diff page

Play checks failed (0 px anchor movement, 0 layout shift, no frame over 33 ms unless the entry gives a reason):

  • agent-pane.artifact-panel/markdown (Apple System Colors Light, webkit): play: no element for button "Open preview"
  • agent-pane.artifact-panel/html (Apple System Colors, chromium): play: no element for button "Open preview"
  • agent-pane.dictation/hide (Apple System Colors, webkit): play: no element for menuitem "Hide Dictation Button"
  • agent-pane.dictation/hide (Apple System Colors, chromium): play: no element for menuitem "Hide Dictation Button"
  • agent-pane.start-folder/worktree-creating (Apple System Colors Light, chromium): step 1 click [aria-label="Folder"]: 1 frame(s) over 33 ms (longest 58.7 ms)
  • agent-pane.composer/agent-home-folders (Apple System Colors Light, chromium): step 1 click [aria-label="Folder"]: 1 frame(s) over 33 ms (longest 56.8 ms)
  • 393 more on the diff page

370 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes.

2705 unchanged · base 5412eec · head 375a9ae

@cursor

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

teamleaderleo added a commit that referenced this pull request Oct 18, 2026
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>
@teamleaderleo
teamleaderleo force-pushed the op-next-icons/type-scale branch from 375a9ae to 13ff303 Compare October 18, 2026 13:32
@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Receipt for c2a03f7 (this PR's head; a new push replaces it)

  • Visual review: HQ feed card · gallery before/after runs
  • Checks: this head
  • App of this head (app.zip, kept 1 day): gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr20385 -f ref=op-next-icons/type-scale -f platform=macos -f backend_mode=local

teamleaderleo added a commit that referenced this pull request Oct 18, 2026
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>
@teamleaderleo
teamleaderleo force-pushed the op-next-icons/type-scale branch from 13ff303 to b12cd74 Compare October 18, 2026 14:09
teamleaderleo and others added 2 commits October 18, 2026 08:37
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>
@teamleaderleo
teamleaderleo force-pushed the op-next-icons/type-scale branch from b12cd74 to c2a03f7 Compare October 18, 2026 15:38
@blacksmith-sh

blacksmith-sh Bot commented Oct 18, 2026

Copy link
Copy Markdown

Found 2 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp2s3f7o_0/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmp7jn6qkhn/summary-fail.json (live):/summary-fail.json (live): View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo
teamleaderleo merged commit 8638bd1 into feat-cmux-next Oct 18, 2026
130 of 140 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-icons/type-scale branch October 18, 2026 21:16
@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39167093482 at 8638bd1 failed: cmux-next perf gate.
Those jobs last passed at 0504e29. This pull request is one of 1 merged since: #20385.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

show-leo Waiting for Leo to see captures before merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant