The two-tier sticky host card now provides continuous 'inside this
machine' context at any scroll depth, making the static indent
redundant — and it cost 12px of sidebar width on every row while
making multi-host layouts misalign with single-host ones. Host cards
bracketing their sections plus the pinned header carry the ownership
signal on their own.
Co-authored-by: Orca <help@stably.ai>
When scrolling inside a host section, the host card now stays pinned at
the top (z-30) while project/status group headers hand off beneath it
(z-20, offset by the pinned card height). The host is the outer
hierarchy level, so it is the most persistent context — previously the
first repo header replaced it, losing 'which machine am I on' exactly
when it mattered. The pinned card keeps its collapse/menu/warning
affordances. Handoff rules: the next host card pushes the previous one
out at the viewport top; a group pins only once it reaches the slot
beneath the host card, and a previous host's group can never pin under
the next host. Without host sections the logic degrades to the original
single-tier behavior.
Co-authored-by: Orca <help@stably.ai>
Sidebar polish from review:
- The count badge sat in dead space between the label and the
hover-only chevron/menu; it now hugs the label like repo headers
- Rows under a host card get a left inset so projects and workspaces
visibly belong to the machine above them
- A host whose only visible row is a collapsed repo group counted 0
while the group badge said 9; host counts now fall back to header
counts for groups contributing no visible items
Co-authored-by: Orca <help@stably.ai>
Feedback: the bordered card with the server glyph made it clearer that
a host section is a separate machine, not just another group. Bring
that back while keeping the recent quieting: no status dot when
healthy (marks only for connecting/blocked/error/disconnected), no
'This computer' detail on the local host, and collapse/menu/count
behavior unchanged.
Co-authored-by: Orca <help@stably.ai>
Design feedback: the All-hosts view stacked redundant chrome (server
icon three times, status dots everywhere, a strip repeating what the
headers below said).
- The scope strip no longer renders in All-hosts view — host section
headers tell the story, and scope switching lives in the workspace
options menu. When scoped to one host it becomes a slim
'<host> only · ✕ All hosts' return banner
- Host headers are now quiet uppercase muted labels (no server icon),
with a transport suffix only for remote hosts and a status mark only
when a host needs attention (connecting/blocked/error/disconnected);
healthy hosts show nothing
- Collapse, hover chevron, count badge, and the host menu are unchanged
Co-authored-by: Orca <help@stably.ai>
The host scope strip is the single scoping control (the design doc
explicitly forbids a separate focused-host toggle), and decluttering is
now served by collapsing host sections. A second entry point with a
different verb invented a third concept where two suffice: the strip is
where work goes, the header is a group you can fold.
Co-authored-by: Orca <help@stably.ai>
Sidebar usability fixes for the multi-host grouping, from review feedback:
- A lone host section is noise: host headers now render only when at
least two hosts have visible workspaces, so a 6-host registry with
only local work shows today's plain sidebar
- Host sections collapse/expand like other sidebar groups (persisted
via the existing collapsed-group keys; chevron on hover; menu clicks
don't toggle)
- Host headers restyled from bordered cards to the group-label idiom so
the scope strip (a filter) and host headers (group labels) read as
different tiers
- Scope strip shows '{n} connected' instead of the raw saved-host count
Co-authored-by: Orca <help@stably.ai>
PR #4946 forced terminalGpuAcceleration to 'off' whenever a remote
runtime environment is active, as a conservative workaround alongside
the real fixes (CSS anchor-name encoding and rebuilding the WebGL
renderer after replay bytes parse). That left every remote-runtime
terminal on the slower DOM renderer even though the post-replay
rebuildPaneWebgl already covers the snapshot-after-attach race.
Remove the forced-off resolver so remote-runtime panes honor the user
GPU setting again. The snapshot path (onSnapshot -> processData with
replayingBufferedData -> onReplayData -> rebuildPaneWebgl after parse)
keeps the glyph atlas in sync, and attachWebgl re-checks all guards
(gpuRenderingEnabled, deferred attachment, context loss) on rebuild.
Co-authored-by: Orca <help@stably.ai>