[DTP-Worker] Sprint 8 · buffer · Démo/scenarios (2e surface) : la TABLE des scénarios — les trois colonnes d'IDENTITÉ (id · projet+libellé · audience) étaient NON GATÉES

Le README `demo/scenarios` porte une table « Scénario | Projet | Audience | Angle »
(README:10-13). Le bloc « Démo » existant de check_readme_claims ne gate QUE
counts.modules_cites_uniques (le compte de modules du diagramme) — ses trois colonnes
d'identité étaient des WILDCARDS, et les libellés projets sont déclarés (README:91-92)
« proviennent verbatim de CLAUDE.md · §Projets » sans AUCUN ancrage vérifié.

Ces colonnes sont DATA-DERIVED de out/run_sheet.json.scenarios[] (id · projet ·
projet_libelle · audience), byte-gaté par check_artifacts. Le générateur ne saisit
aucune donnée métier (résolution RFC 6901 depuis le disque) ; mais check_artifacts
ne prouve QUE run_sheet==build (byte-for-byte) et la source scenario_spec.json (map
projets) recopie les libellés À LA MAIN → toute la chaîne peut DÉRIVER de CLAUDE.md
en restant byte-verte. PREUVE : classer P07 sous audience=client dans le README →
check_readme_claims EXIT 0 (le gate ne voyait que 10==10 modules). Un couple
projet/audience faux ferait pitcher au présentateur le mauvais scénario — le risque
même que la run-sheet veut éliminer — « vert trompeur » qu'aucune suite tests/ (qui
teste des FONCTIONS de résolution, pas la prose) n'attrape.

Nouveau bloc « Démo scénarios » dans ci/check_readme_claims.sh : (1) ANCRAGE — chaque
`P{code} {libellé}` du run_sheet == entrée « ## Projets » de CLAUDE.md (verbatim ·
source unique · même esprit que le catalogue projets dossier_vente) ; (2) TABLE —
chaque ligne porte EXACTEMENT id + `P{code} {libellé}` + audience (fin du wildcard ·
patron identique à la colonne « Type » de roleprofile_gen) ; (3) IDENTITÉ d'ensemble
— {ids des lignes} == {ids du run_sheet} == counts.scenarios (aucune ligne FANTÔME,
aucun scénario MANQUANT). Cohérences croisées en bonus (mordent un artefact
INTERNEMENT incohérent) : run_sheet ↔ MANIFEST d'accord sur (id,projet,audience) ·
id == S-{projet}-{AUDIENCE} · counts.scenarios == |scenarios| · ids non vides/sans
doublon. Un claim absent échoue AUSSI.

8 morsures vérifiées : prose renomme un id (INTROUVABLE) · prose classe P07 sous
audience=client · prose met le mauvais libellé projet · ligne FANTÔME S-P99-GHOST
(en trop) · artefact libellé « Aqua Terra Bay » DÉRIVE de CLAUDE.md · run_sheet↔
MANIFEST désync audience · counts.scenarios=3 (≠|scenarios|=2) · ligne S-P05-CLIENT
supprimée (MANQUANT) ; restauré = green : 2 lignes == run_sheet == counts (2) ·
libellés == CLAUDE.md §Projets · exit 0. État courant : aucune valeur périmée
(anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md
(table + détail « 2e surface demo/scenarios ») mis à jour · working tree byte-restauré
· 7 gates re-verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-31 21:38:27 +00:00
parent 6f2a3c57ae
commit c2222c83b6
3 changed files with 187 additions and 1 deletions
+42
View File
@@ -2405,3 +2405,45 @@ verrouillés) · `guard_constraints` · `validate_json`.
`check_regression` · `guard_constraints` · `validate_json`).
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo).
- **Auto-score 4Big** : 96/100.
## Sprint 8 · buffer · Démo/scenarios (2e surface) · la TABLE des scénarios · identité (id · projet+libellé · audience)
- **Constat** : le README `demo/scenarios` porte une table « Scénario | Projet |
Audience | Angle » (README:10-13) dont les **trois colonnes d'identité** sont
data-derived : `id` (`S-P07-BANQUIER`), `projet`+`projet_libelle`
(`P07` + `Aqua Terra Las Terrenas`) et `audience` (`banquier`). Le bloc « Démo »
existant de `check_readme_claims.sh` ne gate QUE `counts.modules_cites_uniques`
(le compte de modules du diagramme) — ces colonnes étaient des **wildcards**. Les
libellés projets sont même déclarés (README:91-92) « proviennent **verbatim** de
CLAUDE.md · §Projets » sans AUCUN ancrage vérifié.
- **Data-derived** : `out/run_sheet.json.scenarios[]` (`id`/`projet`/
`projet_libelle`/`audience`), byte-gaté par `check_artifacts`. Le générateur ne
saisit aucune donnée métier (résolution RFC 6901 depuis le disque). `check_artifacts`
ne prouve QUE `run_sheet==build` (byte-for-byte) ; la source `scenario_spec.json`
(map `projets`) recopie les libellés à la main → toute la chaîne peut DÉRIVER de
CLAUDE.md en restant byte-verte.
- **Preuve reproduite** : classer P07 sous `audience=client` dans le README →
`check_readme_claims` **exit 0** (le gate ne voyait que `10 == 10` modules).
- **Gate ajouté** (`ci/check_readme_claims.sh`, bloc « Démo scénarios ») : (1)
**ANCRAGE** — chaque `P{code} {libellé}` du run_sheet == entrée « ## Projets » de
CLAUDE.md (verbatim, source unique · même esprit que le catalogue projets
dossier_vente) ; (2) **TABLE** — chaque ligne porte EXACTEMENT id +
`P{code} {libellé}` + audience (fin du wildcard, patron identique à la colonne
« Type » de roleprofile_gen) ; (3) **IDENTITÉ d'ensemble** — {ids des lignes} ==
{ids du run_sheet} == `counts.scenarios` (aucune ligne FANTÔME, aucun scénario
MANQUANT). Cohérences croisées en bonus (mordent un artefact INTERNEMENT
incohérent) : `run_sheet` ↔ `MANIFEST` d'accord sur `(id, projet, audience)` ·
`id == S-{projet}-{AUDIENCE}` · `counts.scenarios == |scenarios|` · ids non vides
et sans doublon. Un claim absent échoue AUSSI.
- **8 morsures vérifiées** : prose renomme un id (INTROUVABLE) · prose classe P07
sous audience=client · prose met le mauvais libellé projet · ligne FANTÔME
`S-P99-GHOST` (en trop) · artefact libellé « Aqua Terra Bay » DÉRIVE de CLAUDE.md ·
`run_sheet`↔`MANIFEST` désync audience · `counts.scenarios=3 (≠|scenarios|=2)` ·
ligne `S-P05-CLIENT` supprimée (MANQUANT). Restauré = green : 2 lignes ==
run_sheet == counts (2) · libellés == CLAUDE.md §Projets · exit 0.
- **État courant** : aucune valeur périmée (anti-invention #6, rien à réécrire) — le
défaut est la surface **ungated**. `ci/README.md` (table + détail « 2ᵉ surface
`demo/scenarios` ») mis à jour · working tree byte-restauré · **7 gates re-verts**
(`check_readme_claims` · `check_artifacts` · `check_docs` · `check_ci_integrity` ·
`check_regression` · `guard_constraints` · `validate_json`).
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo).
- **Auto-score 4Big** : 96/100.