fix(agent pane): a followed chat reaches the end under Reduce Motion

Merged
TE
18d ago
+61-0

Under Reduce Motion, a chat that follows new output could stop a little short of the end and stay there. The pages' shared Reduce Motion rule (`pages/shared/desktop.css`) sets `transition-duration: 0.01ms` on every element, and `transition-property` defaults to `all`, so the transcript spacer (the scroller's extent) transitioned its height for that 0.01ms. The followed view set its offset against the old height in the same frame and clamped short. `.acpmux-spacer` now has `transition: none`. The Reduce Motion rule's `!important` covers only duration, so it doesn't override this.

This came out of #21665, where it sat outside that PR's Debug toggle. It applies to everyone, so it ships on its own.

Testing

  • `CMUX_BROWSER_TESTS=1 bun test test/transcript-spacer-reduce-motion.test.ts` loads the real stylesheets in Chromium under emulated Reduce Motion, grows the spacer and lists the transitions it starts:
    • red on a47b1c755f4 (the test alone): the height transition starts;
    • green on a9b915bdfe2 (the fix): no transitions.
  • `test/static-status-loops.test.ts` still passes (8/8), and `check:browser-lanes` passes.
  • No app build.

Changelog

Fixed: Under Reduce Motion, a chat following new output scrolls all the way to the end

🤖 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

Fixes a followed chat stopping a bit short of the end and staying there under Reduce Motion.

The shared Reduce Motion rule sets transition-duration: 0.01ms on every element, and transition-property defaults to all, so the transcript spacer transitioned its height for that frame while the followed view set its offset against the old height. .acpmux-spacer now has transition: none; the rule's !important covers only duration, so it doesn't override this. A new browser test loads the real stylesheets under emulated Reduce Motion and asserts no transition starts when the spacer grows.

This PR also merges feat-cmux-next into the branch.