cmux-next: a static status look, on under Reduce Motion (cx-sya4n)
Under macOS Reduce Motion, cmux NEXT's status indicators now stand still on the Static set's glyphs, whatever Debug icon set is picked (sidebar rows and every other StatusIndicatorView). Those are #20410's StaticStatusGlyph shapes: a half-filled ring for work, an empty bubble for waiting, a shield for permission or sign-in, a check disc and a ! diamond. Before, Reduce Motion only stopped the icon set's animation, so the Codex-like set fell back to a still ring and the other sets to whichever mark they stopped on (cx-sya4n: blinking lights give a teammate headaches).
StatusIndicatorSettings.animation(animatedby default, orstatic) and Reduce Motion together makeStatusIndicatorConfig.isStatic. A later slice adds the setting's row to the Settings page.StatusIndicatorPlan.make(isStatic:)draws the static look:StatusIconSet.still's plan with no animation. Loading keeps its style's still glyph, and known progress keeps its ring.- Leo's call on #20511: the Static set's glyphs are the default. #20511's
StatusMarkshapes stay available behind a new Debug toggle,status.static.shapes(Debug Settings > Status Indicators). The shapes are a dot, hand, ? bubble, key, !, x in a ring, check and empty ring. plans/cmux-next/status-indicators.mddescribes the look.
Tabs, tooltips and VoiceOver labels, the attention ring and the agent pane pick up the look in a later slice of #20511. No user-facing strings: the toggle is Debug-only, and its label is plain text like the other status tunables.
Testing
-
StaticStatusLookTests(CmuxNextDesignTests) checks:- Every icon set draws the Static set's plan with no animation in the static look.
- The shapes toggle gives all nine states distinct still shapes.
isStaticfollows the setting and Reduce Motion, including the pinned override throughStatusIndicatorAppearance.- A
StatusIndicatorViewunder Reduce Motion shows the still working and permission glyphs with no running animation.
The test is committed first (47a80171505), where it's red as a compile failure. The fix is ecb86951cf7. Neither has run yet: this host is Linux, so this PR's macOS CI lane is the first run.
-
Locally on Linux:
check-motion.shpasses andlint-swift-post-edit.shis clean.- In
verify-local.py --affected origin/feat-cmux-next,localization-defaults,project-tests,test-wiring,feature-flagsandbackend-migrationspassed. xcstrings,localization,project,package-groupsandlaunch-policyfailed on files this diff doesn't touch: catalogs missing from the sparse checkout, existingneeds_reviewentries, and the Xcode project.
Changelog
Changed: in cmux NEXT, Reduce Motion shows still status glyphs (one shape per state) instead of stopped animations.
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Under macOS Reduce Motion, cmux NEXT's status indicators now stand still with a distinct glyph per state instead of a frozen animation frame, whatever icon set is selected.
Details
StatusIndicatorSettings.animation(animatedorstatic) and Reduce Motion both drive the new static look; Reduce Motion always forces it.- The static look draws the Static set's glyphs by default; a Debug-only toggle
status.static.shapesswitches to distinctStatusMarkshapes. - Loading and known progress keep their arc/ring glyphs, just still.
- Tests cover glyph selection, the shapes toggle, and
isStaticfollowing the setting and Reduce Motion.