Skip to content

[bugfix] audio: expose the selected voice to assistive technology - #258

Merged
FayeSpica merged 2 commits into
ThinkFlowLab:mainfrom
PCcoding666:fix/voice-picker-selected-state
Nov 10, 2026
Merged

FayeSpica merged 2 commits into
ThinkFlowLab:mainfrom
PCcoding666:fix/voice-picker-selected-state

Conversation

@PCcoding666

@PCcoding666 PCcoding666 commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Expose the current voice on its native selection button when the library reopens. The card highlight and the button’s aria-pressed state both compare the connection and voice ID. Voice selection and favoriting remain separately identifiable actions.

Linked issue

Refs #205. Follows the selected-state accessibility feedback on #218.

Labels

  • Maintainer labels requested: type:bug, area:canvas, accessibility.

Test plan

  • 698 frontend tests passed. The TypeScript and Vite production build, bilingual messages, browser locale, browser manifest and diff checks passed.

  • The full voice-library workflow passed in isolated Chromium in en-US and zh-CN. It covers no initial selection, reopening with “Sample voice” selected, and switching to the uploaded narrator before reopening.

  • Against unmodified main, the browser found no pressed voice button after reopening with the saved “Sample voice”.

  • The full release matrix remains for CI. This checks the state exposed in Chromium. Spoken output with VoiceOver or NVDA was not separately tested.

  • Upstream Release checks reached the cold audio reload and hit the 15-second waitForResponse timeout at line 790. This is the unchanged wait at line 776 on the base branch, tracked in [fix] ci: Voice library Playwright TimeoutError flakes Release checks #250. It occurs after the selected-state assertions.

  • I also tested this branch together with the proposed cold-reload fix ([test] ci: harden voice-library cold reopen waits #255, acdfd3c3). Git merged the two branches cleanly. On macOS with Chromium 145 and Node 24.22.1, both English and Chinese workflows passed with VOICE_REOPEN_DELAY_MS=17000, including the selected-state checks, reopened media MIME and playback. This was a local integration run.

Evidence that it works

Chromium’s Accessibility.getFullAXTree reported the following voice buttons in zh-CN. Every voice initially reported pressed=false.

Voice button After selecting Sample voice After switching to Narrator-zh-CN
Sample voice pressed=true pressed=false
Narrator-zh-CN pressed=false pressed=true
Reopened library (English) Reopened library (Chinese)
Selected narrator in English Selected narrator in Chinese

Provider verification

  • Tested against the HTTP fixture with real local project persistence, media probing and WAV generation. Simulated accounts and recordings were used throughout.

Bilingual UI

  • Both locales exercised. The accessible state uses a native button property and requires no new interface copy.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-10T03:47:51.307498Z 505ed27 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@FayeSpica FayeSpica added type:bug Something is broken area:canvas Canvas, nodes and direct manipulation accessibility Barrier affecting people with disabilities labels Nov 10, 2026

@FayeSpica FayeSpica left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix! CI is green, and I verified the voice picker locally in Chromium in both English and Chinese. When switching voices, aria-pressed correctly moves to the newly selected voice.

LGTM

@FayeSpica
FayeSpica merged commit 90eb272 into ThinkFlowLab:main Nov 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accessibility Barrier affecting people with disabilities area:canvas Canvas, nodes and direct manipulation type:bug Something is broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants