Manual accessibility checklist
This is the human sign-off arm of the accessibility release gate (AR-19, NFR-1). Its automated counterpart — the axe-core per-route scan in end2end/tests/a11y.spec.ts — is a required, blocking CI gate, but axe cannot see behavioral a11y: where focus goes after a dialog closes, whether a live region announces at the right urgency, whether motion is actually suppressed. Those are verified here, by a person, before a release.
Binding intent: the perf budget and the a11y budget are the same budget (architecture, NFR-1). AA conformance is not the line item quietly cut to make the WASM/FCP budget. A release does not ship with an un-signed-off item below.
Status (v1 / Epic 0)
There are no real UI components or routes yet — the app is the Leptos placeholder (title "Welcome to Leptos", a single "Click Me" counter button on /). Every behavioral item below is therefore N/A until Epic 2 introduces the surfaces it applies to. The checklist exists now so the gate is in place from day one and grows with the surfaces; the four seed items are the canonical un-automatable behaviors named in the architecture (L544).
Checklist
Each item: verify with keyboard + a screen reader (e.g. NVDA/Orca/VoiceOver) on the affected surface, then tick and date it.
-
Modal focus restoration — opening a modal/dialog moves focus into it and traps focus while open; on close, focus returns to the exact element that triggered it (not the document body / top of page). Status: N/A until Epic 2 (no modals yet).
-
Virtual-list set semantics under SSE — as the live activity / last-heard virtual list recycles rows under streaming updates,
aria-setsizeandaria-posinsetstay truthful (reflect the real item count/position, not just the rendered window) so assistive tech announces "item 3 of 120", not "3 of 12". Status: N/A until Epic 2 (no virtual list / SSE surface yet). -
aria-livepoliteness split — routine updates (new last-heard entry) usearia-live="polite"; only genuinely urgent state (e.g. connection lost, TX inhibited) usesassertive. Verify announcements are neither spammy nor missed. Status: N/A until Epic 2 (no live regions yet). -
prefers-reduced-motion— with the OS "reduce motion" setting on, non- essential animation/transition is suppressed (or reduced to a non-vestibular cross- fade); no parallax/auto-scroll/large-motion effects play. Status: N/A until Epic 2 (no animations yet).