[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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user