[DTP-Worker] Sprint 8 · buffer L75 · Comptes vivants "551 tests" périmés DANS la machinerie CI (ci.yml + check_regression.sh + check_readme_claims.sh), non gatés → renvoi artefact (→558)

Même classe de vert-trompeur que ci/README.md (session 050007) mais dans le
code des gates : 3 comptes vivants figés "22 suites · 551 tests · PASS" (matrice
534→551→558). L'ironie : le header de check_regression — le gate anti-péremption
de la matrice — s'était lui-même périmé. Fix précédent 050007 : suppression de la
surface de dérive (retrait du nombre figé → renvoi à regression_run.json), pas
551→558. Progressions historiques "534→551→558" conservées. 7 gates verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-31 05:34:20 +00:00
parent 0cde935a39
commit 11f1250b29
4 changed files with 68 additions and 6 deletions
+3 -2
View File
@@ -64,8 +64,9 @@ jobs:
# Fraîcheur de la matrice de régression (Sprint 8 · QA « Regression tests
# exhaustifs »). Complète check-artifacts : ce dernier ne rejoue que `build`
# et exclut les artefacts d'EXÉCUTION ; ce gate rejoue `run` et exige que le
# `qa/regression/out/regression_run.json` commité (22 suites · 551 tests ·
# PASS, cité dans toute la doc) soit byte-identique au run frais. Rend
# `qa/regression/out/regression_run.json` commité (dont la doc dérive ses
# totaux agrégés — suites · tests · verdict PASS — jamais figés en dur ici,
# sous peine de se périmer) soit byte-identique au run frais. Rend
# impossible la re-commission d'une matrice périmée (ex. dérive « demo 18→21 »)
# ou rouge commitée verte. stdlib pur, zéro pip, ~5 s.
# --------------------------------------------------------------------------
+59
View File
@@ -1,5 +1,64 @@
# Activity Log · 2026-07-31 · Claude Code DTP
## Session `20260731_053011` · Buffer S8 · Comptes vivants « 551 tests » périmés DANS la machinerie CI elle-même (`.gitea/workflows/ci.yml` + `ci/check_regression.sh` + `ci/check_readme_claims.sh`) — non couverts par aucun gate
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA régression). Roadmap
fonctionnellement close (22/22 modules · **558** tests · 7 gates verts). Poursuite de
la série anti-dérive (CLAUDE.md #6). Les sessions précédentes ont gaté les comptes vivants
des **docs** d'entrée (README, fiches QA/Backend) puis nettoyé la **doc du CI** (`ci/README.md`,
session `050007`). Recherche du même faux-vert **hors de ce périmètre** : audit `git grep '551'`
repo-wide (pas seulement `*.md`) → la machinerie CI **opérationnelle** (workflow + headers de
gates), qu'**aucun gate ne couvre**.
### Défauts trouvés — 3 comptes vivants « 551 » périmés (→ 558), dans le code des gates
- **`.gitea/workflows/ci.yml:67`** : le commentaire du job `check-regression` décrivait
l'artefact commité comme « **22 suites · 551 tests · PASS**, cité dans toute la doc » —
compte **vivant figé** périmé (matrice 534 → 551 → **558**).
- **`ci/check_regression.sh:8`** (l'ironie, encore) : le **header du gate de fraîcheur de
la matrice** — dont le rôle même est d'empêcher le compte agrégé de se périmer —
s'illustrait par « totaux « **22 suites · 551 tests · verdict PASS** » cité partout ».
Le gardien anti-péremption avait lui-même péri.
- **`ci/check_readme_claims.sh:152`** : l'anecdote décrivant le défaut QA disait « … alors
que **le run dit 22 / 551** » — présent de l'indicatif ⇒ prétention **vivante** du compte
courant, désormais fausse (558). *(Le « 21 suites · 534 tests » de la même ligne est
l'anecdote historique point-in-time du défaut corrigé — conservé.)*
- **Pourquoi non gaté** : `check_readme_claims` ne couvre que README + fiches QA/Backend ;
ces fichiers **mélangent** narratifs historiques figés volontaires (progression
« 534 → 551 → 558 ») et comptes vivants — exactement le motif qui a laissé `ci/README.md`
dériver (session `050007`).
### Fix (2 solutions · CLAUDE.md #4 — retenu : supprimer la surface de dérive · précédent `050007`)
Plutôt que réécrire 551→558 (qui re-dériverait au prochain ajout de suite), **retrait du
nombre vivant figé** au profit d'un renvoi à l'artefact — « les totaux agrégés (suites · tests ·
verdict) dont la doc dérive, **jamais figés en dur ici** ». Zéro nombre à périmer = **zéro
surface de dérive**, structurellement plus fort qu'un gate sur de la prose (#6).
- `ci.yml:67` & `check_regression.sh:8` : compte figé → renvoi descriptif à `regression_run.json`.
- `check_readme_claims.sh:152` : « le run dit 22 / 551 » → « le run agrégé faisant autorité
en disait déjà **davantage** (recompté ci-dessous, jamais figé ici) » — formulation
identique à celle appliquée à `ci/README.md` en session `050007`. Le **534** point-in-time
reste comme valeur du défaut.
- *(Alt. écartée : étendre `check_readme_claims` à `ci.yml`/`ci/*.sh` — fragile, il faudrait
distinguer chaque progression historique figée d'un compte vivant ; le retrait est plus fort.)*
### Preuves
| Contrôle | Résultat |
|---|---|
| `git grep '551'` hors logs/daily_reports/progression `534→551→558` | **aucun** compte vivant résiduel ✅ |
| 7 gates (`guard`/`json`/`docs`/`artifacts`/`regression`/`ci_integrity`/`readme_claims`) | ✅ exit 0 |
| `check_artifacts` (rebuild + égalité byte des `out/`) | ✅ (édition **hors** `05_deliverables_mvp` ⇒ 0 dérive d'artefact) |
| `check_ci_integrity` (câblage `gate.needs` inchangé) | ✅ |
| Diff | 3 fichiers · +9/6 · 0 untracked |
**Hors périmètre worker (VPS · #8)** : néant (commentaires CI en-repo, aucun touch prod).
**Anti-invention (#6)** : rien inventé — retrait de nombres figés, la vérité reste recomputée
par les gates depuis `regression_run.json`.
**Auto-score 4Big** : 96/100.
---
## Session `20260731_050007` · Buffer S8 · Chiffre vivant périmé DANS la doc du CI (`ci/README.md`) — le gate `check_regression` était illustré par un compte de tests faux, et `check_readme_claims` sous-décrit (2 docs au lieu de 3)
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA régression). Roadmap
+2 -1
View File
@@ -149,7 +149,8 @@ else:
# gated · M tests · M passés · 0 échec · 0 erreur → verdict PASS ») en déclarant
# « jamais compté à la main » et en citant qa/regression/out/regression_run.json.
# Ce compte se PÉRIME pourtant en silence quand une suite est ajoutée : la fiche
# affichait « 21 suites · 534 tests » alors que le run dit 22 / 551. Comme pour
# affichait « 21 suites · 534 tests » alors que le run agrégé faisant autorité en
# disait déjà davantage (matrice recomptée ci-dessous, jamais figée ici). Comme pour
# le README, aucun gate ne comparait la VALEUR au run. On la RECALCULE ici depuis
# le compte agrégé faisant autorité (regression_run.json, commité · déterministe).
# ============================================================================
+4 -3
View File
@@ -5,9 +5,10 @@
# Gate de FRAÎCHEUR de la matrice de régression (roadmap Sprint 8 · QA
# « Regression tests exhaustifs » · CLAUDE.md #5 — zéro régression silencieuse).
# Prouve, en une commande, que l'artefact d'EXÉCUTION commité
# `qa/regression/out/regression_run.json` (totaux « 22 suites · 551 tests ·
# verdict PASS » cité partout dans la doc et les logs) reflète TOUJOURS la
# réalité du disque — en le régénérant et en exigeant l'identité byte-for-byte.
# `qa/regression/out/regression_run.json` (dont la doc et les logs dérivent
# leurs totaux agrégés — suites · tests · verdict PASS — jamais figés en dur
# ici, sous peine de se périmer en silence) reflète TOUJOURS la réalité du
# disque — en le régénérant et en exigeant l'identité byte-for-byte.
#
# Pourquoi un gate DÉDIÉ (et non `check_artifacts.sh`) : ce dernier ne rejoue
# QUE la sous-commande déterministe `build` (→ regression_plan.json) et exclut