Conversation
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused accessibility correction to the existing web composer, adding screen-reader labels, live status announcements, keyboard dismissal, and stable suggestion selection semantics. The changes are isolated to the composer UI and accompanying tests, with no product-default, schema, deployment, or sensitive-data impact. You can add or adjust custom eligibility rules. Learn more. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe composer now exposes accessible suggestion lists and active options to screen readers. It adds stable list and option IDs, editor ARIA attributes, status announcements, and Escape dismissal behavior. Tests cover option ID generation and empty-result highlight recovery. ChangesComposer suggestion interaction
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix · Severity of issue fixed: Medium Sequence Diagram(s)sequenceDiagram
participant ScreenReader
participant ComposerPromptEditor
participant ChatComposer
participant ComposerCommandMenu
ScreenReader->>ComposerPromptEditor: Focus the message textbox
ComposerPromptEditor->>ChatComposer: Send navigation or Escape key
ChatComposer->>ComposerCommandMenu: Update suggestion state
ComposerCommandMenu->>ComposerPromptEditor: Provide active option ID
ComposerPromptEditor->>ScreenReader: Announce the active option or status
Suggested reviewers: Merge Risk: ⚪ Minimal · up to The accessibility wiring introduces no supported merge-blocking risk in the reviewed changes. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
I'm leaving the docstring-coverage suggestion unchanged. AGENTS.md asks for comments that explain constraints the code cannot show. Docstrings added solely to meet an 80% target would repeat the behavior of these React components and the option-ID helper. The update from main passed 91 focused tests, web typechecking, formatting, and CI. CodeRabbit reported no actionable correctness findings. |
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
A single "Composer suggestions" name tells a screen reader user that a list
opened but not which one. Naming it by trigger ("Files and folders",
"Commands", "Skills", "Pull requests") says what the options are before
any row is read.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ComposerPromptEditor is also the Settings font preview, which has no trigger menus. Hardcoding the "Message" label, aria-autocomplete and aria-haspopup on the editor made that preview announce as a chat field with autocomplete. The chat composer now opts in by passing the label and its listbox id; the font preview passes neither and reads as a plain multiline field. aria-controls follows the active option rather than list visibility, which is the same moment in practice but keeps the reference from ever pointing at a listbox with no highlighted row. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@juliusmarminge This pr is ready for maintainer review and merging. Please let me know if pinging you here is bad form, or if there's a better team member for pinging about a11y fixes. |
Main now dismisses composer suggestions with Escape (pingdotgg#12836), so this drops the branch's own snapshot-based dismissal and keeps only the listbox and active-option wiring. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The status region said "Searching workspace files..." after every pause in typing, even while earlier results stayed visible and an option remained active. It now speaks only when the visible menu shows loading or empty text. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Screen reader users cannot identify the highlighted composer suggestion because the editor does not reference the suggestion list. This connects the existing keyboard selection to the multiline Message field for files, skills, commands, and pull requests, while keeping focus in the editor and preserving the visual layout.
The list has a name that matches its contents. A persistent status region exposes loading and empty results, and closed menus leave no dangling list or option references. The Settings font preview has its own name and does not advertise suggestions. Option IDs also accept lone UTF-16 surrogates without throwing or collapsing distinct filenames.
This now uses the current Tiptap editor in both rich and plain composer modes. The sync preserves the two commits contributed by @Leos-Khai in akj#1 after #11666 closed in favor of this PR.
Escape dismissal landed separately on main in #12836, so this PR now relies on that behavior instead of carrying its own.
Closes #10153.
Validation
Earlier visual evidence
These captures document the original Lexical version of this PR. They are retained as historical evidence, not validation of the current Tiptap editor. This update changes semantics without changing styling.
Earlier silent keyboard demonstration:
keyboard-demo.mp4
Updated with GPT-6 in the Codex harness. Contributor commits retain their original authorship.
Summary by CodeRabbit
Accessibility
Bug Fixes