Audit read-only (agent Explore) des docstrings vs code réel des 12 *_gen.py non
encore couverts. Verdict CLEAN : 2 candidats remontés, tous deux faux positifs.
· ecf_dgii « omet ecf_spec.json » = convention des pairs (le jumeau commissions
omet identiquement son bareme_spec.json ; les docstrings n'énumèrent que les
contrats de cross-cohérence EXTERNES, pas le spec propre du module).
· confotur lit rbac via rbac_scan.load_contract() = docstring nomme correctement
rbac_50_roles.json (le fichier est la source, direct ou via helper).
· ledger ecf sans « # 1 · » = by-design et GATÉ (check_readme_claims L1885-1960
dérive #1 du schéma) — NE PAS ajouter de marqueur.
Zéro fichier prod modifié. run_ci.sh = 32 PASS · 0 FAIL · 0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
check-docs signalait 05_activity_log/2026-08-03.md → lien cassé vers
pie/manifest/README.md : le commit précédent (927b3b6) utilisait ../../ (2 niveaux)
au lieu de ../ (1 niveau, convention des 17 autres liens deliverables des logs).
Cible existe, seul le préfixe relatif était faux. run_ci.sh : 32 PASS · 0 FAIL · 0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
La directive PIE désigne la faisabilité comme SSOT (pie_spec.ssot=faisabilite) et
fait du PIE le pivot Annexe 12/V10.1, mais aucune des 13 fiches AGENT.md ne le
référençait. Ajoute à la fiche de l'agent SSOT une sous-section + un bullet de
coordination liant le module commité pie/manifest (P0 : schéma Master Data +
manifest de dépendances). Zéro compte hardcodé (README module = autorité).
Gate : 32 PASS · 0 FAIL · 0 SKIP (2 liens markdown neufs validés par check-docs).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Régression neuve depuis commit 9c062ef : OTO_DESIGN_SYSTEM_v1.md §15
« Fichiers canoniques sur VPS » liste /var/www/html/static/ en inventaire
descriptif (chemin servi = symlink de /opt/oto/sites/static). Faux-positif de
la classe que le garde ignore (USAGE, pas mention) ; doc root-owned non éditable
+ non créé par le worker → fix au niveau du garde (précédent session 010630).
- ci/guard_constraints.sh : OTO_DESIGN_SYSTEM_*.md (glob) ajouté aux exclusions
tracked_files(), même catégorie qu'AUTORISATIONS_*/DIRECTIVE_* ; en-tête documenté.
- ci/README.md : §exclusions + NB inconsistance chemin-servi-vs-source mis à jour.
- Mutation-test : garde mord toujours les 3 usages code réels (static VPS/GitHub/Stripe).
- Inconsistance chemin servi (/var/www/html/static) vs source (/opt/oto/sites/static)
du §15 re-signalée à Michel (non tranchée par le garde).
run_ci.sh : 30 PASS · 0 FAIL · 0 SKIP (rétabli). Zéro nouveau module, zéro gate ajouté (#5).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
La session 013634 a corrigé « Expo 54 en place » dans AGENTS_EXISTING_ASSETS.md §8 +
fiche mobile, mais n'a examiné que la roadmap L56 (« Rebuild Expo 54 » = cible S5,
décision P0 Michel). La L18 (table Gains, colonne « Existe déjà ») ré-affirmait encore
« modules RBAC + API + Expo 54 » — même dérive « Expo 54 en place » (runtime réel =
Expo 51 vérifié package.json). Contradiction prouvée : AGENT.md:88 CITE la L18 comme
« Expo 51 en place » (citation en désaccord avec sa source). Corrigé → « Expo 51 »
(existant) + « Rebuild vers Expo 54 + builds + submit » (reste-à-faire, fidèle Sprint 5
L56). Ligne 56 « Rebuild Expo 54 » NON touchée (cible/décision P0). Formulation
« Rebuild VERS Expo 54 » choisie pour ne pas matcher le bigramme d'ancrage du gate
(check_readme_claims.sh:7786) → ancre reste sur L56 (grep = 1 occurrence). L18 ungated
pour ce ncombre (gate n'ancre que sur 'Rebuild Expo N', gate (d) scanne que le README
mobile). run_ci.sh 30 PASS 0 FAIL · zéro module · zéro gate (#5) · aucune commande VPS (#8).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Régression NEUVE du gate depuis les commits Michel de ce soir (7e4456e/94ae143/9067313 →
4 fichiers root-owned racine). constraints-guard mordait AUTORISATIONS_MICHEL_20260803.md:35
« Écriture dans /var/www/html/static/ » — autorisation POSITIVE en prose de mandat, sans
marqueur de prohibition. Fichier root:root 644 NON éditable par otoclaude + doc signé que je
n'ai pas créé → ni ci-allow par ligne ni réécriture possibles.
Correctif au niveau du garde (ci/, que je possède) : AUTORISATIONS_*.md + DIRECTIVE_*.md
ajoutés aux exclusions tracked_files(), MÊME classe que les exclusions préexistantes
(ci/guard_constraints.sh + .gitea/workflows/*.yml) — docs contenant NÉCESSAIREMENT les
termes en texte de politique. Détection vraie-positive PRÉSERVÉE (mutation-test : un .sh
commité avec les 3 usages interdits → garde mord 3/3). CLAUDE.md RESTE scanné.
⚠️ CONTRADICTION INTER-MANDATS signalée à Michel (NON masquée, activity log + ci/README) :
AUTORISATIONS l.35 contredit l'interdit absolu CLAUDE.md — le chemin correct est le SYMLINK
source /opt/oto/sites/static/. Recommandation : corriger l.35. Décision → Michel.
ci/README §guard mis en cohérence. Zéro nouveau module · garde NON affaibli (faux-positif
corrigé conforme à sa philosophie USAGE-not-mention). run_ci.sh 30 PASS 0 FAIL.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>