Sidebar: a slight gap beside each row and rounder row corners, as ChatGPT's

Merged
TE
2d ago
+68-36

Leo, 2026-11-02, comparing ChatGPT's selected sidebar row (inset from the sidebar's edge, soft corners) with ours (running right up to the divider, tighter corners):

"CHATGPT HAS A SLIGHT GAP"
"WE DON'T"
"JUST ADD A SLIGHT GAP (PADDING) AND SMOOTH OUT A BIT MORE OF OUR CORNERS ON THE SIDEBAR WORKSPACES"

What changes

  • Gap. A row's fill now stops the leading inset short of the sidebar's trailing edge (SidebarStyle.rowEdgeGap) and of the curved main-pane card (rowToPaneGap): 6 pt compact, 8 pt comfortable, the same as its left side. It was 1.5 pt / 2.5 pt. ChatGPT keeps 8 pt (16 px at 2x) between its 30 pt row and the divider; ours scales that to the 24 pt compact row and matches the left inset exactly.
  • Corners. Every row fill's corner (SidebarDensityTokens.rowCornerRadius: workspace rows, pinned rows, group headers, the lift card) is the item corner plus space1: 8 pt compact, 9 pt comfortable, continuous curve as before (was 6 / 7). ChatGPT's measures about 9 to 10 pt on its 30 pt row.
  • Unchanged: row height, icons, text, colours, glass, and the trailing marks, which stay on the grid's 24 pt column (trailingCenter reads sidebarTrailCenter - rowEdgeGap, so the column does not move). The Chrome group line's inside inset keeps its measured 4 pt (it now reads the item corner directly).

Spec: leo-workspace design/sidebar.md and design/grid.md §5.4 updated with the gap and radius; owner note in plans/cmux-next/sidebar-owner.md.

Tests updated to the new geometry: SidebarRowGutterTests (fill ends the inset from the edge), SidebarGridAlignmentTests (edge gap per density), SidebarGroupLineLayoutTests (inside inset from the item corner).

Risk: low; token values only, contained to the sidebar row fill. Lands as a leo-named fix.

Changelog

  • Changed: sidebar rows keep a small gap from the sidebar's edge on both sides and have softer, rounder corners.

Observed / Not run

  • Measured ChatGPT's gap and corner from the design references (apps/chatgpt/live/sidebar-machine-details-hover-card.png, sidebar-chat-hover-preview.png).
  • Fleet compile check and sidebar suites: see comments.

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

Matches the sidebar's selected row styling to ChatGPT's, so rows sit with an even gap from both sidebar edges and have softer, rounder corners.

  • Row fills now stop the leading inset (6 pt compact, 8 comfortable) short of the sidebar's trailing edge and of the curved main-pane card, replacing the previous 1.5/2.5 pt gaps.
  • Row fill corners are one space1 rounder (8 pt compact, 9 comfortable), near ChatGPT's measured corner on its taller row.
  • The trailing clearance and the slot clamp are both measured from where fills ended before, so the gap moves the fill without shifting the trailing column or the resize-band reach: marks stay on the grid's 24 pt line and footer Search / wide band badges don't move inward.
  • Row height, icons, text, colors, glass, and trailing marks are unchanged.
  • Tests updated for the new geometry: SidebarRowGutterTests, SidebarGridAlignmentTests, SidebarGroupLineLayoutTests, SidebarNestedGroupAlignmentTests, SidebarRowHoverFollowTests.

Token-only changes, contained to sidebar row fills and slot clamps, so risk is low.