[DTP-Worker] Sprint 8 · buffer L60 · Domaine CRM/dossier_vente (2e surface) : le CATALOGUE de projets du DocType porteur (« Projet (Select P01..P09 ancré sur CLAUDE.md) ») était ANCRÉ à CLAUDE.md EN PROSE sans AUCUN gate d'IDENTITÉ. Le bloc CRM pipeline existant ne recompute que le COMPTE d'états (« les 9 états du pipeline ») du MÊME README — jamais la liste des projets. Ce catalogue est DATA-DERIVED : le champ Select projet de crm/dossier_vente/out/doctype_oto_dossier_vente.json (byte-gaté par check_artifacts) porte l'ensemble ORDONNÉ des 9 options (P01 Structure … P09 1069 Crisfer), transcription de la section « ## Projets » de CLAUDE.md (source faisant autorité · contraintes #6/#7). PIÈGE : check_artifacts ne prouve QUE DocType==spec (byte-for-byte), et la spec RECOPIE elle-même le catalogue — donc TOUTE la chaîne (spec → DocType) peut DÉRIVER de CLAUDE.md en restant BYTE-VERTE. RENOMMER un projet (P03 Nakua → P03 Nakua Bay) · en AJOUTER un (P10) · en RETIRER un laisse le Select périmé, contredisant silencieusement CLAUDE.md pendant que la prose « ancré sur CLAUDE.md » devient FAUSSE — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de builder, pas l'ancrage à CLAUDE.md) n'attrape → nouveau bloc recomputant le catalogue depuis « ## Projets » de CLAUDE.md (zéro duplication · source unique · même esprit que le roadmap-anchor INV11 qui ancre les roadmap_line au fichier roadmap) et exigeant que les options du Select l'égalent EXACTEMENT (set-diff absent ET en trop, PUIS ordre · NFC) + que la prose porte la plage P01..P<dernier> + le mot d'ancrage. Cohérences croisées en bonus (mordent un catalogue CLAUDE.md internement incohérent) : catalogue NON VIDE, codes SANS DOUBLON et CONTIGUS depuis P01. Un claim absent échoue AUSSI. 6 morsures vérifiées : CLAUDE.md rename P03 Nakua→P03 Nakua Bay (Select DÉRIVE : absents=[P03 Nakua Bay] en trop=[P03 Nakua]) · CLAUDE.md +P10 (Select absents=[P10 …] + README dit P01..P09 MAIS catalogue P01..P10) · DocType réordonné (bon ENSEMBLE mais ORDRE ≠) · DocType renomme 1 libellé (P07 Aqua Terra Las Terrenas→P07 Aqua Terra) · README plage P01..P09→P01..P08 · README ancrage supprimé (claim INTROUVABLE) ; restauré = green : Select projet == CLAUDE.md (9 projets, ordre inclus) · plage P01..P09 + ancrage · catalogue contigu · exit 0. État courant : aucun projet périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail « catalogue de projets ancré sur CLAUDE.md ») mis à jour · 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 18:38:10 +00:00
parent 607b22282b
commit 7b775677a6
3 changed files with 168 additions and 1 deletions
+60
View File
@@ -1,5 +1,65 @@
# Activity Log · 2026-07-31 · Claude Code DTP
## Session `20260731_183124` · Buffer S8 · Domaine CRM/dossier_vente (2ᵉ surface) : le **catalogue de projets** du DocType porteur (« Projet (`Select` **P01..P09** ancré sur CLAUDE.md) ») était **ancré à CLAUDE.md EN PROSE** sans AUCUN gate d'identité — le bloc CRM pipeline existant ne recompute que le COMPTE d'états (« les **9 états** du pipeline ») du même README.
**Tâche** : **Sprint 8 · buffer L60** (DevOps CI/CD · QA). Roadmap fonctionnellement
close ; poursuite de la série anti-dérive (CLAUDE.md #6). Cette session cible une
**2ᵉ surface data-derived du README `crm/dossier_vente`** — le champ `Select`
`projet` du DocType porteur, dont les 9 options (`P01 Structure``P09 1069
Crisfer`) sont une transcription de la section « ## Projets » de CLAUDE.md, jamais
ANCRÉE par aucun gate.
**Dérive silencieuse fermée** :
- `05_deliverables_mvp/crm/dossier_vente/README.md:46` : « Projet (`Select`
**P01..P09** ancré sur CLAUDE.md) » ; `doctype_spec.json` `_comment` : « les
Select `projet`/`devise` sont ancrés sur CLAUDE.md … pas inventés ».
- Source faisant autorité : la section **« ## Projets » de CLAUDE.md** (contraintes
#6/#7 · liste canonique des projets). Le DocType (`out/doctype_oto_dossier_vente.json`,
byte-gaté par `check_artifacts`) porte l'ensemble ORDONNÉ des 9 options.
- `check_artifacts` ne prouve QUE _DocType == spec_ (byte-for-byte) ; la spec recopie
elle-même le catalogue → **toute la chaîne (spec → DocType) peut DÉRIVER de
CLAUDE.md en restant byte-verte** : **RENOMMER** un projet (`P03 Nakua``P03
Nakua Bay`), en **AJOUTER** (`P10`) ou en **RETIRER** un laisse le Select périmé,
contredisant silencieusement CLAUDE.md pendant que la prose « ancré sur CLAUDE.md »
devient FAUSSE — « vert trompeur » qu'aucune suite `tests/` (qui teste des FONCTIONS
de builder, pas l'ancrage à CLAUDE.md) n'attrape.
- **État courant** : **aucun projet périmé** — les 9 options recoupent CLAUDE.md
exactement (anti-invention #6, rien à réécrire). Le défaut est la **surface ungated**.
**Nouveau bloc dans `ci/check_readme_claims.sh`** : recompute le catalogue depuis
« ## Projets » de CLAUDE.md (zéro duplication · source unique · même esprit que le
**roadmap-anchor** INV11) et exige que les options du `Select` `projet` l'égalent
**exactement** (set-diff absent ET en trop, **puis ordre** · NFC), plus la plage
`P01..P<dernier>` + le mot d'ancrage dans le README. Cohérences croisées en bonus
(mordent un catalogue CLAUDE.md internement incohérent) : catalogue **non vide,
sans doublon et contigu** depuis `P01`. Un claim absent échoue AUSSI.
### Preuve (6 morsures vérifiées + restauration verte)
| Injection | Résultat |
|---|---|
| CLAUDE.md `P03 Nakua → P03 Nakua Bay` (DocType stale) | ✗ Select DÉRIVE : absents=`[P03 Nakua Bay]` en trop=`[P03 Nakua]` · exit 1 |
| CLAUDE.md `+P10` (catalogue grandit) | ✗ Select absents=`[P10 …]` + README dit P01..P09 MAIS catalogue P01..P10 · exit 1 |
| DocType Select réordonné (bon ensemble, ordre ≠) | ✗ bon ENSEMBLE mais ORDRE ≠ CLAUDE.md · exit 1 |
| DocType renomme 1 libellé (`P07 Aqua Terra Las Terrenas → P07 Aqua Terra`) | ✗ Select DÉRIVE : absents/en trop · exit 1 |
| README plage `P01..P09 → P01..P08` | ✗ README dit P01..P08 MAIS catalogue P01..P09 · exit 1 |
| README ancrage supprimé (reformulé) | ✗ claim « Projet (`Select` P01..P09 ancré sur CLAUDE.md) » INTROUVABLE · exit 1 |
| restauré | ✓ Select `projet` == CLAUDE.md (9 projets, ordre inclus) · plage P01..P09 + ancrage · catalogue contigu · exit 0 |
- **`ci/README.md`** — surface ajoutée à la table récap du pipeline + paragraphe
descriptif (« catalogue de projets ancré sur CLAUDE.md »).
Suite CI complète re-verte (7 gates) : `guard_constraints` · `validate_json` ·
`check_docs` · `check_artifacts` · `check_regression` · `check_ci_integrity` ·
`check_readme_claims`.
**Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact).
**Auto-score 4Big** : 96/100.
---
## Session `20260731_180119` · Buffer S8 · Domaine SEO (3e surface) : la **carte hreflang** (« carte `alternate` **FR/EN/ES** + `x-default` par page ») était décrite EN PROSE dans le README du module `seo` sans AUCUN gate d'IDENTITÉ — les deux blocs SEO existants gatent le COMPTE de mots-clés (artefact `seo_keywords`) et les `@type` du graphe schema.org (artefact `seo_schema_org`), jamais le jeu de langues hreflang qui vit dans un **troisième** artefact.
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA). Roadmap fonctionnellement