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>
35 lines
898 B
JSON
35 lines
898 B
JSON
{
|
|
"summary": {
|
|
"files_scanned": 1,
|
|
"files_with_issues": 1,
|
|
"total_issues": 9,
|
|
"critical": 3,
|
|
"serious": 4,
|
|
"moderate": 2,
|
|
"minor": 0,
|
|
"verdict": "FAIL"
|
|
},
|
|
"findings": [
|
|
{
|
|
"severity": "critical",
|
|
"category": "IMG-ALT",
|
|
"file": "sample-component.tsx",
|
|
"line": 7,
|
|
"code": "<img src={user.avatar} />",
|
|
"wcag": "1.1.1",
|
|
"message": "Image missing alt attribute",
|
|
"fix": "Add alt text: alt=\"description of image\""
|
|
},
|
|
{
|
|
"severity": "critical",
|
|
"category": "KB-CLICK",
|
|
"file": "sample-component.tsx",
|
|
"line": 5,
|
|
"code": "<div className=\"card\" onClick={() => onEdit(user.id)}>",
|
|
"wcag": "2.1.1",
|
|
"message": "Click handler on non-interactive element without keyboard support",
|
|
"fix": "Use <button> or add role=\"button\", tabIndex={0}, onKeyDown"
|
|
}
|
|
]
|
|
}
|