# Taxonomie des rôles — Catégorie acteur → `RoleCategory` plateforme

> Référence partagée des skills BA (`/ba-create-actors`, `/ba-create-rbac`) et
> de la transcription Phase 0 (`/ba-develop` → `scaffold-core-seed`). La
> **Catégorie** d'un acteur devient la `RoleCategory` du rôle seedé.

## Mapping (tolérant)

Le générateur (`ParseRoleCategory`, `Enum.TryParse` insensible à la casse)
n'accepte que les **noms d'enum** ; la transcription Phase 0 traduit les
libellés FR de cette table vers le nom d'enum avant de remplir
`actors[].category`. Valeur absente ou inconnue → `Custom` (défaut sûr — un
libellé métier libre ne casse jamais le seed).

| Catégorie (libellés acceptés dans `acteur.md`) | Enum plateforme | Usage |
|---|---|---|
| `Admin` · administration | `Admin` (1) | Contrôle total d'une application (wildcard `{app}.*`) — bundle `{app}-admin` |
| `Manager` · gestion · gestionnaire | `Manager` (2) | Gestion d'un périmètre HUMAIN : approbations, équipe, tiers `read.managed`/`read.team`. Le critère est « décide pour d'autres personnes », pas « a des droits d'écriture » |
| `Contributor` · contribution · contributeur · opérateur | `Contributor` (3) | Travail opérationnel avec écriture, SANS config d'application : opérations courantes, traitement de contenu, self-service — bundle `{app}-operator` |
| `Viewer` · consultation · lecteur | `Viewer` (4) | Strictement lecture seule (`access`/`read`/`export`) — bundle `{app}-viewer` |
| `Custom` · *(absent / tout autre libellé)* | `Custom` (5) | Défaut — rôle métier spécifique au projet |
| ~~`Global`~~ | `Global` (0) | **Réservé plateforme** (`superadmin` / `platformadmin` / `user`) — un acteur BA ne le porte JAMAIS |

> Taxonomie alignée sur la plateforme (audit 2026-07 —
> `docs/architecture/rbac-roles-audit.md` côté SmartStack.app) : un rôle
> opérationnel qui écrit sans administrer est un `Contributor` (il n'existe pas
> de catégorie « Operator » distincte) ; `Manager` est réservé à la gestion de
> personnes ; `Viewer` ne tolère AUCUNE écriture.

## Bundles standard par application (opt-in — `/ba-create-actors`)

Trois acteurs pré-nommés, proposés UNE fois par application (jamais imposés) ;
retenus, ils suivent le cycle normal (code `BA-…-AC-…`, `Origine : bundle
standard`) :

| Bundle | Catégorie | Nom fonctionnel (fr) | Rows par défaut (`/ba-create-rbac`) |
|---|---|---|---|
| `{app}-admin` | Admin | « Administration {App} » | Toutes les actions de chaque module (+ `.read.all` dans les modules scopés) |
| `{app}-operator` | Contributor | « Gestion {App} » | `access`, `read`, `create`, `update` (+ `.read.all` si sa Portée read = toutes, règle de matérialisation) |
| `{app}-viewer` | Viewer | « Consultation {App} » | `access`, `read` |

Les rows `lookup` ne sont **jamais** autorées pour les bundles :
`derive-lookup-grants` les dérive des FK comme pour tout acteur create/update.
