diff --git a/05_activity_log/2026-08-03.md b/05_activity_log/2026-08-03.md index caedcd5..c8ee191 100644 --- a/05_activity_log/2026-08-03.md +++ b/05_activity_log/2026-08-03.md @@ -474,3 +474,43 @@ one-liner préservées ; détail placé en sous-section, cf. discipline `ci-read **Vérifications.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP** (dont `check-docs` liens OK · `check-readme-claims` vert). Aucune commande VPS (#8) · aucun `git clean` . + +## Session `20260803_053701` · fix · Dérive doc-vs-réalité `regression_run.json` (classe `prose-facts-vs-numeric-drift`, jumelle du fix root-README) + +**Contexte.** Repo tout-vert au démarrage (`run_ci.sh` 30 PASS / 0 FAIL). Sweep +mécanique docstring-vs-CODE sur les ~30 générateurs (comparaison des `.json` +listés dans chaque docstring vs les littéraux écrits par `os.path.join(out, …)`) : +tous les « DOCSTRING-not-written » se sont révélés être des fichiers d'ENTRÉE +(`rbac_50_roles.json`, `BRIEF.json`, `eas.json`…) → faux positifs. **Un seul** +écart réel : `regression_gen.py` écrit `regression_run.json` sans que la doc le +qualifie correctement. + +**Dérive trouvée (réelle, prose-fact ungated).** Deux surfaces décrivaient la +sortie `run` comme périssable : +- `regression_gen.py` docstring l.26 : « Sortie NON déterministe → non commitée. » +- `qa/regression/README.md` § hand-off VPS l.76 : « Le mode `run` reste **manuel** + (non déterministe · non gated push/PR). » + +**Fausses sur les trois points**, contredites par le gate DÉDIÉ du module lui-même +`ci/check_regression.sh` (= step `check-regression` de `.gitea/workflows/ci.yml`, +confirmé vert) : `regression_run.json` **EST commité** (`git ls-files`), **EST +déterministe** (aucun horodatage/hôte/chemin absolu → deux `run` byte-identiques, +cf. en-tête gate l.24-25) et **EST byte-gaté à chaque push/PR**. C'est exactement +la dérive « regression_run.json non commité » déjà corrigée dans le README **racine** +(commit 76fb0e7, cf. memory `prose-facts-vs-numeric-drift`) mais **restée dans le +module producteur** — le générateur contredisait son propre gate. + +**Correctif.** Docstring + README réalignés sur la réalité, avec citation explicite +du gate (`ci/check_regression.sh` / `ci/check_artifacts.sh`). Ligne de fermeture +« Le build/validate est déterministe » généralisée : **toutes** les sous-commandes +productrices sont déterministes + commitées + byte-gatées. + +**Consommateur régénéré (`artifact-reproducibility-gate`).** L'édition du README a +fait dériver l'évidence DOC de `qa/audit_4big/out/quality_report.json` (README +qa-regression 4236 → 4396 octets) → régénéré ; verdict **PASS · 22/22 = 100/100 +(seuil 95)** inchangé (diff = 1 insertion / 1 suppression, la seule ligne octets). +La docstring `.py` n'est lue en octets par aucun gate → pas d'autre consommateur. + +**Gate-neutre.** `./run_ci.sh` → **30 PASS · 0 FAIL · 0 SKIP**. Zéro nouveau module, +zéro gate ajouté (#5) — la dérive était déjà couverte par les faits, seule la prose +mentait. Commit `89eb8e6`.