brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
software-accessibilityImplements accessibility fixes in code. Use when remediating semantic HTML, ARIA, focus, keyboard support, or screen-reader behavior.
Independent GitHub snapshot · Automated classification · Original documentation governs
This skill owns engineering implementation. It does not own design-side WCAG interpretation or formal accessibility-test programs.
| Need | Default | Notes |
|---|---|---|
| fix component semantics | semantic HTML first | add ARIA only when HTML is insufficient |
| keyboard support | tab order, visible focus, correct key handling | test manually every time |
| screen reader verification | Primary browser/reader pair for the affected users | add a second platform for shared primitives or cross-platform claims |
| automated coverage | axe-core plus Lighthouse or Pa11y | automation catches markup-level issues, not the full experience |
| modal or composite widget | APG-aligned pattern | do not invent custom keyboard behavior |
| compliance prep | Design/test to WCAG 2.2 AA, then map the applicable legal or procurement baseline | do not describe the design target as the binding version everywhere |
| WCAG 2.2 checklist, axe-core/Pa11y snippets, EU Accessibility Act | references/wcag-2-2-checklist.md | technical mapping only; EAA applicability goes to qualified counsel |
| run axe-core in CI | scripts/run_axe.sh | exits non-zero on violations |
Use this skill when the main work is:
Route elsewhere when the main work is:
| Need | Use Instead |
|---|---|
| design-side accessibility and interaction design | ../software-ui-ux-design/SKILL.md |
| accessibility test automation program or formal audit flow | ../qa-testing-accessibility/SKILL.md |
| usability research with disabled users | ../software-ux-research/SKILL.md |
| frontend stack setup and general UI build work | ../software-frontend/SKILL.md |
| platform-specific mobile accessibility behavior | ../software-mobile/SKILL.md |
Default order:
Common mistakes to avoid:
div or span used as buttonsaria-labelaria-expandedEvery interactive surface must support:
Minimum verification set:
Choose the assistive-technology matrix from the claim and blast radius:
| Change | Minimum manual evidence |
|---|---|
| Page-specific copy, label, or state fix | One supported browser/reader pair used by the affected audience |
| Shared widget or design-system primitive | One Apple and one Windows/browser pair where the product supports both |
| Mobile-native behavior | The platform reader on a physical target device (VoiceOver or TalkBack) |
| Broad “accessible” or conformance claim | Product support matrix plus disabled-user testing or a qualified audit; automation alone is insufficient |
If a required platform is unavailable, report that cell as unverified. Do not block a narrow source fix merely because an unrelated platform cannot be exercised, and do not generalize the evidence beyond the tested pair.
| Layer | Tool | Catches |
|---|---|---|
| Authoring | eslint-plugin-jsx-a11y (React) or axe-linter | Missing labels, wrong roles, bad ARIA usage |
| Development diagnostics | @axe-core/react | Logs runtime findings in the development console |
| Component tests | jest-axe | Rule checks on the rendered test state |
| E2E / integration | axe-core via Playwright or Cypress | Page-level violations in rendered state |
| CI gate | Lighthouse or Pa11y | Score regression and critical issues |
Automation does not replace keyboard walkthroughs, screen-reader validation, or judgment on content order, announcement quality, and alt-text quality.
A clean scan covers only the rules and rendered states exercised. Report the tool, route/state, violations and manual evidence; it does not establish WCAG conformance.
| Signal type | Automatable | Requires a human pass |
|---|---|---|
Missing alt, label, or landmark | Yes — rule-detectable | — |
| Contrast ratio below threshold | Partial — supported rendered cases | Yes when gradients, images, transparency or incomplete results prevent a reliable computed check |
role/state attribute present but semantically wrong for context | Partial — flags presence, not correctness | Yes — judgment on whether the role fits the interaction |
| Reading order matches visual order | No | Yes — screen-reader walkthrough |
| Live-region announcement is timely and not noisy | No | Yes — screen-reader walkthrough |
| Focus lands somewhere sensible after a route change or async update | No | Yes — keyboard + screen-reader walkthrough |
| Alt text is accurate and non-redundant (not just present) | No | Yes — content review |
| Keyboard operability of a composite widget (arrow keys, Home/End, typeahead) | No | Yes — manual keyboard pass |
Never report an automated scan result (axe-core, Lighthouse, WAVE, Pa11y) as "accessible" or "WCAG conformant" on its own — report it as "N automated violations resolved; manual keyboard and screen-reader verification pending/complete."
When a scan or audit returns more issues than can be fixed at once, rank by user impact, not by rule-engine severity label alone:
Effort-vs-impact check before committing to a large remediation plan: a single shared-component fix (e.g., the button, input, or modal primitive) frequently resolves dozens of scattered violations at once — audit the design system before auditing every page.
Do not recommend, and flag if found, third-party "accessibility overlay" scripts as a compliance solution: their marketing promise does not establish that semantics, labeling, keyboard and focus work; require implementation and assistive-technology evidence. If one is installed, fix the underlying markup and demote the overlay to an optional enhancement. Legal evidence and enforcement precedent are owned by qa-testing-accessibility.
Prefer native <dialog>.showModal() for modal surfaces; use Popover API for suitable non-modal surfaces. Test forced colors and composed headless-library contracts; map ISO/IEC 40500 by its cited edition. Implementation conditions, keyboard and ARIA requirements for tabs, dialog, combobox, accordion, menu, and tree view: references/remediation-playbook.md.
tabindex used to force order instead of fixing DOM order.aria-label added on top of already-correct visible labels, creating redundant or conflicting names.aria-hidden="true" applied to visible interactive content.Pay extra attention to AI-produced code that shows div soup, broken or invented ARIA, missing form labels, skipped heading hierarchy, low-contrast styling, missing or broken focus states, or incomplete keyboard handlers.
Do not call the work complete until all of these are checked:
Keyboard walkthrough passes for the affected flow (Tab, Shift+Tab, Enter, Escape, arrow keys as required)
Visible focus indicator present in all interactive states (never removed with outline: none alone)
Screen-reader output checked on the risk-based matrix above; tested browser/reader/device pairs and unverified pairs are named
Zero critical or serious axe-core violations remain; any suppressed violation has an explicit justification comment
Heading levels express the content hierarchy and labels describe purpose; inspect skipped levels in context rather than treating every skip as an automatic WCAG failure; landmarks match intended page regions
All form inputs have visible labels bound via for/id or aria-labelledby; errors use aria-describedby
Task status updates announced briefly where needed; streamed content retains normal semantics and is not wrapped wholesale in a live region
Any WCAG or legal-compliance claim is verified against W3C/WAI or official regulatory sources, not memory
Verify current WCAG, EN 301 549, EAA, browser-support, and tool-maintenance claims before final advice.
Prefer W3C, WAI, official tool docs, and government or regulator sources.
Symptom-keyed recipes S1-S5 (form label/error/focus audit, modal focus trap with inert and focus return, contrast remediation in design tokens, RSC route-change focus loss, reduced-motion fallback): references/remediation-playbook.md.
Adjacent skills
Sources
When prior decisions or pitfalls are relevant, consult learnings.consolidated.md if present; use learnings.md only for needed history or as the available fallback. Otherwise skip both.
After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to learnings.md via agents-skills-feedback-loop/scripts/append_learning.py. Do not modify SKILL.md itself.