What happens
Scrolling the conversation list sticks a folder's own header to the top (the floating bg-sidebar overlay), but the three top-level section headers — Folders, Chat, Recent — scroll away with the list.
So inside a long Folders section there is nothing on screen that says which section you are in, and to switch sections you have to scroll all the way back up.
Where
src/components/conversations/sidebar-conversation-list.tsx:1929 gates the sticky overlay on the folder row only:
visible && activeRow.kind === "folder" ? activeRow.folderId : null
section rows are ordinary rows in the virtualized list (see sidebar-section-header.tsx), so they are never sticky. The floating overlay is used instead of CSS position: sticky because virtua unmounts rows that scroll out of view.
Why it stands out
The window chrome (new chat, route nav, search, "Locate Active Conversation") lives outside the scroll area, so those stay reachable — but the section anchors do not. The folder header sticking makes the inconsistency more visible: the child sticks, its parent does not.
Question
Is the current behaviour intended? If not, would a PR that also sticks the section headers be welcome?
If so, there is one design decision to settle — two sticky levels:
┌─────────────────────┐
│ Folders ← section header stuck at the very top
│ ▸ my-repo ← folder header stuck directly below it
│ …conversations…
- the next folder header pushes the current folder header out (already implemented);
- the next section header pushes the current section header out, and the folder header then rises to the first level;
- that needs up to two overlay nodes plus a rule for which overlay occludes the in-list row it covers.
Happy to implement whichever shape you prefer — or leave it alone if this is deliberate.
What happens
Scrolling the conversation list sticks a folder's own header to the top (the floating
bg-sidebaroverlay), but the three top-level section headers —Folders,Chat,Recent— scroll away with the list.So inside a long
Folderssection there is nothing on screen that says which section you are in, and to switch sections you have to scroll all the way back up.Where
src/components/conversations/sidebar-conversation-list.tsx:1929gates the sticky overlay on the folder row only:sectionrows are ordinary rows in the virtualized list (seesidebar-section-header.tsx), so they are never sticky. The floating overlay is used instead of CSSposition: stickybecausevirtuaunmounts rows that scroll out of view.Why it stands out
The window chrome (new chat, route nav, search, "Locate Active Conversation") lives outside the scroll area, so those stay reachable — but the section anchors do not. The folder header sticking makes the inconsistency more visible: the child sticks, its parent does not.
Question
Is the current behaviour intended? If not, would a PR that also sticks the section headers be welcome?
If so, there is one design decision to settle — two sticky levels:
Happy to implement whichever shape you prefer — or leave it alone if this is deliberate.