fix(sidebar): a row's working spinner draws at the status glyph size

Merged
TE
2d ago
+61-6

Leo, 2026-11-03:

  1. i think the spinners are maybe a bit too big in this situation

Since the 2026-11-01 "every icon is still small" follow-up, every non-dot row badge (RowBadgeView) drew in a 14 pt box, so at compact density the working spinner outweighed the 8 pt unread dot and the row's leading icon.

Change

  • A working or loading badge now draws at RowBadgeView.spinnerSide = SidebarStyle.statusGlyphSize (10 pt compact, 12 comfortable): the same box the shared indicator already takes on badge-less rows. It stays centered on the same cell, so nothing moves when work starts or ends.
  • The red warning and needs-you marks keep 14 pt (Leo's earlier ask is unchanged for them).
  • Spec: plans/cmux-next/sidebar-owner.md entry.

Tests

  • RowBadgeSpinnerDensityTests: at each sidebar density × minimal mode, the spinner fits its trailing slot, is no larger than the leading icon, the status glyph or the warning, and stays centered.
  • RowBadgeMarkSizeTests.theSpinnerIsSmallerThanTheWarning replaces theSpinnerMatchesTheWarning (the design Leo just asked to change).

Observed / Not run

  • Ran: prepush-gate.py (no new violations).
  • Not run: the Swift suites (they run on the fleet / CI).

Builds on #32699 (group icon size) and #32647 (row gap); neither is undone. PR 2 (density-scaled icon tokens) follows on top.

Changelog

Fixed: the sidebar's working spinner is no longer larger than the row's other marks.

Agent session: agent session

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Shrinks the sidebar's working/loading spinner to match the row's status glyph size so it no longer outweighs the leading icon and unread dot at compact density.

  • Spinners draw at SidebarStyle.statusGlyphSize (10 pt compact, 12 comfortable) on the same cell center; the red warning and needs-you marks keep 14 pt.
  • Adds RowBadgeSpinnerDensityTests and updates RowBadgeMarkSizeTests to assert the spinner is smaller than the warning.