4 Comparatif Front
Corentin JOGUET edited this page 2026-09-30 15:09:09 +02:00

Comparatif attendu / reel — volet Front-end (Wakdo, RNCP 37805)

Constat date. Ce volet decrit la version 11271f7 du 27/09. Depuis, la production sert aab4e96 (29/09) : plusieurs ecarts releves ici sont corriges, et les valeurs « justes » proposees pour le dossier ont bouge. Pour le dossier, reprendre les valeurs a jour (voir Home et la Synthese) : 2610 tests PHP (8924 assertions) et 492 tests JavaScript (recomptage du 30/09, en production depuis la release du 30/09, f841027), 158 routes (57 sous /admin/api), 24 tables, 20 fiches de decision, 18 entrees de journal, 141 fichiers PHP sous src/app dont 33 controleurs (23 au premier niveau, 10 sous Admin/Api, plus 1 trait), 934 mesures d'accessibilite sur 19 ecrans (mesure du 29/09, non rejouee depuis).

Comparaison entre ce que les documents du projet decrivent et ce que le code livre reellement, sur le perimetre front-end : la borne (src/public/borne/), l'interface du back-office (src/app/Views/, src/public/admin/assets/), le Bloc 1 du referentiel (les 8 notes de preuve 01, 02, 03, 04, 06, 07, 08, 09 de docs/soutenance/preuves/), les annexes du dossier (captures d'ecran), 5 pages de wiki deja redigees, et les passages front des brouillons du dossier de soutenance et du Google Doc de l'auteur.

Reference « reel » : copie de travail en lecture seule du commit 11271f7 (identique a la production https://corentin-wakdo.stark.a3n.fr / https://corentin-wakdo-admin.stark.a3n.fr, verifie en direct le 27/09/2026 par GET /api/health). Reference « attendu » : le sujet et sa maquette (docs/_ref/, docs/design/), le referentiel RNCP (docs/_ref/rncp-37805-index.md), les 8 notes de preuve, les annexes (dossier-soutenance/annexes/ (brouillons du dossier, hors depot)), 3 pages de wiki (Accessibilite.md, Home.md, Architecture.md) verifiees par un premier passage puis 2 pages supplementaires (Decisions.md) trouvees en cours de route et gardees car directement liees aux memes fonctionnalites front, et les brouillons du dossier (partie-1.md, partie-2-c1.md, partie-2-c2.md, partie-5-methode.md, tracabilite.md) plus l'export du Google Doc de l'auteur. Le dossier de soutenance se date lui-meme (via l'annexe des captures) au commit 567bb0a du 24/09/2026 a 17h32 ; le reel deploye est 11271f7 du 27/09/2026. Une partie de la verification a ete faite en deleguant a une autre instance de l'assistant IA l'audit detaille des 8 notes de preuve et des passages du dossier contre l'etat exact du commit 567bb0a (git show 567bb0a:<fichier>) ; ce travail est integre ci-dessous et attribue explicitement partout ou c'est le cas.

Mesures en direct : lectures GET sans session sur la production ; pour les ecrans qui exigent une session (formulaire produit avec recette, apercu d'import CSV, caisse a tuiles, page Sante), une pile jetable a usage unique (wakdoauditfront, puis wakdoauditimport), montee et detruite via un script local (hors depot) qui monte une pile jetable sur une copie de travail creee puis supprimee en fin d'audit, en dehors de une copie de travail et du depot reel.

Tableau des ecarts

# Sujet Attendu (source) Reel (preuve) Cas Action proposee Gravite
1 Menus/produits charges en Ajax depuis des fichiers JSON fournis par l'ecole docs/merise/_sources/source-school.md (kit d'examen : 2 fichiers JSON + maquette) ; sujet resume dans dossier-soutenance/court/1-presentation-projet.md:9 La borne consomme une API REST (GET /api/categories, /products, /menus, /allergens) via src/public/borne/assets/js/data.js:18-21. Les JSON statiques de repli ont ete retires (src/public/borne/data/README.md). Choix explique et sourcé dans dossier-soutenance/partie-1.md section 5.3 point 1, verbatim quasi identique dans le Google Doc de l'auteur (ligne ~300 de l'export) (c) — voulu et trace, avec sources des deux cotes Rien a corriger ; le rapport le montre comme un choix documente Basse
2 Un numero saisi par le client en fin de commande tient lieu de paiement Sujet (idem #1) Wakdo ajoute un numero de chevalet (mode sur place, page-payment.js) distinct du numero de commande genere serveur. Trace : partie-1.md section 5.3 point 2 (c) — voulu et trace Rien a corriger Basse
3 Idem — pas de paiement reel a gerer Sujet (idem #1) Wakdo ajoute un ecran de choix carte/especes non demande, paiement reste simule (aucun prestataire integre). Trace : partie-1.md section 5.3 point 3 (c) — voulu et trace Rien a corriger Basse
4 Cr 2.c.1-4 (RNCP) — fonctionnalites asynchrones avec le serveur docs/_ref/rncp-37805-index.md:111-118 Les ecarts 1-3 ci-dessus remplacent le fallback JSON par de vrais appels fetch() vers une API — le critere reste satisfait, et par un chemin plus proche de l'esprit du critere (« developper des fonctionnalites asynchrones avec le serveur ») que ne l'aurait ete la lecture de fichiers JSON statiques (c) Aucune ; a mentionner a l'oral comme argument, pas comme excuse Basse
5 docs/design/maquette-vs-build.md:128-129 : « Reste a faire : la generation dynamique de l'ecran categories depuis GET /api/categories » Doc non modifie depuis le commit 6f2aedc (24/06/2026) page-categories.js charge dynamiquement les categories depuis l'API depuis le commit 03896ac (31/07/2026 : « ecran categories alimente par l'API »), avec un commentaire explicite dans le code documentant l'ancien etat corrige (« avant ce module la page portait une liste de 9 cartes codee en dur ») (a) — doc fausse (perimee de 3 mois), code juste Retirer la ligne « reste a faire » de maquette-vs-build.md, ou la deplacer en historique Basse-moyenne
6 dossier-soutenance/annexes/captures/index.md : « Captures prises le 24 septembre 2026 [...] commit 567bb0a, corrections F38 des accents et F40 de l'interface comprises » Le meme fichier index.md Les 52 PNG de captures/ ont un horodatage de creation 2026-09-24 15:42:40 — anterieur de pres de 2h au commit F38 lui-meme (567bb0a, 2026-09-24 17:32:30, « fix(a11y): accents, apostrophes et accords »). Les captures ne peuvent donc pas contenir cette correction. Confirme par defauts-visibles.md (meme dossier, meme date) qui liste les accents/apostrophes manquants comme defaut visible sur ces memes captures (« Etape 1 / 5 », « Precedent », « Recapitulatif »...) (a) — le texte d'un fichier se contredit avec les fichiers binaires qu'il decrit et avec le fichier voisin du meme dossier Retirer la mention « F38 [...] comprises » de index.md, ou refaire les 52 captures (commande deja fournie en fin de ce meme fichier) Moyenne
7 Les 42 captures « borne + back-office » de l'annexe (captures/01-*.png a 42-*.png) representent l'etat de l'application pour le dossier Memes captures, horodatees 24/09 15:42 Le back-office a recu depuis (26 et 27/09) : un systeme de design complet (commit 608198f), 5 lots de refonte (#159 a #162, 7ea668a..fc77ff0), la recette integree au formulaire produit + import CSV (0278f24), les familles d'ingredients (ab0c553), la page Sante de l'API (64bdb67, aucune capture n'a existe pour cet ecran, il n'existait pas au moment des captures). La borne elle-meme a change (f927520 : « borne conforme a la maquette, 10 ecarts » ; 0c1c76f : abandon de commande). Verifie en direct : le formulaire de recette montre desormais un filtre par famille d'ingredients (capture live jointe a cet audit, absente de l'annexe) ; la caisse comptoir affiche desormais des photos produit reelles (l'annexe originale et defauts-visibles.md documentaient des photos en 404) (a) — les annexes ne portent aucune mention de leur peremption vis-a-vis du HEAD actuel Regenerer les 42 captures avec captures-dossier.spec.js (commande fournie dans index.md) une fois le dossier fige sur sa version finale Haute (le jury peut comparer une capture papier a la demo live et voir une interface differente)
8 dossier-soutenance/annexes/ux-backoffice/rapport.md, BUG-01 : « Requete invalide » bloque toute creation/modification de produit ou de categorie (formulaires multipart/form-data) Audit du 26/09/2026, sur une copie figee de la branche feat/admin-json-api Sur le commit actuel (11271f7), src/app/Core/Request.php:192-207 gere explicitement multipart/form-data (if (str_starts_with($contentType, 'multipart/form-data')) { return $this->scalarize($this->post); }) — le correctif existe (trace historique : commit c1e61ac « fix: read multipart form bodies... », integre autrement dans l'arbre via 0c1c76f). Verifie en direct : creation de produit avec image et recette reussie sur la pile jetable (a) — l'annexe documente un defaut deja corrige au moment du HEAD ; ce n'est pas une erreur de l'audit (il portait sur une branche differente), mais l'annexe ne dit pas qu'elle est resolue Ajouter une note « corrige depuis, voir Request.php:192-207 » en tete du rapport, pour eviter qu'un lecteur du dossier croie le bug encore actif Basse (le defaut ne se reproduit plus sur le commit teste, seul le texte de l'annexe peut induire en erreur)
9 Import CSV « tel quel » doit reussir sans erreur — attendu explicite du propre test du projet : tests/e2e/admin-product-recipe-import.spec.js:130 (await expect(page.locator('body')).not.toContainText("erreur(s) : l'import est bloqué")) Test officiel du depot, sur le commit 11271f7 Rejoue reellement sur une pile jetable (wakdoauditimport) : le test echoue. Telecharger le modele officiel (GET /admin/products/import/template) puis le reimporter sans modification declenche 2 erreurs bloquantes : « Unité "piece" différente de l'unité existante ("pièce") pour l'ingrédient "Pain burger" » (et « Steak hache »). Cause exacte : ProductImportService::normalize() (src/app/Catalogue/ProductImportService.php:790-793) ne fait que mb_strtolower(trim($value)), sans normaliser les accents, alors que le gabarit code en dur utilise 'piece' sans accent (ProductImportService.php:83-84) et que le seed utilise 'pièce' avec accent (db/seeds/0003_ingredients_recipes.sql:23) (b) — defaut de code, confirme par l'echec reproductible du test officiel du projet Corrige le 2026-09-27, demande de fusion #178 (fusionnee dans dev, b3f747e) : normalize() ignore casse et accents via Normalizer (intl), le modele utilise les vraies graphies, la CI installe php-intl ; 5 tests ajoutes (rouges avant, verts apres), test navigateur officiel 3/3. Proposition d'origine : corriger normalize() pour ignorer les accents (ex. translitteration + suppression des diacritiques) avant comparaison ; le test existant sert de garde-fou (actuellement rouge, doit passer au vert) Haute (fonctionnalite explicitement demandee a l'audit, bug reproductible avec la commande officielle du projet, sur l'ecran meme que le dossier met en avant comme nouveaute)
10 Wiki Architecture.md:35 : « src/public/admin/index.php : le point d'entree unique : 155 routes declarees a la suite » Page wiki, non datee explicitement index.php ne declare plus aucune route directement (0 occurrence de router->add() : les routes ont ete extraites dans src/app/Core/routes.php (commentaire du fichier : « extraite de src/public/admin/index.php pour que le routeur puisse etre reconstruit hors requete HTTP », feature Sante de l'API, commit 64bdb67, aujourd'hui). Recompte reel : 157 routes (grep -c "router->add(" src/app/Core/routes.php = 157, confirme independamment par la seconde passe) (a) — a la fois perimee (155 -> 157) et mal localisee (l'emplacement cite n'est plus le bon depuis la PR #175) Corriger la ligne : « 157 routes, dans src/app/Core/routes.php (extrait d'index.php) » Basse
11 Wiki Architecture.md:31 : « src/app/Controllers : 32 controleurs » Page wiki 34 fichiers PHP sous src/app/Controllers (recompte par find), dont 1 n'est pas un controleur (Admin/Api/JsonApiTrait.php, un trait, pas une classe *Controller) : 33 controleurs reels (a) — perimee (probablement d'une unite avant l'ajout d'un controleur recent, ex. HealthApiController / HealthPageController de la PR #175) Mettre a jour le chiffre a 33 Basse
12 Wiki Architecture.md:33 : « src/app/Views : 38 vues du back-office » Page wiki 39 fichiers .php sous src/app/Views hors les 2 gabarits partages (Views/layout.php, Views/admin/layout.php, qui ne sont pas des « vues » au sens propre) ; en ne comptant que src/app/Views/admin hors son propre layout.php : 36 vues de back-office proprement dites (a) — perimee Clarifier et mettre a jour (36 vues de back-office, hors gabarits, hors les 3 vues auth/) Basse
13 Wiki Decisions.md:3 : « Dix-sept fiches » ; table listant 0001 a 0017 uniquement Page wiki (hors des 3 fichiers explicitement assignes a cet audit, ajoutee ici car directement liee aux memes fonctionnalites front/back-office verifiees) docs/adr/README.md liste 20 fiches (0001 a 0020), dont 0018 (familles d'ingredients et filtre de recette — verifie en direct, capture live) et 0019 (page Sante de l'API — verifiee en direct) manquent de la page wiki (a) — perimee Ajouter les 3 fiches manquantes (0018, 0019, 0020) et corriger « Dix-sept » en « Vingt » Basse
14 Wiki Accessibilite.md:27-31 : « 18 [ecrans], dont 12 du back-office » ; « 858 [rapports de contraste], sur 83 combinaisons » ; « 22 vues du back-office sur 34 » hors perimetre Page wiki Recompte direct sur docs/soutenance/preuves/rapports/resume.json (ecrans: 19) et rapports/contrastes-mesures.csv (944 lignes = 943 mesures + entete) : 19 ecrans (dont 13 back-office, incluant admin-sante-api qui n'existait pas quand la page wiki a ete ecrite), 943 mesures de contraste. Le back-office comptant reellement 36 vues (voir #12), le ratio « hors perimetre » est aussi a corriger (a) — perimee (correspond a une campagne anterieure, celle du 26/09 matin selon 06-audit-accessibilite-mesure.md) Mettre a jour les 4 chiffres vers 19 / 943 / 13 / 36 Moyenne (chiffres cites textuellement, faciles a recontroler a l'oral)
15 docs/soutenance/preuves/06-audit-accessibilite-mesure.md:849 (section Limites, point 4) : « Dix-huit ecrans [...] le back-office compte 34 vues [...] douze sont auditees » Meme fichier, section « Limites et perimetre de verification » Le tableau d'en-tete du meme fichier, ligne 49, deja mis a jour a la derniere regeneration (27/09, meme commit que la page Sante) dit : « 19 (6 borne, 13 back-office) ». Incoherence interne au document : la regeneration du 27/09 a mis a jour le tableau de tete mais pas la section Limites (a) — incoherence interne, mineure Resynchroniser la section Limites (19 ecrans, 13 back-office, 36 vues au total) avec le tableau de tete Basse
16 docs/soutenance/preuves/03-conformite-cross-browser.md : « style.css (2153 lignes) », « admin.css (2714 lignes) », et des decomptes d'occurrences (var(--), display:flex, :focus-visible) dates du 24/09 alors que le README.md du meme dossier annonce que « Tous [les artefacts sont] regeneres le 2026-09-26 » (travail de cette autre instance, verifie) docs/soutenance/preuves/README.md (section Artefacts) + 03-conformite-cross-browser.md lui-meme Recompte reel (wc -l, confirme deux fois independamment) : style.css = 2322 lignes, admin.css = 3354 lignes (+640, +24 %, du fait de la refonte du design-system du 26/09 posterieure a la derniere date de correction trouvee dans le fichier, « 2026-09-24 »). La seconde passe a recompte aussi les occurrences : var(--) admin 440 -> 683, :focus-visible admin 13 -> 26, display:flex admin 69 -> 88 (a) — doc fausse sur les chiffres ; le mecanisme de repli CSS decrit reste present dans le code actuel Corriger les chiffres cites ou retirer la mention « Tous regeneres le 2026-09-26 » du README si 03 n'a pas ete regeneree a cette date Basse (aucune consequence sur la conformite du critere Cr 1.b.2/1.b.3)
17 PR #173 (commit 1a1b925, « cache policy + asset version marker ») et docs/soutenance/preuves/08-referencement-performance.md section 6 (poids/temps de chargement, mesures le 23/09) — point demande explicitement pour cet audit 08-referencement-performance.md section 6 ; diff reel du commit 1a1b925 (docker/apache/cache.conf, nouveau) Le diff montre que la borne (HTML statique servi par Apache, sans PHP) ne porte pas le marqueur ?v= (reserve au back-office via App\Core\Asset, pose cote PHP) : ses CSS/JS passent seulement de « aucun en-tete de cache » (avant, RFC 9111 §4.2.2, fraicheur heuristique) a Cache-Control: no-cache (apres, revalidation systematique). Verifie en direct sur la production : curl sur index.html et data.js renvoie cache-control: no-cache ; la banniere webp garde sa politique inchangee (public, max-age=604800, confirme en direct). Or tests/e2e/perf-accueil.spec.js (methode citee par la note 08) desactive explicitement le cache HTTP pour la mesure (Network.setCacheDisabled) : les chiffres de la section 6 (banniere 1 256 918 -> 95 546 octets, chargement 6,7 s -> 0,95 s) restent donc valables et rejouables a l'identique aujourd'hui, la politique de cache n'ayant aucune prise sur une mesure qui desactive le cache (d) — la note ne mentionne nulle part la politique de cache reelle de production (usage repete toute la journee sur un vrai poste), alors que PR #173 vient justement de la changer ; pas une erreur, un angle non couvert Ajouter une reserve courte en section 8 de la note 08 : « le cache HTTP de production n'est pas mesure par cette methode (cache desactive par construction) ; voir docker/apache/cache.conf pour la politique reelle » Moyenne
18 dossier-soutenance/partie-2-c1.md (~ligne 407, critere Cr 1.e.8) : « [la banniere] est chargee sans condition [...] dans un format PNG plutot qu'un format d'image plus recent [...] aucune balise <picture> ni attribut srcset n'est employe » — travail de cette autre instance, verifie par lecture directe du commit Le dossier se declare decrire le commit 567bb0a git show 567bb0a:src/public/borne/index.html montre deja un <picture> avec <source srcset="...mc-landing-banner.webp" type="image/webp"> et repli PNG (lignes ~88-100). Le fichier .webp existe deja dans l'arbre a ce commit. Le Google Doc de l'auteur, sur ce meme point, est a jour et correct (« passe d'un PNG [...] a un WebP [...] PNG garde en repli via <picture> ») (a) — faux meme pour 567bb0a, pas seulement depasse ; contredit a la fois le code au commit cite et le Google Doc du meme auteur Corriger ou retirer ce paragraphe de partie-2-c1.md ; s'aligner sur le texte du Google Doc Haute (contradiction frontale et facilement verifiable par le jury sur un critere chiffre)
19 dossier-soutenance/partie-2-c1.md (~ligne 268, critere Cr 1.d.2) : la numerotation des sections de style.css « va de 1 a 8 sans rupture, saute de 8 a 10 [...] 12/13/14 apparaissent deux fois [...] 2107 lignes » — travail de cette autre instance Idem, dossier declare decrire 567bb0a git show 567bb0a:src/public/borne/assets/css/style.css : 2162 lignes, numerotation 1 a 21 sans trou ni doublon (verifie par grep sur les bannieres de section). Le Google Doc, sur ce point, dit correctement : « 21 sections numerotees [...] corrige le 23 septembre 2026 » (a) — faux meme pour 567bb0a Corriger ou retirer ce paragraphe ; s'aligner sur le Google Doc Haute (meme raisonnement que #18)
20 dossier-soutenance/tracabilite.md : la table de synthese (« Criteres Partiel (14) », « Criteres Non couvert (2) », total Bloc 1 = 31 Couvert / 9 Partiel / 2 Non couvert / 0 A verifier / 42) liste 8 criteres front-end comme encore a corriger (numerotation CSS, schema.org sur 4 pages manquantes, compression de la banniere, media query back-office, balises <strong>/<em>...) — travail de cette autre instance, avec verification code a l'appui La table detaillee du meme fichier tracabilite.md (lignes 9-96), qui marque ces 8 memes criteres « Couvert » avec preuve datee a chacun (ex. « numerotation cassee corrigee le 23 septembre 2026, PR #146 ») Verifie dans le code a 567bb0a : schema.org present sur les 5 pages, WebP+<picture> presents, CSS numerote 1-21 sans trou, media query .admin-layout a 640px deja presente, <strong> present sur l'accueil, form-validation.js deja present — la table detaillee du fichier a raison, sa propre table de synthese a tort. Recompte a la main sur la table detaillee : Bloc 1 = 39 Couvert / 2 Partiel (Cr 2.d.1, Cr 2.d.3) / 1 Non couvert (Cr 2.d.2), pas 31/9/2 (a) — le document se contredit lui-meme ; sa propre partie detaillee dement sa partie synthese, et le code confirme la partie detaillee Corriger la table de synthese pour qu'elle reflete la table detaillee du meme fichier (39/2/1, pas 31/9/2) Haute (un document explicitement destine a demontrer la traçabilite au jury se contredit lui-meme sur 8 criteres ; risque eleve si le jury feuillette les deux tables)
21 dossier-soutenance/partie-5-methode.md (glossaire, entree « Schema.org ») : « La page d'accueil [...] en porte ; son extension aux autres pages reste un point ouvert » — travail de cette autre instance Idem, glossaire du dossier Meme verification que #18/#20 : les 5 pages portent deja le balisage JSON-LD schema.org a 567bb0a (a) — faux meme pour 567bb0a, coherent avec #20 Corriger l'entree de glossaire Moyenne
22 dossier-soutenance/partie-2-c2.md : @keyframes cites aux lignes 936, 1074, 1094 de style.css, et prefers-reduced-motion a la ligne 2098 — travail de cette autre instance Idem, dossier A 567bb0a : les 3 @keyframes sont en realite aux lignes 974, 1112, 1132, et la media query a la ligne 2153 (decalage constant ~35-55 lignes). Ecart encore plus marque aujourd'hui (fichier a 2322 lignes) (a) — citations de lignes fausses, mecanismes decrits corrects sur le fond Remplacer les numeros de ligne bruts par des reperes par selecteur (comme les notes de preuve 01-09 le font deja, precisement pour cette raison de derive) Basse-moyenne (a ne pas citer tel quel si le jury ouvre le fichier)
23 dossier-soutenance/partie-5-methode.md:117 : en-tete CSP « ligne 145 pour la borne [...] ligne 241 pour le back-office » — travail de cette autre instance Idem, dossier, declare decrire 567bb0a A 567bb0a : exact (verifie, lignes 145 et 241). Aujourd'hui (11271f7) : ligne 145 inchangee, mais ligne 247 (pas 241) pour le back-office, a cause des lignes ajoutees par PR #173 (Include conf/extra/wakdo-cache.conf) (c)/depasse — pas une erreur pour la version decrite, mais a rafraichir si cite tel quel aujourd'hui Mettre a jour la ligne 241 -> 247 si ce passage est reutilise pour decrire la version deployee Basse

Conforme

Verifie et confirme, dans les deux sens (recompte independant, parfois deux fois par deux agents differents) :

  • GET /api/health en production sert "version":"11271f7" — commande executee : curl -s https://corentin-wakdo-admin.stark.a3n.fr/api/health (methode de reference respectee).
  • La borne (index.html, data.js) est servie avec Cache-Control: no-cache en production ; la banniere webp garde public, max-age=604800 ; le back-office sert ses assets avec ?v=11271f7 et Cache-Control: public, max-age=31536000, immutable — verifie par curl -D - sur les deux domaines de production, conforme a docker/apache/cache.conf (commit 1a1b925).
  • /admin/health exige une session (verifie : curl sans session -> HTTP 302 vers /login) ; verifie en direct avec session (pile jetable) : la page rend un etat en direct coherent (base joignable, 17 migrations, 10 seeds, carte des routes).
  • 157 routes dans src/app/Core/routes.php (grep -c "router->add(" src/app/Core/routes.php), chiffre recompte independamment deux fois (premiere et seconde passe), conforme a docs/soutenance/preuves/06-audit-accessibilite-mesure.md et a la page rendue de /admin/health.
  • docs/design/screens/ contient exactement 10 fichiers, conforme aux « 10 ecrans » de la maquette annoncee dans docs/design/maquette-vs-build.md et docs/design/README.md.
  • La borne compte exactement 5 pages HTML (index.html, categories.html, products.html, payment.html, confirmation.html) et 21 modules JavaScript (find src/public/borne/assets/js -name "*.js" | wc -l) — conforme au wiki Architecture.md et aux criteres qui citent « 5 pages ».
  • Preuve 01 (W3C) : w3c/borne-statique.json = 0 message ; w3c/borne-rendu.json et w3c/borne-modale-allergenes.json = exactement 1 message chacun, de type info/warning (pas une erreur), sur un aria-disabled="true" pose sur un <a href> — conforme au « 0 erreur, 1 avertissement assume » annonce.
  • Preuve 02 (responsive) : captures-responsive/ contient exactement 52 fichiers, conforme au chiffre annonce par le README des preuves.
  • Preuve 06 (audit mesure) : rapports/resume.json annonce 19 ecrans, confirme par lecture directe du JSON ; rapports/contrastes-mesures.csv contient 944 lignes = 943 mesures + 1 entete, conforme au « 943 mesures » du README ; total_noeuds_en_faute_par_gravite = 0 sur les 4 niveaux de gravite, conforme au « 0 violation » annonce ; le dossier rapports/ contient exactement 21 fichiers (1 resume + 1 CSV + 19 axe-*.json), conforme.
  • Preuve 08, section 7 : style.css contient 21 sections numerotees de 1 a 21 sans trou ni doublon (confirme par la seconde passe).
  • Preuve 09 : captures-controle-saisie/ contient exactement 4 fichiers, conforme a la description du README (1 « avant » non regenerable + 3 « apres »).
  • Les tests unitaires JavaScript cites par les notes 04/07/09 existent et sont verts, rejoues reellement par la seconde passe (node --test / npm run test:js) : a11y.test.js (7), skip-link.test.js (6), cart-total-animation.test.js (22), form-validation.test.js (22), pin-modal.test.js (12), menu-form.test.js (12).
  • Les trois « ecarts assumes » du sujet (JSON->API, chevalet, paiement simule) sont traces de maniere identique et coherente dans partie-1.md et dans le Google Doc de l'auteur (quasi verbatim), avec sources citees des deux cotes.
  • Le module src/public/borne/assets/js/a11y.js (bascule OpenDyslexic) et les 2 fichiers de police woff2 existent sur disque avec la licence OFL 1.1, conforme au critere Cr 1.c.2.
  • Capture live (pile jetable) : le formulaire de recette produit affiche desormais un filtre par famille d'ingredients (« 9 ingredient(s) affiche(s) sur 50, filtres selon la categorie »), fonctionnalite ADR-0018 verifiee fonctionnelle.
  • Capture live : la caisse comptoir a tuiles affiche des photos produit reelles (le defaut de photos en 404 documente par ux-backoffice/rapport.md au 26/09 ne se reproduit pas sur l'ecran observe).
  • Le BUG-01 documente dans ux-backoffice/rapport.md (formulaire produit/categorie en erreur « Requete invalide ») ne se reproduit pas sur le commit actuel : lecture du code (Request.php:192-207) confirme la prise en charge de multipart/form-data, et une creation de produit avec image a reussi sur la pile jetable de cet audit.

A verifier

Hypotheses non tranchees des deux cotes, ou verification hors du budget de cet audit :

  • Ecart entre 2 sources datees du meme jour (26/09) sur le nombre de tests PHP : le wiki Home.md donne « 1684 tests (4866 assertions) », docs/soutenance/preuves/06-audit-accessibilite-mesure.md (selon la seconde passe) en donne 1677/4855. PHP n'etait pas disponible dans l'environnement de verification pour trancher en executant PHPUnit. Tranche ensuite par execution : 2352 tests / 7791 assertions a 11271f7, 2357 / 7800 a 97a45c1 ; le wiki porte desormais ce dernier chiffre.
  • « 4630 verifications, 0 echec » (balayage de mise en page du back-office, cite par les wikis Accessibilite.md et Home.md) : non recompte, le test source (tests/e2e/backoffice-sweep.spec.js) n'a pas ete rejoue (pile Docker complete, hors budget de cette verification cote resultat exact, seule son existence est confirmee). Rejoue ensuite le 28/09 sur 1ccc9db : 4807 verifications, 3 echecs, tous sur la page Sante, qui n'avait pas encore ete balayee ; corriges par #183 (deploye par #184, 97a45c1), puis 4807 verifications, 0 echec. Cas (b) pour la connexion de demonstration vide, cas (c) pour la regle « texte technique » sur cette page, admise et tracee.
  • Le detail complet des « 10 ecarts » corriges par le commit f927520 (« borne conforme a la maquette ») n'a pu etre confronte point par point a la table « Verdict : conforme » de docs/design/maquette-vs-build.md : le message de commit est un titre seul (squash merge sans corps), et une reconciliation exhaustive ecran par ecran n'a pas ete faite au-dela du point verifie (categories dynamiques, ecart #5 du tableau).
  • Le defaut « menus ranges sous un onglet Autres » et « libelle Coca Cola - Moyenne Frite errone » decrits par ux-backoffice/rapport.md pour la caisse comptoir/drive (26/09) : non confirme reproduit ou corrige sur le commit actuel — la capture live prise pour cet audit ne montre que l'onglet Boissons (les autres onglets debordent hors cadre), sans confirmation positive ni negative sur ce point precis.
  • Contenu detaille des sections « A verifier (3) » internes a tracabilite.md (au-dela de la table de synthese Bloc 1 auditee ci-dessus) : non lu integralement par manque de temps, a confirmer hors front si besoin.
  • Wikis DevOps.md, Modele-de-donnees.md, API-en-direct.md : non examines (hors du perimetre front explicitement assigne), possibilite de contenir des affirmations front non verifiees ici. Relus avant publication : chaque lien vers le depot existe sur main, les travaux de CI, la verification de version du deploiement et les 4 taches planifiees correspondent aux fichiers ; API-en-direct.md decrit en plus la console de la page Sante.
  • Les criteres Cr 1.b.2/1.b.3 (preuve 03) et Cr 2.a.3/2.a.4 (preuve 07) au-dela des chiffres verifies : le contenu qualitatif (strategie de repli CSS par navigateur, comportement de l'animation testee) n'a pas ete recontrole ligne a ligne, seuls les chiffres cites l'ont ete.
  • Preuve 04 (RGAA) : verifiee par sondage (dates de derniere modification, un decompte de regles :focus-visible qui donne un resultat ambigu selon qu'on compte les occurrences brutes du selecteur — 22 — ou les blocs de regle distincts — environ 16 — contre les « 19 regles » annoncees par le document ; l'ecart n'est pas assez net pour trancher a/b/c/d sans lire la methode de comptage exacte du document).

Pour le dossier

Passages a corriger avant la version finale, avec le texte actuel, le texte juste, et l'etiquette de peremption demandee.

Fichier : passage Texte actuel Texte juste Etiquette
docs/design/maquette-vs-build.md:128-129 « Reste a faire [...] la generation dynamique de l'ecran categories » Deja fait depuis le 31/07/2026 (commit 03896ac) ; a retirer ou deplacer en historique Depasse depuis 567bb0a (doc du 24/06, encore plus ancien)
dossier-soutenance/annexes/captures/index.md (chapeau) « corrections F38 des accents et F40 de l'interface comprises » Retirer cette mention (les captures sont anterieures a F38 de ~2h), ou refaire les 52 captures apres F38 Faux pour son propre horodatage revendique
docs/soutenance/preuves/03-conformite-cross-browser.md « style.css (2153 lignes) », « admin.css (2714 lignes) », occurrences var(--)/flex/:focus-visible datees du 24/09 2322 / 3354 lignes ; occurrences admin var(--) 683, :focus-visible 26, flex 88 (recompte du 27/09) Depasse depuis 567bb0a (refonte du design-system du 26-27/09)
docs/soutenance/preuves/06-audit-accessibilite-mesure.md:849 « Dix-huit ecrans [...] 34 vues [...] douze auditees » 19 ecrans (6 borne + 13 back-office), 36 vues de back-office, 13 auditees Depasse au sein du document lui-meme (regeneration partielle du 27/09)
Wiki Architecture.md:35 « 155 routes declarees a la suite [dans index.php] » 157 routes, dans src/app/Core/routes.php (extrait d'index.php par la PR #175) Depasse depuis 567bb0a (PR #175, 27/09)
Wiki Architecture.md:31 « 32 controleurs » 33 controleurs Depasse depuis 567bb0a
Wiki Architecture.md:33 « 38 vues du back-office » 36 vues (hors gabarits de mise en page) Depasse depuis 567bb0a
Wiki Decisions.md:3 « Dix-sept fiches », liste 0001-0017 Vingt fiches (0001-0020) ; ajouter 0018, 0019, 0020 Depasse depuis 567bb0a (0018/0019/0020 posterieures)
Wiki Accessibilite.md:27-31 « 18 ecrans [...] 858 rapports [...] 83 combinaisons [...] 22 vues sur 34 » 19 ecrans, 943 mesures, 13 back-office audites, 36 vues au total Depasse depuis 567bb0a
dossier-soutenance/partie-2-c1.md (~407, Cr 1.e.8) « aucune balise <picture> ni attribut srcset n'est employe » Le <picture> + srcset WebP existent deja a 567bb0a ; s'aligner sur le Google Doc de l'auteur, deja correct sur ce point Faux pour 567bb0a (pas seulement depasse)
dossier-soutenance/partie-2-c1.md (~268, Cr 1.d.2) « la numerotation [...] saute de 8 a 10 [...] 2107 lignes » Numerotation 1-21 sans trou des 567bb0a (2162 lignes a ce commit) ; s'aligner sur le Google Doc Faux pour 567bb0a
dossier-soutenance/tracabilite.md (table de synthese Bloc 1) « 31 Couvert / 9 Partiel / 2 Non couvert / 0 A verifier / 42 » 39 Couvert / 2 Partiel (Cr 2.d.1, 2.d.3) / 1 Non couvert (Cr 2.d.2) — a aligner sur la table detaillee du meme fichier, deja juste Faux pour 567bb0a (contradiction interne au document)
dossier-soutenance/partie-5-methode.md (glossaire Schema.org) « son extension aux autres pages reste un point ouvert » Deja fait sur les 5 pages a 567bb0a Faux pour 567bb0a
dossier-soutenance/partie-2-c2.md (lignes CSS citees) @keyframes lignes 936/1074/1094 ; prefers-reduced-motion ligne 2098 Lignes reelles a 567bb0a : 974/1112/1132 et 2153 ; remplacer par des reperes par selecteur Faux pour 567bb0a
dossier-soutenance/partie-5-methode.md:117 (lignes CSP) « ligne 145 [...] ligne 241 » Ligne 145 inchangee ; ligne 247 aujourd'hui (241 restait exact a 567bb0a) Conforme pour 567bb0a, depasse depuis (PR #173)
dossier-soutenance/annexes/ux-backoffice/rapport.md (BUG-01) Bug bloquant « Requete invalide » sur creation produit/categorie Ne se reproduit plus sur le commit actuel (verifie : creation reussie sur pile jetable, code lu) Depasse depuis 567bb0a (le correctif est independant de cette date, deja present avant)

Points de methode a noter

  • Sur les 3 points ou le Google Doc de l'auteur a pu etre compare directement aux brouillons .md locaux (WebP/<picture> et numerotation CSS pour Cr 1.e.8/1.d.2, schema.org pour Cr 1.e.3), le Google Doc porte la version corrigee et datee, les fichiers .md locaux portent encore la version perimee/fausse. Sur un autre point (accessibilite, Cr 1.c), les deux portent le meme chiffre depasse (11 ecrans/407 mesures, vrai a 567bb0a, depasse depuis). Recommandation : pour Cr 1.d.2 et Cr 1.e.3/1.e.8, la source a privilegier pour la version finale du dossier est le Google Doc, pas partie-2-c1.md ni tracabilite.md.
  • Ce comparatif melange un travail direct (borne, back-office, annexes, wiki, mesures en production, pile jetable) et un travail delegue a une autre instance de l'assistant IA (les 8 notes de preuve chiffre par chiffre, et le rapprochement systematique dossier/567bb0a/Google Doc). Les passages issus de cette autre instance sont marques comme tels dans le tableau des ecarts ; leurs commandes ont ete decrites par l'agent comme reellement executees (npm/node, git show 567bb0a:<fichier>), mais je n'ai pas rejoue moi-meme chacune d'entre elles.