Share an accessibility report

Accessibility testing has an unusual property: the tool runs in engineering, and most of the fixes don't belong to engineering. Alt text is a content decision. Link wording is a content decision. Contrast and focus order are design decisions. Heading structure is usually both.

So the report lands in a CI artifact zip, which is the one place none of those people can reach, and the ticket that comes out of it says "fix a11y issues" with a screenshot attached.

Publish the report instead

npx pa11y-ci --reporter pa11y-ci-reporter-html || true

curl -fsS -X PATCH \
  "https://commareports.com/api/v1/reports/$COMMA_REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html pa11y-ci-report/index.html \
        --arg title "Accessibility — $(date +%F)" \
        '{title: $title, html: $html}')"

For @axe-core/cli, run it with --save results.json and render with axe-html-reporter; for Lighthouse, --output html already writes a self-contained file. All three publish with the same curl. Use a scoped token with reports:write.

What the link makes possible

  • A thread per violation. The content owner highlights the row and writes the alt text directly on it; the developer resolves the thread when it ships. See commenting on HTML.
  • Proof of progress. Revisions at one URL make "we cleared 34 of the 41 serious violations this quarter" a diff, not a claim. See revisions and diffs.
  • External auditors, scoped. Share one report with a named reviewer. See the sharing model.
  • A standing scan. A routine reruns the audit on a schedule so regressions surface between releases.

Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision history.

Create your first report →

Related