type: decision
status: active
timestamp: 2026-06-20
tags: [decisions, architecture, a11y, accessibility, axe, pa11y, lighthouse]

Accessibility — three-tool stack (axe + Pa11y + Lighthouse CI)

axe-core + Pa11y + Lighthouse CI per PR on any new a11y violation in any tool. Each tool catches a different category.

Accessibility — three-tool stack (axe + Pa11y + Lighthouse CI)

Decision

Every site’s per-PR CI runs all three a11y tools in parallel:

  1. axe-core — Deque’s static rule engine, run via @axe-core/playwright.
  2. Pa11y — dynamic runner with the HTMLCS ruleset (and axe runner alongside).
  3. Lighthouse CI — score
    • perf budget, posted as a PR comment.

PR fails on any new violation in any of the three tools. The a11y category in Lighthouse CI is required to score 100. All three are free, OSS, no card.

Why

Implications

Architecture

Per-PR gating

Why fail-on-any vs warn-only

What we don’t do

Cross-refs


Edit on GitHub · Back to index