cmux NEXT: native Session Info has no card and ends after its content

Merged
TE
3d ago
+154-23

Brief item 1 of the native Session Info parity pass: no panel background card, and no empty space under the content.

Leo (2026-11-01, on the native panel): "why is the background STILL not removed"
Leo (2026-11-02): "IT IS TAKING THIS STUPID F***ING SPACE FOR NO REASON" (empty space under the content)

What changes

  • No card over the gutter. AgentPaneSessionInfoPanel no longer wraps its content in Glass.makeOverlayPanel (carries the earlier lane/si-no-panel-bg commits). Over the pane's empty right gutter the content stands on the pane itself.
  • Glass only over the chat. When the page sends a foot (the panel lies over the chat's column and stops above the composer, the web panel's data-over-chat), the transcript runs under it, so there, and only there, the content lies on the shared overlay glass (backing). That glass follows Reduce Transparency (the solid surface), which keeps the Reduce Transparency fallback. It goes away again when the panel moves back over the gutter.
  • Hugs its content. sessionInfoFrame takes the list's measured height at the panel's width (SessionInfoListView.height(forWidth:), a pure measure split out of place()) and caps it at the room above the foot, top-anchored under the header. The list reports height changes (new rows, a fold, a width drag, a deferred update after a drag or menu), so the frame follows. A list taller than the room still scrolls, as before.

Spec lines implemented (leo-workspace design/session-info.md / session-panel.md via sessionInfo.css):

  • "It is still a card that floats, never a column: with little to show it ends right after its last section, with no fixed or minimum height (Leo, 2026-10-22: "the card should just end when there's no more content to show")"
  • "Glass, the composer's glass ... Reduce Transparency is the only opaque case."
  • "Never opaque outside Reduce Transparency."

Regressed by #31930 (native AppKit glass, drew the panel as a full-height card).

Tests (AgentPaneNativeSessionInfoTests): panelHugsItsContentWithNoEmptySpaceUnderIt (frame hugs, caps at room, unflipped top anchor, real list measure grows with a row and asks for a relayout), panelHasGlassUnderItOnlyOverTheChat (no OverlaySurfaceView/NSVisualEffectView over the gutter; glass under the content with foot; opaque material available; removed again), plus the existing no-card assertion.

Sibling items (section headers and grip, column structure, header toggle highlight, palette keyword) are separate PRs; this diff touches only the panel's backing and frame.

Observed / Not run

  • Observed: prepush gate clean. Fleet compile and the suite are running at the head; results follow as a comment.
  • Not run: native capture compare (pending).

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

Fixes the native Session Info panel in cmux NEXT: no background card, no empty space under its content.

  • Removes the Glass.makeOverlayPanel card; content now sits directly on the pane.
  • When the page sends a foot (panel floats over the chat's column), content lies on overlay glass that follows Reduce Transparency, and loses it again over the gutter.
  • Panel height is the list's measured height at the panel's width, capped at the room above the foot and top-anchored under the header, so it ends after its last section.
  • List height changes (new rows, folds, width drags, deferred updates) resize the frame; lists taller than the room still scroll.
  • Adds tests for frame hugging, the cap, the top anchor, and glass presence only over the chat.