[DTP-Worker 20260801_233454] Sprint 8 · buffer · RBAC SPEC §5 : gate de la LIGNE D'AUTO-CONTRÔLE du « résumé »
La SPEC RBAC a déjà 3 gates (§3 ventilation par portail · §4 colonne Entité · §7 run-book) mais son §5 « Les N rôles (résumé) » restait AVEUGLE. Ce §5 restitue le total de rôles sur 3 surfaces prose : le compte-titre « ## 5. Les 50 rôles », NEUF comptes parenthétiques de regroupement (`**Ventes (8)**` …) et une ligne d'auto-contrôle arithmétique `_(6+8+4+7+5+8+4+2+6 = 50.)_`. AJOUTER un rôle au contrat (|rôles| 50→51) laisse titre/somme/`= 50` périmés en silence ; ÉDITER `Ventes (8)→(7)` sans toucher la ligne casse la cohérence titre↔somme — ni les suites tests/ (FONCTIONS RBAC, jamais la prose) ni le byte-gate d'artefact ne l'attrapent. Subtilité (memory rbac-spec-portail-count-gate : « §5 by-family is editorial ») : les 9 regroupements sont ÉDITORIAUX (« Direction / Gouvernance » agrège des rôles de familles direction+finance ≠ colonne `famille`) ⇒ AUCUN mapping groupe↔famille (dérive fausse). On gate UNIQUEMENT ce qui est data-derived sans ce mapping. Nouveau bloc « 1septies) §5 » : on recompute N = |rôles| du contrat (rbac_50_roles.json, byte-gaté) et on exige (a) compte-titre == N ; (b) les 9 comptes de regroupement == EXACTEMENT dans l'ordre les termes de la ligne (comparaison de LISTES ⇒ mord valeur ET position) ; (c) Σ termes == membre droit ; (d) membre droit == N. Section/titre/ligne/comptes absents = échec (#6). 5 morsures vérifiées (working tree byte-restauré via git checkout -- <fichier>, gate rc=1 sous mutation · rc=0 restauré) : titre 50→51 (a) · Ventes (8)→(9) (b) · = 50.→= 49. (c+d double) · terme 6+→7+ (b+c double) · suppression ligne (absence). ci/README.md : row check-readme-claims étendue de la clause §5. 7 gates re-verts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user