Session Info always pushes the chat left, never covers it; a narrow pane narrows it and waits to open
Leo, 2026-11-02: "THE FING SESSION INFO NOT FING PUSH THE LAYOUT LEFT"
On a 740pt window, a new agent chat in its ~370px agent pane opened with Session Info shown by default, lying over the transcript, the "Not sent. Send it again." Retry link and the composer.
Cause
- #32159 (native Session Info on by default) together with #32056: the App draws the panel over the page, but the page kept no room for it. A "pushed" panel only moved the header, and the chat ran on full width under it. This is the regression.
- #23862 (the push placement, its floor kept since then):
pushedWidthnever went belowSESSION_INFO_WIDTH.min(260px), and nothing checkedPUSH_MIN_CHATbefore opening. In a 370px pane that left the chat ~100px.
Change
Session Info always pushes the chat left. It never covers the chat, at any width.
pushedWidth: below 260px the pushed panel narrows toPUSH_PANEL_MIN= 200px (still wider than the 180px live-preview card under it), and never past the pane less its margins. Chat + panel + 8px margin = pane, side by side.- Native panel: when pushing, the page keeps the panel's room in the shell's row (
.acpmux-session-info-room, pushed width plus the 8px margin, the same slot the web panel takes). The chat reflows beside it, and the App's frame (sessionInfoFrame) sits exactly in that room. - Default-open: below
sessionInfoFits(PUSH_MIN_CHAT440 +PUSH_PANEL_MIN200 + 8 = 648px), a saved open state does not open it. It stays closed until the person opens it (toggle, palette, a running line's count), and then it pushes. Wider panes keep today's default-open. This reuses #32576's per-chat "asked" state, cherry-picked with authorship. - Native drag: once a drag ends, the page's width replaces the drag's, so the native frame never stays wider than the page's room.
Widths: 370px pane gives a 200px panel and a 162px chat. 528px gives 200 and 320. 740px gives 292 and 440.
This supersedes the popover direction of #32576 (a click-away popover under 528px). Leo asked for push, not cover. The short-pane popover (POPOVER_BELOW_HEIGHT, pane height under 520) is unchanged, except that it too now waits to be asked before opening.
Spec: design/session-info.md rule 1 (leo-workspace) is being updated to match: push always, a narrow-panel floor, and no default-open below the fit.
Compared with the references (cmux-design-references, ids only)
Gallery `agent-pane.session-info-narrow-pane`, captured in Chromium at 370, 528 and 740px, in the saved-open and opened variants, and compared against:
- `claude/live/browser-panel-empty` and `claude/live/session-running-with-side-panels`: the right panel takes its own column and the chat and composer reflow narrower beside it. That holds at every width here.
- `claude/live/panels-right-environment-changes-column` and `claude/live/side-panel-cards-environment-changes`: Leo prefers that the chat is pushed left, ChatGPT-style, over a panel that lies on the chat or leaves empty space.
- `chatgpt/live/sidebar-session-info-rail-sections`: opened from the header's list toggle.
- The bug itself: `cmux/live/session-info-panel-changes-and-sources` and cmuxterm-hq#6137.
At 370px the 200px panel leaves a 162px chat. That is narrow but whole, and the chat only gets there after the person opens it. At 740px it opens unasked with a 440px chat. The panel's background and drag handles are not touched (another lane owns them).
Tests (red on base)
test/session-info.test.tsx: pushed widths sum to the pane at 180/370/528/740/1200;pushedWidth(370|528)= 200,pushedWidth(740)= 292;sessionInfoFitsat 370/528/647/648/740.test/session-info-surfaces.test.tsx: in 370px and 528px panes a saved open state leaves the chat clear, and the toggle opens it pushing at 200px; a 740px pane opens it unasked; with the native host, the page keeps a room equal to the posted width at 370/528/740.test/session-info-placement.test.ts(Chromium and WebKit): at 370/528/740 the panel's left edge is at or right of.acpmux-main's right edge, it covers no row, and the composer and last row lie whole inside the chat. 370 and 528 don't open unasked.sessionInfoPopover.test.ts: a narrow tall pane pushes, not a popover.- Swift
AgentPaneNativeSessionInfoTests:pushedPanelFillsThePagesRoomExactlyandpageWidthReplacesTheDragOnceTheDragEnds. - Gallery:
agent-pane.session-info-narrow-pane(370, 528 and 740px; saved-open and opened variants). Theagent-pane.headerandinspector-composer-footplays now open Session Info from the toggle wherever the pane waits for the person.
Risk: Session Info placement only. Wide panes are unchanged (floating or pushing at 260 to 560px).
Agent session: agent session
š¤ Generated with Claude Code