feat: Sessions-Pane Server-Group Header — Color-Picker and Close Buttons#432
Merged
sahil-noon merged 4 commits intoJul 21, 2026
Merged
Conversation
Adds a three-button action cluster (color palette, plus, close) to the SESSIONS-pane server-group header, reusing the SwatchPopover write seam and the lifted onKillServer confirmation flow so the tinted header (t1ca) can also change and kill the server it represents.
There was a problem hiding this comment.
Pull request overview
Adds server-management actions directly to the SESSIONS-pane server-group header (now that it’s tinted with the server color), by reusing the existing color write seam (SwatchPopover → shared handler) and the existing parent-owned kill-confirmation flow, while preserving ServerGroup’s memoization behavior.
Changes:
- Replaces the header’s lone
+with a palette → plus → close action cluster, including a body-portalledSwatchPopoveranchored to the palette button. - Lifts server-color mutation logic into a shared
handleServerColorChangecallback reused by bothServerPaneltiles andServerGroupheaders. - Stabilizes
onKillServerat bothSidebarparents (AppShell,BoardPage) to avoid defeatingReact.memo(ServerGroupInner); extends unit tests and updates UI patterns memory docs.
Reviewed changes
Copilot reviewed 10 out of 14 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| fab/changes/archive/index.md | Adds the archived t1ca entry to the archive index. |
| fab/changes/archive/2026/07/260720-t1ca-sidebar-server-group-header-tint/plan.md | Archived plan document for prior t1ca change. |
| fab/changes/archive/2026/07/260720-t1ca-sidebar-server-group-header-tint/intake.md | Archived intake document for prior t1ca change. |
| fab/changes/archive/2026/07/260720-t1ca-sidebar-server-group-header-tint/.status.yaml | Archived status metadata for prior t1ca change. |
| fab/changes/archive/2026/07/260720-t1ca-sidebar-server-group-header-tint/.history.jsonl | Archived stage history for prior t1ca change. |
| fab/changes/260721-x4sf-sessions-header-color-close-actions/plan.md | Plan describing header action cluster + shared handler + portal behavior. |
| fab/changes/260721-x4sf-sessions-header-color-close-actions/intake.md | Intake describing motivation and constraints for palette/close on headers. |
| fab/changes/260721-x4sf-sessions-header-color-close-actions/.status.yaml | Status metadata for x4sf change. |
| fab/changes/260721-x4sf-sessions-header-color-close-actions/.history.jsonl | Stage history for x4sf change. |
| docs/memory/run-kit/ui-patterns.md | Documents the new server-group header action cluster and shared seams. |
| app/frontend/src/components/sidebar/index.tsx | Implements shared server-color handler; adds header palette/plus/close cluster + portalled popover; threads new props. |
| app/frontend/src/components/sidebar/index.test.tsx | Adds unit tests for cluster order, portal, shared seam wiring, and kill prop invocation. |
| app/frontend/src/components/board/board-page.tsx | Wraps onKillServer in a stable useCallback for memo contract preservation. |
| app/frontend/src/app.tsx | Wraps onKillServer in a stable useCallback for memo contract preservation. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
sahil-noon
marked this pull request as ready for review
July 21, 2026 06:20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Meta
x4sfexcludes
fab/,docs/· generated by fab-kit v2.16.5Pipeline: intake ✓ → apply ✓ → review ✓ → hydrate ✓ → ship → review-pr
Summary
The SESSIONS-pane server-group header became a tinted bar carrying the server's color (t1ca), but offered no way to change that color or kill the server — both actions lived only on the SERVER panel, which is collapsed by default and independent of the SESSIONS pane since PR #428. This adds a three-button cluster (color palette, plus, close) to the header, reusing the existing
SwatchPopoverwrite seam and the liftedonKillServerconfirmation flow rather than introducing a parallel path.Changes
ServerGroupInner,sidebar/index.tsx): replaces the lone+with a palette → plus → close cluster at the header's right end; palette is hover-revealed withcoarse:touch fallback (session-row convention), plus/close stay always-visible; icons follow the header's tinted-fill text treatment (headerAccent/text-text-primary), close hovers red.SwatchPopover(no marker) and the existingonServerColorChangeseam, lifted into one shared handler soServerGroupandServerPanelfunnel through a single implementation; popover is portalled todocument.bodywith fixed, flip-above positioning anchored at the palette button to escape the sessions list's overflow clip.onKillServerprop intoServerGroup/ServerGroupInner, reusing the parents' lifted kill-confirmation dialog andkillServerAPI call — no new dialog or handler.aria-labels (Set color for server {name},Kill server {name}) match SERVER-tile wording; unit tests scope queries to the header container to avoid duplicate-label ambiguity with tiles. All buttons are real, keyboard-reachable<button>s.sidebar/index.test.tsx(t1ca describe-block pattern) covering cluster DOM order, palette→SwatchPopover→color-change wiring, and close→onKillServerwiring. No new Playwright spec (unit-only per intake Assumption Add bottom bar with modifier keys, compose buffer, and iOS keyboard support #10).docs/memory/run-kit/ui-patterns.mdupdated for the new header action cluster.fab/changes/260720-t1ca-sidebar-server-group-header-tint/→fab/changes/archive/2026/07/) and updates the archive index.Deferred should-fix from review: the popover flip-above geometry in
ServerGroupInnerduplicatesserver-panel.tsx'sServerTilepositioninguseLayoutEffect(~15 lines, index.tsx ~:1584 vs server-panel.tsx ~:273) — both call sites are needed, so this is a consolidation opportunity rather than a deletion. Candidate follow-up: extract a shareduseAnchoredPopoverPoshook.