From fbe298ffd002e96a45e385f38689ec3aa75a95a2 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Wed, 5 Aug 2026 09:53:56 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260805=5F094211]=20FIX=20R?= =?UTF-8?q?=C3=89EL=20:=20le=20README=20module=20SEO=20annon=C3=A7ait=20?= =?UTF-8?q?=C2=AB=2036=20tests=20(dont=208=20injections=20n=C3=A9gatives)?= =?UTF-8?q?=20=C2=BB=20alors=20que=20la=20suite=20compte=2010=20m=C3=A9tho?= =?UTF-8?q?des=20test=5Fnegative=5F*=20(faux=20depuis=20le=20commit=20d'or?= =?UTF-8?q?igine=200d3b242,=20sous-compte=20non=20gat=C3=A9=20=E2=80=94=20?= =?UTF-8?q?le=20gate=20ne=20recompute=20que=20le=20total=2036)=20=E2=86=92?= =?UTF-8?q?=20corrig=C3=A9=208=E2=86=9210?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- 05_activity_log/2026-08-05.md | 49 +++++++++++++++++++ .../qa/audit_4big/out/quality_report.json | 2 +- 05_deliverables_mvp/seo/README.md | 2 +- 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/05_activity_log/2026-08-05.md b/05_activity_log/2026-08-05.md index b6193fd..ed30379 100644 --- a/05_activity_log/2026-08-05.md +++ b/05_activity_log/2026-08-05.md @@ -1,5 +1,54 @@ # 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`** +· `./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é **Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **33 PASS · 0 FAIL · 0 SKIP**, arbre diff --git a/05_deliverables_mvp/qa/audit_4big/out/quality_report.json b/05_deliverables_mvp/qa/audit_4big/out/quality_report.json index 07d90ce..1daa7aa 100644 --- a/05_deliverables_mvp/qa/audit_4big/out/quality_report.json +++ b/05_deliverables_mvp/qa/audit_4big/out/quality_report.json @@ -774,7 +774,7 @@ "criterion": "DOC", "weight": 20, "passed": true, - "evidence": "README.md (3900 octets)" + "evidence": "README.md (3901 octets)" }, { "criterion": "CONTRAT", diff --git a/05_deliverables_mvp/seo/README.md b/05_deliverables_mvp/seo/README.md index edce318..f9a5aac 100644 --- a/05_deliverables_mvp/seo/README.md +++ b/05_deliverables_mvp/seo/README.md @@ -64,7 +64,7 @@ complètes + `x-default` = langue par défaut = `canonical` · toutes les URLs s ## Tests ```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)