You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add accessibility CI job (Playwright + axe-core WCAG 2.1 AA scans) #168
Accessibility testing CI job, follow-up from closed PR #41.
PR #41 proposed adding a Playwright + axe-core WCAG scan as a new Quality Gate job. The underlying work is sound: the current CI has no accessibility coverage, and the frontend (csv-table-hub-main) has had accessibility issues shipping unnoticed.
Scope
New Quality Gate job accessibility running Playwright + axe-core against the Vite dev server
Backend accessibility test files under tests/accessibility/ (conftest.py for Playwright fixtures, test_accessibility.py with WCAG 2.1 AA scans across the main pages)
Install step for Playwright browsers in CI (playwright install chromium)
Marker and job-exclusion wiring: accessibility tests run only in the dedicated job, integration (postgres service) excludes them with --markers "not accessibility"
accessibility (Playwright + axe-core, WCAG 2.1 AA) at line 210, triggered by pull_request; installs Chromium with playwright install --with-deps
Runs green on a trivial, backend-only PR
success on #233 (a docs and script change, head e1af2d9) and on #214 (tests only, head 7648525)
tests/accessibility/test_accessibility.py runs locally and reports counts
11 scans; python -m pytest tests/accessibility -v or make test-accessibility; CI's step is "Accessibility scans — final result with skip accounting" and uploads an accessibility-report artifact
Accessibility tests run only in their own job
The integration job runs with --markers "not accessibility" (workflow line 173)
Known limitation documented
Done better than the issue asked: tests/accessibility/known_violations.json records today's frontend violations (e.g. unnamed progress bars, colour contrast) so the scans pass on what exists and fail on a change, rather than being expected to fail; explained in tests/accessibility/README.md
The job was red for a while on 10 Nov, but not because of this work: it runs the frontend's vitest suite first, which caught three M5 log steps missing from the frontend schema (fixed in #231 and #232). It is green again.
Out of scope, as the issue said: frontend accessibility fixes, and making the job a required check (main has no branch protection yet, see #198).
Activity
Merge pull request #222 from amar-python/claude/accessibility-ci-168
docs: #167 and #168 are done on main
Merge origin/main; keep only the test additions still needed (#191, #192
amar-python commentedon Nov 10, 2026
Done: closing with evidence (checked against
mainat 7f0b666, 10 Nov 2026)Delivered by #222 (merged 9 Nov).
quality-gate.ymlas apull_requestjobaccessibility (Playwright + axe-core, WCAG 2.1 AA)at line 210, triggered bypull_request; installs Chromium withplaywright install --with-depssuccesson #233 (a docs and script change, heade1af2d9) and on #214 (tests only, head7648525)tests/accessibility/test_accessibility.pyruns locally and reports countspython -m pytest tests/accessibility -vormake test-accessibility; CI's step is "Accessibility scans — final result with skip accounting" and uploads anaccessibility-reportartifact--markers "not accessibility"(workflow line 173)tests/accessibility/known_violations.jsonrecords today's frontend violations (e.g. unnamed progress bars, colour contrast) so the scans pass on what exists and fail on a change, rather than being expected to fail; explained intests/accessibility/README.mdThe job was red for a while on 10 Nov, but not because of this work: it runs the frontend's vitest suite first, which caught three M5 log steps missing from the frontend schema (fixed in #231 and #232). It is green again.
Out of scope, as the issue said: frontend accessibility fixes, and making the job a required check (
mainhas no branch protection yet, see #198).Verified by Claude Code
Generated by Claude Code