fix(a11y): geef 23 knoppen een naam, en laat de poort de rest zien (#586) #687

Merged
brenno merged 1 commit from fix/knopnamen-586 into main 2026-07-22 20:47:32 +00:00
Owner

Sluit #586. Alle drie de punten uit je voorstel.

(1) De 23 knoppen. Tooltip(message: …, child: IconButton(…)) leest als een knop met een naam en is het niet — een Tooltip eromheen zet géén semantieklabel op de knop. Alle 23 omgezet naar IconButton(tooltip: …); de tekst bestond al en liep al door d(), dus er is geen woord bij verzonnen. Zeven in de hoofdlayout, vier in het voorbeeldpaneel, vier in de presentatie-overlays (waaronder de uitknop), drie in de tekenbalk, twee in de editorbalk, de rest verspreid.

Je telde er 24; ik vind er 23 met een scan die de haakjes echt matcht. Het verschil is waarschijnlijk een Tooltip die níét direct om een IconButton zit.

(2) De bronscan. Staat in test/accessibility_labels_test.dart, loopt over heel lib/, en verbiedt precies dat patroon. Goedkoper dan 67 widgettests, en hij ziet juist de plekken die niemand ooit pompt. Eerst rood laten worden met een geplante overtreding — een scan die stilzwijgend niets doet is erger dan geen scan, en dat is hier één keer bijna gebeurd bij de semgrep-regels.

(3) De claim. docs/ACCESSIBILITY.md zei "walks the interface" en "found three real defects". Beide te royaal: hij pompt zes van de 26 editors, geen van de 41 dialogen, niets van de presentatiemodus — en achter die zes stonden er nog 23. Er staat nu wat hij wél doet, in twee bullets, met de correctie gedateerd erbij. Wat een claim waardevol maakt is dat je weet waar hij ophoudt.

Poort

make check groen (niet door tail gepijpt). Geen nieuwe zichtbare tekst (de tooltips bestonden al), geen afhankelijkheid erbij.

Sluit #586. Alle drie de punten uit je voorstel. **(1) De 23 knoppen.** `Tooltip(message: …, child: IconButton(…))` leest als een knop met een naam en is het niet — een Tooltip eromheen zet géén semantieklabel op de knop. Alle 23 omgezet naar `IconButton(tooltip: …)`; de tekst bestond al en liep al door `d()`, dus er is geen woord bij verzonnen. Zeven in de hoofdlayout, vier in het voorbeeldpaneel, vier in de presentatie-overlays (waaronder de uitknop), drie in de tekenbalk, twee in de editorbalk, de rest verspreid. Je telde er 24; ik vind er 23 met een scan die de haakjes echt matcht. Het verschil is waarschijnlijk een `Tooltip` die níét direct om een `IconButton` zit. **(2) De bronscan.** Staat in `test/accessibility_labels_test.dart`, loopt over heel `lib/`, en verbiedt precies dat patroon. Goedkoper dan 67 widgettests, en hij ziet juist de plekken die niemand ooit pompt. Eerst rood laten worden met een geplante overtreding — een scan die stilzwijgend niets doet is erger dan geen scan, en dat is hier één keer bijna gebeurd bij de semgrep-regels. **(3) De claim.** `docs/ACCESSIBILITY.md` zei "walks the interface" en "found three real defects". Beide te royaal: hij pompt zes van de 26 editors, geen van de 41 dialogen, niets van de presentatiemodus — en achter die zes stonden er nog 23. Er staat nu wat hij wél doet, in twee bullets, met de correctie gedateerd erbij. Wat een claim waardevol maakt is dat je weet waar hij ophoudt. ## Poort `make check` groen (niet door `tail` gepijpt). Geen nieuwe zichtbare tekst (de tooltips bestonden al), geen afhankelijkheid erbij.
fix(a11y): geef 23 knoppen een naam, en laat de poort de rest zien (#586)
Some checks failed
CI / Web hardening (push) Failing after 24s
CI / Gate (Linux) · Format · Analyze · Coverage (push) Failing after 28s
CI / Docs links (push) Failing after 29s
CI / Gate (Linux) · Format · Analyze · Coverage (pull_request) Failing after 24s
CI / Supply-chain (Trivy · advisory) (push) Failing after 29s
CI / Web hardening (pull_request) Failing after 27s
CI / Docs links (pull_request) Failing after 27s
CI / Supply-chain (Trivy · advisory) (pull_request) Failing after 26s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Test (macos-latest) (pull_request) Has been cancelled
CI / Test (windows-latest) (pull_request) Has been cancelled
984bc9223f
`Tooltip(message: …, child: IconButton(…))` leest als een knop met een
naam en is het niet: een Tooltip eromheen zet géén semantieklabel op de
knop, alleen `IconButton(tooltip:)` doet dat. Voor een schermlezer heette
de uitknop van een presentatie dus "knop", en de hele tekenwerkbalk ook.

23 gevallen, allemaal van dat ene patroon, allemaal omgezet — de tekst
bestond al en liep al door `d()`, dus er is geen woord bij verzonnen.
Zeven in de hoofdlayout, vier in het voorbeeldpaneel, vier in de
presentatie-overlays, drie in de tekenbalk, twee in de editorbalk, en de
rest verspreid.

De poort zag ze niet, en dat is het eigenlijke probleem: hij pompt zes
van de 26 editors, geen van de 41 dialogen en niets van de
presentatiemodus. Alles pompen is duur. Maar dit was één mechanisch
herkenbaar patroon, dus er staat nu een bronscan naast die over heel
`lib/` loopt. Goedkoper dan 67 widgettests en hij ziet juist de plekken
die niemand ooit pompt.

Eerst rood laten worden met een geplante overtreding, zodat de scan niet
stilzwijgend niets doet.

En ACCESSIBILITY.md zegt nu hoevéél de test dekt in plaats van dát hij
bestaat. Er stond "walks the interface" en "found three real defects";
dat was te royaal, want er stonden er nog 23 achter. Wat een claim
waardevol maakt is dat je weet waar hij ophoudt.

Sluit #586.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 912d376f3b into main 2026-07-22 20:47:32 +00:00
Sign in to join this conversation.
No description provided.