Differentiator 02

An expert accessibility audit of your entire design system. In an afternoon. With receipts.

Every finding cites the spec. Every finding quotes your code. Every finding shows its work.

The deliverable

A verdict, not a score.

No gameable 87/100. The report headline is a hard rule, and advisory items never gate. Exportable as Markdown or PDF, tied to the exact commit tested.

SHIP WITH GAPS — any open blocker → DO NOT SHIP · else any serious → SHIP WITH GAPS · else GOOD. Conformance evidence, not a conformance claim; advisory items never gate.

Summary

test-evidence informed

2

findings

0

blocker

1

serious

1

moderate

0

minor

0

deterministic (0 tokens)

Coverage: 4 components · 15 stories · component source only · lenses: Structure & text alternatives, Keyboard, focus & dynamic behavior (2 of 4)

Partial audit — findings and the ship-status verdict reflect only the coverage above, not the whole project.

Anatomy of a finding

Findings a compliance officer can file.

Severity
Assigned by a published rubric, not by mood — the same defect gets the same severity every time.
WCAG citation
The success criterion, linked to the public specification.
Quoted evidence
Your offending code, verbatim, at file-and-line.
Impact
Which users, which assistive technology, and what happens to them.
The fix
A concrete change, not a restatement of the rule.
How to verify
The exact re-run or interaction that proves the fix landed.
Audit trail
The files opened and searches run to reach the conclusion.
seriousWCAG 4.1.3 (A)test-corroboratedcomponent

Alert ./src/Alert.stories.jsx

The live-region container and its message text are mounted into the DOM in a single operation, rather than the container persisting and its text being swapped afterward — the documented-unreliable pattern for role="status".

dynamic-context · interaction · src/Alert.jsx:6–14

quoted verbatim

<div className={`demo-alert ${tone}`} role={assertive ? "alert" : "status"}>
  <div>
    {title && <span className="title">{title}</span>}
    {children}
  </div>
</div>

approved test evidence

components-alert--success approved computed tree: "- status: Saved Your application was submitted." — this reflects the tree at initial render, not confirmation that a dynamically inserted status node is reliably announced.

Who it harms
Screen-reader users who trigger the action may never hear the confirmation. NVDA and VoiceOver only reliably announce changes inside a live region that already existed when the change occurred.
The fix
Render the live-region container on mount with an empty text node, and update only its text content when the message changes.
How to verify
Re-run the interaction pass for components-alert--success and confirm the transcript contains the confirmation text after activation, not only at initial read.
audit trail (5 steps)
  • · opened src/Alert.jsx
  • · opened src/Alert.stories.jsx
  • · followed import ./tokens.css
  • · searched corpus: "role=status live region insertion timing"
  • · cited WCAG 2.2 · 4.1.3 Status Messages (Level A)

“Coverli produces conformance evidence, not a conformance claim — the legal determination is always human. That's not a disclaimer; it's why auditors trust our reports.”