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.
3.7 KiB
name, type, context_tier
| name | type | context_tier |
|---|---|---|
| 016-bsi-canal-push-garanti-now-md | decision | 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é :
- Jamais vraiment mandatory — des sessions entières tournaient sans claim, sans que personne s'en rende compte
- 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
- 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 - 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
# 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