[DTP-Worker 20260805_194334] GATE NEUF classe fiche-enumeration-completeness : le tableau des gates statiques de la fiche QA se déclare « l'état courant » de git ls-files 'ci/*.sh' mais OMETTAIT le 8ᵉ gate check_mobile_workflow.sh (livré le jour même, cité NULLE PART dans la fiche · grep=0) — check_ci_integrity verrouille le CÂBLAGE CI (ci/*.sh↔gate.needs) mais ignore la fiche, check_readme_claims ne recomputait aucune énumération de gates → surface ungatée. Fix 2 volets : (1) ajout de la ligne manquante (rôle fidèle à l'en-tête du gate, placée après check_ci_integrity) ; (2) extension de check_readme_claims.sh (bloc Python avant sys.exit, réutilise subprocess/bad/good, 0 nouveau gate #5) re-dérivant l'ensemble de git ls-files 'ci/*.sh' (hors lib.sh, #6) et exigeant que chaque basename soit cité (backtické) dans la fiche ; un gate absent échoue. Teeth mutation-prouvés 2 axes : MUT1 retrait de la ligne → RED nommant check_mobile_workflow ; MUT2 ajout d'un 9ᵉ ci/*.sh factice (index seul) → RED (forward-protection : le prochain gate ne pourra être omis) puis --cached retiré, arbre byte-restauré (JAMAIS git clean). Doc ci/README §2 sous check_readme_claims. 0 prod, 0 artefact rebuild (aucun out/ ni doc scoré audit_4big), 0 chiffre saisi (#6, le « 8 » recompté de git ls-files), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-05 19:51:00 +00:00
parent c14305c170
commit afa61657cb
4 changed files with 100 additions and 0 deletions
+29
View File
@@ -9163,6 +9163,35 @@ if _rm_lines is not None:
good(f"Traçabilité roadmap · {len(_rm_seen)} citation(s) ancrée(s), "
f"4 modules attendus présents")
# ── Complétude de l'énumération des gates statiques dans la fiche QA ─────────
# La fiche 03_agents/qa/AGENT.md §« Deuxième étage QA » énumère les gates
# `ci/*.sh` en se DÉCLARANT « l'état courant » de `git ls-files 'ci/*.sh'` (pas
# une constante). Or rien ne vérifiait que CHAQUE gate statique y figure : le 8ᵉ
# gate `check_mobile_workflow.sh` a pu être omis un jour entier EN SILENCE. On
# re-dérive l'ensemble depuis git (#6 — jamais une liste à la main) et on exige
# que chaque basename apparaisse dans la fiche ; un gate absent échoue.
_QA_FICHE = "03_agents/qa/AGENT.md"
_gate_names = sorted(
f.rsplit("/", 1)[-1]
for f in subprocess.run(["git", "ls-files", "ci/*.sh"],
capture_output=True, text=True).stdout.split()
if f.rsplit("/", 1)[-1] != "lib.sh")
try:
_qa = open(_QA_FICHE, encoding="utf-8").read()
except OSError as e:
bad(f"Énumération gates statiques · {_QA_FICHE} illisible : {e}")
_qa = None
if _qa is not None:
_missing = [n for n in _gate_names if f"`{n}`" not in _qa]
if _missing:
bad(f"Énumération gates statiques · {_QA_FICHE} n'énumère PAS {_missing} "
f"— la fiche se déclare « l'état courant » de git ls-files 'ci/*.sh' "
f"({len(_gate_names)} gates réels hors lib.sh) → ajouter la/les "
f"ligne(s) manquante(s)")
else:
good(f"Énumération gates statiques · les {len(_gate_names)} gates ci/*.sh "
f"(hors lib.sh) sont tous cités dans {_QA_FICHE}")
sys.exit(1 if FAIL else 0)
PY
rc=$?