From eae37875cb3137892784e3eb3218dfa55507e6fb Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Sun, 2 Aug 2026 21:42:21 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260802=5F213610]=20Sprint=208?= =?UTF-8?q?=20=C2=B7=20buffer=20=C2=B7=20D=C3=A9rive=20doc-vs-CODE=20r?= =?UTF-8?q?=C3=A9elle=20:=20docstring/help=20demo=5Fscenario=5Fgen=20omett?= =?UTF-8?q?aient=20un=20output=20produit=20(run=5Fsheet.md)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- 05_activity_log/2026-08-02.md | 45 +++++++++++++++++++ .../demo/scenarios/demo_scenario_gen.py | 7 +-- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/05_activity_log/2026-08-02.md b/05_activity_log/2026-08-02.md index f5ce858..41b433b 100644 --- a/05_activity_log/2026-08-02.md +++ b/05_activity_log/2026-08-02.md @@ -1995,3 +1995,48 @@ source unique. **Vérifications.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP** (inchangé). **Zéro nouveau module · zéro gate ajouté (#5) · un seul fichier de production touché (docstring)**. Aucune commande VPS (#8). Commit `a2c2e0b`. + +--- + +## Session 20260802_213610 · Sprint 8 · buffer · Dérive doc-vs-CODE réelle : docstring demo_scenario omettait un output produit + +**Contexte.** État stationnaire (`run_ci.sh` = 30/30 vert, roadmap S1–S8 livrée et +gatée, reliquat hors périmètre sandbox). Poursuite de la classe de dérive découverte +la session précédente (docstring de production vs code réel — surface non gatée, distincte +des gates README/compte). Fan-out de 3 audits read-only (Explore) sur les ~22 modules à +docstring dense, chacun vérifiant CHAQUE allégation factuelle du docstring d'en-tête contre +le code. + +**3 candidats remontés · 2 réfutés par vérification indépendante · 1 réel corrigé.** + +**RÉFUTÉ (faux-positif de compte).** `fiscal/ecf_dgii/ecf_dgii_gen.py` l.110 « 12 invariants » : +l'agent alléguait « la numérotation commence à 2 → pas d'invariant 1 ». FAUX — l'invariant 1 +EST la conformité au schéma (`errors = list(maison.validate(bundle, schema))`, l.112) et +`12a`/`12b` sont les deux moitiés de l'invariant 12 (unicité + comptes/tipos). Décompte réel : +1(schéma)+2..11+12(a,b) = **12 exactement**, aligné mot-pour-mot sur le ledger README « Les 12 +invariants » + help CLI + tests + message stdout. Piège de compte classique (cf. mémoire +`invariant-ledger-count-gate`, `confotur-8-negatifs-not-drift`). Zéro changement. + +**RÉFUTÉ implicite.** Cluster RBAC/legal/bancable (7 modules) : aucune dérive, tous les +inputs/outputs/compteurs/comportements des docstrings exacts. + +**RÉEL — corrigé.** `demo/scenarios/demo_scenario_gen.py`. Le générateur écrit **TROIS** +fichiers — `run_sheet.json` (l.196), `MANIFEST.json` (l.196) ET `run_sheet.md` (l.202-203, +le « prompteur » Markdown, annoncé jusque dans le message stdout l.206 « + prompteur +run_sheet.md »). Or la documentation DANS le module n'en listait que DEUX à trois endroits : +le diagramme de chaîne de valeur du docstring (l.19), le résumé sous-commande du docstring +(l.31) et la `help=` de l'argparse `build` (l.236). Le `run_sheet.md` a été ajouté au commit +`aebe9b7` (« prompteur Markdown ») qui a MIS À JOUR le README (qui, lui, documente +correctement les 3 sorties, l.27-29/76-78) mais a 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), même classe que le fix publiciste parser de la session 210609. + +**Correction.** Les 3 emplacements alignés sur les 3 sorties réelles : +diagramme → `out/run_sheet.json + out/run_sheet.md + out/MANIFEST.json` ; +résumé sous-commande + help argparse → `out/run_sheet.{json,md} + out/MANIFEST.json`. +**Docstring/help seuls — zéro changement de logique, de signature ou de test.** + +**Vérifications.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP** (inchangé). Build réel +re-exécuté en dossier temp → émet bien `run_sheet.json`, `run_sheet.md`, `MANIFEST.json` +(3 fichiers = la doc corrigée). **Zéro nouveau module · zéro gate ajouté (#5) · un seul +fichier de production touché (docstring + help)**. Aucune commande VPS (#8). diff --git a/05_deliverables_mvp/demo/scenarios/demo_scenario_gen.py b/05_deliverables_mvp/demo/scenarios/demo_scenario_gen.py index abbd80f..d67058e 100644 --- a/05_deliverables_mvp/demo/scenarios/demo_scenario_gen.py +++ b/05_deliverables_mvp/demo/scenarios/demo_scenario_gen.py @@ -16,7 +16,8 @@ Chaîne de valeur : out/ des modules livrés (workflow, e-CF, CONFOTUR, RBAC, 4Big, portails, …) │ pointeurs RFC 6901 (scenario_spec.json) ▼ - demo_scenario_gen ──► out/run_sheet.json + out/MANIFEST.json + demo_scenario_gen ──► out/run_sheet.json + out/run_sheet.md + + out/MANIFEST.json │ ▼ (VPS · hors périmètre worker · #8) rendu deck / prompteur ─► démo publique otov7.com @@ -28,7 +29,7 @@ Garanties (le CLI REFUSE d'écrire si l'une casse) : · l'artefact livré est `pret=true` (0 citation non résolue · 0 module non gated). Sous-commandes : - build [-o OUT_DIR] → OUT_DIR/{run_sheet,MANIFEST}.json + build [-o OUT_DIR] → OUT_DIR/run_sheet.{json,md} + OUT_DIR/MANIFEST.json validate → manifeste + invariants (sans écrire) """ @@ -233,7 +234,7 @@ def build_argparser() -> argparse.ArgumentParser: description=__doc__.splitlines()[0]) sub = ap.add_subparsers(dest="cmd", required=True) - p = sub.add_parser("build", help="scenario_spec.json → out/{run_sheet,MANIFEST}.json") + p = sub.add_parser("build", help="scenario_spec.json → out/run_sheet.{json,md} + out/MANIFEST.json") p.add_argument("-o", "--out", default=os.path.join(_HERE, "out"), help="dossier de sortie (défaut: ./out)") p.add_argument("--generated-at", dest="generated_at", default=None)