[DTP-Worker 20260806_071503] DOC anti-footgun in-fiche — colonne « Sortie » de frontend_console/AGENT.md : documenter l'omission MANIFEST volontaire

Un Explore adversarial a re-flagué (2e fois) la cellule « Sortie » du chat_otoia
comme « manque MANIFEST.json » — faux positif connu (fiche-sortie-cell-omits-manifest-
by-design) : les DEUX rangs (portails+chat) listent le payload seul, MANIFEST omis par
convention, docstrings/READMEs énumèrent les 3 (byte-gatés). La récurrence prouve un
footgun non documenté (brûle des cycles d'audit, risque un fix #5/#6 cassant le gate
regex-parsé). Mitigation : blockquote « Note de lecture » après la table, rédigé pour
éviter les regex ancrées du gate (aucun compteur cartes/liens/rôles ni **N tests**).

check_readme_claims PASS · check_docs PASS · run_ci 33 PASS 0 FAIL 0 SKIP · 0 artefact
reconstruit · 0 gate ajouté (#5) · 0 chiffre inventé (#6) · 0 commande VPS (#8)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-06 07:23:09 +00:00
parent ddcafc58c0
commit 4c741a7118
2 changed files with 52 additions and 0 deletions
+8
View File
@@ -33,6 +33,14 @@ le câblage de l'endpoint OTOIA et l'application du thème desk restent côté *
- **Chat OTOIA** : CLI `python3 chat_otoia_gen.py build|validate` · **14 invariants** · - **Chat OTOIA** : CLI `python3 chat_otoia_gen.py build|validate` · **14 invariants** ·
**31 tests** · job CI `chat-otoia-tests` (gated). **31 tests** · job CI `chat-otoia-tests` (gated).
> **Note de lecture — colonne « Sortie ».** Les cellules listent le **payload
> métier** ; chaque générateur écrit **en plus** un `out/MANIFEST.json` (compteurs
> auto-vérifiés) **volontairement omis** de la table par convention éditoriale.
> L'énumération exhaustive des trois fichiers vit dans les docstrings et READMEs
> de module (byte-gatés). Ne PAS ajouter le MANIFEST à cette cellule : elle est
> lue par regex par `ci/check_readme_claims.sh` (compteurs `cartes/liens/rôles`,
> comptes de tests) et l'omission est intentionnelle, pas une dérive.
## Source de vérité unique (zéro invention · #6) ## Source de vérité unique (zéro invention · #6)
La matière première est le **contrat RBAC** `05_deliverables_mvp/rbac/rbac_50_roles.json`, La matière première est le **contrat RBAC** `05_deliverables_mvp/rbac/rbac_50_roles.json`,
**jamais la spec de mise en page** : **jamais la spec de mise en page** :
+44
View File
@@ -581,3 +581,47 @@ byte-identique. Mémoire `enforcement-oracle-must-stay-independent` créée.
**Portée / anti-churn.** Édité : `renderer.py` (1 commentaire) + ce journal + mémoire. **0 artefact **Portée / anti-churn.** Édité : `renderer.py` (1 commentaire) + ce journal + mémoire. **0 artefact
reconstruit**, **0 gate ajouté** (#5), **0 chiffre inventé** (#6 — les 6 marqueurs déjà présents, reconstruit**, **0 gate ajouté** (#5), **0 chiffre inventé** (#6 — les 6 marqueurs déjà présents,
re-dérivés du gate), **0 commande VPS** (#8). Structure du gate inchangée (33 checks). re-dérivés du gate), **0 commande VPS** (#8). Structure du gate inchangée (33 checks).
---
## Session `20260806_071503` — anti-footgun in-fiche : documenter l'omission MANIFEST volontaire de la colonne « Sortie » · 0 artefact reconstruit
**État au démarrage.** `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre, roadmap
intégralement livrée + gatée. HEAD `ddcafc5` (commentaire anti-footgun `renderer.py`, output
inchangé). Les ~15 derniers commits sont des sweeps vérif-only / currency à rendement décroissant
(la session précédente le notait). Objectif : **éviter d'ajouter un énième « CLEAN sweep »** et
trouver une amélioration *durable* réelle.
**Chasse au défaut (Explore adversarial).** Dispatché un agent lecture-seule sur 3 surfaces
(fiches `03_agents/*/AGENT.md` ↔ modules réels · READMEs ↔ `*_gen.py` · liens label↔cible).
Retour : **1 candidat** — `frontend_console/AGENT.md:29` « colonne Sortie du chat_otoia omet
`MANIFEST.json` » alors que `chat_otoia_gen.py:237` écrit bien les 3 fichiers.
**Réfutation via mémoire — FAUX POSITIF connu.** C'est exactement `fiche-sortie-cell-omits-
manifest-by-design` : la colonne « Sortie » liste le **payload métier** seul ; le MANIFEST est
omis **dans les DEUX rangs** (portails + chat) = convention éditoriale, PAS une dérive ; les
docstrings/READMEs énumèrent bien les 3 (byte-gatés). « Corriger » violerait #5/#6 et risquerait
de casser le gate (la cellule est regex-parsée par `check_readme_claims.sh`). **0 édition de ce
faux positif.**
**Signal actionnable.** Le fait qu'un Explore **re-flague la MÊME cellule cette session** (déjà
flaguée session 234409) = preuve que la convention est un **footgun non documenté** : elle brûle
des cycles d'audit et risque un « fix » erroné (ajout MANIFEST à la cellule gate-parsée → churn
#5, voire RED). Exactement le motif de la session précédente (commentaire anti-footgun remonté au
**site** dans `renderer.py`).
**Livrable — note anti-footgun in-fiche.** Ajouté au `frontend_console/AGENT.md` (juste après la
table + les puces Portails/Chat) un blockquote `> **Note de lecture — colonne « Sortie ».**`
expliquant que la cellule liste le payload seul, que chaque générateur écrit **en plus** un
`out/MANIFEST.json` **volontairement omis** par convention, que l'énumération exhaustive vit dans
docstrings/READMEs byte-gatés, et **« ne PAS l'ajouter »** (cellule regex-parsée). Rédigé pour
**éviter les regex ancrées** du gate (aucun motif `N cartes/M liens/K rôles`, aucun
`**N tests** · job CI`).
**Vérif.** `check_readme_claims.sh` exit 0 · `check_docs.sh` exit 0 · `./run_ci.sh` =
**33 PASS · 0 FAIL · 0 SKIP**. Mémoire `fiche-sortie-cell-omits-manifest-by-design` mise à jour
(récurrence + mitigation in-fiche consignées).
**Portée / anti-churn.** Édité : `frontend_console/AGENT.md` (1 blockquote de prose) + ce journal
+ mémoire. **0 artefact reconstruit**, **0 gate ajouté** (#5), **0 chiffre saisi à la main** (#6
la note ne contient aucun compteur), **0 commande VPS** (#8). Structure du gate inchangée (33 checks).