[DTP-Worker 20260803_070711] Sprint 8 QA · fix · 3 surfaces jumelles résiduelles du mensonge regression_run.json « non déterministe/non commité »
Le fix 89eb8e6 (session 053701) avait corrigé regression_gen.py docstring +
README, mais la même contre-vérité subsistait dans 3 surfaces manquées :
· reglib/builder.py:10-13 (docstring module — pointait vers .gitignore comme
autorité alors que le .gitignore affirme l'INVERSE)
· reglib/builder.py:71 (docstring run_matrix)
· regression_gen.py:82-85 (champ hors_perimetre_worker → coule dans MANIFEST.json
commité/gaté ; contredisait le docstring corrigé 12 lignes plus haut)
Ground-truth (4 sources) : git ls-files (commité) · .gitignore (commité+byte-
déterministe) · ci/check_regression.sh (exige byte-identité d'un run frais) ·
docstring regression_gen.py:26 déjà réaligné. MANIFEST.json régénéré (build),
plan + regression_run.json inchangés. Consommateur aval : aucun. run_ci.sh 30
PASS 0 FAIL. Classe prose-facts-vs-numeric-drift / docstring-vs-code, gate-neutre.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -592,3 +592,42 @@ gate (`check_readme_claims` ne touche que les chiffres « Génération réelle
|
||||
|
||||
**Gate-neutre.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP**. Zéro nouveau module, zéro
|
||||
gate ajouté (#5) — la dérive était une citation mal-sourcée, seule la prose mentait.
|
||||
|
||||
## Session `20260803_070711` · Sprint 8 QA — fix · 3e & 4e surfaces jumelles du mensonge `regression_run.json` « non déterministe / non commité »
|
||||
|
||||
**Contexte.** Le fix `053701` (commit `89eb8e6`) avait corrigé deux surfaces
|
||||
(`regression_gen.py` docstring + `qa/regression/README.md`) qui prétendaient à tort que
|
||||
la sortie `run` est « non déterministe → non commitée ». Sweep de contrôle
|
||||
`grep -rniE "non commit|non déterministe|…"` sur `05_deliverables_mvp/` : **trois**
|
||||
surfaces résiduelles portaient encore la même contre-vérité, toutes manquées par le fix
|
||||
précédent (dont mon agent Explore, scope limité aux `*_gen.py`, ne couvrait pas
|
||||
`reglib/`) :
|
||||
|
||||
1. `reglib/builder.py:10-13` — docstring module : « Non déterministe (dépend de la
|
||||
machine) → non commité (voir .gitignore) ». **Doublement faux** : pointe vers
|
||||
`.gitignore` comme autorité alors que le `.gitignore` affirme l'**inverse**
|
||||
(« `out/regression_run.json` (mode `run`) EST commité … byte-déterministe »).
|
||||
2. `reglib/builder.py:71` — docstring `run_matrix()` : « destiné à un artefact non
|
||||
commité ».
|
||||
3. `regression_gen.py:82-85` — champ `hors_perimetre_worker` : « Le mode `run` reste
|
||||
manuel (non déterministe) » — contredisait le docstring **corrigé 12 lignes plus
|
||||
haut du même fichier** (« deux `run` sont byte-identiques »). Ce champ coule dans
|
||||
`out/MANIFEST.json` **commité** → surface **gatée** par la reproductibilité.
|
||||
|
||||
**Preuve ground-truth (4 sources concordantes).** `git ls-files` → `regression_run.json`
|
||||
est commité · `.gitignore` documente commité+byte-déterministe · `ci/check_regression.sh`
|
||||
(step `check-regression` de `ci.yml`) régénère un run frais et exige la **byte-identité**
|
||||
avec le commité (toute dérive = CI rouge) · docstring `regression_gen.py:26` déjà réaligné.
|
||||
|
||||
**Correctif.** Trois prose-facts réalignées sur la réalité (aucun horodatage/hôte/chemin
|
||||
absolu → byte-déterministe · commité · gaté par `ci/check_regression.sh`). Surface #3
|
||||
(gatée) : `MANIFEST.json` régénéré (`build -o out`, 1 ligne). Plan + `regression_run.json`
|
||||
**inchangés** (aucun compteur touché). Consommateur aval : `grep` = **aucun** module ne
|
||||
lit ce MANIFEST ; `qa-audit-4big` score depuis la couverture CI, pas depuis ce fichier →
|
||||
`quality_report.json` inchangé (confirmé par le gate reproductibilité vert).
|
||||
|
||||
**Gate-neutre.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP**. Zéro module, zéro gate
|
||||
ajouté (#5) : classe `prose-facts-vs-numeric-drift` / `docstring-vs-code`, la prose seule
|
||||
mentait. Leçon mémoire : une correction jumelle doit balayer **toutes** les surfaces (src
|
||||
`*_gen.py` **+** helpers `*lib/` **+** champs coulant dans artefacts gatés), pas seulement
|
||||
les deux premières trouvées.
|
||||
|
||||
Reference in New Issue
Block a user