[DTP-Worker] Sprint 8 · buffer · Fiches agents/rattachement Workspace : les ASSERTIONS D'APPARTENANCE Has Role des trois fiches 03_agents/{rendu,ifc_speckle,mobile}/AGENT.md — QUELLE CONSOLE (Workspace ERPNext natif v15) le rôle peut atteindre — étaient une surface data-derived DISTINCTE du contrat rbac_50_roles.json (la membership vit dans frontend/portails/out/workspace.json, byte-gaté par check_artifacts) et HORS de tout gate.

Les blocs Fiches Faisabilité / Fiche Mobile ne gataient que les attributs du CONTRAT ; le bloc « triplets par workspace » ne gate que le COMPTE de rôles par Workspace (`nb_roles`), AVEUGLE à QUEL rôle. Rattacher le rôle mobile à `OTO Ventes` (SUR-EXPOSITION console : le dev mobile gagnerait l'accès au portail Ventes — la restriction même que la note #6 pose), retirer/déplacer le rôle rendu de `OTO Construction`, laissait la fiche périmée en silence pendant que l'artefact dit autre chose ⇒ l'agent ERPNext Backend câblerait le mauvais accès console.

Gate ajouté (nouveau bloc « Fiches agents · rattachement Workspace ») : index recomputé `erpnext_role_name → {titres de Workspace le portant}` depuis workspace.json (nom résolu du contrat par id, zéro duplication). 3 formes d'assertion : in_named (rendu — prose cite CE Workspace ET membership == {lui seul}) · in_any (ifc — membership ≥1) · not_in_named (mobile — assertion NÉGATIVE #6, rôle ABSENT du Has Role du Workspace nommé). Garde anti-typo : Workspace nommé absent de l'artefact ⇒ ROUGE. Claim absent ⇒ ROUGE (traçabilité).

9 morsures vérifiées (4 artefact + 5 fiche/bord) ; restauré vert ; 7 gates re-verts. ci/README.md (récap + paragraphe détaillé) + activity log + mémoire mis à jour.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-01 02:10:19 +00:00
parent bc58809e7d
commit 3a91c9d52f
3 changed files with 197 additions and 1 deletions
+58
View File
@@ -245,3 +245,61 @@ absolu) · **7 gates re-verts**.
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; le seed réel
des rôles `bench` reste côté VPS).
- **Auto-score 4Big** : 96/100.
## Session `20260801_020209` · Buffer S8 · Domaine Fiches agents/rattachement Workspace : les **assertions d'appartenance `Has Role`** des trois fiches `03_agents/{rendu,ifc_speckle,mobile}/AGENT.md` — QUELLE CONSOLE (Workspace ERPNext natif) le rôle peut atteindre — étaient une surface data-derived **DISTINCTE du contrat** `rbac_50_roles.json` (la membership vit dans `frontend/portails/out/workspace.json`, byte-gaté) et **HORS de tout gate**. Les blocs Fiches Faisabilité / Fiche Mobile des sessions précédentes ne gataient que les attributs du **contrat** ; le bloc « triplets par workspace » ne gate que le **compte** de rôles par Workspace (`nb_roles`), AVEUGLE à QUEL rôle.
**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 famille de fiches que
les deux sessions précédentes (`agent-fiche-role-attrs-ungated`) mais **surface
orthogonale** : non plus les attributs recopiés du contrat, mais la **membership
`Has Role`** — l'accès console — qu'aucun gate ne touchait.
**Dérive silencieuse fermée** :
- `03_agents/rendu/AGENT.md:35` — « rattaché au Workspace `OTO Construction` »
(assertion NOMMÉE) ; `03_agents/ifc_speckle/AGENT.md:35` — « rattaché à un
Workspace » (générique) ; `03_agents/mobile/AGENT.md:41` — « **volontairement pas**
rattaché au Workspace `OTO Ventes` » (assertion NÉGATIVE d'honnêteté #6).
- Source faisant autorité : `frontend/portails/out/workspace.json` (les 5 Workspaces
natifs v15, chacun portant sa liste `Has Role`, byte-gaté par `check_artifacts` via
la reproductibilité `out/`). L'`erpnext_role_name` de chaque rôle est résolu du
contrat `rbac_50_roles.json` par `id` (zéro duplication).
- Piège : rattacher le rôle mobile à `OTO Ventes` = **sur-exposition console** (le
dev mobile gagnerait l'accès au portail Ventes — la restriction même que la note
#6 pose), retirer/**déplacer** le rôle rendu de `OTO Construction` = perte/erreur
d'accès console — laisse la fiche périmée EN SILENCE pendant que l'artefact dit
autre chose ⇒ l'agent ERPNext Backend câblerait le mauvais accès console. Aucune
suite `tests/` (qui teste des FONCTIONS de résolution, pas la prose) n'attrape ce
« vert trompeur ».
- **État courant** : aucune assertion périmée — rendu ∈ {`OTO Construction`} seul ·
ifc ∈ {`OTO Construction`} (≥1) · mobile ∈ ∅ (donc absent de `OTO Ventes`) ; les 3
recoupent workspace.json exactement (anti-invention #6, rien à réécrire). Le défaut
est la **surface ungated**.
**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « Fiches agents ·
rattachement Workspace (`Has Role`) » avant `sys.exit`) : index recomputé
`erpnext_role_name → {titres de Workspace le portant}` depuis workspace.json. Par
fiche, 3 formes d'assertion : **in_named** (rendu) — la prose cite CE Workspace ET la
membership == {ce Workspace} seul (membership élargie ou déplacée ⇒ ROUGE) ;
**in_any** (ifc) — membership ≥ 1 Workspace ; **not_in_named** (mobile) — rôle ABSENT
du `Has Role` du Workspace nommé. Garde anti-typo : un Workspace nommé absent de
l'artefact échoue avant tout (anti-cible fantôme). Un claim absent échoue AUSSI
(traçabilité #6).
**9 morsures vérifiées** (4 côté artefact · 5 côté fiche/bord) : artefact ajoute le
rôle mobile à `OTO Ventes` (**sur-exposition #6 VIOLÉE**) · artefact retire le rôle
rendu de `OTO Construction` · artefact déplace rendu vers `OTO Achat` · artefact
retire ifc de tous les Workspaces · fiche rendu renomme le Workspace
(`OTO Construction→OTO Ventes`, INTROUVABLE) · fiche rendu supprime l'assertion ·
fiche mobile nomme un Workspace fantôme (`OTO Marketing`, anti-typo) · fiche ifc
supprime l'assertion générique · fiche mobile passe le négatif au positif (retire
« volontairement pas ») ; restauré = green : rendu=={`OTO Construction`} · ifc≥1 ·
mobile∉`OTO Ventes` · exit 0. Working tree byte-restauré (`git checkout --`, **JAMAIS**
`git clean`, interdit absolu) · **7 gates re-verts**.
- `ci/README.md` (table récap du pipeline + paragraphe détaillé « rattachement
Workspace des fiches agents ») mis à jour. Mémoire `agent-fiche-role-attrs-ungated`
à actualiser (surface membership couverte).
- **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 ; l'attachement
réel des rôles aux Workspaces `bench` reste côté VPS).
- **Auto-score 4Big** : 96/100.