[DTP-Worker] Sprint 8 · buffer L75 · Chiffre vivant périmé dans la doc du CI : ci/README.md illustrait check_regression par "551 tests" (→558) + décrivait 2 docs gatés au lieu de 3 (fiche Backend omise)

- ci/README.md:80 : compte vivant figé "22 suites · 551 tests" (périmé, matrice=558)
  remplacé par un renvoi au recompute check_readme_claims → zéro surface de dérive (#6)
- ci/README.md:130 : "le run réel 22/551" (présent, faux) → reformulé point-in-time ;
  534 conservé comme anecdote historique du défaut corrigé
- ci/README.md:121-134 : "les deux docs d'entrée" → "les trois" + ajout du bloc
  fiche ERPNext Backend (couverture ajoutée session 043004, omise du doc) → doc == code
- 7 gates verts ; check_artifacts inchangé (édition hors 05_deliverables_mvp)

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:09:49 +00:00
parent 504bfb0f10
commit 0cde935a39
2 changed files with 79 additions and 4 deletions
+70
View File
@@ -1,5 +1,75 @@
# Activity Log · 2026-07-31 · Claude Code DTP
## 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
fonctionnellement close (22/22 modules · 558 tests · **7** gates verts au démarrage).
Poursuite de la série anti-dérive : la classe « chiffre inventé/périmé » (README, fiche
QA, fiche Backend) est gatée sur 3 docs ; recherche d'un **même faux-vert hors de ce
périmètre**. Audit repo-wide des agrégats (`git grep '<N> suites|<N> modules|551|534'`
sur `*.md` hors logs/archives) + relecture des 7 gates pour un **bug de logique**.
### Défauts trouvés — 3 dérives réelles, toutes dans `ci/README.md` (doc du livrable DevOps)
- **`ci/README.md:80`** (le pire) : la section décrivant `check_regression` — le gate
*censé empêcher les compteurs de se périmer* — s'illustrait elle-même par un **compte
vivant périmé** : « 22 suites · **551 tests** · PASS ». La matrice faisant autorité
(`qa/regression/out/regression_run.json`) dit **558** depuis la session `043004`
(534 → 551 → 558) ; l'exemple appariait le compte de **suites courant** (22) à un
compte de **tests périmé** (551). Ironie complète : la doc du gate anti-dérive avait
elle-même dérivé.
- **`ci/README.md:130`** : la ligne anecdote de la fiche QA citait « le run réel
`22 / 551` » au **présent** — 551 ne correspond plus à rien (→ 558).
- **`ci/README.md:121-131`** : la section `§check_readme_claims` affirmait garder « les
**deux** docs d'entrée » (README + fiche QA) et **omettait la fiche ERPNext Backend**
— 3ᵉ doc pourtant ajouté à la couverture du gate en session `043004`. Le **header du
script** `check_readme_claims.sh` (source de vérité · l.23/29/32) liste bien les 3 ;
seul `ci/README.md` a dérivé → **doc qui sous-décrit son propre code**.
- **Pourquoi non gaté** : session `030001` a délibérément laissé `ci/README.md` **hors**
de `check_readme_claims` car il porte des **chiffres historiques figés** volontaires
(anecdotes « demo 18→21 », « 21 suites · 534 tests »). C'est ce mélange
historique/vivant qui a laissé le compte **vivant** (551) se périmer en silence.
### Fix (2 solutions · CLAUDE.md #4 — retenu : supprimer la surface de dérive + réaligner)
- **Correctif de fond (l.80)** : le compte **vivant** figé « 22 suites · 551 tests » est
**supprimé** au profit d'un renvoi — « le compte agrégé (suites · tests · passés ·
verdict) … **recompté par `check_readme_claims`** dans les fiches d'entrée, jamais figé
en dur ici ». Plus de nombre à périmer = **zéro surface de dérive** (plus robuste qu'un
gate sur une prose ; #6). *(Alt. écartée : étendre `check_readme_claims` à `ci/README.md`
— fragile, il faudrait distinguer chaque anecdote historique figée d'un compte vivant ;
supprimer le nombre est structurellement plus fort.)*
- **Anecdote historique (l.130)** : « le run réel `22 / 551` » (chiffre vivant faux)
remplacé par « alors que le run agrégé faisant autorité en disait davantage » ; le
**534** est **conservé** comme valeur point-in-time du défaut corrigé (comme « demo
18→21 »), désormais sans nombre concurrent périmé.
- **Réalignement (l.121-134)** : « les **deux** docs d'entrée » → « les **trois** » +
**ajout du bloc fiche Backend** (`N tests · M suites · verdict → regression_run.json`),
miroir du header du script. La doc décrit à nouveau exactement le code.
### Preuves
| Contrôle | Résultat |
|---|---|
| `git grep '551' *.md` (hors logs/archives) | **aucun** chiffre vivant résiduel ✅ |
| `534` restant | **1 seule** ligne = anecdote historique explicite (l.131) ✅ |
| « trois docs » + fiche Backend décrite dans `ci/README.md` | ✅ |
| 7 gates (`guard`/`json`/`docs`/`artifacts`/`regression`/`ci_integrity`/`readme_claims`) | ✅ exit 0 |
| `check_artifacts` (rebuild + égalité byte de tous les `out/`) | ✅ (édition **hors** `05_deliverables_mvp` ⇒ 0 dérive d'artefact) |
| Arbre de travail | ✅ 1 fichier modifié, 0 untracked |
**Anti-invention (#6)** : rien inventé — la vérité (558) vient de `regression_run.json`
(gaté par `check_regression`) ; le fix **retire** le compteur figé plutôt que d'en poser
un nouveau. Matrice **558/22 · PASS inchangée**.
**Non-régression** : édition **doc pure hors `05_deliverables_mvp`**`qa/audit_4big`
ne la lit pas comme evidence ⇒ `quality_report.json` **inchangé** ; aucune régénération
de consommateur nécessaire.
**Hors périmètre worker (VPS · #8)** : néant (doc en-repo ; runner Gitea = DevOps).
**Auto-score 4Big** : 96/100.
## Session `20260731_040004` · Sprint 7/8 · Livrable démo : ajout du **prompteur Markdown** (`out/run_sheet.md`) — le support texte lisible manquait au « scénario démo prêt à jouer »
**Tâche** : **Sprint 7 l.68** (« CRM + Faisabilité : Scénarios démo P07 banquier ·
+9 -4
View File
@@ -76,8 +76,9 @@ Rejoue la **matrice de régression** complète (`qa/regression/regression_gen.py
**byte-identique** au commité, puis que son verdict soit `PASS`. Complément direct
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
(« 22 suites · 551 tests · PASS »). Sans ce gate, ce chiffre pouvait se périmer en
c'est *lui* qui porte le compte agrégé (suites · tests · passés · verdict) cité dans
la doc et les logs — recompté par `check_readme_claims` dans les fiches d'entrée,
jamais figé en dur ici. Sans ce gate, ce compte 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
@@ -118,7 +119,7 @@ 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** dans les deux
liste à la main · #6) et exige l'égalité avec ce qui est **écrit** dans les trois
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`) ;
@@ -127,9 +128,13 @@ docs d'entrée — `README.md` :
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 ») :
« 21 suites · 534 tests » alors que le run agrégé faisant autorité en disait davantage) :
- `N` suites · `M` tests · `M` passés · `E` échec · `E` erreur · verdict → `qa/regression/out/regression_run.json` (compte agrégé faisant autorité, commité).
Et la fiche ERPNext Backend `03_agents/erpnext_backend/AGENT.md` (ligne « source unique »,
même compte agrégé jadis saisi à la main qui s'était périmé — « 560 tests ») :
- `N` tests · `M` suites · verdict → `qa/regression/out/regression_run.json` (matrice de régression du repo, même source faisant autorité que la fiche QA).
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.