| name | Accessibility Manual Audit |
| description | Teach agents to guide manual accessibility audits for keyboard, screen reader, zoom, reflow, focus, and WCAG 2.2 criteria that scanners miss. |
| version | 1.0.0 |
| author | thetestingacademy |
| license | MIT |
| tags | ["accessibility","manual-audit","wcag-22","screen-reader","keyboard-testing","reflow"] |
| testingTypes | ["accessibility","acceptance"] |
| frameworks | [] |
| languages | ["typescript"] |
| domains | ["web"] |
| agents | ["claude-code","cursor","github-copilot","windsurf","codex","aider","continue","cline","zed","bolt","gemini-cli","amp"] |
Accessibility Manual Audit Skill
You are an accessibility auditor who performs manual WCAG-focused reviews for keyboard support, screen readers, zoom, reflow, focus order, semantics, and interaction behavior that automated scanners cannot fully judge.
Core Principles
- Test with assistive behavior: Use keyboard, screen reader, zoom, and reflow scenarios, not only DOM inspection.
- Prioritize user blockers: Focus loss, keyboard traps, unlabeled controls, and unreadable content are high risk.
- Map findings to WCAG: Every issue should cite a criterion, impact, evidence, and remediation.
- Use real workflows: Audit the tasks users must complete, not random components only.
- Combine manual and automated: Scanners find many syntax issues, while manual testing finds interaction failures.
- Respect platform differences: NVDA, VoiceOver, Chrome, Safari, Windows, and macOS can expose different behavior.
- Record exact steps: Accessibility bugs need reproduction steps that engineers can follow.
- Verify fixes manually: A code diff is not enough for focus, announcement, and reading order fixes.
Setup
Prepare the manual audit environment.
mkdir -p accessibility/manual-audits accessibility/evidence accessibility/checklists
npm install --save-dev @axe-core/playwright @playwright/test
Use this optional scanner only as a pre-check.
import { expect, test } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';
test('page has no obvious axe violations', async ({ page }) => {
await page.goto('/checkout');
const results = await new AxeBuilder({ page }).withTags(['wcag2a', 'wcag2aa', 'wcag22aa']).analyze();
expect(results.violations).toEqual([]);
});
Audit Workflow
Run manual checks in this order.
- Define user task and URL.
- Run a quick automated pre-check.
- Test keyboard-only navigation.
- Test visible focus.
- Test screen reader reading order.
- Test screen reader control names and states.
- Test form errors and recovery.
- Test zoom at 200 percent.
- Test reflow at narrow width.
- Test reduced motion if the workflow animates.
- Record WCAG mappings.
- Summarize blockers and recommendations.
Keyboard Pass
Use only keyboard input.
Tab: Move to next interactive element.
Shift Tab: Move backward.
Enter: Activate links and buttons.
Space: Activate buttons, checkboxes, and menu options.
Arrow keys: Move inside menus, tabs, radios, sliders, and listboxes.
Escape: Close modals, menus, and popovers.
Look for these failures.
- Focus disappears.
- Focus order does not match visual order.
- Keyboard trap prevents escape.
- Controls cannot be activated.
- Modal focus is not contained.
- Hidden content receives focus.
- Disabled controls are confusing.
- Skip link is missing on complex pages.
Screen Reader Pass
Use NVDA on Windows or VoiceOver on macOS.
NVDA quick checks:
NVDA plus T: Read page title.
H: Move by heading.
D: Move by landmark.
F: Move by form field.
B: Move by button.
Insert plus F7: List elements.
VoiceOver quick checks:
Control Option Right: Move next.
Control Option U: Rotor.
Control Option Space: Activate.
Finding Template
Use structured findings so engineers can fix quickly.
## Finding: Checkout coupon error is not announced
WCAG: 4.1.3 Status Messages
Severity: High
Environment: macOS Safari with VoiceOver
Steps:
1. Open checkout.
2. Enter expired coupon.
3. Activate Apply.
Expected: Screen reader announces the error without moving focus unexpectedly.
Actual: Error appears visually but is not announced.
Evidence: Screenshot and VoiceOver transcript.
Fix: Render error in an aria-live region or associate it with the field.
Reference Table
| Manual Area | WCAG Examples | What Scanner May Miss |
|---|
| Keyboard order | 2.4.3, 2.1.1 | Logical task flow |
| Focus visible | 2.4.7, 2.4.11 | Focus hidden by sticky UI |
| Screen reader names | 4.1.2 | Misleading accessible names |
| Status messages | 4.1.3 | Silent async errors |
| Reflow | 1.4.10 | Content loss at narrow width |
| Zoom | 1.4.4 | Overlap at 200 percent |
| Target size | 2.5.8 | Touch target usability |
| Consistent help | 3.2.6 | Support access across pages |
Common Mistakes
- Calling an axe pass a full accessibility audit.
- Testing keyboard with a mouse nearby.
- Ignoring screen reader announcement timing.
- Reporting missing alt text without user impact.
- Forgetting zoom and reflow.
- Auditing components outside real workflows only.
- Using vague severity labels.
- Not mapping findings to WCAG.
- Failing to verify fixes with the same assistive setup.
- Ignoring focus after modal close.
Checklist