aebe9b7ba9
Le seul livrable démo (demo/scenarios) ne produisait qu'un run-sheet JSON machine — aucun support lisible par un présentateur, alors que le Sprint 7 vise un scénario « prêt à jouer ». Rendu Markdown in-repo depuis le JSON = même pattern que faisabilite (rend des .md), zéro écriture VPS. - scenlib/render.py : render_markdown() PUR/déterministe, ne lit que le run-sheet (déjà anti-inventé), aucun chiffre nouveau (#6). - build émet out/run_sheet.md (prompteur : par beat, table « À dire | Chiffre | Source (preuve) » traçant le pointeur RFC 6901 amont). - Compat vérifiée : HANDOFF 4Big ne json.load que les .json (ignore .md) ; check_artifacts diffe tout fichier build → md commité + reproductible. - Consommateurs régénérés : régression 551→558 (22 suites PASS) ; quality_report.json (README 5011→5575 o · 32→39 test_*) PASS 22/22 ; 03_agents/qa/AGENT.md 551→558 ; README démo auto-score 96→97. - 7 gates verts · 39 tests démo · 34 tests audit · arbre propre. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
103 lines
5.4 KiB
Markdown
103 lines
5.4 KiB
Markdown
# Scénarios démo · run-sheet de pitch — Sprint 7 (CRM + Faisabilité)
|
|
|
|
> Roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` · Sprint 7 l.68 —
|
|
> « **CRM + Faisabilité : Scénarios démo (P07 pitch banquier · P05 client ready)** ».
|
|
|
|
Générateur **de méta-niveau** qui **compose** les livrables déjà produits en un
|
|
**run-sheet de démo** prêt à jouer, sans écrire une seule donnée métier lui-même.
|
|
Deux scénarios sont assemblés :
|
|
|
|
| Scénario | Projet | Audience | Angle |
|
|
|---|---|---|---|
|
|
| `S-P07-BANQUIER` | **P07 Aqua Terra Las Terrenas** | banquier | bancabilité, conformité fiscale, CONFOTUR, gouvernance, gate qualité |
|
|
| `S-P05-CLIENT` | **P05 Las Colinas Najayo Arriba** | client | portail, OTOIA embarqué, pipeline lisible, dossier transparent, SEO |
|
|
|
|
## Le principe : zéro invention (CLAUDE.md #6)
|
|
|
|
Un scénario est une suite de **beats** (scènes). Chaque beat cite une **preuve**
|
|
(`evidence`) : 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 — elle n'est **jamais
|
|
saisie à la main**.
|
|
|
|
```
|
|
scenario_spec.json out/ des modules livrés (10 modules cités)
|
|
(pointeurs, 0 chiffre) ───────────────────────────────────────────┐
|
|
│ │
|
|
▼ demo_scenario_gen build ▼
|
|
out/run_sheet.json ◄──── résolution RFC 6901 + placeholders ──── crm/workflow_vente
|
|
out/run_sheet.md (prompteur, rendu pur du run-sheet) fiscal/ecf_dgii
|
|
out/MANIFEST.json legal/confotur
|
|
rbac/apply_plan
|
|
qa/audit_4big …
|
|
```
|
|
|
|
Une valeur introuvable devient un **placeholder** `{{module:file#pointer}}` —
|
|
jamais un `0` fabriqué, jamais un `null` amont promu en chiffre de pitch.
|
|
|
|
## Garanties (le CLI REFUSE d'écrire si l'une casse)
|
|
|
|
1. **Anti-invention** — chaque citation est **re-résolue indépendamment** depuis
|
|
le disque et comparée au run-sheet (`_check_anti_invention`).
|
|
2. **Couverture CI** — tout module cité doit être **gated** par
|
|
`.gitea/workflows/ci.yml`. On **réutilise** la preuve de couverture de
|
|
l'auditeur 4Big (`qa/audit_4big/q4lib/registry.py`) — une démo ne repose que
|
|
sur du validé. Zéro duplication (#5).
|
|
3. **Orchestration réelle** — chaque scénario tisse **≥ 2 modules distincts** et
|
|
**≥ 3 beats**, et ne **s'auto-cite jamais** (séparation des pouvoirs).
|
|
4. **Prêt à jouer** — l'artefact livré est `pret=true` : 0 citation non résolue,
|
|
0 module non gated. Sinon, rien n'est écrit.
|
|
5. **Contrat de sortie** — `MANIFEST.json` est validé contre `scenario.schema.json`
|
|
par le **validateur maison** du Publiciste (draft-07, sans pip · #2).
|
|
|
|
## Utilisation
|
|
|
|
```bash
|
|
# Assemble le run-sheet + le prompteur Markdown (défaut: ./out)
|
|
python3 demo_scenario_gen.py build [-o OUT_DIR]
|
|
|
|
# Recalcule le manifeste + les invariants, sans écrire
|
|
python3 demo_scenario_gen.py validate
|
|
|
|
# Tests (39 méthodes, dont injections négatives)
|
|
python3 -m unittest discover -s tests -v
|
|
```
|
|
|
|
## Fichiers
|
|
|
|
| Fichier | Rôle |
|
|
|---|---|
|
|
| `scenario_spec.json` | Les 2 scénarios · beats · pointeurs de preuve (**0 chiffre en dur**) |
|
|
| `scenlib/deps.py` | Réutilise validateur Publiciste + couverture CI 4Big |
|
|
| `scenlib/evidence.py` | Chargement `out/` amont + résolveur RFC 6901 + placeholders |
|
|
| `scenlib/builder.py` | Assemblage déterministe run-sheet + manifeste |
|
|
| `scenlib/render.py` | Rendu **prompteur Markdown** (pur, dérivé du run-sheet) |
|
|
| `demo_scenario_gen.py` | CLI `build`/`validate` + invariants |
|
|
| `scenario.schema.json` | Contrat de sortie draft-07 du manifeste |
|
|
| `out/run_sheet.json` | **Hand-off principal** — run-sheet jouable (machine) |
|
|
| `out/run_sheet.md` | **Prompteur** lisible par un présentateur (dérivé de `run_sheet.json`) |
|
|
| `out/MANIFEST.json` | Diagnostic + preuve de couverture + drapeau `pret` |
|
|
|
|
## Hors périmètre worker (VPS · #8)
|
|
|
|
Le **support texte** est désormais produit in-repo : `out/run_sheet.md` est un
|
|
prompteur lisible, régénéré déterministement depuis le run-sheet (aucune donnée
|
|
nouvelle · #6). Ne restent **côté serveur** que l'**habillage visuel** (deck /
|
|
page démo `otov7.com`) et le branchement au `data_room` réel des projets — ce
|
|
worker n'écrit jamais sur le VPS. Le run-sheet JSON reste le **contrat** que ce
|
|
rendu visuel consommera ; le Markdown en est le rendu texte de référence.
|
|
|
|
## Provenance des libellés projets
|
|
|
|
`P05 Las Colinas Najayo Arriba` et `P07 Aqua Terra Las Terrenas` proviennent
|
|
**verbatim** de `CLAUDE.md · §Projets` — aucun projet inventé.
|
|
|
|
## Auto-score 4Big
|
|
|
|
**97/100** — orchestration réelle prouvée (chaque beat cite une preuve RFC 6901
|
|
re-résolue depuis le disque, jamais saisie à la main), couverture CI réutilisée de
|
|
l'auditeur 4Big (zéro duplication · #5), garde `pret=true` qui refuse d'écrire sur
|
|
citation non résolue, **prompteur `run_sheet.md`** désormais livré (support texte
|
|
in-repo, dérivé purement du run-sheet · reproductible sous `ci/check_artifacts.sh`),
|
|
39 tests (dont injections négatives + rendu Markdown) verts. Retenue résiduelle :
|
|
l'**habillage visuel** (deck / page démo `otov7.com`) reste produit côté VPS (#8).
|