Skip to content

sidebar: group headers are vivid tinted glass with a rim; no color is untinted glass - #36225

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
lane/no-color-group-look
Nov 5, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
lane/no-color-group-look

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-05, on the sidebar's group headers:

We can afford to put glass here, so why the f*** do we not have glass for this? Like, I mean, like, still keeping the colors, it's just, like, but just make it glassier, you know? Like, the groups themselves. Why is it just one solid opaque block? Why does it not have any sort of rim at all?

It's this dull-ass, stupid-ass color and this strange f***ing font of the group on the side. It's like just... it just looks sad.

And on a group with no color:

if you're gonna allow the no color option, which is, like, I find kind of weird, you might as well have it be at least slightly distinguishing from, like, literally depicting it as if it were unhovered.

a differently highlighted, differently refracted, differently transparented thing ... a grouped up thing. Well, no, no, no. Not like this actually, because this is an indentation.

What

  • Glass headers. A group header is now the shared group surface role, not an opaque bar. This is a new role in schemas/surface-roles/surface-roles.json, with its Swift and CSS copies kept in step by check-surface-roles.py, alongside the other glass roles cmux NEXT glass: one shared glass material, first on the composer (specular rim, sheen, depth) #36240 owns. The role's veil over the sidebar's own glass is tinted by the group's color with its chroma raised x1.3 (GroupTint.glassRGB), at 44% dark / 34% light. The role's specular rim is drawn with GlassRimView, and the name is in the theme's ink, held at 4.5:1. Under Reduce Transparency it's the role's opaque fallback with a hairline. The members' rail takes the same vivid color. It isn't a per-row NSGlassEffectView, because that would put a second glass layer on the sidebar's own glass for every row, which CardSurfaceView rules out.
  • The colors stay. The palette, its order, the no-color option and the default color are unchanged. Tab colors are untouched (that's still Leo's call).
  • Header font. The name was 11 pt medium in the bare system face on the compact bar, smaller than the rows under it. It now uses the rows' own title size, semibold (TypeScale.emphasis), and follows sidebar.textSize.
  • No color. A group with no color draws the same glass, untinted, as one pane behind its header and members (the theme ink at 3.5% / 3% with a hairline rim). It has no hue and no indent, and a collapsed group gets a pane behind just its header. The pane is the group's existing line view (SidebarGroupLine.isBlock), so it moves on the rows' springs through folds, drags and scrolls. It sits under every row, so hover, selection and drop fills draw over it. fix(groups): draw no color until one is chosen #32198 and sidebar: a group nobody colored draws no bar in the theme's color #32685 stand: no automatic hue comes back.
  • A tab group with no color washes its tabs in the theme's sidebarStep. That's neutral, with no hue.
  • Debug choices, so Leo can switch:
    • sidebar.groupGlass: vivid (default), glass, frost, solid (the bar before this PR).
    • sidebar.noColorGroup: glass (default), tray, lit, plain (the look before this PR).

Pick

Gallery AANoColorGroupGalleryTests, over a busy wallpaper behind the translucent sidebar. Columns are today, glass, vivid and frost, with dark on top and light below. Each column sets its own sidebar.groupGlass / sidebar.noColorGroup, so this sheet (rendered at 92a39b1) shows the same pixels as the head.

group glass gallery: today, glass, vivid, frost; dark over light

Picked: vivid (the new sidebar.groupGlass default). Why:

  • Today is opaque bars that go muddy over the wallpaper (Leads reads brown, Ship grey-green), and the no-color "Research" group draws nothing at all.
  • Glass (30% / 22%) has the rim, but on dark the colors wash out: Leads barely reads as red. That's the "we don't have vibrant group colors" problem again.
  • Frost loses the color and reads almost like no color.
  • Vivid (44% / 34%) keeps every color recognizable in dark and light, the rim reads, and the name holds 4.5:1 over the pane.
  • In all three glass columns, the no-color group reads as one rimmed pane from its header through its rows, with no indent and no hue. Its selected and hovered rows still show on top.

Verification

  • GroupHeaderGlassTests: every glass look is a translucent pane (alpha between 0.05 and 0.6) with the group role's rim, and the name reads at 4.5:1 over it, in dark, light and wallpaper themes. The glass tint is more saturated than the line color. The rail is the pane's tint. vivid is the default and solid keeps the opaque bar. Under Reduce Transparency the pane is opaque with a hairline and no rim. The name uses the rows' size, semibold.
  • NoColorGroupBlockTests: checks the block's frame (no indent), that a collapsed group blocks its header, that the block is under every row, that a colored group keeps its rail, that plain draws nothing, that each look is the group role's veil and never opaque (with the rim only in glass), and that Reduce Transparency draws the opaque fallback.
  • GroupNoChosenColorTests, GroupPaletteDefaultTests (now pinned to solid, the bar it describes), SidebarGridAlignmentTests (the header font).
  • Gallery: AANoColorGroupGalleryTests (CMUX_TEST_REQUIRE_GUI=1, no-color-group-gallery.tar).
  • Fleet compile of CmuxNext passed on the first commit (job 48eab62ae175663c722835b9).
  • At 92a39b1, 11 of the 12 suites passed on a fleet Mac (step 07ddd979bc86870e1447268f). The red one was SidebarGroupLineLayoutTests "the line is the bar's rest color", which describes the solid bar; it's now pinned to solid, and the glass rail has its own test. The head's run is listed below.
  • scripts/web-lint.sh: the only failure, check-switch-fetches at webviews/src/agent-session/acpmux/flickerLog.ts:179 (from Flicker log: off in gallery pages, and the ring stays under its bound after each write #36188), fails the same at base 1f7dbae. This PR doesn't touch it.

Prior art acknowledged: #32198, #32156, #32685 and the sidebar PRs prior-art listed.

Changelog

  • Changed: Sidebar group headers are vivid tinted glass with a rim, and the group name matches the size of its rows. A group with no color shows as untinted glass, so it still reads as a group.

Agent session: agent session

🤖 Generated with Claude Code

…e, no indent)

Leo 2026-11-05: "if you're gonna allow the no color option, which is, like,
I find kind of weird, you might as well have it be at least slightly
distinguishing from, like, literally depicting it as if it were unhovered."

A group with no color draws one faint neutral block (the theme ink at 3% dark,
2.5% light, under the rows' 6%/5% hover) behind its header and members, under
every row so hover, selection and drop fills draw over it. The group's line
view becomes the block, so it moves on the rows' springs through folds and
drags. Debug `sidebar.noColorGroup` keeps glass, lit and plain (the look
since #32198). A tab group with no color washes its tabs in sidebarStep.
A colored group is unchanged; no hue comes back.

Sidebar-Look: Leo 2026-11-05 "a grouped up thing" / "we're not necessarily into that indentation thing"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

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

Review f542b86: 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=pr36225 -f ref=lane/no-color-group-look -f platform=macos -f backend_mode=local

Gallery before/after for f542b86: 16 states rendered, 0 images differ, 3264 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 42008503395 -R manaflow-ai/cmux -n gallery-advisory-36225-f542b86048c505ffdcc3ee8abf010048dcf71b0b (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.computer-use-preview/running Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/running Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/done Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/done Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/done-no-icon Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/done-no-icon Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/agent-only Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/agent-only Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/both-pointers Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/both-pointers Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/person-only Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/person-only Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/person-idle Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/person-idle Apple System Colors unchanged 0% own glass.css
agent-pane.computer-use-preview/person-outside Apple System Colors Light unchanged 0% own glass.css
agent-pane.computer-use-preview/person-outside Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/grid-pending Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/grid-pending Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/long-rule Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/long-rule Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/short-rule Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/short-rule Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/four-options Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/four-options Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/bypass-still-asks Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/bypass-still-asks Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/bypass-still-asks-callout Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/bypass-still-asks-callout Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/bypass-still-asks-pill Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/bypass-still-asks-pill Apple System Colors unchanged 0% own glass.css
agent-pane.permission-card/full-access-four-options Apple System Colors Light unchanged 0% own glass.css
agent-pane.permission-card/full-access-four-options Apple System Colors unchanged 0% own glass.css

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

Default changes

This pull request changes 4 defaults at f542b86048c5 (what everyone gets without configuring anything):

  • tunable-source.CmuxNextSidebar/Logic/SidebarGroupHeaderLook.swift:tunable###: (none) -> "315ccb3774016f310b3fe5a06c072b9af0d657ec8b28b7dbf4ce1a18e42d1f50"
  • tunable-source.CmuxNextSidebar/Logic/SidebarGroupHeaderLook.swift:tunable####: (none) -> "d5864c63c60779513962cad8cdfde25cebb8afaab7d15144caed503d25eba79b"
  • tunable.sidebar.groupGlass: (none) -> "vivid"
  • tunable.sidebar.noColorGroup: (none) -> "glass"

Signed off on this commit by review (codex, router-review).

Merge receipt: merged as 516779d92dbe with these defaults changed, signed off by review (codex, router-review).

Regenerate the snapshot with python3 scripts/ci/defaults_guard.py snapshot.

Shipped in:

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

blacksmith-sh Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Found 3 test failures on Blacksmith runners:

Failures

Test View Logs
nightly cmux-tui resolve/nightly cmux-tui resolve View Logs
test_every_compile_job_names_its_warm_sources (main.ThisTree.test_every_compile_job
_names_its_warm_sources)/
test_every_compile_job_names_its_warm_sources (main.ThisTree.test_every_compile_job
_names_its_warm_sources)
View Logs
the six-hour schedule must allow 90 minutes for a cold cache build and use the matching
runner, Xcode, and visible timing output/
the six-hour schedule must allow 90 minutes for a cold cache build and use the matching
runner, Xcode, and visible timing output
View Logs

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

…e rows' size

Leo 2026-11-05: "We can afford to put glass here, so why the f*** do we not
have glass for this? ... still keeping the colors, it's just, like, but just
make it glassier", "Why is it just one solid opaque block? Why does it not
have any sort of rim at all?", and "this strange f***ing font of the group on
the side ... it just looks sad".

The band header draws a translucent pane of its color with the chroma raised
(GroupTint.glassRGB), a hairline rim and the theme's ink, held at 4.5:1. The
rail takes the same vivid color. Debug sidebar.groupGlass: glass (default),
vivid, frost, solid (the bar before). The palette is unchanged. A group with
no color is the same glass untinted (sidebar.noColorGroup glass). The
header name was 11 pt medium in the bare system face, smaller than its rows;
it is now titleFont's size, semibold.

The gallery shows today and the three glass looks over a busy wallpaper,
dark and light.

Sidebar-Look: Leo 2026-11-05 "just make it glassier" / "Why does it not have any sort of rim at all?"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c94a5c495bc075ca7fff
@cursor

cursor Bot commented Nov 5, 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 changed the title sidebar: a group with no color reads as a group (neutral block, no hue, no indent) sidebar: group headers are tinted glass with a rim; no color is untinted glass Nov 5, 2026
…Reduce Transparency)

real-glass-material (#36240) owns the glass tokens: the group header and the
no-color pane now draw a new `group` role in schemas/surface-roles/surface-roles.json
(Swift SurfaceRole/FloatingGlassStyle.group and the CSS --surface-group-* follow it,
check-surface-roles.py passes), its rim through GlassRimView, and the role's
opaque fallback under Reduce Transparency (ReduceTransparency.register(repainting:)
repaints them on a change). sidebar.groupGlass now sets only the color's share
of the veil; the sidebar-only rim and veil constants are gone.

Sidebar-Look: Leo 2026-11-05 "Why does it not have any sort of rim at all?"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c94a5c495bc075ca7fff
…s-bar test to the solid bar

The gallery (today, glass, vivid, frost over a busy wallpaper, dark and light)
showed glass washing the colors out on dark and frost reading as no color;
vivid kept every color readable with the rim and the name at 4.5:1.
SidebarGroupLineLayoutTests' "the line is the bar's rest color" describes the
solid bar; on glass the rail is the pane's vivid tint (GroupHeaderGlassTests).

Sidebar-Look: Leo 2026-11-05 "we don't have vibrant group colors"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c94a5c495bc075ca7fff
@teamleaderleo teamleaderleo changed the title sidebar: group headers are tinted glass with a rim; no color is untinted glass sidebar: group headers are vivid tinted glass with a rim; no color is untinted glass Nov 5, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at 69318b2

BLOCK at 69318b2

Visual verdict: supplied dark/light gallery has no clipping or overflow.

  1. [P1] [blocking] [category:tests] [finding:F1] [outcome:pending] GroupHeaderRowView.swift:377: Two existing tests need updating for the new default. SidebarGroupSolidHeaderTests.aGroupHeaderIsOneSolidBarInItsColor requires alpha >0.5; vivid produces 0.4736 dark / 0.472 light. SidebarGroupChromeLookTests.aHeaderInkIsWhiteOrNearBlackWhicheverReadsBetter still requires those exact inks, while glass uses theme ink. Pin these legacy assertions to .solid or revise their expectations, then run both suites. Native execution was unavailable here.

  2. [P2] [follow-up] [category:ux] [finding:F2] [outcome:pending] SidebarListView+GroupLines.swift:123: The pane ends at last[id], but the preceding scan ignores .doneFold and .showMore. Consequently, trailing Done, Archived, and Show more controls sit outside their no-color group’s pane; an open group containing only folded members gets a header-only pane. Include these grouped rows when computing the pane’s bottom.

Follow-ups:

  • Include trailing group fold controls in the neutral pane.

… run on the solid bar

Router review BLOCK at 69318b2: F1, SidebarGroupSolidHeaderTests and
SidebarGroupChromeLookTests describe the solid bar's fill and ink, so they now
run with sidebar.groupGlass solid (GroupHeaderGlassTests.onSolidBar). F2, a
group's trailing Done, Archived and Show more rows sat outside its no-color
pane; the pane now runs to the group's last row of any kind (the rail still
ends at the last member). Regression: NoColorGroupBlockTests.thePaneRunsToTheGroupsFoldRows.

Sidebar-Look: Leo 2026-11-05 "a grouped up thing"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c94a5c495bc075ca7fff
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 0fc45a6

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. They land as checklist items in this PR's one follow-up tracking issue in this repo (Follow-ups: #N ..., label follow-up; add to an open one before filing, never one issue per finding), linking this receipt; the lane that opened the PR fixes them forward.

SHIP at 0fc45a6

Visual verdict: native gallery shows the intended glass treatment; all 16 supplied web before/after pairs are identical.

  1. [P2] [follow-up] [category:ux] [finding:F1] [outcome:pending] Synchronize the pane’s rim with fold animations — SidebarGroupLineViews.swift:255. rim.frame jumps to the destination bounds with animations disabled, while SidebarDragSpring animates only the parent layer’s bounds. When an uncolored group collapses, the rim therefore reaches header height before the pane finishes shrinking; expansion clips the destination-sized rim until the pane catches up. Animate the rim geometry on the same spring and verify a mid-fold frame.

Surface-role consistency passes. Native AppKit tests could not run in this Linux box.

Follow-ups:

  • F1: Keep the pane’s rim attached to its animated bottom edge.

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 0fc45a6: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

The group surface role follows the base's concentric corner rule: cornerDepth 0
(the sidebar rows' radius, Metrics.surfaceCornerRadius) in place of radius 6.

Sidebar-Look: no-color and glass group headers, unchanged by the merge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c94a5c495bc075ca7fff
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at f542b86

Reviewer: codex gpt-6-astra high, fast tier.

SHIP at f542b86

Visual verdict: gallery shows the intended dark/light group glass treatments without an obvious regression.

Surface-role consistency passed; I traced block layout through folds, nesting, and drag lifts.

Follow-ups: none

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves f542b86: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@teamleaderleo
teamleaderleo merged commit 516779d into feat-cmux-next Nov 5, 2026
212 of 214 checks passed
@teamleaderleo
teamleaderleo deleted the lane/no-color-group-look branch November 5, 2026 13:20
lawrencecchen added a commit that referenced this pull request Nov 5, 2026
Green-5 (a-group-bg-green-5 on 273887a) failed GroupHeaderGlassTests: Automatic
drew glass only over a see-through sidebar, so it overrode Leo's #36225 default
(vivid glass everywhere). Automatic now follows Debug sidebar.groupGlass; Glass
and Solid force their look (Glass with a Debug solid draws vivid). Help text
updated in all 21 locales.

Sidebar-Look: Automatic follows Leo's glass default (#36225)

This branch was previously deployed

1 inactive deployment
ci-routing-agent — f542b860 Deployed Nov 5, 2026 by teamleaderleo via cmux-tui tree preflight #115522
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