cmux-next: a static status look, on under Reduce Motion (cx-sya4n)

Merged
TE
19d ago
+173-7

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 (animated by default, or static) and Reduce Motion together make StatusIndicatorConfig.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 StatusMark shapes 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.md describes 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.
    • isStatic follows the setting and Reduce Motion, including the pinned override through StatusIndicatorAppearance.
    • A StatusIndicatorView under 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.sh passes and lint-swift-post-edit.sh is clean.
    • In verify-local.py --affected origin/feat-cmux-next, localization-defaults, project-tests, test-wiring, feature-flags and backend-migrations passed.
    • xcstrings, localization, project, package-groups and launch-policy failed on files this diff doesn't touch: catalogs missing from the sparse checkout, existing needs_review entries, 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


View with [code]smith Autofix with [code]smith
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 (animated or static) 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.shapes switches to distinct StatusMark shapes.
  • Loading and known progress keep their arc/ring glyphs, just still.
  • Tests cover glyph selection, the shapes toggle, and isStatic following the setting and Reduce Motion.