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

4.6 KiB

id, title, status, date, deciders, tags, scope
id title status date deciders tags scope
ADR-034 Séparation infra — local (owner) / VPS (brain-template) accepted 2026-03-18
human
coach
infra
distribution
brain-template
dev-loop
vps
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