Skip to content

cmux NEXT scrollbars: the last SwiftUI scroll views take the thin scroller; two AppKit cards follow the system - #25051

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
leo/next-thin-scrollers-rest
Oct 25, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
leo/next-thin-scrollers-rest

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

This clears the "Scrollbars thin, one style" ratchet debt (scripts/cmux-next/check-scrollbars.sh, a warn-only base red in "cmux-next checks"), SCROLLBARS-THIN.

  • SwiftUI: .thinScrollers() is added to the content of each ScrollView that lacked it:
    • HomeGroupInfoView (members, add contacts)
    • ChiefMemoryInspectorView (lines, detail)
    • BrowserDownloadsPopup
    • VaultListView
    • WorkspaceTodoPageView, which now imports CmuxNextDesign
  • AppKit: ExtensionsMenuView and SidebarPullRequestCard no longer force scrollerStyle = .overlay. Both now call SystemScrollers.follow, as the other browser panels do. It sets the same overlay, auto-hiding style (vertical only, so there is no ThinScroller swap) and keeps that style after a "Show scroll bars" change. The commit carries Sidebar-Look: no visual change for the sidebar card.
  • Gallery: BackgroundActivity.gallery.css drops its custom scrollbar-color.
  • Not in this PR:

On the tip, check-scrollbars.sh drops from 14 hits to those 3.

Compile: cmux-ci compile-check --app passed at e9e563e (job 4be662e85a3c9f6433af75ea). The final head only changes followThin to follow.

No capture: every surface here uses the overlay scroller, which is hidden at rest; before and after stills are the same.

Screenshots: none attached. Every surface here uses the overlay scroller, which is hidden at rest, so before and after stills are the same. None of the capture states (cmux-ci capture --list-states) opens these surfaces. What changes is that these scrollers now follow the shared thin style while scrolling and under "Show scroll bars: Always".

Risk: low. The changes are view modifiers and scroller setup, with no data or layout logic. The .thinScrollers() probe is a background view that takes no hits.

🤖 Generated with Claude Code

Agent session: cosmic-gray

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

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

Review caa5183: 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=pr25051 -f ref=leo/next-thin-scrollers-rest -f platform=macos -f backend_mode=local

Gallery before/after for caa5183: the capture produced no images (run).

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on e61cd8d to compare; do not merge until green; see lane-rules

Tour of caa5183b2c (run)

The path-selected recorder failed for core-after, core-before; see the run artifact and failed manifests.

Path-selected interactions

Interaction Changed paths
core Packages/macOS/CmuxNext/Sources/CmuxNextApp/Checklist/WorkspaceTodoPageView.swift
Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/BrowserDownloadsPopup.swift
Packages/macOS/CmuxNext/Sources/CmuxNextApp/Vault/VaultListView.swift
Packages/macOS/CmuxNext/Sources/CmuxNextBrowser/UI/ExtensionsMenu/ExtensionsMenuView.swift
Packages/macOS/CmuxNext/Sources/CmuxNextChiefMemory/ChiefMemoryInspectorView.swift
Packages/macOS/CmuxNext/Sources/CmuxNextHome/Conversations/HomeGroupInfoView.swift
Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/SidebarPullRequestCard.swift

Core UI (before): FAILED — 16 ok, 3 failed, 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 failed: exited 1 cmux action run splitRight
6 Split down failed: exited 1 cmux action run splitDown
7 New terminal tab failed: exited 1 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

Failed steps:

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

Screenshots (12)

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

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 UI \(after\): FAILED — 16 ok, 3 failed, 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 failed: exited 1 cmux action run splitRight
6 Split down failed: exited 1 cmux action run splitDown
7 New terminal tab failed: exited 1 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

Failed steps:

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

Screenshots (12)

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

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

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by claude-sr2/base-red-checks on cosmic-gray · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 25, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Found 85 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpcl_qswq4/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpoiwr86o7/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
bundle-cmux-tui.sh failed (/tmp/tmp.neidJdKjBA/new/cmux-tui) View Logs
bundle-cmux-tui.sh failed (/tmp/tmp.neidJdKjBA/new/cmux-tui) View Logs
bundle-cmux-tui.sh failed (tree, /tmp/tmp.yaUIgNsLOl/build/one/cmux-tui) View Logs
bundle-cmux-tui.sh failed (tree, /tmp/tmp.yaUIgNsLOl/build/one/cmux-tui) View Logs

...and 75 more test failures. View all on Blacksmith: run 40154415785, run 40154415837, run 40154415885

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

…n scroller; two AppKit cards follow the system

SCROLLBARS-THIN ratchet debt from check-scrollbars.sh on the tip:
- .thinScrollers() on the content of the SwiftUI ScrollViews in HomeGroupInfoView
  (members, add contacts), ChiefMemoryInspectorView (lines, detail),
  BrowserDownloadsPopup, VaultListView and WorkspaceTodoPageView.
- ExtensionsMenuView and SidebarPullRequestCard no longer force
  scrollerStyle = .overlay: SystemScrollers.follow sets the same overlay,
  auto-hiding style (vertical only, so no ThinScroller swap) and keeps it after a
  "Show scroll bars" change, as the other browser panels do.
- BackgroundActivity.gallery.css drops its custom scrollbar-color.
The ReportsBasket views are left to the AppKit port of those files (#25031).

Sidebar-Look: no visual change
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
@teamleaderleo
teamleaderleo force-pushed the leo/next-thin-scrollers-rest branch from e9e563e to caa5183 Compare October 25, 2026 02:25
@teamleaderleo
teamleaderleo merged commit 6cae8ed into feat-cmux-next Oct 25, 2026
163 of 183 checks passed
@teamleaderleo
teamleaderleo deleted the leo/next-thin-scrollers-rest branch October 25, 2026 02:52
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — caa5183b Deployed Oct 25, 2026 by teamleaderleo via namespace autofix #2561
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant