Audit de méta-niveau + gate : note la qualité 4Big de 100% des livrables gated et bloque (FAIL) si un module < 95/100 (CLAUDE.md #5). Couverture PROUVÉE par recoupement bijectif registre ↔ working-directory du CI (moins l'auditeur · SoD ISA 315). 5 critères déterministes (DOC/CONTRAT/TESTS/CLI/HANDOFF) renormalisés par archétype. Anti-invention (#6) : chaque note est recalculée depuis des faits du dépôt, jamais saisie ; un invariant recompute chaque note. Résultat : PASS · 17/17 modules à 100/100. Régression 442 tests verts (+34). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.4 KiB
Rapport de session · 2026-07-30 · session 20 (20260730_095728)
Tâche
Sprint 7 · QA — Générateur de l'Audit 4Big qualité (roadmap
04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md l.69 : « QA : Audit 4Big niveau
95+/100 sur 100% deliverables »).
Sprint 6 étant clos côté repo (SEO trilingue session 18, Chat OTOIA session 19 ;
le volet OTOIA voice Amélie dépend d'API/desk VPS · #8), c'est le premier volet
Sprint 7 réalisable en repo. Les deux autres volets Sprint 7 — polish
otov7.com (Frontend) et scénarios démo P07/P05 (CRM+Faisabilité) — dépendent du
site live et de data_room/PXX réelle (hors périmètre worker · #8).
Décision d'architecture
Audit de méta-niveau et gate, pas rapport indicatif : il note la qualité
4Big de 100 % des livrables du mandat et bloque (verdict FAIL) si un
seul module tombe sous 95/100 (CLAUDE.md #5) ou si la couverture n'est pas
complète.
Preuve de couverture, pas déclaration : le registre (quality_spec.json) est
recoupé bijectivement avec les working-directory du CI Gitea
(.gitea/workflows/ci.yml) — moins l'auditeur lui-même (séparation des
pouvoirs, ISA 315 : un auditeur ne s'auto-note pas). Tout livrable ajouté au CI
sans entrée de registre casse la couverture → gate rouge.
Fichiers créés — 05_deliverables_mvp/qa/audit_4big/
quality_spec.json— rubrique 4Big (5 critères + poids), seuils (pass_score=95 verbatim CLAUDE.md #5), 4 archétypes (critères applicables), registre des 17 modules audités (chacunsource-é vers roadmap + job CI).q4lib/{__init__,deps,registry,criteria,scoring,builder}.py:depsréutilise (#5) le validateur maison Publiciste (zéro pip).registryparseci.yml(YAML minimal stdlib) et prouve la couverture bijective registre ↔ CI + alimentation dugate.criteria= 5 critères purs et déterministes lus depuis le dépôt :DOC(README/SPEC ≥ 400 o),CONTRAT(*.schema.json),TESTS(≥ 8 méthodestest_*),CLI(__main__+ argparse),HANDOFF(out/MANIFEST.json+ artefact JSON valide non vide).scoringrenormalise par archétype (critère non applicable exclu du dénominateur → pas de pénalité pour un hand-off non attendu) ; arrondi demi-supérieur explicite (déterministe).builderassemble couverture + notes + totaux + verdict.
audit_4big_gen.py— CLIbuild/validate· 9 familles d'invariants.quality.schema.json— contrat de sortie draft-07.out/{quality_report,MANIFEST}.json(hand-off) ·tests/test_audit_4big.py(34 tests dont 15 injections négatives sur arbre de module synthétique) ·README.md·.gitignore.
Fichiers modifiés
.gitea/workflows/ci.yml: jobqa-audit-4big-tests+ ajout augate.
Anti-invention (cœur · #6)
Une note ne peut pas être fabriquée « pour faire 95 » : elle est recalculée
à partir de faits vérifiables (présence de fichiers, taille, comptage test_*,
validité JSON du hand-off). Un invariant re-somme les poids et recompute la
note de chaque module — une note qui ne se déduit pas de ses checks est rejetée
(INV6). L'auditeur est hors de son propre périmètre (SoD · INV4). Le seuil
95 est repris verbatim de CLAUDE.md #5 ; aucun chiffre de projet n'est touché.
Renormalisation par archétype
| Archétype | Critères applicables | Modules |
|---|---|---|
generator |
DOC·CONTRAT·TESTS·CLI·HANDOFF | 13 |
data_room |
DOC·CONTRAT·TESTS·CLI | 2 (faisabilité generator, bancable) |
parser |
DOC·TESTS·CLI | 1 (publiciste) |
contract |
DOC·CONTRAT·TESTS | 1 (rbac) |
Résultat
Verdict PASS — 17/17 modules à 100/100 (min 100), pass-rate 100 %,
couverture 100 % des livrables gated (hors auditeur). Valeur durable : gate
anti-régression — retirer des tests, casser un MANIFEST ou supprimer un schéma
fait chuter le module sous 95 → FAIL (démontré par 15 tests négatifs).
Vérifications
- 34/34 tests du module ;
build+validateverts. - Gate CI local vert : guard contraintes · JSON bien formés · liens docs · YAML OK.
- Régression 442 tests verts au total (408 → +34) ; build déterministe.
Hors périmètre worker (VPS · #8)
Publication du rapport dans le desk ERPNext + branchement du gate 4Big sur le pipeline de release VPS → agent QA / DevOps.