All notable changes to the AccessLint Claude plugin are documented here.
- Ported the weakest-claim doctrine from the benchmark repair loop (
92b835e, labeler ruling by Cameron; released on main as 0.9.1 — this entry carries the same text into the restructured skill layout): a finding that stacks a deterministic fact on an interpretive call takes the lower grade. The machine-checkable half (e.g. no programmatic status in the a11y tree — a 1.3.1 fact) is ● evidence inside a ◐ finding; the interpretive conclusion (e.g. color as the sole carrier of meaning — 1.4.1) stays ◐, and citing the ● half does not upgrade the whole. Added toshared/methodology.md(with the widget status dots as the worked example),accessibility-inspect's grading rules, and its 1.4.1 checkpoint inreferences/checkpoints.md. All three 0.10.1 validation runs had asserted 1.4.1 ● by exactly this upgrade path.
The output-side half of the token diet. A pre-iteration-3 validation run (n=3, iteration-2 protocol) showed 0.10.0's behavioral diet working — tool uses down 28%, all calibration gates holding, zero fabrication — but total tokens flat: the freed budget was re-spent on report prose (per-SC ledger enumerations, "what passed" narration). This release caps the report.
- Ledger output compacted (
accessibility-inspect,accessibility-audit, canonized inshared/methodology.md): counts plus bare SC numbers only; undetermined/not-exercised SCs grouped by shared reason — one clause per group, never a line per SC. - Passes are no longer narrated: a pass is its SC number in the ledger, with at most one sentence for the whole passing set. Report words go to failures, flags, and handoffs; a fix stated on a finding isn't restated in the recommendations.
Token diet for the manual tier, driven by the iteration-2 calibration benchmark: the honesty and precision wins (● -only pass/fail, ◐ hedging, the ○ handoff format, grade-lower-when-unsure) are all output-side reporting rules, while ~85% of the skill's cost delta was behavioral — a checkpoint sweep with a full-page re-snapshot per interaction. This release keeps the reporting rules and removes the sweep.
accessibility-inspectis restructured from a checkpoint script into an SC ledger: every criterion in scope ends a run as verified, flagged, engine-owned, N/A (triggering feature absent), or not exercised — reported as undetermined, never silently dropped and never as a pass. The checkpoint list is now a denominator to cite, not a script to execute; the skill drives only what the page's features and the engine's gaps demand.- Evidence spend is capped by grade (
accessibility-inspect, canonized inshared/methodology.md): a ◐ finding gets one selector, one screenshot if the question is visual, an opinion, and what a person should confirm — then stops, because a ◐ is re-decided by a human regardless and more evidence never upgrades it. ○ handoffs get zero driving. Principle: calibrated uncertainty must be cheaper than false certainty. - Keyboard traversal is batched into one
evaluate_scriptwalk returning compact JSON per stop (tab order,activeElement, computed focus styles, bounding boxes — which settles target-size 2.5.8 for free, overlay occlusion for 2.4.11), replacing the per-stoppress_key/snapshot cycle. The walk is deterministic, so its results stay ●-citable; realpress_keyevents are reserved for confirming operability and traps at the walk's suspect widgets only. - Snapshots are selector-scoped: one full snapshot after the wait gate, then subtree reads of the changed widget only — no full-page re-snapshot per state change.
- Dedup moved before driving:
accessibility-auditnow runsaccessibility-scanfirst and passes its results (or engine-owned SC list) into eachaccessibility-inspectrun, so inspect never re-checks a criterion the engine owns. Conformance aggregation counts not-exercised SCs as undetermined. - Detailed per-checkpoint procedures moved from the
accessibility-inspectskill body toreferences/checkpoints.md, loaded on demand or for a--deeppass (new flag: drive every triggered area through its full procedure).
shared/methodology.md— "The evidence budget" section: grade-bounded evidence caps and the denominator-not-script coverage rule.accessibility-inspectreport format — a ledger header closing every SC in the denominator into one bucket, with one-line reasons for not-exercised criteria.
- Doctrine: a finding that stacks a deterministic fact on an interpretive call takes the lower evidence grade. The machine-checkable half (e.g. no programmatic status in the accessibility tree — a 1.3.1 fact) may be stated ● verified; the conclusion drawn from it (e.g. that color is the sole carrier of the meaning — 1.4.1) stays ◐ flagged, and citing the deterministic half does not upgrade the whole. Added to
shared/methodology.md(with status dots as the worked example) and toaccessibility-inspect's grading rules and 1.4.1 checkpoint. This is the repair-loop fix from the iteration-2 calibration benchmark: with it, all three re-run audit arms held the color-only finding at ◐ (previously ● in 3/3) and the benchmark gate passed — seebenchmark/results/iteration-2/REPORT.md§8.
plugins/accesslint/.claude-plugin/plugin.json— the plugin had no manifest, so Claude Code fell back to deriving the plugin name from the install directory. Skills were namespaced by the version string (0.8.0:scan) instead of the brand (accesslint:scan), and no documented invocation worked as written. The manifest pinsname,displayName,version,license, and discoverykeywords.keywords,category,license,homepage, andrepositoryon the marketplace entry, for marketplace and directory search.accessibility-inspectskill — the semi-automated manual tier. Drives a live page through a browser MCP to check what the rule engine can't decide (keyboard and focus order, accessible names/roles/states, reflow and zoom, reduced motion, form errors, target size), grading each finding by evidence basis (verified / confirm-with-a-human / human-required) and severity. Locates and assesses; does not edit. Requires a browser MCP (chrome-devtools,playwright, orpuppeteer).accessibility-auditskill — the WCAG-EM conformance umbrella. Defines scope, selects a representative sample, runsaccessibility-scanandaccessibility-inspecton each sampled page (one subagent per page), and reports per-criterion conformance as pass, fail, or undetermined (needs a human).shared/methodology.md— a single shared canon for the methodology: the pipeline, WCAG-EM, the severity and evidence-basis grading, the no-proxy-for-human-experience boundary, conformance, and grounding. Each skill states its always-apply rules inline and references the canon for depth.
- Breaking: every skill is renamed with an
accessibility-prefix —accessibility-scan,accessibility-inspect,accessibility-audit,accessibility-fix,accessibility-diff. Skill directories index and search on the name, not the description, so the previous bare verbs (scan,fix,diff) matched no accessibility query and collided with unrelated skills of the same name. Update invocations toaccesslint:accessibility-<verb>. - Breaking: the old
auditskill is reduced to remediation and renamedaccessibility-fix(baseline → edit → verify). The audit name now belongs toaccessibility-audit, the WCAG-EM conformance umbrella and the closest successor to the old report mode. Useaccessibility-fixto remediate;accessibility-auditfinds issues but assesses a sampled site rather than editing. strict: falseremoved from the marketplace plugin entry. It was how the entry carried the whole definition while the plugin had no manifest; withplugin.jsonnow present,strict: falsewould treat the two as conflicting definitions and fail the plugin load, so the entry returns to the default (plugin.jsonis the authority).- Skill descriptions rewritten to lead with the scope discriminator (one page vs. whole site vs. remediation vs. regression), so the five skills route cleanly, and to carry the terms users actually search — accessibility, a11y, WCAG 2.2, Section 508, screen reader, keyboard.
- All skills rewritten in plain, declarative prose.
- README rewritten around the five-skill pipeline (scan → inspect → audit → fix → diff) and the shared methodology.
allowed-toolsinaccessibility-fix,accessibility-audit, andaccessibility-inspectnamed the bundled MCP tools by their bare server key (mcp__accesslint__audit_live). Plugin-provided MCP tools are scoped asmcp__plugin_<plugin>_<server>__<tool>, so the declared names never matched the tools the skills actually call. They now readmcp__plugin_accesslint_accesslint__*.
- The old
auditskill's report mode (superseded byaccessibility-audit). - Stale MCP-tool references in the README (
audit_diff,audit_browser_script/audit_browser_collect), dropped in@accesslint/mcpv0.9.0. The documented tools areaudit_live,audit_html,list_rules,explain_rule.
auditskill aligned with the simplified@accesslint/mcp(v0.9.0), which droppedaudit_diff, the browser-MCP composition tools (audit_browser_script/audit_browser_collect), and theaudit-live-pageprompt. The skill no longer references them: live-DOM auditing isaudit_live(auto-launches Chrome via@accesslint/chrome); fix-mode verification re-audits and compares; rigorous diffing is handed to thediffskill. For authenticated sessions, start a headed debuggable Chrome (npx @accesslint/chrome ensure --headed) and passporttoaudit_live.
scananddiffskills now delegate target resolution to@accesslint/cli≥ 0.9.0: pass a URL, a named target (dev,storybook, …), or nothing to audit thedefaulttarget fromaccesslint.config.json. Runnpx @accesslint/cli initto scaffold targets.
scananddiffskills now invoke the CLI asaccesslint scan <url>, matching@accesslint/cliv0.8.0 — which moves the audit under ascansubcommand (breaking) and addsaccesslint initto scaffoldaccesslint.config.jsonwith framework-aware named targets. Requires@accesslint/cli≥ 0.8.0.
audit_livenow auto-launches Chrome minimized when no debug session is reachable — no--remote-debugging-portsetup required. The fallback chain is: attach to existing CDP session → auto-launch Chrome → chrome-devtools-mcp (for existing authenticated sessions).- Skill prerequisite check removed; the skill no longer stops to ask users to start Chrome manually.
- Fixed WCAG coverage claims in README to match the actual rule set: "non-text contrast" corrected to "text spacing" (WCAG 1.4.12); "error identification" / "consistent behavior" corrected to "language attributes" / "accessible authentication".
- Collapsed the reviewer agent and
audit-and-fixskill into a singleaccesslint:auditskill with two intent-driven modes:- Report mode — sweeps a scope (directory, files, or URL), detects patterns across components, produces a prioritized written report. No edits.
- Fix mode — runs the audit → edit → verify loop, applying mechanical fixes verbatim and leaving
TODOs for visual/contextual issues.
audit_fileandaudit_urlMCP tools removed upstream;audit_htmlandaudit_liveremain as the primary audit paths alongsideaudit_browser_script+audit_browser_collect.- For large sweeps where context cost matters, the skill can now be invoked via Claude Code's built-in
Tasktool for context isolation.
- Pairs with
@accesslint/mcp@0.6.0: violationSource:lines now always resolve to real source files rather than bundled chunk URLs. Source map schema simplified —strategy/confidencereplaced byownerDepth.
- Skill now prefers
Source:lines over selector grep when mapping live-DOM violations back to source components — more reliable on React dev builds where fiber data is available. - Refreshed marketplace description.
- Tracks
@accesslint/mcp@latestinstead of a pinned version so users always get the current engine without a plugin bump.
- Pairs with
@accesslint/mcp@0.4.1: audit IIFE is now fetched from CDN at audit time rather than bundled in the MCP server, keeping the MCP package size small. - Tightened
audit-and-fixskill preamble; added note aboutchrome-devtools-mcpas a companion for live-DOM audits.
- Slimmed plugin to an
audit-and-fixskill and a multi-file reviewer agent, both backed by@accesslint/mcpfrom npm. - Removed the bundled MCP server; MCP is now sourced from
@accesslint/mcp@latestvia npx. - Updated WCAG references from 2.1 to 2.2 throughout.
- Initial release: contrast checker skill, use-of-color skill, link-purpose skill, refactor skill, and a multi-file accessibility reviewer agent.
- Bundled MCP server with color contrast check.