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
Windows accessibility: sidebar Graph and Quick Chats destinations don't expose UIA selection state #801
Describe the bug
The Windows sidebar's static navigation destinations, the pinned Graph overview and Quick Chats, don't expose their selected state through native UI Automation:
graphcode-windows/src/AccessibilityProvider.cpp, about lines 853-865, keeps only the bounds of the static overview and Quick Chats elements and discards their selected flags;
supportsSelectionItem/get_IsSelected admit only dynamic row keys (project and loop rows).
So the app-side unit sink sees Graph selected, but a screen reader or the UIA client cannot. On macOS these are selectable List rows (AppSidebarView.swift:300-310, .chats, .project, .node).
Expected behavior
Each sidebar navigation destination (Graph, Quick Chats, project, loop) exposes SelectionItem, with IsSelected matching the painted selection.
The container's GetSelection returns exactly the one selected destination.
Select routes through the existing Invoke action.
Additional context
Found 2026-10-14 by lane C (#767, PR #800) while adding an "exactly one selected navigation row" UIA oracle. #800 keeps that oracle to the navigation rows the native provider exposes today, and defers the native Graph/Quick Chats selection proof to this issue.
Related: the sidebar's Needs-you rows reuse selected_node_id (App.zig, about line 7777), so they report a second selected alias. macOS has no sidebar Needs-you section: AppSidebarView.swift:334 has attentionSection commented out. #767 already tracks removing it as a Windows extra.
Current implementation
PR #968 implements and qualifies the native sidebar selection contract. Keep this issue open until the PR merges and the issue is re-audited against the ledger.
Progress: implementation is local and unpushed at 9bdd2dbe, covering canonical native navigation selection, existing-action Select routing, selection events/lifetime handling, and matching sidebar selection painting/publication. Headless checks passed: provider 179/179, App/Sidebar 2/2, and selection-oracle controls 27/27. The full pinned build closure is available.
This is not native acceptance or a parity claim: #801's default 280-check native suite, actual event delivery, paint/live-oracle validation, and full required gates have not run. The shared desktop qualification is blocked in #799, and #801 has no native execution grant. No source/test changes have been pushed and no PR is open for this work. Keeping this issue open with its body and checklists unchanged.
Completed by #968 (merged as 56b63b5). Native UIA selection and event behavior is qualified for this scope; the broader visual/hardware parity rows remain Partial and are tracked separately.
Activity
Scope sidebar selection evidence to navigation and log retained aliases
coneilen commentedon Nov 9, 2026
Progress: implementation is local and unpushed at
9bdd2dbe, covering canonical native navigation selection, existing-action Select routing, selection events/lifetime handling, and matching sidebar selection painting/publication. Headless checks passed: provider 179/179, App/Sidebar 2/2, and selection-oracle controls 27/27. The full pinned build closure is available.This is not native acceptance or a parity claim: #801's default 280-check native suite, actual event delivery, paint/live-oracle validation, and full required gates have not run. The shared desktop qualification is blocked in #799, and #801 has no native execution grant. No source/test changes have been pushed and no PR is open for this work. Keeping this issue open with its body and checklists unchanged.
coneilen commentedon Nov 11, 2026
Completed by #968 (merged as 56b63b5). Native UIA selection and event behavior is qualified for this scope; the broader visual/hardware parity rows remain Partial and are tracked separately.