feat(a11y): audit mesure, contrastes corriges et animation JavaScript (borne vanilla) #141

Merged
Corentin merged 2 commits from feat/bloc1-librairie-et-audit into dev 2026-09-22 16:35:03 +02:00
Owner
No description provided.
La fiche de preuve RGAA portait un aveu : les ratios de contraste n avaient jamais
ete mesures avec un outil dedie, et la reserve etait taguee non verifiee. Un jury
va chercher exactement ce point. On le remplace par des nombres.

axe-core, branche sur la pile de bout en bout existante, analyse 11 ecrans (les
5 pages de la borne, la modale d options, 5 vues du back-office) contre une pile
jetable, jamais contre la production. Regles activees : WCAG 2.0 et 2.1, niveaux
A et AA, le perimetre sur lequel s appuie le RGAA ; les regles de simple bonne
pratique sont exclues et ce choix est justifie dans le rapport.

Resultat REEL, pas flatteur : 0 critique, 10 serieuses, toutes sur une seule
regle, le contraste. 407 ratios mesures, 65 combinaisons distinctes. Trois causes
identifiees, chiffrees, avec les corrections calculees. Les valeurs ont ete
recalculees a la main avec la formule WCAG : concordance a l arrondi pres.

Un incident de mesure est consigne tel quel : les premiers passages voyaient des
violations sur la modale parce que l outil lisait un fond composite PENDANT
l animation d ouverture. Le test attend desormais la fin des animations. Ces
violations etaient un defaut de protocole, pas du code.

Le test porte une barriere de non-regression : la liste des violations acceptees
decrit l etat MESURE, pas l etat souhaite. Une regle nouvelle fait echouer la
campagne. Reproductibilite prouvee : deux passages, sorties identiques octet pour
octet.
feat(a11y): modale de confirmation portee par a11y-dialog
All checks were successful
CI / secret-scan (pull_request) Successful in 30s
CI / php-lint (pull_request) Successful in 31s
CI / static-tests (pull_request) Successful in 1m18s
CI / js-tests (pull_request) Successful in 47s
CI / secret-scan (push) Successful in 26s
CI / php-lint (push) Successful in 29s
CI / static-tests (push) Successful in 1m25s
CI / js-tests (push) Successful in 45s
4de93de3aa
Le referentiel demande d optimiser les temps de developpement en utilisant des
ressources externes pour resoudre des problematiques de developpement complexes
(C2.d). Le projet n avait aucune dependance front : les trois criteres etaient a
zero, seule competence entierement vide du Bloc 1.

La problematique est reelle et mesuree : le motif de modale accessible - piege de
tabulation, restauration du focus, Echap, masquage du fond, blocage du defilement
- etait ecrit a la main dans quatre fichiers de la borne, avec un bloc parfois
identique au caractere pres.

a11y-dialog 8.1.5 (MIT, 4,5 Ko) est embarquee dans assets/vendor/ et servie en
meme origine : la borne applique une politique de securite stricte, aucun service
distant n est joignable. Le fichier est identique octet pour octet au paquet
publie (empreinte SHA-256 verifiee), les deux licences sont conservees, la
provenance est ecrite dans NOTICE.md.

Elle est branchee sur UNE SEULE modale, celle de la confirmation d abandon. Les
autres gardent leur implementation manuelle, eprouvee et testee : a treize jours
de l oral on ne remplace pas ce qui marche. La fiche de preuve montre les deux
versions cote a cote, ce qui sert Cr 2.d.3 mieux qu un remplacement en bloc.

Deux comportements restent ecrits a la main parce que la librairie ne les couvre
pas, et sa propre documentation le dit : le masquage du fond aux technologies
d assistance (elle utilise aria-modal, technique differente) et le blocage du
defilement. Les deux sont rebranches sur ses evenements.

Defaut trouve en lisant le code source de la librairie, pas sa documentation :
son constructeur pose un ecouteur sur le document que seul destroy() libere,
hide() ne suffit pas. Une borne tourne des heures sans rechargement ; sans cela
chaque ouverture laissait un ecouteur pendu. destroy() est appele, et teste.

.gitignore : la regle vendor/ de la section Composer excluait aussi ce dossier.
Sans l exception, la librairie n aurait jamais ete versionnee et l import aurait
echoue sur toute machine fraiche, alors qu il fonctionne en local ou le fichier
est deja sur le disque. Le piege etait invisible sans tenter le versionnement.

217 tests JS (209 avant), 755 tests PHP inchanges, PHPStan niveau 6 sans erreur.
Corentin scheduled this pull request to auto merge when all checks succeed 2026-09-22 16:29:18 +02:00
Corentin changed title from feat(a11y): librairie externe a11y-dialog et audit d accessibilite mesure to feat(a11y): audit mesure, contrastes corriges et animation JavaScript (borne vanilla) 2026-09-22 17:25:36 +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!141
No description provided.