[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:
@@ -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**.
|
||||
|
||||
Reference in New Issue
Block a user