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,187 @@
---
scope: kernel
name: ADR-028
title: "Learning loop — detect → collect → propose → approve → update"
status: accepted
date: 2026-03-18
deciders: [<owner>]
---
# ADR-028 — Learning loop : detect → collect → propose → approve → update
## La boucle complète
```
ambient run → RETURN collecté → pattern-scribe détecte
pattern nouveau ?
oui ↓ non ↓
log pattern incrément compteur
seuil atteint ?
↓ oui
propose update (ADR / workflow / agent)
humain approve / reject
↓ approve
brain_write() → update
BACT enregistre la progression
```
---
## Ce qui ferme la boucle ouverte
Avant cet ADR :
- `pattern-scribe` détectait → loggait → **s'arrêtait**
- Humain devait lire le log et agir manuellement
Après cet ADR :
- `pattern-scribe` détecte → log → **propose** si seuil atteint
- Humain approuve ou rejette — le brain exécute
---
## Sources d'entrée de la boucle
| Source | Ce qu'elle apporte |
|--------|-------------------|
| `workspace/pattern-log.md` | Patterns inter-sessions détectés |
| `ambient/runs/*.yml` | Run records workflow (ADR-027) |
| BSI claims (fermés) | Historique décisions de session |
| `now.md` chain | Contexte bridge entre sessions |
---
## Seuils de déclenchement
```yaml
thresholds:
pattern_occurrences: 3 # même pattern 3x → propose correction
escalate_same_cause: 2 # même ESCALATE 2x → propose règle ambient
error_same_workflow: 2 # même ERROR 2x → propose fix workflow spec
bact_milestone: 10 # 10 cycles appris → coach L2 unlock signal
```
---
## Format de proposition
Quand le seuil est atteint, le brain génère une proposition :
```yaml
proposal:
id: prop-20260318-001
trigger: pattern_occurrences
pattern: "deploy instance-0x échoue si port 443 pas encore ouvert"
observed: 3x dans runs/deploy-batch-*.yml
proposes:
type: workflow_update
file: workflows/deploy-batch.yml
change: "ajouter step check-port-443 avant spawn deploy"
requires: human_approval
expires_at: ISO8601 # 72h — si pas de réponse → archive
```
---
## Approbation humaine
```
brain-ui → panneau "Proposals" → approve / reject / modify
Telegram → notification résumée → /approve prop-001 | /reject prop-001
Claude → en début de session → "1 proposition en attente — tu veux la voir ?"
```
**Règle** : jamais d'update automatique sans approbation.
L'autonomie croît par accumulation de confiance, pas par défaut.
---
## Connexion BACT
Chaque approbation humaine = un cycle d'apprentissage enregistré dans BACT :
```yaml
bact_entry:
date: ISO8601
type: workflow_improvement
pattern: "..."
approved_by: human
applied_to: workflows/deploy-batch.yml
outcome: null # rempli après le prochain run
```
Après le prochain run :
```yaml
outcome: success # le fix a fonctionné
# → confiance += 1 sur ce type de décision
```
Accumulation de confiance → certains patterns futurs peuvent passer
en auto-approve si confiance suffisante + pattern identique déjà résolu.
---
## La vision long terme capturée
> Chaque run = un exemple d'entraînement.
> Chaque ESCALATE résolu = une règle apprise.
> Chaque approbation = de la confiance accumulée dans BACT.
>
> Sur le long terme : le brain sait que tu as un VPS, qu'il tourne sur tel port,
> que tel pattern d'erreur se résout comme ça. Les ESCALATEs deviennent rares.
> Tu restes décisionnaire final — mais uniquement sur ce qui est vraiment nouveau.
---
## Bootstrap protocol — comment on arrive à l'autonomie
L'autonomie ne se déclare pas. Elle se gagne par itérations supervisées.
```
Itération 1 — ensemble
Humain + brain côte à côte sur le premier run.
Humain repère les gaps, le scope drift, les décisions mal calibrées.
Brain apprend la tolérance exacte — pas plus, pas moins.
Itération 2 — supervisée
Brain exécute. Humain observe sans intervenir sauf ESCALATE réel.
Validation que les corrections de l'itération 1 ont tenu.
Ajustements fins si nécessaire.
Itération 3+ — autonome
Brain tourne seul. Humain = décisionnaire final uniquement.
Les ESCALATEs sont rares — le brain a vu le pattern avant.
```
**Règle de passage** : on ne passe à l'itération suivante que si l'itération courante
n'a produit aucun scope drift non détecté. Un drift non détecté = retour à l'itération 1.
**Ce que "ensemble" signifie en pratique** :
- Humain lit les run records après chaque step
- Signale les écarts de scope immédiatement
- Approuve ou rejette chaque proposition générée
- Le brain ne "suppose" pas — il demande si ambigu
**Ce qui change à l'itération 3** :
- Le brain a un historique suffisant sur ce workflow précis
- Les propositions de ce type passent en auto-approve (confiance BACT)
- L'humain reçoit un résumé, pas une demande d'approbation step-by-step
---
## Ce que cet ADR ne définit pas
- Stockage BACT (format base, vecteurs, ou simple YAML) → à décider à l'implémentation
- Interface Cosmos "Proposals panel" → produit
- Seuil d'auto-approve (confiance suffisante) → à calibrer empiriquement
---
## Changelog
| Date | Note |
|------|------|
| 2026-03-18 | Création — boucle complète detect→propose→approve→update, seuils, format proposition, connexion BACT, vision long terme gravée |