[DTP-Worker 20260802_190604] Sprint 8 · buffer · QA launch-readiness : mutation-test que les 7 gates statiques MORDENT (7/7 RED)
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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 ·
|
(30 jobs) · `check_docs` · `check_readme_claims` · `guard_constraints` verts ·
|
||||||
`run_ci.sh` (plein) → **30 PASS · 0 FAIL · 0 SKIP**. Arbre propre avant édition.
|
`run_ci.sh` (plein) → **30 PASS · 0 FAIL · 0 SKIP**. Arbre propre avant édition.
|
||||||
Aucune commande touchant au VPS.
|
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user