cmux-next: add opt-in animation variant lab

Merged
TE
20d ago
+1645-867

What changed

CMUX Next now exposes three opt-in animation labs in Debug Settings so pane, sidebar, and tab-loading motion can be compared without changing production defaults:

  • motion.pane.variant: standard, crisp, softLanding
  • sidebar.collapseMotion: slide, slideFade
  • tabs.loadingAnimation: instant, fade, fadeScale, fadeSlide

The same branch keeps arriving split content at final host geometry while it fades in.

Tagged dogfood

Fleet builds used tags cmux-anim-20261016 (ce8602e70ddc5f56f205da3c) and cmux-anim-20261016b (c7582966fac0653ca613b195). I recorded side-by-side reels with debug.window_record and reviewed frame captures with debug.motion traces.

The first sidebar slideFade prototype was too slow: about 345 ms and two display links versus about 189 ms for opaque slide. Commit a33dbd12339 repaired it by running opacity on the fast fade tokens independently from the structural width leg. The corrected capture measured fade legs around 133 ms, width legs around 167 ms, and one display link.

Capture notes and local paths are in animation-variants-2026-10-16.md.

Validation

  • swift test --filter PaneMotionVariantTests — 5 passed
  • swift test --filter SidebarCollapseMotionTests — 2 passed
  • swift test --filter TabLoadingAnimationTests — 3 passed
  • scripts/cmux-next/check-motion.sh Packages/macOS/CmuxNext — passed
  • Swift frontend parse and git diff --check — passed
  • Tagged fleet builds — completed successfully

Changelog

Added: opt-in CMUX Next animation variants for pane close/expand, sidebar collapse, and tab loading.

Naming transition prototype

  • Added sidebar.workspaceTitleMotion debug variants: instant, crossfade, and lift.
  • The workspace row keeps its measured title slot and transitions only the glyph layer when a generated workspace or agent title arrives.
  • WorkspaceRowViewHoverMotionTests passes; check-motion.sh and crash ratchet pass.
  • The tagged naming build was submitted through cmux-ci; the local-source ingest rejected this checkout because its feature history has no merge base with the fleet client's origin/main, so no new tagged artifact was produced in this pass.

Final naming choice

The reel review selected crossfade as the default. instant and lift remain debug-toggle alternatives. Default daemon allocation names matching workspace-N stay hidden until a meaningful title arrives. The extended comparison is artifacts/animation-recordings-20261017/naming-variants-side-by-side-extended.mp4, with a looping viewer at artifacts/animation-recordings-20261017/viewer.html.

Final tagged build: 94edba79304bdbb7a0ab761b / cmux-anim-naming-20261018, head 22c63721c13edbbb20735c1c323d3d85fd708399.