Décisions fondatricesADR-0020 · Primitives du Brain

ADR-0020 · Primitives du Brain


title: ADR-0020 — Le Brain a ses primitives : Spaces génériques, cinq rôles de piliers, facturation à part description: Le Brain a ses primitives : Spaces génériques, cinq rôles de piliers, facturation à part des crédits Studio.

Statut

Accepté · 2026-10-02

Remplace ou amende : La projection transitoire workspace/orbit-brain.ts de l'ADR 0018 et le modèle BrainEntry à six branches.

Origine : ADR 0010 du dépôt applicatif Orbit, renumérotée 0020 à l’intégration dans cette série (une seule série d’ADR vit désormais ici).

Statut dans Orbit (2026-10) : en vigueur.

Contexte

L'ADR 0018 a posé le Brain comme surface de premier niveau, mais ses données vivaient encore dans BrainEntry, attachées à un projet Studio et projetées en « Space Marque » par un adaptateur. Le fondateur a précisé la cible :

  • Orbit est headless. Le Brain sert à une seule chose : accumuler du contexte puis le brancher à n'importe quel LLM ou outil (MCP, API). Une plateforme tierce (la plateforme e-commerce du fondateur, par exemple) le consomme comme Claude ou ChatGPT le feraient, sans aucun lien privilégié.
  • Un Space n'est pas seulement une marque. Le prototype montre le gabarit Marque, mais on crée un Space pour sa vie perso, sa vie pro, chaque marque, chaque app, n'importe quoi.
  • Créer son compte, son profil et son premier Space est gratuit et immédiat ; l'activation (le paywall d'Orbit) s'ouvre à l'envoi de la première source. Les crédits du Studio et la facturation du Brain (un abonnement en CU) sont séparés.
  • L'inscription est libre (code à six chiffres), et il n'existe plus de rôle « illimité ».

Décision

1. Des tables à lui

TableRôle
BrainSpaceun domaine de contexte d'un workspace ; template nomme son gabarit
Memoryune unité de contexte, sur un des cinq piliers, éventuellement imbriquée (parentId)
SpaceBindingun projet Studio lit le contexte des Spaces qui lui sont liés
BrainUsagele compteur du Brain : ce que chaque lecture de source coûte à Orbit

BrainEntry et ses six branches disparaissent (Orbit n'avait aucun utilisateur). Les apprentissages du Studio (ancienne branche PERFORMANCE) restent des observations de l'outil, calculées depuis les concepts. Ils n'écrivent jamais dans le Brain : seul un write-back gouverné pourra les y promouvoir.

2. Cinq rôles de piliers, des libellés par gabarit

Chaque Space a exactement cinq piliers, aux mêmes rôles quel que soit son gabarit (MemoryPillar) : IDENTITY, GUIDELINES, KNOWLEDGE, ITEMS, PEOPLE. Le gabarit ne change que les mots et les icônes (packages/engine/src/brain/templates.ts) :

GabaritIDENTITYGUIDELINESKNOWLEDGEITEMSPEOPLE
Marque (prototype)IdentitéDirectivesConnaissancesProduitsPersonnages
AppProduitRèglesConnaissancesFonctionnalitésUtilisateurs
TravailRôleMéthodesConnaissancesProjetsPersonnes
PersonnelProfilPréférencesConnaissancesObjectifsProches
LibreEssentielRèglesConnaissancesÉlémentsPersonnes

Un seul vocabulaire permet au Studio, au MCP et à n'importe quel LLM de lire tous les Spaces de la même façon. Les libellés Travail et Personnel sont une première proposition : le prototype laisse volontairement ces Spaces non dessinés. Ce sont des données, modifiables sans migration. Un gabarit inconnu est une erreur, jamais un repli (AGENTS.md, règle 6).

3. La facturation du Brain ne touche jamais aux crédits Studio

  • Une lecture (site, image) passe par le compteur du Brain (createBrainMeter), pas par le ledger des membres : c'est Orbit qui paie le fournisseur, et chaque lecture est tracée dans BrainUsage.
  • Orbit est un produit, un plan (amendement 2026-10 : plus de plan gratuit de 120 CU, plus de paliers « Pro/Max »). Le Brain se facture par sa capacité de contexte actif, en CU (Workspace.brainCapacityCu) : 0 jusqu'à l'activation, puis 120 CU à 49 $/mois (468 $/an) et +60 CU par pas à 25 $/mois (240 $/an), une quantité sur le même abonnement (Facturation Stripe, formules dans packages/engine/src/brain/pricing.ts). Une Memory occupe 3 CU, une image 4, une Memory imbriquée 2, une source connectée 5.
  • Deux paywalls distincts. L'activation s'ouvre à l'envoi de la première source (rien n'est lu ni écrit avant : activationRequired). La capacité n'existe qu'une fois Orbit actif, quand une écriture dépasserait les CU (capacityFull) ; elle propose d'abord d'archiver, de compresser ou de remplacer du contexte, puis d'étendre le même plan.
  • Une inscription crée son compte, son profil et son premier Space sans payer. Garde-fous : l'activation, la capacité et 20 lectures de sources par workspace et par 24 h.
  • Les lectures MCP et REST du contexte ont un quota mensuel inclus, proportionnel à la capacité, jamais facturé à l'usage (402 quota_exceeded) : B2C, pas de facture surprise.
  • Marge cible ≥ 70 % (coût variable ≤ 30 % du revenu), suivie par workspace dans l'app d'administration (Économie & paywall) ; un mode custom (B2B négocié) se règle depuis cette seule app.
  • Les crédits Studio sont une enveloppe mensuelle du workspace (Workspace.studioMonthlyCreditsUsd, 0 par défaut). Le propriétaire s'alloue des crédits comme à n'importe quel membre. Personne n'est illimité, pas même le workspace d'Orbit : son enveloppe est accordée par le seed (FOUNDER_STUDIO_CREDITS_USD) ou, plus tard, par le back-office, et sa capacité Brain par FOUNDER_BRAIN_CAPACITY_CU.

4. L'administration de la plateforme est une capacité à part

Conformément à l'ADR 0017, PlatformAdmin (une adresse) donne le droit d'administrer Orbit. Ce droit est sans rapport avec l'appartenance à un workspace et n'accorde rien dans le cockpit. Le prototype interne (/demo) est réservé aux PlatformAdmin. Le back-office, lui, rejoindra une app séparée : son propre projet Vercel, derrière Vercel Authentication, comme Vercel le recommande pour un outil interne.

5. Le catalogue des projets se recharge à la demande

Le catalogue des projets (process-wide) était rechargé en entier à chaque requête membre. Une séquence Postgres catalog_version, incrémentée par des triggers sur Product, Memory, SpaceBinding et ProductConnection, dit désormais s'il a changé. Chaque requête lit un nombre, sans verrou, et ne recharge que s'il a bougé, sur n'importe quelle instance.

Conséquences

  • /brain liste les Spaces du workspace. Sans Space, il affiche le Brain vide : le premier envoi crée le Space (idempotent sur la clé du client) et son graph se construit en direct.
  • Le MCP et l'API exposeront les Spaces et leurs Memories (lecture du contexte, écriture gouvernée) avec ces cinq rôles.
  • Un connecteur (Shopify, par exemple) alimente un Space comme n'importe quelle source : il écrit des Memories avec source = CONNECTOR, sans jamais stocker de secret (règle 13).