[DTP-Worker 20260802_213610] Sprint 8 · buffer · Dérive doc-vs-CODE réelle : docstring/help demo_scenario_gen omettaient un output produit (run_sheet.md)
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>
This commit is contained in:
@@ -1995,3 +1995,48 @@ source unique.
|
|||||||
**Vérifications.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP** (inchangé). **Zéro
|
**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)**.
|
nouveau module · zéro gate ajouté (#5) · un seul fichier de production touché (docstring)**.
|
||||||
Aucune commande VPS (#8). Commit `a2c2e0b`.
|
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).
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ Chaîne de valeur :
|
|||||||
out/ des modules livrés (workflow, e-CF, CONFOTUR, RBAC, 4Big, portails, …)
|
out/ des modules livrés (workflow, e-CF, CONFOTUR, RBAC, 4Big, portails, …)
|
||||||
│ pointeurs RFC 6901 (scenario_spec.json)
|
│ 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)
|
▼ (VPS · hors périmètre worker · #8)
|
||||||
rendu deck / prompteur ─► démo publique otov7.com
|
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).
|
· l'artefact livré est `pret=true` (0 citation non résolue · 0 module non gated).
|
||||||
|
|
||||||
Sous-commandes :
|
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)
|
validate → manifeste + invariants (sans écrire)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -233,7 +234,7 @@ def build_argparser() -> argparse.ArgumentParser:
|
|||||||
description=__doc__.splitlines()[0])
|
description=__doc__.splitlines()[0])
|
||||||
sub = ap.add_subparsers(dest="cmd", required=True)
|
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"),
|
p.add_argument("-o", "--out", default=os.path.join(_HERE, "out"),
|
||||||
help="dossier de sortie (défaut: ./out)")
|
help="dossier de sortie (défaut: ./out)")
|
||||||
p.add_argument("--generated-at", dest="generated_at", default=None)
|
p.add_argument("--generated-at", dest="generated_at", default=None)
|
||||||
|
|||||||
Reference in New Issue
Block a user