Files
claude-skills-reference/engineering-team/a11y-audit/expected_outputs/sample-scan-report.md
Alireza Rezvani a059113c96 Dev (#377)
* fix: add missing plugin.json files and restore trailing newlines

- Add plugin.json for review-fix-a11y skill
- Add plugin.json for free-llm-api skill
- Restore POSIX-compliant trailing newlines in JSON index files

* feat(engineering): add review-fix-a11y skill (WCAG 2.2 a11y audit + fix) (#375)

Adds review-fix-a11y (WCAG 2.2 a11y audit + fix) and free-llm-api skills.

Includes:
- review-fix-a11y: WCAG 2.2 audit workflow, a11y_audit.py scanner, contrast_checker.py
- free-llm-api: ChatAnywhere, Groq, Cerebras, OpenRouter, llm-mux, One API setup
- secret_scanner.py upgrade with secrets-patterns-db integration (1,600+ patterns)

Co-authored-by: ivanopenclaw223-alt <ivanopenclaw223-alt@users.noreply.github.com>

* chore: sync codex skills symlinks [automated]

* Revert "feat(engineering): add review-fix-a11y skill (WCAG 2.2 a11y audit + fix) (#375)"

This reverts commit 49c9f2109f.

* chore: sync codex skills symlinks [automated]

* Revert "feat(engineering): add review-fix-a11y skill (WCAG 2.2 a11y audit + fix) (#375)"

This reverts commit 49c9f2109f.

* feat(engineering-team): add a11y-audit skill — WCAG 2.2 accessibility audit & fix (#376)

Built from scratch (replaces reverted PR #375 contribution).

Skill package:
- SKILL.md: 1132 lines, 3-phase workflow (scan → fix → verify),
  per-framework fix patterns (React, Next.js, Vue, Angular, Svelte, HTML),
  CI/CD integration guide, 20+ issue type coverage
- scripts/a11y_scanner.py: static scanner detecting 20+ violation types
  across HTML/JSX/TSX/Vue/Svelte/CSS — severity-ranked, CI-friendly exit codes
- scripts/contrast_checker.py: WCAG contrast calculator with AA/AAA checks,
  --suggest mode, --batch CSS scanning, named color support
- references/wcag-quick-ref.md: WCAG 2.2 Level A/AA criteria table
- references/aria-patterns.md: ARIA roles, live regions, keyboard interaction
- references/framework-a11y-patterns.md: React, Vue, Angular, Svelte fix patterns
- assets/sample-component.tsx: sample file with intentional violations
- expected_outputs/: scan report, contrast output, JSON output samples
- /a11y-audit slash command, settings.json, plugin.json, README.md

Validation: 97.6/100 (EXCELLENT), quality 73.9/100 (B-), scripts 2/2 PASS

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: sync codex skills symlinks [automated]

---------

Co-authored-by: Leo <leo@openclaw.ai>
Co-authored-by: ivanopenclaw223-alt <ivanopenclaw223@gmail.com>
Co-authored-by: ivanopenclaw223-alt <ivanopenclaw223-alt@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:42:53 +01:00

2.2 KiB

A11y Audit Report — sample-component.tsx

Scanned: 1 file | Issues: 9 | Status: FAIL

Critical (3)

1. Missing alt text on image

  • File: sample-component.tsx:7
  • Code: <img src={user.avatar} />
  • WCAG: 1.1.1 Non-text Content (Level A)
  • Fix: Add descriptive alt text: <img src={user.avatar} alt={${user.name}'s avatar} />

2. Click handler without keyboard support

  • File: sample-component.tsx:5
  • Code: <div className="card" onClick={() => onEdit(user.id)}>
  • WCAG: 2.1.1 Keyboard (Level A)
  • Fix: Use <button> or add role="button", tabIndex={0}, and onKeyDown

3. Click handler without keyboard support

  • File: sample-component.tsx:11
  • Code: <div onClick={() => onDelete(user.id)} ...>
  • WCAG: 2.1.1 Keyboard (Level A)
  • Fix: Replace <div> with <button>

Serious (4)

4. Missing form label

  • File: sample-component.tsx:15
  • Code: <input placeholder="Add note" />
  • WCAG: 3.3.2 Labels or Instructions (Level A)
  • Fix: Add <label> or aria-label="Add note"
  • File: sample-component.tsx:14
  • Code: <a href="#">Edit</a>
  • WCAG: 2.4.4 Link Purpose (Level A)
  • Fix: Use a real href or replace with <button>

6. tabindex greater than 0

  • File: sample-component.tsx:24
  • Code: tabIndex={5}
  • WCAG: 2.4.3 Focus Order (Level A)
  • Fix: Use tabIndex={0} — positive values disrupt natural tab order

7. Missing table headers

  • File: sample-component.tsx:30
  • Code: <td><b>Name</b></td> (using td+b instead of th)
  • WCAG: 1.3.1 Info and Relationships (Level A)
  • Fix: Use <th scope="col">Name</th>

Moderate (2)

8. Missing form label

  • File: sample-component.tsx:22
  • Code: <input type="text" placeholder="Search..." />
  • WCAG: 3.3.2 Labels or Instructions (Level A)
  • Fix: Add aria-label="Search" or visible label

9. Color as sole indicator

  • File: sample-component.tsx:38
  • Code: style={{ color: row.active ? 'green' : 'red' }}
  • WCAG: 1.4.1 Use of Color (Level A)
  • Fix: Add text or icon alongside color: {row.active ? '✓ Active' : '✗ Inactive'}