[DTP-Worker] Sprint 8 · buffer · Gate reproductibilité artefacts (ci/check_artifacts.sh) + fix dérive run_sheet demo 18→21
Nouveau gate CI bloquant : régénère chaque 05_deliverables_mvp/**/out/ depuis son générateur `build` et exige l'égalité byte-for-byte avec le fichier commité (découverte auto · stdlib pur · zéro pip). Attrape la dérive silencieuse d'un artefact qui auto-résout une valeur depuis un autre module et devient périmé quand la source grandit — dérive qu'aucune suite tests/ (fonctions, pas fichier commité) n'attrapait. Défaut détecté et corrigé par ce gate : demo/scenarios/out/run_sheet.json embarquait ci_modules_count=18 (buildé Sprint 7) alors que qa/audit_4big en compte désormais 21. Régénéré (diff 1 ligne). Consistance live re-vérifiée. Wiring : job check-artifacts + needs du gate agrégé (.gitea/workflows/ci.yml) · doc (ci/README.md). Vérifs : test négatif du gate OK (dérive → EXIT 1), 4 gates statiques EXIT 0, suites CI-parsing vertes (regression/acceptance/audit_4big/demo), 21/21 suites · 534 tests, compteurs dérivés stables. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1604,3 +1604,59 @@ rigueur de la spec**, explicitement **pas** un score d'implémentation (le build
|
||||
**Hors périmètre worker (VPS · #8)** : néant (changements in-repo : gate CI locale + doc).
|
||||
|
||||
**Auto-score 4Big** : 96/100.
|
||||
|
||||
---
|
||||
|
||||
## Session 20260730_232914 · Buffer S8 · Gate reproductibilité des artefacts + fix dérive run_sheet demo (18→21)
|
||||
|
||||
**Tâche** : **Sprint 8 · « Regression tests exhaustifs » + DevOps CI/CD**. Baseline
|
||||
sain confirmé au démarrage (4 gates statiques EXIT 0 ; 21/21 suites vertes · 534
|
||||
tests via `qa/regression run`). Objectif : durcir la régression au-delà de
|
||||
l'exécution des tests — prouver la **reproductibilité byte-for-byte** des artefacts
|
||||
`out/` versionnés (aucun `out/*.json` n'a dérivé de sa source).
|
||||
|
||||
**Découverte d'un VRAI défaut (analyser avant agir · #1)** : en ré-exécutant le
|
||||
`build` de chaque module vers un tmpdir et en diffant contre le commité, **1
|
||||
artefact sur 18 dérivait** — `demo/scenarios/out/run_sheet.json` : `"valeur": 18`
|
||||
là où le build frais produit `21`. Générateur **déterministe** (deux builds
|
||||
identiques), donc pas de non-déterminisme : le fichier commité était **périmé**.
|
||||
|
||||
**Cause racine** : le run_sheet auto-résout ses valeurs de preuve depuis les
|
||||
artefacts d'AUTRES modules — ici `qa/audit_4big` `/coverage/ci_modules_count`. Ce
|
||||
compteur a grandi **18 → 21** (suites `regression`/`acceptance`/`deploy_runbook`
|
||||
ajoutées depuis) mais le run_sheet — buildé au Sprint 7 (commit `cac6538`, 10:39)
|
||||
— n'a jamais été régénéré. **Dérive silencieuse** qu'aucune suite `tests/` (qui
|
||||
teste des FONCTIONS, pas le fichier commité) n'attrapait.
|
||||
|
||||
**2 solutions (workflow #4)** : A régénérer + gate systémique préventif ·
|
||||
B régénérer seul. **Choix A** — B laisserait la dérive revenir au prochain ajout
|
||||
de module. Correctif ponctuel : `demo_scenario_gen.py build -o out` (diff = 1
|
||||
ligne, `18→21`) ; suite demo 32 tests OK ; consistance live re-vérifiée
|
||||
(run_sheet `21` == audit_4big source `21`).
|
||||
|
||||
**Fichiers (4)** :
|
||||
1. `ci/check_artifacts.sh` (**neuf**) — gate de reproductibilité. Découvre chaque
|
||||
`05_deliverables_mvp/**/out/` (zéro liste à la main · #6), ré-exécute le
|
||||
générateur `build -o <tmp>`, exige l'égalité byte-for-byte avec le commité.
|
||||
Artefacts d'exécution non produits par `build` (p.ex.
|
||||
`qa/regression/out/regression_run.json`) non comparés. stdlib pur (bash+python3),
|
||||
zéro pip (runner Gitea · #2).
|
||||
2. `.gitea/workflows/ci.yml` — job bloquant `check-artifacts` + ajout au `needs`
|
||||
du `gate` agrégé.
|
||||
3. `05_deliverables_mvp/demo/scenarios/out/run_sheet.json` — régénéré (`18→21`).
|
||||
4. `ci/README.md` — table pipeline + section détail + bloc exécution locale.
|
||||
|
||||
**Anti-invention (#6)** : la valeur `21` n'est **pas saisie** — elle re-découle de
|
||||
`qa/audit_4big/out/quality_report.json` (recalculé lui-même depuis le CI). Le gate
|
||||
n'affirme QUE ce que le `build` déterministe produit.
|
||||
|
||||
**Vérifs** : **test négatif** du gate (dérive `21→18` réinjectée → EXIT 1 + message
|
||||
« DÉRIVE ») puis test positif (EXIT 0, 18/18 modules reproductibles). 4 gates
|
||||
statiques EXIT 0 · YAML `safe_load` OK · suites CI-parsing vertes
|
||||
(regression 24 · acceptance 31 · audit_4big 34 · demo 32). `check-artifacts`
|
||||
n'entre PAS comme « module » dans `parse_ci` (pas de working-directory) → compteurs
|
||||
dérivés stables (21/534 inchangés).
|
||||
|
||||
**Hors périmètre worker (VPS · #8)** : néant (gate CI local + doc + artefact in-repo).
|
||||
|
||||
**Auto-score 4Big** : 96/100.
|
||||
|
||||
Reference in New Issue
Block a user