Skip to content

Add accessibility CI job (Playwright + axe-core WCAG 2.1 AA scans) #168

Closed

Description

@amar-python

Context

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"

Out of scope

Done when

  • The job appears in .github/workflows/quality-gate.yml as a pull_request job
  • It runs green on a trivial PR touching only backend
  • tests/accessibility/test_accessibility.py runs locally with python -m pytest tests/accessibility -v and reports pass/fail counts
  • Known limitation documented: the backend scans will fail against unfixed frontend a11y issues; failures are expected until the frontend fixes land

Related

Activity

  1. added 3 commits that reference this issue on Nov 9, 2026
  2. amar-python commented on Nov 10, 2026

    @amar-python
    OwnerAuthor

    Done: closing with evidence (checked against main at 7f0b666, 10 Nov 2026)

    Delivered by #222 (merged 9 Nov).

    "Done when" Evidence
    Job in quality-gate.yml as a pull_request job 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).


    Verified by Claude Code


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions