git:20260707.168343c to git:20261015.fac8b7e

15 added, 47 removed. Audit A to A.

---
name: accesslint-diff
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."
risk: safe
source: "https://github.com/AccessLint/skills"
date_added: "2026-06-02"
---
- Default branch: !`git symbolic-ref refs/remotes/origin/HEAD --short 2>/dev/null | sed 's|.*/||' || echo main`
-
- Report only what changed. Locate; don't fix. If no URL in `$ARGUMENTS`, ask for one.
-
- Parse `$ARGUMENTS`: strip `--branch <name>` if present → branch mode. If `--branch` has no value, use the default branch above. Remainder is the URL.
-
## When to Use
- - 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.
- ## 1. Audit
-
- ```bash
- PORT=$(npx -y @accesslint/chrome@latest ensure | node -e 'process.stdin.on("data",d=>process.stdout.write(""+JSON.parse(d).port))')
- ```
-
- **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.
-
- ```bash
- git stash push -u -m "accesslint-diff-baseline"
- npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot
- git stash pop && sleep 2
- npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json
- ```
-
- **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."_
-
- 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.
+ - Compare a requested page's accessibility findings between verified base and candidate revisions.
+ - Report introduced, fixed and still-present findings without changing application source.
- Keep the branch value in the quoted `branch` variable below; never paste or evaluate a branch name as shell syntax.
+ ## 1. Establish isolated snapshots
- ```bash
- git diff --quiet && git diff --cached --quiet || git stash push -u -m "accesslint-diff-branch"
- branch="<branch>"
- git check-ref-format --branch "$branch" >/dev/null
- case "$branch" in -*) echo "Refusing option-like branch name: $branch" >&2; exit 1 ;; esac
- git rev-parse --verify --quiet "$branch^{commit}" >/dev/null
- git switch "$branch"
- npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --update-snapshot [--wait-for "<selector>"]
- git switch - && git stash pop 2>/dev/null
- npx -y @accesslint/cli@latest "<url>" --port "$PORT" --snapshot accesslint-diff --snapshot-dir /tmp --format json [--wait-for "<selector>"]
- ```
+ This package does not bundle the CLI or browser. Verify the current installed tool schema or a reviewed pinned package version first. Do not evaluate `$ARGUMENTS` or branch/URL text as shell syntax.
- Pass `--selector`, `--include-aaa` to **both** runs.
+ 1. Resolve the requested base and head to full commit SHAs; identify whether staged, unstaged or untracked content belongs to the candidate.
+ 2. Preserve the user's checkout. Prefer isolated worktrees or recoverable snapshots for base and candidate; do not switch their branch or pop an unrelated stash. A branch mode comparing only committed HEAD must disclose excluded local changes.
+ 3. Use each revision's reviewed lockfile and authorized build procedure. Serve base and candidate on separate local ports, wait for a deterministic ready selector and verify which revision each page actually serves. A fixed sleep is not a readiness check.
+ 4. Audit matching URLs, account state, viewport, selectors, engine version and rule configuration. Keep private snapshots in a fresh owner-only directory, not a predictable shared `/tmp` filename. Capture the baseline and candidate using the actual supported CLI flags; do not invent commands when integration is unavailable.
+ 5. Compare findings and inspect selector drift or removed content. Record inaccessible states and manual WCAG checks separately. Never promise full restoration without verifying file status and content.
## 2. Report
```
Accessibility diff — http://localhost:3000/ vs main (94 rules, live DOM)
2 new · 1 fixed · 4 pre-existing hidden
New — Critical
- color-contrast — 2.1:1 (needs 4.5:1), #bbb on #fff
where: main > p.subtitle fix: darken to #767676
Fixed
- img-alt — <img src="old.jpg"> (no longer present)
```
Each new violation: **where** (selector verbatim + `file:line (symbol)` if `source` present — never fabricate), **evidence**, **fix** (mechanical change or `NEEDS HUMAN`).
- Don't edit. For fixes: apply mechanical ones then re-run `accesslint:diff` to verify; for bulk work hand off to `accesslint:audit`.
+ Don't edit. For an explicitly authorized fix request, use the available `accesslint-audit` procedure and verify with the same controlled baseline. This report-only skill does not authorize a separate agent handoff.
## 3. Tear down
- ```bash
- npx -y @accesslint/chrome@latest stop --all # skip if ensure reported "managed":false
- ```
+ Close only browser processes, servers and snapshots created for this run. Preserve pre-existing sessions and recoverable work. Remove an isolated worktree only after needed evidence has been saved; never use a global browser stop command for cleanup.
## Gotchas
- - `ensure` always determines the port — never hardcode 9222.
- - CLI exit 2 = bad URL or page never loaded; check the dev server.
- - Stash mode: `sleep 2` covers most HMR cases; if baseline looks identical to current, add `--wait-for "<selector>"`.
- - Branch mode: no HMR — CLI opens a fresh tab each run. `--wait-for` is the rebuild gate.
- - Heavy DOM changes between runs cause selector drift — re-run with `accesslint:scan` for the full picture.
+ - Diff output is limited to exercised pages/states and the selected automated rules; it is not a WCAG certification.
+ - Removed elements can disappear from an audit without being an accessible replacement. Inspect the user journey.
+ - Heavy DOM changes can invalidate selector matching; verify corresponding elements or run full audits of both snapshots.
+ - Report illustrative sample counts as examples, not measurements.
## Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.