ADR 0011 — Phase narrative pre-G1¶
Contexte¶
Le kit sdeg dispose d'une skill DDD stratégique solide (business-domain-design) qui produit des Bounded Contexts classés Core / Supporting / Generic. Mais la skill saute directement à la classification stratégique : aucune étape narrative préalable n'est outillée pour expliciter le domaine via des scénarios concrets ou une ligne de temps d'événements.
Sur un projet as-is connu et concret (ex. la fixture Assistant Conseil Temps-Réel), ce saut n'est pas problématique : les acteurs, objets et flux sont implicitement partagés. Mais sur un sujet à forte abstraction conceptuelle (modèle formel, second brain, domaine mathématisable — l'émergence vient du projet Kagi, graphe multidimensionnel à arêtes typées par domaine inspiré de la théorie des catégories), l'absence de phase narrative pousse l'agent ou le sponsor à inférer implicitement les Bounded Contexts depuis la Vision. Risque réel de minimum local d'inférence — « l'implicite est notre ennemi, on = humains + agents ».
Deux briques classiques de domain discovery comblent ce manque :
- Domain Storytelling (Hofer & Schwentner) — raconter le domaine sous forme de scénarios concrets
Comme [acteur], dans [contexte], je [action] sur [objet] pour [intention], avec acteurs / objets / flèches numérotées. Outil de référence : egon.io (format DST JSON). - Event Storming Big Picture (Brandolini) — aligner les événements métier au passé sur une timeline, identifier hotspots, commands, agrégats, pivots inter-BC.
L'enjeu de cette ADR : intégrer ces deux briques avant business-domain-design dans la phase pre-G1, sans rendre le surcoût narratif obligatoire pour les projets concrets où il serait disproportionné.
Options envisagées¶
Sur la place dans la spirale¶
- A. Une seule skill fusionnée « domain-discovery » couvrant stories + events. Cohérence narrative mais SRP violé (deux outils de pensée distincts).
- B. Deux skills distinctes chaînées (
domain-storytellingpuisevent-storming),business-domain-designles consomme en aval. SRP respecté, chaque skill a un format de sortie propre. - C. Un nouveau skill « avant business-domain-design » intégré à l'existant — modifie
business-domain-designpour qu'il produise d'abord des stories puis classifie. Couplage fort, dilue la responsabilité.
Sur la rigueur des prerequisites¶
- i. Prerequisites stricts —
business-domain-designrefuse de démarrer sansdomain-stories.md+event-storming.md. Discipline forte mais surcoût disproportionné sur projets concrets à as-is connu. - ii. Prerequisites recommandés (warn, pas block) — un nouveau champ dans le bloc
sdeg:signale les artefacts narratifs comme fortement conseillés mais leur absence n'arrête pas la skill ; le coach signale leur manque. - iii. Aucun lien formel — chaque skill est invoquée à la discrétion du coach, pas de déclaration. Risque d'oubli sur sujets abstraits, le coach n'a pas de signal pour proposer.
Sur le format de sortie¶
- α. egon.io DST natif partout (stories + events) — outil de référence Hofer & Schwentner, format ouvert ré-éditable graphiquement. Mais Event Storming n'a pas de notation egon.io officielle, et le diff git d'un JSON n'est pas exploitable par les agents IA.
- β. Mermaid embarqué dans markdown partout — markdown-first du kit, lisible humain + agent, diff-friendly. Mais pas de notation native event-storming dans Mermaid (pas de post-it orange / bleu / lilas).
- γ. Mixte — DST egon.io pour les stories (outil canonique pour ce besoin), Mermaid timeline pour event-storming (à défaut de notation native, on définit une convention provisoire).
Sur l'auto-invocation de ubiquitous-language¶
- a. Manuelle — le coach doit explicitement enchaîner
ubiquitous-languageaprès chaque séance narrative. Risque d'oubli. - b. Documentée comme protocole de fin de séance dans les deux nouvelles skills + dans le coach. Pas d'automatisation par code (cohérent avec le statut « non consommé par code » du bloc
sdeg:per ADR-0010), mais signal clair pour humains et agents.
Décision¶
B (deux skills) + ii (recommandés) + γ (mixte) + b (protocole documenté).
Cinq décisions reliées :
D1 — Deux skills pre-G1 distinctes (option B)¶
.github/prompts/domain-storytelling.prompt.md et .github/prompts/event-storming.prompt.md, miroirs Claude Code dans .claude/plugins/sdeg-vision/{domain-storytelling,event-storming}/SKILL.md. Frontmatter sdeg: complet (ADR-0010), porte primaire pre-g1, porte secondaire g1 et g2, posture [collaborative, hermeneutic].
event-storming recommends (cf. D2) domain-stories.md — la timeline d'événements gagne à s'appuyer sur des scénarios narratifs déjà explicités. business-domain-design recommends les deux — la classification stratégique gagne en pertinence quand acteurs, objets, événements et flux ont été explicités.
D2 — Nouveau champ recommends dans le bloc sdeg: (option ii)¶
Le bloc sdeg: (ADR-0010) gagne un nouveau champ optionnel recommends : liste libre d'artefacts ou conditions dont l'absence émet un signal recommandé mais ne bloque pas l'invocation. Sémantique parallèle à prerequisites (qui reste, lui, bloquant dans la sémantique du futur dispatcher).
sdeg:
prerequisites:
- "be.status in [VISION_EN_COURS, ENGAGE]" # bloquant
recommends:
- "domain-stories.md exists" # warn, pas block
- "event-storming.md exists" # warn, pas block
| Champ | Sémantique | Verdict si absent |
|---|---|---|
prerequisites |
Précondition stricte | NO-GO (skill inactivable) |
recommends |
Précondition recommandée | NEEDS-REVIEW (skill activable, signal au coach) |
Le futur dispatcher métacognitif lit les deux champs ; aujourd'hui aucun code ne les consomme — c'est une déclaration en attente d'usage, comme le reste du bloc sdeg:.
business-domain-design est modifiée pour déclarer recommends: [domain-stories.md, event-storming.md]. Pas de prerequisites ajoutés (toujours invocable directement sur projet concret).
D3 — Formats de sortie mixtes (option γ)¶
| Skill | Format primaire | Format secondaire | Justification |
|---|---|---|---|
| domain-storytelling | egon.io DST (domain-stories.dst, JSON exportable) |
Synthèse markdown (domain-stories.md) |
Outil de référence Hofer & Schwentner, format ouvert, ré-édition graphique possible |
| event-storming | Mermaid timeline embarqué dans markdown (event-storming.md) |
— | Markdown-first du kit, diff-friendly, lisible humain + agent |
Convention Mermaid pour Event Storming Big Picture (provisoire) : timeline natif de Mermaid pour la séquence temporelle des événements ; sections successives nommées par phase métier ; suffixes typographiques pour différencier les éléments à défaut de couleurs natives :
timeline
title Event Storming — <Bounded Context>
section Phase 1 — <nom>
Événement A : <description>
Événement B : <description>
section Phase 2 — <nom>
Événement C : <description>
Pour signaler hotspots, commands, aggregates, policies sans couleur native Mermaid : préfixer le libellé (⚠ HOTSPOT —, → COMMAND —, ◆ AGGREGATE —, ↻ POLICY —). Cette convention est provisoire : si elle se révèle inadaptée à l'usage (lisibilité, expressivité), elle sera révisée — voire remplacée par flowchart avec classes CSS Mermaid colorées.
Pour les sessions multi-Bounded-Contexts ou multi-acteurs, multi-timeline (sections parallèles ou diagrammes successifs) est admis.
D4 — Auto-invocation de ubiquitous-language documentée (option b)¶
Les deux skills narratives terminent leur workflow par un appel à ubiquitous-language pour extraire les termes émergents et alimenter glossary.md. Le coach coach-emergent.agent.md est enrichi pour proposer ce protocole de fin de séance.
Pas d'automatisation par code (cohérent avec le statut déclaratif du bloc sdeg:). Le déclenchement reste un geste explicite — du coach, ou du contributeur humain.
D5 — Question d'orientation pre-G1 dans le coach¶
Le coach gagne une question d'orientation pre-G1 dans son protocole de démarrage de phase Vision :
« Avant de classifier le domaine en Bounded Contexts, voulez-vous expliciter les scénarios narratifs (
#domain-storytelling) et la timeline d'événements (#event-storming) ? Recommandé sur sujets à forte abstraction (modèle formel, second brain, ontologie) ; optionnel sur sujets concrets à as-is connu. »
Cette question est posée une fois au début de la phase Vision — pas à chaque tour. Le coach trace la décision dans .product/.events/<date>-cadrage-narratif.md.
Conséquences¶
- Positives
- Les sujets à forte abstraction (Kagi, ontologies, modèles formels) gagnent une discipline d'explicitation avant la classification stratégique. « L'implicite est l'ennemi. »
- Le bloc
sdeg:gagne un champ exprimant une intention recommandée distincte d'une précondition stricte — utile au-delà de cette ADR (ex.prd-architectpourraitrecommends: [bounded-contexts.md]). - Mermaid timeline pour Event Storming reste markdown-first et diff-friendly ; pas de dépendance à un outil tiers.
-
Le coach gagne un signal explicite pre-G1 ; le projet reste piloté par l'humain (pas d'automatisation).
-
Négatives
- Convention Mermaid pour Event Storming provisoire — pas de notation native couleur. Risque d'inconfort visuel sur sessions denses ; révision possible si l'usage démontre l'inadaptation.
- Deux skills supplémentaires à maintenir (FR + Claude Code), 7→9 dans
sdeg-vision. - Le champ
recommendsn'est consommé par aucun code aujourd'hui (comme le reste du blocsdeg:). Rappel : c'est volontaire — déclaration avant usage. -
Surcoût narratif sur projets concrets — atténué par le statut recommandé (pas bloquant) et par la question d'orientation pre-G1 du coach.
-
Neutres
- Pas de modification de
sdlc/schema.js— les skills narratives ne sont pas une porte décisionnelle, juste des outils de cadrage. La transitionVISION_EN_COURS → ENGAGE(G1) reste régie par les artefacts existants. - Pas de modification de
sdlc/evaluator.jsnivalidators.js— le champrecommendsest purement déclaratif, pas validé au commit.
Références¶
- ADR-0010 — bloc
sdeg:dans le frontmatter ; cette ADR ajouterecommends:. - Hofer & Schwentner, Domain Storytelling: A Collaborative, Visual, and Agile Way to Build Domain-Driven Software (Addison-Wesley, 2021).
- Brandolini, Introducing EventStorming (Leanpub).
- Evans, Domain-Driven Design (référence pour l'ubiquitous language partagé).
- egon.io — outil de référence pour Domain Storytelling (Hofer & WPS Hamburg).
- Émergence : projet pilote Kagi (consommateur en cours de bootstrap, sujet à très forte abstraction conceptuelle). Mémoire feedback : « l'implicite est notre ennemi, on = humains + agents ».
- Issue #4 du dépôt — proposition initiale et arbitrages amont.