[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
+55
View File
@@ -1706,3 +1706,58 @@ valeurs sont recomputées de `CLAUDE.md`, jamais retapées), **aucune commande V
citée est une surface à ancrer) : nouvelle sous-surface (bancable + commissions) close.
**Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP**.
---
## Session 20260805_194334 · GATE NEUF — complétude de l'énumération des gates statiques dans la fiche QA
**Contexte.** Repo vert au démarrage (33 PASS · 0 FAIL · 0 SKIP), tous modules
livrés, roadmap 8-sem sans tâche-feature ouverte. Sonde ciblée sur la classe
**fiche-completeness** (cf. [[fiche-accuracy-audit-closed]] — « completeness≠accuracy,
diff deliverables vs fiche tables »), cette fois sur une fiche qui **énumère** un
ensemble censé être exhaustif.
**Constat (drift présent-temps réel).** La fiche `03_agents/qa/AGENT.md`
(§« Deuxième étage QA · batterie de gates statiques `ci/*.sh` ») liste les gates dans
un tableau, en se **déclarant explicitement** (l.49) « la liste ci-dessous est donc
*l'état courant*, pas une constante ». Or le tableau ne comptait que **7 lignes** alors
que `git ls-files 'ci/*.sh'` (hors `lib.sh`) en rend **8** : le 8ᵉ gate
`check_mobile_workflow.sh` — livré **le jour même** (session `001109`, cf. rapport
matinal 33-jobs) — n'y figurait **NULLE PART** (`grep -c check_mobile_workflow` fiche
= **0**, les 7 autres ≥ 1). La fiche promettait la complétude sans la tenir : omission
silencieuse d'un jour entier. **Surface ungatée confirmée** : `check_ci_integrity`
verrouille le **câblage CI** (`ci/*.sh` ↔ job `gate.needs`) mais **ne lit pas la fiche** ;
`check_readme_claims` ne recomputait aucune énumération de gates → aucun gardien.
**Fix (2 volets).**
1. **Correction du fond** : ajout de la ligne manquante `check_mobile_workflow.sh` au
tableau, placée juste après `check_ci_integrity.sh` (les deux gardent l'intégrité
d'un fichier-workflow) — rôle décrit fidèlement d'après l'en-tête du gate (second
workflow `mobile-build.yml`, hors `gate.needs`, gating `if:` job-level sur
`needs.preflight.outputs.*` jamais `secrets.`, contrat d'outputs, MOB-1..4).
2. **Ancrage anti-récurrence** : extension du gate existant `ci/check_readme_claims.sh`
(bloc Python ajouté avant `sys.exit`, réutilise `subprocess`/`bad`/`good` déjà en
scope · zéro nouveau gate #5 · zéro nouveau fichier) — re-dérive l'ensemble depuis
`git ls-files 'ci/*.sh'` (hors `lib.sh`, #6) et exige que chaque basename soit cité
(backtické) dans la fiche ; un gate **absent** échoue. Rend la promesse « l'état
courant » **opposable**.
**Teeth (mutation-vérifié, arbre restauré à chaque fois).**
- **MUT1** — retrait de la ligne `check_mobile_workflow.sh` → **RED** nommant le gate
réel non cité (`n'énumère PAS ['check_mobile_workflow.sh'] … 8 gates réels`).
- **MUT2 (forward-protection)** — `git add` d'un 9ᵉ `ci/check_dummy9.sh` factice (index
seul) → **RED** (`… ['check_dummy9.sh'] … 9 gates réels`) : le **prochain** gate
livré ne pourra pas être omis en silence. Fichier `--cached` retiré + `rm` (arbre
byte-restauré, **JAMAIS** `git clean` · CLAUDE.md).
- Arbre restauré → gate exit 0, les 8 gates re-verts.
**Portée / anti-churn.** **0 fichier de production édité** (seuls la fiche QA,
`ci/check_readme_claims.sh`, `ci/README.md`), **0 artefact reconstruit** (aucun
`out/*.json` ni doc scoré par audit_4big → pas de rebuild `quality_report`, cf.
[[audit4big-rebuild-after-doc-edits]]), **0 chiffre saisi à la main** (#6 — le « 8 » est
recompté de `git ls-files`, jamais tapé), **aucune commande VPS** (#8 — 100 % local).
Documenté en `ci/README.md` §2 sous `check_readme_claims.sh` (nouveau paragraphe
« COMPLÉTUDE de l'énumération des gates statiques »), pas de nouvelle ligne au tableau §1
(cf. [[ci-readme-table-detail-in-section2]]).
**Vérif.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP**.