You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
web UI: session list has keyboard nav but no listbox/option accessibility semantics #1075
The web UI session list has good keyboard navigation but no accessibility semantics, so assistive tech announces it as a stack of anonymous divs.
Current state (working, keep it)
handleSessionListKey (crates/daemon/assets/index.html ~line 4907 @ 4c1459b) already implements TUI-parity keyboard control: Up/Down and C-n/C-p to move, Enter to drill into the view, Space to pin (or collapse a group), Left/Right to collapse/expand groups, Shift+Arrow to reorder. focusListRow() does roving focus with tabindex="-1". None of that needs changing.
The gap
Rows are <div class="item"> with no role. The container has no role="listbox". A screen reader gets no list structure, no item count, no position.
No aria-selected on the active row — selection is communicated by a CSS class only.
No tabindex="0" entry point: the list is reachable only via the focus-toggle chord, so a Tab-only user never reaches it. focusListRow sets tabindex="-1" at focus time, which supports roving focus but never puts the list in the tab order.
Group headers have the same problem and additionally need expanded/collapsed state exposed.
Expected
Container gets role="listbox" (or tree, given group nesting and depth classes), rows get role="option" with aria-selected, and group headers get aria-expanded.
The currently selected row carries tabindex="0" and all others -1, so Tab reaches the list once and the arrow keys take over from there — the standard roving-tabindex pattern the code is already 90% of the way to.
Depth is exposed via aria-level / aria-posinset / aria-setsize rather than being inferable only from left padding.
Acceptance criteria
A screen reader announces the list as a list, each row with its name and selected state, and group headers with expanded/collapsed state.
Tab from the top of the page reaches the session list exactly once; arrow keys then navigate within it.
Existing key handling (Enter / Space / Shift+Arrow / group Left-Right) is unchanged.
Found during a power-user UX audit of the TUI and web UI.
Activity
feat(webui): give the session list ARIA tree semantics and a roving t…