eae37875cb
Chasse ciblée (classe non gatée docstring-vs-code, cf. fix publiciste 210609) via
fan-out 3 audits read-only sur les modules à docstring dense · 3 candidats · 2 réfutés · 1 réel.
RÉEL corrigé — demo/scenarios/demo_scenario_gen.py : le générateur écrit TROIS fichiers
(run_sheet.json + MANIFEST.json l.196 + run_sheet.md l.202-203, le prompteur, annoncé
jusqu'au message stdout l.206) mais la doc intra-module n'en listait que DEUX à 3 endroits :
diagramme docstring (l.19), résumé sous-commande docstring (l.31), help argparse build (l.236).
Le run_sheet.md ajouté au commit aebe9b7 avait mis à jour le README (correct, 3 sorties) mais
laissé le docstring/help du .py en arrière → dérive doc-vs-CODE réelle, non gatée
(check_docs/check_readme_claims ne couvrent pas la prose intra-module). Les 3 emplacements
réalignés sur les 3 sorties réelles. Docstring/help SEULS — zéro logique/signature/test.
RÉFUTÉ (faux-positif de compte) — fiscal/ecf_dgii « 12 invariants » : allégué « pas
d'invariant 1 » car numérotation inline commence à 2. FAUX — invariant 1 = conformité schéma
(maison.validate l.112), 12a/12b = 2 moitiés de l'invariant 12 → 12 exactement, aligné README
ledger + help + tests + stdout. Piège de compte classique. Zéro changement.
Vérifs : run_ci.sh 30 PASS · build réel re-exécuté = 3 fichiers émis · zéro module · zéro
gate (#5) · 1 fichier prod touché (docstring+help) · aucune commande VPS (#8).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>