claude-skills/engineering-team/a11y-audit
Claude 8fd3155868
fix(plugin-schema): align with live Claude Code spec — migrate to "./"-prefixed skills field
Resolves #712 and #714.

Claude Code's plugin spec (code.claude.com/docs/en/plugins-reference) requires
"All paths must be relative to the plugin root and start with ./". CC 2.1.144+
rejects the bare "skills" form with `Validation errors: skills: Invalid input`,
breaking plugin installs from this repo.

Changes:
- 47 plugin.json manifests migrated from "skills": "skills" → ["./skills"]
  (canonical post-CC 2.1.144 form, also accepts string "./skills")
- scripts/check_plugin_json.py rewritten to enforce the live spec:
  * Hard-fails on non-"./"-prefixed strings (except the legacy "skills" literal)
  * Hard-fails on empty strings/arrays and non-string array entries
  * Emits WARN (non-fatal) on the legacy "skills" literal as a safety net
    for copied templates — the WARN tolerance can be removed later
  * Tested against all four canonical forms + 3 garbage forms
- CLAUDE.md §5 rewritten to document the live spec, including the historical
  context of the v2.1.107 → v2.1.144 regression window that's now closed
- 15 stale broken symlinks under .gemini/skills/ removed (orphans from older
  reorgs that the sync script didn't prune because its cleanup is disabled)

Verification:
- scripts/check_plugin_json.py --all → 0 FAIL, 0 WARN, exit 0 (69 files OK)
- pytest tests/ → 2103 passed
- find . -type l ! -exec test -e {} \; → 0 broken symlinks
- Live spec forms tested: ["./"], ["./skills"], "./skills", ["./a","./b"] all pass
- Garbage forms rejected: bare "./", empty array, non-string entries, plain strings
2026-05-21 07:03:11 +00:00
..
.claude-plugin fix(plugin-schema): align with live Claude Code spec — migrate to "./"-prefixed skills field 2026-05-21 07:03:11 +00:00
skills/a11y-audit fix(plugins): restructure 21 single-skill plugins into ./skills/<name>/ layout 2026-05-02 22:33:59 +02:00
README.md Dev (#377) 2026-03-18 08:42:53 +01:00
settings.json Dev (#377) 2026-03-18 08:42:53 +01:00

A11y Audit — WCAG 2.2 Accessibility Audit & Fix

Audit and fix WCAG 2.2 accessibility issues in any frontend project. Covers React, Next.js, Vue, Angular, Svelte, and plain HTML.

Quick Start

# Scan a project
/a11y-audit ./src

# Or use the scripts directly
python3 scripts/a11y_scanner.py ./src
python3 scripts/contrast_checker.py "#1a1a2e" "#ffffff"

Scripts

Script Purpose
a11y_scanner.py Scan HTML/JSX/TSX/Vue/Svelte/CSS for 20+ a11y violations
contrast_checker.py WCAG contrast ratio calculator with AA/AAA checks and --suggest mode

Both are stdlib-only — no pip install needed. CI-friendly exit codes (0 = pass, 1 = blocking issues).

What It Covers

  • Images: missing alt, empty alt on informative images
  • Forms: missing labels, orphan labels, missing fieldset/legend
  • Headings: skipped levels, missing h1, multiple h1s
  • Landmarks: missing main/nav/skip link
  • Keyboard: tabindex > 0, click without keyboard handler
  • ARIA: invalid attributes, aria-hidden on focusable, missing aria-live
  • Color: contrast ratios below AA thresholds
  • Links: empty links, "click here" text
  • Tables: missing headers, missing caption
  • Media: missing captions, autoplay without controls

References

  • references/wcag-quick-ref.md — WCAG 2.2 Level A/AA criteria table
  • references/aria-patterns.md — ARIA roles, live regions, keyboard patterns
  • references/framework-a11y-patterns.md — React, Vue, Angular, Svelte fix patterns

License

MIT