Ajout : 11 session-*.yml, modes soft locks, coach-boot + time-anchor, ADR-008→024. Retrait : focus.md, BRAIN-INDEX.md, SUPERVISOR-STATE.md, claims/, todo/. brain-template = kernel distribuable propre.
4.8 KiB
name, type, context_tier, status
| name | type | context_tier | status |
|---|---|---|---|
| 021-scope-drift-guardrails-session-permissions | decision | warm | actif |
ADR-021 — Guardrails de scope : permissions implicites par type de session
Date : 2026-03-17 Statut : actif Décidé par : brainstorm navigate + coach (session 2026-03-17 ~22h)
Contexte
Le diagnostic
Le brain est une solution à un problème d'interface fondamental : Claude n'a pas de mémoire persistante native, et aucun mécanisme natif n'empêche le scope drift.
Sans guardrails, chaque session fait ce qu'elle veut :
brain.mdgrossit à chaque session (83k chars atteints) parce que rien ne discipline les writes- Une session-work charge du contexte navigate par accident
- Un agent répond sur un domaine hors de son scope parce que rien ne le bloque
- L'humain porte seul la discipline de scope — et c'est insoutenable
Le pattern identifié
Toute l'architecture brain (L0/L1/L2, session-*.yml, modes/, BSI) est une tentative de compenser l'absence de guardrails natifs entre l'humain, Claude, et le contexte chargé.
Les fichiers allègent la charge contextuelle. Mais ils ne font pas respecter le scope.
La friction comme signal
Quand une solution augmente la friction humaine (ex : "pense à lancer le script après la session"), c'est un signal que le guardrail est au mauvais endroit. Un guardrail qui demande à l'humain de se souvenir — c'est une convention fragile, pas un guardrail.
Les deux niveaux manquants
| Niveau | Ce qu'on a | Ce qui manque |
|---|---|---|
| Contextuel | session-*.yml, L0/L1/L2, audits | header auto-dérivé (brain-todo-header) |
| Comportemental | modes/brain-navigate.md (soft lock) | permissions implicites par type → settings.json |
Décision
Les permissions d'une session Claude sont déterminées par son type déclaré au boot — pas par la bonne volonté de l'humain ou de Claude.
Deux nouvelles sessions en priorité absolue :
session-edit-brain — sudo brain
- Accès complet en écriture sur tout le brain
- Chargée explicitement quand l'humain veut modifier la structure du brain lui-même
- Toutes les actions brain autorisées sans confirmation supplémentaire
- Scope : brain meta-work (agents, ADRs, sessions, kernel)
- Permissions settings.json : writes brain/* autorisés
session-kernel — lecture seule kernel
- Interdit toute modification des fichiers identifiés comme kernel
- Kernel = PATHS.md, KERNEL.md, CLAUDE.md, brain-compose*.yml, agents/coach*.md
- Toute tentative de write kernel → refus explicite + redirection vers session-edit-brain
- Protège l'identité cognitive du brain contre la dérive accidentelle
Principe directeur
Le type de session = contrat de permissions, pas une déclaration d'intention.
Ce n'est pas "dans cette session on essaie de ne pas modifier le kernel". C'est "dans cette session, modifier le kernel est techniquement impossible sans escalade explicite".
La discipline ne doit pas reposer sur la mémoire de l'humain ou la bonne volonté de Claude — elle doit être dans la configuration.
Alternatives considérées
| Option | Raison du rejet |
|---|---|
| Soft lock comportemental seul (ADR-019) | Insuffisant — Claude peut "oublier" en session longue ou post-compaction |
| Convention documentée | Fragile — repose sur la discipline humaine |
| Confirmation à chaque action sensible | Trop de friction — inverse du problème |
Conséquences
Positives :
- Scope drift impossible par construction pour les sessions typées
- L'humain n'a plus à porter la discipline de scope dans sa tête
- Les sessions deviennent des contrats exécutables, pas des intentions
- brain.md et le kernel ne peuvent pas grossir accidentellement hors session-edit-brain
Négatives / trade-offs assumés :
- Requiert un audit granulaire L0/L1 pour que chaque session-*.yml soit précis (déjà PRIORITÉ 1)
- La configuration settings.json devient un artefact critique à maintenir
- session-edit-brain = session à ouvrir explicitement → légère friction intentionnelle (c'est le point)
Livrable immédiat
profil/contexts/session-edit-brain.yml— L0/L1 write-all brainprofil/contexts/session-kernel.yml— L0/L1 read-only kernel + soft lock write- Audit kernel : identifier les fichiers protégés (liste dans KERNEL.md)
- Lier audit granulaire L0/L1 (PRIORITÉ 1) à la définition des permissions par session
Références
- Sessions où la décision a émergé : navigate 2026-03-17 ~22h
- ADR-019 — session modes soft lock (précurseur comportemental)
- ADR-020 — presence layer live-states
todo/brain.md— PRIORITÉ 1 audit granulaireprofil/contexts/session-navigate.yml— premier exemple de session avec soft lockmodes/brain-navigate.md— soft lock comportemental existant