Même classe de vert-trompeur que ci/README.md (session 050007) mais dans le
code des gates : 3 comptes vivants figés "22 suites · 551 tests · PASS" (matrice
534→551→558). L'ironie : le header de check_regression — le gate anti-péremption
de la matrice — s'était lui-même périmé. Fix précédent 050007 : suppression de la
surface de dérive (retrait du nombre figé → renvoi à regression_run.json), pas
551→558. Progressions historiques "534→551→558" conservées. 7 gates verts.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Défaut réel (#6 anti-invention) : 03_agents/erpnext_backend/AGENT.md situait les
tests backend par "repo : 560 tests au total" saisi à la main. 560 ne correspond à
aucun compte courant (matrice qa/regression = 558/22 ; repo-wide = 584 méthodes
test_*) — périmé en silence (534→551→558 ; 560 = ancien 534 + 26 harnais self-exclu
INV3). Même classe de vert-trompeur que la fiche QA (21/534), mais ungated.
- Vérif ciblée : toutes les autres bornes chiffrées des 13 AGENT.md exactes
(crm 81, RBAC 60, e-CF 39, portails 19, chat 31, confotur 44, seo 36).
- Fix : le nombre pointe désormais vers l'artefact gaté (regression_run.json).
- Gate : ci/check_readme_claims.sh recalcule tests+suites+verdict depuis
regression_run et exige l'égalité avec la fiche backend (comme la fiche QA).
- Preuve morsure : 560 réinjecté ⇒ gate rouge ; restauré ⇒ vert.
- 7 gates verts ; édition doc ⇒ aucune dérive out/ (check_artifacts vert).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Défaut réel (même classe que le bug regression_run.json corrigé plus tôt) :
les 4 générateurs RBAC (fixtures_gen/userperm_gen/roleprofile_gen/apply_plan)
.gitignore-aient leur out/, alors qu'ils sont audités en archétype `generator`
(critère HANDOFF). En checkout PROPRE (git archive HEAD = ce que voit le runner
Gitea) leur out/ est absent → qa/audit_4big (dont le build relit le out/ de
CHAQUE module) les note 80<95 ⇒ INV7 ⇒ build refusé ⇒ check-artifacts ET
check-regression ROUGES. Ça ne passait qu'en local via les out/ non suivis
laissés par des build manuels.
Fix : committer le out/ des 4 générateurs (build byte-déterministe prouvé ;
apply_plan lit ses frères en process, pas via out/) → alignement sur les 15
autres générateurs ; audit 100/100 en checkout propre.
Durcissement : check_artifacts.sh exige désormais `git ls-files --error-unmatch`
sur chaque fichier produit → un out/ ignoré/non commité devient une erreur
LOCALE honnête au lieu d'une surprise en CI. Bite-proof : git rm --cached d'un
artefact (laissé sur disque) ⇒ exit 1 ; re-add ⇒ exit 0.
Régénéré : quality_report.json (dérive DOC = taille des 4 README édités).
Vérifs : 6 gates verts sur git archive propre ; 534/21 inchangé ; suites OK.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
L'artefact le plus cité du dépôt (qa/regression/out/regression_run.json ·
21 suites · 534 tests · PASS) n'avait aucun garde-fou CI : check_artifacts
ne rejoue que 'build' et exclut les artefacts d'exécution 'run'. Nouveau
5e gate statique rejoue 'regression_gen.py run' (~5s, déterministe) et exige
byte-identité + verdict PASS. Rend impossible la re-commission d'une matrice
périmée (dérive type demo 18->21) ou rouge commitée verte. parse_ci inchangé
(gate sans working-directory) → 0 dérive des counts dérivés (check_artifacts
exit 0). Preuve de morsure OK (534->999 => exit 1). 5 gates verts.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Nouveau gate CI bloquant : régénère chaque 05_deliverables_mvp/**/out/ depuis son
générateur `build` et exige l'égalité byte-for-byte avec le fichier commité
(découverte auto · stdlib pur · zéro pip). Attrape la dérive silencieuse d'un
artefact qui auto-résout une valeur depuis un autre module et devient périmé quand
la source grandit — dérive qu'aucune suite tests/ (fonctions, pas fichier commité)
n'attrapait.
Défaut détecté et corrigé par ce gate : demo/scenarios/out/run_sheet.json
embarquait ci_modules_count=18 (buildé Sprint 7) alors que qa/audit_4big en compte
désormais 21. Régénéré (diff 1 ligne). Consistance live re-vérifiée.
Wiring : job check-artifacts + needs du gate agrégé (.gitea/workflows/ci.yml) ·
doc (ci/README.md). Vérifs : test négatif du gate OK (dérive → EXIT 1), 4 gates
statiques EXIT 0, suites CI-parsing vertes (regression/acceptance/audit_4big/demo),
21/21 suites · 534 tests, compteurs dérivés stables.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>