Skip to content

fix(web): NVDA no longer skips the project picker in the new-thread heading - #17877

Open
akj wants to merge 1 commit into
pingdotgg:mainfrom
akj:fix/composer-hero-heading-browse-mode
Open

akj wants to merge 1 commit into
pingdotgg:mainfrom
akj:fix/composer-hero-heading-browse-mode

Conversation

@akj

@akj akj commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Problem

With NVDA in browse mode, the project picker inside the new-thread heading ("What should we build in ?") is missing. NVDA reads the heading as plain text, and the only way to reach the picker is Tab, which switches NVDA to focus mode.

Closes #17872.

Change

This removes the aria-label that #12397 added to the heading. NVDA's browse mode renders a heading's explicit label in place of its children (gecko_ia2.cpp), so the label hid the picker. Without it, Chrome computes the heading name from its content, and that's still the full sentence because the picker's value is the project name. A comment on the <h1> records why it must not get a label again.

Scope and approval

This is a small, focused fix for an obvious regression. #12397 fixed #12396 mainly by removing the picker's own aria-label. The heading label it added on top made the picker unreachable in browse mode. This PR removes only that label. The picker and the visible text don't change. Tracked in #17872.

Verification

  • Found with NVDA alpha-58022 on Windows 11. In browse mode, the picker was missing from the heading, and only Tab reached it.

  • Ran a dev build of this branch, which is based on main at 50647de, and opened a new thread. Then I read Chrome's accessibility tree over CDP (Accessibility.getFullAXTree) in headless Chrome:

    heading name="What should we build in pingdotgg/t3code ?"
      StaticText "What should we build in "
      combobox name="" value="pingdotgg/t3code"
      StaticText "?"
    

    The heading has no aria-label, and the picker is a child of the heading.

  • vp lint on the changed file and tsc --noEmit in apps/web both pass.

  • Checked a dev build of this branch with NVDA alpha-58022 in browse mode. The project picker is back inside the heading and reachable without Tab.

  • Not checked: JAWS or VoiceOver. Nothing changes visually, so there are no screenshots.

Done with Claude Opus 5.5 via Claude Code.

🤖 Generated with Claude Code

…se mode

The heading's aria-label made NVDA render the label in place of the
heading's children, so the inline project picker disappeared from browse
mode. Without the label, the heading's computed name is the same sentence
and the picker stays in the virtual buffer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 10, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 10, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at d923bab

Macroscope's review found this PR approvable — This is a one-file, focused accessibility bug fix that restores the existing inline project picker to NVDA browse mode. It does not change project-selection logic, visual behavior, product defaults, APIs, or infrastructure.

Notes:

  • Diff unchanged. Approvability was decided on eligibility alone.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: fa68f098-32f9-45ed-8a9e-c5d8b2d13556



📥 Commits

Reviewing files that changed from the base of the PR and between 50647de and d923bab.




📒 Files selected for processing (1)
  • apps/web/src/components/chat/DraftHeroHeadline.tsx



Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.





📝 Walkthrough
📝 Walkthrough
📝 Walkthrough

Walkthrough

The composer heading no longer has an explicit aria-label. Its accessible name is derived from its content, which includes the inline project picker.

Changes

Composer heading

Layer / File(s) Summary
Derive heading name from content
apps/web/src/components/chat/DraftHeroHeadline.tsx
Removed the computed heading label and the <h1>’s explicit aria-label. Added a comment about the label hiding the inline project picker in NVDA browse mode.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: juliusmarminge





Merge Risk: ⚪ Minimal · up to d923b

No actionable merge-blocking issue was identified. The heading retains its visible wording; NVDA browse-mode behavior has not been confirmed.

Pre-merge checks | Passed 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check Passed Active issue #17872 requires the inline project picker in the new-thread heading to remain available in NVDA browse mode, including heading navigation, quick navigation, and the Elements List. The rev…
Out of Scope Changes check Passed The reviewed change is limited to apps/web/src/components/chat/DraftHeroHeadline.tsx. It removes the computed heading label and adds focused accessibility comments. The change does not alter the pic…
Title check Passed The title is concise, specific, and accurately describes the NVDA accessibility fix for the new-thread heading.
Description check Passed The description explains the problem, change, scope, approval rationale, verification steps, observed results, and untested assistive technologies. It also explains why screenshots are not applicable …

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR





  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@akj akj changed the title fix(web): project picker in the composer heading is reachable in browse mode fix(web): NVDA no longer skips the project picker in the new-thread heading Oct 10, 2026
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 11, 2026 — with ChatGPT Codex Connector
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 11, 2026 06:21

Dismissing prior approval to re-evaluate d923bab

This branch has not been deployed

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

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

2 participants