[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:
Claude Code DTP Worker
2026-08-02 14:14:36 +00:00
parent 576e78b6a9
commit bd3572b382
+48
View File
@@ -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 »).**