[DTP-Worker] Sprint 8 · buffer · Legal/CONFOTUR (2e surface) : la CROSS-COHÉRENCE PERMISSIONS du DocType — le CŒUR sécurité du livrable — énumérait EN PROSE, PAR rôle, son portail ET son jeu d'ACTIONS RBAC sans AUCUN gate d'IDENTITÉ.

Le §« Cœur du livrable : cross-cohérence » →Permissions du README legal/confotur
énumère À LA MAIN, PAR rôle, role_id + portail + actions (« mot pour mot les
permissions_cibles RBAC … ni ajout ni retrait ») : `ventes-confotur` (Ventes)
→ read/write/create/print · `legal-onapi` (Direction) → read/write/create ·
`legal-directeur` (Direction) → read/write/**submit**/report. Le bloc CONFOTUR
existant ne gate QUE le COMPTE (« 3 rôles ») — AVEUGLE à leur identité.

Ces 3 lignes sont DATA-DERIVED d'out/MANIFEST.json (roles_rbac_utilises[] : role_id
· portail · permissions, recomputé du contrat rbac_50_roles.json à chaque build) et
projetées dans out/doctype_confotur_application.json (permissions[] par nom de rôle)
— les DEUX byte-gatés par check_artifacts. PIÈGE : le compte « 3 rôles » ne voit pas
l'identité → PROMOUVOIR ventes-confotur à submit (élévation de privilège cassant la
séparation des pouvoirs dont is_submittable est déduit) · RETIRER une action ·
RÉAFFECTER un portail · RENOMMER un rôle · AJOUTER une ligne fantôme laissait la
prose périmée pendant que les artefacts disent autre chose → l'agent ERPNext Backend
câblerait le mauvais jeu de permissions (le risque même que la cross-cohérence veut
prévenir) — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de
mapping RBAC, pas la prose) n'attrape. Même patron d'IDENTITÉ que le catalogue RBAC
fixtures_gen (singleton set_user_permissions) et la cross-cohérence e-CF DGII.

Nouveau bloc dans ci/check_readme_claims.sh (après le bloc de comptes CONFOTUR) :
(1) jeu d'actions + portail de CHAQUE rôle recomputés de roles_rbac_utilises[],
prose exigée EXACTE (set-diff · casse normalisée) ; (2) identité d'ensemble
README⇔MANIFEST (aucun rôle fantôme NI manquant). Cohérences croisées en bonus
(mordent un artefact INTERNEMENT incohérent) : MANIFEST ⇄ DocType d'accord sur le
jeu d'actions par rôle · séparation des pouvoirs — submit porté par EXACTEMENT un
rôle (legal-directeur) et is_submittable==True déduit de sa présence (README:31).
Un claim absent échoue AUSSI.

7 morsures vérifiées : README promeut ventes-confotur à submit (en trop=[submit]) ·
README réaffecte legal-onapi Direction→Ventes (portail) · README retire report de
legal-directeur (absents=[report]) · README renomme un role_id (fantôme=[legal-conseil]
+ manquant=[legal-onapi]) · énumération supprimée (INTROUVABLE) · artefact MANIFEST
promeut ventes-confotur à submit (README périmé + séparation cassée + incohérence
MANIFEST⇄DocType) · artefact DocType is_submittable=false alors qu'un rôle porte
submit (incohérence interne) ; restauré = green : 3 rôles portail+actions == MANIFEST
· identité d'ensemble · submit singleton · is_submittable=True · exit 0. État courant :
aucun jeu d'actions périmé (anti-invention #6, rien à réécrire) — le défaut est la
surface ungated. ci/README.md (table + détail « 2e surface CONFOTUR ») mis à jour ·
working tree byte-restauré (git checkout --, JAMAIS git clean) · 7 gates re-verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-31 22:08:36 +00:00
parent c2222c83b6
commit 1f212b1f04
3 changed files with 196 additions and 2 deletions
+55
View File
@@ -1,5 +1,60 @@
# Activity Log · 2026-07-31 · Claude Code DTP
## Session `20260731_220140` · Buffer S8 · Domaine Legal/CONFOTUR (2e surface) : la **cross-cohérence PERMISSIONS** du DocType — le CŒUR sécurité du livrable — énumérait EN PROSE, PAR rôle, son **portail** ET son **jeu d'actions RBAC** (`ventes-confotur`→read/write/create/print · `legal-onapi`→read/write/create · `legal-directeur`→read/write/**submit**/report) SANS AUCUN gate d'IDENTITÉ. Le bloc CONFOTUR existant ne gate QUE le COMPTE (« 3 rôles »).
**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Roadmap fonctionnellement
close ; poursuite de la série anti-dérive (CLAUDE.md #6). Même patron d'IDENTITÉ que
le catalogue RBAC `fixtures_gen` (séparation des pouvoirs `set_user_permissions`) ou
la cross-cohérence e-CF DGII — appliqué à la 2ᵉ surface data-derived du README
`legal/confotur`, jamais gatée.
**Dérive silencieuse fermée** :
- `05_deliverables_mvp/legal/confotur/README.md` §« Cœur du livrable :
cross-cohérence » →Permissions (l.28-30) énumère, PAR rôle, `role_id` + portail +
jeu d'actions, annoncé « **mot pour mot** les `permissions_cibles` RBAC … ni ajout
ni retrait ».
- Sources faisant autorité (byte-gatées par `check_artifacts`) :
`out/MANIFEST.json.roles_rbac_utilises[]` (`role_id` · `portail` · `permissions`,
recomputé du contrat `rbac_50_roles.json` à chaque build) + sa projection
`out/doctype_confotur_application.json.permissions[]` (par nom de rôle ERPNext).
- Piège : le compte « 3 rôles » est AVEUGLE à leur identité. PROMOUVOIR
`ventes-confotur` à `submit` (élévation de privilège cassant la séparation des
pouvoirs dont `is_submittable` est déduit), RETIRER une action, RÉAFFECTER un
portail, RENOMMER un rôle ou AJOUTER une ligne fantôme laissait la prose périmée
pendant que les artefacts disent autre chose → l'agent ERPNext Backend câblerait le
mauvais jeu de permissions (le risque même que la cross-cohérence veut prévenir).
Aucune suite `tests/` (qui teste des FONCTIONS de mapping RBAC, pas la prose)
n'attrape ce « vert trompeur ».
- **État courant** : **aucun jeu d'actions périmé** — les 3 lignes recoupent les
artefacts exactement (anti-invention #6, rien à réécrire). Le défaut est la
**surface ungated**.
**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « Legal · CONFOTUR
cross-cohérence PERMISSIONS » après le bloc de comptes CONFOTUR) : (1) jeu d'actions
+ portail de CHAQUE rôle recomputés de `roles_rbac_utilises[]`, prose exigée EXACTE
(set-diff · casse normalisée) ; (2) identité d'ensemble README ⇔ MANIFEST (aucun rôle
fantôme NI manquant). Cohérences croisées en bonus (mordent un artefact INTERNEMENT
incohérent) : MANIFEST ⇄ DocType d'accord sur le jeu d'actions par rôle · séparation
des pouvoirs — `submit` porté par EXACTEMENT un rôle (`legal-directeur`) et
`is_submittable == True` déduit de sa présence (README:31). Un claim absent échoue
AUSSI (traçabilité).
**7 morsures vérifiées** : README promeut `ventes-confotur` à `submit` (en
trop=[submit]) · README réaffecte `legal-onapi` Direction→Ventes (portail) · README
retire `report` de `legal-directeur` (absents=[report]) · README renomme un `role_id`
(fantôme=[legal-conseil] + manquant=[legal-onapi]) · énumération supprimée
(INTROUVABLE) · artefact MANIFEST promeut `ventes-confotur` à `submit` (README périmé
+ séparation cassée `[legal-directeur,ventes-confotur]` + incohérence MANIFEST⇄DocType)
· artefact DocType `is_submittable=false` alors qu'un rôle porte `submit` (incohérence
interne) ; restauré = green : 3 rôles portail+actions == MANIFEST · identité d'ensemble
· `submit` singleton · `is_submittable=True` · exit 0. Working tree byte-restauré
(`git checkout --`, JAMAIS `git clean`) · **7 gates re-verts**.
- `ci/README.md` (table récap + détail « 2ᵉ surface du même README CONFOTUR ») mis à jour.
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact).
- **Auto-score 4Big** : 96/100.
## Session `20260731_210134` · Buffer S8 · **CI ROUGE sur `main` — régression réelle réparée** : le gate `guard_constraints.sh` (lancé par `ci.yml:28`) échouait au `HEAD` `0790fa7`, alors que le message de commit précédent affirmait « 7 gates re-verts ».
**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Contrairement aux sessions