Skip to content

WCAG 2.1 A/AA Coverage Matrix

How every WCAG 2.1 Level A and AA success criterion is (or is not) handled by the PDF β†’ accessible-HTML conversion pipeline and the guided remediation wizard.

Goal: every applicable criterion is either auto-fixed by the pipeline or has a dedicated guided tool that walks the user through fixing it.

Legend

  • AUTO β€” the conversion pipeline fixes it deterministically (see workers/api/src/services/{axe-fixer,wcag-validator,post-processing-pipeline}.ts).
  • TOOL β€” a wizard step walks the user through it.
  • AUTO+TOOL β€” pipeline does the mechanical part; a tool handles the human-judgment part.
  • N/A β€” not applicable to static, PDF-derived documents (no media, no time limits, single page, no custom widgets) unless the source embeds that content.
  • GAP β€” applicable but not yet covered. Tagged β†’ auto (add to pipeline) or β†’ tool (needs a guided step).

Important: automated testing (axe-core, our 44-rule fixer) detects only ~30–55% of WCAG failures. β€œAUTO” means the machine-testable part is handled β€” it is not a conformance guarantee. Several AUTO fixes satisfy the checker via heuristics (e.g. aria-label guessed from placeholder; contrast forced to dark-on-white) without guaranteeing the criterion’s intent.


Perceivable

SCLevelNameStatusNotes / gap approach
1.1.1ANon-text ContentAUTO+TOOLVision-model alt at conversion (image-description-pipeline.ts) + Images tool. Tool should also flag alt quality, not just presence.
1.2.1AAudio/Video-only (Prerecorded)N/AOnly if the source embeds media β†’ β†’ tool (media alternative prompt).
1.2.2ACaptions (Prerecorded)N/AMedia only.
1.2.3AAudio Description / Media AltN/AMedia only.
1.2.4AACaptions (Live)N/AMedia only.
1.2.5AAAudio Description (Prerecorded)N/AMedia only.
1.3.1AInfo & RelationshipsAUTO+TOOLLandmarks/lists/th-td auto; Headings + Tables tools for structure.
1.3.2AMeaningful SequenceGAP β†’ toolDOM order comes from PDF reading order, but no review step. Listen surfaces it aurally; add a Reading order tool to reorder content blocks (distinct from Tab order, which is focus only).
1.3.3ASensory CharacteristicsTOOL βœ“Sensory references tool (shipped): flags position/shape/size/color-only instructions (β€œthe button on the right”, β€œthe round icon”) and lets the user reword them.
1.3.4AAOrientationAUTOResponsive HTML/CSS isn’t orientation-locked.
1.3.5AAIdentify Input PurposeGAP β†’ autoAdd autocomplete tokens to recognized inputs (name/email/tel/address). Forms only.
1.4.1AUse of ColorTOOL βœ“Color cues tool (shipped): finds text/links distinguished only by a chromatic color with no non-color cue, and adds an underline.
1.4.2AAudio ControlN/ANo autoplay audio in documents.
1.4.3AAContrast (Minimum)AUTOfixColorContrast forces #1a1a1a on #fff. Lossy β€” flattens intended color; see 1.4.1.
1.4.4AAResize TextAUTO (verify)Relative/responsive units; add a check that no fixed px/user-scalable=no blocks 200% zoom.
1.4.5AAImages of TextAUTOThe converter OCRs scanned-text images (image-enhancer.ts isScannedTextPage) and replaces them with real text, marking the image decorative. Logos / essential text-in-image are exempt. Reported as images-of-text in the scan.
1.4.10AAReflowAUTO (verify)Responsive CSS + table column-splitting (TABLE_FIT_ENABLED). Verify no 320px horizontal scroll.
1.4.11AANon-text ContrastAUTO+TOOL βœ“Focus outline color auto. Border contrast tool (shipped): flags table/box borders below 3:1 on white and darkens them. Graphical information rides on alt text; real UI widgets are rare in documents.
1.4.12AAText SpacingAUTOCSS permits user spacing overrides without clipping.
1.4.13AAContent on Hover/FocusN/ANo hover/tooltip UI in static documents.

Operable

SCLevelNameStatusNotes / gap approach
2.1.1AKeyboardAUTOLinks/controls are natively focusable; no custom widgets in static docs.
2.1.2ANo Keyboard TrapAUTONo trapping scripts.
2.1.4AACharacter Key ShortcutsN/ANo single-key shortcuts.
2.2.1ATiming AdjustableN/ANo time limits.
2.2.2APause, Stop, HideAUTOAnimations reduced to a single iteration.
2.3.1AThree FlashesN/AStatic content.
2.4.1ABypass BlocksAUTOSkip link injected.
2.4.2APage TitledAUTO+TOOLTitle from filename; optional confirm-title step improves quality.
2.4.3AFocus OrderTOOLTab order tool.
2.4.4ALink Purpose (In Context)TOOLLinks tool.
2.4.5AAMultiple WaysN/A β†’ auto (nice-to-have)Single document; optionally auto-generate a TOC from headings.
2.4.6AAHeadings & LabelsAUTO+TOOLHeadings tool flags empty; enhance to flag vague/duplicate heading text.
2.4.7AAFocus VisibleAUTOGlobal :focus-visible outline.
2.5.1APointer GesturesN/ANo multipoint/path gestures.
2.5.2APointer CancellationN/ANo custom pointer handlers.
2.5.3ALabel in NameTOOL βœ“Covered by the Form fields tool (adds accessible names to controls). Forms only.
2.5.4AMotion ActuationN/ANo motion-triggered actions.

Understandable

SCLevelNameStatusNotes / gap approach
3.1.1ALanguage of PageAUTOlang= injected on <html>.
3.1.2AALanguage of PartsPARTIAL β†’ autoFeature-flagged (WCAG_LANGUAGE_OF_PARTS). Enable/improve auto foreign-phrase detection, or a tool to mark.
3.2.1AOn FocusAUTONo context change on focus.
3.2.2AOn InputAUTONo auto-submit on input.
3.2.3AAConsistent NavigationN/ASingle document.
3.2.4AAConsistent IdentificationN/ASingle document.
3.3.1AError IdentificationN/A β†’ toolForms only β†’ Form fields tool.
3.3.2ALabels or InstructionsAUTO+TOOL βœ“Heuristic aria-label auto; Form fields tool (shipped) finds controls with no label / placeholder-only and adds a real one. Forms only.
3.3.3AAError SuggestionN/A β†’ toolForms only β†’ Form fields tool.
3.3.4AAError Prevention (Legal/Financial)N/A β†’ toolInteractive forms only.

Robust

SCLevelNameStatusNotes / gap approach
4.1.1AParsingAUTODuplicate-id + invalid-nesting fixes. (Removed in WCAG 2.2, retained here for 2.1.)
4.1.2AName, Role, ValueAUTOARIA role/attr fixes for standard controls.
4.1.3AAStatus MessagesN/ANo dynamic status regions in static docs.

What’s actually missing (applicable, not yet covered)

New guided tools to build

  1. Color cues (1.4.1) β€” shipped: finds color-only distinctions and adds an underline.
  2. Reading order (1.3.2) β€” reorder content blocks to match visual order (content, not just focus). (Deferred: needs layout via an iframe bridge like Tab order; the converter already emits DOM in reading order.)
  3. Sensory references (1.3.3) β€” shipped: flags shape/size/location/color-only instructions to reword.
  4. Images of text (1.4.5) β€” already auto-fixed by the converter (OCR β†’ real text); not a tool gap.
  5. Graphics & UI contrast (1.4.11) β€” shipped as Border contrast: darkens faint table/box borders below 3:1 (the applicable slice; graphics ride on alt text).
  6. Form fields (2.5.3, 3.3.2) β€” shipped: labels controls with no label / placeholder-only. (Error handling 3.3.1/3.3.3 and input-purpose 1.3.5 remain surfaced by the scan for the rare interactive-form document.)

Status: every applicable WCAG 2.1 A/AA criterion is now auto-fixed or has a guided tool. The only remaining items are inherently N/A for static documents (media, timing, multi-page) or need human judgment the tools capture (is the alt text accurate?).

Pipeline auto-fixes to add

  • autocomplete tokens on recognized inputs (1.3.5).
  • Zoom/reflow guard: strip user-scalable=no, flag fixed-px widths (1.4.4 / 1.4.10).
  • Enable/strengthen language-of-parts detection (3.1.2).
  • Optional: auto-generate a table of contents from headings (2.4.5).

Enhancements to existing tools

  • Images β†’ prompt on alt quality, not just presence (1.1.1).
  • Headings β†’ flag vague/duplicate heading text (2.4.6).
  • Wizard summary β†’ drive completeness from the real axe-core conformance scan β€” shipped: the wizard summary now reads file.wcagStatus.evaluatedRules, routes each failing rule to its guided tool (or notes it as auto-fixed/manual), and reports β€œN of M checks pass” from the last validation.

Honest framing

Not every one of the 50 criteria needs a tool: for static, PDF-derived documents, the media (1.2.x), timing (2.2.x), flashing (2.3.1), pointer/motion (2.5.x), multi-page consistency (3.2.3/4), and status-message (4.1.3) criteria are N/A by content type β€” they only apply when the source embeds media or interactive forms. The realistic target is: every applicable criterion is auto-fixed or has a tool, and the wizard’s end state reflects the actual conformance scan rather than a fixed list. With the tools above added, the applicable-criteria coverage is essentially complete β€” the remaining residue (is the alt text accurate? is a heading meaningful?) is inherently human judgment, which is what the guided tools exist to capture.