CmuxNext: quieter sidebar group headers and the theme's group colors, as Debug choices
cg-design-judge's sidebar Thunderdome (108 blind bouts, Tact #115) found the solid pastel group header bands the loudest thing in the NEXT sidebar, and the same in Catppuccin Latte and Apple System Colors Light. Leo's rule is that group colors come from the theme. Lawrence put the fixed palette back as the default on 2026-10-13 ("familiar group colors first") and chose the solid band on 2026-10-11 (cx-qno.22), so this PR adds the quieter looks and the theme's colors as Debug Settings choices, keeps today's look as the default, and asks Leo and Lawrence to pick the default.
SHOW LEO: hold for Leo's OK. Not merging.
Captures
A fleet DEV build of this head (fefbc0f68f), one window, sidebar crops. Each grid shows the four header looks (columns) with the fixed palette (top row) and the theme's colors (bottom row). The first column, top row, is today's default and is unchanged. The sidebar has four groups: Backend (red), Frontend (green), Infra (orange, collapsed) and Docs (purple). The selected row is workspace-1, and no row is hovered.
Apple System Colors Light

Apple System Colors (dark)

Rose Pine Dawn (light)

Rose Pine (dark)

Live switch (Apple System Colors Light, theme colors): band, then line, tinted, wash and back to band. Each change applies at once, with no relaunch.

Full quality:
The choices (Debug Settings, sidebar)
sidebar.groupHeader: how a group header draws.band(default): today's solid rounded bar in the group's color.line: the name in primary ink, and the group's color only as a dot where its members' line starts.tinted: the name in the group's color (darkened as far as 4.5:1 text contrast needs), with the dot.wash: a faint wash of the group's color behind a name in primary ink, with the dot.
sidebar.groupColors: where group colors come from.fixed(default): the fixed group palette, the same in every theme.theme: the theme's own color for each group color (its terminal palette,GroupColor.themeRGB). It applies to the dot, the members' line, the band, the drag lift and the group editor's swatches. Grey and custom colors stay as they are.
Both switch live; the quiet looks take the row's own hover, editor and drop fills (the wash steps over its own color, as the band does). Minimal mode keeps its thin header.
In the app (first capture)
An earlier fleet DEV build of this PR, one window per theme, sidebar crops. The first column is today's look; the others are the choices with the theme's colors.

My pick: line with theme colors. It is the quietest: the color keeps its place as the dot and the members' line, so each group still reads at a glance, and the header no longer outweighs the rows. tinted puts red and green into names, where they compete with the error and success status colors (a red group name reads like a failure). wash is gentle but is still a band.
On Leo's OK: flip the two defaults (band to line, fixed to theme) in SidebarGroupHeaderLook.swift and update GroupPaletteDefaultTests, which pins today's default. Lawrence's 2026-10-13 call on the fixed palette needs his OK too.
Tests
GroupHeaderThemeLookTests, red on the test commit and green on the fix:
- With the theme's colors, every group's dot and members' line are the theme's color, and red differs between Latte and Apple Light.
lineandtinteddraw no band, show the dot, and draw the name in primary ink or the group's readable color.washis tinted but faint (under 1.25:1 against the sidebar), behind a name in primary ink.
GroupPaletteDefaultTests still passes: the default draws exactly what it did.
Fleet receipts:
- Red, test commit
fb91d3bdcbe3(light stepe55b9851df694d906ecb2775):GroupHeaderThemeLookTestsfails with 57 issues on behavior (the band still draws, no dot, the name keeps the band's ink, the fixed palette). - Green on
11960536ad3d(light step18c90a2caa5bffa57c081a88):GroupHeaderThemeLookTests,GroupPaletteDefaultTestsand 293 other suites pass. Three reds, none from this PR:AgentChatFromHomeTestsfails on base sincef9490028b939(the docked Home default).SettingsSchemaExportTests.exportIsFresh: base's settings schema is stale; this PR changes no setting, and the diff does not include its keys.- The step's same-tree guard exits 1: the worker lacked this head's cmux-tui tree, so the daemon suites skipped.
The tinted-name expectation was refined in the fix commit to hold 4.5:1 text contrast; it failed on the red commit either way.
- Release compile on
11960536ad3d(isolated step2feca8d1d864ef0d55e784e4):BUILD SUCCEEDED.
Bead: cx-7yywz.
Review fix on fefbc0f68f26 (Opus review): the group header and the members' line now keep one observation of the Debug Settings look at a time, like UnreadBadgeView; before, each layout pass registered another and a later change fired one repaint per pass.
- Release compile on
fefbc0f68f26(isolated step13cb337fcceda3a5661f4ac0):BUILD SUCCEEDED. - Suites on
fefbc0f68f26(light step0c8686c3cd5fe5eabd3c8705):GroupHeaderThemeLookTestsandGroupPaletteDefaultTestspass. Failures are the base redsAgentChatFromHomeTests(docked Home default) andSettingsSchemaExportTests(stale base schema).
Review nits left for the call: the group editor and the drag lift read the setting without observing it (short-lived views); a tinted name over the hover fill can fall slightly under 4.5:1; nothing forces adjacent groups apart in theme mode (yellow and orange can come out close in light themes); no test yet for a live setting flip on existing rows, dark mode, or a theme with fewer than 8 ANSI colors.
Changelog
none (Debug Settings choices; the default is unchanged until Leo's call)
🤖 Generated with Claude Code