[DTP-Worker] fix correctness · audit 4Big sous-comptait un test au nom accentué (regex ASCII vs \w Unicode de la source sœur reglib.discovery)

criteria.py:18 comptait les méthodes via char-class ASCII [A-Za-z0-9_] →
loupait le test réel `test_traçabilite_source` (ç · PEP 3131, exécuté par
unittest) → évidence fausse « 22 méthodes » pour publiciste (réel 23), en
violation du cœur anti-invention #6 de l'audit lui-même. La source sœur
qa/regression/reglib/discovery.py:23 comptait déjà correctement (`test_\w+`,
\w Unicode) = 23 → les 2 outils QA divergeaient d'un. Fix aligné sur la sœur
(\w). Teeth ajoutée (test_tests_counts_non_ascii_method_names, mordante :
1 sur l'ancienne regex, 2 sur la nouvelle).

Cascade régénérée : quality_report.json (publiciste 22→23, verdict PASS 24/24
min 100 inchangé) · regression_run/plan/MANIFEST (625→626 exéc · 608→609 passés)
· fiches qa (audit_4big 34→35, agrégat 626/609) + erpnext_backend (625→626).
Blast-radius = 1 seul nom de test non-ASCII dans tout le dépôt (scan AST 24
suites). Pas de nouveau gate (#5) : check_readme_claims mord déjà la divergence.

run_ci = 33 PASS · 0 FAIL · 0 SKIP. 0 code moteur V18 (#6) · 0 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 07:40:08 +00:00
parent 344b8154e1
commit ac595d0749
9 changed files with 51 additions and 13 deletions
@@ -60,7 +60,7 @@
"criterion": "TESTS",
"weight": 25,
"passed": true,
"evidence": "22 méthodes test_* dans 1 fichier(s) (seuil 8)"
"evidence": "23 méthodes test_* dans 1 fichier(s) (seuil 8)"
},
{
"criterion": "CLI",
@@ -15,7 +15,7 @@ import json
import os
import re
_TEST_DEF_RE = re.compile(r"^\s*def (test_[A-Za-z0-9_]+)\s*\(", re.MULTILINE)
_TEST_DEF_RE = re.compile(r"^\s*def (test_\w+)\s*\(", re.MULTILINE)
_ADD_PARSER_RE = re.compile(r"add_parser\(|add_subparsers\(")
@@ -106,6 +106,26 @@ class CriteriaTest(unittest.TestCase):
mod = _make_module(d, tests=9)
self.assertTrue(criteria.crit_tests(mod, 8)["passed"])
def test_tests_counts_non_ascii_method_names(self):
# Régression : un nom de méthode accentué (PEP 3131, ex. réel
# `test_traçabilite_source` dans publiciste) est un test valide et
# exécuté par unittest — le comptage doit l'inclure, comme la source
# sœur reglib.discovery (`test_\w+`, \w Unicode). L'ancien char-class
# ASCII `[A-Za-z0-9_]` le loupait → sous-comptage (22 au lieu de 23)
# et fait faux dans l'évidence, en violation du cœur anti-invention #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_ascii(self):\n pass\n"
" def test_traçabilite_source(self):\n"
" pass\n")
res = criteria.crit_tests(mod, 1)
self.assertIn("2 méthodes", res["evidence"])
def test_cli_fails_without_entrypoint(self):
with tempfile.TemporaryDirectory() as d:
mod = _make_module(d, cli=False)