$npx -y skills add sickn33/agentic-awesome-skills --skill accesslint-diffDiff a live page's accessibility violations against a baseline — by default compares uncommitted changes (stash-based), or pass --branch [<name>] to diff against a branch. Reports only new violations introduced, violations fixed, and pre-existing count. Use scan for a full audi
| 1 | Default branch: !`git symbolic-ref refs/remotes/origin/HEAD --short 2>/dev/null | sed 's|.*/||' || echo main` |
| 2 | |
| 3 | Report only what changed. Locate; don't fix. If no URL in `$ARGUMENTS`, ask for one. |
| 4 | |
| 5 | Parse `$ARGUMENTS`: strip `--branch <name>` if present → branch mode. If `--branch` has no value, use the default branch above. Remainder is the URL. |
| 6 | |
| 7 | ## When to Use |
| 8 | - Use this skill when the task matches this description: Diff a live page's accessibility violations against a baseline — by default compares uncommitted changes (stash-based), or pass --branch [<name>] to diff against a branch. Reports only new violations introduced, violations fixed, and pre-existing count. Use `scan` for a full audit with no diffing. |
| 9 | |
| 10 | ## 1. Audit |
| 11 | |
| 12 | ```bash |
| 13 | PORT=$(npx -y @accesslint/chrome@latest ensure | node -e 'process.stdin.on("data",d=>process.stdout.write(""+JSON.parse(d).port))') |
| 14 | ``` |
| 15 | |
| 16 | **Stash mode** (default — uncommitted changes). Tell the user first: _"Running in diff mode — stashing your changes to capture a baseline, then restoring. Your working tree will be fully restored."_ If `git stash push` fails, warn and exit. |
| 17 | |
| 18 | ```bash |
| 19 | git stash push -u -m "accesslint-diff-baseline" |
| 20 | npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot |
| 21 | git stash pop && sleep 2 |
| 22 | npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json |
| 23 | ``` |
| 24 | |
| 25 | **Branch mode** (`--branch <name>`). Tell the user first: _"Diffing against `<name>` — checking out that branch to capture a baseline, then restoring. Your working tree will be fully restored."_ |
| 26 | |
| 27 | Branch switching triggers a rebuild but not a browser reload — the CLI opens a fresh tab each time so it always reads the current build. Use `--wait-for "<selector>"` to gate the audit until the rebuild is ready; without it, warn the user that a slow build may yield a stale baseline. |
| 28 | |
| 29 | Keep the branch value in the quoted `branch` variable below; never paste or evaluate a branch name as shell syntax. |
| 30 | |
| 31 | ```bash |
| 32 | git diff --quiet && git diff --cached --quiet || git stash push -u -m "accesslint-diff-branch" |
| 33 | branch="<branch>" |
| 34 | git check-ref-format --branch "$branch" >/dev/null |
| 35 | case "$branch" in -*) echo "Refusing option-like branch name: $branch" >&2; exit 1 ;; esac |
| 36 | git rev-parse --verify --quiet "$branch^{commit}" >/dev/null |
| 37 | git switch "$branch" |
| 38 | npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot [--wait-for "<selector>"] |
| 39 | git switch - && git stash pop 2>/dev/null |
| 40 | npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json [--wait-for "<selector>"] |
| 41 | ``` |
| 42 | |
| 43 | Pass `--selector`, `--include-aaa` to **both** runs. |
| 44 | |
| 45 | ## 2. Report |
| 46 | |
| 47 | ``` |
| 48 | Accessibility diff — http://localhost:3000/ vs main (94 rules, live DOM) |
| 49 | 2 new · 1 fixed · 4 pre-existing hidden |
| 50 | |
| 51 | New — Critical |
| 52 | - color-contrast — 2.1:1 (needs 4.5:1), #bbb on #fff |
| 53 | where: main > p.subtitle fix: darken to #767676 |
| 54 | Fixed |
| 55 | - img-alt — <img src="old.jpg"> (no longer present) |
| 56 | ``` |
| 57 | |
| 58 | Each new violation: **where** (selector verbatim + `file:line (symbol)` if `source` present — never fabricate), **evidence**, **fix** (mechanical change or `NEEDS HUMAN`). |
| 59 | |
| 60 | Don't edit. For fixes: apply mechanical ones then re-run `accesslint:diff` to verify; for bulk work hand off to `accesslint:audit`. |
| 61 | |
| 62 | ## 3. Tear down |
| 63 | |
| 64 | ```bash |
| 65 | npx -y @accesslint/chrome@latest stop --all # skip if ensure reported "managed":false |
| 66 | ``` |
| 67 | |
| 68 | ## Gotchas |
| 69 | |
| 70 | - `ensure` always determines the port — never hardcode 9222. |
| 71 | - CLI exit 2 = bad URL or page never loaded; check the dev server. |
| 72 | - Stash mode: `sleep 2` covers most HMR cases; if baseline looks identical to current, add `--wait-for "<selector>"`. |
| 73 | - Branch mode: no HMR — CLI opens a fresh tab each run. `--wait-for` is the rebuild gate. |
| 74 | - Heavy DOM changes between runs cause selector drift — re-run with `accesslint:scan` for the full picture. |
| 75 | |
| 76 | ## Limitations |
| 77 | - Use this skill only when the task clearly matches the scope described above. |
| 78 | - Do not treat the output as a substitute for environment-specific validation, testing, or expert review. |
| 79 | - Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing. |