docs: preuves d accessibilite regenerees et perimetre d audit elargi #170

Merged
Corentin merged 1 commit from docs/preuves-a11y-regenerees into dev 2026-09-26 16:32:20 +02:00
Owner

Le dossier de preuves d'accessibilite montrait un back-office qui n'existe plus. Tous les artefacts sont regeneres contre dev courant, et deux angles morts de mesure sont corriges.

Ce que l'audit mesure de plus qu'avant

tests/e2e/a11y.spec.js visitait /admin/products/new et mesurait apres avoir seulement attendu le bouton « Ajouter un ingredient ». Le constructeur de recette demarre vide : le moteur ne lisait aucune ligne rendue. La meme question, posee a tout le back-office, a montre que la caisse tactile comptoir et drive, son composeur de menu et le constructeur de slots du formulaire menu n'etaient pas audites du tout.

Indicateur Avant Apres
Ecrans mesures 11 18
dont back-office 5 12
Ratios de contraste mesures 415 858
Combinaisons couleur/fond distinctes 65 83
Noeuds non calculables 11 41 (28 pastilles de tuile de caisse, 2 boutons de quantite)
Violations WCAG AA 0 0
Pages borne sans defilement lateral 5 annoncees, 4 distinctes 5, controle d'adresse a l'appui
Largeurs borne 360 / 390 / 768 + 1366
Pages back-office mesurees 15 16
Captures versionnees 12 52
Tests JS / PHP 209 / 755 au dossier 356 / 1 677 (4 855 assertions)

Le second angle mort

tests/e2e/responsive.spec.js chargeait /payment.html sans panier. L'ecran de paiement se renvoie alors aux categories : les captures borne-paiement-*.png etaient identiques octet pour octet aux borne-categories-*.png, et le test passait. L'etat client est desormais seme, et l'adresse reellement atteinte est verifiee apres chaque navigation.

L'ecart d'accessibilite trouve, et corrige

Aucune violation axe sur le nouveau code. Mais lire le balisage nouvellement audite en a revele un que le jeu de regles WCAG AA ne couvre pas : chaque bloc de slot du formulaire menu etait un fieldset sans legend, donc un groupe de champs sans nom accessible, alors que le constructeur de recette voisin, lui, pose bien une legende. menu-form.js en pose une desormais, gardee par un test qui verifie aussi qu'elle est le premier enfant du fieldset. Remesure : 15,96:1, conforme.

Reproductibilite

Trois commandes, chacune montant sa propre pile jetable, sous l'identifiant de l'appelant, node_modules hors du depot :

  • tests/e2e/run-a11y.sh (existant) — l'audit mesure
  • tests/e2e/run-w3c.sh (nouveau) — les deux niveaux W3C + la capture du DOM rendu, jusqu'ici faite a la main
  • tests/e2e/run-captures.sh (nouveau) — les 52 captures adaptatives

Deux executions successives de run-a11y.sh rendent le meme resultat au chiffre pres ; seul l'horodatage des artefacts change.

Ce qui reste ouvert

  • Pas d'audit avec un lecteur d'ecran reel (reserve deja ouverte, inchangee).
  • Les tailles de cible relevent de WCAG 2.2, hors des quatre familles de regles activees : le « 0 violation » ne les couvre pas, et les notes le disent.
  • 12 vues du back-office sur 34 sont auditees ; l'ecran cuisine, les formulaires d'edition, les roles, les utilisateurs et les statistiques restent hors mesure.
Le dossier de preuves d'accessibilite montrait un back-office qui n'existe plus. Tous les artefacts sont regeneres contre `dev` courant, et deux angles morts de mesure sont corriges. ## Ce que l'audit mesure de plus qu'avant `tests/e2e/a11y.spec.js` visitait `/admin/products/new` et mesurait apres avoir seulement attendu le bouton « Ajouter un ingredient ». Le constructeur de recette demarre vide : le moteur ne lisait aucune ligne rendue. La meme question, posee a tout le back-office, a montre que la caisse tactile comptoir et drive, son composeur de menu et le constructeur de slots du formulaire menu n'etaient **pas audites du tout**. | Indicateur | Avant | Apres | |---|---|---| | Ecrans mesures | 11 | **18** | | dont back-office | 5 | **12** | | Ratios de contraste mesures | 415 | **858** | | Combinaisons couleur/fond distinctes | 65 | **83** | | Noeuds non calculables | 11 | **41** (28 pastilles de tuile de caisse, 2 boutons de quantite) | | Violations WCAG AA | 0 | **0** | | Pages borne sans defilement lateral | 5 annoncees, 4 distinctes | **5**, controle d'adresse a l'appui | | Largeurs borne | 360 / 390 / 768 | + **1366** | | Pages back-office mesurees | 15 | **16** | | Captures versionnees | 12 | **52** | | Tests JS / PHP | 209 / 755 au dossier | **356** / **1 677** (4 855 assertions) | ## Le second angle mort `tests/e2e/responsive.spec.js` chargeait `/payment.html` sans panier. L'ecran de paiement se renvoie alors aux categories : les captures `borne-paiement-*.png` etaient **identiques octet pour octet** aux `borne-categories-*.png`, et le test passait. L'etat client est desormais seme, et l'adresse reellement atteinte est verifiee apres chaque navigation. ## L'ecart d'accessibilite trouve, et corrige Aucune violation `axe` sur le nouveau code. Mais lire le balisage nouvellement audite en a revele un que le jeu de regles WCAG AA ne couvre pas : chaque bloc de slot du formulaire menu etait un `fieldset` **sans `legend`**, donc un groupe de champs sans nom accessible, alors que le constructeur de recette voisin, lui, pose bien une legende. `menu-form.js` en pose une desormais, gardee par un test qui verifie aussi qu'elle est le premier enfant du `fieldset`. Remesure : **15,96:1**, conforme. ## Reproductibilite Trois commandes, chacune montant sa propre pile jetable, sous l'identifiant de l'appelant, `node_modules` hors du depot : - `tests/e2e/run-a11y.sh` (existant) — l'audit mesure - `tests/e2e/run-w3c.sh` (nouveau) — les deux niveaux W3C + la capture du DOM rendu, jusqu'ici faite a la main - `tests/e2e/run-captures.sh` (nouveau) — les 52 captures adaptatives Deux executions successives de `run-a11y.sh` rendent le meme resultat au chiffre pres ; seul l'horodatage des artefacts change. ## Ce qui reste ouvert - Pas d'audit avec un lecteur d'ecran reel (reserve deja ouverte, inchangee). - Les **tailles de cible** relevent de WCAG 2.2, hors des quatre familles de regles activees : le « 0 violation » ne les couvre pas, et les notes le disent. - 12 vues du back-office sur 34 sont auditees ; l'ecran cuisine, les formulaires d'edition, les roles, les utilisateurs et les statistiques restent hors mesure.
docs: regenerate accessibility evidence and widen the measured perimeter
All checks were successful
CI / secret-scan (pull_request) Successful in 22s
CI / php-lint (pull_request) Successful in 26s
CI / static-tests (pull_request) Successful in 2m39s
CI / js-tests (pull_request) Successful in 46s
4e2e490975
The soutenance evidence folder showed a back-office that no longer exists:
the W3C rendered-DOM captures dated from 2026-07-31, the responsive captures
from 2026-09-23, and the axe report from before the recipe/CSV lot. Every
artefact is regenerated against current dev.

Two measurement blind spots found and closed:

- a11y.spec.js measured /admin/products/new before the browser had built any
  recipe line, so the recipe builder was counted as audited without ever being
  read. The same question applied to the rest of the back-office revealed that
  the touch till (counter and drive), its menu composer and the menu slot
  builder were not audited at all. The audit now covers 18 screens instead of
  11 (858 contrast measurements instead of 415), all in a rendered state.
- responsive.spec.js loaded /payment.html with an empty cart, which redirects
  to the categories screen: the payment captures were byte-identical to the
  categories ones. Client state is now seeded and the reached address is
  asserted after each navigation.

One accessibility gap found by reading the newly audited markup, invisible to
the rule set: each menu slot block was a fieldset without a legend, so a group
of fields with no accessible name. menu-form.js now renders one, guarded by a
test. Remeasured conforme at 15.96:1; 0 WCAG AA violation on all 18 screens.

Evidence regeneration is now reproducible in three commands: run-a11y.sh
(existing), plus run-w3c.sh and run-captures.sh, both modelled on it - a
disposable stack, the caller's uid, node_modules kept out of the repo.
The W3C rendered-DOM capture, until now done by hand, lives in
w3c-capture.spec.js and only writes when W3C_OUT is set.

The nine notes carry the measured figures with before/after per indicator.
Corentin scheduled this pull request to auto merge when all checks succeed 2026-09-26 16:28:08 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AcadeNice/corentin_wakdo!170
No description provided.