Skip to content

cmux-next: internal page tabs draw their page's registry icon - #17582

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
op-next-icons-3
Oct 6, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
op-next-icons-3

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Third PR of the icon registry lane (after #17538 and #17558). Tabs that hold cmux's own pages, such as Settings, the App Store, History and Diff, drew stock SF Symbols in the tab strip at text size, while terminal and browser tabs draw from the cmux icon set. Each page now names its cmux icon, and its tab draws that icon filling the icon box the way terminal and browser tabs do.

  • Browser tabs at cmux page addresses (cmux://history, cmux://bookmarks, cmux://agent-activity, cmux://remote-view) drew the globe and the loading throbber. BrowserTabIconState.resolve(url:) now gives them .page(name): history, bookmark.manager, agent.activity and machine.remote. PaneController.browserIcon passes the live page's URL, else the record's.
  • InternalPageProvider.icon: IconName? (default nil) is the page's registry icon. InternalPageTabStore.tabIcon draws it, falls back to the page's SF Symbol when a page has none (a third-party app's pane), and uses placeholder when no provider has registered.

Call sites converted:

Page Was (SF) Now (registry)
Settings gearshape settings
App Store (AppsService) bag store
History (HistoryTopPage) clock history
Bookmarks (BookmarksTopPage) book bookmark.manager
Feed tray inbox
Keyboard Shortcuts keyboard keyboard
Passwords key security.lock
Diff plusminus diff.file
Markdown / editor file pages (FilePageKind) doc.richtext / chevron.left.forwardslash.chevron.right file.text / code
CodeRouter arrow.triangle.branch account.routed
Changelog sparkles file.text
App pane with no symbol app app.generic
BrowserTabIconState for cmux://history / bookmarks / agent-activity / remote-view globe (throbber while loading) history / bookmark.manager / agent.activity / machine.remote
InternalPageTabStore.stripItem, storeTabItem .symbol(provider.symbol) tabIcon(provider)

Tasks and Debug Settings keep their SF Symbols because the registry has no page icon for them yet. Adding drawings to the pack is a separate change.

Testing

Red commit de0cede adds InternalPageTabIconTests; the fix follows.

  • A page with a registry icon draws .icon(name), a page without one draws its symbol, and a missing provider draws placeholder.
  • File page kinds name file.text and code.
  • cmux page addresses resolve to their page icon, not the throbber or globe, and apply as .icon(name). Red commit 2121a18.

check-no-godfiles.sh --only swift passed. scripts/verify-local.py --affected passed feature-flags. package-groups failed on cmux.xcworkspace grouping, which comes from the base: this PR adds no packages. Fleet builds op-next-icons-2b (base 7cf558b) and op-next-icons-3 (head dcddaf5) were shot on a capture mini after opening History, Bookmark Manager and Settings from the menus.

Changelog

Changed: Tabs holding Settings, History, Bookmarks, Diff and other cmux pages show their page's icon from the cmux icon set

Demo Video

Tab strip, before (top) and after (bottom), at 2x from a 1x capture. History and Bookmarks drew the globe and now wear history and bookmark.manager. Settings draws the registry's settings.

tab strip before and after

Full windows: before, after.

Checklist

  • Behavior changes have added or updated tests, or Testing says why not
  • UI change with no new or changed user-facing strings; localization not affected

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits October 6, 2026 08:19
…red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings, App Store, History, Bookmarks, Feed, Keyboard Shortcuts,
Passwords, Diff, Markdown and editor pages, CodeRouter and the changelog
drew stock SF Symbols in the tab strip at text size. Each page now names
its cmux icon (InternalPageProvider.icon), drawn filling the icon box like
terminal and browser tabs; a third-party app's pane keeps its symbol.

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

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

@coderabbitai

coderabbitai Bot commented Oct 6, 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: 687304ac-aff6-4347-82d2-fdb393e12121

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
  • Autopilot · 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 6, 2026 •

Copy link
Copy Markdown
Contributor

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

CI passes on dcddaf5e50 (run 37493192918 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.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Batch queue: green. Batch stack 87bf7dcfd4d7 on feat-cmux-next 7d209e8ddbed with #17520 #17534 #17541 #17551 #17552 #17558 #17582. Fleet production build: job 3b88261eeebcf0f42557a5e7 (cmux-ci artifact 3b88261eeebcf0f42557a5e7 (job 3b88261eeebcf0f42557a5e7, tag nb-local-20261006-153816-1)). heavy tier did not run on this branch (run); your PR's own checks are the tests. Validated this PR at 27344a90070a.

Next: land it yourself with gh-merge-green on this receipt.

teamleaderleo and others added 3 commits October 6, 2026 09:06
…icon (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
History, Bookmarks, Agent activity and remote-view tabs are browser tabs
at cmux:// addresses, so they drew the globe (and the throbber while
loading). They now draw their page's registry icon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 6, 2026
teamleaderleo added a commit that referenced this pull request Oct 6, 2026
teamleaderleo added a commit that referenced this pull request Oct 6, 2026
@teamleaderleo
teamleaderleo merged commit 4699b30 into feat-cmux-next Oct 6, 2026
64 of 70 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-icons-3 branch October 6, 2026 16:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant