[DTP-Worker 20260802_050513] Sprint 8 · buffer · RBAC SPEC §2 : ancrage de l'ÉNUMÉRATION des scope_donnees (ligne Row-level) sur l'enum de rbac.schema.json
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,48 @@
|
||||
# Activity log · 2026-08-02 · Claude Code DTP Worker
|
||||
|
||||
## Sprint 8 · buffer · RBAC SPEC §2 — ancrage de l'ÉNUMÉRATION des `scope_donnees` (ligne Row-level) sur l'ENUM du schéma
|
||||
|
||||
**Contexte** — Série anti-dérive Sprint 8 (CLAUDE.md #6 « zéro invention de
|
||||
chiffres »). La table §2 « Modèle RBAC » de
|
||||
`05_deliverables_mvp/rbac/RBAC_50_ROLES_SPEC.md` ouvre par « trois niveaux, **tous
|
||||
couverts par le schéma** » puis sa 3ᵉ ligne (« **Row-level** (User Permission) |
|
||||
`scope_donnees` | … ») ÉNUMÈRE à la main l'ensemble EXHAUSTIF des portées
|
||||
row-level : `own` · `equipe` · `entite` (Company) · `groupe` (consolidé). Par sa
|
||||
phrase d'intro, cet ensemble EST l'`enum` `scope_donnees` de `rbac.schema.json`
|
||||
(la DÉFINITION du modèle). Or **aucun gate ne le touchait** : §3 compte les rôles
|
||||
par portail, §4 les entités, §5 le résumé, et le bloc `userperm` gate la table
|
||||
`scope → mécanisme` d'un **autre** artefact (`userperm_gen/out`) — tous aveugles à
|
||||
l'énumération du §2. Même classe que §4 (colonne ancrée sur une source-de-vérité
|
||||
structurée), côté schéma cette fois.
|
||||
|
||||
**Le « vert trompeur »** — si le schéma AJOUTE une portée (`region` pour un besoin
|
||||
ops réel) ou en RETIRE une (`own` supprimé, schéma resserré), le §2 reste PÉRIMÉ en
|
||||
silence : il documente un modèle qui CONTREDIT le schéma tout en se réclamant
|
||||
« couvert par le schéma ». Ni `check_artifacts` (la SPEC n'est pas un `out/*.json`)
|
||||
ni `tests/` (FONCTIONS de validation, jamais l'ancre SPEC↔schéma) ne mordent.
|
||||
|
||||
**Gate ajouté** (`ci/check_readme_claims.sh`, bloc « 1octies », juste après le §5)
|
||||
— charge l'`enum` `scope_donnees` depuis `rbac.schema.json` (source de vérité du
|
||||
modèle) puis exige : **(a)** ENSEMBLE des jetons `scope` backtickés de la ligne §2
|
||||
== enum (set-diff absent ET fantôme) ; **(b)** ANCRAGE — la colonne du milieu NOMME
|
||||
bien `scope_donnees` (sinon on gate la mauvaise ligne) ; **(c)** sanity — toute
|
||||
portée RÉELLEMENT exercée par le contrat ∈ enum (une portée en usage jamais dans
|
||||
l'enum = schéma/contrat incohérents). Les gloses parenthétiques `(Company)`/
|
||||
`(consolidé)` NE sont PAS gatées (éditoriales · #6). Ligne/section/enum absents =
|
||||
échec (traçabilité #6).
|
||||
|
||||
**Vérif** — 3 checks verts sur l'arbre propre (4 portées `own/equipe/entite/groupe`
|
||||
== enum). **6 morsures** adversariales : M1 §2 retire `own` ⇒ manquant (a) · M2 §2
|
||||
ajoute fantôme `region` ⇒ fantôme (a) · **M3 SILENT-GREEN : le schéma GAGNE `region`,
|
||||
§2 inchangé ⇒ (a) mord `manquant region` — preuve que l'autorité est le SCHÉMA, pas
|
||||
la cohérence interne de la SPEC** · M4 colonne du milieu renommée `scope_donnees`→
|
||||
`scope` ⇒ ancre perdue (b) · M5 ligne Row-level supprimée ⇒ INTROUVABLE · M6 le
|
||||
schéma RETIRE `own` (encore exercé par 2 rôles) ⇒ (a) fantôme + (c) portée hors
|
||||
enum. Gates re-verts : `check_artifacts` · `check_docs` · `guard_constraints` ·
|
||||
`check_ci_integrity` · `check_regression` · `check_readme_claims` tous exit 0.
|
||||
|
||||
---
|
||||
|
||||
## Sprint 8 · buffer · Faisabilité — ancrage du DOMAINE DES CODES PROJET (garde d'entrée `_validate_brief` + 2 schémas JSON) sur CLAUDE.md §Projets
|
||||
|
||||
**Contexte** — Série anti-dérive Sprint 8 (CLAUDE.md #6 « zéro invention de
|
||||
|
||||
Reference in New Issue
Block a user