03b481c6ee
Nouvelle surface anti-dérive (#6) : la table §3 « Cartographie portails ↔ familles » porte deux colonnes data-derived du contrat ; « Nb rôles » était gatée, « Familles rattachées » (SET des `famille` distinctes par portail) ne l'était pas — le count-gate l'avale via `[^|]*`. Gate « 1quater-bis » : recompute le SET de familles par portail depuis rbac_50_roles.json[roles][].famille, égalité par ENSEMBLE (absent + fantôme) avec les jetons bruts de la cellule (parenthèses éditoriales exclues, ordre non gaté). Silent-green prouvé : reclasser les 2 rôles `legal` de `direction` en `finance` garde le compte 9==9 VERT mais fait mordre FANTÔME {legal}. 6 verts arbre propre · 5 morsures adversariales · 6 gates re-verts exit 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>