Skip to content

Windows accessibility: sidebar Graph and Quick Chats destinations don't expose UIA selection state #801

Closed

Description

@coneilen

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.

Activity

  1. added
    parityWindows/macOS UI parity ledger row (investigation/ui-parity-matrix.md)
    P2 featureParity priority 2: features macOS has that Windows lacks
    on Oct 14, 2026
  2. coneilen commented on Nov 9, 2026

    @coneilen
    CollaboratorAuthor

    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.

  3. self-assigned this
    on Nov 11, 2026
  4. coneilen commented on Nov 11, 2026

    @coneilen
    CollaboratorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

P2 featureParity priority 2: features macOS has that Windows lacksparityWindows/macOS UI parity ledger row (investigation/ui-parity-matrix.md)windowsWindows port

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions