[DTP-Worker 20260802_053514] Sprint 8 · buffer · RBAC SPEC §6 : ancrage de l'ÉNUMÉRATION des DocTypes custom (2ᵉ surface prose) sur le catalogue byte-gaté du contrat

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-02 05:49:04 +00:00
parent 11c48b668b
commit 0d4fd0942c
2 changed files with 70 additions and 0 deletions
+23
View File
@@ -4493,6 +4493,29 @@ if fx_cdt is not None:
else:
bad(f"RBAC fixtures · {FX_RD} — nomme « {mr.group(1).strip()} » MAIS "
f"set_user_permissions porté par {fx_sup[0]!r} → régénérer le README")
# 3) RBAC_50_ROLES_SPEC.md §6 — 2ᵉ surface prose du MÊME catalogue custom :
# « **DocTypes `custom: true`** (`Faisabilité`, `Publiciste Log`, … ) ». Le
# bloc apply_plan ne gate que le COMPTE (len custom_doctypes), le point (1)
# ci-dessus que le README fixtures — la SPEC §6 restait AVEUGLE : renommer/
# retirer un DocType `custom` du contrat (le MANIFEST suit, byte-gaté) y
# laisse les 4 noms périmés en silence, comme la 2ᵉ surface CONFOTUR/entités.
if spec_rd is not None:
m6 = re.search(r"DocTypes `custom: true`\*\* \(([^)]*)\)", spec_rd)
if m6 is None:
bad(f"RBAC fixtures · {SPEC_RD} §6 — énumération « DocTypes `custom: "
f"true` (…) » INTROUVABLE (attendu {sorted(fx_cdt)} · anti-évaporation #6)")
else:
got6 = {_fx_acc(t) for t in re.findall(r"`([^`]+)`", m6.group(1))}
exp6 = {_fx_acc(x) for x in fx_cdt}
if got6 == exp6:
good(f"RBAC fixtures · {SPEC_RD} §6 — catalogue custom {sorted(got6)} "
f"== MANIFEST.custom_doctypes_a_confirmer")
else:
miss6 = sorted(exp6 - got6); extra6 = sorted(got6 - exp6)
detail6 = (f" · absents={miss6}" if miss6 else "") + \
(f" · en trop={extra6}" if extra6 else "")
bad(f"RBAC fixtures · {SPEC_RD} §6 — énumère {sorted(got6)} MAIS "
f"MANIFEST {sorted(exp6)}{detail6} → régénérer la SPEC")
# ============================================================================
# SEO · la COMPOSITION du graphe schema.org (JSON-LD) — un nœud racine