Files
brain-template/profil/decisions/adr-034-infra-separation-local-vps-template.md
Tetardtek 8c95b70314 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>]
2026-03-18 22:38:36 +01:00

143 lines
4.6 KiB
Markdown

---
id: ADR-034
title: Séparation infra — local (owner) / VPS (brain-template)
status: accepted
date: 2026-03-18
deciders: [human, coach]
tags: [infra, distribution, brain-template, dev-loop, vps]
scope: kernel
---
# ADR-034 — Séparation infra : local (owner) / VPS (brain-template)
## Contexte
Jusqu'au 2026-03-18, le brain-ui local pointait sur le VPS (`brain.<OWNER_DOMAIN>`)
via le proxy Vite. Conséquences :
- En dev, le Cosmos montrait les embeddings du VPS — pas les changements locaux
- Le dev loop était cassé : modifier embed.py local → invisible en local
- Le VPS exposait le brain personnel du owner (ADRs privés, projets perso, bact)
- Un utilisateur qui visite le VPS voit le brain du owner, pas un produit
La distribution de brain-template (ADR-031) impose une séparation claire :
un utilisateur qui découvre le produit ne doit pas tomber sur le brain privé du créateur.
---
## Décision
### Deux instances, deux rôles
```
Local (prod-laptop)
→ brain owner, privé
→ brain-engine port 7700, BRAIN_TIER=owner
→ brain-ui Vite port 5173, proxy → localhost:7700
→ brain.db local (re-embed cron 6h + on-demand)
→ jamais exposé publiquement
VPS (brain.<OWNER_DOMAIN>)
→ brain-template, démo produit
→ ce que le monde voit en premier
→ kernel ouvert, agents de référence, zéro données owner
→ brain-engine + brain-ui déployés depuis brain-template
```
### Dev loop validé
```
1. Modifier le brain local (agents, embed, brain-ui)
2. Tester sur localhost:5173/ui/ → brain-engine local → brain.db local
3. Valider (dry-run, --stats, Cosmos local)
4. Commit + push
5. Déployer sur VPS uniquement si validé
```
Même principe que le swarm-ready gate (ADR-032) : au moins un run validé
en local avant de toucher le prod.
### Conséquences immédiates (2026-03-18)
- `vite.config.ts` proxy → `http://localhost:7700` + rewrite `/api → ''` + `ws: true`
- `scripts/dev-start.sh` — démarre brain-engine + Vite en un seul Ctrl+C
- `BRAIN_TIER=owner` en dev (pas de token requis, tier explicite)
- `numpy` + `umap-learn` installés localement (UMAP local opérationnel)
---
## Zone filter comme prérequis de distribution
ADR-033a est le fondement de sécurité qui rend cette séparation viable :
```
profil/bact/ → JAMAIS indexé → owner invisible au VPS
profil/decisions/ → scope kernel → archi partageable, décisions perso non
personal → JAMAIS → souveraineté par instance
```
Sans ADR-033a, exposer le brain-engine sur le VPS = exposer le bact owner.
Avec ADR-033a, chaque instance est souveraine sur son privé — le MCP est safe
par construction.
---
## Chemin vers brain-template sur VPS
```
1. ADR-033a live (zone filter) ✅ 2026-03-18
2. ADR-034 (séparation infra) ✅ 2026-03-18
3. Déployer brain-template sur VPS → prochaine étape
4. VPS = démo kernel propre → zéro données owner
5. brain-key-server valide les tiers → free / pro / owner par clé
```
---
## Note — Cosmos temps réel (future)
Deux modes d'embedding identifiés :
```
Mode actuel → cron 6h + on-demand (re-embed manuel) ← validé
Mode futur → file watcher (inotify) → re-embed sur write ← ADR-035 territory
```
Le temps réel est orthogonal à cette décision — déclenché sur besoin concret.
---
## Alternatives considérées
| Option | Raison du rejet |
|--------|----------------|
| Proxy Vite → VPS en dev | Dev loop cassé, Cosmos montre le VPS pas le local |
| Un seul brain sur VPS | Mélange données owner + produit — confidentialité rompue |
| brain-template = copie du brain owner | Expose données privées à la distribution |
---
## Conséquences
**Positives :**
- Dev loop complet local — chaque changement visible immédiatement
- VPS propre pour la démo — ce que le monde voit = le produit, pas le owner
- Confidentialité garantie par construction (ADR-033a)
- La boucle dev local → validate → VPS prod est celle qui sera documentée pour les futurs contributeurs
**Négatives / trade-offs assumés :**
- Deux environnements à maintenir (local + VPS)
- `scripts/dev-start.sh` requis pour démarrer l'env dev (acceptable)
- numpy/umap-learn à installer localement (one-time, documenté)
---
## Références
- ADR-031 — Distribution model brain-template
- ADR-033a — Embedding zone filter (prérequis sécurité)
- ADR-032 — Mode d'exécution (swarm-ready gate — même logique local→prod)
- `scripts/dev-start.sh` — démarrage env dev local
- `brain-ui/vite.config.ts` — proxy config dev
- Session 2026-03-18 — validation empirique complète du dev loop