[DTP-Worker] Sprint 7 · Générateur Audit 4Big qualité (95+/100 sur 100% deliverables) (QA · roadmap L69)

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>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 10:11:02 +00:00
parent 17ad5c0a01
commit a517619432
17 changed files with 2157 additions and 1 deletions
@@ -0,0 +1,91 @@
# 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