- Shipped
- September 5, 2026 at 3:04 AM UTC
- Author
- Kamo
- Commit
- 5b14534
Two things, both about the seam between a navigator and what is beside it. ## The confirm had no surface of its own A terminal row's actions sit OVER the row rather than beside it — there is no width for both them and the name — and the cluster was transparent. So "End it? ✓ ✕" was drawn straight on top of the terminal's title, and on the maximized navigator's near-black that is unreadable rather than merely untidy. The same an opaque background, a hairline and a small shadow, so it reads as a control resting on the row. The red was wrong too. `error.main` is MUI's, tuned for a white card, and it lands as a dark smudge on #0d1117. The navigator palette gains a `danger` of its own — the terminal's ANSI red, already chosen for contrast against exactly that background — so the light and dark surfaces each get a red that works on them. Verified by rendering the confirm state on all three surfaces and looking at it, which is the only way this class of bug is ever found. ## The navigator is now draggable The seam between the navigator and the window is a resize handle: drag it, arrow-key it, Home or double-click to reset. Per kind rather than per window — a conversation list and a terminal list are sized for different content, but a member who has sized their conversation list has sized it, and having it snap back on opening a different chat would be worse than not being able to size it. Remembered as a member UI preference, so it is about the person rather than the browser, and re-clamped to the CURRENT viewport on load: a width chosen on a 4K monitor is nonsense on a laptop. It applies to every tool with a navigator, which is every chat-based window (chat, sms, support, social, ai-chat) as well as the terminal — one panel serves them all, so one handle does. Three things this had to get right: - ToolDock reserves the space and the navigator draws it. Those two numbers must never disagree or the window overlaps the navigator or leaves a gap beside it, which is why the width was a shared constant to begin with. Both now read one store. - Both of them animate width — the panel for the collapse gesture, the window for its geometry — and both are wrong under a pointer, where a 220ms ease dragging, reusing the shell's existing freeze, which exists for exactly this reason on a carried window. - The floor sits clear of the collapsed rail. A navigator draggable down to rail width would be a second way of collapsing that the chevron knows nothing about — two controls for one state, able to disagree. Keyboard-operable and announced as a separator with a value: a pointer-only splitter is a control that some of the people who most need it cannot use. 14 guards, 5390 tests.