[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)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"version": "1.0",
|
||||
"verdict": "PASS",
|
||||
"suites": 24,
|
||||
"test_methods": 625,
|
||||
"test_methods": 626,
|
||||
"coverage_ok": true,
|
||||
"artifacts": [
|
||||
"regression_plan.json"
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"in_gate": true,
|
||||
"has_tests_dir": true,
|
||||
"test_files": 1,
|
||||
"test_methods": 34
|
||||
"test_methods": 35
|
||||
},
|
||||
{
|
||||
"id": "qa.audit_5d",
|
||||
@@ -295,7 +295,7 @@
|
||||
"totals": {
|
||||
"suites": 24,
|
||||
"test_files": 24,
|
||||
"test_methods": 625,
|
||||
"test_methods": 626,
|
||||
"min_methods": 10,
|
||||
"under_threshold": 0
|
||||
},
|
||||
|
||||
@@ -198,9 +198,9 @@
|
||||
{
|
||||
"id": "qa.audit_4big",
|
||||
"path": "qa/audit_4big",
|
||||
"expected_methods": 34,
|
||||
"ran": 34,
|
||||
"passed": 34,
|
||||
"expected_methods": 35,
|
||||
"ran": 35,
|
||||
"passed": 35,
|
||||
"failures": 0,
|
||||
"errors": 0,
|
||||
"skipped": 0,
|
||||
@@ -296,8 +296,8 @@
|
||||
"suites": 24,
|
||||
"green": 24,
|
||||
"red": 0,
|
||||
"ran": 625,
|
||||
"passed": 608,
|
||||
"ran": 626,
|
||||
"passed": 609,
|
||||
"failures": 0,
|
||||
"errors": 0,
|
||||
"skipped": 17
|
||||
|
||||
Reference in New Issue
Block a user