wcag-checklist-builder
Builds a per-component WCAG 2.2 accessibility checklist from a component spec - covers focus management, color contrast, ARIA roles & states, keyboard interaction, error handling, and live-region announcements - emitting a markdown checklist or YAML test plan that pairs with screen-reader-test-author for manual verification and the violation gate for automated scans. Use during component-spec review or pre-implementation acceptance.
wcag-checklist-builder
Overview
A component-level a11y checklist makes acceptance criteria explicit before implementation. Without one, "is this accessible?" becomes a vague handoff between design, eng, and QA. This skill takes the component's spec (props, states, interaction model) and emits the matching WCAG 2.2 checklist.
The checklist pairs with:
When to use
Step 1 - Identify the component archetype
The skill maps to one of these archetypes; each has its own checklist pattern:
| Archetype | Examples |
|---|---|
| Static text / display | Heading, badge, banner, blockquote. |
| Interactive - single trigger | Button, link, icon button. |
| Interactive - form input | Text input, checkbox, radio, select, switch. |
| Interactive - multi-state | Disclosure, accordion, tabs, popover. |
| Interactive - overlay | Modal, drawer, dropdown menu, command palette. |
| Composite | Combobox, date picker, multi-select, tree. |
| Live region | Toast, alert, in-page status, error banner. |
| Layout / navigation | Header, footer, breadcrumb, pagination. |
For each archetype, the matching checklist sections are below.
Step 2 - Apply the per-archetype checklist
Static text / display
Interactive - single trigger
Interactive - form input
Interactive - multi-state (disclosure / accordion / tabs)
Interactive - overlay (modal / drawer / popover)
(See wcag-focus-trap for the 6-step pattern.)
Composite (combobox, date picker, multi-select)
(See aria-authoring-patterns.)
Live region
Layout / navigation
Step 3 - Add per-component customization
Beyond the archetype defaults, the spec may declare:
Step 4 - Emit the artifact
The skill produces two outputs:
Markdown checklist (for spec / PR review)
## A11y Checklist — `<ComponentName>`
**Archetype:** Interactive — overlay (modal)
### Required (must pass before merge)
- [ ] Modal has `role="dialog"` and `aria-modal="true"`.
- [ ] Modal title is `aria-labelledby`-referenced.
- [ ] On open: focus moves to first focusable inside modal.
- [ ] Tab cycles within modal; outside content is `inert`.
- [ ] Escape closes; focus returns to trigger.
- [ ] Close button has accessible name "Close" or "Dismiss".
- [ ] Focus indicator on close button at ≥3:1 contrast.
### Per-component (this design adds)
- [ ] Confirmation modal's "Delete" button has `aria-describedby`
linking to the warning text.
- [ ] On confirm: live region announces "Deleted" via
`aria-live="polite"`.
### Verification
- Automated: axe-core scan with `dialog` rule enabled.
- Manual: NVDA + Firefox per [`screen-reader-test-author`](../screen-reader-test-author/SKILL.md).
- Code review: [`accessibility-code-critic`](../../agents/accessibility-code-critic.md) agent.YAML test plan (for test-management tools)
component: ConfirmModal
archetype: overlay-modal
checks:
- id: AC-MODAL-1
description: Modal has role and aria-modal
severity: blocker
method: automated
rule: axe::role-modal
- id: AC-MODAL-2
description: Focus moves to first focusable on open
severity: blocker
method: e2e-test
framework: playwright
- id: AC-MODAL-3
description: Escape closes; focus restored
severity: blocker
method: e2e-test
- id: AC-MODAL-4
description: Live region announces "Deleted" on confirm
severity: blocker
method: manual
tester_role: a11y-specialist
instructions: NVDA + Firefox per screen-reader-test-authorAnti-patterns
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Generic checklist for all components | Static text doesn't need keyboard checks; modal does. | Per-archetype checklist; pick once. |
| Checklist created post-implementation | A11y becomes a retrofit; bugs found late. | Run this skill on the spec, before implementation. |
| Marking items "won't fix" without rationale | Loss of institutional knowledge; same item resurfaces next quarter. | Document each waiver with a date + reviewer initials. |
| One mega-checklist per component (50+ items) | Reviewer fatigue; rubber-stamping. | Per-archetype defaults; only add custom items the design demands. |