cmux NEXT Home: no top banner over the Chief chat; messages fade out at the top

Merged
TE
7d ago
+386-42

Leo-ask: ask-541000e7b0

Leo, on the Chief chat: "why is there a top banner? this is so ugly. iMessage dissipates that, and we don't even need this in the first place."

What changes for the person

  • The Chief chat has no header now: no avatar, no "Chief ›" pill, no glass band pinned over the transcript. Text never runs under anything.
  • The oldest message rests 16 pt under the pane's top (was 88 pt under the header).
  • As messages scroll up they fade out over the top 16 pt, like the scroll edge in Messages: a soft dissolve on the rows only, no band and no fill.
  • Clicks and scrolls at the top of the pane reach the messages (the hidden header no longer takes them).
  • Chief settings still open from the pane's tools, the command palette (Toggle Chief Settings) and the pet's menu.
  • Debug Settings > Home > Avatar and name over the chat brings back the old header (conversations opened after a change follow it).

How

  • HostView.useBareTop() (HeaderGlass.swift) hides the pane header and backdrop; placeNativeViews hands the window view a 16 pt rows inset and a 16 pt top fade; the scroll view starts at 0.
  • Vendored WindowView/HostHooks read the rows' top inset from rowsTopInset (default Messages' 80 + 8) instead of the constant, and the transcript clip's mask is a CAGradientLayer that ramps in over topFade points (solid when 0, as before). Patches regenerated against the pin (reverse-applied and round-tripped).
  • The top-right panel toggles from #22702 stay: with no header, PaneHeaderView.bare hides the avatar and pill, puts the toggles 8 pt from the top right, and lets clicks through everywhere else. The rows rest under the toggles (HostView.bareRowsTop: 44 pt with them, 16 pt without), and the first-run panel follows when the toggles come or go.
  • HomeTunables.chatHeader (default off) picks bare top or the old setHeaderGlass().

Changelog

Changed: the Chief chat has no header over its messages; they fade out at the top as they scroll.

Tests

Fleet runs (Xcode 26.6) at daa16abd and again at the head 655580c7: HomeBareTopTests, HomeHeaderGlassTests, HomeKeyboardTests pass. Follow-up commit (review notes): VoiceOver, older-page paging, the scroll knob and the flight recorder read the visible top (visibleTop) instead of 80 pt; the test allows half a point for the pixel-snapped offset.

HomeBareTopTests: no avatar/pill/band, the hidden header takes no click near the top, the scroll view reaches the top, the oldest row rests at 16 pt, the mask is ~0 at the top edge, ~0.5 mid-fade and full from 16 pt down; the header pane keeps Messages' geometry (88 pt, no fade); theTopRightTogglesStayWithNoHeader: the toggles sit top right, take their clicks, and the rows rest under them.

HomeBareTopFirstRunTests (CmuxNext): toggles that arrive after the first layout move the first-run panel under them. It was committed test-first at 6b4840a9; the fix is 5b5f6961, after review of the base merge 00957c00. The red and green fleet runs are in progress and will be posted as a comment. cmux-ci compile-check --ref 5b5f696110c70d0a1aeaa236b10b14b9e9b4bfdc --app --package CmuxMessagesLab: passed.

Observed / Not run

Observed: the fleet runs and compile above, and the real-app captures below. Not run: a capture showing the toggles. The capture's debug fixture page never adds them, so the 00957c00 capture shows the same bare top as 655580c7.

Before / after

Before (base 0ba602a4): the avatar and "Chief ›" pill on a blurred band over the messages.

LightDark
lightdark

After: no header; the top row dissolves at the edge.

Capture steps-85ecd27cd2 at 00957c004293 (fleet build, capture mini, text checked for private data)

LightDark
lightdark

Agent session: cosmic-gray

🤖 Generated with Claude Code