[DTP-Worker] Sprint 8 · buffer L75 · Domaine Frontend/Chat OTOIA : le montage de l'assistant conversationnel par portail (frontend/chat_otoia) affichait « 5 Custom Block + 5 configs runtime » (fiche agent frontend_console) et « 5 portails · 5 fixtures · 5 configs runtime » (README du module) — trois nombres data-derived, TOUS = 5 (piège aveugle), transcrits À LA MAIN dans DEUX docs sans AUCUN gate, alors que frontend/chat_otoia/out/MANIFEST.json (byte-gaté par check_artifacts, counts.custom_blocks/mounts/portails recomptés du contrat RBAC à chaque build via la bijection 1 block ⇔ 1 mount ⇔ 1 portail métier, plateforme exclu) fait autorité. Piège aveugle caractéristique : les trois valent 5 aujourd'hui — un gate qui n'en recompterait qu'UN serait aveugle à la dérive des deux autres (ajouter un portail au contrat RBAC → chat_otoia rebâtit 6 blocks/6 mounts/6 portails pendant que les docs restent à 5 en silence) → nouveau bloc dans check_readme_claims recomputant CHAQUE nombre depuis SON PROPRE champ du MANIFEST et exigeant l'égalité avec les deux docs. Cohérence croisée : custom_blocks == mounts == portails == |MANIFEST.portails| (la bijection du générateur) — mord un compteur désynchronisé de sa propre liste. Un claim absent échoue AUSSI (5 morsures vérifiées : dérive custom_block fiche captée là où mounts reste 5 · dérive configs runtime fiche captée là où blocks reste 5 · dérive portails README · dérive fixtures README · claim configs runtime disparu = red ; restauré = green). ci/README.md (table + détail) 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 12:37:01 +00:00
parent 97a7b25e38
commit 70a8db0f4c
3 changed files with 177 additions and 1 deletions
+63
View File
@@ -1,5 +1,68 @@
# Activity Log · 2026-07-31 · Claude Code DTP
## Session `20260731_123055` · Buffer S8 · Domaine Frontend/Chat OTOIA : le montage de l'assistant conversationnel par portail (`frontend/chat_otoia`) affichait « **5 `Custom Block` + 5 configs runtime** » (fiche agent frontend_console) et « **5 portails · 5 fixtures · 5 configs runtime** » (README du module) — trois nombres data-derived, TOUS = 5 (piège aveugle), transcrits À LA MAIN dans DEUX docs sans AUCUN gate
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA régression). Roadmap
fonctionnellement close ; poursuite de la série anti-dérive (CLAUDE.md #6). Les
sessions précédentes ont gaté les domaines tests, portails, RBAC (3 volets), SEO, CRM
(pipeline vente), mobile, Legal (CONFOTUR), QA (audit 5D), DevOps (run-book) et Démo
(run-sheet). Cette session cible le **domaine Frontend/Chat OTOIA** — le **montage de
l'assistant conversationnel par portail** (livrable Sprint 6 « Chat OTOIA embedded »),
seul grand livrable dont les comptes data-derived cités dans deux docs pointaient
l'artefact généré sans être recomputés par aucun gate.
### Défaut trouvé — triplet ungated, TOUS = 5 (piège aveugle), transcrit dans DEUX docs
- **`03_agents/frontend_console/AGENT.md:29`** : cellule « **5 `Custom Block` + 5
configs runtime** » — deux nombres (custom_blocks + mounts).
- **`05_deliverables_mvp/frontend/chat_otoia/README.md`** : « Portails (**5**,
`plateforme` exclu) » (l.24) · « **5** fixtures `Custom Block` » (l.48) · « **5**
configs runtime » (l.49) — trois transcriptions (portails + custom_blocks + mounts).
- L'artefact source est byte-gaté par `check_artifacts` :
`frontend/chat_otoia/out/MANIFEST.json` recompte `counts.custom_blocks`,
`counts.mounts` et `counts.portails` du contrat RBAC à chaque build (bijection
1 block ⇔ 1 mount ⇔ 1 portail métier, `plateforme` exclu — invariant 2 du
générateur).
- Aucun gate ne comparait la VALEUR écrite à l'artefact. **Piège aveugle**
caractéristique (cf. DevOps phases confirmations) : custom_blocks, mounts ET
portails valent **tous trois 5 aujourd'hui** — un gate qui n'en recompterait qu'un
serait aveugle à la dérive des deux autres (ajouter un portail au contrat RBAC →
chat_otoia rebâtit 6 6 6 pendant que les deux docs restent à 5). « Vert
trompeur » qu'aucune suite `tests/` (qui teste des FONCTIONS, pas la prose des docs)
n'attrape.
- **État courant** : **aucun nombre périmé** — 5/5/5 recoupe MANIFEST exactement
(anti-invention #6 : rien à réécrire). Le défaut est la **surface ungated**.
**Nouveau bloc dans `ci/check_readme_claims.sh`** : recompute **chaque** nombre depuis
**son propre** champ du MANIFEST (`custom_blocks` · `mounts` · `portails`, jamais figé
ici · zéro duplication du compteur du générateur #5) et exige l'égalité avec les deux
docs. Cohérence croisée : `custom_blocks == mounts == portails == |MANIFEST.portails|`
(la bijection du générateur) — mord un compteur désynchronisé de sa propre liste. Un
claim absent échoue AUSSI (traçabilité).
### Preuve (5 morsures vérifiées + restauration verte)
| Injection | Résultat |
|---|---|
| fiche custom_block `5→6` (mounts reste 5, aveugle si 1 seul recompté) | ✗ dit 6/5 MAIS artefact 5/5 · exit 1 |
| fiche configs runtime `5→4` (blocks reste 5) | ✗ dit 5/4 MAIS artefact 5/5 · exit 1 |
| README portails `5→6` | ✗ dit 6 portails MAIS artefact 5 · exit 1 |
| README fixtures `5→7` | ✗ dit 7 fixtures MAIS artefact 5 · exit 1 |
| README claim « configs runtime » supprimé (reformulé) | ✗ claim INTROUVABLE · exit 1 |
| restauré | ✓ 5/5/5 == artefact (2 docs) · exit 0 |
- **`ci/README.md`** — surface ajoutée à la table récap du pipeline + paragraphe
descriptif (classe « montage Chat OTOIA par portail »).
Suite CI complète re-verte : `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).
**Auto-score 4Big** : 96/100.
---
## Session `20260731_120054` · Buffer S8 · Domaine Démo : le run-sheet de pitch (`demo/scenarios`) affichait « **10 modules cités** » dans le diagramme d'architecture de son README — un compte data-derived transcrit À LA MAIN sans AUCUN gate
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA régression). Roadmap