[DTP-Worker 20260801_090301] Auto exec · session 20260801_090301
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
This commit is contained in:
+30
-1
File diff suppressed because one or more lines are too long
@@ -275,6 +275,83 @@ 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")
|
||||
|
||||
# ============================================================================
|
||||
# RBAC · le COMPTE CANONIQUE de rôles ANCRÉ sur CLAUDE.md §Architecture cible
|
||||
# (« RBAC N rôles ») — classe claude-md-constant-anchor, restée NON ancrée.
|
||||
# ----------------------------------------------------------------------------
|
||||
# CLAUDE.md §Architecture cible FIXE le mandat « RBAC 50 rôles ». Ce nombre
|
||||
# canonique est recopié SANS ancrage vers CLAUDE.md dans : le contrat
|
||||
# rbac_50_roles.json (`cible_rbac_roles` ET la taille réelle du catalogue
|
||||
# `len(roles)`), les schémas (`const: 50`) et la fiche agent erpnext_backend
|
||||
# (« RBAC 50 rôles natif » · « **50 rôles** » · « RBAC **50 rôles** exactement »).
|
||||
# Les gates RBAC amont ne prouvent que la COHÉRENCE INTERNE (les READMEs
|
||||
# apply_plan/userperm/roleprofile == leur MANIFEST, lui-même recompté du contrat)
|
||||
# — AVEUGLES à l'ancrage au MANDAT : changer « RBAC 50 rôles » dans CLAUDE.md, ou
|
||||
# faire dévier le catalogue de 50 de façon INTERNE-cohérente (cible ET len alignés
|
||||
# sur une autre valeur), laisserait le contrat et la fiche affirmer « 50 exactement »
|
||||
# en CONTREDISANT le mandat, en silence. On RE-DÉRIVE N de CLAUDE.md §Architecture
|
||||
# cible (source unique) et on exige : (a) contrat cible_rbac_roles == N, (b) taille
|
||||
# réelle len(roles) == N, (c) cible == réel (le mandat est ATTEINT par le catalogue),
|
||||
# (d) la fiche erpnext_backend porte l'invariant emphatique « RBAC **N rôles**
|
||||
# exactement » ET aucune mention « M rôles » périmée (M != N). Même patron que les
|
||||
# tokens branding #4 ou la persona OTOIA §Architecture cible ; un claim absent
|
||||
# échoue AUSSI (traçabilité #6).
|
||||
# ============================================================================
|
||||
try:
|
||||
_cm = open("CLAUDE.md", encoding="utf-8").read()
|
||||
except OSError as e:
|
||||
bad(f"RBAC compte · CLAUDE.md illisible : {e}"); _cm = ""
|
||||
_arch = re.search(r"## Architecture cible\n(.*?)(?:\n## |\Z)", _cm, re.S)
|
||||
m_n = re.search(r"RBAC\s+(\d+)\s+rôles", _arch.group(1)) if _arch else None
|
||||
if m_n is None:
|
||||
bad("RBAC compte · « RBAC N rôles » INTROUVABLE dans CLAUDE.md §Architecture "
|
||||
"cible → l'ancre du mandat a disparu")
|
||||
else:
|
||||
N = int(m_n.group(1))
|
||||
good(f"RBAC compte · ancre CLAUDE.md §Architecture cible = « RBAC {N} rôles »")
|
||||
try:
|
||||
_c = load("rbac/rbac_50_roles.json")
|
||||
cible = _c.get("cible_rbac_roles"); actual = len(_c.get("roles", []))
|
||||
except (OSError, ValueError) as e:
|
||||
bad(f"RBAC compte · contrat rbac_50_roles.json illisible : {e}")
|
||||
cible = actual = None
|
||||
if cible is not None:
|
||||
if cible == N:
|
||||
good(f"RBAC compte · (a) contrat cible_rbac_roles {cible} == CLAUDE.md ({N})")
|
||||
else:
|
||||
bad(f"RBAC compte · (a) contrat cible_rbac_roles {cible} != CLAUDE.md "
|
||||
f"§Architecture cible ({N}) → le contrat contredit le mandat")
|
||||
if actual == N:
|
||||
good(f"RBAC compte · (b) catalogue réel len(roles) {actual} == CLAUDE.md ({N})")
|
||||
else:
|
||||
bad(f"RBAC compte · (b) catalogue réel len(roles) {actual} != CLAUDE.md "
|
||||
f"§Architecture cible ({N}) → le catalogue a dévié du mandat")
|
||||
if cible == actual:
|
||||
good(f"RBAC compte · (c) cible {cible} == catalogue réel {actual} (mandat atteint)")
|
||||
else:
|
||||
bad(f"RBAC compte · (c) cible_rbac_roles {cible} != catalogue réel {actual} "
|
||||
f"→ cible déclarée non tenue par le catalogue")
|
||||
RBC = "03_agents/erpnext_backend/AGENT.md"
|
||||
try:
|
||||
rbc = re.sub(r"\s+", " ", open(RBC, encoding="utf-8").read())
|
||||
except OSError as e:
|
||||
bad(f"RBAC compte · {RBC} illisible : {e}"); rbc = ""
|
||||
if re.search(rf"RBAC \*\*{N} rôles\*\* exactement", rbc):
|
||||
good(f"RBAC compte · (d) fiche porte « RBAC **{N} rôles** exactement » == CLAUDE.md")
|
||||
else:
|
||||
bad(f"RBAC compte · (d) invariant « RBAC **{N} rôles** exactement » INTROUVABLE "
|
||||
f"dans {RBC} → claim absent = régression #6")
|
||||
role_mentions = [int(x) for x in re.findall(r"(\d+) rôles", rbc)]
|
||||
stale = sorted({m for m in role_mentions if m != N})
|
||||
if not role_mentions:
|
||||
bad(f"RBAC compte · (d) aucune mention « N rôles » dans {RBC}")
|
||||
elif stale:
|
||||
bad(f"RBAC compte · (d) mention(s) périmée(s) {stale} rôles dans {RBC} MAIS "
|
||||
f"CLAUDE.md dit {N} → resynchroniser la fiche")
|
||||
else:
|
||||
good(f"RBAC compte · (d) {len(role_mentions)} mention(s) « {N} rôles » "
|
||||
f"dans {RBC} == CLAUDE.md (aucune périmée)")
|
||||
|
||||
# ============================================================================
|
||||
# README de l'auditeur 4Big (05_deliverables_mvp/qa/audit_4big/README.md) ·
|
||||
# section « Résultat courant » — même classe de « vert trompeur ».
|
||||
|
||||
Reference in New Issue
Block a user