Comparatif attendu / reel — volet Front-end (Wakdo, RNCP 37805)
Constat date. Ce volet decrit la version
11271f7du 27/09. Depuis, la production sertaab4e96(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 soussrc/appdont 33 controleurs (23 au premier niveau, 10 sousAdmin/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/healthen 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 avecCache-Control: no-cacheen production ; la banniere webp gardepublic, max-age=604800; le back-office sert ses assets avec?v=11271f7etCache-Control: public, max-age=31536000, immutable— verifie parcurl -D -sur les deux domaines de production, conforme adocker/apache/cache.conf(commit1a1b925). /admin/healthexige une session (verifie :curlsans 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 adocs/soutenance/preuves/06-audit-accessibilite-mesure.mdet a la page rendue de/admin/health. docs/design/screens/contient exactement 10 fichiers, conforme aux « 10 ecrans » de la maquette annoncee dansdocs/design/maquette-vs-build.mdetdocs/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 wikiArchitecture.mdet aux criteres qui citent « 5 pages ». - Preuve 01 (W3C) :
w3c/borne-statique.json= 0 message ;w3c/borne-rendu.jsonetw3c/borne-modale-allergenes.json= exactement 1 message chacun, de typeinfo/warning(pas une erreur), sur unaria-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.jsonannonce 19 ecrans, confirme par lecture directe du JSON ;rapports/contrastes-mesures.csvcontient 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 dossierrapports/contient exactement 21 fichiers (1 resume + 1 CSV + 19axe-*.json), conforme. - Preuve 08, section 7 :
style.csscontient 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.mdet 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 policewoff2existent 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.mdau 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 demultipart/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.mddonne « 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 a11271f7, 2357 / 7800 a97a45c1; le wiki porte desormais ce dernier chiffre. - « 4630 verifications, 0 echec » (balayage de mise en page du back-office, cite par les wikis
Accessibilite.mdetHome.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 sur1ccc9db: 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 » dedocs/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.mdpour 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 surmain, les travaux de CI, la verification de version du deploiement et les 4 taches planifiees correspondent aux fichiers ;API-en-direct.mddecrit 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-visiblequi 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
.mdlocaux (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.mdlocaux 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 a567bb0a, 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, paspartie-2-c1.mdnitracabilite.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.