[DTP-Worker] Sprint 8 · buffer L75 · Gate intégrité chiffres README (ci/check_readme_claims.sh)
Faux-vert réel : le README (point d'entrée) affichait des chiffres PÉRIMÉS que sa propre source cité contredisait, sans qu'aucun gate ne les enforce. check_docs ne valide que les LIENS, jamais la VALEUR des nombres → dérive silencieuse : « 21/21 modules » (artefact: 22/22), « 21 suites » (22), « 14 in_repo + 1 out_of_scope » (15 in_repo). CLAUDE.md #6 non gardé. Fix : (1) corrige les 3 chiffres du README ; (2) 7e gate statique check_readme_claims.sh qui RECOMPUTE chaque chiffre depuis l'artefact cité (audit_4big/regression/acceptance + count AGENT.md) et exige l'égalité avec l'écrit — un claim absent échoue aussi. Câblé : job check-readme-claims ∈ gate.needs (30 jobs), source lib.sh, verrouillé par check_ci_integrity INV-B. Bite proofs : « 21/21 » réintroduit ⇒ exit 1 (README≠artefact) ; claim suites retiré ⇒ exit 1 (INTROUVABLE) ; restauré ⇒ exit 0. Nettoyage : commentaires CI « 21 suites/534 tests » → 22/551. 7/7 gates verts, YAML valide. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,7 @@ et manuellement (`workflow_dispatch`). Jobs statiques (+ une suite `unittest` pa
|
||||
| `check-artifacts` | `ci/check_artifacts.sh` | Reproductibilité : chaque `out/*.json` versionné == build frais | ✅ oui |
|
||||
| `check-regression` | `ci/check_regression.sh` | Fraîcheur : `qa/regression/out/regression_run.json` (`run`) == run frais + verdict PASS | ✅ oui |
|
||||
| `check-ci-integrity` | `ci/check_ci_integrity.sh` | Intégrité du câblage : `gate.needs` == tous les jobs non-manuels · chaque `ci/*.sh` câblé au gate | ✅ oui |
|
||||
| `check-readme-claims` | `ci/check_readme_claims.sh` | Intégrité des chiffres du README : chaque nombre de « État courant » == artefact cité (#6) | ✅ oui |
|
||||
| `gate` | — | Agrégat vert = gate qualité 4Big franchi | ✅ oui |
|
||||
|
||||
Aucune dépendance réseau/marketplace hors `actions/checkout`. Tout tourne avec
|
||||
@@ -105,6 +106,28 @@ Ferme le trou laissé par les couvertures existantes (`audit_4big/registry`,
|
||||
working-directory n'étaient gardés par personne. Même classe d'anti-dérive que INV4
|
||||
(disque→CI), appliquée au **câblage** CI. stdlib pur (bash/awk/git), zéro réseau.
|
||||
|
||||
### `check_readme_claims.sh`
|
||||
Le `README.md` est le **point d'entrée** du mandat ; sa section « État courant
|
||||
(sourcé) » affiche des chiffres et déclare *« Chaque chiffre ci-dessous est sourcé
|
||||
vers un artefact commité (anti-invention #6) ; ce README n'introduit aucune donnée
|
||||
nouvelle. »* Cette promesse n'était gardée par **aucun** gate : `check_docs.sh` ne
|
||||
valide que les **liens** (la cible existe), jamais la **valeur** des nombres. Quand un
|
||||
module + son job CI sont ajoutés (21→22 modules, 21→22 suites) ou qu'une promesse
|
||||
change de statut (14 `in_repo` + 1 `out_of_scope` → 15 `in_repo`), les chiffres du
|
||||
README se **périment en silence** tout en restant « sourcés » vers un artefact qui dit
|
||||
autre chose — un README qui se **contredit avec sa propre source** est un « vert
|
||||
trompeur » (même classe que la matrice périmée « demo 18→21 » ou INV4, appliqué à la
|
||||
doc d'entrée). Ce gate **recompute** chaque chiffre depuis l'artefact cité (jamais une
|
||||
liste à la main · #6) et exige l'égalité avec ce qui est **écrit** :
|
||||
- modules gated `N/M` à `K/100` + verdict `PASS` → `qa/audit_4big/out/quality_report.json` (`totals`) ;
|
||||
- `N` suites gated → `qa/regression/out/regression_plan.json` (`totals.suites`) ;
|
||||
- `N` promesses (`X` sprint + `Y` métriques), `Z` `in_repo`, verdict `true` → `qa/acceptance/out/acceptance_matrix.json` ;
|
||||
- « 13 agents » (×2 : nav + titre) → `git ls-files 03_agents/*/AGENT.md`.
|
||||
|
||||
Un claim **absent** du README échoue aussi (la dérive de formulation qui ferait
|
||||
disparaître un chiffre est elle-même une régression de traçabilité). stdlib pur
|
||||
(bash/git/python3), zéro réseau.
|
||||
|
||||
### `lib.sh` — helper partagé (sourcé, jamais exécuté seul)
|
||||
Les 6 gates commençaient tous par `cd "$(git rev-parse --show-toplevel)"`. **Hors**
|
||||
d'un arbre de travail git (tarball, `git archive | tar -x`, `git` absent du PATH),
|
||||
@@ -126,6 +149,7 @@ bash ci/check_docs.sh # liens + score
|
||||
bash ci/check_artifacts.sh # reproductibilité out/ (build)
|
||||
bash ci/check_regression.sh # fraîcheur matrice régression (run)
|
||||
bash ci/check_ci_integrity.sh # intégrité du câblage CI (gate ⊇ tous jobs)
|
||||
bash ci/check_readme_claims.sh # chiffres du README == artefacts cités (#6)
|
||||
```
|
||||
|
||||
Chaque script retourne `0` si conforme, `1` sinon. Reproduit exactement ce que
|
||||
|
||||
Reference in New Issue
Block a user