Accessibility: Codex suggestion menu options are hidden from screen readers
Title: Accessibility: Codex suggestion menu options are hidden from Windows UIA and screen readers (missing ARIA roles)
Summary
In the Codex desktop environment (now integrated within the unified ChatGPT desktop app), typing / or triggering the autocomplete suggestions menu in the chat/work input box visually opens the suggestion popup. However, this menu is completely hidden from Windows UI Automation (UIA) and assistive technologies like screen readers (NVDA/JAWS). Users relying on screen readers receive no feedback when options appear and cannot hear which suggestion is highlighted as they navigate with the arrow keys.
Diagnostic Details
We performed a direct UI Automation (UIA) tree probe on the Electron-based application window. During the probe:
- No Accessibility Tree Changes:
Opening the suggestions menu did not trigger any structural changes in the Windows UIA accessibility tree. The tree difference remained 0 added, 0 removed, 0 changed.
- Focus Trapped in Text Input:
When pressing the Up/Down arrow keys to navigate the suggested commands, keyboard focus stayed entirely on the main text input element. Assistive technologies are unaware of any selection changes because:
- The suggestions container is not exposed to the accessibility engine with
role="listbox". - The suggestion options (such as commands, tasks, or prompt tools) are not exposed with
role="option". - The main text input element does not establish a relationship link with the suggestions list (lacks
aria-controlsand does not dynamically updatearia-activedescendantduring arrow-key navigation).
Expected Behavior
To comply with standard accessibility patterns (WAI-ARIA Combobox design pattern):
- The suggestions container should be exposed to the accessibility engine with
role="listbox". - Each item in the suggestions list should have
role="option"and update itsaria-selectedstate dynamically when highlighted. - The main chat input element should declare the connection using:
aria-haspopup="listbox"aria-controls="[id-of-listbox]"aria-activedescendant="[id-of-currently-highlighted-option]"(updated dynamically as the user navigates using the Arrow keys).
This ensures screen readers can capture the event changes and announce the active menu option as the user cycles through them.