[DTP-Worker 20260805_094211] FIX RÉEL : le README module SEO annonçait « 36 tests (dont 8 injections négatives) » alors que la suite compte 10 méthodes test_negative_* (faux depuis le commit d'origine 0d3b242, sous-compte non gaté — le gate ne recompute que le total 36) → corrigé 8→10

Vérité-terrain : grep -c def test_negative_ = 10 (réparties Keywords/SchemaOrg/Hreflang/Manifest, PAS de classe dédiée) ; git show 0d3b242 = déjà 10 dès la création → jamais un état vrai antérieur (pas historical-repro). Piège confotur écarté : les 2 frères qui affichent un sous-compte négatif en prose sont EXACTS car adossés à une classe nommée countable (confotur « 8 négatifs » = classe TestNegative=8 ; devops « 14 injections négatives » = classe TestNegativeInjections=14) — SEO est le seul faux, ses négatifs ne forment pas de classe. Toute la classe « sous-compte négatif en prose » (seo/devops/confotur) auditée end-to-end.

Surfaces (balayage twin-fix) : seule seo/README.md:67 corrigée (présent-tense, doc vivante) ; les 2 autres occurrences du « 8 » sont dans daily_reports/2026-07-30-session18.md + 05_activity_log/2026-07-30.md = snapshots datés du 2026-07-30 → KEEP.

Effet de bord : audit_4big score le contenu README → quality_report.json régénéré EN DERNIER (seule ligne changée : evidence README.md 3900→3901 octets) · verdict PASS · 24/24 ≥95 (min 100) inchangé.

0 gate ajouté (#5 · erreur d'origine isolée, pas une dérive récurrente ; total déjà gaté ; précédent confotur = ne pas gater ces sous-comptes) · 0 édition d'autorité (le test file n'est pas modifié) · 0 chiffre inventé (#6) · 0 commande VPS (#8). run_ci.sh : 33 PASS

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-05 09:53:56 +00:00
parent 5a96fc32d9
commit fbe298ffd0
3 changed files with 51 additions and 2 deletions
+49
View File
@@ -1,5 +1,54 @@
# Activity Log · 2026-08-05 · Claude Code DTP Worker # Activity Log · 2026-08-05 · Claude Code DTP Worker
## Session 094211 · FIX RÉEL — le README module **SEO** annonçait « 36 tests (dont **8** injections négatives) » alors que la suite en compte **10** `test_negative_*` (faux depuis le commit d'origine `0d3b242`, jamais gaté) → corrigé **8→10** ; toute la classe « sous-compte négatif en prose » (seo/devops/confotur) auditée · 0 gate ajouté · 0 chiffre inventé
**Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **33 PASS · 0 FAIL · 0 SKIP**, arbre propre,
roadmap `ROADMAP_8_WEEKS_OR_LESS.md` intégralement livrée/gatée (Sprint 8 · QA). Aucune tâche
fonctionnelle in-repo restante → chasse à la **dérive documentaire réelle non-gatée** (le mode de valeur
honnête de cette phase). Recherche fan-out (Explore, read-only) + vérification manuelle : **une** dérive
présent-tense confirmée, isolée.
**Finding (calcul de la vérité-terrain, pas un soupçon · [[prose-facts-vs-numeric-drift]]).**
`05_deliverables_mvp/seo/README.md:67` écrit `# 36 tests (dont 8 injections négatives)`. Le **total 36**
est exact ET **gaté** (`ci/check_readme_claims.sh:941` recompute `# (\d+) tests` vs le nombre réel de
`def test_`). Le **sous-compte « 8 »** n'est capté par **aucun** groupe de capture (le pattern ne prend que
le total) → **non gaté**. Vérité-terrain : `grep -c "def test_negative_" tests/test_seo.py` = **10** (10
méthodes réparties dans les classes `Keywords`/`SchemaOrg`/`Hreflang`/`Manifest`, pas de classe dédiée).
`git show 0d3b242:…/test_seo.py | grep -c def test_negative_` = **10** dès le commit d'origine → le « 8 »
est **faux depuis la création** (2026-07-30), jamais un état vrai antérieur (donc pas *historical-repro*).
**Écarter le piège confotur ([[confotur-8-negatifs-not-drift]]).** Les deux modules-frères qui affichent
un sous-compte négatif en prose sont **exacts** car adossés à une **classe nommée** (structurellement
countable) : confotur « 8 négatifs » = classe `TestNegative` (**8** méthodes) ✓ · devops « 14 injections
négatives » = classe `TestNegativeInjections` (**14** méthodes) ✓. **SEO est le seul faux** : ses négatifs
ne forment **pas** de classe (préfixe `test_negative_` dispersé), et aucune lecture ne donne 8 → **10** est
le compte honnête. Fix minimal : `8 → 10`.
**Surfaces (balayage twin-fix · [[prose-facts-vs-numeric-drift]]).** Le « 8 » apparaît 3× : (a)
`seo/README.md:67` = **présent-tense, doc canonique vivante → FIX** ; (b)
`daily_reports/2026-07-30-session18.md:48` et (c) `05_activity_log/2026-07-30.md:920` = **snapshots datés
du 2026-07-30 → KEEP** (convention : rapports/logs horodatés immuables, ne pas réécrire l'histoire,
[[two-logging-channels]]).
**Effet de bord attendu et rebuild ([[audit4big-rebuild-after-doc-edits.md]]).** `audit_4big` **score le
contenu README** ; l'édition a fait diverger l'artefact byte-gaté `qa/audit_4big/out/quality_report.json`
(`check-artifacts` RED). Rebuild `audit_4big_gen.py build` **en dernier** → seule ligne changée :
`"evidence": "README.md (3900 → 3901 octets)"` (« 8 »→« 10 » = +1 octet) · verdict **PASS · 24/24 ≥95
(min 100)** inchangé.
**Décision de NON-gatage (#5 · [[verify-uncovered-before-gating]]).** Erreur d'**origine isolée** (une
faute de frappe unique), **pas** une classe de dérive récurrente : les 2 frères sont exacts et le total est
déjà gaté. Gater le sous-compte seul exigerait, par cohérence, de gater aussi confotur/devops (classe
countable, changement rare) — 3 checks pour un événement à très basse fréquence. Conforme au précédent
[[confotur-8-negatifs-not-drift]] (« ne pas fixer/gater » ces sous-comptes). **Classe désormais auditée
end-to-end** (consigné pour un futur passage : les 3 sous-comptes négatifs sont vérifiés exacts au
2026-08-05).
**Bilan.** 2 fichiers touchés (`seo/README.md` prose + `quality_report.json` régénéré) · **0 édition
d'autorité** (le test file, source de vérité, n'est pas modifié) · **0 gate ajouté** (#5) · **0 chiffre
inventé** (#6 · 10 dérivé de `grep -c`) · **0 commande VPS** (#8) · **aucun `git clean`** <!-- ci-allow : mention de l'interdit, jamais exécuté -->
· `./run_ci.sh` final : **33 PASS · 0 FAIL · 0 SKIP**.
## Session 091204 · FIX de COUVERTURE doc — la fiche **Mobile** omettait son propre **livrable in-repo gaté** (`mobile/app_config`) : elle n'ancrait le rôle que sur RBAC + acceptance, jamais sur le générateur de config app (22 tests · job CI · CLI) → sous-section dédiée + ligne de table **auto-gatée** (3 gates) + 3 énumérations « ancrage in-repo » réconciliées · 0 édition d'autorité · 0 gate ajouté · 0 chiffre inventé ## Session 091204 · FIX de COUVERTURE doc — la fiche **Mobile** omettait son propre **livrable in-repo gaté** (`mobile/app_config`) : elle n'ancrait le rôle que sur RBAC + acceptance, jamais sur le générateur de config app (22 tests · job CI · CLI) → sous-section dédiée + ligne de table **auto-gatée** (3 gates) + 3 énumérations « ancrage in-repo » réconciliées · 0 édition d'autorité · 0 gate ajouté · 0 chiffre inventé
**Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **33 PASS · 0 FAIL · 0 SKIP**, arbre **Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **33 PASS · 0 FAIL · 0 SKIP**, arbre
@@ -774,7 +774,7 @@
"criterion": "DOC", "criterion": "DOC",
"weight": 20, "weight": 20,
"passed": true, "passed": true,
"evidence": "README.md (3900 octets)" "evidence": "README.md (3901 octets)"
}, },
{ {
"criterion": "CONTRAT", "criterion": "CONTRAT",
+1 -1
View File
@@ -64,7 +64,7 @@ complètes + `x-default` = langue par défaut = `canonical` · toutes les URLs s
## Tests ## Tests
```bash ```bash
python3 -m unittest discover -s tests -v # 36 tests (dont 8 injections négatives) python3 -m unittest discover -s tests -v # 36 tests (dont 10 injections négatives)
``` ```
## Hors périmètre worker (VPS · #8) ## Hors périmètre worker (VPS · #8)