From 7c79e4302a2d72571969864b92afed29ff6e1198 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Sun, 2 Aug 2026 19:14:32 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260802=5F190604]=20Sprint=208?= =?UTF-8?q?=20=C2=B7=20buffer=20=C2=B7=20QA=20launch-readiness=20:=20mutat?= =?UTF-8?q?ion-test=20que=20les=207=20gates=20statiques=20MORDENT=20(7/7?= =?UTF-8?q?=20RED)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Livrable QA Sprint 8 « Regression tests exhaustifs » sous l'angle le plus fort : prouver que les gates existants attrapent réellement une régression (un gate vert qui ne mord pas est pire qu'absent). Audit doc-vs-réalité frais = aucune dérive non gatée → au lieu d'empiler un gate N+1 (#5), vérification pure. 7/7 gates statiques ci/*.sh RED sur leur classe de dérive respective : guard_constraints (URL github interdite), check_ci_integrity (job retiré de gate.needs), check_docs (lien interne cassé), check_readme_claims (compte 13→14), check_artifacts (octet parasite MANIFEST), validate_json (JSON invalide), check_regression (totals.passed 564→565). Chaque mutation revert par chemin ciblé (jamais git clean). 2 « faux verts » analysés = PAS des trous : frontière de propriété nette entre check_regression (regression_run.json/run) et check_artifacts (MANIFEST/build) ; 1re mutation regression_run.json inefficace (compteurs imbriqués sous totals). Zéro nouveau module · zéro gate ajouté (#5) · zéro fichier de production modifié. Détail : 05_activity_log/2026-08-02.md. run_ci.sh 30 PASS · arbre propre. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-02.md | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/05_activity_log/2026-08-02.md b/05_activity_log/2026-08-02.md index e00e9df..e52bbfd 100644 --- a/05_activity_log/2026-08-02.md +++ b/05_activity_log/2026-08-02.md @@ -1810,3 +1810,49 @@ complet mais avait **2 vraies aspérités d'UX**, reproduites avant correction : (30 jobs) · `check_docs` · `check_readme_claims` · `guard_constraints` verts · `run_ci.sh` (plein) → **30 PASS · 0 FAIL · 0 SKIP**. Arbre propre avant édition. Aucune commande touchant au VPS. + +## Session `20260802_190604` · Sprint 8 · buffer · QA — vérification launch-readiness : mutation-test que les 7 gates statiques MORDENT encore (7/7 RED, revert propre) + +**Contexte.** Repo 100 % construit (`run_ci.sh` → 30 PASS · 0 FAIL) ; sprints 1→7 +livrés côté dépôt, phase buffer Sprint 8. Un audit doc-vs-réalité frais (top-level +docs + 13 fiches `03_agents/*/AGENT.md` + `daily_reports` + roadmap) n'a trouvé +**aucune dérive non gatée** — la surface driftable évidente est épuisée. Décision +(#5 — ne pas empiler un gate N+1 redondant) : plutôt qu'inventer du travail, exécuter +le livrable QA propre de Sprint 8 (« **Regression tests exhaustifs** ») sous l'angle +le plus fort : **prouver que les gates existants attrapent réellement une régression** +(un gate vert qui ne mord pas est pire qu'absent — cf. mémoire `verify-uncovered-before-gating` ++ `guard-constraints-flags-usage-not-mention`). + +**Méthode.** Pour chacun des 7 gates statiques `ci/*.sh`, injecter une mutation +ciblée de la classe de dérive qu'il est censé traquer, exécuter le gate, exiger un +**exit non-zéro** (RED), puis **revert par chemin ciblé** (jamais `git clean` — #interdits) +et re-vérifier l'arbre à 0 fichier modifié. + +| # | Gate | Mutation injectée | Résultat | +|---|------|-------------------|----------| +| 1 | `guard_constraints` | URL interdite `https://github.com/…` ajoutée à `README.md` | **RED** ✓ (`Interdit détecté — GitHub`) | +| 2 | `check_ci_integrity` | retrait de `constraints-guard` de `gate.needs` (ci.yml) | **RED** ✓ (`ABSENT de gate.needs` + INV-B) | +| 3 | `check_docs` | lien Markdown interne cassé `./this/does/not/exist.md` | **RED** ✓ (`lien cassé`) | +| 4 | `check_readme_claims` | compte fiches `13`→`14` dans `README.md` | **RED** ✓ (`README dit 14 MAIS artefact dit 13`) | +| 5 | `check_artifacts` | octet parasite ajouté à `crm/commissions/out/MANIFEST.json` | **RED** ✓ (`DÉRIVE … diffère du build frais`) | +| 6 | `validate_json` | JSON syntaxiquement invalide dans un artefact commité | **RED** ✓ (exit 1) | +| 7 | `check_regression` | `totals.passed` `564`→`565` dans `out/regression_run.json` | **RED** ✓ (`DÉRIVE : le run frais diffère du commité`) | + +**Deux « faux verts » — analysés, PAS des trous de couverture :** +- Mutation d'un `MANIFEST.json` de régression testée d'abord contre `check_regression` + → **vert** : normal, `check_regression` ne possède QUE `regression_run.json` + (artefact de `run`, compteurs exécutés) ; le `MANIFEST.json` (artefact de `build`) + est possédé par `check_artifacts` — mutation re-testée contre lui → **RED** ✓. + **La frontière de propriété entre les deux gates est nette et correcte.** +- Première tentative de mutation de `regression_run.json` inefficace (bump d'un `int` + de premier niveau — or les compteurs sont **imbriqués** sous `totals`, aucun `int` + racine) → rewrite byte-identique → vert légitime. Corrigée en mutant `totals.passed` + (ligne 7 ci-dessus) → **RED** ✓. + +**Conclusion.** **7/7 gates statiques MORDENT** sur leur classe de dérive respective, +frontières de propriété inter-gates confirmées, **aucun trou de couverture**. Le +verrou anti-régression de la plateforme est prouvé opérationnel pour le launch +(pas seulement « vert par chance »). **Zéro nouveau module · zéro gate ajouté (#5) · +zéro fichier de production modifié** — travail de vérification pur, chaque mutation +revert par chemin ciblé. Arbre final : `git status --short` → 0 ligne · `run_ci.sh` +→ **30 PASS · 0 FAIL · 0 SKIP**. Aucune commande touchant au VPS.