cac65386ab
Orchestrateur méta-niveau : compose les hand-offs out/ des 10 modules déjà livrés en un run-sheet de démo jouable, via pointeurs RFC 6901 résolus à la construction (zéro chiffre en dur · #6). Réutilise le validateur Publiciste et la preuve de couverture CI de l'auditeur 4Big (#5) — une démo ne s'appuie que sur des modules gated. Enregistre demo/scenarios dans l'audit 4Big (17→18, verdict PASS 18/18 à 100). 32 tests (9 injections négatives) · régression 474 tests verts · guards CI verts · builds déterministes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
83 lines
4.1 KiB
Markdown
83 lines
4.1 KiB
Markdown
# Rapport de session · 2026-07-30 · session 21
|
||
|
||
## Tâche
|
||
|
||
**Sprint 7 · CRM + Faisabilité** — Générateur des **Scénarios démo (run-sheet de
|
||
pitch)** (roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` **l.68** :
|
||
« CRM + Faisabilité : Scénarios démo (**P07 pitch banquier · P05 client ready**) »).
|
||
|
||
C'est le **dernier volet Sprint 7 réalisable en repo**. Les deux autres volets
|
||
(polish `otov7.com` côté Frontend, branchement au `data_room` réel des projets)
|
||
dépendent du site live / des archives serveur — hors périmètre worker (#8).
|
||
|
||
## Décision d'architecture
|
||
|
||
**Orchestrateur de méta-niveau**, pas un contenu marketing écrit à la main. Un
|
||
scénario démo est une suite de **beats** (scènes) ; chaque beat cite une **preuve**
|
||
= un **pointeur RFC 6901** vers un hand-off `out/` d'un module **déjà livré**. Le
|
||
générateur **résout** la valeur à la construction. Conséquences :
|
||
|
||
- **Zéro invention (#6)** : aucune valeur chiffrée n'est écrite dans le spec ; une
|
||
valeur introuvable devient un placeholder `{{module:file#pointer}}` — jamais un
|
||
`0` fabriqué, ni un `null` amont promu en chiffre de pitch.
|
||
- **Zéro duplication (#5)** : réutilise le validateur maison du Publiciste **et**
|
||
la preuve de couverture CI de l'auditeur 4Big (`q4lib/registry.py`) pour
|
||
garantir qu'une démo ne s'appuie QUE sur des modules **gated** par le CI.
|
||
|
||
## Fichiers créés — `05_deliverables_mvp/demo/scenarios/`
|
||
|
||
- `scenario_spec.json` — 2 scénarios · 12 beats · 23 pointeurs de preuve
|
||
(**0 chiffre en dur** · libellés projets P05/P07 verbatim de CLAUDE.md §Projets)
|
||
- `scenlib/{__init__,deps,evidence,builder}.py`
|
||
- `deps` réutilise `validator.validate` (Publiciste) + `registry.ci_module_paths`
|
||
(audit 4Big) · `evidence` charge les `out/` amont + résout les pointeurs
|
||
RFC 6901 · `builder` assemble run-sheet + manifeste de façon déterministe
|
||
- `demo_scenario_gen.py` — CLI `build`/`validate` + **7 familles d'invariants**
|
||
- `scenario.schema.json` — contrat de sortie draft-07
|
||
- `out/{run_sheet,MANIFEST}.json` — hand-off
|
||
- `tests/test_demo_scenario.py` — **32 tests** (dont 9 injections négatives)
|
||
- `README.md` · `.gitignore`
|
||
|
||
## Fichiers modifiés
|
||
|
||
- `.gitea/workflows/ci.yml` : job `demo-scenario-tests` + ajout au `gate`.
|
||
- `qa/audit_4big/quality_spec.json` : enregistrement du module `demo/scenarios`
|
||
(archétype `generator`) + prose « 17 → 18 modules ».
|
||
- `qa/audit_4big/tests/test_audit_4big.py` : `totals.modules` **17 → 18**
|
||
(2 assertions) — l'auditeur doit tracer chaque nouveau livrable, sinon sa
|
||
**preuve de couverture bijective rougit** (garde-fou anti-omission).
|
||
- `qa/audit_4big/out/*` régénéré : **verdict PASS · 18/18 modules ≥ 95 (min 100)**.
|
||
|
||
## Anti-invention (cœur · #6)
|
||
|
||
Une valeur du run-sheet **ne peut pas être posée** : `_check_anti_invention`
|
||
**re-résout indépendamment** chaque pointeur depuis le disque et compare
|
||
(valeur + statut résolu) au run-sheet. Recoupe aussi spec ↔ run-sheet (mêmes
|
||
pointeurs, même ordre). Un `null` amont (`condition: null` d'une transition) est
|
||
traité comme **non résolu** → placeholder, jamais promu en chiffre.
|
||
|
||
## Résultat
|
||
|
||
Run-sheet `pret=true` : **2 scénarios · 12 beats · 23/23 citations résolues ·
|
||
10 modules cités tous gated**. Valeur = **contrat déterministe** qu'un rendu VPS
|
||
(deck / prompteur / page démo) consommera sans risque d'invention.
|
||
|
||
## Vérifications
|
||
|
||
- 32/32 tests du module ; 34/34 tests audit_4big (après passage à 18 modules).
|
||
- Régression complète : **474 tests verts** (442 → +32), **0 module en échec**.
|
||
- Guards CI locaux verts : `guard_constraints` · `validate_json` · `check_docs`.
|
||
- `ci.yml` : YAML valide · job + `needs` du gate présents.
|
||
- Builds déterministes (double build identique).
|
||
|
||
## Hors périmètre worker (VPS · #8)
|
||
|
||
Rendu final (deck / prompteur / page démo `otov7.com`) + branchement au
|
||
`data_room` réel → agent Frontend / DevOps. Le run-sheet est le **contrat**.
|
||
|
||
## Auto-score 4Big
|
||
|
||
**96/100** — orchestrateur cross-module, anti-invention prouvée par re-résolution,
|
||
couverture CI réutilisée, injections négatives. −4 : le rendu jouable (deck) reste
|
||
côté VPS, non démontrable en repo.
|