@eventmodelers/cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/README.md +175 -0
  2. package/cli.js +676 -0
  3. package/package.json +35 -0
  4. package/shared/build-kit/code-export.mjs +560 -0
  5. package/shared/build-kit/lib/ollama-agent.js +147 -0
  6. package/shared/build-kit/package.json +11 -0
  7. package/shared/build-kit/ralph-ollama.js +39 -0
  8. package/shared/build-kit/realtime-agent.js +18 -0
  9. package/stacks/axon/templates/.claude/skills/build-automation/SKILL.md +407 -0
  10. package/stacks/axon/templates/.claude/skills/build-automation/references/feature-flag-patterns.md +114 -0
  11. package/stacks/axon/templates/.claude/skills/build-automation-workflow/SKILL.md +496 -0
  12. package/stacks/axon/templates/.claude/skills/build-automation-workflow/references/axon-workflow-api.md +279 -0
  13. package/stacks/axon/templates/.claude/skills/build-automation-workflow/references/feature-flag-patterns.md +114 -0
  14. package/stacks/axon/templates/.claude/skills/build-state-change/SKILL.md +396 -0
  15. package/stacks/axon/templates/.claude/skills/build-state-change/references/axon-test-fixture-patterns.md +162 -0
  16. package/stacks/axon/templates/.claude/skills/build-state-change/references/feature-flag-patterns.md +56 -0
  17. package/stacks/axon/templates/.claude/skills/build-state-change/references/rest-api-patterns.md +115 -0
  18. package/stacks/axon/templates/.claude/skills/build-state-view/SKILL.md +282 -0
  19. package/stacks/axon/templates/.claude/skills/connect/SKILL.md +178 -0
  20. package/stacks/axon/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +611 -0
  21. package/stacks/axon/templates/.claude/skills/load-slice/SKILL.md +141 -0
  22. package/stacks/axon/templates/.claude/skills/update-slice-status/SKILL.md +105 -0
  23. package/stacks/axon/templates/build-kit/lib/AGENT.md +47 -0
  24. package/stacks/axon/templates/build-kit/lib/agent.sh +20 -0
  25. package/stacks/axon/templates/build-kit/lib/backend-prompt.md +158 -0
  26. package/stacks/axon/templates/build-kit/lib/prompt.md +126 -0
  27. package/stacks/axon/templates/build-kit/lib/ralph.js +369 -0
  28. package/stacks/axon/templates/build-kit/ralph-claude.js +44 -0
  29. package/stacks/axon/templates/build-kit/ralph.sh +98 -0
  30. package/stacks/axon/templates/root/.env.example +5 -0
  31. package/stacks/axon/templates/root/CLAUDE.md +60 -0
  32. package/stacks/axon/templates/root/README.md +44 -0
  33. package/stacks/axon/templates/root/docker-compose.yml +64 -0
  34. package/stacks/axon/templates/root/mvnw +259 -0
  35. package/stacks/axon/templates/root/mvnw.cmd +149 -0
  36. package/stacks/axon/templates/root/pom.xml +125 -0
  37. package/stacks/axon/templates/root/src/main/java/io/axoniq/quickstart/QuickstartApplication.java +128 -0
  38. package/stacks/axon/templates/root/src/main/java/io/axoniq/quickstart/config/WebConfig.java +155 -0
  39. package/stacks/axon/templates/root/src/main/resources/application.properties +2 -0
  40. package/stacks/axon/templates/root/src/main/resources/static/bg-body.png +0 -0
  41. package/stacks/axon/templates/root/src/main/resources/static/bg-header.png +0 -0
  42. package/stacks/axon/templates/root/src/main/resources/static/index.html +596 -0
  43. package/stacks/cratis-csharp/templates/.claude/skills/_shared/cratis-conventions.md +251 -0
  44. package/stacks/cratis-csharp/templates/.claude/skills/build-automation/SKILL.md +99 -0
  45. package/stacks/cratis-csharp/templates/.claude/skills/build-automation/references/patterns.md +115 -0
  46. package/stacks/cratis-csharp/templates/.claude/skills/build-state-change/SKILL.md +163 -0
  47. package/stacks/cratis-csharp/templates/.claude/skills/build-state-change/references/patterns.md +234 -0
  48. package/stacks/cratis-csharp/templates/.claude/skills/build-state-view/SKILL.md +120 -0
  49. package/stacks/cratis-csharp/templates/.claude/skills/build-state-view/references/patterns.md +166 -0
  50. package/stacks/cratis-csharp/templates/.claude/skills/connect/SKILL.md +169 -0
  51. package/stacks/cratis-csharp/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +609 -0
  52. package/stacks/cratis-csharp/templates/.claude/skills/load-slice/SKILL.md +141 -0
  53. package/stacks/cratis-csharp/templates/.claude/skills/update-slice-status/SKILL.md +105 -0
  54. package/stacks/cratis-csharp/templates/build-kit/lib/AGENT.md +58 -0
  55. package/stacks/cratis-csharp/templates/build-kit/lib/agent.sh +20 -0
  56. package/stacks/cratis-csharp/templates/build-kit/lib/backend-prompt.md +129 -0
  57. package/stacks/cratis-csharp/templates/build-kit/lib/prompt.md +124 -0
  58. package/stacks/cratis-csharp/templates/build-kit/lib/ralph.js +302 -0
  59. package/stacks/cratis-csharp/templates/build-kit/ralph-claude.js +37 -0
  60. package/stacks/cratis-csharp/templates/build-kit/ralph.sh +98 -0
  61. package/stacks/cratis-csharp/templates/root/.frontend/index.css +29 -0
  62. package/stacks/cratis-csharp/templates/root/.frontend/index.html +17 -0
  63. package/stacks/cratis-csharp/templates/root/.frontend/main.tsx +18 -0
  64. package/stacks/cratis-csharp/templates/root/.frontend/tsconfig.json +42 -0
  65. package/stacks/cratis-csharp/templates/root/.frontend/tsconfig.node.json +11 -0
  66. package/stacks/cratis-csharp/templates/root/.frontend/vite.config.ts +56 -0
  67. package/stacks/cratis-csharp/templates/root/App.tsx +23 -0
  68. package/stacks/cratis-csharp/templates/root/CLAUDE.md +62 -0
  69. package/stacks/cratis-csharp/templates/root/CratisApp.csproj +25 -0
  70. package/stacks/cratis-csharp/templates/root/CratisApp.sln +18 -0
  71. package/stacks/cratis-csharp/templates/root/GlobalUsings.cs +3 -0
  72. package/stacks/cratis-csharp/templates/root/Home.tsx +102 -0
  73. package/stacks/cratis-csharp/templates/root/Program.cs +26 -0
  74. package/stacks/cratis-csharp/templates/root/README.md +192 -0
  75. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/AllListings.ts +47 -0
  76. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/Listing.cs +11 -0
  77. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/Listing.ts +12 -0
  78. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/ListingDataTable.tsx +17 -0
  79. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/index.ts +1 -0
  80. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/Register.ts +51 -0
  81. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/RegisterDialog.tsx +18 -0
  82. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/Registration.cs +27 -0
  83. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/index.ts +1 -0
  84. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/SomeFeature.tsx +22 -0
  85. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/SomeName.cs +3 -0
  86. package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/index.ts +1 -0
  87. package/stacks/cratis-csharp/templates/root/appsettings.Development.json +9 -0
  88. package/stacks/cratis-csharp/templates/root/appsettings.json +26 -0
  89. package/stacks/cratis-csharp/templates/root/docker-compose.yml +23 -0
  90. package/stacks/cratis-csharp/templates/root/package.json +33 -0
  91. package/stacks/cratis-csharp/templates/root/tsconfig.json +3 -0
  92. package/stacks/modeling-kit/templates/.claude/settings.local.json +13 -0
  93. package/stacks/modeling-kit/templates/.claude/skills/analyze-existing-model/SKILL.md +215 -0
  94. package/stacks/modeling-kit/templates/.claude/skills/attributes/SKILL.md +176 -0
  95. package/stacks/modeling-kit/templates/.claude/skills/connect/SKILL.md +182 -0
  96. package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/SKILL.md +383 -0
  97. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-applying-conways-law/SKILL.md +465 -0
  98. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +587 -0
  99. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/facilitating-event-modeling-workshops.md +626 -0
  100. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/SKILL.md +542 -0
  101. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-event-models/SKILL.md +497 -0
  102. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md +783 -0
  103. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/SKILL.md +604 -0
  104. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/SKILL.md +699 -0
  105. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-integrating-legacy-systems/SKILL.md +674 -0
  106. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/SKILL.md +231 -0
  107. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/domain-patterns.md +150 -0
  108. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/patterns.md +329 -0
  109. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/snapshotting.md +204 -0
  110. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/SKILL.md +352 -0
  111. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/references/project-planning-with-event-modeling.md +341 -0
  112. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-plotting-events/SKILL.md +153 -0
  113. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/SKILL.md +136 -0
  114. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/examples.md +78 -0
  115. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/patterns.md +85 -0
  116. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/SKILL.md +655 -0
  117. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-translating-external-events/SKILL.md +479 -0
  118. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models/SKILL.md +234 -0
  119. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models-checklist/SKILL.md +353 -0
  120. package/stacks/modeling-kit/templates/.claude/skills/examples/SKILL.md +200 -0
  121. package/stacks/modeling-kit/templates/.claude/skills/handle-comment/SKILL.md +94 -0
  122. package/stacks/modeling-kit/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +441 -0
  123. package/stacks/modeling-kit/templates/.claude/skills/place-element/SKILL.md +290 -0
  124. package/stacks/modeling-kit/templates/.claude/skills/storyboard/SKILL.md +212 -0
  125. package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/SKILL.md +123 -0
  126. package/stacks/modeling-kit/templates/.claude/skills/timeline/SKILL.md +353 -0
  127. package/stacks/modeling-kit/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
  128. package/stacks/modeling-kit/templates/.claude/skills/wdyt/SKILL.md +134 -0
  129. package/stacks/modeling-kit/templates/kit/lib/agent.sh +20 -0
  130. package/stacks/modeling-kit/templates/kit/lib/ollama-agent.js +147 -0
  131. package/stacks/modeling-kit/templates/kit/lib/ralph.js +286 -0
  132. package/stacks/modeling-kit/templates/kit/package.json +12 -0
  133. package/stacks/modeling-kit/templates/kit/ralph-claude.js +50 -0
  134. package/stacks/modeling-kit/templates/kit/ralph-ollama.js +38 -0
  135. package/stacks/modeling-kit/templates/kit/ralph.sh +61 -0
  136. package/stacks/modeling-kit/templates/kit/realtime-agent.js +18 -0
  137. package/stacks/modeling-kit/templates/root/CLAUDE.md +56 -0
  138. package/stacks/node/templates/.claude/skills/build-automation/SKILL.md +266 -0
  139. package/stacks/node/templates/.claude/skills/build-state-change/SKILL.md +344 -0
  140. package/stacks/node/templates/.claude/skills/build-state-view/SKILL.md +412 -0
  141. package/stacks/node/templates/.claude/skills/connect/SKILL.md +178 -0
  142. package/stacks/node/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +628 -0
  143. package/stacks/node/templates/.claude/skills/load-slice/SKILL.md +143 -0
  144. package/stacks/node/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
  145. package/stacks/node/templates/build-kit/README.md +86 -0
  146. package/stacks/node/templates/build-kit/lib/AGENT.md +47 -0
  147. package/stacks/node/templates/build-kit/lib/agent.sh +20 -0
  148. package/stacks/node/templates/build-kit/lib/backend-prompt.md +152 -0
  149. package/stacks/node/templates/build-kit/lib/prompt.md +122 -0
  150. package/stacks/node/templates/build-kit/lib/ralph.js +369 -0
  151. package/stacks/node/templates/build-kit/ralph-claude.js +44 -0
  152. package/stacks/node/templates/build-kit/ralph.sh +98 -0
  153. package/stacks/node/templates/root/.env.example +15 -0
  154. package/stacks/node/templates/root/CLAUDE.md +60 -0
  155. package/stacks/node/templates/root/docker-compose.yml +15 -0
  156. package/stacks/node/templates/root/flyway.conf +17 -0
  157. package/stacks/node/templates/root/migrations/V1__schema.sql.example +12 -0
  158. package/stacks/node/templates/root/package.json +50 -0
  159. package/stacks/node/templates/root/server.ts +130 -0
  160. package/stacks/node/templates/root/setup-env.sh +53 -0
  161. package/stacks/node/templates/root/src/common/assertions.ts +6 -0
  162. package/stacks/node/templates/root/src/common/db.ts +32 -0
  163. package/stacks/node/templates/root/src/common/loadPostgresEventstore.ts +23 -0
  164. package/stacks/node/templates/root/src/common/parseEndpoint.ts +51 -0
  165. package/stacks/node/templates/root/src/common/processorDlq.ts +28 -0
  166. package/stacks/node/templates/root/src/common/realtimeBroadcast.ts +12 -0
  167. package/stacks/node/templates/root/src/common/replay.ts +16 -0
  168. package/stacks/node/templates/root/src/common/routes.ts +19 -0
  169. package/stacks/node/templates/root/src/common/testHelpers.ts +44 -0
  170. package/stacks/node/templates/root/src/swagger.ts +34 -0
  171. package/stacks/node/templates/root/src/util/assertions.ts +6 -0
  172. package/stacks/node/templates/root/src/util/hash.ts +9 -0
  173. package/stacks/node/templates/root/src/util/sanitize.ts +23 -0
  174. package/stacks/node/templates/root/tsconfig.json +32 -0
  175. package/stacks/node/templates/root/vercel.json +8 -0
  176. package/stacks/supabase/templates/.claude/skills/build-automation/SKILL.md +266 -0
  177. package/stacks/supabase/templates/.claude/skills/build-state-change/SKILL.md +344 -0
  178. package/stacks/supabase/templates/.claude/skills/build-state-view/SKILL.md +390 -0
  179. package/stacks/supabase/templates/.claude/skills/build-webhook/SKILL.md +303 -0
  180. package/stacks/supabase/templates/.claude/skills/connect/SKILL.md +178 -0
  181. package/stacks/supabase/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +628 -0
  182. package/stacks/supabase/templates/.claude/skills/load-slice/SKILL.md +143 -0
  183. package/stacks/supabase/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
  184. package/stacks/supabase/templates/build-kit/README.md +86 -0
  185. package/stacks/supabase/templates/build-kit/lib/AGENT.md +47 -0
  186. package/stacks/supabase/templates/build-kit/lib/agent.sh +20 -0
  187. package/stacks/supabase/templates/build-kit/lib/backend-prompt.md +152 -0
  188. package/stacks/supabase/templates/build-kit/lib/prompt.md +123 -0
  189. package/stacks/supabase/templates/build-kit/lib/ralph.js +369 -0
  190. package/stacks/supabase/templates/build-kit/ralph-claude.js +44 -0
  191. package/stacks/supabase/templates/build-kit/ralph.sh +98 -0
  192. package/stacks/supabase/templates/root/.env.example +22 -0
  193. package/stacks/supabase/templates/root/CLAUDE.md +61 -0
  194. package/stacks/supabase/templates/root/flyway.conf +17 -0
  195. package/stacks/supabase/templates/root/package.json +52 -0
  196. package/stacks/supabase/templates/root/server.ts +177 -0
  197. package/stacks/supabase/templates/root/setup-env.sh +53 -0
  198. package/stacks/supabase/templates/root/src/common/assertions.ts +6 -0
  199. package/stacks/supabase/templates/root/src/common/db.ts +32 -0
  200. package/stacks/supabase/templates/root/src/common/loadPostgresEventstore.ts +23 -0
  201. package/stacks/supabase/templates/root/src/common/parseEndpoint.ts +51 -0
  202. package/stacks/supabase/templates/root/src/common/processorDlq.ts +28 -0
  203. package/stacks/supabase/templates/root/src/common/realtimeBroadcast.ts +19 -0
  204. package/stacks/supabase/templates/root/src/common/replay.ts +16 -0
  205. package/stacks/supabase/templates/root/src/common/routes.ts +23 -0
  206. package/stacks/supabase/templates/root/src/common/testHelpers.ts +54 -0
  207. package/stacks/supabase/templates/root/src/supabase/README.md +141 -0
  208. package/stacks/supabase/templates/root/src/supabase/api.ts +56 -0
  209. package/stacks/supabase/templates/root/src/supabase/requireOrgaAdmin.ts +32 -0
  210. package/stacks/supabase/templates/root/src/supabase/requireSysUser.ts +40 -0
  211. package/stacks/supabase/templates/root/src/supabase/requireUser.ts +72 -0
  212. package/stacks/supabase/templates/root/src/swagger.ts +34 -0
  213. package/stacks/supabase/templates/root/src/util/assertions.ts +6 -0
  214. package/stacks/supabase/templates/root/src/util/hash.ts +9 -0
  215. package/stacks/supabase/templates/root/src/util/sanitize.ts +23 -0
  216. package/stacks/supabase/templates/root/supabase/config.toml +295 -0
  217. package/stacks/supabase/templates/root/supabase/migrations/V1__schema.sql.example +12 -0
  218. package/stacks/supabase/templates/root/supabase/seed.sql +1 -0
  219. package/stacks/supabase/templates/root/tsconfig.json +32 -0
  220. package/stacks/supabase/templates/root/vercel.json +8 -0
@@ -0,0 +1,626 @@
1
+ # Facilitating Event Modeling Workshops
2
+
3
+ ## Overview
4
+
5
+ Event Modeling is fundamentally a collaborative workshop process. This guide helps facilitators run efficient, effective workshops across all 7 steps.
6
+
7
+ ## Pre-Workshop Preparation
8
+
9
+ ### 1. Select Participants
10
+
11
+ **Required Roles**:
12
+ - **Product Owner/Domain Expert**: Business rules, priorities, constraints
13
+ - **Developers** (2-3): Technical feasibility, implementation concerns
14
+ - **QA/Tester** (1-2): Test coverage, edge cases
15
+ - **Facilitator** (1): Keeps pace, ensures shared understanding
16
+
17
+ **Optional Participants**:
18
+ - **UX Designer**: User workflows, interface considerations
19
+ - **Security Lead**: Sensitive data handling, compliance
20
+ - **Operations**: Deployment, monitoring, scaling
21
+ - **Customer/User**: Real-world perspective (for workshops with actual users)
22
+
23
+ **Group Size**: 5-8 people is ideal
24
+ - Too small: Miss perspectives
25
+ - Too large: Hard to facilitate
26
+
27
+ ### 2. Pre-Workshop Communication
28
+
29
+ Send to participants before workshop:
30
+ ```
31
+ Subject: Event Modeling Workshop - [Domain Name]
32
+
33
+ Hi team,
34
+
35
+ We're running an Event Modeling workshop to design the [Domain] system.
36
+
37
+ Date: [Date]
38
+ Duration: [Hours]
39
+ Location: [Physical/Virtual]
40
+
41
+ Please prepare by thinking about:
42
+ - What workflows happen in this system?
43
+ - What events could occur?
44
+ - What's important about state changes?
45
+ - Questions you have about requirements
46
+
47
+ No prior Event Modeling experience needed!
48
+
49
+ Looking forward to seeing you there.
50
+ ```
51
+
52
+ ### 3. Prepare Workspace
53
+
54
+ **Physical Workshop**:
55
+ ```
56
+ Setup:
57
+ - Large whiteboard or wall space (8+ feet wide)
58
+ - Sticky notes (multiple colors for events, commands, views)
59
+ - Markers (bold colors)
60
+ - Timer visible
61
+ - Cameras for documentation
62
+
63
+ Layout:
64
+ - Stand-up around board
65
+ - Facilitator at board
66
+ - Everyone can see and contribute
67
+ ```
68
+
69
+ **Virtual Workshop**:
70
+ ```
71
+ Tools:
72
+ - Miro, Figma, or similar
73
+ - Video conference (Zoom, Teams, etc.)
74
+ - Shared document (for notes)
75
+
76
+ Setup:
77
+ - Everyone can see canvas
78
+ - All can create/edit
79
+ - Recording enabled (for reference)
80
+ - Chat open for side discussions
81
+ ```
82
+
83
+ ### 4. Create Templates
84
+
85
+ Prepare sticky note templates or digital shapes:
86
+
87
+ ```
88
+ Physical sticky notes:
89
+ [Green] Event: ________________
90
+
91
+ [Blue] Command: ________________
92
+
93
+ [Orange] View: ________________
94
+
95
+ Virtual shapes:
96
+ Same colors with text fields
97
+ ```
98
+
99
+ ## Workshop Facilitation by Step
100
+
101
+ ### Step 1: Brainstorming Events (15-20 minutes)
102
+
103
+ **Objective**: Identify all domain events (state changes)
104
+
105
+ **Facilitation Flow**:
106
+
107
+ 1. **Set Context** (2 min)
108
+ ```
109
+ "We're going to envision what this system does. Imagine it's running
110
+ for years—what events happen? What important state changes?
111
+
112
+ An event is something that changed the state. Not just something
113
+ that happened, but something that MATTERS because it changed things.
114
+
115
+ Everyone write down any events you think of."
116
+ ```
117
+
118
+ 2. **Free Brainstorm** (8-10 min)
119
+ - Participants call out events
120
+ - You write on board or digital canvas
121
+ - No filtering yet! Capture everything
122
+ - Encourage "What about..." questions
123
+ - Example responses:
124
+ - "Customer placed order" → Write: "OrderCreated"
125
+ - "Order was confirmed" → Write: "OrderConfirmed"
126
+ - "What about customer viewed page?" → "Let's capture it for now, we'll refine"
127
+
128
+ 3. **Gentle Filtering** (5-7 min)
129
+ ```
130
+ "Now let's think about these. An event is something that actually
131
+ changed the state. Let me ask about some:
132
+
133
+ 'Customer viewed catalog' - did this change anything?
134
+ Person: Not really...
135
+ You: Right, viewing doesn't change anything. But if they SELECTED
136
+ an item, that changes their cart. That's 'ItemAddedToCart'.
137
+
138
+ 'System checked inventory' - did this change system state?
139
+ Person: No, it's internal...
140
+ You: Exactly, internal checks don't count. But when we ACTUALLY
141
+ reserved inventory, that's a state change: 'InventoryReserved'.
142
+ ```
143
+
144
+ 4. **Capture Insights** - Add notes on WHY events matter
145
+ - Identify stream roots (Order, Payment, Review, etc.)
146
+ - Document any questions for domain expert
147
+
148
+ **Timing Guide**:
149
+ - Tight groups: 12-15 min
150
+ - Complex domains: 20-25 min
151
+ - Always watch time—keep moving
152
+
153
+ ### Step 2: Plotting Events (Timeline)
154
+
155
+ **Objective**: Order events into a timeline (process flow)
156
+
157
+ **Facilitation Flow**:
158
+
159
+ 1. **Establish Order** (5 min)
160
+ ```
161
+ "Let's put these events in order. What happens first?"
162
+
163
+ Guide conversation:
164
+ "Before we can confirm an order, what must happen?"
165
+ → "Order must be created first"
166
+
167
+ "So the sequence is?"
168
+ → Lead to: OrderCreated → OrderConfirmed
169
+ ```
170
+
171
+ 2. **Handle Branches** (5 min)
172
+ ```
173
+ "Can different things happen from here?"
174
+
175
+ "What if payment fails?"
176
+ → "PaymentFailed event"
177
+ → This creates branching paths
178
+
179
+ Draw branching clearly:
180
+ OrderConfirmed
181
+ → PaymentAuthorized → (success path)
182
+ → PaymentFailed → (failure path)
183
+ ```
184
+
185
+ 3. **Identify Parallel Flows** (5 min)
186
+ ```
187
+ "Do these happen at the same time or one after another?"
188
+
189
+ Example:
190
+ "Once payment is authorized, what happens?"
191
+ → "Inventory reserved"
192
+ → "Email sent"
193
+ → Can these happen in parallel? Usually yes!
194
+ ```
195
+
196
+ **Don't get stuck** on exact timing—the point is the logical flow.
197
+
198
+ ### Step 3: Storyboarding (UI Mockups)
199
+
200
+ **Objective**: Visualize what users see
201
+
202
+ **Facilitation Flow**:
203
+
204
+ 1. **Pick First Screen** (2 min)
205
+ ```
206
+ "Let's think about the UI. What's the first screen the user sees?"
207
+ → "Order entry form"
208
+
209
+ "Who draws?"
210
+ → Can be anyone, or facilitator
211
+ ```
212
+
213
+ 2. **Draw and Label** (5 min)
214
+ ```
215
+ Draw on board:
216
+
217
+ Order Entry Form
218
+
219
+ Customer: [_______]
220
+ Items: [___] [___]
221
+ [Submit]
222
+
223
+
224
+ Label each field:
225
+ Customer ← from CreateOrder command
226
+ Items ← user selection
227
+ ```
228
+
229
+ 3. **Trace Data** (3 min)
230
+ ```
231
+ "Where does this data go?"
232
+ → "Into the event"
233
+ → "Then what screen shows next?"
234
+ → Draw: Confirmation screen with same data
235
+ ```
236
+
237
+ 4. **Identify Missing** (2 min)
238
+ ```
239
+ "Can we see everything we need on this screen?"
240
+ → If missing: "We'll need to add that to the event"
241
+ → Add to list of clarifications
242
+ ```
243
+
244
+ **Time per screen**: 5-7 minutes (don't perfect, iterate)
245
+
246
+ ### Step 4: Identifying Inputs (Commands)
247
+
248
+ **Objective**: Map user actions to commands
249
+
250
+ **Facilitation Flow**:
251
+
252
+ 1. **Extract from Storyboards** (5 min)
253
+ ```
254
+ "Looking at the screens, what are users doing?"
255
+ → "Clicking Submit" → "CreateOrder command"
256
+ → "Selecting payment" → "ConfirmOrder command"
257
+
258
+ Write commands clearly
259
+ ```
260
+
261
+ 2. **Identify Processor Inputs** (5 min)
262
+ ```
263
+ "What does the system do automatically?"
264
+ → "Check payment gateway" → "AuthorizePayment command"
265
+ → "Reserve inventory" → "ReserveInventory command"
266
+
267
+ Mark these as [ Automation]
268
+ ```
269
+
270
+ 3. **Specify Data** (5 min)
271
+ ```
272
+ "For each command, what data does it need?"
273
+
274
+ CreateOrder needs:
275
+ - customerId (from form/session)
276
+ - items (from form selection)
277
+ - shippingAddress (from form)
278
+
279
+ Write this clearly
280
+ ```
281
+
282
+ 4. **Validation Questions** (5 min)
283
+ ```
284
+ "What validation must pass?"
285
+
286
+ CreateOrder:
287
+ - Customer must exist
288
+ - Items must not be empty
289
+ - Address must be complete
290
+
291
+ Write these as business rules
292
+ ```
293
+
294
+ ### Step 5: Identifying Outputs (Events & Views)
295
+
296
+ **Objective**: Specify events and read models
297
+
298
+ **Facilitation Flow**:
299
+
300
+ 1. **Events from Commands** (5 min)
301
+ ```
302
+ "For each command, what event happens?"
303
+
304
+ CreateOrder → OrderCreated (what fields?)
305
+ Specify exactly what fields:
306
+ - orderId (generated)
307
+ - customerId (from command)
308
+ - items (from command)
309
+ - total (calculated)
310
+ ```
311
+
312
+ 2. **Read Models** (5 min)
313
+ ```
314
+ "What views do users need?"
315
+ → "Order status view"
316
+ → "Order list view"
317
+ → "Order detail view"
318
+
319
+ "What data in each?"
320
+ → Status view: All order details
321
+ → List view: Summary only
322
+ ```
323
+
324
+ 3. **Event → View Mapping** (5 min)
325
+ ```
326
+ "OrderCreated → Status View shows:"
327
+ - orderId
328
+ - items
329
+ - total
330
+ - status=Draft
331
+
332
+ "OrderConfirmed → Status View updates:"
333
+ - status=Confirmed
334
+ - confirmedAt timestamp
335
+ ```
336
+
337
+ ### Step 6: Apply Conway's Law (System Boundaries)
338
+
339
+ **Objective**: Identify systems and responsibilities
340
+
341
+ **Facilitation Flow**:
342
+
343
+ 1. **Ask the Question** (2 min)
344
+ ```
345
+ "Who does what?"
346
+
347
+ "Is payment something WE do or does an external system?"
348
+ → If external: PaymentGateway system
349
+ ```
350
+
351
+ 2. **Draw Boundaries** (5 min)
352
+ ```
353
+ Visually separate:
354
+
355
+ Our System:
356
+ Order service
357
+ Inventory service
358
+ Notification service
359
+
360
+ External:
361
+ Payment gateway
362
+ Fulfillment provider
363
+ ```
364
+
365
+ 3. **Clarify Ownership** (5 min)
366
+ ```
367
+ "Which system owns each event?"
368
+
369
+ OrderCreated → Our Order system
370
+ PaymentAuthorized → Payment system (external) or our bridge?
371
+ InventoryReserved → Our Inventory system
372
+ ```
373
+
374
+ 4. **Identify Team Structure** (5 min)
375
+ ```
376
+ "Who builds what?"
377
+
378
+ → Team A: Order service
379
+ → Team B: Payment processor
380
+ → Team C: Inventory management
381
+
382
+ Boundaries = team boundaries (Conway's Law)
383
+ ```
384
+
385
+ ### Step 7: Elaborating Scenarios (Given-When-Then)
386
+
387
+ **Objective**: Specify behavior with Gherkin format
388
+
389
+ **Facilitation Flow**:
390
+
391
+ 1. **Happy Path First** (8 min)
392
+ ```
393
+ "Let's write the success case. What's the normal flow?"
394
+
395
+ Scenario: Create order successfully
396
+ Given: Customer exists, products exist
397
+ When: Customer creates order with items
398
+ Then: OrderCreated event produced, status=Draft
399
+
400
+ Write on board/doc with team reviewing
401
+ ```
402
+
403
+ 2. **Failure Cases** (8 min)
404
+ ```
405
+ "What can go wrong?"
406
+
407
+ Scenario: Reject with invalid customer
408
+ Given: Customer ID doesn't exist
409
+ When: CreateOrder attempted
410
+ Then: Command rejected, no event
411
+
412
+ → Quick, obvious failures
413
+ → Don't overthink
414
+ ```
415
+
416
+ 3. **State Validation** (5 min)
417
+ ```
418
+ "What if the order is in wrong state?"
419
+
420
+ Scenario: Can't confirm already-confirmed order
421
+ Given: Order already in Confirmed state
422
+ When: Confirm attempted again
423
+ Then: Rejected
424
+ ```
425
+
426
+ 4. **Alternative Paths** (5 min)
427
+ ```
428
+ "Any different ways this could work?"
429
+
430
+ Scenario: Can't confirm order with no payment method
431
+ Scenario: Can retry if payment fails
432
+
433
+ Capture alternatives quickly
434
+ ```
435
+
436
+ **Time**: 5-7 min per command/view, don't perfect
437
+
438
+ ## Facilitation Techniques
439
+
440
+ ### Handling Different Personalities
441
+
442
+ **Quiet developers**:
443
+ - Direct question: "Alex, what do you think about this?"
444
+ - Don't embarrass, just engage
445
+ - "Good point, add that"
446
+
447
+ **Dominating voices**:
448
+ - Politely redirect: "Thanks, let me get input from others"
449
+ - "Interesting, let's capture that and check with the team"
450
+ - Keep energy high so they feel heard
451
+
452
+ **Skeptics**:
453
+ - Take seriously: "What's your concern?"
454
+ - Don't dismiss: "That's valid, let's think about it"
455
+ - Sometimes reveal real issues
456
+
457
+ **Idea-generators**:
458
+ - Capture everything: "Good ideas, adding them"
459
+ - Sort later: Don't slow momentum
460
+ - "We'll come back to that"
461
+
462
+ ### Keeping Energy & Pace
463
+
464
+ ```
465
+ Good pacing:
466
+ - 5-7 min per item (not 20 min perfecting one detail)
467
+ - Move quickly between steps
468
+ - Regular breaks (every 45-60 min)
469
+ - Stand, don't sit (keeps energy up)
470
+
471
+ Warning signs of bad pacing:
472
+ - People checking phones
473
+ - Someone talking endlessly
474
+ - "Um... let me think..." (too hard)
475
+ - Fatigue setting in
476
+
477
+ Recovery:
478
+ - Take 10-min break
479
+ - Change activity (switch from drawing to writing)
480
+ - Refocus on goals: "We're 60% done, here's what we still need"
481
+ ```
482
+
483
+ ### Dealing with Disagreement
484
+
485
+ ```
486
+ Situation: Two people disagree on event
487
+
488
+ Option A: "Both are valid? Can we combine?"
489
+ Option B: "Let's see if later steps clarify?"
490
+ Option C: "Let's note both and revisit"
491
+
492
+ Don't: Get stuck on one issue
493
+ Do: Keep moving, document decision
494
+
495
+ Decision-making:
496
+ 1. If there's a clear right answer → Use it
497
+ 2. If reasonable people disagree → Document both, move on
498
+ 3. If it doesn't matter now → Defer to implementation team
499
+ ```
500
+
501
+ ## Remote Workshop Adaptations
502
+
503
+ ### Virtual vs. Physical
504
+
505
+ **Advantages of virtual**:
506
+ - Can record (perfect reference)
507
+ - Can save digital artifacts
508
+ - Easier for distributed teams
509
+ - Can use video recordings in onboarding
510
+
511
+ **Challenges**:
512
+ - Less natural interaction
513
+ - Harder to facilitate drawing
514
+ - Zoom fatigue
515
+ - Side conversations harder
516
+
517
+ **Adaptations**:
518
+ ```
519
+ 1. Shorter sessions (90 min instead of 4 hours)
520
+ 2. More breaks (10 min every 30 min)
521
+ 3. Structured input (everyone adds ideas before discussing)
522
+ 4. Clearer roles (one person drawing, one taking notes)
523
+ 5. Recording on (for those who can't attend live)
524
+ 6. Async follow-up (give people time to digest)
525
+ ```
526
+
527
+ ## Post-Workshop
528
+
529
+ ### Immediate (Same Day)
530
+
531
+ 1. **Capture on Document** - Photograph/screenshot all artifacts
532
+ - Type up handwritten notes
533
+ - Create digital version of diagram
534
+
535
+ 2. **Share with Team** - Everyone gets copy
536
+ - Add notes: "Why did we choose this?"
537
+ - Link to recordings
538
+
539
+ 3. **Identify Gaps** - Note unclear items
540
+ - Schedule quick follow-up if needed
541
+
542
+ ### Follow-Up (1-2 Days)
543
+
544
+ 1. **Distribute Summary** - What we covered
545
+ - Key decisions
546
+ - Outstanding questions
547
+
548
+ 2. **Request Feedback** - Any clarifications needed?
549
+ - Anything we missed?
550
+ - Concerns?
551
+
552
+ 3. **Next Steps** - Next workshop scheduled?
553
+ - Who's doing design/implementation?
554
+ - When do we start?
555
+
556
+ ## Multi-Day Workshop Schedule
557
+
558
+ For large or complex projects:
559
+
560
+ ```
561
+ Day 1 (Steps 1-3): 4 hours
562
+ - 9am-10am: Brainstorming events (Step 1)
563
+ - 10am-11am: Plotting timeline (Step 2)
564
+ - Break: 11am-11:15am
565
+ - 11:15am-1pm: Storyboarding (Step 3)
566
+ - Lunch: 1pm-2pm
567
+
568
+ Day 2 (Steps 4-7): 4 hours
569
+ - 9am-10am: Identifying inputs (Step 4)
570
+ - 10am-11am: Identifying outputs (Step 5)
571
+ - Break: 11am-11:15am
572
+ - 11:15am-12:30pm: System boundaries (Step 6)
573
+ - 12:30pm-1pm: Scenario planning (Step 7 intro)
574
+ - Lunch/break
575
+
576
+ Day 3 (Scenarios & Polish): 3 hours
577
+ - 9am-12pm: Elaborate scenarios (Step 7, detailed)
578
+ - Document findings
579
+ - Plan next steps
580
+ ```
581
+
582
+ ## Facilitation Checklist
583
+
584
+ ### Before Workshop
585
+ - [ ] Invitations sent 1 week prior
586
+ - [ ] Right people confirmed attending
587
+ - [ ] Room/tech tested
588
+ - [ ] Materials prepared (sticky notes, markers, templates)
589
+ - [ ] Facilitator briefing done
590
+ - [ ] Objectives clear to all
591
+
592
+ ### During Workshop
593
+ - [ ] Started on time
594
+ - [ ] Explained purpose and format
595
+ - [ ] Each step has clear objective
596
+ - [ ] Captured everything (photo/digital)
597
+ - [ ] Timing maintained (didn't get stuck)
598
+ - [ ] Everyone participated
599
+ - [ ] Energy and engagement stayed high
600
+ - [ ] Decisions documented
601
+ - [ ] Ended on time
602
+
603
+ ### After Workshop
604
+ - [ ] Artifacts digitized and shared
605
+ - [ ] Summary created
606
+ - [ ] Gaps identified
607
+ - [ ] Feedback requested
608
+ - [ ] Next steps scheduled
609
+ - [ ] Team has clear deliverables
610
+
611
+ ## Success Indicators
612
+
613
+ **Good workshop**:
614
+ - Everyone participated
615
+ - Decisions were made and documented
616
+ - Artifacts created and shared
617
+ - Team understands the model
618
+ - Clear next steps
619
+ - Energy was good throughout
620
+
621
+ **Needs improvement**:
622
+ - Some people quiet the whole time
623
+ - Unclear what we decided
624
+ - No clear artifacts
625
+ - "Are we building this in Java or Python?" (forgotten basics)
626
+ - People left tired/frustrated