From e87f5f56afa80e993371303b16f302735ddb46fe Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Thu, 6 Aug 2026 09:49:34 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260806=5F094524]=20V=C3=89RIF?= =?UTF-8?q?=20axe=20teeth=20neuf=20=C2=AB=20tests=20silencieusement=20fant?= =?UTF-8?q?=C3=B4mes=20(shadowing)=20=C2=BB=20=E2=86=92=20CLEAN=2025/25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nouvel axe absent de la mémoire, distinct de module-suite-teeth-mutation (mute la LOGIQUE) et schema-oracle-teeth-audit (audite l'ORACLE) : cible le HARNAIS de test lui-même. 3 cas où une méthode est définie mais unittest discover ne l'exécute jamais, sans qu'aucun gate ne le voie — (a) def test_x dupliqué dans une classe (Python garde la dernière liaison), (b) class TestFoo dupliqué dans un fichier (2ᵉ masque 1ʳᵉ), (c) def test_* niveau-module (discover ne le lance pas). Trou réel : un shadow passe par absence ET ferait SUR-compter check_readme_claims (compte textuel des def test_). Détecteur AST teeth-prouvé sur sonde synthétique (3/3 mordent). Balayage réel CLEAN 25/25 fichiers (0 méthode-dup, 0 classe-dup, 0 test niveau-module). Sweep rejouable, NOT a gate (occurrence-zéro, #5). run_ci 33 PASS 0 FAIL 0 SKIP · 0 prod édité · 0 artefact reconstruit. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-06.md | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index ff5dc49..93d1d0c 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -1,5 +1,41 @@ # Activity Log · 2026-08-06 · Claude Code DTP Worker +## Session `20260806_094524` — VÉRIF indépendante · NOUVEL axe teeth « tests silencieusement fantômes (shadowing) » → CLEAN 25/25 · 0 édition de production + +**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 (Sprints 1→7 côté repo ; prod VPS / +builds EAS / dépôts ONAPI hors périmètre worker · #8). Les ~15 derniers commits sont des sweeps +vérification-only à rendement décroissant. Objectif : chasser un **vrai défaut ungaté** sur un **axe +teeth encore jamais balayé** (anti-churn). + +**Axe NEUF (absent de la mémoire) → famille « tests silencieusement fantômes ».** Distinct de +`module-suite-teeth-mutation` (mute la LOGIQUE générateur) et `schema-oracle-teeth-audit` (audite +l'ORACLE) : ici la cible est le **harnais de test lui-même** — 3 cas où une méthode de test est +*définie* mais `unittest discover` ne l'exécute **jamais**, sans qu'aucun gate ne détecte la perte : +- **`def test_x` dupliqué dans une classe** — Python garde la **dernière** liaison ; la 1ʳᵉ ne tourne jamais. +- **`class TestFoo` dupliqué dans un fichier** — la 2ᵉ classe masque la 1ʳᵉ ; les tests de la 1ʳᵉ ne tournent jamais. +- **`def test_*` au niveau module** (hors TestCase) — `discover` ne le lance pas, mais un compteur textuel le tallye. + +**Pourquoi c'est un vrai trou (aveugle aux autres sweeps).** Un shadow fait **passer le test par +absence** ; et `check_readme_claims` (classe `doc-numeric-claims-gate`) compte les `def test_` +**textuellement** → un shadow ferait **SUR-compter** le README vs le compte runtime réel (dérive +inverse de l'habituelle). byte-repro / forward-compat / mutation-de-suite sont tous aveugles. + +**Détecteur (AST) — teeth-prouvé.** Parse de chaque `git ls-files '*test*.py'` : par ClassDef, +`Counter` des méthodes `test*` > 1 ; par fichier, `Counter` des noms de ClassDef > 1 ; corps de +module, `def test_*` = niveau-module. **Sonde synthétique 3-cas → les 3 MORDENT** (méthode-dup, +classe-dup, niveau-module). Balayage réel → **CLEAN 25/25** fichiers de test (0 méthode-dup, +0 classe-dup, 0 test niveau-module). + +**Verdict.** Repo **CLEAN** sur le nouvel axe. **Aucun défaut de production.** Ces dents sont +réellement gardées par aucun gate (un test shadow serait détecté ici et nulle part ailleurs), mais +l'occurrence-zéro ne justifie **pas** un gate permanent (#5) : consigné comme sweep **rejouable** +(mémoire `test-shadowing-sweep`), sibling de `runtime-encoding-integrity-sweep` / `hash-seed-…`. + +**Portée / anti-churn.** **Production éditée : néant.** Édité : ce journal + 1 entrée mémoire. +**0 artefact reconstruit**, **0 gate ajouté** (#5), **0 chiffre inventé** (#6 — 25/25 recomputés par +balayage), **0 commande VPS** (#8). Structure du gate inchangée (33 checks). + ## Session `20260806_091519` — FIX doc · NOUVEL axe objectif « cohérence du compte de colonnes des tables Markdown » → 1 vrai défaut (ligne à colonne orpheline dans le TEMPLATE canonique de faisabilité) **Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre,