From 91bab4e73e0b3a7d34ff26772f9fd9409c50167b Mon Sep 17 00:00:00 2001 From: Logan Date: Thu, 13 Aug 2026 02:32:33 -0400 Subject: [PATCH] docs: record the a11y tail, and four names written where nothing reads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 3 shipped in six landings and a11y.md is closed, which closes all four audits from 2026-08-11. The pass's one lesson is that an accessible name is computed on the element carrying the role, and every tier we check with looks somewhere else: the audit read the source and credited a name that was never computed, an AX sweep read the tree and reported a placeholder-only box as clean, and a component test asserted the attribute and pinned the bug it existed to prevent. Six of the audit's claims turned out to be wrong or smaller than written, and one of the plan's own findings was false — the page header's sort control is named on all nine views. All of them are written down, which is where a third of the value of the last two plans came from. --- .pi/skills/yellowjacket-dev/SKILL.md | 22 +++- .planning/NOTES.md | 101 +++++++++++++++ .planning/plans/active/008-the-last-audit.md | 126 +++++++++++++++++-- CLAUDE.md | 72 ++++++++++- 4 files changed, 303 insertions(+), 18 deletions(-) diff --git a/.pi/skills/yellowjacket-dev/SKILL.md b/.pi/skills/yellowjacket-dev/SKILL.md index ed30b03..b0ad847 100644 --- a/.pi/skills/yellowjacket-dev/SKILL.md +++ b/.pi/skills/yellowjacket-dev/SKILL.md @@ -18,7 +18,7 @@ here has disappeared. ## Read this part before you fail -Fourteen things cost a cycle each the first time. They are here, not in a +Fifteen things cost a cycle each the first time. They are here, not in a reference, because you need them *before* the failure, not after. - **Time out every binding call.** A bound Go method called with wrong @@ -54,6 +54,16 @@ reference, because you need them *before* the failure, not after. `label` to `aria-labelledby` — so a new dialog that forgets to call the helper from `updated()` is invisible to `getByRole('dialog', {name})`. +- **A name is computed on the element carrying the *role*, and Web + Awesome puts the role in its own shadow root.** `aria-label` on a + `` or a `` host never reaches the tree. Use the + component's own `label` (plus `styles/wa-slider-label.css.ts`, since + a slider's is visible) or `utils/name-dialog.ts`. And in the light + DOM, a `