[DTP-Worker] Sprint 8 · buffer L75 · Gate intégrité chiffres : étendu à la fiche QA (vert-trompeur 21/534)
Fix vert-trompeur hors périmètre du gate README (session précédente) : - 03_agents/qa/AGENT.md « Verdict agrégé courant » affichait 21 suites·534 tests (PASS) en se disant « jamais compté à la main » — figé à la main, périmé vs le run réel 22/551. Corrigé 21/534→22/551. - ci/README.md : exemple 21·534→22·551 + checklist DevOps 6→7 gates statiques. - Correctif de fond : ci/check_readme_claims.sh RECOMPUTE désormais aussi le compte agrégé de la fiche QA depuis regression_run.json (somme des suites commitées) ; un claim absent échoue aussi. Portée du gate élargie README + fiche QA (en-tête script + ci/README.md §1/§2). Bites : 21/534 → exit1 diff explicite ; claim retiré → exit1. 7 gates verts (dont check_artifacts : aucune dérive out/). Matrice 551/22 PASS inchangée. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+13
-7
@@ -20,7 +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 |
|
||||
| `check-readme-claims` | `ci/check_readme_claims.sh` | Intégrité des chiffres des docs d'entrée : chaque nombre de `README.md` « État courant » **et** de la fiche QA « Verdict agrégé » == 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
|
||||
@@ -77,8 +77,8 @@ Rejoue la **matrice de régression** complète (`qa/regression/regression_gen.py
|
||||
de `check_artifacts` : celui-ci ne rejoue que `build` (→ `regression_plan.json`) et
|
||||
laisse hors périmètre l'artefact d'**exécution** `regression_run.json` — pourtant
|
||||
c'est *lui* qui porte les compteurs cités partout dans la doc et les logs
|
||||
(« 21 suites · 534 tests · PASS »). Sans ce gate, ce chiffre pouvait se périmer en
|
||||
silence (module + job CI ajoutés sans régénérer la matrice → « 21 suites » faux ;
|
||||
(« 22 suites · 551 tests · PASS »). Sans ce gate, ce chiffre pouvait se périmer en
|
||||
silence (module + job CI ajoutés sans régénérer la matrice → compte de suites faux ;
|
||||
c'est la dérive « demo 18→21 » corrigée à la main), ou une matrice rouge être
|
||||
commitée verte. `regression_run.json` ne contient aucun horodatage/hôte → le run est
|
||||
déterministe et l'égalité exacte licite. Correctif : `regression_gen.py run -o out`
|
||||
@@ -118,18 +118,24 @@ README se **périment en silence** tout en restant « sourcés » vers un artefa
|
||||
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** :
|
||||
liste à la main · #6) et exige l'égalité avec ce qui est **écrit** dans les deux
|
||||
docs d'entrée — `README.md` :
|
||||
- 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
|
||||
Et la fiche QA `03_agents/qa/AGENT.md` (section « Verdict agrégé courant », qui se
|
||||
disait « jamais compté à la main » tout en portant un compte figé qui s'est périmé
|
||||
« 21 suites · 534 tests » vs le run réel `22 / 551 ») :
|
||||
- `N` suites · `M` tests · `M` passés · `E` échec · `E` erreur · verdict → `qa/regression/out/regression_run.json` (compte agrégé faisant autorité, commité).
|
||||
|
||||
Un claim **absent** é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**
|
||||
Les 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),
|
||||
`git rev-parse` n'écrit rien → `cd ""` est un **no-op qui RETOURNE SUCCÈS** : le gate
|
||||
poursuivait, `git ls-files` renvoyait une liste **vide**, et `validate_json` /
|
||||
@@ -181,7 +187,7 @@ Actions** doit être activé, et le runner doit apparaître « Idle ».
|
||||
|
||||
- `[ ]` Gitea Actions activé au niveau instance ET repo.
|
||||
- `[ ]` `act_runner` enregistré, label `ubuntu-latest`, statut Idle.
|
||||
- `[ ]` Push de test → les 6 gates statiques apparaissent et passent au vert.
|
||||
- `[ ]` Push de test → les 7 gates statiques apparaissent et passent au vert.
|
||||
- `[ ]` PR de test avec violation volontaire → `constraints-guard` bloque (rouge).
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user