[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:
@@ -1,5 +1,75 @@
|
|||||||
# Activity Log · 2026-07-31 · Claude Code DTP
|
# 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 »
|
## 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 ·
|
**Tâche** : **Sprint 7 l.68** (« CRM + Faisabilité : Scénarios démo P07 banquier ·
|
||||||
|
|||||||
+9
-4
@@ -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
|
**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
|
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
|
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
|
c'est *lui* qui porte le compte agrégé (suites · tests · passés · verdict) cité dans
|
||||||
(« 22 suites · 551 tests · PASS »). Sans ce gate, ce chiffre pouvait se périmer en
|
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 ;
|
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
|
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
|
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
|
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
|
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
|
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` :
|
docs d'entrée — `README.md` :
|
||||||
- modules gated `N/M` à `K/100` + verdict `PASS` → `qa/audit_4big/out/quality_report.json` (`totals`) ;
|
- 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` 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
|
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é
|
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é).
|
- `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
|
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
|
disparaître un chiffre est elle-même une régression de traçabilité). stdlib pur
|
||||||
(bash/git/python3), zéro réseau.
|
(bash/git/python3), zéro réseau.
|
||||||
|
|||||||
Reference in New Issue
Block a user