Skip to content

cmux-next: Change Font… with live preview, fonts in their own face, recent fonts first - #22762

Merged
teamleaderleo merged 16 commits into
feat-cmux-nextfrom
cmux/font-switcher
Oct 21, 2026
Merged

teamleaderleo merged 16 commits into
feat-cmux-nextfrom
cmux/font-switcher

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Makes switching fonts in cmux NEXT quick, using the font settings that already exist. The one addition is a list of recently used fonts.

What changes

  • Settings > Appearance font rows (terminal, chat code, editor, Markdown code) open a searchable list of the installed fonts. Each name is drawn in its own font. Arrow keys preview the highlighted font live in the app, and so does the pointer after it rests for 450 ms. Return or a click keeps the font, and Escape reverts. This is the theme picker's behavior, in the new FontPicker.
  • Recent fonts. Fonts used lately come first under a Recent tag, so switching back and forth is one step. RecentFonts keeps the six most recent in user defaults (client view state, never cmux-next.json). Every font write through setSetting records one, and the page reads them as the recent_fonts domain.
  • Palette. Font settings now list the installed fonts. Before, you had to type a name. Each font is drawn in its own face, recent fonts come first, and the settings value page's live preview and Escape revert apply. Change Font… lists every font setting: font names, sizes, line heights, and the chat's and Markdown viewer's font. That list comes from the schema (a font family row, or a key that names "font"), so a new font setting shows up without edits here.
  • A What's New highlight, and the gallery entry font-picker-open.

Size and line height stay where they are, next to each font row. The terminal has no line-height key; that would need a Ghostty adjust-cell-height setting, which I left out.

Supersedes most of #20985 (orphaned, conflicting). Base has since added the chat look (agentPane.display.font.*, chatDisplay.ts), which duplicates its appearance.fonts.* keys.

Changelog

  • Added: Change Font… in the command palette, and font lists in Settings that draw each font in its own face, preview live and put recent fonts first.

Testing

  • bun test src/pages/settings/fontPicker.test.tsx: 7 pass (row order, recent tag, own face, arrows preview, Escape reverts with no write, Return writes and moves the font to the front).
  • bun test src/pages/settings: 218 pass, 1 skip.
  • bun run check (webviews): clean. prepush-gate.py: no new violations. check-l10n.sh: 0 errors. lint-ios-package-conventions.sh: OK.
  • New Swift tests: RecentFontsTests, PaletteChangeFontTests, SettingsPaletteFontOptionsTests.

Observed / Not run

  • Observed: the web tests and checks above, run locally.
  • Not run: Swift build and tests (no Mac compiles on this machine; CI runs them). No live dogfood of the palette rows in their own face. test/gallery has one red, ChatHeaderStatus.tsx#ChatHeaderInlineStatus with no gallery entry, which comes from base, not this PR.

Localization: 3 new keys (settingsPage.font.recent, settingsPage.font.noMatch, palette.setting.changeFont), all 21 locales filled.

Agent session: cosmic-gray

🤖 Generated with Claude Code


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


Summary by cubic

Makes font switching in cmux NEXT a one-step pick: Settings font rows and the palette list installed fonts, each drawn in its own face, with live preview and fonts used lately first.

  • Settings > Appearance font rows and palette font family settings list installed fonts (the palette previously took typed names only); the highlighted font previews live, Return or a click writes, Escape reverts, and a resting pointer previews after 450 ms.
  • RecentFonts keeps the six most recently used families in user defaults (client view state, never cmux-next.json); every font family write records one. The palette's font options and typed-value parsing live in CmuxNextSettings (RecentFonts.options, SettingDescriptor.value(typed:)); SettingOption carries isRecent.
  • Change Font… derives every font setting (families, sizes, line heights, the chat's and Markdown viewer's font) from the schema, so new font settings join without edits. A What's New highlight gains an Open Settings action.
  • The terminal has no line-height key; that would need a Ghostty adjust-cell-height setting, left out.

Written for commit 3a97b47. Summary will update on new commits.

View guided diff Turn on auto-fix

…ecent fonts first

Settings > Appearance: every font family row (terminal, chat code, editor, Markdown code) opens
a searchable list of the installed families, each drawn in its own face. The arrow keys preview
the highlighted font live in the app, a resting pointer after 450 ms, Return or a click writes
it, Escape reverts (FontPicker, the theme picker's behavior). Fonts written lately lead the list
under a Recent tag.

Palette: font family settings now list the installed families (they took typed text only), drawn
in their own face, recent first, with the settings value page's live preview and Escape revert.
Change Font… lists every font setting (families, sizes, line heights, the chat's and the
Markdown viewer's font), derived from the schema, so a new font setting joins on its own.

Recent fonts: RecentFonts (user defaults, client view state, never cmux-next.json) records every
font family write in setSetting, newest first, six kept; the Settings page reads it as the
recent_fonts domain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray
@cursor

cursor Bot commented Oct 21, 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 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 3a97b47: HQ feed card · gallery before/after runs · checks

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=pr22762 -f ref=cmux/font-switcher -f platform=macos -f backend_mode=local

Gallery before/after for 3a97b47: 16 states rendered, 3 images differ, 1444 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 39632076836 -R manaflow-ai/cmux -n gallery-advisory-22762-3a97b47e1142be25e6a0cf0c38c9d399b5c6bba9 (then read gallery-review.json)

States
State Theme Status Diff Picked by
pages.settings/font-picker-open Apple System Colors Light new 0% own FontPicker.tsx
pages.settings/font-picker-open Apple System Colors new 0% own FontPicker.tsx
pages.settings/general Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings/general-customized Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general-customized Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings/general-group-1 Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general-group-1 Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings/general-group-2 Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general-group-2 Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings/general-group-3 Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general-group-3 Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings/general-group-4 Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general-group-4 Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings/general-group-5 Apple System Colors Light unchanged 0% own FontPicker.tsx
pages.settings/general-group-5 Apple System Colors unchanged 0% own FontPicker.tsx
pages.settings-motion/play-search Apple System Colors changed 0% imports store.ts (1 hops)
pages.settings-motion/play-search Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-changed-only Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-changed-only Apple System Colors unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-override-reset Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-override-reset Apple System Colors unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-newtabposition Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-newtabposition Apple System Colors unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-fontfamily Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-fontfamily Apple System Colors unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-hibernation Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-hibernation Apple System Colors unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-hibernationexclusions Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-hibernationexclusions Apple System Colors unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-pinned Apple System Colors Light unchanged 0% imports store.ts (1 hops)
pages.settings-motion/play-reset-pinned Apple System Colors unchanged 0% imports store.ts (1 hops)

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Not verified: macOS jobs did not run: compile and app tests were skipped on 3a97b47e11; ci-status is green without them.

CI passes on 3a97b47e11 (run 39632077070 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

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.

web and size checks: green

CI fast guards passes on 3a97b47e11 (run). This covers only the fast guards, not CI: CI's result is ci-status.

Tour of 3a97b47e11 (run)

Path-selected interactions

Interaction Changed paths
core Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/PageFactory.swift
Packages/macOS/CmuxNext/Sources/CmuxNextApp/Pages/SettingsPageProvider.swift
Packages/macOS/CmuxNext/Sources/CmuxNextApp/SettingsPaletteSource.swift
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/Localizable.xcstrings
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/PaletteFontFaces.swift
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/PaletteItem.swift
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/PaletteRowCell.swift
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/PaletteSettingRow.swift
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/PaletteStrings.swift
Packages/macOS/CmuxNext/Sources/CmuxNextPalette/SettingsPaletteProvider.swift
Packages/macOS/CmuxNext/Sources/CmuxNextSettings/RecentFonts.swift
Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingDescriptor\+Palette.swift
Packages/macOS/CmuxNext/Sources/CmuxNextSettings/SettingsController\+Schema.swift
Packages/macOS/CmuxNext/Sources/CmuxNextSettings/SettingsController.swift
Packages/macOS/CmuxNext/Sources/CmuxNextSettingsWindow/Localizable.xcstrings
Packages/macOS/CmuxNext/Tests/CmuxNextPaletteTests/PaletteChangeFontTests.swift
Packages/macOS/CmuxNext/Tests/CmuxNextSettingsTests/RecentFontsTests.swift

Core UI (before): DEGRADED — 19 ok, 1 unavailable

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 New workspace ok cmux workspace new --name Tour
3 Type in the terminal ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "echo hello from the cmux-next tour\r"
4 A command reports progress: tab loading spinner ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "clear; printf '\\033]9;4;3\\007'; sleep 900\r"
5 Split right ok cmux action run splitRight
6 Split down ok cmux action run splitDown
7 New terminal tab ok cmux action run newSurface
8 Browser tab ok cmux tab new-browser --url https://example.com
9 Hide the sidebar ok cmux action run toggleSidebar
10 Show the sidebar ok cmux action run toggleSidebar
11 Notification ok cmux notify --title Tour --body "Hello from CI"
12 Notifications panel ok cmux action run showNotifications
13 Agent chat ok cmux agent new-chat
14 Agent workspace ok cmux workspace new --name Agent
15 Agent starts ok cmux workspace name:Agent screen current pane current tab current terminal current write --text "clear; printf '\\033]7501;state=working\\033\\\\'; sleep 8; printf '\\033]7501;state=done\\033\\\\'; sleep 900\r"
16 An agent works: row working spinner ok cmux workspace new --name Notes
17 The agent finishes: done mark in the spinner's place ok
18 Session tree: keycaps on the first rows ok cmux settings set sidebar.sessionTree true
19 Session tree back off for later tours ok cmux settings set sidebar.sessionTree false
20 Profile menu unavailable: exited 1 (the menu shot needs a screen capture route) cmux action run sidebar.profileMenu
Screenshots (15)

1. Launch
Launch

2. New workspace
New workspace

3. Type in the terminal
Type in the terminal

4. A command reports progress: tab loading spinner
A command reports progress: tab loading spinner

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

8. Browser tab
Browser tab

9. Hide the sidebar
Hide the sidebar

11. Notification
Notification

12. Notifications panel
Notifications panel

13. Agent chat
Agent chat

16. An agent works: row working spinner
An agent works: row working spinner

17. The agent finishes: done mark in the spinner's place
The agent finishes: done mark in the spinner's place

18. Session tree: keycaps on the first rows
Session tree: keycaps on the first rows

### core\-after: the media could not be published (upload of 22762/3a97b47e/next\-core\-after/shots/05\-split\-right.png failed: gh: is at 2076e0f but expected 021239d \(HTTP 409\))

Tours are data in scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

@blacksmith-sh

This comment has been minimized.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-wvvd7 created for this PR by the cmux coordinator.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / defaults-snapshot is red on 16 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

…he highlight

The palette's font options and typed-value parsing move into CmuxNextSettings
(RecentFonts.options, SettingDescriptor.value(typed:)); SettingOption carries
isRecent. CmuxNextApp shrinks by 5 source lines against base. The What's New
highlight gets an Open Settings action.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 21, 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

Copy link
Copy Markdown
Collaborator Author

owner: 01a15bdd-880a-7a72-b582-c0a285babfd6

teamleaderleo and others added 2 commits October 20, 2026 19:59
Applies the pr-autofix-patch artifact of run 39536083597 (head 5d222b9):
the settings export stamp now covers RecentFonts.swift, plus the exports it regenerates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 03:43 — with GitHub Actions Inactive
Only generated exports conflicted (docs/mdm, settings schema, defaults snapshot,
settings export stamp); took the base side, PR autofix regenerates them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

high-signal review link / link is red on 20 of 26 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

teamleaderleo and others added 2 commits October 20, 2026 21:05
Picks up the base fixes (#22877 inspector page, #22853 compile, #22856, #22876).
settings.gallery.ts: kept both new covers entries (ChiefPetCard, FontPicker).
ci-target-graph.json and the settings exports take the base side; PR autofix regenerates them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 21, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next crash-class rules / cmux-next crash-class rules is red on 12 of 12 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent Claude review subagent): SHIP at 7582def

Checked: preview/revert state machine in the Settings FontPicker and the palette's Change Font… page; recent-fonts recording, dedupe, cap of 6, and filtering of uninstalled fonts; main-actor state; no try! or literal sizes; all 21 locales for the 3 new keys; the merge-resolved settings.gallery.ts covers list.
Ran: bun test src/pages/settings/fontPicker.test.tsx (7 pass); bun run check (fmt/lint/types clean; vp check exits 1 on 3 warnings in files this PR doesn't touch: base debt).
Not run locally: Swift build/tests (CI only).
Nits left for follow-up: highlighting the default row in the web picker shows the saved font, not the default; limit 6 is stated in both Swift and TS; isFontRow also matches font-size and ligature rows.

@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 4 test failures on Blacksmith runners:

Failures

Test View Logs
test/agent-pane-math.test.tsx/agent-pane-math.test.tsx View Logs
test/agent-pane-math.test.tsx/agent-pane-math.test.tsx View Logs
test/thread-minimap-feel.test.ts/thread-minimap-feel.test View Logs
test/thread-minimap-feel.test.ts/thread-minimap-feel.test View Logs

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

teamleaderleo and others added 2 commits October 21, 2026 01:38
SettingsPaletteSource.swift conflicted: base taught the palette's `parse`
the new choiceOrURL kind (home.server), while this branch moved `parse`
into `SettingDescriptor.value(typed:)`. The choiceOrURL case now lives in
`value(typed:)`, and the address input validates through it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent Claude review subagent): SHIP at 3d9e946

Scope: the base-merge conflict resolution. Base taught SettingsPaletteSource.parse the new choiceOrURL kind (home.server); this branch had moved parse into SettingDescriptor.value(typed:). All five former parse callers (the typed-text commit path plus four custom inputs) now use value(typed:), whose logic matches base's parse exactly, choiceOrURL included. Nothing from either side was lost, and nothing in base or tests still references parse. Compile checked by reading: access levels, SettingKind case shape and exhaustive switches. Not built locally (CI only). The earlier full-PR review (SHIP at 7582def) covers the rest.

@cursor

cursor Bot commented Oct 21, 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 teamleaderleo added the media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push label Oct 21, 2026
DomainListEditor.tsx conflicted with #23400 (the font list ignored a click in
the page's first 400 ms because closedAt started at 0). The font list now
lives in FontPicker, so its closedAt starts at -Infinity the same way, and
DomainListEditor keeps this branch's thin wrapper. #23400's editors test passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent Claude review subagent): SHIP at 0b4c5bf

Scope: the base-merge conflict with #23400 in DomainListEditor.tsx. That PR fixed the font list ignoring a click in the page's first 400 ms (closedAt started at 0). This branch moved the list into FontPicker, so the fix now lives there: closedAt starts at -Infinity. The first click opens the list, and the 400 ms reopen guard still works after a close.

Applies the pr-autofix-patch artifact of run 39610887469 (head 0b4c5bf):
the stamp now covers RecentFonts.swift and this branch's settings sources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray
@cursor

cursor Bot commented Oct 21, 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 and others added 2 commits October 21, 2026 09:06
…sleeping 450 ms

check-fixed-waits (web lint) refuses a new fixed wait in a test; the test now stubs
performance.now, as #23400's editors test does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent Claude review subagent): SHIP at 3a97b47

Post-merge review of the delta since the last receipt (0b4c5bf..3a97b47), done after the squash because the previous receipt did not cover the final head:

  • 208e73b autofix: only schemas/defaults/cmux-next.json and settings-schema.sources.sha256. The new stamp lines (RecentFonts.swift and three changed settings sources) match the files at 3a97b47.
  • ffc4769 base merge (dfe016a, clean): against base, the PR's content is exactly what was reviewed at 0b4c5bf. The only base change to a PR file in this window (57021ac, styles.css motion tokens) is kept.
  • 3a97b47 test: fontPicker.test.tsx stubs performance.now past FontPicker's 400 ms reopen guard and restores it in finally. It replaces a fixed 450 ms wait that check-fixed-waits refuses.
  • Finding (not a code defect): the generated-file merge driver kept this branch's stamp side, so the squash put back older hashes for two base files, Schema/DiffViewerSettingsSchema.swift and Schema/SettingsSchema.swift. Base was changing them in cmux-next: diff viewer paints big diffs fast and gets the cmux NEXT look #23154 and cmux NEXT: one-click Add Machine (install, harness, peers both ways, doctor) #22823. The base autofix after this merge regenerates the stamp; it is running on d881a7e and later base heads.
  • Not run by the reviewer: the font picker and editors tests (a local hook routes bun test to the fleet). The lane ran them before the push: 42 pass.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39647649905 at d881a7e failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at 871cab6. This pull request is one of 4 merged since: #22683, #23159, #23601, #22762.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39647862464 at 5818254 failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at 8a06461. This pull request is one of 5 merged since: #22965, #23159, #23601, #22762, #22336.
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.

@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

teamleaderleo added a commit that referenced this pull request Oct 22, 2026
…own red (#23620)

* test(defaults guard): a base merge that keeps the branch's stamp is the pull request's red (red)

#22762 merged with its stamp keeping older digests for two base sources
(a local base merge with cmux-generated-v1 keeps this branch's stamp). The
check-stamp red named only base files, so it read as a base red, and the
squash put the old digests back on feat-cmux-next. This fixture reproduces
it and asks check-stamp --base to say plainly that the red is the PR's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray

* defaults guard: name a stamp a base merge kept as this pull request's red

check-stamp --base now splits a stale entry whose source matches the base
but whose stamp entry does not: that is the head's stamp (a local base merge
with the cmux-generated-v1 driver keeps this branch's side), not base
staleness. It prints an ::error annotation, "this pull request's red, not the
base's", with the fix (apply the PR autofix patch). The merge driver stays
keep-ours: a line-merged stamp would call one-sided exports fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bdd-880a-7a72-b582-c0a285babfd6&host=cosmic-gray

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

2 inactive (1 outdated) deployments
ci-routing-agent — 3a97b47e Deployed Oct 21, 2026 by teamleaderleo
cmux-tui-merge-tree — 50a7901d Deployed Oct 21, 2026 by teamleaderleo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant