Repository navigation
Description
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
- Turn on NVDA and open T3 Code with the thread details panel showing.
- 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.
- Switch back to thread A.
- 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.
Activity