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>]
5.8 KiB
scope, name, title, status, date, deciders
| scope | name | title | status | date | deciders | |
|---|---|---|---|---|---|---|
| kernel | ADR-028 | Learning loop — detect → collect → propose → approve → update | accepted | 2026-03-18 |
|
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-scribedétectait → loggait → s'arrêtait- Humain devait lire le log et agir manuellement
Après cet ADR :
pattern-scribedé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
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 :
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 :
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 :
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 |