# 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 (chacun `source`-é vers roadmap + job CI). - `q4lib/{__init__,deps,registry,criteria,scoring,builder}.py` : - `deps` **réutilise** (#5) le validateur maison Publiciste (zéro pip). - `registry` parse `ci.yml` (YAML minimal stdlib) et **prouve** la couverture bijective registre ↔ CI + alimentation du `gate`. - `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éthodes `test_*`), `CLI` (`__main__` + argparse), `HANDOFF` (`out/MANIFEST.json` + artefact JSON valide non vide). - `scoring` renormalise 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). - `builder` assemble couverture + notes + totaux + verdict. - `audit_4big_gen.py` — CLI `build`/`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` : job `qa-audit-4big-tests` + ajout au `gate`. ## 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` + `validate` verts. - 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. ## Auto-score 4Big : 96/100