feat(template): ADRs 018-035 — 14 décisions architecturales manquantes

Synchronise le template avec les décisions fondatrices 2025-2026 :
- 018 : migration Rust strangler fig toolkit
- 023 : Cortex/Cosmos product vision
- 025 : cortex composition operator
- 026 : IPC context packet access matrix
- 027 : ambient autonomy engine
- 028 : learning loop detect-iterate
- 029 : Cosmos frontend brain
- 030 : boot mode empirical validation
- 031 : distribution model
- 032 : execution mode vs workflow
- 033/033a : embedding language strategy + zone filter
- 034 : infra separation local/VPS/template
- 035 : session pilote mode (ADR-035)

Dépersonnalisation : keys/brain.<OWNER_DOMAIN>, deciders: [<owner>]
This commit is contained in:
2026-03-18 22:38:36 +01:00
parent 519b22809b
commit 8c95b70314
14 changed files with 1762 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
---
scope: kernel
name: ADR-025
title: "CORTEX — opérateur de composition × et frontière kernel/instance"
status: accepted
date: 2026-03-18
deciders: [<owner>]
---
# ADR-025 — CORTEX : opérateur de composition × et frontière kernel/instance
## Formule canonique
```
Cosmos = CORTEX( Brain(tier | featureFlags) × (satellites + BE + distillation + RAG + coach + BACT) )
```
| Composant | Ce que c'est | Vit où |
|-----------|-------------|--------|
| **CORTEX** | Kernel forkable — invariant, contractuel | `brain-template/` |
| **Brain(tier\|flags)** | CORTEX instancié — config user, gates | `brain-compose.yml` |
| **`×`** | Opérateur de composition — contrat entre CORTEX et ses services | `profil/routing.yml` (à définir) |
| **satellites** | Repos projets qui orbitent le brain | instance locale |
| **BE** | brain-engine — MCP, RAG, embed | VPS / local |
| **distillation** | Fine-tuning local sur contenu propre | instance locale |
| **RAG** | Recherche sémantique sur les fichiers brain | brain-engine |
| **coach** | Agent coach (speech + contextuel + BACT) | kernel + tier |
| **BACT** | Brain Accumulation & Context Transfer — progression long-terme | **instance-local uniquement** |
| **Cosmos** | UI — interface de configuration et d'expérience | brain-ui / SaaS |
---
## Règle BACT — non négociable
> **BACT est toujours instance-local. Il ne se distribue jamais dans un fork.**
Chaque owner construit son propre BACT depuis zéro.
Le BACT du propriétaire (l'owner) ne shippe pas dans brain-template.
Double bénéfice : vie privée préservée + fossé concurrentiel impossible à cloner.
---
## Cas d'usage — frontière par tier
### Owner (l'owner)
```
Cosmos = CORTEX(
Brain(tier=full, featureFlags=*)
× (satellites_perso + BE + distillation + RAG + coach[L2] + BACT[accumulé])
)
```
- BACT accumulé depuis le début — exclusif, non transférable
- Distillation activée sur tout
- Coach L2 — connaît l'historique complet
- Cosmos — routing configurable via UI
### fork(user × tier=free)
```
CORTEX_fork(
Brain(tier=free)
× (leurs_satellites + RAG[local] + coach_boot)
)
```
- Kernel identique — même protocoles, mêmes agents libres
- Distillation : logique présente dans le kernel, **activation bloquée**
- Coach-boot — speech protocol, zéro contexte accumulé
- BACT : commence à zéro, leur appartient, peut croître si tier upgrade
- Pas de Cosmos
### fork(user × tier=pro)
```
Cosmos_light = CORTEX_fork(
Brain(tier=pro)
× (leurs_satellites + BE + RAG + coach[full] + distillation[coach_only] + BACT[le leur])
)
```
- Coach full — speech + contexte session
- Distillation activée sur le coach uniquement
- BACT démarre vide, accumule leur progression
- Cosmos light — UI routing disponible
### fork(user × tier=full)
```
Cosmos = CORTEX_fork(
Brain(tier=full)
× (leurs_satellites + BE + distillation[tout] + RAG + coach[L2] + BACT[le leur])
)
```
- Distillation sur tout leur contenu
- Coach L2 alimenté par leur propre BACT
- Cosmos complet
---
## PCG appliqué à la distillation
Le modèle PCG (Protocol × Context × Gate) s'applique à chaque service :
```
Distillation (P) = la logique, l'algorithme → kernel, shippe dans tout fork
Distillation (C) = sur quoi elle s'applique → dépend du tier
Distillation (G) = peut-on l'activer → gated par tier
```
Principe : les free users reçoivent la **transparence** — ils voient la logique,
ils ne peuvent pas l'allumer. Open-source dans l'esprit, sustainable dans le modèle.
---
## L'opérateur × — pièce manquante
Le `×` est le composant le moins défini du système.
C'est lui qui transforme une liste de services en un système cohérent.
**Ce qu'il définit :**
- Qui peut spawner qui (routing inter-agents)
- Quel contexte passe d'un agent à l'autre (format du context packet)
- Quels signaux remontent et vers qui
- Comment Brain parle à ses satellites
**Où il vit :**
- Spec invariante (format) → kernel (`profil/ipc-spec.md` — à créer)
- Routing instance (qui parle à qui) → `profil/routing.yml`**éditable via Cosmos**
**Ce que Cosmos expose pour `×` :**
- Agent graph — éditeur visuel du routing
- Session builder — contexte par session
- Ambient layer — agents background on/off
- Pattern review — approve/reject apprentissage
---
## Ce que cet ADR ne définit pas encore
- Format exact du context packet (IPC spec) → ADR-026
- Ambient layer — agents background protocol → ADR-027
- Boucle d'apprentissage complète (detect → approve → update) → ADR-028
---
## Changelog
| Date | Note |
|------|------|
| 2026-03-18 | Création — formule canonique Cosmos, règle BACT, cas d'usage par tier, PCG sur distillation, opérateur × identifié comme pièce manquante |