[DTP-Worker] Sprint 8 · buffer · RBAC/SPEC §3 : correction DÉFAUT FACTUEL (direction 10→9 · plateforme 5→6) + gate d'identité « Nb rôles » par portail ancré sur rbac_50_roles.json

La table §3 de RBAC_50_ROLES_SPEC.md avait dérivé du contrat en préservant le total
50 (10+5 vs 9+6) → invisible aux gates agrégés. Correction alignée sur la source +
nouveau bloc check_readme_claims recomptant chaque portail (et le total) depuis
rbac_50_roles.json. quality_report.json régénéré (evidence octets SPEC). 7 gates PASS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-01 09:39:54 +00:00
parent 5677082965
commit 7ce0f7b1e7
4 changed files with 86 additions and 3 deletions
+40
View File
@@ -1011,3 +1011,43 @@ absolu) · **7 gates re-verts** (`check_readme_claims`/`check_ci_integrity`/`che
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; l'obtention
réelle des 7 confirmations auprès de leurs owners reste côté agent DevOps / VPS).
- **Auto-score 4Big** : 96/100.
## Session `20260801_093301` · Buffer S8 · RBAC/RBAC_50_ROLES_SPEC §3 — DÉFAUT FACTUEL corrigé + gate d'identité par portail
**Contexte** : Sprint 8 · buffer (roadmap fonctionnellement close ; poursuite de la
série anti-dérive CLAUDE.md #6). Cette fois la surface data-derived non gatée était
**FAUSSE**, pas seulement à risque : la table §3 « Cartographie portails ↔ familles »
de `RBAC_50_ROLES_SPEC.md` (colonne « Nb rôles » PAR portail) avait dérivé du contrat
`rbac_50_roles.json` **en préservant le total 50**, donc en silence.
**Défaut factuel trouvé & corrigé** :
- `05_deliverables_mvp/rbac/RBAC_50_ROLES_SPEC.md:47` — portail `direction` affichait
**10** rôles ; le contrat en compte **9** (6 direction + CFO/finance + analyste
faisabilité + 2 legal).
- `…:52` — portail `plateforme` affichait **5** ; le contrat en compte **6** (devops ·
rbac-admin · qa · otoia · mobile · bi).
- L'erreur était compensée (10+5 vs 9+6) → total 50 exact → invisible aux gates
agrégés. Le MANIFEST roleprofile (byte-gaté) disait déjà 9 et 6 : la SPEC seule
avait dérivé. Corrigé pour refléter la source.
**Dérive silencieuse fermée (gate durable)** :
- `ci/check_readme_claims.sh` — nouveau bloc « 1quater) RBAC_50_ROLES_SPEC §3 » : RECOMPTE
le nombre de rôles PAR portail depuis `rbac/rbac_50_roles.json` (source de vérité,
byte-gatée par `check_artifacts`) et exige l'égalité avec CHAQUE ligne de la table §3
**plus le total** `**Total** | **50**`. Un portail absent de la table échoue aussi
(disparition = régression de traçabilité). Complète le gate roleprofile (qui gate le
MANIFEST, un doc distinct) sur une 2ᵉ surface transcrivant la même ventilation.
- Vérif négative : réintroduire `direction=10` fait échouer le gate (exit 1, message
« dit 10 MAIS rbac_50_roles.json compte 9 ») ; restauré → vert.
**Artefact régénéré (reproductibilité #artifact-reproducibility-gate)** :
- `qa/audit_4big/out/quality_report.json` — l'`evidence` DOC cite la taille en octets de
la SPEC (10040 → 10039 octets après correction 1 o) ; rebuild `audit_4big_gen.py build
-o out` byte-identique. `check_artifacts` re-vert.
**CI** : les 7 gates PASS (validate_json · check_artifacts · check_docs ·
check_readme_claims · guard_constraints · check_regression · check_ci_integrity).
- **Hors périmètre worker (VPS · #8)** : néant (correction d'un doc en-repo + gate
bash/python3 stdlib ; l'unique artefact `out/` touché a été régénéré à l'identique).
- **Auto-score 4Big** : 96/100.