[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:
Claude Code DTP Worker
2026-08-03 07:15:25 +00:00
parent db817309a0
commit dbde8fac46
4 changed files with 49 additions and 6 deletions
@@ -11,5 +11,5 @@
"regression_plan.json"
],
"roadmap": "Sprint 8 · QA · Regression tests exhaustifs",
"hors_perimetre_worker": "Exécution planifiée de `run` sur le runner CI/VPS + publication du compte agrégé dans le desk ERPNext / le pipeline de release → agent QA / DevOps (#8). Le mode `run` reste manuel (non déterministe)."
"hors_perimetre_worker": "Exécution planifiée de `run` sur le runner CI/VPS + publication du compte agrégé dans le desk ERPNext / le pipeline de release → agent QA / DevOps (#8) : hors périmètre car planifiée sur le runner/VPS, non parce que la sortie dériverait — `regression_run.json` est byte-déterministe · commité · gaté par `ci/check_regression.sh`."
}
@@ -8,9 +8,10 @@ Deux artefacts, deux natures :
Verdict PASS ssi couverture prouvée + chaque suite ≥ planchers.
run → MATRICE live : exécute réellement chaque suite et agrège les compteurs
(ran/passed/failures/errors/skipped) + verdict global. Non déterministe
(dépend de la machine) → non commité (voir .gitignore), c'est la sortie
qui fait autorité sur « N tests verts ».
(ran/passed/failures/errors/skipped) + verdict global. Aucun horodatage /
hôte / chemin absolu → deux `run` sont byte-identiques : l'artefact
`regression_run.json` EST commité et byte-gaté par `ci/check_regression.sh`
(voir .gitignore), c'est la sortie qui fait autorité sur « N tests verts ».
Aucune date/horodatage → build reproductible (gate CI stable)."""
@@ -68,7 +69,8 @@ def build_plan(spec: dict[str, Any]) -> dict[str, Any]:
def run_matrix(spec: dict[str, Any], *, python: str | None = None) -> dict[str, Any]:
"""Exécute réellement toutes les suites du plan et agrège les compteurs.
Non déterministe (temps, machine) → destiné à un artefact non commité."""
Byte-déterministe (aucun horodatage/hôte/chemin absolu) → l'artefact
`regression_run.json` EST commité et byte-gaté par `ci/check_regression.sh`."""
suites = discovery.discover_suites(spec)
discover_cmd = list(spec["discover_cmd"])
# `python3 -m unittest ...` → on retire le binaire, on garde les args.
@@ -82,7 +82,9 @@ def _manifest(spec: dict, plan: dict) -> dict:
"hors_perimetre_worker": (
"Exécution planifiée de `run` sur le runner CI/VPS + publication du "
"compte agrégé dans le desk ERPNext / le pipeline de release → agent "
"QA / DevOps (#8). Le mode `run` reste manuel (non déterministe)."
"QA / DevOps (#8) : hors périmètre car planifiée sur le runner/VPS, "
"non parce que la sortie dériverait — `regression_run.json` est "
"byte-déterministe · commité · gaté par `ci/check_regression.sh`."
),
}