Skip to content

cmux-next: an unfocused pane's tabs fade less on a focus change (strength 0.6 -> 0.4) - #23956

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
fix/softer-unfocused-dim
Oct 22, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
fix/softer-unfocused-dim

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Leo: "and also the "unfoused" opacity shift is MILDLY jarring... i think it's actually ok but just make the opacity shift not as drastic"

Leo-ask: ask-35d63f0002 (opacity part)

Cause

An unfocused pane can be marked in three ways. In a default two-pane split only one of them draws:

  • The veil over the pane (panes.inactiveDimming, theme token 0.10, already softened from 0.14 in cmux-next: unfocused panes dim subtly (a theme token) and ease over 150 ms #22948) draws only with layout dimming on, appearance.borders none with the border indicator, or ringless floating panes with the border indicator. The default appearance.focusIndicator is tabs, so it does not draw. Over a glass window (Leo's glass-clear) its fill is clear anyway.
  • The Ghostty unfocused-split-opacity dim is off unless the user's Ghostty config sets it (cmux loads = 1 first).
  • The unfocused pane's tab fade (ChromeEmphasis .fade, focus.inactiveTabStrength) does draw. cmux-next: an unfocused pane's tabs fade further, so the focused pane is plain to see #22987 raised it from 0.35 to 0.6 so the focused pane is easy to tell apart for Cmd-W. That made the shift on every focus change bigger.

Change

  • focus.inactiveTabStrength default: 0.6 -> 0.4 (Debug tunable; the LayoutStyle literal matches). On a focus change, the selected pill of the unfocused pane now keeps 0.6 of its fill (was 0.4), and its labels mix 40% toward the page (was 60%). The contrast floors (3.5:1, 2.5:1, 2:1) and the 150 ms veil ease are unchanged.
  • 0.4 is a compromise and not a straight halving to 0.3. It stays above the 0.35 that cmux-next: an unfocused pane's tabs fade further, so the focused pane is plain to see #22987 found too faint to show which pane Cmd-W closes. The tunable stays in Debug Settings (Focus > Unfocused tabs strength) for live tuning.
  • FocusedPaneTabCueTests now checks both sides: the unfocused pill keeps between half and two thirds of the focused fill, so the cue stays visible and the shift is not drastic. The label check (fainter than 0.6 of the focused contrast, still above the floors) is unchanged.
  • Docs: plans/cmux-next/focus.md, components/tabs.md, design-tokens.json/.md.

Changelog

Changed: In cmux NEXT, an unfocused pane's tabs fade less when focus moves to another pane.

Observed / Not run

  • Fleet compile-check --app and FocusedPaneTabCueTests (fleet package-test lane) at the head: results are in a comment.
  • No capture: a one-constant change to a Debug-tunable default. The new strength is checked by FocusedPaneTabCueTests on the tokens it produces, and Leo can compare values live with the Debug Settings slider.

Agent session: cosmic-gray

🤖 Generated with Claude Code


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


Summary by cubic

Softens the dim on an unfocused pane's tabs so switching focus is less jarring, while keeping the cue readable.

The default focus.inactiveTabStrength drops from 0.6 to 0.4. 0.6 made the shift on every focus change too drastic; 0.35 was too faint to tell which pane Cmd-W would close. 0.4 keeps the selected pill at 0.6 of its focused fill. The contrast floors and the veil fade are unchanged, and the strength stays tunable in Debug Settings.

  • Updates FocusedPaneTabCueTests to check both sides: the unfocused pill keeps between half and two thirds of the focused fill; the label fade check is unchanged.
  • Updates the LayoutStyle literal and the focus/design-token docs, correcting per-style fade values and the hover fill formula (alpha × (1 − strength/2)) at strength 0.4.

Written for commit 0bd552f. Summary will update on new commits.

View guided diff Turn on auto-fix

Leo: the "unfocused" opacity shift is mildly jarring; keep it, make it
less drastic. With the default focus indicator (tabs, no ring) and no
Ghostty unfocused-split-opacity, the pane veil does not draw, so the
shift a split shows on a focus change is the unfocused pane's tab fade.
0.4 keeps the selected pill at 0.6 of its fill (was 0.4) and still
above the 0.35 that left the focused pane hard to tell.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d2d-622e-7433-aed6-f3c248542f5d&host=cosmic-gray
@teamleaderleo teamleaderleo added the risk:low Risk tier (docs/ci/risk-tiers.md) label Oct 22, 2026
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 0bd552f: 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=pr23956 -f ref=fix/softer-unfocused-dim -f platform=macos -f backend_mode=local

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

@github-actions github-actions Bot added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Oct 22, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Found 12 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpcqr7y5bn/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpqzdnt_l2/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
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
nightly cmux-tui resolve/nightly cmux-tui resolve View Logs
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules)/
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules)
View Logs
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules) (job='web-bundles')/
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules) (job='web-bundles')
View Logs

...and 2 more test failures. View all on Blacksmith

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

From review: the tabs.md table still gave the 0.6 numbers, and
design-tokens.json described the fade's hover fill as alpha * (1 - strength)
where the code uses (1 - strength / 2) and floors the pill at 0.4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d2d-622e-7433-aed6-f3c248542f5d&host=cosmic-gray
@cursor

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

Copy link
Copy Markdown
Collaborator Author

cmux-next crash-class rules / cmux-next crash-class rules is red on 11 of 11 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent subagent): SHIP at 2af1116

  • Reviewer confirmed that, by default, the shift a two-pane split shows is the unfocused pane's tab fade. The veil only draws with the border indicator, borders none or dimsInactivePanes, and the Ghostty dim is off unless the user's config sets it.
  • The tunable default and the LayoutStyle literal agree. Nothing else pins 0.6. Reviewer checked numerically that FocusedPaneTabCueTests holds at 0.4 for all four test themes (pill 0.6x; label contrast 0.28 to 0.44 of focused). The docs table and formula now match the code.
  • Fleet compile-check --app: passed at 4746fed and at 2af1116.
  • Fleet FocusedPaneTabCueTests run (package-test lane) did not reach the tests: ensure-web-bundles fails on base because webviews/src/agent-session/acpmux/inspector/ContextSection.css (added in cmux NEXT Inspector: Context opens to Claude's breakdown; Connectors says N to reconnect #23789) is not listed in build-agent-pane-web.sh. That is a base red, not this PR's.
  • Non-blocking finding, wrong before this PR too: the quiet row says the pill is transparent, but the code keeps 0.4 of its fill.

@teamleaderleo teamleaderleo added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 22, 2026
… web-bundle fix)

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

Copy link
Copy Markdown
Collaborator Author

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent subagent): SHIP at 0bd552f

  • This head is a merge of feat-cmux-next into 2af1116, to pick up the ci: the agent pane page ships the Inspector's ContextSection.css (base red since #23789) #23935 web-bundle fix. Against the new base the PR diff is byte-identical to the 7-file diff reviewed at 2af1116. No conflict was resolved, and nothing in the base update touches inactiveTabStrength or ChromeEmphasis.
  • Fleet compile-check --app passed at this head. Fleet FocusedPaneTabCueTests passed 3/3 at this head.
  • The red checks at this head come from files and jobs this PR does not touch, so they are base reds:
    • crash-class rules (selector super calls);
    • nightly-guards release-notary (restored-terminals-come-back.md highlight);
    • Guard status;
    • cmux-next checks: namespace-type errors in AttentionHighlightLook.swift and ChiefWorkspaceName.swift, and the job-structure test;
    • release rails.

@teamleaderleo
teamleaderleo merged commit 204116d into feat-cmux-next Oct 22, 2026
@teamleaderleo
teamleaderleo deleted the fix/softer-unfocused-dim branch October 22, 2026 05:13
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 0bd552f2 Deployed Oct 22, 2026 by teamleaderleo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant