From f9d303f2629fb0b23f2b6e6b943a189e91df806f Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Mon, 3 Aug 2026 12:20:17 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260803=5F120715]=20Fix=20drift?= =?UTF-8?q?=20=C2=B7=20surfaces=20s=C5=93urs=2022=E2=86=9224=20laiss=C3=A9?= =?UTF-8?q?es=20par=20r=C3=A9conciliation=20100714=20dans=20prose=20gate-d?= =?UTF-8?q?ocs=20(ci/)=20=C2=B7=20invariant=20g=C3=A9n=C3=A9ral=20de-hardc?= =?UTF-8?q?od=C3=A9=20+=20citations=20contenu=20fiche=20align=C3=A9es=2024?= =?UTF-8?q?/624?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-03.md | 55 +++++++++++++++++++++++++++++++++++ ci/README.md | 2 +- ci/check_readme_claims.sh | 12 ++++---- 3 files changed, 62 insertions(+), 7 deletions(-) diff --git a/05_activity_log/2026-08-03.md b/05_activity_log/2026-08-03.md index 2be694e..e3dd6b0 100644 --- a/05_activity_log/2026-08-03.md +++ b/05_activity_log/2026-08-03.md @@ -883,3 +883,58 @@ modules ≥ 95** inchangé, diff confiné à cette unique ligne (score pie incha **Réalisé / gate-vert.** 1 ligne prose éditée + `quality_report.json` re-généré byte-gaté. `./run_ci.sh` en clôture = **32 PASS · 0 FAIL · 0 SKIP**. Commit à suivre. + +--- + +## Session 120715 · Fix drift résiduel `22→24` · surfaces sœurs laissées par la réconciliation `100714` dans la prose des gate-docs (`ci/`) + +**Choix de tâche.** `./run_ci.sh` à l'ouverture = **32 PASS · 0 FAIL · 0 SKIP** — propre. +Les 8 sprints de `ROADMAP_8_WEEKS_OR_LESS.md` sont livrés (24 modules gated), la matrice +de recette couvre bijectivement les 15 promesses (8 sprint-deliverables + 7 métriques MVP, +ancrées aux `roadmap_line`). Aucune tâche roadmap non-complétée ⇒ fallback mandat « auditer / +améliorer une doc » appliqué à un **vrai trou** de dérive, pas une retouche cosmétique. + +**Audits à blanc (0 dérive).** (a) Sweep docstring-vs-CODE des 2 modules les plus neufs +(`pie/manifest`, `crm/financement_bancaire`) via sous-agent Explore → sorties/entrées/invariants/ +comptes tous fidèles au code, **propres** ([[docstring-vs-code-drift]] saturé, confirmé). (b) Le +canal `daily_reports/2026-08-03.md` **n'est PAS périmé** : l'instantané `000623` (22 modules) était +exact *à l'écriture* — `pie` + `financement_bancaire` ont été ajoutés à `100714` — et l'addendum +`100714` du même fichier réconcilie déjà 22→24 (24/24 · 624 tests · 15/15). **Ne pas ré-écrire un +instantané historiquement exact.** + +**Trou identifié — surfaces sœurs `22→24` non balayées.** La réconciliation `100714` (commit +`e24f2c9`) a mis à jour les surfaces **gatées** (fiches QA/DevOps/ERPNext, README racine → tous +« 24 suites · 624 tests ») mais a laissé **6 mentions résiduelles** dans la **prose explicative des +gate-docs** (`ci/README.md` + commentaires `ci/check_readme_claims.sh` — surfaces **non gatées**, +d'où silence). Classe [[prose-facts-vs-numeric-drift]] : claims free-text au **présent** divergeant +de l'artefact. Distinguées avec soin des voisins **à conserver** : +- **Reproductions historiques** (numéros d'époque, exacts) : « 20 modules listés sur 22 », « bijective + 22/22 vs CI » (défaut réel *reproduit* quand il y avait 22 modules) → **intactes**. +- **Hypothétiques pédagogiques** : « ex. 21→22 modules », « 17→22 », les exemples de *compensation* + « 534/560/564 tests » (le `ci/README.md` réserve les placeholders `N`/`M` aux valeurs vives et les + entiers concrets aux exemples de dérive passée) → **intacts**. +- **Citations de n° de ligne** : « README:22-23 » (pas un compte) → **intactes**. + +**Correctif (6 éditions chirurgicales, 2 fichiers).** +1. **De-hardcode de l'invariant général** (×2 · `ci/README.md` L733 + commentaire miroir + `check_readme_claims.sh` L3168) : « l'union des cellules Modules == les **22** modules de + l'artefact » → « == **l'ensemble des** modules de l'artefact ». Cette clause décrit au **présent** + ce que le gate `deploy_runbook` **exige NOW** (artefact = **24** modules, union vérifiée) ; y figer + un compte est une dérive-en-puissance qui vient *justement* de dériver. Phrasing agnostique = + **anti-récidive** (ne re-dérivera plus à l'ajout d'un module). +2. **Alignement des citations de contenu de fiche au présent** (×4 · bloc « Fiche DevOps · COMPTE de + suites gated » de `check_readme_claims.sh`) : « la cellule porte « **22** suites gated » », « l'agrégat + QA « **22** suites gated · **564** tests » », « la MÊME valeur **22** vit à DEUX endroits », « sans capter + la valeur **22** de la fiche QA » → **24** / **624**. Ces commentaires *citent le contenu courant* des + fiches DevOps/QA, lesquelles portent désormais « 24 suites · 624 tests » (vérifié : + `03_agents/{devops,qa}/AGENT.md`). Sweep complet du bloc — aucune sœur `22`/`564` résiduelle. + +**Zéro artefact / générateur touché.** `ci/` n'est pas un module de `05_deliverables_mvp/` → **non +scoré par `audit_4big`** ([[audit4big-rebuild-after-doc-edits]]) ⇒ pas de rebuild `quality_report`. +Aucun gate ne dépend du texte de ces commentaires (le code recompute depuis `reg["suites"]` / +`deploy_runbook.json`). Vérifié : `deploy_runbook.json` = **24** modules (union, `financement_bancaire` ++ `pie/manifest` présents) · fiches gatées = **24/624** · `quality_report` = 24/24@100 · `regression_run` += 24 suites · 624 tests. + +**Réalisé / gate-vert.** 6 lignes de prose gate-doc éditées, prose only. `./run_ci.sh` en clôture = +**32 PASS · 0 FAIL · 0 SKIP**. Commit à suivre. diff --git a/ci/README.md b/ci/README.md index 92499d4..4a2349a 100644 --- a/ci/README.md +++ b/ci/README.md @@ -730,7 +730,7 @@ couverture **bijective 22/22 vs CI** : vert trompeur, l'agent DevOps aurait saut modules au portage. Le gate recompute `#`/`Responsable`/`Modules`/`Dépend de` depuis `deploy_runbook.json` et exige que la table les énonce **exactement** par phase ; identité d'ensemble : {ordres des lignes} == {ordres de l'artefact} (aucune phase -fantôme/manquante) **et** l'**union** des cellules Modules == les 22 modules de +fantôme/manquante) **et** l'**union** des cellules Modules == l'ensemble des modules de l'artefact (aucun module oublié/en trop). La colonne « Phase » reste libre (paraphrase). Cohérences croisées en bonus (mordent un plan interne incohérent) : ordres contigus `1..N` sans doublon · `responsable` ∈ {worker, vps, worker+vps} · diff --git a/ci/check_readme_claims.sh b/ci/check_readme_claims.sh index 3abb1d3..445e4de 100755 --- a/ci/check_readme_claims.sh +++ b/ci/check_readme_claims.sh @@ -837,23 +837,23 @@ for path_f, suite_path, pat, label in PER_SUITE_HORS_TABLE: # Tous les blocs de comptes de tests précédents recomputent un compte de MÉTHODES # `def test_` (`auth[path]`). La table de livrables de la fiche DevOps porte, elle, # dans la cellule « Tests » de la ROW du pipeline CI (`.gitea/workflows/ci.yml` + -# `ci/`), un compte d'une CLASSE tout autre : « 22 suites gated » — le nombre de +# `ci/`), un compte d'une CLASSE tout autre : « 24 suites gated » — le nombre de # suites que la CI passe au crible, soit `regression_plan.totals.suites` (déjà chargé # dans `reg`, byte-gaté par check_artifacts · recompté à chaque build par la # découverte réelle des suites). Ce nombre est SAISI À LA MAIN dans la fiche et # NI row_re NI aucun bloc amont ne l'atteint : (a) row_re exige un lien d'ancre # `/…/README.md` vers une suite gatée ET une cellule ENTIER NU — or l'ancre ici # est `ci.yml`/`ci/` (pas un module de `auth`) ET la cellule porte le suffixe -# « suites gated » ; (b) l'agrégat de la fiche QA (« 22 suites gated · 564 tests… », +# « suites gated » ; (b) l'agrégat de la fiche QA (« 24 suites gated · 624 tests… », # gaté sur regression_run) est une SURFACE distincte (autre fiche, autre motif). La -# MÊME valeur 22 vit donc à DEUX endroits — un seul était gaté. Ajouter/retirer un +# MÊME valeur 24 vit donc à DEUX endroits — un seul était gaté. Ajouter/retirer un # module gated fait bouger `reg["suites"]` tandis que cette cellule DevOps rote en # silence : la doc d'identité de l'agent DevOps affirmerait un périmètre de couverture # CI faux (le « vert trompeur » que #6 interdit). Aucune suite tests/ (FONCTIONS, pas # la prose de fiche) ne l'attrape. On RECOMPUTE depuis `reg["suites"]` (source unique # déjà en portée · zéro duplication #6) et on exige que la cellule l'écrive EXACTEMENT. # Motif ANCRÉ sur le label de rôle « CI/CD Gitea Actions » de CETTE row → vise la -# bonne cellule sans capter la valeur 22 de la fiche QA (autre fichier de toute façon). +# bonne cellule sans capter la valeur 24 de la fiche QA (autre fichier de toute façon). # Claim absent = échec (traçabilité #6). Cohérence croisée : `reg["suites"]` == # regression_run (len(suites)) — la source du compte de tests de la fiche QA — de sorte # qu'une divergence plan↔run (compte de suites) morde ici aussi. @@ -3165,8 +3165,8 @@ if dr_ph is not None: # trompeur, l'agent DevOps aurait sauté 2 modules. On RECOMPUTE #/responsable/ # modules/deps depuis deploy_runbook.json (zéro duplication) et on exige que la table # les énonce EXACTEMENT. Identité d'ensemble : {ordres des lignes} == {ordres de -# l'artefact} (aucune phase FANTÔME/MANQUANTE) ET l'UNION des cellules Modules == les -# 22 modules de l'artefact (aucun module OUBLIÉ/en trop). La colonne « Phase » reste +# l'artefact} (aucune phase FANTÔME/MANQUANTE) ET l'UNION des cellules Modules == +# l'ensemble des modules de l'artefact (aucun module OUBLIÉ/en trop). La colonne « Phase » reste # libre (paraphrase). Cohérences croisées en bonus (mordent un plan INTERNEMENT # incohérent) : ordres contigus 1..N sans doublon · responsable ∈ {worker, vps, # worker+vps} · toute dépendance pointe en ARRIÈRE (n° < n° de la phase ⇒ pas de