mirror of
https://github.com/alirezarezvani/claude-skills.git
synced 2026-10-09 03:17:54 +00:00
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 |
||
|---|---|---|
| .. | ||
| .claude-plugin | ||
| skills/a11y-audit | ||
| README.md | ||
| settings.json | ||
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 tablereferences/aria-patterns.md— ARIA roles, live regions, keyboard patternsreferences/framework-a11y-patterns.md— React, Vue, Angular, Svelte fix patterns
License
MIT