[DTP-Worker] hardening correctness · l'alignement du compteur de tests audit_4big↔discovery (fix ASCII ac595d0) était INCOMPLET · criteria.py gardait def (un espace figé) là où la source sœur reglib.discovery a def\s+def test_x(/def\ttest_x( (Python valide) loupés → sous-comptage silencieux + désaccord avec l'autorité byte-gatée de la colonne « Tests » des fiches (violation #6, même racine « détecter la forme, pas une graphie » que ac595d0/fd99362)

Fix chirurgical `def ` → `def\s+` (forme strictement identique à discovery._TEST_METHOD_RE) + teeth test_tests_counts_non_single_space_def_separator (prouvé mordant : ancien regex compte 1/3, nouveau 3/3). Occurrence latente (0 def multi-espace dans le dépôt aujourd'hui) → quality_report.json byte-identique (audit_4big s'auto-exclut de son scoring). Cascade matrice régression 627→628 / 610→611 ; fiches qa+erpnext_backend re-dérivées. Axe recursion (os.walk vs os.listdir) non-occurrent, laissé. Classe compteur-coïncidence désormais close sur ses 2 axes. Pas de nouveau gate (#5 · check_readme_claims mord déjà). 0 code moteur V18 (bloqué #6), 0 commande VPS (#8).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-11 09:05:51 +00:00
parent fd99362660
commit 35de616236
8 changed files with 63 additions and 12 deletions
@@ -126,6 +126,27 @@ class CriteriaTest(unittest.TestCase):
res = criteria.crit_tests(mod, 1)
self.assertIn("2 méthodes", res["evidence"])
def test_tests_counts_non_single_space_def_separator(self):
# Robustesse (complète l'alignement char-class du fix ASCII) : `def` et
# le nom de méthode peuvent être séparés par PLUSIEURS espaces ou une
# tabulation — du Python valide. Le littéral `def ` (un seul espace)
# loupait `def test_x(` / `def\ttest_x(` → sous-comptage silencieux et
# DÉSACCORD avec la source sœur reglib.discovery (`def\s+`), autorité de
# la colonne « Tests » des fiches. Les deux compteurs du MÊME concept
# doivent coïncider sur toute graphie valide (#6).
with tempfile.TemporaryDirectory() as d:
mod = os.path.join(d, "mod")
tdir = os.path.join(mod, "tests")
os.makedirs(tdir)
with open(os.path.join(tdir, "test_mod.py"), "w",
encoding="utf-8") as fh:
fh.write("import unittest\nclass T(unittest.TestCase):\n"
" def test_one_space(self):\n pass\n"
" def test_two_spaces(self):\n pass\n"
" def\ttest_tab(self):\n pass\n")
res = criteria.crit_tests(mod, 1)
self.assertIn("3 méthodes", res["evidence"])
def test_cli_fails_without_entrypoint(self):
with tempfile.TemporaryDirectory() as d:
mod = _make_module(d, cli=False)