[DTP-Worker 20260802_140554] Sprint 8 · buffer · Audit d'EFFICACITÉ des gates : mutation-testing du suite → 7 mutations / 7 RED prouvés (« vert » ≠ « faux-vert »), zéro gate ajouté (#5)
Angle complémentaire à la campagne « surfaces non couvertes » (verify-uncovered- before-gating prouve qu'une dérive SERAIT attrapée si un gate mordait) : en phase launch, les gates VERTS mordent-ils réellement ? J'ai mutation-testé le suite, chaque mutation immédiatement révertée (arbre propre re-vérifié) : - check_ci_integrity : job fantôme dans gate.needs (DANGLING) → RED · job réel retiré de gate.needs (MISSING) → RED - check_artifacts : octet parasite dans out/MANIFEST.json (repro byte) → RED - check_readme_claims : README « 22/22 modules »→« 23/22 » → RED · « 15 promesses » →« 16 » → RED - guard_constraints : URL github.com (usage réel) → RED · « stripe payments » → RED 7/7 : les 4 gates à oracle recomputé MORDENT ; « vert » = réellement conforme. Non-finding documenté (piège évité) : guard_constraints ne flague PAS le mot nu « GitHub », à dessein (terme interdit = l'USAGE github.com|git@github, pas la mention — mémoire guard-constraints-flags-usage-not-mention). Ma 1re mutation « bare word » est restée verte → ce n'était pas un trou mais une mutation mal conçue ; re-testé avec un vrai usage → RED. Zéro gate ajouté (aucune surface non couverte prouvée · #5), seul fichier touché = le log (ligne M5b citant github.com marquée ci-allow, cf. guard-constraints-log-prose). 7 gates re-joués → exit 0. Aucune commande touchant au VPS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,53 @@
|
||||
# Activity log · 2026-08-02 · Claude Code DTP Worker
|
||||
|
||||
## Sprint 8 · buffer · Audit d'EFFICACITÉ des gates anti-dérive : mutation-testing du suite complet → 7 mutations, 7 RED prouvés (« vert » ≠ « faux-vert ») + zéro gate ajouté (#5)
|
||||
|
||||
**Nature — assurance de phase launch, PAS un gate de plus (CLAUDE.md #5).**
|
||||
La série récente a saturé la chasse aux *surfaces non couvertes* (mémoire
|
||||
`verify-uncovered-before-gating`) : elle prouve qu'une dérive **serait attrapée SI**
|
||||
un gate mordait. Angle complémentaire jamais fait explicitement en buffer : **les
|
||||
gates verts mordent-ils réellement ?** Un gate cassé/neutralisé reste vert et donne
|
||||
une fausse assurance — risque direct en phase de bascule launch (Sprint 8). J'ai donc
|
||||
**mutation-testé le suite**, chaque mutation immédiatement révertée (`git checkout --`,
|
||||
aucune trace ; arbre propre re-vérifié `git status --porcelain` = vide).
|
||||
|
||||
**Protocole — 7 mutations ciblées sur 4 gates, résultat attendu = ROUGE :**
|
||||
|
||||
| # | Gate | Mutation injectée | Verdict |
|
||||
|---|---|---|---|
|
||||
| M1 | `check_ci_integrity` | job fantôme `ghost-job` ajouté à `gate.needs` (DANGLING) | RED ✓ |
|
||||
| M2 | `check_ci_integrity` | `mobile-app-config-tests` retiré de `gate.needs` (MISSING) | RED ✓ |
|
||||
| M3 | `check_artifacts` | octet parasite ajouté à `crm/commissions/out/MANIFEST.json` (repro byte) | RED ✓ |
|
||||
| M4b | `check_readme_claims` | README « 22/22 modules » → « 23/22 » | RED ✓ |
|
||||
| M4c | `check_readme_claims` | README « 15 promesses » → « 16 » | RED ✓ |
|
||||
| M5b | `guard_constraints` | URL `https://github.com/acme/thing` (usage réel — cité ici, `ci-allow`) | RED ✓ |
|
||||
| M5c | `guard_constraints` | `stripe payments` (paiement interdit CLAUDE.md #10) | RED ✓ |
|
||||
|
||||
**7/7 → les 4 gates échantillonnés MORDENT.** Chaque ROUGE a été confirmé par le
|
||||
message de violation exact (ex. M4b : *« Qualité 4Big · modules gated — README dit
|
||||
23/22/100 MAIS artefact dit 22 »* ; M4c : *« Recette · promesses — README dit 16/8/7
|
||||
MAIS artefact… »* ; M5b : *« Interdit détecté — GitHub »*). Les 3 autres gates
|
||||
(`check_docs`, `check_regression`, `validate_json`) restent couverts par la campagne
|
||||
« surfaces » antérieure ; échantillon centré ici sur les gates à **oracle recomputé**
|
||||
(les plus exposés à un faux-vert par régression de logique).
|
||||
|
||||
**Non-finding documenté (piège évité) — `guard_constraints` ne flague PAS le mot nu
|
||||
« GitHub », À DESSEIN.** Une 1ʳᵉ mutation (« GitHub is great. ») est restée VERTE ;
|
||||
avant de crier au trou, lecture de `ci/guard_constraints.sh:60` : le terme interdit
|
||||
est l'**usage** (`github\.com|git@github|github\.io`), jamais la simple **mention** —
|
||||
même principe que le suppresseur `PROHIBITION` (l.25) qui ignore les lignes-rappels
|
||||
de règle (« JAMAIS GitHub » de `CLAUDE.md` ne doit pas s'auto-flaguer). Le « trou »
|
||||
était donc ma mutation mal conçue, pas une faille : re-testé avec un **vrai** usage
|
||||
(M5b) → ROUGE. Leçon actée en mémoire (`guard-constraints-flags-usage-not-mention`)
|
||||
pour qu'une session future ne re-panique pas sur ce faux-positif.
|
||||
|
||||
**Bilan.** Le suite anti-dérive n'est pas décoratif : **vert = réellement conforme**.
|
||||
Zéro gate ajouté (aucune surface non couverte prouvée · #5), zéro fichier de code/doc
|
||||
touché hors ce log, arbre propre. État inchangé et vert : 7 gates re-joués → exit 0,
|
||||
câblage CI intègre (`gate.needs` = 30 jobs · `e2e-baseline` seul job manuel, vérifié).
|
||||
Aucune commande touchant au VPS.
|
||||
|
||||
|
||||
## Sprint 8 · buffer · Dérive doc-vs-réalité : 11 fiches AGENT.md pointaient un canal `handoffs/` INEXISTANT — correction vers le canal de hand-off RÉEL (livrables `out/` commités)
|
||||
|
||||
**Nature — dérive réelle, pas un gate de plus (CLAUDE.md #5 · interdit « documenter sans vérifier existence courante »).**
|
||||
|
||||
Reference in New Issue
Block a user