6.2 KiB
Workspace inter-sessions — Spécification
Type : Contexte — propriétaire :
scribeDernière mise à jour : 2026-03-14 Statut : v1.0 — première implémentation
Origine — comment cette feature est née
Le workspace n'a pas été planifié. Il a émergé d'une observation faite pendant le premier sprint dual-agent OriginsDigital (2026-03-14).
Le problème observé en conditions réelles :
Session backend a une question pour session frontend
→ backend écrit la question dans son output
→ humain lit
→ humain copy-paste vers frontend
→ frontend répond
→ humain copy-paste la réponse vers backend
→ backend continue
L'humain était le relay entre deux sessions qui ne pouvaient pas se parler. Ce relay prenait du temps, introduisait des erreurs de transcription, et empêchait toute coordination autonome.
L'insight :
Les sessions ont besoin d'un espace partagé — volatile pendant le sprint, persistant comme trace après. Exactement comme de la RAM dans un ordinateur : rapide, structurée, vidée à la fin de l'exécution (sauf archivage explicite).
Pourquoi c'est limpide rétrospectivement :
Le brain a déjà handoffs/ (snapshot fin de session) et
progression/journal/ (bilan pédagogique). Il manquait le pendant —
l'espace vivant où les sessions coexistent et coopèrent.
handoffs/ → snapshot APRÈS (ce qui a été fait)
progression/journal → bilan APRÈS (ce qu'on a appris)
workspace/ → vivant PENDANT (ce qui se passe maintenant)
Le workspace est la troisième pièce qui complète le triptyque.
Principe cardinal
Un agent qui travaille ne charge qu'une seule section du workspace. Jamais le workspace entier.
La valeur du workspace est nulle si chaque session doit tout lire pour trouver ce qui la concerne. Les droits de lecture ne sont pas optionnels — ils sont la colonne vertébrale du système.
Structure
brain/workspace/
<projet>-<sprint>/
README.md → métadonnées, lifecycle, mode actif — 10 lignes max
ram.md → état live + questions inter-sessions (volatile)
log.md → décisions + audit trail (persistant)
feedback.md → retours post-sprint (jamais lu en sprint actif)
Un workspace par sprint. Pas par session, pas par projet global. La granularité sprint est le bon niveau : assez court pour rester léger, assez long pour capturer un arc de travail complet.
Droits de lecture — par rôle
| Section | Worker | Supervisor | Coach-scribe |
|---|---|---|---|
ram.md |
✅ obligatoire | ✅ | ❌ |
log.md |
sur demande explicite | ✅ obligatoire | ✅ |
feedback.md |
❌ jamais en sprint | ❌ jamais en sprint | ✅ après TTL |
Règle d'or : le worker charge ram.md au boot si un workspace actif existe.
Il ne charge log.md que si le supervisor le lui demande explicitement.
feedback.md n'existe pas pour lui pendant le sprint.
Lifecycle — champ archive dans README.md
## Lifecycle
ttl: 7d
archive: auto | keep | 30d | 90d | permanent
| Valeur | Comportement |
|---|---|
auto |
TTL standard → archivé dans handoffs/ → supprimé |
keep |
Suspend l'archivage — humain décide quand |
30d / 90d |
Retention custom après fermeture du sprint |
permanent |
Jamais supprimé — devient référence documentaire |
Qui gère le lifecycle : coach-scribe — lit le champ archive au TTL expiry.
Si keep → notifie le supervisor pour décision humaine.
Graduation par mode (brain-compose.yml)
Le contenu actif du workspace dépend du mode déclaré :
| Mode | Sections actives | Usage |
|---|---|---|
prod |
ram.md (state + questions) + log.md (décisions) |
Sprint standard |
dev |
Tout | Expérimentation libre |
review |
log.md + resources ponctuels — pas de ram |
Code review |
brainstorm |
log.md + feedback.md — pas de ram |
Conception |
debug |
ram.md (state uniquement) + log.md |
Debug focalisé |
Anti-embourbage — règles dures
TTL workspace = durée sprint + 7 jours (défaut)
Max ram.md = 50 lignes actives (au-delà = stale, purger les résolus)
Max log.md = 1 ligne par décision — pas de justification longue ici
feedback.md = géré en session dédiée post-sprint par coach-scribe
Sections custom = interdites — seulement README + ram + log + feedback
Pourquoi pas de sections custom : chaque section custom crée un nouveau droit de lecture à définir, un nouveau template à maintenir, une nouvelle règle de chargement. Le coût explose vite. Si un besoin ne rentre pas dans les 3 sections → c'est soit un handoff, soit un signal BSI.
Valeur post-sprint
Le workspace archivé répond à la question : "pourquoi on a fait ça ?"
Dans 3 mois, on revient sur OriginsDigital.
Pourquoi /auth/me retourne roles[] ?
→ workspace/originsdigital-sprint2/log.md ligne 4 :
"2026-03-14 15:xx | Option 1 vs 2 — enrichir /auth/me | choisi : Option 1
| raison : un seul appel, coût DB négligeable à cette échelle"
Pas besoin de fouiller le git log, pas besoin de se souvenir. Le workspace archivé EST la documentation du raisonnement.
Connexion aux autres systèmes
| Système | Relation |
|---|---|
BRAIN-INDEX.md ## Signals |
Coordination légère — workspace est la couche lourde |
handoffs/ |
Snapshot final — workspace est le live |
progression/journal/ |
Bilan pédagogique — workspace est le raw material |
brain-compose.yml |
Mode actif → détermine les sections actives du workspace |
coach-scribe |
Gère le lifecycle et alimente feedback.md post-sprint |
Templates
Voir brain/workspace/_template/ :
README.md— métadonnées + lifecycleram.md— état live + questionslog.md— décisions + audit trailfeedback.md— retours post-sprint
Changelog
| Date | Version | Changement |
|---|---|---|
| 2026-03-14 | 1.0 | Création — émergé du sprint dual-agent OriginsDigital, triptyque pendant/après/après, 3 sections, droits de lecture, graduation modes, anti-embourbage |