[DTP-Worker] Sprint 8 · buffer L75 · Chiffre périmé fiche agent : "repo 560 tests" (vert-trompeur ungated) → 558/22 sourcé matrice + gate étendu
Défaut réel (#6 anti-invention) : 03_agents/erpnext_backend/AGENT.md situait les tests backend par "repo : 560 tests au total" saisi à la main. 560 ne correspond à aucun compte courant (matrice qa/regression = 558/22 ; repo-wide = 584 méthodes test_*) — périmé en silence (534→551→558 ; 560 = ancien 534 + 26 harnais self-exclu INV3). Même classe de vert-trompeur que la fiche QA (21/534), mais ungated. - Vérif ciblée : toutes les autres bornes chiffrées des 13 AGENT.md exactes (crm 81, RBAC 60, e-CF 39, portails 19, chat 31, confotur 44, seo 36). - Fix : le nombre pointe désormais vers l'artefact gaté (regression_run.json). - Gate : ci/check_readme_claims.sh recalcule tests+suites+verdict depuis regression_run et exige l'égalité avec la fiche backend (comme la fiche QA). - Preuve morsure : 560 réinjecté ⇒ gate rouge ; restauré ⇒ vert. - 7 gates verts ; édition doc ⇒ aucune dérive out/ (check_artifacts vert). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,9 @@
|
||||
# 03_agents/qa/AGENT.md (fiche QA · « Verdict agrégé courant ») :
|
||||
# • N suites · M tests · M passés · E échec · E erreur · verdict
|
||||
# → qa/regression run
|
||||
# 03_agents/erpnext_backend/AGENT.md (« source unique ») :
|
||||
# • N tests · M suites · verdict (matrice de régression du repo)
|
||||
# → qa/regression run
|
||||
# Un claim absent échoue AUSSI (la dérive de formulation qui ferait disparaître
|
||||
# un chiffre est elle-même une régression de traçabilité).
|
||||
#
|
||||
@@ -179,6 +182,39 @@ else:
|
||||
bad(f"Fiche QA · {QA} dit {'/'.join(mqa.groups())} MAIS regression_run dit "
|
||||
f"{'/'.join(agg)} ({qa_src}) → régénérer la fiche")
|
||||
|
||||
# ============================================================================
|
||||
# Fiche ERPNext Backend (03_agents/erpnext_backend/AGENT.md) · même classe.
|
||||
# ----------------------------------------------------------------------------
|
||||
# Sa ligne « source unique » situait les tests backend dans le repo par un
|
||||
# compte agrégé (« repo : 560 tests au total ») saisi à la main. Ce nombre s'est
|
||||
# PÉRIMÉ en silence (matrice 534 → 551 → 558) : 560 ne correspondait plus ni à la
|
||||
# matrice (558) ni au repo-wide (584 méthodes test_*). Aucun gate ne le couvrait.
|
||||
# On le RECALCULE depuis la même matrice faisant autorité (regression_run) et on
|
||||
# exige tests + suites + verdict — comme la fiche QA.
|
||||
# ============================================================================
|
||||
BE = "03_agents/erpnext_backend/AGENT.md"
|
||||
try:
|
||||
be_txt = re.sub(r"\s+", " ", open(BE, encoding="utf-8").read())
|
||||
except OSError as e:
|
||||
bad(f"Fiche Backend · {BE} illisible : {e}"); be_txt = ""
|
||||
|
||||
be_exp = (
|
||||
str(sum(s["ran"] for s in suites)), # tests exécutés (matrice)
|
||||
str(len(suites)), # suites
|
||||
run["verdict"], # verdict
|
||||
)
|
||||
be_pat = (r"matrice\s+de régression du repo : \*\*(\d+) tests · (\d+) suites\*\* · "
|
||||
r"verdict `(PASS|FAIL)`")
|
||||
be_src = f"tests={be_exp[0]} suites={be_exp[1]} verdict={be_exp[2]}"
|
||||
mbe = re.search(be_pat, be_txt)
|
||||
if mbe is None:
|
||||
bad(f"Fiche Backend · matrice repo — claim INTROUVABLE dans {BE} (attendu {be_src})")
|
||||
elif mbe.groups() == be_exp:
|
||||
good(f"Fiche Backend · matrice repo — {BE} {'/'.join(mbe.groups())} == regression_run ({be_src})")
|
||||
else:
|
||||
bad(f"Fiche Backend · {BE} dit {'/'.join(mbe.groups())} MAIS regression_run dit "
|
||||
f"{'/'.join(be_exp)} ({be_src}) → régénérer la fiche")
|
||||
|
||||
sys.exit(1 if FAIL else 0)
|
||||
PY
|
||||
rc=$?
|
||||
|
||||
Reference in New Issue
Block a user