Help us improve
Share bugs, ideas, or general feedback.
From leyline
Use whenever you are about to claim a user-facing surface is complete - before committing, before marking the task done, before any success claim. Requires running an accessibility check fresh in the current message and reading its output before any completion claim. An overlay during stage 5 alongside verification-before-completion.
npx claudepluginhub forsonny/leyline --plugin leylineHow this skill is triggered — by the user, by Claude, or both
Slash command
/leyline:accessibility-verificationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> I'm using the accessibility-verification skill. I will not claim this surface is complete until I have run the accessibility verification procedure fresh in this message and pasted its output showing zero critical violations.
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
I'm using the accessibility-verification skill. I will not claim this surface is complete until I have run the accessibility verification procedure fresh in this message and pasted its output showing zero critical violations.
NO COMPLETION CLAIMS ON A USER-FACING SURFACE WITHOUT FRESH ACCESSIBILITY EVIDENCE
Violating the letter of the rules is violating the spirit of the rules.
Accessibility defects are rare in acute incidents and overwhelming in aggregate. A single inaccessible modal is not the crisis; the hundredth one is, because by then accessibility has become something the team assumes the framework handles. This iron law puts evidence at every completion claim so the assumption cannot form silently.
The evidence is concrete. Not "I followed best practices." Not "the framework handles this." A pasted tool output, a keyboard-walk transcript, a screen-reader narration. If you cannot paste it, you did not run it.
Matches verification-before-completion: "fresh" means the accessibility check was run AFTER the last change to the surface AND in the current message. A check from three messages ago is not evidence for the current code. Session memory is not evidence. An earlier run is not evidence.
The iron law does not require any specific tool. It requires that some accessibility verification ran in this message and produced readable output. Any of the following satisfies the law:
Automated tools are faster and catch more. Manual transcripts are slower but valid. See ../../dev/reference/recommended-optional-tools.md for optional tools.
"Looks fine on my machine" is NOT evidence. "I followed best practices" is NOT evidence. "The framework handles accessibility" is NOT evidence.
digraph a11y_gate {
Start [shape=doublecircle, label="About to claim surface complete"];
Identify [shape=box, label="1. IDENTIFY the appropriate check"];
Run [shape=box, label="2. RUN it fresh in this message"];
Read [shape=box, label="3. READ output; count violations"];
Verify [shape=diamond, label="4. Zero critical violations; lower-severity triaged?"];
Fix [shape=box, label="STOP - surface is not complete; fix first"];
Claim [shape=box, label="5. ONLY THEN claim complete; paste evidence"];
Done [shape=doublecircle, label="Claim made with evidence"];
Start -> Identify -> Run -> Read -> Verify;
Verify -> Fix [label="no"];
Fix -> Run;
Verify -> Claim [label="yes"];
Claim -> Done;
}
Pick the appropriate check for the surface type:
If the task touches more than one surface type, run the check appropriate to each.
Run the check in the current message. Now, with the code at its current state. Not from memory, not from a prior run.
Read the full output:
The bar is the WCAG level declared in the UX spec's "Accessibility targets" section (per design-brainstorming and ../../dev/reference/surface-types.md). If the UX spec does not declare a level, the default is WCAG 2.2 AA. Do not ship below the declared level without the human partner's explicit authorization recorded verbatim in the review log.
The surface is accessible for the purpose of the iron law when:
critical; Lighthouse: audit failed on a11y category; pa11y: ERROR). For manual walks, "critical" means any of: focus trap, unlabeled interactive element, inaccessible state (empty / error / loading not reachable or not announced), color-only information.If any of these fail, the surface is not complete. STOP. Fix the surface and re-run.
Paste the evidence alongside the claim. "Surface complete" alone is not a claim; "surface complete (axe-core: 0 violations, 2 warnings; keyboard walk: 5 stops, tab order matches visual order)" is.
Extends the verification-before-completion table specifically for surfaces.
| Claim | Requires | Not sufficient |
|---|---|---|
| UX complete | Every state in the state matrix implemented AND walked through in this message | Happy-path screenshot |
| Accessible | Fresh a11y scan with 0 critical violations, OR manual keyboard + screen-reader walk transcript in this message | "I followed accessibility practices" |
| Design matches spec | Fresh side-by-side walk (artifact vs implementation) in this message - see design-driven-development | "It looks right" |
| Empty / loading / error states | Each state triggered and observed in this message, with text matching the UX spec's voice examples | "We have the components for it" |
| Flow works | Full user journey walked end-to-end in this message, including the failure path | Individual screens rendered |
| Permission-denied state | Triggered explicitly (revoke permission, retry) in this message | "We handle the case" |
| Offline state | Triggered explicitly (disable network, retry) in this message | "We have offline handling" |
For every surface-touching task, before claiming complete:
| Thought | Reality |
|---|---|
| "I know this component is accessible" | Then running the check takes a minute. Run it. |
| "The scan found 2 critical violations but they are stylistic" | Critical is critical. Fix or escalate. |
| "My machine's screen reader is off; I'll skip the walk" | Enable it or describe the fallback manual walk. Do not skip. |
| "The artifact didn't specify a11y, I'll follow defaults" | The iron law's default is WCAG 2.2 AA when the UX spec is silent. Framework defaults rarely meet AA. Run the check. |
| "I'll add a11y in a polish PR" | Accessibility is how it is built, not a polish pass. |
| "Zero violations; claim complete" | Pastes the output before claiming. Evidence alongside claim. |
Do not say:
This is an overlay. After the gate completes and the claim is made with evidence, control returns to the caller (typically subagent-driven-development or executing-plans). No explicit successor.
../../dev/principles/iron-laws.md - catalogues this iron law../../dev/principles/experience-discipline.md - the 6b overlay rationale../../dev/stages/06-discipline.md - canonical overlay definition../../dev/reference/recommended-optional-tools.md - optional a11y tooling (axe-core, Lighthouse, pa11y, etc.)../design-driven-development/SKILL.md - the sibling iron law that runs for the same surface../verification-before-completion/SKILL.md - the general-purpose fresh-evidence gate this one specializes