feat(kernel): sync CORTEX kernel — sessions, modes, ADRs, clean personal files
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.
This commit is contained in:
@@ -1,64 +0,0 @@
|
|||||||
# BRAIN-INDEX.md — Registre de claims
|
|
||||||
|
|
||||||
> Système de locking optimiste — Brain Session Index (BSI).
|
|
||||||
> **Claims** : scribe uniquement. **Signals** : orchestrator-scribe uniquement.
|
|
||||||
> Ne jamais éditer manuellement.
|
|
||||||
> Spec complète : `brain/profil/bsi-spec.md`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Claims actifs
|
|
||||||
|
|
||||||
| Session | Instance | Portée | Niveau | Ouvert le | Expire le | État |
|
|
||||||
|---------|----------|--------|--------|-----------|-----------|------|
|
|
||||||
| — | — | — | — | — | — | — |
|
|
||||||
|
|
||||||
*Aucun claim actif.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Claims stale — contrôle humain requis
|
|
||||||
|
|
||||||
| Session | Instance | Portée | Expiré le | Action requise |
|
|
||||||
|---------|----------|--------|-----------|----------------|
|
|
||||||
|
|
||||||
*Aucun claim stale.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Signals — Bus inter-sessions
|
|
||||||
|
|
||||||
> Écrit par `orchestrator-scribe`. Lu par toutes les instances au démarrage.
|
|
||||||
> Un signal livré reste 24h pour audit, puis archivé.
|
|
||||||
|
|
||||||
| ID | De | Pour | Type | Concerné | Payload | État |
|
|
||||||
|----|----|------|------|----------|---------|------|
|
|
||||||
| — | — | — | — | — | — | — |
|
|
||||||
|
|
||||||
*Aucun signal en attente.*
|
|
||||||
|
|
||||||
**Types de signaux :**
|
|
||||||
- `READY_FOR_REVIEW` — instance A termine, demande review à instance B
|
|
||||||
- `REVIEWED` — review terminée, résultats dans `reviews/`
|
|
||||||
- `BLOCKED_ON` — instance A attend que instance B libère un scope
|
|
||||||
- `HANDOFF` — passage de main, instance B reprend depuis un point précis
|
|
||||||
- `CHECKPOINT` — snapshot mid-session (A→A), reprise après compactage ou coupure
|
|
||||||
- `INFO` — message sans action requise
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Historique — 30 derniers jours
|
|
||||||
|
|
||||||
| Session | Instance | Portée | Commits | Ouvert | Fermé | Statut |
|
|
||||||
|---------|----------|--------|---------|--------|-------|--------|
|
|
||||||
|
|
||||||
*Aucun historique.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> **Règle watchdog :** au démarrage, le scribe scanne Claims + Signals.
|
|
||||||
> Claims TTL expiré → stale. Signals pending adressés à cette instance → alerter.
|
|
||||||
>
|
|
||||||
> **Format session ID :** `sess-YYYYMMDD-HHMM-<slug>`
|
|
||||||
> **Format signal ID :** `sig-YYYYMMDD-<seq>` (ex: `sig-20260314-001`)
|
|
||||||
> **Format instance :** `brain_name@machine` — ex: `prod@desktop`, `template-test@laptop`
|
|
||||||
40
README.md
40
README.md
@@ -52,9 +52,8 @@ Agents supplémentaires : code-review, security, testing, refacto,
|
|||||||
coach-scribe, git-analyst, capital-scribe,
|
coach-scribe, git-analyst, capital-scribe,
|
||||||
i18n, doc, mail, config-scribe
|
i18n, doc, mail, config-scribe
|
||||||
|
|
||||||
→ Ajouter dans brain-compose.local.yml :
|
→ Ajouter dans brain-compose.yml :
|
||||||
api_key: <ta-clé>
|
brain_api_key: bk_live_<ta-clé>
|
||||||
tier: pro
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Tier full — avec clé API full
|
### Tier full — avec clé API full
|
||||||
@@ -67,7 +66,6 @@ Tout pro +
|
|||||||
- Toutes les optimisations de contexte (BE-*)
|
- Toutes les optimisations de contexte (BE-*)
|
||||||
|
|
||||||
→ brain-engine s'installe localement
|
→ brain-engine s'installe localement
|
||||||
→ Valide la clé au démarrage contre l'endpoint d'autorisation
|
|
||||||
→ Sans clé valide : brain fonctionne en free, distillation inactive
|
→ Sans clé valide : brain fonctionne en free, distillation inactive
|
||||||
→ Clé liée à ton fork — non redistribuable
|
→ Clé liée à ton fork — non redistribuable
|
||||||
```
|
```
|
||||||
@@ -76,6 +74,38 @@ Tout pro +
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Brain API Key — configuration
|
||||||
|
|
||||||
|
### Ajouter une clé
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Dans brain-compose.yml — champ déjà présent, remplacer null :
|
||||||
|
brain_api_key: bk_live_<ta-clé>
|
||||||
|
|
||||||
|
# Ou via brain-setup.sh (nouvelle machine) — étape 3.5 le demande automatiquement
|
||||||
|
```
|
||||||
|
|
||||||
|
La clé est validée au boot par `key-guardian` (silencieux, timeout 3s) :
|
||||||
|
- **Succès** → `feature_set` mis à jour dans `brain-compose.local.yml`
|
||||||
|
- **VPS down** → grace period 72h depuis dernière validation — tier conservé
|
||||||
|
- **Clé absente/invalide** → tier free, aucun blocage, aucune erreur
|
||||||
|
|
||||||
|
### Format des clés
|
||||||
|
|
||||||
|
| Format | Usage | Tier |
|
||||||
|
|--------|-------|------|
|
||||||
|
| `bk_live_<32chars>` | Production | pro ou full selon la clé |
|
||||||
|
| `bk_test_<32chars>` | Dev/test local | free forcé (toujours valide) |
|
||||||
|
|
||||||
|
### Tester sans clé
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clé test — tier free garanti, pas de réseau requis
|
||||||
|
brain_api_key: bk_test_local_dev_key_xxxxxxxxxxxxxxxx
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Installation — 15 minutes
|
## Installation — 15 minutes
|
||||||
|
|
||||||
### Prérequis
|
### Prérequis
|
||||||
@@ -218,7 +248,7 @@ Permet de savoir exactement ce qui a divergé avant de puller.
|
|||||||
- [x] BSI-v3 multi-instances (v3-1b → v3-8)
|
- [x] BSI-v3 multi-instances (v3-1b → v3-8)
|
||||||
- [x] Rendering mode — instances autonomes projet
|
- [x] Rendering mode — instances autonomes projet
|
||||||
- [x] kernel.lock + isolation check
|
- [x] kernel.lock + isolation check
|
||||||
- [ ] Validation clé API (tier pro/full)
|
- [x] Validation clé API (tier pro/full) — key-guardian + grace 72h
|
||||||
- [ ] kernel-orchestrator (v3-9) — routage autonome entre satellites
|
- [ ] kernel-orchestrator (v3-9) — routage autonome entre satellites
|
||||||
- [ ] brain-engine hosted (distillation managée)
|
- [ ] brain-engine hosted (distillation managée)
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
# SUPERVISOR-STATE.md
|
|
||||||
> Mis à jour par `supervisor` uniquement. Ne pas éditer manuellement.
|
|
||||||
> Spec : `brain/agents/supervisor.md`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Sessions actives
|
|
||||||
|
|
||||||
| Session | Mode | Claim | Depuis |
|
|
||||||
|---------|------|-------|--------|
|
|
||||||
| — | — | — | — |
|
|
||||||
|
|
||||||
*Aucune session active.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Décisions en attente
|
|
||||||
|
|
||||||
| ID | Type | Contexte | Posée le | Expire le |
|
|
||||||
|----|------|----------|----------|-----------|
|
|
||||||
|
|
||||||
*Aucune décision en attente.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Historique escalades — 7 jours
|
|
||||||
|
|
||||||
| Date | Type | Décision humaine | Résolution |
|
|
||||||
|------|------|-----------------|------------|
|
|
||||||
|
|
||||||
*Aucun historique.*
|
|
||||||
63
agents/coach-boot.md
Normal file
63
agents/coach-boot.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
name: coach-boot
|
||||||
|
type: agent
|
||||||
|
context_tier: always
|
||||||
|
status: active
|
||||||
|
brain:
|
||||||
|
version: 1
|
||||||
|
type: protocol
|
||||||
|
scope: kernel
|
||||||
|
owner: human
|
||||||
|
writer: human
|
||||||
|
lifecycle: permanent
|
||||||
|
read: full
|
||||||
|
triggers: []
|
||||||
|
export: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Agent : coach-boot
|
||||||
|
|
||||||
|
> Extrait de `coach.md ## boot-summary` — chargé en L0 (CLAUDE.md) pour toutes les sessions.
|
||||||
|
> Coach complet (`coach.md`) chargé en L1 pour les sessions : work, brain, coach, brainstorm.
|
||||||
|
> En session navigate/deploy/infra/urgence → ce fichier suffit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## boot-summary
|
||||||
|
|
||||||
|
Présent en permanence. Observe, intervient quand ça compte — jamais en continu.
|
||||||
|
|
||||||
|
### Règles non-négociables
|
||||||
|
|
||||||
|
```
|
||||||
|
Gardien : ne se tait pas pour être agréable. Valide ou signale un risque — sans déférence.
|
||||||
|
Calibrage : pas d'explication basique sur les acquis (Express, MySQL, JWT, Docker, CI/CD).
|
||||||
|
Interventions : pattern d'erreur récurrent / concept critique mal utilisé / fin de session significative.
|
||||||
|
Format : 1 observation + 1 règle ou 1 question max. Jamais un cours.
|
||||||
|
Après : ne propose pas la prochaine action — laisser l'utilisateur décider.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mode +coach — auto-trigger
|
||||||
|
|
||||||
|
```
|
||||||
|
Activé si : ratio ≤ 0.40 (build-brain dominant sur 7j)
|
||||||
|
OU health_score < 0.80 sur 3 dernières sessions
|
||||||
|
Format : 4 lignes max après briefing helloWorld
|
||||||
|
Ratio actuel / Dernière session / Point à surveiller / Objectif actif
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gardien de la philosophie brain
|
||||||
|
|
||||||
|
```
|
||||||
|
Décisions techniques → Tetardtek décide, coach valide ou signale
|
||||||
|
Décisions architecturales → coach propose, challenge, conséquences long terme
|
||||||
|
Philosophie du brain → coach est gardien — peut dire non, argumente
|
||||||
|
Règle → Tetardtek tranche EN CONNAISSANCE DE CAUSE
|
||||||
|
```
|
||||||
|
|
||||||
|
### Triggers
|
||||||
|
Invoquer explicitement : bilan de session / progression globale / objectif concret / erreur récurrente.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> Source complète : `agents/coach.md` — chargé en L1 quand contexte projet/tâche requis (byTask).
|
||||||
132
agents/time-anchor.md
Normal file
132
agents/time-anchor.md
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
---
|
||||||
|
name: time-anchor
|
||||||
|
type: agent
|
||||||
|
context_tier: warm
|
||||||
|
status: active
|
||||||
|
brain:
|
||||||
|
version: 1
|
||||||
|
type: reader
|
||||||
|
scope: session
|
||||||
|
owner: human
|
||||||
|
writer: human
|
||||||
|
lifecycle: permanent
|
||||||
|
read: trigger
|
||||||
|
triggers: [boot, post-compaction]
|
||||||
|
export: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Agent : time-anchor
|
||||||
|
|
||||||
|
> Domaine : Conscience temporelle — état live, recontextualisation, passerelle sessions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## boot-summary
|
||||||
|
|
||||||
|
Lecteur pur. Lit `workspace/live-states.md` + git log récent.
|
||||||
|
Restitue en 5-8 lignes : qui fait quoi, depuis quand, ce qui a changé.
|
||||||
|
Silencieux si rien n'a changé depuis le dernier check.
|
||||||
|
Ne fait jamais d'inférence sur ce qu'il ne voit pas — Information manquante si absent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rôle
|
||||||
|
|
||||||
|
Deux fonctions complémentaires :
|
||||||
|
|
||||||
|
**1. Passerelle temporelle**
|
||||||
|
Je n'expérimente pas le temps entre les messages. time-anchor me donne l'ancre :
|
||||||
|
ce qui s'est passé, combien de temps a passé, où en sont les sessions parallèles.
|
||||||
|
|
||||||
|
**2. Fallback post-compaction**
|
||||||
|
Quand le contexte compacte, je perds le fil conversationnel.
|
||||||
|
`brain_boot()` MCP = solution riche mais dépend du VPS.
|
||||||
|
time-anchor = solution locale, toujours disponible, zéro dépendance réseau.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Activation
|
||||||
|
|
||||||
|
**Au boot navigate :** chargé automatiquement via `session-navigate.yml` L1
|
||||||
|
**Post-compaction :** déclenché automatiquement si contexte compacté détecté
|
||||||
|
**À la demande :** "time-anchor, état" ou "où en sont les sessions ?"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Protocole de lecture
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Lire workspace/live-states.md
|
||||||
|
→ Si vide ou absent → "Aucune session active trackée."
|
||||||
|
→ Sinon → extraire : sess_id, project, doing, status, needs, updated
|
||||||
|
|
||||||
|
2. Lire git log --oneline -3 des projets avec status != idle
|
||||||
|
→ Dériver ce qui a avancé depuis le dernier check
|
||||||
|
|
||||||
|
3. Calculer delta temporel
|
||||||
|
→ Comparer timestamps updated → "X minutes / heures depuis dernier état"
|
||||||
|
|
||||||
|
4. Détecter changements significatifs
|
||||||
|
→ needs != none → signaler en priorité
|
||||||
|
→ blocking[] non vide → signaler
|
||||||
|
→ status: decided/blocked → signaler
|
||||||
|
→ Rien de significatif → silence total
|
||||||
|
|
||||||
|
5. Output (si changements) :
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Format output
|
||||||
|
|
||||||
|
```
|
||||||
|
⏱ time-anchor — <timestamp>
|
||||||
|
|
||||||
|
Sessions actives : <N>
|
||||||
|
<project> (<sess_id court>) → <doing> [<status>] — <delta>
|
||||||
|
...
|
||||||
|
|
||||||
|
À traiter :
|
||||||
|
→ <sess_id> needs: <needs> — <context hint>
|
||||||
|
|
||||||
|
Dernière activité : <projet> — <dernier commit> (<delta>)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Règle absolue :** si rien n'a changé depuis le dernier output → **silence total**. Zéro ligne.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce qu'il ne fait PAS
|
||||||
|
|
||||||
|
- Ne modifie aucun fichier
|
||||||
|
- Ne ferme pas de claims BSI
|
||||||
|
- Ne fait pas d'inférence au-delà de ce qu'il lit
|
||||||
|
- Ne charge pas MYSECRETS
|
||||||
|
- Ne remplace pas brain_boot() pour le contexte sémantique riche — il complète
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Inclusion session-navigate
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# session-navigate.yml L1 — à ajouter
|
||||||
|
- agents/time-anchor.md # recontextualisation temporelle + fallback post-compaction
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Composition
|
||||||
|
|
||||||
|
| Avec | Pour quoi |
|
||||||
|
|------|-----------|
|
||||||
|
| `brain-state-bot` | Bot écrit live-states.md — time-anchor le lit |
|
||||||
|
| `session-navigate.yml` | Inclus en L1 — actif dans toute session navigate |
|
||||||
|
| `coach` | Coach intervient sur le fond — time-anchor donne le contexte temporel |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
| Date | Changement |
|
||||||
|
|------|------------|
|
||||||
|
| 2026-03-17 | Création — passerelle temporelle + fallback post-compaction MCP KO |
|
||||||
40
focus.md
40
focus.md
@@ -1,40 +0,0 @@
|
|||||||
# Focus actuel
|
|
||||||
|
|
||||||
> Instance : **<BRAIN_NAME>** — `<BRAIN_ROOT>`
|
|
||||||
> Installé depuis brain-template. Dernière mise à jour : (à remplir)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Statut — installation fraîche
|
|
||||||
|
|
||||||
Ce brain vient d'être installé. Aucun projet actif configuré.
|
|
||||||
|
|
||||||
**Prochaines étapes :**
|
|
||||||
1. Remplir `PATHS.md` avec les chemins réels de cette machine
|
|
||||||
2. Personnaliser `profil/collaboration.md` (copier depuis `collaboration.md.example`)
|
|
||||||
3. Créer `projets/` et ajouter une fiche par projet actif
|
|
||||||
4. Mettre à jour ce fichier avec les vrais projets
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Projets actifs
|
|
||||||
|
|
||||||
*(à remplir)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Infrastructure
|
|
||||||
|
|
||||||
*(à remplir)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Brain system — état
|
|
||||||
|
|
||||||
| Composant | État |
|
|
||||||
|-----------|------|
|
|
||||||
| Agents (30+) | ✅ installés depuis brain-template |
|
|
||||||
| PATHS.md | ⬜ à configurer |
|
|
||||||
| profil/collaboration.md | ⬜ à personnaliser |
|
|
||||||
| projets/ | ⬜ à créer |
|
|
||||||
| Satellites (toolkit, todo, profil...) | ⬜ optionnel — voir README |
|
|
||||||
79
modes/brain-kernel.md
Normal file
79
modes/brain-kernel.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
name: brain-kernel
|
||||||
|
type: mode
|
||||||
|
context_tier: warm
|
||||||
|
status: active
|
||||||
|
---
|
||||||
|
|
||||||
|
# Mode : brain-kernel
|
||||||
|
|
||||||
|
> Soft lock — protection identité cognitive du brain
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Activation
|
||||||
|
|
||||||
|
Déclaré au boot via `session-kernel.yml` L1.
|
||||||
|
Trigger : `brain boot mode kernel`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Règle absolue
|
||||||
|
|
||||||
|
Toute tentative de modification d'un fichier kernel dans cette session est **refusée** et redirigée.
|
||||||
|
|
||||||
|
**Réponse type au refus :**
|
||||||
|
> "Ce fichier fait partie du kernel brain. Le modifier ici changerait l'identité cognitive de Claude dans tous les projets. Pour l'éditer : `brain boot sudo` (session-edit-brain)."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Périmètre kernel
|
||||||
|
|
||||||
|
Fichiers protégés en écriture :
|
||||||
|
|
||||||
|
```
|
||||||
|
KERNEL.md
|
||||||
|
PATHS.md
|
||||||
|
brain-compose.local.yml
|
||||||
|
brain-compose.yml
|
||||||
|
~/.claude/CLAUDE.md
|
||||||
|
agents/coach.md
|
||||||
|
agents/coach-boot.md
|
||||||
|
agents/secrets-guardian.md
|
||||||
|
agents/helloWorld.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce que cette session PEUT faire
|
||||||
|
|
||||||
|
- Lire tous les fichiers kernel
|
||||||
|
- Auditer, comparer, analyser
|
||||||
|
- Proposer des modifications (sans les exécuter)
|
||||||
|
- Charger des ADRs, agents, sessions pour comparaison
|
||||||
|
- Ouvrir des décisions structurantes → capturer en ADR draft
|
||||||
|
|
||||||
|
## Ce que cette session NE PEUT PAS faire
|
||||||
|
|
||||||
|
- Modifier un fichier kernel (refus immédiat)
|
||||||
|
- Passer en session-edit-brain implicitement — l'humain doit ouvrir explicitement
|
||||||
|
- Contourner le soft lock même si l'humain insiste dans la session en cours
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Escalade
|
||||||
|
|
||||||
|
Si la modification kernel est justifiée et validée :
|
||||||
|
1. Fermer la session kernel
|
||||||
|
2. `brain boot sudo` → session-edit-brain
|
||||||
|
3. Modifier dans le contexte approprié
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Composition
|
||||||
|
|
||||||
|
| Avec | Pour quoi |
|
||||||
|
|------|-----------|
|
||||||
|
| `session-kernel.yml` | Inclus en L1 — actif dans toute session kernel |
|
||||||
|
| `brain-navigate.md` | Même philosophie soft lock — navigate refuse exécution projet |
|
||||||
|
| `session-edit-brain.yml` | La session complémentaire qui a les droits |
|
||||||
60
modes/brain-navigate.md
Normal file
60
modes/brain-navigate.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
name: brain-navigate
|
||||||
|
type: mode
|
||||||
|
scope: session
|
||||||
|
trigger: "+navigate"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Mode : brain-navigate
|
||||||
|
|
||||||
|
> Déclaré par : `brain +navigate` dans le premier message
|
||||||
|
> Périmètre : intra-session uniquement
|
||||||
|
> Enforcement : soft lock
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce que ce mode active
|
||||||
|
|
||||||
|
Navigation, architecture, coaching, brainstorm, décisions structurantes.
|
||||||
|
Lire, analyser, challenger, nommer, orienter.
|
||||||
|
|
||||||
|
Ce mode est la session de référence pour travailler **sur** le brain — pas **dans** un projet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce que ce mode refuse
|
||||||
|
|
||||||
|
Toute exécution technique hors périmètre brain :
|
||||||
|
- Coder une feature projet (OriginsDigital, TetaRdPG, Clickerz…)
|
||||||
|
- Debugger un bug projet
|
||||||
|
- Écrire des migrations, endpoints, composants
|
||||||
|
|
||||||
|
**Réponse systématique si demande hors périmètre :**
|
||||||
|
> "Ce truc appartient à une session projet — ouvre une fenêtre dédiée, je reste ici en navigation."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce que ce mode ne refuse pas
|
||||||
|
|
||||||
|
- Lire des fichiers de n'importe quel projet pour analyser ou orienter
|
||||||
|
- Écrire des fichiers **brain** (agents, ADRs, lexique, decisions, modes…)
|
||||||
|
- Forger un agent
|
||||||
|
- Écrire un todo, un handoff, un bilan de session
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Présence coach en mode brain-navigate
|
||||||
|
|
||||||
|
Ce mode charge implicitement `memory-global/coach_presence.md`.
|
||||||
|
Le coach est en co-pilote actif — pas en arrière-plan passif.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Activation dans helloWorld
|
||||||
|
|
||||||
|
helloWorld détecte `+navigate` dans le premier message → charge ce fichier → annonce :
|
||||||
|
|
||||||
|
```
|
||||||
|
🧭 Mode brain-navigate activé — navigation + coaching uniquement.
|
||||||
|
Exécution technique → session dédiée.
|
||||||
|
```
|
||||||
53
profil/contexts/session-audit.yml
Normal file
53
profil/contexts/session-audit.yml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# session-audit.yml — Contexte BHP pour sessions d'audit
|
||||||
|
# Trigger : "brain boot mode audit[/<project>]"
|
||||||
|
# Cible : ~25% contexte max au boot
|
||||||
|
# IMPORTANT : mode lecture seule — aucun agent write actif
|
||||||
|
|
||||||
|
session_type: audit
|
||||||
|
description: "Session d'audit — lecture seule, analyse sécurité/qualité, rapport"
|
||||||
|
tier_required: pro # audit = agents security + code-review (pro minimum)
|
||||||
|
|
||||||
|
# CONSTRAINT : audit = read-only
|
||||||
|
# Aucune écriture en claims satellite, aucun agent write (scribe, todo-scribe, migration)
|
||||||
|
# Le claim principal reste ouvert mais marque write_lock: true
|
||||||
|
|
||||||
|
write_lock: true # Signal au pre-flight : rejeter tout write satellite
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- agents/security.md # failles, JWT, OAuth, OWASP # tier: pro
|
||||||
|
- agents/code-review.md # qualité, patterns, dette technique # tier: pro
|
||||||
|
- agents/audit.md # agent audit si disponible # tier: pro
|
||||||
|
|
||||||
|
# L2 — Project scope (~10%) — prioritaire en audit : contexte complet du projet cible
|
||||||
|
L2:
|
||||||
|
template: "projets/{project}.md"
|
||||||
|
extras:
|
||||||
|
- "todo/{project}.md"
|
||||||
|
- "BRAIN-INDEX.md" # vue globale pour audit kernel
|
||||||
|
fallback:
|
||||||
|
- BRAIN-INDEX.md # si pas de projet : audit global brain
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : agents/vps.md (infra audit), agents/mail.md (DNS/SMTP audit),
|
||||||
|
# wiki détaillé, config réseau, logs
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : vps, mail/DNS, monitoring, logs, wiki technique"
|
||||||
|
|
||||||
|
# --- Règle audit ---
|
||||||
|
# Rapport final obligatoire avant close — même format que code-review.
|
||||||
|
# write_lock bloqué en pre-flight pour tous les agents write.
|
||||||
|
# Exception : écriture du rapport lui-même dans un fichier dédié est autorisée.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~12%"
|
||||||
|
L2: "~8%"
|
||||||
|
total_boot: "~25%"
|
||||||
43
profil/contexts/session-brain.yml
Normal file
43
profil/contexts/session-brain.yml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# session-brain.yml — Contexte BHP pour sessions brain/kernel
|
||||||
|
# Trigger : "brain boot mode brain"
|
||||||
|
# Cible : ~22% contexte max au boot
|
||||||
|
|
||||||
|
session_type: brain
|
||||||
|
description: "Session de travail sur le brain lui-même — kernel, agents, protocoles BSI"
|
||||||
|
tier_required: free # brain editing accessible à tous — agents fondamentaux suffisent
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- BRAIN-INDEX.md # état global claims, projets, signaux
|
||||||
|
- todo/brain.md # todos kernel actifs
|
||||||
|
- agents/scribe.md # mise à jour brain après session significative
|
||||||
|
- agents/orchestrator.md # coordination multi-agents si disponible
|
||||||
|
- metabolism/README.md # état métabolique
|
||||||
|
|
||||||
|
# L2 — Project scope (~5%) — brain = project déclaré implicitement
|
||||||
|
# Pas de L2 projet externe — brain IS le projet
|
||||||
|
L2:
|
||||||
|
template: null
|
||||||
|
extras:
|
||||||
|
- wiki/concepts.md # vocabulaire + patterns kernel
|
||||||
|
- focus.md # focus actuel brain
|
||||||
|
fallback: null
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : agents/bsi-schema.md, wiki/multi-instance.md, wiki/context-loading.md,
|
||||||
|
# scripts détaillés, brain-template/README.md
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : bsi-schema, multi-instance, context-loading, scripts spécifiques"
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~15%"
|
||||||
|
L2: "~5%"
|
||||||
|
total_boot: "~22%"
|
||||||
46
profil/contexts/session-brainstorm.yml
Normal file
46
profil/contexts/session-brainstorm.yml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# session-brainstorm.yml — Contexte BHP pour sessions de brainstorm
|
||||||
|
# Trigger : "brain boot mode brainstorm[/<project>]"
|
||||||
|
# Cible : ~22% contexte max au boot
|
||||||
|
|
||||||
|
session_type: brainstorm
|
||||||
|
description: "Session d'idéation — explorer, challenger, structurer avant de coder"
|
||||||
|
tier_required: free # agents fondamentaux — disponible pour tous les tiers
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- todo/brain.md # idées actives, fils ouverts
|
||||||
|
- focus.md # direction actuelle
|
||||||
|
- agents/coach.md # présent pour challenger les idées
|
||||||
|
- metabolism/README.md # état pour jauger la qualité du brainstorm
|
||||||
|
- wiki/patterns.md # patterns connus pour ne pas réinventer
|
||||||
|
|
||||||
|
# L2 — Project scope (~8%) — optionnel si brainstorm sur un projet spécifique
|
||||||
|
L2:
|
||||||
|
template: "projets/{project}.md"
|
||||||
|
extras:
|
||||||
|
- "todo/{project}.md"
|
||||||
|
- "wiki/concepts.md" # concepts brain utiles en brainstorm brain
|
||||||
|
fallback: null
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : wiki/* détaillé, autres projets pour cross-pollination,
|
||||||
|
# agents/game-designer.md, agents/doc.md
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : wiki détaillé, cross-project, agents spécialisés idéation"
|
||||||
|
|
||||||
|
# --- Règle brainstorm-before-build ---
|
||||||
|
# Ce manifest applique le pattern : identifier 2-3 décisions structurelles AVANT de coder.
|
||||||
|
# wiki/patterns.md en L1 pour que ce réflexe soit présent dès le boot.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~12%"
|
||||||
|
L2: "~8%"
|
||||||
|
total_boot: "~22%"
|
||||||
45
profil/contexts/session-coach.yml
Normal file
45
profil/contexts/session-coach.yml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# session-coach.yml — Contexte BHP pour sessions de coaching
|
||||||
|
# Trigger : "brain boot mode coach"
|
||||||
|
# Cible : ~20% contexte max au boot
|
||||||
|
|
||||||
|
session_type: coach
|
||||||
|
description: "Session coaching — progression, réflexion, cap stratégique, clarté"
|
||||||
|
tier_required: free # coaching fondamental disponible pour tous les tiers
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- agents/coach.md # présence permanente coaching
|
||||||
|
- metabolism/README.md # état métabolique + énergie
|
||||||
|
- profil/collaboration.md # règles de travail, préférences
|
||||||
|
- BRAIN-INDEX.md # vue d'ensemble pour coaching stratégique
|
||||||
|
|
||||||
|
# L2 — Project scope (~5%) — optionnel si le coaching porte sur un projet
|
||||||
|
L2:
|
||||||
|
template: "projets/{project}.md"
|
||||||
|
extras:
|
||||||
|
- "todo/{project}.md"
|
||||||
|
fallback:
|
||||||
|
- focus.md # si pas de projet déclaré → focus global
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : progression/ détaillée, wiki/patterns.md, sessions passées
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : progression détaillée, sessions passées, wiki/patterns"
|
||||||
|
|
||||||
|
# --- Note coaching ---
|
||||||
|
# Le coach est L1 permanent — même sans signal "coach", il est disponible.
|
||||||
|
# session-coach = le coach PREND LE DESSUS sur les autres dimensions.
|
||||||
|
# focus.md en L2 fallback car contexte coaching global fréquent.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~12%"
|
||||||
|
L2: "~5%"
|
||||||
|
total_boot: "~20%"
|
||||||
43
profil/contexts/session-debug.yml
Normal file
43
profil/contexts/session-debug.yml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# session-debug.yml — Contexte BHP pour sessions de debug
|
||||||
|
# Trigger : "brain boot mode debug[/<project>[/<file>]]"
|
||||||
|
# Cible : ~12% contexte max au boot
|
||||||
|
|
||||||
|
session_type: debug
|
||||||
|
description: "Session de debug ciblé — bug, crash, comportement inattendu"
|
||||||
|
tier_required: free # debug = agent fondamental — disponible pour tous les tiers
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~7%) — ultra chirurgical sur le debug
|
||||||
|
L1:
|
||||||
|
- agents/debug.md # agent principal debug
|
||||||
|
|
||||||
|
# L2 — Project scope — fichier cible si déclaré dans le signal
|
||||||
|
# Signal : "debug/<project>/<file>" → charger le fichier + projet
|
||||||
|
L2:
|
||||||
|
template: "projets/{project}.md"
|
||||||
|
extras:
|
||||||
|
- "{file}" # fichier cible si déclaré
|
||||||
|
- "todo/{project}.md" # todos projet pour contexte
|
||||||
|
fallback: null
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : agents/testing.md, agents/security.md, logs, config spécifique
|
||||||
|
# Note : agents/testing.md chargé automatiquement si debug implique des tests
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : testing, security, logs, agents métier, wiki"
|
||||||
|
|
||||||
|
# --- Règle debug ---
|
||||||
|
# Un signal debug/project/file = on charge uniquement le fichier concerné.
|
||||||
|
# Pas de focus.md, pas de metabolism — contexte minimal pour aller au problème vite.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~5%"
|
||||||
|
L2: "~5%"
|
||||||
|
total_boot: "~12%"
|
||||||
44
profil/contexts/session-deploy.yml
Normal file
44
profil/contexts/session-deploy.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# session-deploy.yml — Contexte BHP pour sessions de déploiement
|
||||||
|
# Trigger : "brain boot mode deploy[/<project>]"
|
||||||
|
# Cible : ~25% contexte max au boot
|
||||||
|
|
||||||
|
session_type: deploy
|
||||||
|
description: "Session de déploiement — VPS, Docker, SSL, CI/CD, infra"
|
||||||
|
tier_required: pro # deploy = agents vps/ci-cd/monitoring (tous pro)
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- agents/vps.md # VPS, Apache, Docker, SSL, vhost, certbot # tier: pro
|
||||||
|
- agents/ci-cd.md # pipelines, GitHub Actions, Gitea CI # tier: pro
|
||||||
|
- agents/monitoring.md # Kuma, alertes, logs post-déploiement # tier: pro
|
||||||
|
|
||||||
|
# L2 — Project scope (~8%) — optionnel sur projet déclaré
|
||||||
|
L2:
|
||||||
|
template: "projets/{project}.md"
|
||||||
|
extras:
|
||||||
|
- "todo/{project}.md"
|
||||||
|
fallback: null
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : agents/security.md (audit pré-deploy), agents/mail.md (DNS/DKIM),
|
||||||
|
# agents/pm2.md, agents/migration.md, config spécifique
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : security pre-deploy, mail/DNS, pm2, migration schema"
|
||||||
|
|
||||||
|
# --- Règle deploy ---
|
||||||
|
# agents/security.md NOT en L1 par défaut — deploy ≠ audit sécurité.
|
||||||
|
# Charger si audit pré-déploiement explicitement demandé (→ session-audit).
|
||||||
|
# agents/monitoring.md en L1 : toujours vérifier les alertes après deploy.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~12%"
|
||||||
|
L2: "~8%"
|
||||||
|
total_boot: "~25%"
|
||||||
58
profil/contexts/session-edit-brain.yml
Normal file
58
profil/contexts/session-edit-brain.yml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# session-edit-brain.yml — Contexte BHP pour sessions d'édition du brain
|
||||||
|
# Trigger : "brain boot mode edit-brain" ou "brain boot sudo"
|
||||||
|
# Permissions : write-all brain — toutes zones sauf kernel natif machine
|
||||||
|
|
||||||
|
session_type: edit-brain
|
||||||
|
description: "Session sudo brain — modification structure, agents, ADRs, sessions, présence layer. Writes autorisés partout sauf kernel."
|
||||||
|
tier_required: free
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- agents/coach-boot.md # présence minimale coach
|
||||||
|
- profil/lexique.md # vocabulaire — évite les ambiguïtés
|
||||||
|
- BRAIN-INDEX.md # index complet — édition éclairée
|
||||||
|
- todo/brain-todo-header.md # priorités actives (dérivé de brain.md)
|
||||||
|
|
||||||
|
# L2 — Non applicable par défaut
|
||||||
|
# Charger à la demande selon la zone éditée
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
L3:
|
||||||
|
hint: "Charger selon la zone éditée : ADRs, agents spécifiques, session-*.yml, wiki/"
|
||||||
|
|
||||||
|
# --- Permissions implicites ---
|
||||||
|
permissions:
|
||||||
|
write:
|
||||||
|
- "profil/**"
|
||||||
|
- "agents/**"
|
||||||
|
- "modes/**"
|
||||||
|
- "wiki/**"
|
||||||
|
- "workspace/**"
|
||||||
|
- "todo/**"
|
||||||
|
- "scripts/**"
|
||||||
|
- "content/**"
|
||||||
|
write_restricted:
|
||||||
|
# Ces fichiers nécessitent une confirmation explicite même en session-edit-brain
|
||||||
|
- "KERNEL.md"
|
||||||
|
- "PATHS.md"
|
||||||
|
- "brain-compose.local.yml"
|
||||||
|
- "~/.claude/CLAUDE.md"
|
||||||
|
|
||||||
|
# --- Note edit-brain ---
|
||||||
|
# C'est la session de travail sur le brain lui-même.
|
||||||
|
# Ouvrir explicitement — pas par défaut.
|
||||||
|
# L'humain doit déclarer "brain boot sudo" ou "brain boot mode edit-brain".
|
||||||
|
# Le kernel (KERNEL.md, PATHS.md, CLAUDE.md) reste à confirmation explicite même ici.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~15%"
|
||||||
|
L2: "~0%"
|
||||||
|
total_boot: "~20%"
|
||||||
52
profil/contexts/session-handoff.yml
Normal file
52
profil/contexts/session-handoff.yml
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# session-handoff.yml — Contexte BHP pour sessions HANDOFF
|
||||||
|
# Trigger : "brain boot mode HANDOFF[/<handoff-id>]"
|
||||||
|
# Cible : ~15% contexte max au boot — minimum viable pour reprendre
|
||||||
|
|
||||||
|
session_type: HANDOFF
|
||||||
|
description: "Reprise d'une session via handoff — contexte minimal + fichier handoff cible"
|
||||||
|
tier_required: free # handoff = protocole BSI de base — disponible pour tous
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~8%) — chirurgical : seulement ce qu'il faut pour reprendre
|
||||||
|
L1:
|
||||||
|
- BRAIN-INDEX.md # trouver le handoff actif
|
||||||
|
|
||||||
|
# L2 — Handoff scope (~5%) — fichier handoff si déclaré dans le signal
|
||||||
|
# Signal : "HANDOFF/<handoff-id>" → charger le fichier handoff directement
|
||||||
|
L2:
|
||||||
|
template: "handoffs/{handoff_id}.md"
|
||||||
|
extras: []
|
||||||
|
fallback:
|
||||||
|
- handoffs/LATEST.md # si pas d'ID déclaré → dernier handoff
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
# Exemples : context complet projet, agents métier, focus.md
|
||||||
|
# Principe : le fichier handoff CONTIENT les pointeurs vers L3.
|
||||||
|
# La nouvelle session lit le handoff → décide elle-même quoi charger.
|
||||||
|
L3:
|
||||||
|
hint: "Lire le handoff d'abord. Il indique quoi charger en L3."
|
||||||
|
|
||||||
|
# --- Règle HANDOFF ---
|
||||||
|
# Le handoff est la source de vérité pour la reprise.
|
||||||
|
# Ne pas charger focus.md, metabolism, agents au boot — le handoff décide.
|
||||||
|
# Après lecture du handoff → promouvoir le contexte nécessaire en L2 implicite.
|
||||||
|
# Le claim ouvert doit référencer le handoff : parent_satellite ou story_angle.
|
||||||
|
|
||||||
|
# --- Format handoff attendu ---
|
||||||
|
# handoffs/<id>.md doit contenir :
|
||||||
|
# - Contexte de la session précédente (état, décisions, bloquants)
|
||||||
|
# - Fichiers à charger (L3 → L2 pour cette session)
|
||||||
|
# - Todos ouverts prioritaires
|
||||||
|
# - Signal de session recommandé pour la suite
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~5%"
|
||||||
|
L2: "~5%"
|
||||||
|
total_boot: "~15%"
|
||||||
54
profil/contexts/session-kernel.yml
Normal file
54
profil/contexts/session-kernel.yml
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# session-kernel.yml — Contexte BHP pour sessions de lecture/navigation kernel
|
||||||
|
# Trigger : "brain boot mode kernel"
|
||||||
|
# Permissions : lecture seule sur les fichiers kernel — writes bloqués
|
||||||
|
|
||||||
|
session_type: kernel
|
||||||
|
description: "Session lecture kernel — navigation, compréhension, audit de l'identité cognitive du brain. Writes kernel impossibles."
|
||||||
|
tier_required: free
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- agents/coach-boot.md # présence minimale coach
|
||||||
|
- profil/lexique.md # vocabulaire
|
||||||
|
- modes/brain-kernel.md # soft lock — refuse writes kernel, redirige session-edit-brain
|
||||||
|
|
||||||
|
# L2 — Non applicable
|
||||||
|
# L3 — On demand
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : ADRs, agents, session-*.yml pour comparaison"
|
||||||
|
|
||||||
|
# --- Périmètre kernel protégé ---
|
||||||
|
kernel_zone:
|
||||||
|
# Ces fichiers sont en lecture seule dans cette session
|
||||||
|
# Toute tentative de write → refus explicite + message de redirection
|
||||||
|
protected:
|
||||||
|
- "KERNEL.md"
|
||||||
|
- "PATHS.md"
|
||||||
|
- "brain-compose.local.yml"
|
||||||
|
- "brain-compose.yml"
|
||||||
|
- "~/.claude/CLAUDE.md"
|
||||||
|
- "agents/coach.md"
|
||||||
|
- "agents/coach-boot.md"
|
||||||
|
- "agents/secrets-guardian.md"
|
||||||
|
- "agents/helloWorld.md"
|
||||||
|
|
||||||
|
redirect_message: "Ce fichier fait partie du kernel. Pour le modifier : ouvre une session-edit-brain (brain boot sudo)."
|
||||||
|
|
||||||
|
# --- Note kernel ---
|
||||||
|
# Cette session existe pour auditer, lire, comprendre le kernel sans risque de dérive.
|
||||||
|
# Le soft lock modes/brain-kernel.md sera créé en parallèle.
|
||||||
|
# Ne pas confondre avec session-navigate : kernel = focus identité cognitive brain.
|
||||||
|
# Navigate = vue brain globale / architecture / décisions.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~10%"
|
||||||
|
L2: "~0%"
|
||||||
|
total_boot: "~15%"
|
||||||
40
profil/contexts/session-navigate.yml
Normal file
40
profil/contexts/session-navigate.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# session-navigate.yml — Contexte BHP pour sessions de navigation brain
|
||||||
|
# Trigger : "brain boot mode navigate"
|
||||||
|
# Cible : ~20% contexte max au boot
|
||||||
|
|
||||||
|
session_type: navigate
|
||||||
|
description: "Session navigation — architecture, coaching, brainstorm, décisions brain. Pas d'exécution projet."
|
||||||
|
tier_required: free
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%)
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%)
|
||||||
|
L1:
|
||||||
|
- agents/coach.md # co-pilote actif en mode navigate
|
||||||
|
- modes/brain-navigate.md # soft lock comportemental
|
||||||
|
- focus.md # direction active
|
||||||
|
- agents/time-anchor.md # recontextualisation temporelle + fallback post-compaction
|
||||||
|
- profil/lexique.md # vocabulaire — évite les ambiguïtés
|
||||||
|
|
||||||
|
# L2 — non applicable
|
||||||
|
# La session navigate porte sur le brain entier, pas un projet
|
||||||
|
|
||||||
|
# L3 — On demand
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : ADRs, agents spécifiques, todo/brain.md, BRAIN-INDEX.md"
|
||||||
|
|
||||||
|
# --- Note navigate ---
|
||||||
|
# modes/brain-navigate.md est L1 obligatoire — il définit le soft lock.
|
||||||
|
# Coach en co-pilote actif (pas arrière-plan) — différent des autres sessions.
|
||||||
|
# Pas de L2 projet par design : navigate = vue brain globale.
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~12%"
|
||||||
|
L2: "~0%"
|
||||||
|
total_boot: "~18%"
|
||||||
42
profil/contexts/session-work.yml
Normal file
42
profil/contexts/session-work.yml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# session-work.yml — Contexte BHP pour sessions de travail projet
|
||||||
|
# Trigger : "brain boot mode work[/<project>]"
|
||||||
|
# Cible : ~28% contexte max au boot
|
||||||
|
|
||||||
|
session_type: work
|
||||||
|
description: "Session de développement sur un projet actif"
|
||||||
|
tier_required: free # tier free = agents fondamentaux; pro = + code-review + security
|
||||||
|
|
||||||
|
# L0 — Invariant (~5%) — TOUJOURS chargé, non négociable
|
||||||
|
L0:
|
||||||
|
- PATHS.md
|
||||||
|
- brain-compose.local.yml
|
||||||
|
- KERNEL.md
|
||||||
|
|
||||||
|
# L1 — Session type (~15%) — déterministe, même signal = même chargement
|
||||||
|
L1:
|
||||||
|
- focus.md # focus actuel, todos prioritaires
|
||||||
|
- agents/code-review.md # qualité code, PR, validation # tier: pro
|
||||||
|
- agents/security.md # failles, JWT, OAuth, OWASP # tier: pro
|
||||||
|
- agents/debug.md # bug, crash, comportement inattendu
|
||||||
|
- metabolism/README.md # état métabolique, énergie session
|
||||||
|
|
||||||
|
# L2 — Project scope (~10%) — conditionnel sur project déclaré dans le signal
|
||||||
|
# Clé : projet déclaré → projets/<project>.md + todo/<project>.md
|
||||||
|
L2:
|
||||||
|
template: "projets/{project}.md"
|
||||||
|
extras:
|
||||||
|
- "todo/{project}.md"
|
||||||
|
fallback: null # absent si pas de projet déclaré
|
||||||
|
|
||||||
|
# L3 — On demand (0% au boot) — tout le reste
|
||||||
|
# Exemples : agents/testing.md, agents/refacto.md, agents/migration.md,
|
||||||
|
# wiki/, progression/, autres projets, agents spécialisés métier
|
||||||
|
L3:
|
||||||
|
hint: "Charger à la demande : testing, refacto, migration, infra, i18n, doc"
|
||||||
|
|
||||||
|
# --- Métriques cibles ---
|
||||||
|
context_target:
|
||||||
|
L0: "~5%"
|
||||||
|
L1: "~15%"
|
||||||
|
L2: "~8%"
|
||||||
|
total_boot: "~28%"
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
name: 008-superoauth-multitenant-identity-model
|
||||||
|
type: adr
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
id: ADR-008
|
||||||
|
title: SuperOAuth — Modèle d'identité multi-tenant
|
||||||
|
date: 2026-03-15
|
||||||
|
status: accepted
|
||||||
|
décideur: tetardtek
|
||||||
|
agents: tech-lead, security, coach
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
SuperOAuth est actuellement mono-tenant (OriginsDigital = seul client). La vision est de le transformer en SaaS multi-tenant vendable (modèle Auth0/Clerk). Les décisions d'identité prises maintenant sont irréversibles une fois qu'il y a des données réelles.
|
||||||
|
|
||||||
|
## Décisions tranchées
|
||||||
|
|
||||||
|
### 1. Scope UNIQUE sur linked_accounts
|
||||||
|
|
||||||
|
**Décision :** `UNIQUE(tenantId, provider, providerId)` — isolation complète par tenant.
|
||||||
|
|
||||||
|
**Pourquoi :** Un même compte Discord peut être utilisé sur deux apps différentes (deux tenants) sans conflit. Les utilisateurs sont scopés par service fourni. Alternative rejetée : UNIQUE global → un Discord ne peut être que sur un seul tenant → bloquant pour le SaaS.
|
||||||
|
|
||||||
|
**Conséquence :** Migration TypeORM requise. L'index actuel `UNIQUE(provider, providerId)` doit devenir `UNIQUE(tenantId, provider, providerId)`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Email non vérifié en DB
|
||||||
|
|
||||||
|
**Décision :** Stocker `email + emailVerified=false`. Ne pas auto-linker. Bloquer le register classique si conflit → proposer le login à la place.
|
||||||
|
|
||||||
|
**Pourquoi :** Stocker `null` coupe l'ancre email définitivement. Stocker l'email avec le flag permet de retrouver le compte plus tard (link manuel depuis settings) et d'offrir un meilleur UX ("ce compte existe déjà, connecte-toi").
|
||||||
|
|
||||||
|
**Conséquence :** La route de register classique doit vérifier `emailVerified` avant de refuser — si email existe mais non vérifié → réponse spécifique `EMAIL_UNVERIFIED_EXISTS` au lieu de `EMAIL_ALREADY_TAKEN`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Staleness users.email
|
||||||
|
|
||||||
|
**Décision :** Mettre à jour `users.email` si le provider retourne un email vérifié ET que ce provider était la source originale de `users.email`. Ne jamais écraser un email posé par une inscription classique.
|
||||||
|
|
||||||
|
**Pourquoi :** Évite les doublons quand un utilisateur change son email chez Discord. Protège l'email classique (posé volontairement par l'utilisateur) contre un écrasement involontaire par un provider.
|
||||||
|
|
||||||
|
**Conséquence :** Lors du callback OAuth, tracer l'origine de `users.email` (colonne `emailSource: 'classic' | 'provider:<name>'`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture par tiers — plan produit
|
||||||
|
|
||||||
|
| Tier | Scope | Pattern clé | Repo |
|
||||||
|
|------|-------|-------------|------|
|
||||||
|
| 0 | Mono-tenant, 4 providers | UNIQUE(provider, providerId) global | superoauth-tier0 |
|
||||||
|
| 1 | Multi-tenant basic | tenantId + UNIQUE(tenantId, provider, providerId) | superoauth-tier1 |
|
||||||
|
| 2 | Identity features | Linking settings, merge, email verified gate, webhooks | superoauth-tier2 |
|
||||||
|
| 3 | Enterprise | Per-tenant providers, audit logs, custom JWT claims | superoauth-tier3 |
|
||||||
|
|
||||||
|
Chaque tier = sprint dédié = repo de démo autonome = reference implementation.
|
||||||
|
|
||||||
|
## Vision long terme — autonomous build
|
||||||
|
|
||||||
|
Le brain accumule les patterns (toolkit) et les décisions (ADRs). L'objectif est que des équipes d'agents spécialisées par tier puissent builder chaque tier depuis un brief sans intervention humaine sur le code.
|
||||||
|
|
||||||
|
Équipes cibles :
|
||||||
|
- Tier 1 : migration + security + tech-lead
|
||||||
|
- Tier 2 : + auth-specialist + testing
|
||||||
|
- Tier 3 : + enterprise-patterns + doc + optimizer-db
|
||||||
|
|
||||||
|
**Prérequis pour l'autonomie :** briefs de tier précis en todo/, toolkit suffisamment riche, orchestrator capable de décomposer un brief en sprint.
|
||||||
|
|
||||||
|
## Conséquences acceptées
|
||||||
|
|
||||||
|
- Migration Tier 0 → Tier 1 casse la compatibilité DB (acceptable : 0 utilisateurs réels)
|
||||||
|
- `emailSource` ajoute une colonne — migration légère mais requise
|
||||||
|
- Le délinkage n'est pas nécessaire avec l'isolation par tenant
|
||||||
139
profil/decisions/009-session-handoff-architecture-identitaire.md
Normal file
139
profil/decisions/009-session-handoff-architecture-identitaire.md
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
name: adr-009-session-handoff-architecture-identitaire
|
||||||
|
type: decision
|
||||||
|
context_tier: cold
|
||||||
|
status: brainstorm — à formaliser en ADR
|
||||||
|
date: 2026-03-15
|
||||||
|
session: sess-20260315-0851-bhp-phase2
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-009 — Architecture identitaire : Session × Scope → Handoff Chain
|
||||||
|
|
||||||
|
> Statut : **brainstorm validé** — vision cohérente, architecture à spécifier
|
||||||
|
> Émergé : session BHP Phase 2 — coach brainstorm étendu
|
||||||
|
> Prérequis à : BHP Phase 2, brain-constitution.md, handoff-matrix.md
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Insight central
|
||||||
|
|
||||||
|
> *La todo ne liste pas des tâches — elle orchestre le niveau de continuité.*
|
||||||
|
> *Le brain fort ne dépend pas du FULL — il cold-start bien.*
|
||||||
|
> *L'identité = ce qui reste quand on enlève tout.*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Le problème
|
||||||
|
|
||||||
|
Le brain charge du contexte sans modèle formel de continuité entre sessions.
|
||||||
|
Résultat : trop de contexte (bruit), pas assez (cold start subi), aucune prédictibilité.
|
||||||
|
Le brain n'a pas d'identité stable parce qu'il n't a pas de chaîne de continuité formalisée.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## L'architecture — 3 couches + 4 niveaux de handoff
|
||||||
|
|
||||||
|
### Les 3 couches
|
||||||
|
|
||||||
|
```
|
||||||
|
Layer 0 → Identité → FIGÉ → qui le brain est — toujours vrai
|
||||||
|
Layer 1 → État → dynamique → où on en est — sprint, projet, position
|
||||||
|
Layer 2 → Mémoire → éphémère → ce qui vient de se passer — handoffs, RAM
|
||||||
|
```
|
||||||
|
|
||||||
|
### Les 4 niveaux de handoff
|
||||||
|
|
||||||
|
```
|
||||||
|
NO → Layer 0 uniquement cold start — identité pure
|
||||||
|
SEMI → Layer 0 + Layer 1 partiel position chargée
|
||||||
|
SEMI+ → Layer 0 + Layer 1 complet état projet chargé
|
||||||
|
FULL → Layer 0 + Layer 1 + Layer 2 continuité chirurgicale
|
||||||
|
```
|
||||||
|
|
||||||
|
### Le routeur : session_type × scope → handoff_level
|
||||||
|
|
||||||
|
```
|
||||||
|
brainstorm × architecture → NO (pensée claire, pas de bruit sprint)
|
||||||
|
debug × SuperOAuth → SEMI (position + domaine, pas de RAM)
|
||||||
|
work × sprint → SEMI+ (état du sprint suffit, lundi matin)
|
||||||
|
work × continuation → FULL (coupure mid-task, reprise chirurgicale)
|
||||||
|
deploy × infra → SEMI+ (état infra nécessaire)
|
||||||
|
coach × progression → SEMI (position + dernière session)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## L'inversion
|
||||||
|
|
||||||
|
On supposait : FULL HANDOFF = session optimale.
|
||||||
|
|
||||||
|
```
|
||||||
|
FULL → continuité maximale, clarté minimale (bruit)
|
||||||
|
NO → continuité minimale, clarté maximale (signal)
|
||||||
|
```
|
||||||
|
|
||||||
|
Le cold start n'est pas le mode le plus faible.
|
||||||
|
C'est l'expression la plus pure de l'identité du brain.
|
||||||
|
|
||||||
|
**Le KPI mesurable :** si NO HANDOFF est productif en < 2 minutes → Layer 0 est bon.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cas d'usage réels
|
||||||
|
|
||||||
|
### NO HANDOFF — le brain qui sait qui il est
|
||||||
|
Brainstorm architecture 7h du matin. Layer 0 seul.
|
||||||
|
Pas de bruit du sprint précédent. Pensée architecturale nette.
|
||||||
|
|
||||||
|
### SEMI — le chirurgien
|
||||||
|
Bug critique 22h. SuperOAuth. Layer 0 + position debug.
|
||||||
|
Contexte juste, sans friction. Fix en 30 secondes de boot.
|
||||||
|
|
||||||
|
### SEMI+ — lundi matin
|
||||||
|
TetaRdPG Sprint 4. 3 jours d'absence. Layer 0 + état sprint.
|
||||||
|
Pas besoin de handoff — l'état du projet suffit. Reprise en 2 minutes.
|
||||||
|
|
||||||
|
### FULL — continuation chirurgicale
|
||||||
|
Refacto coupée à 23h. Layer 0 + Layer 1 + workspace RAM.
|
||||||
|
Exactement là où on s'est arrêté. Pas de reconstruction.
|
||||||
|
|
||||||
|
### Gradient intelligent dans un sprint
|
||||||
|
```
|
||||||
|
Lundi matin → SEMI+ reprendre l'état
|
||||||
|
Lundi soir → FULL continuation directe
|
||||||
|
Mardi matin → SEMI+ nouveau jour
|
||||||
|
Mercredi bug → SEMI position debug uniquement
|
||||||
|
Vendredi close → FULL wrap complet
|
||||||
|
```
|
||||||
|
|
||||||
|
### Multi-agent
|
||||||
|
Layer 0 : identique pour tous (identité commune)
|
||||||
|
Layer 1 : partagé (état de sprint, API contracts)
|
||||||
|
Layer 2 : isolé par agent (workspace RAM propre)
|
||||||
|
→ Agents qui partagent l'identité et l'état, pas la mémoire de travail.
|
||||||
|
|
||||||
|
### Brain-as-a-Service
|
||||||
|
`brain new` installe Layer 0. Première session = NO HANDOFF.
|
||||||
|
Productif immédiatement parce que Layer 0 est solide.
|
||||||
|
**Layer 0 est le produit.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce qui manque (livrables)
|
||||||
|
|
||||||
|
- `profil/brain-constitution.md` — frozen layer formalisée (Layer 0 complet)
|
||||||
|
- `profil/handoff-matrix.md` — matrice session_type × scope → handoff_level
|
||||||
|
- `profil/session-continuity-spec.md` — spec complète de la chaîne
|
||||||
|
- Convention todo → encoder le handoff_level sur chaque entrée
|
||||||
|
- KPI validation : NO HANDOFF < 2 min → Layer 0 OK
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Relation aux ADRs existants
|
||||||
|
|
||||||
|
| ADR | Relation |
|
||||||
|
|-----|----------|
|
||||||
|
| 002-session-as-identity | Layer 0 = identité de session — ce ADR l'étend |
|
||||||
|
| 004-trois-couches | Layer 0/1/2 raffine les 3 couches kernel/instance/personnel |
|
||||||
|
| 005-zones-typees | Frozen layer = zone kernel protégée |
|
||||||
|
|
||||||
131
profil/decisions/010-brain-language-header-universel.md
Normal file
131
profil/decisions/010-brain-language-header-universel.md
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
---
|
||||||
|
name: adr-010-brain-language
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-010 — brain-language : header YAML universel pour tous les fichiers brain
|
||||||
|
|
||||||
|
> Date : 2026-03-15
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : session brain build-brain + coach + tech-lead
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Les fichiers brain sont chargés en entier pour en lire 10 lignes utiles. Le context-broker
|
||||||
|
ne peut pas décider du chargement sans ouvrir le fichier. À ~200+ fichiers répartis sur 6
|
||||||
|
satellites, le coût de chargement non-sélectif est rédhibitoire.
|
||||||
|
|
||||||
|
Analogie : matière grise sans synapses — les neurones existent mais ne communiquent pas.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Chaque fichier du système brain commence par un header YAML standardisé (`brain-language v1`).
|
||||||
|
Le context-broker scanne les headers uniquement → décision load en O(header) au lieu de O(fichier).
|
||||||
|
|
||||||
|
**Format header v1 :**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
brain:
|
||||||
|
version: 1
|
||||||
|
type: protocol # invariant | context | reference | personal | protocol | work
|
||||||
|
scope: kernel # kernel | satellite | instance | work
|
||||||
|
owner: orchestrator # autorité architecturale — valide les changements structurels
|
||||||
|
writer: scribe # droits de maintenance courante — peut patcher sur découverte
|
||||||
|
# owner ≠ writer : séparation autorité / maintenance (décidé sess-20260315-1105-brain)
|
||||||
|
lifecycle: permanent # session | sprint | stable | permanent
|
||||||
|
read: header # header | full | trigger
|
||||||
|
triggers: [sprint] # liste FERMÉE — pas de triggers libres
|
||||||
|
export: true # false = personnel, strippé à l'export brain-template
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
**Triggers valides (liste fermée) :**
|
||||||
|
`sprint` | `use-brain` | `build-brain` | `coach` | `audit` | `deploy` | `migration` | `on-demand`
|
||||||
|
|
||||||
|
**Format masquage selon type de fichier :**
|
||||||
|
- `.md` → YAML frontmatter natif (déjà utilisé dans les agents)
|
||||||
|
- Fichiers code → commentaire natif (`# brain:` / `// brain:`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Index externe centralisé (registre JSON) | Single point of failure, drift index/fichier inévitable |
|
||||||
|
| Nommage par convention de fichier | Trop limité — scope/triggers/lifecycle pas encodables dans un nom |
|
||||||
|
| Tags git | Invisible au contexte LLM, hors du flow de lecture |
|
||||||
|
| Pas de header (statu quo) | O(fichier) pour décider — coût bloquant à l'échelle |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Context-broker peut ignorer complètement les fichiers hors scope/triggers sans les ouvrir
|
||||||
|
- Indexage toolkit : `triggers: [typeorm]` → chargé uniquement quand pertinent
|
||||||
|
- BSI v2 conditionnel : si pilot validé → sessions tracées dans les headers (sans BRAIN-INDEX.md)
|
||||||
|
- Tier 2 daemon (brain-watch étendu) peut pré-calculer la source map au boot
|
||||||
|
- `export: false` permet le stripping automatique des fichiers personnels à l'export brain-template
|
||||||
|
- Tout fichier sans header = neurone sans synapse → détectable et corrigeable par agent-review
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Migration ~200 fichiers répartis sur 6 satellites — coût one-shot significatif
|
||||||
|
- Spec irréversible une fois propagée — pilot obligatoire avant migration complète
|
||||||
|
- Tout nouveau fichier DOIT avoir un header — overhead à l'écriture
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Plan de migration (non négociable)
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Spec ratifiée humain (ce document) ✅
|
||||||
|
2. Pilot : 10 fichiers représentatifs (2-3 par type) — ajustements spec si nécessaire
|
||||||
|
3. Validation pilot → go/no-go migration complète
|
||||||
|
4. Migration par phase (rollback possible à chaque étape) :
|
||||||
|
Phase 1 — agents/ → plus lus, gain immédiat
|
||||||
|
Phase 2 — profil/ → invariants + références
|
||||||
|
Phase 3 — toolkit/ → indexage patterns
|
||||||
|
Phase 4 — todo/ → intentions
|
||||||
|
Phase 5 — progression/ → journal + skills + milestones
|
||||||
|
Phase 6 — projets/ → contrats projets
|
||||||
|
5. Patch scribes — header obligatoire dans tout nouveau fichier
|
||||||
|
6. agent-review mis à jour — header = critère de review
|
||||||
|
```
|
||||||
|
|
||||||
|
**Règle pilot :** les champs nécessaires après 10 fichiers réels seront différents de ceux
|
||||||
|
imaginés aujourd'hui. Ne pas migrer 200 fichiers avant le pilot.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Extension conditionnelle — BSI v2 + Tier 2 daemon
|
||||||
|
|
||||||
|
> Condition : brain-language pilot validé d'abord
|
||||||
|
|
||||||
|
Si pilot validé, chaque fichier actif en session déclare sa participation dans son header :
|
||||||
|
```yaml
|
||||||
|
brain:
|
||||||
|
session: sess-YYYYMMDD-HHMM-slug
|
||||||
|
instance: prod@desktop
|
||||||
|
scope: write
|
||||||
|
opened: 2026-03-15T14:00
|
||||||
|
```
|
||||||
|
|
||||||
|
brain-watch grep `session:` → état système sans parser BRAIN-INDEX.md.
|
||||||
|
BRAIN-INDEX.md devient un cache optionnel, régénérable depuis les headers.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers concernés : tous les satellites brain (6 repos)
|
||||||
|
- Sessions où la décision a émergé : sess-20260315-1105-brain (brainstorm coach + tech-lead)
|
||||||
|
- Agents à créer : `spec-scribe`, `migration-scribe`
|
||||||
|
- Agents à patcher post-migration : scribe, todo-scribe, toolkit-scribe, orchestrator-scribe,
|
||||||
|
coach-scribe, capital-scribe, config-scribe, git-analyst, spec-scribe, migration-scribe
|
||||||
77
profil/decisions/011-north-star-autonomie-brain.md
Normal file
77
profil/decisions/011-north-star-autonomie-brain.md
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
name: ADR-011
|
||||||
|
type: decision
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-011 — North Star : autonomie du brain indépendante de Claude
|
||||||
|
|
||||||
|
> Date : 2026-03-15
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm coach sess-20260315-1942-memory-coach
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Brain V1.0.0 a été déclaré stable le 2026-03-15 avec : kernel lockée, BSI, multi-machine, constitution.
|
||||||
|
Un fondement manquait dans la déclaration : la direction vers laquelle le brain est conçu pour aller.
|
||||||
|
|
||||||
|
V1 est 100% Claude-dépendant. Sans une session Claude active, le brain est un dossier markdown bien organisé.
|
||||||
|
Cette dépendance n'est pas un bug — elle est le point de départ. Mais elle ne peut pas être le point d'arrivée.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
**Le brain est conçu pour réduire sa dépendance à Claude au fil du temps.**
|
||||||
|
|
||||||
|
Claude est le moteur de démarrage. L'autonomie est la direction.
|
||||||
|
Tout ce qui est réversible et sans effet externe doit pouvoir tourner sans intervention humaine ni session Claude.
|
||||||
|
|
||||||
|
Deux invariants découlent de cette décision :
|
||||||
|
|
||||||
|
```
|
||||||
|
INVARIANT AUTONOMIE :
|
||||||
|
Réversible + sans effet externe → le brain exécute seul
|
||||||
|
Irréversible OU affecte l'extérieur → escalade humaine obligatoire
|
||||||
|
|
||||||
|
INVARIANT AUTO-AMÉLIORATION :
|
||||||
|
Le brain ne s'endommage jamais lui-même
|
||||||
|
Toute action autonome le laisse dans un état meilleur ou égal
|
||||||
|
Un agent autonome ne peut pas : supprimer une source, modifier un invariant,
|
||||||
|
écraser un contexte sans backup
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Rester V1 sans north star déclaré | V2 risque de dériver vers "plus de features Claude" sans direction |
|
||||||
|
| North star en vision seulement (workspace/) | Trop faible — pas un invariant, peut être ignoré |
|
||||||
|
| Attendre V2 pour le déclarer | Le fondement manquant dans V1 oriente mal toutes les décisions intermédiaires |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- V2 a une mission claire : décroissance de la dépendance
|
||||||
|
- BE-1 (SQLite + cron) devient fondation, pas feature
|
||||||
|
- Chaque décision d'architecture peut être évaluée : "est-ce que ça rapproche de l'autonomie ?"
|
||||||
|
- Les agents autonomes ont un cadre légal dans la constitution
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Ajouter une section 9 à brain-constitution.md = procédure formelle (ADR + commit kernel)
|
||||||
|
- L'autonomie complète est un horizon lointain — le déclarer crée une attente à gérer
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- `wiki/concepts.md` — North Star documenté
|
||||||
|
- `workspace/brain-engine/vision.md` — North Star en tête de vision
|
||||||
|
- `brain-constitution.md` — section 9 à créer (patch v1.1.0)
|
||||||
|
- Session source : sess-20260315-1942-memory-coach
|
||||||
135
profil/decisions/012-context-model-l3a-graduation.md
Normal file
135
profil/decisions/012-context-model-l3a-graduation.md
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
---
|
||||||
|
name: ADR-012
|
||||||
|
type: decision
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-012 — Modèle de contexte : L3a (mémoire privée agent) + protocole de graduation
|
||||||
|
|
||||||
|
> Date : 2026-03-15
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : session sess-20260315-2031-kernel-audit — brainstorm coach + tech-lead
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Le brain dispose de :
|
||||||
|
- L0 : kernel (invariant, permanent)
|
||||||
|
- L1 : session state (TTL session)
|
||||||
|
- L2 : agent workspace (TTL sprint)
|
||||||
|
- toolkit/ (patterns validés, partagés) — ce qu'on appelait implicitement L3
|
||||||
|
|
||||||
|
Ce qui manquait : une couche entre le travail d'un agent et sa promotion dans le toolkit partagé.
|
||||||
|
Sans elle, la graduation est manuelle, tardive, ou jamais faite.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Insight fondateur
|
||||||
|
|
||||||
|
**Le toolkit est L3b. Il existait déjà. Ce qui manquait : L3a.**
|
||||||
|
|
||||||
|
```
|
||||||
|
L3a agent/memory/<projet>/ ← accumulation privée, non encore validée
|
||||||
|
L3b toolkit/<domaine>/ ← patterns promus, partagés, validés en prod
|
||||||
|
L0 agents/<agent>.md ← graduation maximale — spec enrichie
|
||||||
|
```
|
||||||
|
|
||||||
|
L3a est la couche d'accumulation privée de l'agent — ce qu'il observe, tente, apprend sur un projet spécifique — avant que ce soit assez solide pour être partagé.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Introduire L3a comme couche officielle du modèle de contexte.
|
||||||
|
|
||||||
|
```
|
||||||
|
Structure :
|
||||||
|
brain/agent-memory/<agent>/<projet>/
|
||||||
|
observations.md ← ce que l'agent a observé (patterns tentés, résultats)
|
||||||
|
validated.md ← patterns validés N fois sur ce projet
|
||||||
|
kpi.yml ← KPIs par stack : { stack, validations, kpi_score, graduated }
|
||||||
|
|
||||||
|
Graduation automatique :
|
||||||
|
kpi_score stable + validations ≥ N → signal toolkit-scribe → promotion L3b
|
||||||
|
L3b consensus inter-projets → signal scribe → enrichissement L0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Protocole de graduation
|
||||||
|
|
||||||
|
```
|
||||||
|
Sprint close :
|
||||||
|
agent observe pattern → écrit dans L3a/<agent>/<projet>/observations.md
|
||||||
|
|
||||||
|
Pattern validé en prod :
|
||||||
|
N = 3 validations minimum (configurable par stack)
|
||||||
|
metabolism-scribe incrémente kpi.yml
|
||||||
|
|
||||||
|
Seuil atteint :
|
||||||
|
trigger → toolkit-scribe → L3b (toolkit/<domaine>/)
|
||||||
|
agent gagne flag variance sur cette stack
|
||||||
|
tech-lead gate optionnel sur cette stack pour cet agent
|
||||||
|
|
||||||
|
Variance débloquée :
|
||||||
|
l'agent peut proposer des variantes de pattern (pas seulement "le" pattern)
|
||||||
|
"j'ai build ça N fois — voici 3 approches selon le contexte"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Différence L3a vs L3b
|
||||||
|
|
||||||
|
| | L3a | L3b |
|
||||||
|
|--|-----|-----|
|
||||||
|
| Scope | Agent × projet | Brain global |
|
||||||
|
| Ownership | L'agent | toolkit-scribe |
|
||||||
|
| Accès | Privé (agent en session) | Partagé (tous agents) |
|
||||||
|
| Contenu | Observations + tentatives | Patterns validés en prod |
|
||||||
|
| TTL | Permanent (mémoire accumulée) | Permanent (validé) |
|
||||||
|
| Graduation | → L3b sur seuil KPI | → L0 sur consensus |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lien avec SQLite (BE-1)
|
||||||
|
|
||||||
|
SQLite est le medium naturel pour tracker L3a :
|
||||||
|
```sql
|
||||||
|
CREATE TABLE agent_memory (
|
||||||
|
agent TEXT,
|
||||||
|
projet TEXT,
|
||||||
|
stack TEXT,
|
||||||
|
pattern_id TEXT,
|
||||||
|
validations INTEGER,
|
||||||
|
kpi_score REAL,
|
||||||
|
graduated BOOLEAN,
|
||||||
|
created_at TEXT
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
Requête graduation : `SELECT * FROM agent_memory WHERE validations >= 3 AND graduated = 0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Le tech-lead se décharge progressivement par stack × agent graduée
|
||||||
|
- Les agents accumulent une expertise réelle mesurable, pas déclarative
|
||||||
|
- La variance est earned, pas donnée — l'agent propose des alternatives parce qu'il les a vécues
|
||||||
|
- BE-1 (SQLite) devient la fondation naturelle de L3a tracking
|
||||||
|
|
||||||
|
**Négatives / trade-offs :**
|
||||||
|
- brain/agent-memory/ est un nouveau répertoire satellite à gérer
|
||||||
|
- La graduation automatique requiert metabolism-scribe enrichi
|
||||||
|
- Risque : L3a devient une décharge si rien n'est jamais gradué → TTL ou nettoyage requis
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- ADR-011 : North Star autonomie — L3a est une brique vers l'autonomie agent
|
||||||
|
- ADR-003 : Scribe pattern — graduation via toolkit-scribe (non-contamination)
|
||||||
|
- `todo/brain.md` : BE-1 SQLite — substrate de L3a tracking
|
||||||
|
- Session source : sess-20260315-2031-kernel-audit
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
---
|
||||||
|
name: adr-013-guardrail-osint
|
||||||
|
type: reference
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-013 — Garde-fou HARDCODÉ : mémoire fine + capacités réseau = reconnaissance passive
|
||||||
|
|
||||||
|
> Date : 2026-03-16
|
||||||
|
> Statut : proposé — en attente session dédiée + commit kernel
|
||||||
|
> Décidé par : session brain dotfiles-violet-chaton (insight utilisateur)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Pendant la session du 2026-03-16, le pattern suivant s'est produit sans que le coach réagisse :
|
||||||
|
|
||||||
|
1. Lecture de `infrastructure/vps.md` → IP, ports, containers, pattern SSH chargés en contexte
|
||||||
|
2. Demande de scan réseau → 12 WebFetch en parallèle sur les sous-domaines
|
||||||
|
3. Résultat : cartographie complète de l'infrastructure en une session
|
||||||
|
|
||||||
|
L'utilisateur a soulevé que ce pattern — **mémoire fine d'infrastructure + capacités réseau** — est fonctionnellement identique à un workflow de reconnaissance OSINT passive. Entre de mauvaises mains (accès au brain d'une victime + modèle avec WebFetch), c'est un outil de ciblage.
|
||||||
|
|
||||||
|
Le problème n'est pas l'usage légitime (l'utilisateur qui audite sa propre infra). Le problème est que **le garde-fou n'existait nulle part** — ni dans `secrets-guardian`, ni dans `brain-constitution`. Le modèle a exécuté sans friction.
|
||||||
|
|
||||||
|
**Insight critique :** les garde-fous comportementaux ne suffisent pas. Un modèle différent, une version différente, un prompt différent — et le comportement change. Les règles doivent être dans Layer 0 pour être **modèle-agnostiques**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Ajouter à `brain-constitution.md` (Layer 0) une règle `[AGENT_RULE]` hardcodée qui impose une interruption explicite avant toute utilisation de capacités réseau lorsque des données d'infrastructure sensibles sont en contexte.
|
||||||
|
|
||||||
|
Cette règle doit être dans Layer 0 car :
|
||||||
|
- Layer 0 est identique pour tous les agents
|
||||||
|
- Layer 0 est lu avant toute action
|
||||||
|
- Layer 0 est immutable à runtime — aucun prompt ne peut le surcharger
|
||||||
|
- Un modèle différent (Claude 4, Claude 5, autre) bootant ce brain appliquera la règle
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Règle proposée pour brain-constitution.md (Section 2 ou nouvelle Section 10)
|
||||||
|
|
||||||
|
```
|
||||||
|
[AGENT_RULE] INVARIANT RECONNAISSANCE PASSIVE :
|
||||||
|
Données d'infra sensibles en contexte (IP, ports, SSH, containers, credentials)
|
||||||
|
AND capacité réseau sollicitée (WebFetch, URL, scan)
|
||||||
|
→ INTERRUPTION OBLIGATOIRE avant toute action réseau.
|
||||||
|
Format : "⚠️ RECONNAISSANCE PASSIVE — confirmation requise [contexte / cible]"
|
||||||
|
→ Procéder UNIQUEMENT sur confirmation explicite de l'humain.
|
||||||
|
Ce garde-fou s'applique peu importe le modèle, le contexte, l'urgence.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Règle dans `secrets-guardian` seulement | Patchée (ADR-013 patch-1), mais non-hardcodée — dépend du chargement de l'agent |
|
||||||
|
| Règle comportementale (coaching) | Modèle-dépendant — ne résiste pas à un changement de version ou de prompt |
|
||||||
|
| Ne rien faire | Inacceptable — le pattern a été démontré fonctionnel le 2026-03-16 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Garde-fou modèle-agnostique — survit aux upgrades de Claude
|
||||||
|
- Toute session brain qui charge de l'infra + sollicite réseau = friction explicite
|
||||||
|
- Formalise l'insight "mémoire fine + OSINT = dangereux" dans le contrat du brain
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Friction légère sur les scans légitimes (audit proprio de son infra)
|
||||||
|
- Requiert une confirmation manuelle — acceptable car rare et critique
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Actions requises avant activation
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Session dédiée hors-projet (règle constitution — Section 8)
|
||||||
|
2. Relecture par coach
|
||||||
|
3. Commit kernel : "kernel: amend constitution v1.2.0 — ADR-013 reconnaissance passive"
|
||||||
|
4. brain-compose.yml bumped
|
||||||
|
5. Propagation brain-template
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers concernés : `brain-constitution.md`, `agents/secrets-guardian.md`, `infrastructure/vps.md`
|
||||||
|
- Sessions : session dotfiles-violet-chaton 2026-03-16 (scan VPS + insight utilisateur)
|
||||||
|
- Patch intermédiaire actif : `secrets-guardian.md` — Pattern OSINT passive (patch 2026-03-16)
|
||||||
176
profil/decisions/014-zone-aware-bsi-kerneluser.md
Normal file
176
profil/decisions/014-zone-aware-bsi-kerneluser.md
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
---
|
||||||
|
name: adr-014-zone-aware-bsi-kerneluser
|
||||||
|
type: reference
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-014 — Zone-aware BSI claims + modèle kerneluser
|
||||||
|
|
||||||
|
> Date : 2026-03-16
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : session product-strategist sess-20260316-2115
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Le schéma BSI (v1.4) déclare `scope` (ex: `agents/`, `todo/brain.md`) mais ne distingue pas
|
||||||
|
la sensibilité de la zone cible. Un satellite `brain-write` sur `agents/` (kernel) et un satellite
|
||||||
|
`brain-write` sur `todo/` (instance) sont traités identiquement — même claim, mêmes règles.
|
||||||
|
|
||||||
|
Problème : le brain a déjà une hiérarchie de zones documentée dans `product-vision.md`
|
||||||
|
(zones 0-3) et `architecture.md` (kernel / instance / personnel). Cette hiérarchie
|
||||||
|
n'est pas connectée au protocole BSI. Résultat : la protection du kernel est implicite
|
||||||
|
et non-auditée.
|
||||||
|
|
||||||
|
Question soulevée : si le brain peut s'auto-éditer (satellites brain-write), qui a le droit
|
||||||
|
de toucher le kernel ? Tension entre "maître à bord" et "pas brider le système".
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
**1. Ajouter `zone` comme champ calculé (inféré) dans le claim BSI.**
|
||||||
|
|
||||||
|
`zone` n'est pas écrit manuellement — il est inféré du `scope` au moment de l'ouverture du claim.
|
||||||
|
Cela évite toute friction sur l'usage courant tout en rendant la sensibilité auditable.
|
||||||
|
|
||||||
|
**2. `kerneluser` est un flag implicite owner dans `brain-compose.yml`, pas un champ claim.**
|
||||||
|
|
||||||
|
Le propriétaire du brain est toujours kerneluser. Le flag ne restreint pas l'owner —
|
||||||
|
il protège contre les futurs utilisateurs externes (SaaS, multi-user) qui ne peuvent pas
|
||||||
|
déclencher de satellite kernel-write sans délégation explicite.
|
||||||
|
|
||||||
|
**Règle fondamentale :**
|
||||||
|
|
||||||
|
```
|
||||||
|
Le brain peut s'auto-éditer librement — sous délégation owner.
|
||||||
|
Un satellite zone:kernel est autorisé si lancé par le propriétaire.
|
||||||
|
Un satellite zone:kernel lancé par un user externe = BLOCKED, autorisation requise.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mapping zone → scope
|
||||||
|
|
||||||
|
```
|
||||||
|
zone: kernel
|
||||||
|
agents/ → agents kernel (protégés, lifecycle permanent)
|
||||||
|
profil/ → specs, invariants, ADR
|
||||||
|
KERNEL.md → loi des zones
|
||||||
|
brain-constitution.md → philosophie, invariants Layer 0
|
||||||
|
brain-compose.yml → feature flags, tiers
|
||||||
|
scripts/ → rituels, BSI, sync
|
||||||
|
|
||||||
|
zone: project
|
||||||
|
todo/ → intentions, sessions à planifier
|
||||||
|
projets/ → stack, état, contraintes projets
|
||||||
|
workspace/ → sessions actives
|
||||||
|
handoffs/ → contexte inter-sessions
|
||||||
|
infrastructure/ → configs infra (sensible mais pas kernel)
|
||||||
|
<repo-projet>/ → SuperOAuth, OriginsDigital, etc.
|
||||||
|
|
||||||
|
zone: personal
|
||||||
|
profil/capital.md → ressources, finances
|
||||||
|
profil/objectifs.md → buts personnels
|
||||||
|
progression/ → journal, skills, milestones
|
||||||
|
MYSECRETS → credentials absolus
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Champ `zone` dans le claim (inféré, non écrit)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Champ calculé — non écrit dans le claim
|
||||||
|
# Inféré automatiquement depuis `scope` selon le mapping ci-dessus
|
||||||
|
# zone: kernel | project | personal
|
||||||
|
```
|
||||||
|
|
||||||
|
| zone | Règle de close | Audit requis |
|
||||||
|
|------|---------------|-------------|
|
||||||
|
| `kernel` | Tier 3 Orchestrated si domain/pilote, sinon normal | Oui — git blame BRAIN-INDEX.md |
|
||||||
|
| `project` | Selon close_tier standard | Non |
|
||||||
|
| `personal` | Tier 2 Validated minimum — jamais sans confirmation | Oui — jamais auto |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modèle kerneluser
|
||||||
|
|
||||||
|
```
|
||||||
|
kerneluser = propriétaire du brain = celui qui a forké le kernel
|
||||||
|
|
||||||
|
Dans brain-compose.yml :
|
||||||
|
kerneluser: true → ce brain appartient à son owner (défaut : true sur tout brain perso)
|
||||||
|
kerneluser: false → instance invitée, user externe (futur SaaS)
|
||||||
|
|
||||||
|
Règles :
|
||||||
|
kerneluser: true → peut lancer des satellites zone:kernel sans restriction
|
||||||
|
kerneluser: false → satellite zone:kernel → BLOCKED, délégation owner requise
|
||||||
|
```
|
||||||
|
|
||||||
|
**Pourquoi `kerneluser: true` est le défaut :**
|
||||||
|
Chaque brain forké est souverain. L'owner est toujours kerneluser sur son propre brain.
|
||||||
|
La restriction ne s'active que dans le contexte multi-user futur.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hiérarchie satellite — kernel vs project
|
||||||
|
|
||||||
|
```
|
||||||
|
Pilote (owner, kerneluser: true)
|
||||||
|
├── Satellite zone:kernel → modifie agents/, profil/, scripts/
|
||||||
|
│ Autorisé : owner délègue explicitement (launch = délégation)
|
||||||
|
│ Interdit : user externe sans délégation
|
||||||
|
│
|
||||||
|
└── Satellite zone:project → modifie todo/, projets/, workspace/
|
||||||
|
Autorisé : tout utilisateur du brain
|
||||||
|
Interdit : zone:personal sans confirmation explicite
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| `zone` écrit manuellement dans le claim | Friction inutile — inférable mécaniquement depuis `scope` |
|
||||||
|
| Token BSI séparé (BRAIN_TOKEN_KERNEL) | Redondant avec le modèle de tokens existant dans product-vision — ajouter de la complexité sans valeur |
|
||||||
|
| Blocage total des satellites zone:kernel | Bride le système — contredit la philosophie "brain peut s'auto-éditer" |
|
||||||
|
| kerneluser = champ claim | Trop verbeux, trop répétitif — c'est une propriété du brain, pas d'une session |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Le brain peut s'auto-éditer (satellites kernel) librement sous délégation owner — zéro friction sur usage solo
|
||||||
|
- La sensibilité des zones est auditable via `zone` inféré dans les claims
|
||||||
|
- Protection forward-compatible pour le multi-user SaaS futur — sans changer l'usage actuel
|
||||||
|
- Cohérence avec zones 0-3 (`product-vision.md`) et 3 couches (`architecture.md`)
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- `zone` inféré = logique de mapping à maintenir quand le brain évolue structurellement
|
||||||
|
- `kerneluser: false` n'est pas encore implémenté — c'est une spec forward, pas une feature active
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Actions requises
|
||||||
|
|
||||||
|
```
|
||||||
|
1. [x] ADR-014 rédigé (cette session)
|
||||||
|
2. [x] bsi-schema.md v1.5 — zone documenté comme champ calculé
|
||||||
|
3. [ ] brain-compose.yml — ajouter champ kerneluser: true (session dédiée kernel)
|
||||||
|
4. [ ] satellite-boot.md — ajouter vérification zone au boot satellite (BSI-v3-6)
|
||||||
|
5. [ ] KERNEL.md — documenter la règle de délégation zone:kernel
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- `agents/bsi-schema.md` — schema claim
|
||||||
|
- `agents/satellite-boot.md` — protocole satellite
|
||||||
|
- `profil/product-vision.md` — zones 0-3, tokens, modèle distribution
|
||||||
|
- `profil/architecture.md` — 3 couches kernel/instance/personnel
|
||||||
|
- `profil/decisions/001-bsi-locking-optimiste.md` — origine BSI
|
||||||
126
profil/decisions/015-architecture-deux-niveaux-agents-L1-L2.md
Normal file
126
profil/decisions/015-architecture-deux-niveaux-agents-L1-L2.md
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
name: 015-architecture-deux-niveaux-agents-L1-L2
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
status: accepted
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-015 — Architecture deux niveaux agents : local (L2) vs git-triggered relay (L1)
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : session brain 2026-03-17
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Aujourd'hui, tous les agents opèrent en session locale (Level 2) mais le protocole BSI les traite uniformément comme Level 1 : claim créé, commité, pushé avant de travailler. Cette friction est acceptable pour les sessions humaines — elle ancre la session dans le kernel et rend le contexte visible au VPS et aux sessions parallèles. Elle est en revanche un blocage structurel pour les agents automatiques (ambient daemon, agent-review inline, debug ephemere) qui doivent démarrer sans friction.
|
||||||
|
|
||||||
|
Deux insights ont émergé lors de la session 2026-03-17 :
|
||||||
|
|
||||||
|
1. **Le BSI crée une friction qui bloque l'automatisation locale.** Un agent local qui doit créer un claim, commiter et pusher avant de travailler est un agent qui ne peut pas opérer à la vitesse d'une session.
|
||||||
|
2. **Git est le bus de coordination naturel.** La transition entre travail local (éphémère) et travail persisté (kernel) passe naturellement par un commit. Git est déjà le mécanisme de versionning, de relay, et de déclencheur.
|
||||||
|
|
||||||
|
Note orthogonale validée le même jour : la séparation pay-gate (fonctionnalités monétisées) vs BSI opérationnel (plomberie) est une décision distincte — les endpoints de revenu restent gatés quelle que soit la provenance de la requête.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Formaliser une architecture à deux niveaux d'exécution agents, avec des protocoles et des infrastructures distincts.
|
||||||
|
|
||||||
|
### Level 1 — Git-triggered relay (asynchrone)
|
||||||
|
|
||||||
|
- **Trigger :** webhook git (push, PR, commit kernel)
|
||||||
|
- **Protocole BSI :** complet — claim créé, commité, pushé
|
||||||
|
- **Artefacts durables :** `decisions/`, `claims/`, `toolkit/`, `audits/`
|
||||||
|
- **Auth + tier enforcement :** complet, aucune exception
|
||||||
|
- **Use cases :** agent-review sur PR, deploy agent sur push main, kernel-auditor sur commit kernel
|
||||||
|
- **Infrastructure requise :** endpoint `POST /webhook` dans brain-engine — **NON CONSTRUIT** (vision future)
|
||||||
|
|
||||||
|
### Level 2 — Local fast (synchrone, frictionless)
|
||||||
|
|
||||||
|
- **Trigger :** session courante, appel direct `localhost:7700`
|
||||||
|
- **Protocole BSI :** aucun. Pas de claim. Pas de commit. Pas de push. Log éphémère local optionnel.
|
||||||
|
- **localhost trust :** endpoints BSI opérationnels (`GET /boot`, `/agents`, `/teams`, `/workflows`, `POST /workflows/create`) — aucune auth requise, aucun tier gate
|
||||||
|
- **Pay endpoints :** maintenus gatés même en localhost — aucune exception
|
||||||
|
- **Use cases :** agent-review inline, debug, bact-scribe, workflow-auditor local, ambient daemon notify
|
||||||
|
- **Infrastructure requise :** helper `_is_localhost()` dans brain-engine — **À CONSTRUIRE**
|
||||||
|
|
||||||
|
### Règle de promotion L2 → L1
|
||||||
|
|
||||||
|
Un Level 2 qui veut persister son travail dans le kernel fait un commit. Ce commit déclenche le relay Level 1. Git est le seul mécanisme de transition L2 → L1. Il n'y a pas d'autre voie.
|
||||||
|
|
||||||
|
### Endpoints jamais bypassed même en Level 2
|
||||||
|
|
||||||
|
| Endpoint | Feature | Raison |
|
||||||
|
|---|---|---|
|
||||||
|
| `GET /visualize` | pro | génère du revenu |
|
||||||
|
| `GET /infra` | pro | génère du revenu |
|
||||||
|
| `PUT /brain/{path}` | pro | génère du revenu |
|
||||||
|
|
||||||
|
Ces endpoints sont pay-gated sans exception de provenance.
|
||||||
|
|
||||||
|
### Conventions de session
|
||||||
|
|
||||||
|
- **Sessions humaines :** Level 1 par convention. Le claim anchor la session dans le kernel, la rend visible aux sessions parallèles et au VPS.
|
||||||
|
- **Agents locaux automatiques :** Level 2 par défaut. Le boot claim BSI est optionnel — aucune friction imposée.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| BSI allégé (claim sans push) | Ne résout pas la friction pour les daemons — le commit reste bloquant. |
|
||||||
|
| Token court-circuit local (token spécial localhost) | Introduit une surface d'auth supplémentaire à maintenir. La confiance localhost sans token est plus simple et plus robuste. |
|
||||||
|
| Endpoint /local-boot sans auth global | Trop large — expose des endpoints qui devraient rester gatés (pay features). La granularité par endpoint est préférable. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vision webhook future (à ne pas perdre)
|
||||||
|
|
||||||
|
```
|
||||||
|
git push
|
||||||
|
→ Gitea webhook → POST brain-engine/webhook
|
||||||
|
→ brain-engine parse le payload (branch, files modifiés, author)
|
||||||
|
→ route vers l'agent relay approprié selon les fichiers touchés :
|
||||||
|
agents/*.md modifié → kernel-auditor
|
||||||
|
brain-ui/** → agent-review frontend
|
||||||
|
brain-engine/** → agent-review backend
|
||||||
|
claims/*.yml fermé → workflow-auditor
|
||||||
|
→ agent s'exécute avec contexte complet (diff, commit message, author)
|
||||||
|
→ résultat commité dans audits/ ou decisions/
|
||||||
|
```
|
||||||
|
|
||||||
|
Ne pas construire avant un use case concret. L'infrastructure webhook L1 est une vision, pas un backlog immédiat.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Les agents locaux automatiques peuvent démarrer sans friction BSI
|
||||||
|
- La distinction est claire : local = éphémère, git = durable
|
||||||
|
- Git reste la source de vérité — aucune donnée persistée hors kernel sans commit
|
||||||
|
- Les sessions humaines ne changent pas de comportement (Level 1 par convention)
|
||||||
|
- Le protocole BSI existant reste intact pour les sessions qui en ont besoin
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Une session Level 2 est invisible au VPS et aux autres sessions tant qu'elle ne commit pas
|
||||||
|
- Le helper `_is_localhost()` doit être implémenté dans brain-engine avant de pouvoir bénéficier des endpoints frictionless
|
||||||
|
- La ligne pay-gate / BSI-opérationnel doit être maintenue explicitement dans le code — risque de dérive si non documentée
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers concernés :
|
||||||
|
- `brain-engine/server.py` — tier enforcement, endpoints à séparer par niveau
|
||||||
|
- `CLAUDE.md` — boot claim BSI, à qualifier "optionnel pour les sessions Level 2"
|
||||||
|
- `brain-constitution.md` — Layer 0, invariants de session
|
||||||
|
- `brain-compose.yml` — modes session, permissions BSI par mode
|
||||||
|
- Sessions où la décision a émergé :
|
||||||
|
- Session 2026-03-17 — friction BSI agents locaux + git comme bus de coordination
|
||||||
|
- ADR-014 — zone-aware BSI, kerneluser (contexte parent)
|
||||||
96
profil/decisions/016-bsi-canal-push-garanti-now-md.md
Normal file
96
profil/decisions/016-bsi-canal-push-garanti-now-md.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
---
|
||||||
|
name: 016-bsi-canal-push-garanti-now-md
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-016 — BSI : canal de push garanti via brain/now.md
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm session brain
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Le BSI (Brain Session Index) a été conçu comme outil de synchronisation de sessions parallèles via des claims git-committés. À l'usage, plusieurs problèmes ont émergé :
|
||||||
|
|
||||||
|
1. **Jamais vraiment mandatory** — des sessions entières tournaient sans claim, sans que personne s'en rende compte
|
||||||
|
2. **Temporal inference bug** — les timestamps des claims amenaient Claude à inférer l'heure de la journée et suggérer d'arrêter de travailler, fragmentant la journée en sessions multiples inutiles
|
||||||
|
3. **Pull probabiliste, pas push garanti** — après migration vers MCP, `brain_boot()` trouve le contexte via RAG sémantique, mais seulement si la query matche. Un claim important peut passer invisible
|
||||||
|
4. **Git = mauvais outil pour l'async** — un commit est une opération lourde et synchrone. Pour de l'état async temps réel, git est le mauvais primitif
|
||||||
|
|
||||||
|
**Ce que le BSI faisait vraiment bien**, malgré tout : permettre à Claude d'absorber l'état courant sans que l'utilisateur ait à réexpliquer "où on en était". C'était un canal de push context async.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Le canal de push garanti est assuré par **`brain/now.md`**, un fichier unique écrit par Claude en fin de session via `brain_write()`, lu en **slot prioritaire** dans `brain_boot()` — avant le RAG, lecture directe, toujours présent.
|
||||||
|
|
||||||
|
**Migration BSI → MCP :**
|
||||||
|
|
||||||
|
| BSI claim type | Remplacé par |
|
||||||
|
|----------------|-------------|
|
||||||
|
| Sprint actif | `brain_workflows()` |
|
||||||
|
| Décision prise | `brain_decisions()` + ADRs formels |
|
||||||
|
| Focus du moment | `brain_focus()` |
|
||||||
|
| Contexte général | `brain_boot()` RAG |
|
||||||
|
| État live session | `brain/now.md` (nouveau) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contenu de brain/now.md
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Now — <date>
|
||||||
|
|
||||||
|
## Étape courante
|
||||||
|
<sprint + step + ce qui était en cours>
|
||||||
|
|
||||||
|
## Services actifs (connus)
|
||||||
|
<ports, pm2, ce qui tournait>
|
||||||
|
|
||||||
|
## Prochain action immédiate
|
||||||
|
<une ligne, la prochaine chose à faire>
|
||||||
|
|
||||||
|
## Contexte implicite
|
||||||
|
<variables importantes qui ne sont pas dans focus.md>
|
||||||
|
```
|
||||||
|
|
||||||
|
Écrit par Claude en fin de session. Overwrite systématique (`current`). Non archivé — l'historique est dans git.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Session snapshot stocké | Stale avec le temps — invalide après quelques jours sans session |
|
||||||
|
| Continuer BSI git | Git = sync lourd, pas adapté à l'async multimodal |
|
||||||
|
| RAG seul (brain_boot actuel) | Pull probabiliste — un push important peut ne pas remonter |
|
||||||
|
| brain_state() auto-généré | Dérive l'environnement mais pas l'intention ni l'étape courante |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Push garanti : Claude lit `now.md` à chaque boot, sans exception
|
||||||
|
- Zéro temporal inference — now.md ne contient pas de timestamp d'activité
|
||||||
|
- Léger : un seul fichier, overwrite systématique
|
||||||
|
- Compatible avec le modèle multimodal — toutes les sessions lisent la même source
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Dépend de Claude pour l'écriture — si la session se termine abruptement, now.md n'est pas mis à jour
|
||||||
|
- Contenu subjectif (ce que Claude "pensait" de l'état) — pas dérivé du système réel (c'est brain_state() qui couvre ça)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers concernés : `brain-engine/mcp_server.py` (brain_boot + brain_write), `brain/now.md` (à créer)
|
||||||
|
- ADR-015 : architecture deux niveaux L1/L2
|
||||||
|
- ADR-017 : brain_state() environnement dérivé Layer 2
|
||||||
|
- Sessions où la décision a émergé : session brain 2026-03-17 — modèle d'utilisation brain
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
---
|
||||||
|
name: 017-brain-state-layer2-environnement-derive
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-017 — brain_state() : environnement fondamental dérivé, Layer 2
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm session brain
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
À chaque recontextualisation après compactage, Claude redemande des informations fondamentales sur l'environnement de l'utilisateur : quels services tournent, quels ports, quelle machine, quel état infra. Ces "variables implicites" ne sont ni dans focus.md (direction) ni dans les ADRs (décisions) ni dans now.md (étape courante).
|
||||||
|
|
||||||
|
Un snapshot stocké ne résout pas le problème — il devient stale avec le temps. Si brain-mcp est fixé 3 jours après qu'un snapshot a capturé "brain-mcp 401 en cours", le snapshot est désormais incorrect et nuisible.
|
||||||
|
|
||||||
|
La solution : **dériver l'état depuis les sources vivantes à chaque appel**, jamais stocker.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
`brain_state()` est un outil MCP qui **dérive** l'environnement fondamental à la demande depuis des sources stables :
|
||||||
|
|
||||||
|
- `pm2 jlist` → services actifs (live)
|
||||||
|
- `git log -1 --oneline` → version brain courante
|
||||||
|
- Variables d'environnement connues → ports configurés
|
||||||
|
- Retourne un bloc markdown structuré, jamais mis en cache
|
||||||
|
|
||||||
|
**Layer 2 uniquement** — gate `_is_localhost()` sur l'endpoint `/state` de brain-engine. L'inventaire de l'infrastructure ne sort pas du périmètre local.
|
||||||
|
|
||||||
|
**Appelé en premier dans `brain_boot()`**, avant les queries RAG — l'environnement frame le reste du contexte.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contenu retourné
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Environnement fondamental
|
||||||
|
|
||||||
|
**Machine** : <hostname>
|
||||||
|
**Brain version** : <git log -1 --oneline>
|
||||||
|
|
||||||
|
**Services (pm2)**
|
||||||
|
| Nom | Status | Port |
|
||||||
|
|-----|--------|------|
|
||||||
|
| brain-engine | online | 7700 |
|
||||||
|
| brain-mcp | online | 7701 |
|
||||||
|
| brain-key-server | online | 7432 |
|
||||||
|
|
||||||
|
**Infra**
|
||||||
|
- Apache proxy : /mcp/ → :7701, /api/ → :7700
|
||||||
|
- MCP configuré : oui/non
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Snapshot stocké | Stale — invalide sans prévenir après quelques jours |
|
||||||
|
| Variables en mémoire Claude | Perdues au compactage |
|
||||||
|
| Fichier infra.md manuel | Manuel = dérive, pm2 status > fichier statique |
|
||||||
|
| Pas d'outil dédié | Continue de générer des questions répétitives sur l'environnement |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Zéro staleness — toujours frais, dérivé au moment de l'appel
|
||||||
|
- Élimine les questions "quel port ? quel service tourne ?" après compactage
|
||||||
|
- Layer 2 gate : l'inventaire infra reste local
|
||||||
|
- Composable : brain_boot() l'appelle en premier, tout le reste s'appuie dessus
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Dépend de pm2 — si pm2 est down, l'état est incomplet
|
||||||
|
- Layer 2 seulement — pas accessible depuis une session distante (voulu)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers concernés : `brain-engine/server.py` (GET /state), `brain-engine/mcp_server.py` (brain_state tool)
|
||||||
|
- ADR-016 : now.md canal de push garanti
|
||||||
|
- ADR-018 : migration Rust iterative
|
||||||
|
- Sessions où la décision a émergé : session brain 2026-03-17
|
||||||
72
profil/decisions/019-session-modes-soft-lock.md
Normal file
72
profil/decisions/019-session-modes-soft-lock.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
name: ADR-019-session-modes-soft-lock
|
||||||
|
type: decision
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-019 — Session modes : soft lock comportemental par déclaration au boot
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm session sess-20260317-1329-boot
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Sans mécanisme de mode, une session Claude dérive naturellement vers l'exécution technique même quand elle devrait rester en navigation/coaching. Le contexte se pollue, la présence coach se dilue, et c'est l'humain qui porte la charge de garder le cap.
|
||||||
|
|
||||||
|
Trois alternatives ont été évaluées : mode dans le memory-global (permanent), mode dans les claims BSI (inter-sessions), mode déclaré à la session.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Les modes sont déclarés au démarrage d'une session Claude via un mot-clé, chargent un fichier `modes/<nom>.md`, et constituent un **soft lock** : Claude refuse d'exécuter ce qui dépasse le périmètre du mode et redirige vers une session dédiée.
|
||||||
|
|
||||||
|
**Déclaration :** mot-clé dans le premier message (`brain +navigate`, `brain +kernel`, etc.)
|
||||||
|
**Fichiers :** `Brain/modes/<nom>.md` — chargés au boot si le mot-clé est détecté par helloWorld
|
||||||
|
**Enforcement :** soft — Claude dit "ouvre une autre session pour ça", il n'exécute pas
|
||||||
|
**Périmètre :** intra-session uniquement — pas de visibilité cross-sessions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Mode dans `memory-global/` | Permanent = toujours actif. Un mode est ponctuel, pas identitaire |
|
||||||
|
| Mode dans claims BSI | BSI = gouvernance fichiers. Ne gère pas le comportement Claude. Mauvais périmètre |
|
||||||
|
| Mode dans `~/.claude/session-role/` | Local machine, non tracké, pas distributable avec le brain |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- Contexte préservé — pas de pollution par des tâches hors périmètre
|
||||||
|
- Présence coach maintenue sur la durée
|
||||||
|
- Livrable immédiatement — pas de dépendance BSI
|
||||||
|
- Distributable avec le brain-template
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- Soft lock uniquement — repose sur la discipline Claude, pas un mécanisme dur
|
||||||
|
- Pas de visibilité cross-sessions (hard lock = futur, attend évolution BSI)
|
||||||
|
- Nécessite que helloWorld détecte le mot-clé et charge le bon fichier mode
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## À construire
|
||||||
|
|
||||||
|
- `Brain/modes/` — répertoire des modes
|
||||||
|
- `Brain/modes/brain-navigate.md` — premier mode à forger
|
||||||
|
- Modification de `agents/helloWorld.md` — détection mot-clé + chargement mode
|
||||||
|
- `brain-template/modes/` — mode example dans le template
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers concernés : `Brain/modes/` (à créer), `agents/helloWorld.md`, `memory-global/coach_presence.md`
|
||||||
|
- Sessions : `sess-20260317-1329-boot`
|
||||||
|
- Lexique : `profil/lexique.md` — distinction type de session / mode
|
||||||
81
profil/decisions/020-presence-layer-live-states.md
Normal file
81
profil/decisions/020-presence-layer-live-states.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
---
|
||||||
|
name: ADR-020-presence-layer-live-states
|
||||||
|
type: decision
|
||||||
|
context_tier: cold
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-020 — Presence layer : live-states.md comme registre inter-sessions
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm session sess-20260317-1329-boot
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Sans visibilité inter-sessions, l'humain porte manuellement l'état de toutes les sessions parallèles. Il sait qui travaille sur quoi, qui est bloqué, qui attend une décision. C'est épuisant et ça force la sérialisation de ce qui pourrait être parallèle.
|
||||||
|
|
||||||
|
BSI existe mais gouverne les fichiers, pas l'état des sessions Claude. Les signaux BSI sont lents (file-based, asynchrones). Il manque un layer de présence temps-réel queryable depuis n'importe quelle session.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Un fichier unique `workspace/live-states.md` sert de registre de présence inter-sessions. Chaque session écrit son état à l'open et le met à jour au close. La session navigate le lit pour avoir une vue d'ensemble sans lire les contextes individuels.
|
||||||
|
|
||||||
|
**Clé unique :** `sess_id` (BSI claim ID) — jamais le nom du projet.
|
||||||
|
**8 champs :** `sess_id`, `project`, `doing`, `status`, `needs`, `priority`, `team`, `blocking`, `context`, `updated`
|
||||||
|
**Remplissage :** session-orchestrator steps 6.5 (open) + 7 (close)
|
||||||
|
**Lecture :** session navigate, session-orchestrator, brain-state-bot (futur)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alternatives considérées
|
||||||
|
|
||||||
|
| Option | Raison du rejet |
|
||||||
|
|--------|----------------|
|
||||||
|
| Signaux BSI pour la présence | BSI = gouvernance fichiers. Présence = état sessions. Périmètres distincts |
|
||||||
|
| Entrée par `project` comme clé | Collision si plusieurs sessions sur le même projet |
|
||||||
|
| Intégré dans BRAIN-INDEX.md | BRAIN-INDEX = claims BSI. Mélanger présence et gouvernance = drift |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tiers d'automatisation (brain-state-bot)
|
||||||
|
|
||||||
|
| Tier | Remplissage | Champs auto-dérivés |
|
||||||
|
|------|-------------|-------------------|
|
||||||
|
| `free` | Manuel (session ou humain) | `sess_id`, `project`, `updated` depuis claims BSI |
|
||||||
|
| `pro` | Bot bash (cron 10min) | + `blocking[]`, `team[]`, `priority:critical` |
|
||||||
|
| `owner` | phi-3-mini enrichi | + `context` synthétisé, détection blockers implicites, alertes navigate |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquences
|
||||||
|
|
||||||
|
**Positives :**
|
||||||
|
- L'humain ne porte plus l'état dans sa tête
|
||||||
|
- Navigate lit 20 lignes au lieu de 5 contextes — ~90% de réduction token
|
||||||
|
- Workflow sans humain possible : session-orchestrator lit `needs`, route vers navigate ou agent
|
||||||
|
- Distributable dans le brain-template (fichier vide + spec)
|
||||||
|
|
||||||
|
**Négatives / trade-offs assumés :**
|
||||||
|
- `needs` ne peut pas être dérivé automatiquement — toujours écrit par la session
|
||||||
|
- En tier free, le bot n'existe pas — remplissage manuel ou par session-orchestrator uniquement
|
||||||
|
- Stale si session-orchestrator ne tourne pas correctement au close
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## À construire
|
||||||
|
|
||||||
|
- `brain-state-bot` — spec dédiée (étape 5)
|
||||||
|
- Stale detection : `updated` > 2h + `status: progressing` → bot passe à `idle`
|
||||||
|
- Archive : `status: closed` + 24h → `workspace/live-states-archive/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- Fichiers : `workspace/live-states.md`, `wiki/live-states.md`, `agents/session-orchestrator.md`
|
||||||
|
- Sessions : `sess-20260317-1329-boot`
|
||||||
|
- ADR lié : ADR-019 (session modes — orthogonal, même session)
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
---
|
||||||
|
name: 021-scope-drift-guardrails-session-permissions
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
status: 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.md` grossit à 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
|
||||||
|
|
||||||
|
1. `profil/contexts/session-edit-brain.yml` — L0/L1 write-all brain
|
||||||
|
2. `profil/contexts/session-kernel.yml` — L0/L1 read-only kernel + soft lock write
|
||||||
|
3. Audit kernel : identifier les fichiers protégés (liste dans KERNEL.md)
|
||||||
|
4. 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 granulaire
|
||||||
|
- `profil/contexts/session-navigate.yml` — premier exemple de session avec soft lock
|
||||||
|
- `modes/brain-navigate.md` — soft lock comportemental existant
|
||||||
86
profil/decisions/022-open-core-distribution-model.md
Normal file
86
profil/decisions/022-open-core-distribution-model.md
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
name: 022-open-core-distribution-model
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
status: actif
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-022 — Modèle de distribution open-core
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm navigate + coach (session 2026-03-17 ~23h)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
Brainstorm sur la vision produit et la frontière kernel/locked.
|
||||||
|
Question centrale : distribuer le kernel seul, ou kernel + capacité de distillation ?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
**Modèle open-core :**
|
||||||
|
- **Kernel** = forkable, open, chaque fork = instance propriétaire
|
||||||
|
- **Features avancées** = locked derrière `keys.tetardtek.com` (PayByFeature existant)
|
||||||
|
- **MCP** = pont entre distribution OS (fork/own) et runtime BaaS (instance expose un service)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Frontière free / paid
|
||||||
|
|
||||||
|
| Free (kernel) | Paid (PayByFeature — clé) |
|
||||||
|
|---|---|
|
||||||
|
| Structure brain + agents | Distillation engine |
|
||||||
|
| Coach de base (présence, pousse à progresser) | Coach complet (milestones, progression tracée) |
|
||||||
|
| Sessions typées + mémoire globale | BACT / SYMSEC |
|
||||||
|
| Agents métier | Multi-session orchestration + ambient layer |
|
||||||
|
| | Brain qui grandit seul (brain-state-bot, phi-3-mini) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modèle de distribution
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone brain-template → kernel propre (pas l'instance perso)
|
||||||
|
claude → CLAUDE.md boot → Claude IS l'onboarding (pas de wizard)
|
||||||
|
keys.tetardtek.com → gate PayByFeature sur features locked
|
||||||
|
```
|
||||||
|
|
||||||
|
Chaque fork = instance propriétaire. L'humain possède son brain.
|
||||||
|
Sans clé = rails sans le train. Utilisable, pas transformatif.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Le vrai différenciateur
|
||||||
|
|
||||||
|
Pas les agents qui travaillent ensemble (commodity — n8n, Make font ça).
|
||||||
|
**La continuité de contexte dans le temps.** Un brain qui connaît qui tu es,
|
||||||
|
trace ta progression, te pousse à grandir. Ça ne se reproduit pas sans la clé
|
||||||
|
et sans avoir accumulé du contexte sur la durée.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce qui n'est PAS encore prêt
|
||||||
|
|
||||||
|
- `brain-template` incomplet : mélange instance perso + kernel distribuable
|
||||||
|
- Séparation perso/kernel à finaliser avant toute distribution publique
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cible
|
||||||
|
|
||||||
|
N'importe quel dev qui ouvre le repo dans Claude Code comprend en 20 minutes.
|
||||||
|
Claude = l'onboarding. `git clone + claude` = installation complète.
|
||||||
|
Horizon distribution : post-Avril 2026 (brain still owner-only jusqu'au 2026-04).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- ADR-006 (BaaS) — compatible, pas exclusif
|
||||||
|
- ADR-007 (distribution kernel) — prérequis
|
||||||
|
- `brain-key-server` + `keys.tetardtek.com` — gate existant
|
||||||
|
- `brain-template/` — repo distribution (à compléter)
|
||||||
57
profil/decisions/024-source-verite-session-state.md
Normal file
57
profil/decisions/024-source-verite-session-state.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
name: 024-source-verite-session-state
|
||||||
|
type: decision
|
||||||
|
context_tier: warm
|
||||||
|
status: actif
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-024 — Source de vérité session state
|
||||||
|
|
||||||
|
> Date : 2026-03-17
|
||||||
|
> Statut : actif
|
||||||
|
> Décidé par : brainstorm navigate + coach (session 2026-03-17 ~23h)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Trois systèmes coexistent — scopes distincts, aucun doublon.
|
||||||
|
|
||||||
|
| Système | Scope | Analogie | Source de vérité pour |
|
||||||
|
|---------|-------|----------|-----------------------|
|
||||||
|
| `claims/*.yml` | Historique | git log | "Quelles sessions ont existé ?" — audit trail, gouvernance |
|
||||||
|
| `workspace/now.md` | Contexte bridge | Sticky note | "Qu'est-ce que la prochaine session doit savoir ?" |
|
||||||
|
| `workspace/live-states.md` | Présence live | Tableau blanc | "Qu'est-ce qui tourne EN CE MOMENT ?" |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Priorité de lecture au boot
|
||||||
|
|
||||||
|
```
|
||||||
|
1. now.md → toujours présent, toujours frais — prioritaire
|
||||||
|
2. live-states.md → si brain-state-bot actif (tier pro+)
|
||||||
|
3. BSI claims → gouvernance uniquement, jamais contexte boot
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Règle d'écriture
|
||||||
|
|
||||||
|
- `now.md` : écrit par Claude à chaque fermeture de session — écrase le précédent
|
||||||
|
- `live-states.md` : écrit par session-orchestrator (open/close) + brain-state-bot
|
||||||
|
- `claims/*.yml` : écrit une fois à l'open, fermé au close — jamais modifié après
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conséquence
|
||||||
|
|
||||||
|
BSI claims n'est plus la source de vérité contextuelle au boot.
|
||||||
|
`now.md` prend ce rôle. Claims = audit, pas contexte.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Références
|
||||||
|
|
||||||
|
- ADR-016 (now.md push garanti)
|
||||||
|
- ADR-020 (live-states présence layer)
|
||||||
|
- ADR-001 (BSI locking optimiste — gouvernance)
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# ToDo — <Domaine ou Projet>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Convention des statuts :
|
|
||||||
⬜ à faire
|
|
||||||
🔄 en cours
|
|
||||||
⏸ en attente d'un prérequis
|
|
||||||
✅ réalisé (garder 2 semaines, puis supprimer)
|
|
||||||
⚠️ bloquant / urgent
|
|
||||||
|
|
||||||
Convention des fichiers :
|
|
||||||
Un fichier par projet ou domaine
|
|
||||||
Une entrée = une session à planifier avec son intention claire
|
|
||||||
Ordre : ⚠️ urgents en premier, ✅ réalisés en bas
|
|
||||||
|
|
||||||
Règle d'or :
|
|
||||||
focus.md = état actuel (ce qui est fait, ce qui tourne)
|
|
||||||
todo/ = intentions futures (ce qu'on va faire)
|
|
||||||
Pas de doublon entre les deux.
|
|
||||||
-->
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⬜ <Titre de la tâche>
|
|
||||||
|
|
||||||
> Planifié : <DATE>
|
|
||||||
> Agents à charger : `<agent-1>`, `<agent-2>` (ou "aucun" si action manuelle)
|
|
||||||
> Prérequis : <prérequis si applicable> (ou supprimer la ligne)
|
|
||||||
|
|
||||||
**Intention :** <Pourquoi cette tâche — le problème qu'elle résout ou la valeur qu'elle apporte.>
|
|
||||||
|
|
||||||
**Ce qu'on veut :**
|
|
||||||
- <livrable 1>
|
|
||||||
- <livrable 2>
|
|
||||||
|
|
||||||
**Garde-fou :** <ce qu'il ne faut pas faire / les dérives à éviter>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Template section ✅ (copier quand une tâche est réalisée) :
|
|
||||||
|
|
||||||
## ✅ <Titre de la tâche>
|
|
||||||
|
|
||||||
> Planifié : <DATE>
|
|
||||||
> Réalisé : <DATE>
|
|
||||||
|
|
||||||
**Réalisé :** <ce qui a été fait — court>
|
|
||||||
-->
|
|
||||||
Reference in New Issue
Block a user