cmux-next: the static status look everywhere; indicators name their state (cx-sya4n)
cmux NEXT's static status look, from Static status indicators or Reduce Motion, now reaches every surface. Separately, every status indicator now names its state in every look.
- Tabs draw the static look's still marks. That covers the busy and working icon slot and the needs-input, done and failed badge, which now draws a mark instead of a dot told apart by color alone. They follow the
status.static.shapesDebug toggle like every other indicator. - Pane attention ring: under Static it's the steady ring, with no blink or pulse. Reduce Motion already took a single fade.
- Agent pane: its theme sends
statusIndicators: "static"under Static or Reduce Motion, and"animated"otherwise. The page'sdata-status-indicatorsrules come from #21657.AgentPaneViewre-applies the theme when the setting changes. - Labels: every
StatusIndicatorView's tooltip and VoiceOver label is the state's short name (StatusIndicatorState.shortLabel): Working, Loading, Paused, Waiting, Needs permission, Question, Sign-in needed, Error, Done. A tab's VoiceOver text names the blocked kind when there is one. No surface shows the name as visible text.
Stacked on #21659. This branch contains #21659's two commits, so review the top two: 976ac374448 (test) and f2c86b2a86f. It doesn't need #21662 (the Settings row). It does need #21657 for the agent pane's page to act on the look.
Freeze WINDOW areas: a CmuxNext string catalog (CmuxNextDesign/Resources/Localizable.xcstrings, nine status.label.* keys) and scripts/localization-allowed-omissions.json. No settings schema, Package.swift or Cargo changes.
cx-sya4n: blinking lights give a teammate headaches.
Testing
-
StaticStatusIndicatorTests(CmuxNextAppTests) covers:- every state's indicator has a tooltip and an equal VoiceOver label, and the nine labels differ
- under Static, every tab state draws a still, non-dot mark with no loop
- with the shapes toggle, every tab state draws its own mark
- the attention ring doesn't loop or blink under Static
- the agent pane's theme reports
staticunder Static or Reduce Motion
The test is committed first (976ac374448), where it's red as a compile failure. The fix is f2c86b2a86f. Neither has run yet: this host is Linux, so this PR's macOS CI lane is the first run.
-
Localization audit:
- The nine
status.label.*keys carry all 21 catalog locales, taken from #20511. localization_catalog.py checkon the Design catalog reports nothing for them.- Two shared spellings are recorded as
identityLocalesin the omissions file: es "Error" and fr "Question". - The changed Swift has no new bare English.
scripts/localize-changescouldn't run here because this sparse checkout has noweb/.
- The nine
-
Locally on Linux:
check-motion.shpasses andlint-swift-post-edit.shis clean.
Changelog
Added: in cmux NEXT, status indicators name their state in their tooltip and to VoiceOver; under Static or Reduce Motion, tabs, the attention ring and the agent pane stand still too.
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Extends cmux NEXT's static status look, from Static status indicators or Reduce Motion, to every surface, and gives every status indicator a tooltip and VoiceOver label naming its state instead of signifying it by color or motion alone.
What changed
- Tabs draw the static look's still marks for busy/working and the needs-input, done and failed badges; badges no longer fall back to a dot told apart by color alone.
- The pane attention ring is the steady ring under Static, with no blink or pulse.
- The agent pane's theme sends
statusIndicators: "static"under Static or Reduce Motion, and re-applies the theme when the setting changes. - Every indicator names its state (Working, Loading, Paused, Waiting, Needs permission, Question, Sign-in needed, Error, Done) in its tooltip and VoiceOver label, in every look; a tab's needs-input VoiceOver text names the blocked kind.
- The Debug toggle
status.static.shapesswitches the static look between the Static set's glyphs and per-state shapes.
Testing
StaticStatusIndicatorTestscovers the markings, stillness, agent-pane theme, and labels; the tab tests needStatusIndicatorViewto lay out its host again when the static look hides or shows a glyph.
Freeze WINDOW
- Nine
status.label.*keys land in the Design catalog with all catalog locales, and two identity locales are recorded inlocalization-allowed-omissions.json.