diff --git a/03_agents/frontend_console/AGENT.md b/03_agents/frontend_console/AGENT.md index 5df78a5..52a8f4f 100644 --- a/03_agents/frontend_console/AGENT.md +++ b/03_agents/frontend_console/AGENT.md @@ -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** · **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) La matière première est le **contrat RBAC** `05_deliverables_mvp/rbac/rbac_50_roles.json`, **jamais la spec de mise en page** : diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index e7958a7..ce8e5ed 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -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 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). + +--- + +## 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).