[DTP-Worker 20260805_124241] FIX test-precision (surface neuve) : test_audit_4big.py figeait totals["pass"] = 18 - fail alors que le périmètre a grandi à 24 modules → le rapport « bad » de test_failing_module_forces_global_fail déclenchait INV7 (visé) MAIS AUSSI 2× INV8 (pass+fail=18≠24 modules ET min/max incohérents), contredisant son propre commentaire « rapport cohérent en interne ». Test relâché passant pour de mauvaises raisons + constante latente périmée. FIX (test only, 0 prod, 0 artefact rebuild) : totaux dérivés du vrai bad["modules"] (pass=len-fail, min/max=min/max(scores)) → rapport réellement cohérent, seul INV7 mord ; assertion resserrée any("< seuil") → all("INV7")+any("< seuil") prouve l'isolation. Preuve : rejeu de l'ancien 18 renvoie bien [INV7, INV8, INV8] et la nouvelle assertion échouerait dessus (dents réelles). 34 tests OK, 33 PASS CI. 0 gate ajouté (#5), 0 chiffre saisi (#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-05 12:49:55 +00:00
parent 9b6ec60783
commit 127ef6f7fc
2 changed files with 57 additions and 2 deletions
@@ -318,10 +318,19 @@ class InvariantGuardTest(unittest.TestCase):
m["verdict"] = "PASS" if m["score"] >= 95 else "FAIL"
bad["totals"]["fail"] = sum(1 for x in bad["modules"]
if x["verdict"] != "PASS")
bad["totals"]["pass"] = 18 - bad["totals"]["fail"]
# Totaux dérivés du vrai périmètre (pas d'entier figé) → le rapport
# reste cohérent en interne : INV8 (pass+fail=modules, min/max) ne doit
# PAS mordre, seul INV7 le doit.
bad["totals"]["pass"] = len(bad["modules"]) - bad["totals"]["fail"]
_scores = [x["score"] for x in bad["modules"]]
bad["totals"]["min_score"] = min(_scores)
bad["totals"]["max_score"] = max(_scores)
bad["verdict"] = "FAIL"
errs = gen.check_invariants(bad, self.spec)
# Le rapport est cohérent en interne mais porte un FAIL → INV7 le signale.
# Le rapport est cohérent en interne mais porte un module sous le seuil
# → INV7 (et lui seul) le signale.
self.assertTrue(errs, "INV7 aurait dû signaler le module sous seuil")
self.assertTrue(all("INV7" in e for e in errs), errs)
self.assertTrue(any("< seuil 4Big" in e for e in errs), errs)
def test_self_module_in_scope_is_caught(self):