Skip to content

[Bug]: NVDA browse mode reads the previous thread's branch on the thread details branch combobox #34436

Closed

Description

@nibarAhmed

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/web

Steps to reproduce

  1. Turn on NVDA and open T3 Code with the thread details panel showing.
  2. Open thread A, then thread B, where the two threads are on different branches (for example two worktree threads). This first visit loads each thread's branch list.
  3. Switch back to thread A.
  4. In browse mode, move to the branch combobox in the "Version Control" region of the thread details panel (quick navigation C, or arrow down to it).

Expected behavior

NVDA reads thread A's branch, the same one shown on screen.

Actual behavior

NVDA reads thread B's branch. In my run, thread A was on master and thread B on t3/fix-slider-action-touch-lag. Back on thread A, browse mode said:

Version Control region combo box collapsed opens dialog t 3 slash fix-slider-action- touch-lag

Tabbing onto the same control read the right value:

combo box master focused collapsed opens dialog

The stale branch stays in browse mode across further switches, including to a thread in a different project. It only refreshes when the switch lands on a folder whose branch list has not loaded yet, because the trigger is disabled for a moment while it loads. That is why it looks intermittent.

Two more problems show on the same control:

  • It has no name. NVDA says only "combo box", with the "Version Control" region as the only hint of what it is.
  • Long branch names are read with a break in the middle ("fix-slider-action- touch-lag"), because the name is rendered as two spans for middle truncation.

The other controls in the thread details panel (run context, Git actions, Changes) updated correctly in the same run.

Cause. The trigger in BranchToolbarBranchSelector.tsx renders as <button role="combobox"> with no aria-label, so the branch text inside it is exposed as the combobox's value, not its name. Chromium's accessibility tree does update that value on a switch. NVDA's browse mode keeps its cached copy, because only the text inside the control changed and nothing on the control itself did. In a standalone copy of the markup, a static aria-label did not help; a label that changes with the branch did.

The same trigger is used in the composer strip, so it is affected there too.

Impact

Minor bug or occasional failure

Version or commit

main @ 36f4e07

Environment

Windows 11, NVDA 2026.3.1, Chromium 151 (Chrome for Testing), web client from vp run dev. The component is shared with the desktop app. JAWS, Narrator and VoiceOver were not tested.

Logs or stack traces

No response

Screenshots, recordings, or supporting files

No response

Workaround

Tab to the combobox instead of reading it in browse mode. Focus reads the current branch.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions