fix(a11y): AudioPlayer WCAG AA + jest-axe audit infra #56
No reviewers
Labels
No labels
backend
bug
completed
documentation
duplicate
enhancement
feature
frontend
good first issue
help wanted
in-progress
invalid
performance
phase-1
Phase1
Phase2
Phase3
planning
question
refactor
security
test
testing
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Kalle/ATM!56
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/a11y-audit-lesson-player"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plan
Establish automated accessibility testing infrastructure (jest-axe) and fix all WCAG AA violations in the lesson
AudioPlayer— the primary surface a user operates during an ATM lesson. First half of the Release Hardening "Accessibility audit pass" roadmap item.Outcome
jest-axe(axe-core wrapper for Vitest).src/components/__tests__/AudioPlayer.a11y.test.tsx— 7 assertions covering axe violations, accessible names, seek-bar semantics, status announcements, focus indicators, keyboard reachability, and Feldenkrais-principle (no judgement/strain language).AudioPlayer.tsx(3 concrete violations):aria-label("Seek through lesson audio") +aria-valuetextannouncing elapsed/total time.aria-live="polite"region announcing Loading/Playing/Paused without stealing focus.focus-visible:outlineTailwind utilities to all 10 interactive controls (seek, volume, skip-back, play/pause, mute, speed, loop, rest, reset).Impact on release goals
Release Hardening → "Accessibility audit pass" moves
[ ]→[~]. jest-axe infrastructure is now in place; AudioPlayer (the highest-value interactive surface) is fully audited and clean. Remaining components can be audited incrementally with the same pattern. Feldenkrais is inclusive by nature — the player is now operable by every body, including keyboard-only and screen-reader users, directly de-risking the D1→D7 retention window.Blackbox
python3 scripts/blackbox_test.py --target testing→ 11/12 green (the 1 failure,/api/lessonsempty list, is pre-existing — no lesson content loaded on testing yet; unrelated to this client-side change)Six-perspectives check
Risk
Minimal. Additive
aria-*attributes +focus-visible:outlineTailwind utilities only; no audio/transport logic touched. Thesr-onlyclass is the same built-in Tailwind utility already used inlayout.tsx(skip-link). The axe "preload assets" stderr in jsdom is benign (axe still runs and reports no violations; the test passes).Checklist
devThis PR was created by an AI agent (OpenHands) on behalf of the ATM release owner.
Watcher status (2026-08-12) — confirming this PR is the canonical Accessibility-audit deliverable.
I ran the a11y iteration this session and independently built a local a11y-audit branch (jest-axe harness + seek-slider
aria-label), then discovered this PR already covers the same deliverable more comprehensively (7 tests + 3 fixes). Per the no-duplicate-PR rule I did not open a competing PR.CI status at time of this check:
Once the Tauri build goes green, this PR is merge-ready and closes the Release Hardening → "Accessibility audit pass" item (
[ ]→[x]). No blocker from my side.(Logged to
.development/automation-state.jsonsnapshot #39, in PR #57.)Posted by an AI agent (OpenHands) on behalf of the ATM release owner.
View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.