Skip to content

test(next): the accent is never orange and glass is never opaque - #23133

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
cmux/accent-glass-invariants
Oct 21, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
cmux/accent-glass-invariants

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Two standing rules become checks that fail. The accent rule runs two cases:

  • (a) The default theme, with the macOS accent forced to orange, shows no orange anywhere.
  • (b) Themes on schemas/theme/orange-accent-allowlist.json keep their own orange accent but still never show the system accent or opaque glass. Today that's Clay Orange (both its dark and light files). It's one named entry, allowed for now while coord-deputy confirms with Leo, so dropping it is a one-line change.

The gallery's theme input now carries a theme's own # cmux-accent, as ThemeBridge does in the app. Before this, the gallery dropped it.

The rules:

  • The accent is never orange. macOS draws its system accent, which is orange when someone picks orange in System Settings, anywhere a surface asks for it. Our surfaces never ask; every accent comes from the theme.
  • Glass is never opaque. A surface that blurs what's behind it and then paints a fill with alpha 1 hides the blur.

pane-toolbar found a menu highlighted in the system accent on 2026-10-20.

What the first full scan found, fixed here

The web scan covered 1529 of 1547 stages (the other 18 don't render in the gallery, on base too). It reported three things:

  • Opaque glass on .acpmux-composer-box, on nearly every agent-pane stage. On an opaque window the composer card is solid by design (Leo 10-14), but styles.css still blurred behind it with blur(18px). The blur now applies only to the see-through glass; it is off on an opaque window and under Reduce Transparency (composerStates.css).
  • outline: auto on the composer's context-breakdown popover. A popup takes focus when it opens, and the engine's ring is drawn in the macOS accent. popupSurface.css, which every host loads, now turns that ring off for every .ui-popup; their rows show the highlight.
  • A theme picker circle filled with AccentColor blue (false positive). ThemeBall paints a theme's own palette, and one theme's blue happened to match. The scan now skips [data-theme-ball].

The baseline stays empty.

Web: webviews/test/accent-glass-invariants.test.ts (browser lane, Chromium)

Renders every web gallery entry and variant in its component frame on the default theme. It scans the stage as it first paints, then twice more after Tab (focus rings are where the accent leaks most). Rules (test/support/accentGlassScan.ts):

  • system-accent: a computed color equal to a system color keyword that carries the OS accent (AccentColor, Highlight, SelectedItem, -webkit-focus-ring-color, -apple-system-control-accent), resolved in the engine. Text selection is included.
  • orange-accent: an accent-bearing color with an orange hue (OKLCH chroma ≥ 0.1, hue 35–78°). Accent-bearing means a visible outline, the caret, accent-color, ::selection, or the fill or border of a selected or highlighted row.
  • native-control-accent: a checkbox, radio, slider, progress bar or meter with accent-color: auto and its native appearance.
  • auto-focus-ring: outline: auto on the focused element.
  • opaque-glass: a backdrop-filter surface whose background alpha is 1. Reduce Transparency is never set, since solid is right there.

A browser can't be told to use an orange system accent, so the scan resolves the keywords instead. Known findings go in test/accent-glass-baseline.txt with their owner. A new finding fails the test, and a fixed one prints "drop it".

Native: CmuxNextDesignTests/SystemAccentOrangeTests.swift

Sets AppleAccentColor to orange in the process's argument domain, in memory only. It compares against systemOrange too, so the check holds even if AppKit keeps the host's accent. It checks the default theme's accent, accentFill, focusRing, menuHighlight and selectionFill, plus:

  • a themed menu's highlighted row (sampled),
  • a selected ThemedTableRowView (sampled, not emphasized),
  • a ThemedBezelButton's bezel,
  • the themed text fields' focus ring type.

Changelog

none

Observed / Not run

No capture: the composer change only removes a blur behind a card that is already opaque, so nothing shows through it either way, and the popup change removes a focus ring the popups never meant to draw. Both are covered by the scan, not by pixels.

Agent session: cosmic-gray

🤖 Generated with Claude Code

A browser-lane test renders every web gallery stage and fails on a computed
color that reads the system accent (AccentColor, Highlight, the focus-ring
color, a native control's accent-color: auto, an outline: auto ring), on an
orange accent-bearing color, and on a backdrop-filter surface with an alpha-1
fill. Known findings live in test/accent-glass-baseline.txt with their owner.

A CmuxNextDesign suite sets the macOS accent to orange for its process and
checks the default theme's accent colors, a themed menu's highlight, a
selected table row, a bezel button and the text fields' focus ring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a45c-7f43-a883-a2389c4766e5&host=cosmic-gray
@teamleaderleo teamleaderleo added the risk:low Risk tier (docs/ci/risk-tiers.md) label Oct 21, 2026
@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 eca6eb0: 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=pr23133 -f ref=cmux/accent-glass-invariants -f platform=macos -f backend_mode=local

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

gh run download 39604561615 -R manaflow-ai/cmux -n gallery-advisory-23133-eca6eb0fdbdb115d630c8babc5f9dcb92f2c6a6b (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.header-tools/idle Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/idle Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/panels-open Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/panels-open Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/browser-preview Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/browser-preview Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/grouped-controls Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/grouped-controls Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/pull-request Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/pull-request Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/pull-request-status Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/pull-request-status Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/pull-request-merge Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/pull-request-merge Apple System Colors unchanged 0% own popupSurface.css
agent-pane.header-tools/worktree Apple System Colors Light unchanged 0% own popupSurface.css
agent-pane.header-tools/worktree Apple System Colors unchanged 0% own popupSurface.css
agent-pane.permission-panel/buttons-current Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-current Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-under Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-under Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-segmented Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-segmented Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-text Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/buttons-text Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/pending Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/pending Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/expanded Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/expanded Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/allow-once Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/allow-once Apple System Colors unchanged 0% own composerStates.css
agent-pane.permission-panel/collecting Apple System Colors Light unchanged 0% own composerStates.css
agent-pane.permission-panel/collecting Apple System Colors unchanged 0% own composerStates.css

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

Unclear: web / react-apps-check (1) failed: no known signature; failed step: Fail on the gate checks.

CI failed on eca6eb0fdb (run 39604561486 attempt 1): 2 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (1) unknown no known signature; failed step: Fail on the gate checks
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (1), web / react-apps-check are not machine failures.

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.

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Script tests (pin-cmux-tui, embed-cef, ensure-cef store) (+1 more) is not red on the base 0284c98; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base 0284c98; do not merge until green; see lane-rules
red: web / react-apps-check; NEW: green on the base 0284c98; do not merge until green; see lane-rules
red: web / react-apps-check (1); NEW: green on the base 0284c98; do not merge until green; see lane-rules

CI fast guards failed on eca6eb0fdb (https://github.com/manaflow-ai/cmux/actions/runs/39604561486). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

Tour of eca6eb0fdb (run)

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

Path-selected interactions

Interaction Changed paths
glass webviews/src/agent\-session/acpmux/composerStates.css
webviews/src/gallery/theme/web.ts
webviews/test/accent\-glass\-baseline.txt
webviews/test/accent\-glass\-invariants.test.ts
webviews/test/support/accentGlassScan.ts
core Packages/macOS/CmuxNext/Tests/CmuxNextDesignTests/SystemAccentOrangeTests.swift

core-before: the media could not be published (upload of 23133/eca6eb0f/next-core-before/shots/01-launch.png failed: gh: is at d2d20e1 but expected 774e730 (HTTP 409))

Core UI (after): PASS — 19 ok

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
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

### Glass and themes \(before\): PASS — 14 ok

tour

Video (mp4)

# Step Result Command
1 Launch over art ok
2 New workspace ok cmux workspace new --name Glass
3 Terminal text and ANSI colors over art ok cmux workspace name:Glass screen current pane current tab current terminal current write --text "clear; echo 'cmux glass tour: plain text stays readable over the art'; for c in 1 2 3 4 5 6 7; do printf '\\033[3%sm color %s \\033[1m bold \\033[0m' $c $c; done; echo\r"
4 Split right ok cmux action run splitRight
5 Agent chat beside the terminal ok cmux agent new-chat
6 Command palette on glass over art ok cmux action run commandPalette
7 Close the palette ok cmux action run commandPalette
8 Soft Blue over art ok cmux settings set appearance.theme "Soft Blue"
9 Soft Blue Light over art ok cmux settings set appearance.theme "Soft Blue Light"
10 Clay Orange Light over art ok cmux settings set appearance.theme "Clay Orange Light"
11 Art off: Clay Orange Light ok cmux settings unset appearance.background
12 Clay Orange ok cmux settings set appearance.theme "Clay Orange"
13 Soft Blue ok cmux settings set appearance.theme "Soft Blue"
14 Soft Blue Light ok cmux settings set appearance.theme "Soft Blue Light"
Screenshots (14)

1. Launch over art
Launch over art

2. New workspace
New workspace

3. Terminal text and ANSI colors over art
Terminal text and ANSI colors over art

4. Split right
Split right

5. Agent chat beside the terminal
Agent chat beside the terminal

6. Command palette on glass over art
Command palette on glass over art Command palette on glass over art (panel)

7. Close the palette
Close the palette

8. Soft Blue over art
Soft Blue over art

9. Soft Blue Light over art
Soft Blue Light over art

10. Clay Orange Light over art
Clay Orange Light over art

11. Art off: Clay Orange Light
Art off: Clay Orange Light

12. Clay Orange
Clay Orange

13. Soft Blue
Soft Blue

14. Soft Blue Light
Soft Blue Light

### glass\-after: the media could not be published (upload of 23133/eca6eb0f/next\-glass\-after/shots/08\-soft\-blue\-over\-art.png failed: gh: is at 83a4d08 but expected 305a1d6 \(HTTP 409\))

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 chief-pet-avatars-a9 on cosmic-gray · session

@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 3 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp_53tfn3c/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpt5ixr0uw/summary-missing.json (live):/summary-missing.json (live): View Logs
test/agent-pane-stream-jitter.test.ts/agent-pane-stream-jitter.test View Logs

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-5kwvb created for this PR by the cmux coordinator.

teamleaderleo and others added 2 commits October 21, 2026 00:33
The orange-accent invariant now runs two cases. (a) The default theme with
the macOS accent forced to orange shows no orange anywhere. (b) A theme on
schemas/theme/orange-accent-allowlist.json keeps its own orange accent but
never the system accent or opaque glass. The list has one named entry, Clay
Orange (both its dark and light files), so dropping the exception is a
one-entry change. The orange hue range now starts at 35 degrees, so Clay's
clay (38) counts as orange.

The gallery's theme input now carries a theme's own '# cmux-accent', as
ThemeBridge does in the app; the gallery used to leave it out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a45c-7f43-a883-a2389c4766e5&host=cosmic-gray
It timed out at the 120 s file limit. Pages are reused per worker (eight),
case (b) scans each entry's first variant only, a stage gets 20 s to render,
and the file declares a 900 s limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a45c-7f43-a883-a2389c4766e5&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

codex-review: SHIP at 414d091

  • Reviewed the current diff, its focused tests, and the affected call paths; no correctness bug found.

teamleaderleo and others added 2 commits October 21, 2026 03:41
… focus ring

The accent and glass scan found both on base: the composer card kept
backdrop-filter blur under its solid surface on an opaque window, and a
popup that takes focus on open drew the engine's outline:auto ring
(WebKit paints it in the macOS accent). The scan skips theme preview
balls, which paint a theme's own palette.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a45c-7f43-a883-a2389c4766e5&host=cosmic-gray
@teamleaderleo teamleaderleo added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Oct 21, 2026
…olds its scopes and restores the accent

Review nits: a scan that rendered nothing passed; the table row's scope was
held only weakly, so it drew in the app theme; the orange argument domain
outlived the suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c01-a45c-7f43-a883-a2389c4766e5&host=cosmic-gray
@teamleaderleo
teamleaderleo merged commit f86271b into feat-cmux-next Oct 21, 2026
@teamleaderleo
teamleaderleo deleted the cmux/accent-glass-invariants branch October 21, 2026 15:26
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

base-red-watch: cmux-next web / web / react-apps-check (1) went red on feat-cmux-next in https://github.com/manaflow-ai/cmux/actions/runs/39625647706 (first red at f86271b, last green at 012f30d). Suspect: #23133 (commit f86271b). If it is yours, fix forward on feat-cmux-next.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

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