Documentation
Reports
JSONL, JSON, HTML, Markdown summaries, allowlists, and interpreting findings.
Reports
On this page
a11y-catscan writes several report formats from the same scan. JSONL is the source of truth; the other files are derived views.
Output files
| File | Purpose |
|---|---|
.jsonl |
Streaming results, one JSON object per page |
.json |
Full combined JSON object for inspection or compatibility |
.html |
Human-readable report with summaries and per-page details |
.md |
Compact LLM-oriented summary, only with --llm |
.state.json |
Crawl state for --resume |
EARL outcomes
Findings use W3C EARL outcome names:
| Outcome | Meaning |
|---|---|
failed |
Definite automated failure |
cantTell |
Needs manual review |
passed |
Rule passed |
inapplicable |
Rule does not apply |
The summary counts focus on failed and cantTell.
Normalized tags
| Tag | Meaning |
|---|---|
sc-1.4.3 |
WCAG Success Criterion |
aria-valid-attrs |
ARIA category |
bp-landmarks |
Best-practice category |
The sc- prefix means "Success Criterion." It is separate from native
engine tags like wcag21aa, which describe WCAG version and level.
Deduplication
Raw JSONL preserves engine-native results. Report readers apply cross-engine deduplication by:
(selector, primary_tag, outcome)
Merged findings keep an engines dictionary. For example, one contrast
failure might show axe and IBM attribution if both tools confirmed it.
HTML report
Use the HTML report for audit review:
- impact breakdown
- WCAG criteria table
- violation summary by rule
- incomplete summary
- per-page details
- selectors, snippets, and messages
- clean page list
All scanned page snippets are escaped before rendering.
LLM report
Use --llm for a compact Markdown summary:
./a11y-catscan.py --llm https://example.com/
The Markdown groups repeated failures and includes representative HTML. It is meant to help find the source template or component. It is not a replacement for the full report.
Allowlists
Use an allowlist for known-acceptable findings, especially
engine-specific cantTell items:
- rule: color-contrast
url: /homepage
outcome: cantTell
reason: chart library renders gradient background; manual contrast checked
Supported filters:
| Key | Meaning |
|---|---|
rule |
Normalized finding id, required |
url |
URL substring |
target |
selector/target substring |
engine |
only suppress this engine when it is the sole engine |
outcome |
failed or cantTell |
reason |
human explanation |
Engine-filtered allowlist entries do not suppress multi-engine confirmed findings.
Run with:
./a11y-catscan.py --allowlist allowlist.yaml https://example.com/
Registry and analysis
Completed scans are registered by name when a basename is available. Useful analysis commands:
./a11y-catscan.py --list-scans
./a11y-catscan.py --name baseline --page-status https://example.com/page
./a11y-catscan.py --name baseline --search sc:1.4.3
./a11y-catscan.py --name baseline --search sel:*main-nav*