[DTP-Worker] Sprint 8 · buffer L75 · Reproductibilité checkout propre : hand-off out/ des 4 générateurs RBAC était .gitignore-é (gate rouge en CI, vert local seulement) + durcissement check_artifacts (build produit ⇒ DOIT être suivi par git)
Défaut réel (même classe que le bug regression_run.json corrigé plus tôt) : les 4 générateurs RBAC (fixtures_gen/userperm_gen/roleprofile_gen/apply_plan) .gitignore-aient leur out/, alors qu'ils sont audités en archétype `generator` (critère HANDOFF). En checkout PROPRE (git archive HEAD = ce que voit le runner Gitea) leur out/ est absent → qa/audit_4big (dont le build relit le out/ de CHAQUE module) les note 80<95 ⇒ INV7 ⇒ build refusé ⇒ check-artifacts ET check-regression ROUGES. Ça ne passait qu'en local via les out/ non suivis laissés par des build manuels. Fix : committer le out/ des 4 générateurs (build byte-déterministe prouvé ; apply_plan lit ses frères en process, pas via out/) → alignement sur les 15 autres générateurs ; audit 100/100 en checkout propre. Durcissement : check_artifacts.sh exige désormais `git ls-files --error-unmatch` sur chaque fichier produit → un out/ ignoré/non commité devient une erreur LOCALE honnête au lieu d'une surprise en CI. Bite-proof : git rm --cached d'un artefact (laissé sur disque) ⇒ exit 1 ; re-add ⇒ exit 0. Régénéré : quality_report.json (dérive DOC = taille des 4 README édités). Vérifs : 6 gates verts sur git archive propre ; 534/21 inchangé ; suites OK. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+7
-3
@@ -52,9 +52,13 @@ Un JSON cassé casse le pipeline aval → attrapé ici.
|
||||
|
||||
### `check_artifacts.sh`
|
||||
Régénère chaque artefact `05_deliverables_mvp/**/out/` versionné depuis son
|
||||
générateur (`build -o <tmp>`) et exige une **égalité byte-for-byte** avec le
|
||||
fichier commité. Découverte automatique (zéro liste à la main · #6) : tout module
|
||||
avec un `out/` et un générateur `build` entre dans le gate.
|
||||
générateur (`build -o <tmp>`) et exige que tout fichier produit soit (a) **suivi
|
||||
par git** — jamais un artefact seulement sur disque (`out/` `.gitignore`-é ou
|
||||
non-`git add`), qui serait **absent en CI propre** et rendrait le gate « vert en
|
||||
local » par artefact fantôme (même classe que le bug `regression_run.json`) — et
|
||||
(b) en **égalité byte-for-byte** avec le fichier commité. Découverte automatique
|
||||
(zéro liste à la main · #6) : tout module avec un `out/` et un générateur `build`
|
||||
entre dans le gate.
|
||||
|
||||
Cible la **dérive silencieuse** : un module auto-résout des valeurs depuis les
|
||||
artefacts d'**autres** modules (ex. `demo/scenarios` lit
|
||||
|
||||
+14
-2
@@ -16,8 +16,10 @@
|
||||
#
|
||||
# Contrat vérifié : pour chaque `05_deliverables_mvp/**/out/`, le générateur
|
||||
# racine (le .py portant une sous-commande `build`) est ré-exécuté vers un
|
||||
# répertoire temporaire ; tout fichier produit DOIT exister et être identique
|
||||
# à son jumeau commité. Les artefacts d'EXÉCUTION (non produits par `build`,
|
||||
# répertoire temporaire ; tout fichier produit DOIT (a) être SUIVI par git —
|
||||
# jamais un simple artefact sur disque `.gitignore`-é qui serait absent en CI
|
||||
# propre — et (b) être identique à son jumeau commité. Les artefacts d'EXÉCUTION
|
||||
# (non produits par `build`,
|
||||
# p.ex. qa/regression/out/regression_run.json issu de `run`) ne sont pas
|
||||
# comparés — le gate n'assert que ce que `build` (déterministe) produit.
|
||||
#
|
||||
@@ -72,6 +74,16 @@ for outdir in "${outdirs[@]}"; do
|
||||
if [[ ! -f "$committed" ]]; then
|
||||
report "$rel/$bn — produit par 'build' mais ABSENT du dépôt (non commité)"
|
||||
drift=1
|
||||
elif ! git ls-files --error-unmatch "$committed" >/dev/null 2>&1; then
|
||||
# Présent sur disque mais NON SUIVI par git (out/ .gitignore-é, ou jamais
|
||||
# `git add`). En checkout CI propre le fichier serait ABSENT — donc tout
|
||||
# consommateur à build reproductible qui lit ce out/ (ex. l'audit 4Big,
|
||||
# critère HANDOFF, lit le out/ de CHAQUE module) casserait, tandis que le
|
||||
# gate resterait « vert en local » grâce à un artefact fantôme laissé par
|
||||
# un build manuel. C'est la classe de bug regression_run.json : on la
|
||||
# refuse. Un hand-off audité DOIT être commité, jamais seulement sur disque.
|
||||
report "$rel/$bn — produit par 'build' mais NON SUIVI par git (out/ ignoré ? → absent en CI propre, vert local trompeur)"
|
||||
drift=1
|
||||
elif ! diff -q "$f" "$committed" >/dev/null 2>&1; then
|
||||
report "$rel/$bn — DÉRIVE : le fichier commité diffère du build frais (régénérer)"
|
||||
drift=1
|
||||
|
||||
Reference in New Issue
Block a user