From 11f1250b29ef6e4c1f42e21c474655a9b78feac0 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Fri, 31 Jul 2026 05:34:20 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker]=20Sprint=208=20=C2=B7=20buffer=20L?= =?UTF-8?q?75=20=C2=B7=20Comptes=20vivants=20"551=20tests"=20p=C3=A9rim?= =?UTF-8?q?=C3=A9s=20DANS=20la=20machinerie=20CI=20(ci.yml=20+=20check=5Fr?= =?UTF-8?q?egression.sh=20+=20check=5Freadme=5Fclaims.sh),=20non=20gat?= =?UTF-8?q?=C3=A9s=20=E2=86=92=20renvoi=20artefact=20(=E2=86=92558)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .gitea/workflows/ci.yml | 5 +-- 05_activity_log/2026-07-31.md | 59 +++++++++++++++++++++++++++++++++++ ci/check_readme_claims.sh | 3 +- ci/check_regression.sh | 7 +++-- 4 files changed, 68 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c394d98..e0a6295 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -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. # -------------------------------------------------------------------------- diff --git a/05_activity_log/2026-07-31.md b/05_activity_log/2026-07-31.md index 3cdd233..79c371a 100644 --- a/05_activity_log/2026-07-31.md +++ b/05_activity_log/2026-07-31.md @@ -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 diff --git a/ci/check_readme_claims.sh b/ci/check_readme_claims.sh index 365db8e..2cd31d4 100755 --- a/ci/check_readme_claims.sh +++ b/ci/check_readme_claims.sh @@ -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). # ============================================================================ diff --git a/ci/check_regression.sh b/ci/check_regression.sh index d52f4f3..a58ceac 100755 --- a/ci/check_regression.sh +++ b/ci/check_regression.sh @@ -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