# 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
