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)