@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,542 @@
1
+ ---
2
+ name: eventmodeling-checking-completeness
3
+ description: "Step 8 of Event Modeling - Completeness Check. Verify every field has origin and destination. Ensure complete event model before code generation. Use after all scenarios defined. Do not use for: architectural validation against event sourcing principles (use eventmodeling-validating-event-models) or elaborating Given-When-Then specs (use eventmodeling-elaborating-scenarios)."
4
+ allowed-tools:
5
+ - Write
6
+ - Bash
7
+ ---
8
+
9
+ # Checking Completeness
10
+
11
+ > **Before doing anything else**, invoke the `connect` skill to resolve `TOKEN`, `BOARD_ID`, `ORG_ID`, and `BASE_URL`. Then invoke the `learn-eventmodelers-api` skill to load the full API reference. Do not proceed until both skills have been loaded.
12
+
13
+ ## Board Context
14
+
15
+ Before starting, read the current board state to drive the analysis from what is actually on the board rather than relying solely on conversation context:
16
+
17
+ ```bash
18
+ # All nodes (events, commands, read models, screens)
19
+ curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
20
+ "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
21
+ curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
22
+ "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
23
+ curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
24
+ "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
25
+ ```
26
+
27
+ Use these results as the source of truth for the completeness check.
28
+
29
+ **Before treating any nodes as duplicates**: check each node's `data.linkedTo` field (see `learn-eventmodelers-api`). A node with `linkedTo` set is an intentional **linked copy** of another node — placed elsewhere on the timeline for readability, not a modeling defect. When two or more nodes share a title/type:
30
+ - If any of them carries `linkedTo`, do not report a duplicate. This is expected, not a gap.
31
+ - Never propose deleting, suppressing, or "cleaning up" either node in a linked pair. Specifically, never target the node that has *no* `linkedTo` (the original) for removal — copies reference it via `moveToWidget=<originNodeId>`, so deleting it breaks every copy.
32
+ - Only flag same-titled nodes as an actual duplicate gap when **none** of them has `linkedTo` — i.e., they are genuinely two independent, unlinked nodes describing the same concept.
33
+
34
+ After the analysis, use the `handle-comment` skill to post findings on relevant nodes — `TASK` for required fixes, `QUESTION` for gaps that need clarification.
35
+
36
+ ## Workflow
37
+
38
+ Perform comprehensive completeness check:
39
+
40
+ ### 1. Field Origin & Destination Matrix
41
+ For every field in every event, verify source and use:
42
+
43
+ ```text
44
+ Event: OrderCreated
45
+
46
+ Field: orderId
47
+ Origin: Generated by system (UUID)
48
+ Destinations:
49
+ OrderConfirmed event (references)
50
+ OrderStatusView (displays)
51
+ OrderListView (displays)
52
+ OrderShipped event (references)
53
+ Status: Complete
54
+
55
+ Field: customerId
56
+ Origin: CreateOrder command (from UI)
57
+ Destinations:
58
+ OrderStatusView (displays)
59
+ OrderListView (displays)
60
+ Inventory System (knows who ordered)
61
+ Status: Complete
62
+
63
+ Field: items[]
64
+ Origin: CreateOrder command (user selects)
65
+ Destinations:
66
+ OrderStatusView (displays)
67
+ Inventory System (what to reserve)
68
+ Fulfillment System (what to ship)
69
+ Status: Complete
70
+
71
+ Field: total
72
+ Origin: Calculated from items[] and unit prices
73
+ Destinations:
74
+ OrderStatusView (displays)
75
+ OrderListView (displays)
76
+ PaymentSystem (amount to charge)
77
+ Accounting (for reconciliation)
78
+ Status: Complete
79
+
80
+ Field: shippingAddress
81
+ Origin: CreateOrder command (user enters)
82
+ Destinations:
83
+ OrderStatusView (displays)
84
+ Fulfillment System (where to ship)
85
+ Carrier (delivery address)
86
+ Status: Complete
87
+
88
+ Field: createdAt
89
+ Origin: System timestamp when event created
90
+ Destinations:
91
+ OrderStatusView (displays)
92
+ OrderListView (displays)
93
+ Metrics (average order age)
94
+ Status: Complete
95
+ ```
96
+
97
+ ### 2. Check All Commands
98
+ Verify every command input is captured:
99
+
100
+ ```text
101
+ Command: CreateOrder
102
+ Input: customerId, items[], shippingAddress
103
+ customerId → OrderCreated.customerId
104
+ items[] → OrderCreated.items
105
+ shippingAddress → OrderCreated.shippingAddress
106
+ Status: All inputs captured
107
+
108
+ Command: ConfirmOrder
109
+ Input: orderId, paymentMethod
110
+ orderId → OrderConfirmed.orderId (implicit)
111
+ paymentMethod → OrderConfirmed.paymentMethod
112
+ Status: All inputs captured
113
+
114
+ Command: AuthorizePayment
115
+ Input: orderId, paymentId, authCode
116
+ orderId → PaymentAuthorized.orderId (implicit)
117
+ paymentId → PaymentAuthorized.paymentId
118
+ authCode → PaymentAuthorized.authCode
119
+ Status: All inputs captured
120
+ ```
121
+
122
+ ### 3. Check All Read Models
123
+ Verify read models have all needed data:
124
+
125
+ ```text
126
+ ReadModel: OrderStatusView
127
+ Needs to display:
128
+ orderId ← OrderCreated
129
+ customerId ← OrderCreated
130
+ status ← OrderConfirmed, PaymentAuthorized, etc.
131
+ items ← OrderCreated
132
+ total ← OrderCreated
133
+ createdAt ← OrderCreated
134
+ confirmedAt ← OrderConfirmed
135
+ paymentId ← PaymentAuthorized
136
+ paymentMethod ← OrderConfirmed
137
+ shipmentId ← OrderShipped
138
+ trackingNumber ← OrderShipped
139
+ Status: All fields sourced
140
+
141
+ ReadModel: OrderListView
142
+ Needs to display:
143
+ orderId ← OrderCreated
144
+ customerId ← OrderCreated
145
+ total ← OrderCreated
146
+ status ← OrderConfirmed, OrderCancelled, etc.
147
+ createdAt ← OrderCreated
148
+ Status: All fields sourced
149
+ ```
150
+
151
+ ### 4. Check Slice Coverage
152
+
153
+ Every column that holds a COMMAND or READMODEL node must have a slice defined (a SLICE_BORDER node on that column) — otherwise it can never be built as a feature. Skip columns whose COMMAND/READMODEL node has `data.linkedTo` set: it's a linked copy (see Board Context above), and only the original's column needs a slice.
154
+
155
+ ```bash
156
+ curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
157
+ "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SLICE_BORDER"
158
+ ```
159
+
160
+ Cross-reference each COMMAND/READMODEL node's column against the `columnId` of the SLICE_BORDER nodes:
161
+
162
+ ```text
163
+ Column: CreateOrder (COMMAND)
164
+ Slice defined? Yes — "Place Order"
165
+ Status: Covered
166
+
167
+ Column: OrderStatusView (READMODEL)
168
+ Slice defined? No
169
+ Status: Missing slice — flag as gap
170
+
171
+ Column: ConfirmOrder (COMMAND, linkedTo set — copy of the original in another column)
172
+ Slice defined? N/A — linked copy, exempt
173
+ Status: Skip
174
+ ```
175
+
176
+ ### 5. Check Event Stream Completeness
177
+ Verify no "missing" events:
178
+
179
+ ```text
180
+ Scenario: Order from creation to delivery
181
+
182
+ Timeline:
183
+ 1. OrderCreated (from CreateOrder command)
184
+ 2. OrderConfirmed (from ConfirmOrder command)
185
+ 3. PaymentAuthorized (from AuthorizePayment processor command)
186
+ 4. InventoryReserved (from ReserveInventory processor command)
187
+ 5. OrderShipped (from CreateShipment processor command)
188
+ 6. DeliveryConfirmed (from MarkDelivered processor command)
189
+
190
+ Missing events? None identified
191
+
192
+ Alternative paths:
193
+ - OrderCancelled (can happen after OrderCreated or OrderConfirmed)
194
+ - PaymentFailed (can happen during PaymentAuthorized)
195
+ - RefundInitiated (can happen after PaymentFailed or OrderCancelled)
196
+
197
+ Status: All paths covered
198
+ ```
199
+
200
+ ### 6. Check System Boundaries
201
+ Verify each system owns events:
202
+
203
+ ```text
204
+ Order System
205
+ Events: OrderCreated, OrderConfirmed, OrderCancelled
206
+ Processor: None (triggers other systems)
207
+ Status: Clean ownership
208
+
209
+ Payment System
210
+ Events: PaymentAuthorized, PaymentFailed, PaymentRefunded
211
+ Processor: PaymentAuthorizer (listens to OrderConfirmed)
212
+ Status: Clean ownership
213
+
214
+ Inventory System
215
+ Events: InventoryReserved, InventoryReleased
216
+ Processor: InventoryReserver (listens to PaymentAuthorized)
217
+ Status: Clean ownership
218
+
219
+ Fulfillment System
220
+ Events: OrderShipped, DeliveryConfirmed
221
+ Processor: ShipmentCreator (listens to InventoryReserved)
222
+ Status: Clean ownership
223
+
224
+ Notification System
225
+ Events: None (no persistence, info-only)
226
+ Processor: Notifier (listens to all events)
227
+ Status: Cross-cutting concern
228
+ ```
229
+
230
+ ### 7. Define Workflow Step Contracts
231
+ Each workflow step is a contract between the previous step and the next. Document preconditions and postconditions:
232
+
233
+ ```text
234
+ Workflow Step 1: CreateOrder (Step Owns: Order Creation)
235
+
236
+ Preconditions (what must exist before this step):
237
+ - Customer must exist
238
+ - Products must exist in catalog
239
+ - User must be authenticated
240
+
241
+ Postconditions (what exists after this step):
242
+ - OrderCreated event exists
243
+ - Event contains: orderId, customerId, items, total, shippingAddress, createdAt
244
+
245
+ Contract: Any system can assume if these postconditions are true,
246
+ the order has been properly created through this step.
247
+
248
+ --- Workflow Step 2: ConfirmOrder (Step Owns: Order Confirmation)
249
+
250
+ Preconditions (depends on Step 1 postcondition):
251
+ - OrderCreated event must exist ( from Step 1 contract)
252
+ - Customer must select payment method
253
+
254
+ Postconditions (what exists after this step):
255
+ - OrderConfirmed event exists
256
+ - Event contains: orderId, paymentMethod, confirmedAt
257
+
258
+ Contract: Any system can assume if these postconditions are true,
259
+ the order has been properly confirmed.
260
+
261
+ --- Workflow Step 3: AuthorizePayment (Step Owns: Payment Authorization)
262
+
263
+ Preconditions (depends on Step 2 postcondition):
264
+ - OrderConfirmed event must exist ( from Step 2 contract)
265
+ - Payment method must be valid
266
+
267
+ Postconditions (what exists after this step):
268
+ - PaymentAuthorized event exists
269
+ - Event contains: paymentId, authCode, amount
270
+
271
+ Contract: Once this postcondition is true, next steps can proceed
272
+ without re-checking payment (trust the contract).
273
+ ```
274
+
275
+ **Why Contracts Matter for Parallel Development**:
276
+ ```text
277
+ Team A: Works on CreateOrder (Step 1)
278
+ → Knows postcondition: OrderCreated with specific fields
279
+ → Knows other teams depend on this
280
+
281
+ Team B: Works on ConfirmOrder (Step 2)
282
+ → Can start immediately, doesn't wait for Step 1 implementation
283
+ → Just needs to know: "I expect OrderCreated event with these fields"
284
+ → Writes tests that mock the OrderCreated event
285
+ → When Step 1 is done, tests pass immediately
286
+
287
+ Team C: Works on AuthorizePayment (Step 3)
288
+ → Can start immediately
289
+ → Expects: OrderConfirmed event with these fields
290
+ → When Step 2 is done, tests pass immediately
291
+
292
+ Result: 3 teams working in parallel instead of waiting sequentially!
293
+ ```
294
+
295
+ ### 8. Check Field Traceability
296
+ Matrix of all fields origin → destination:
297
+
298
+ ```markdown
299
+ | Field | Event | Command | Read Model | Processor |
300
+ |-------|-------|---------|-----------|-----------|
301
+ | orderId | OrderCreated | - | All views | All |
302
+ | customerId | OrderCreated | CreateOrder | OrderStatusView | - |
303
+ | items | OrderCreated | CreateOrder | List/Status views | Inventory |
304
+ | total | OrderCreated | - | List/Status views | - |
305
+ | paymentId | PaymentAuthorized | AuthorizePayment | StatusView | Inventory |
306
+ | shipmentId | OrderShipped | CreateShipment | StatusView | Notification |
307
+ | trackingNumber | OrderShipped | - | TrackingView | Notification |
308
+
309
+ Status: All fields traceable
310
+ ```
311
+
312
+ ### 9. Identify Gaps
313
+ Document any missing pieces:
314
+
315
+ ```text
316
+ Analysis: Are there any missing fields?
317
+ - Estimated delivery date?
318
+ → Need to add to OrderShipped event
319
+ → Can be calculated from carrier
320
+ → Add to ShipmentTrackingView
321
+
322
+ - Cancellation reason?
323
+ → Already in OrderCancelled event
324
+
325
+ - Payment failure reason?
326
+ → Already in PaymentFailed event
327
+
328
+ - Refund status?
329
+ → Need to track in RefundInitiated event
330
+ → Add to PaymentStatusView
331
+
332
+ Actions taken:
333
+ Add estimatedDelivery to OrderShipped
334
+ Add refundStatus to PaymentStatusView
335
+ Add refundInitiatedAt to OrderStatusView
336
+ ```
337
+
338
+ ## Output Format
339
+
340
+ Present as:
341
+
342
+ ```markdown
343
+ # Completeness Check: [Domain Name]
344
+
345
+ ## Workflow Step Contracts
346
+
347
+ ### Step 1: CreateOrder
348
+
349
+ **Preconditions**:
350
+ - Customer exists in system
351
+ - Products exist in catalog
352
+
353
+ **Postconditions**:
354
+ - OrderCreated event exists with fields: [list]
355
+
356
+ **Teams that depend on this contract**: [All downstream teams]
357
+
358
+ ---
359
+
360
+ ### Step 2: ConfirmOrder
361
+
362
+ **Preconditions** (depends on Step 1):
363
+ - OrderCreated event exists
364
+
365
+ **Postconditions**:
366
+ - OrderConfirmed event exists with fields: [list]
367
+
368
+ --- [Continue for each workflow step]
369
+
370
+ ---
371
+
372
+ ## Field Traceability Matrix
373
+
374
+ ### Events
375
+
376
+ | Event | Field | Origin | Destinations | Status |
377
+ |-------|-------|--------|-------------|--------|
378
+ | OrderCreated | orderId | System | ConfirmOrder, Views | |
379
+ | OrderCreated | customerId | CreateOrder | All views | |
380
+ | OrderCreated | items | CreateOrder | Inventory, Views | |
381
+ | OrderCreated | total | Calculated | Views, Payment | |
382
+ | OrderConfirmed | paymentId | AuthorizePayment | Views, Accounting | |
383
+ | OrderShipped | trackingNumber | Carrier | TrackingView | |
384
+
385
+ ---
386
+
387
+ ## System Ownership Verification
388
+
389
+ ### Order System
390
+ - Events owned: OrderCreated, OrderConfirmed, OrderCancelled
391
+ - Completeness: All order lifecycle events present
392
+
393
+ ### Payment System
394
+ - Events owned: PaymentAuthorized, PaymentFailed, PaymentRefunded
395
+ - Completeness: All payment states covered
396
+
397
+ ---
398
+
399
+ ## Command → Event Verification
400
+
401
+ | Command | Input | Event | Captured |
402
+ |---------|-------|-------|----------|
403
+ | CreateOrder | customerId, items, address | OrderCreated | |
404
+ | ConfirmOrder | paymentMethod | OrderConfirmed | |
405
+ | AuthorizePayment | paymentId, authCode | PaymentAuthorized | |
406
+
407
+ ---
408
+
409
+ ## Slice Coverage
410
+
411
+ | Column | Node | Has Slice? | Status |
412
+ |--------|------|-----------|--------|
413
+ | 1 | CreateOrder (COMMAND) | Yes — "Place Order" | |
414
+ | 2 | OrderStatusView (READMODEL) | No | Missing slice |
415
+ | 3 | ConfirmOrder (COMMAND, linked copy) | N/A | Exempt (linkedTo set) |
416
+
417
+ ---
418
+
419
+ ## Read Model Coverage
420
+
421
+ ### OrderStatusView
422
+ - All relevant event data included
423
+ - All user display needs met
424
+ - All processor decision fields present
425
+
426
+ ### OrderListView
427
+ - Summary fields captured
428
+ - Filtering/sorting fields present
429
+ - Linked to OrderStatusView for details
430
+
431
+ ---
432
+
433
+ ## Gap Analysis
434
+
435
+ ### Issues Found
436
+ 1. Estimated delivery date missing
437
+ - Fix: Add to OrderShipped event
438
+ - Type: string (ISO 8601 date)
439
+ - Source: Calculated from carrier API
440
+ - Status: Will add in next iteration
441
+
442
+ 2. Refund tracking incomplete
443
+ - Fix: Add RefundInitiated event timestamp
444
+ - Fix: Add refund status to PaymentStatusView
445
+ - Status: Will add in next iteration
446
+
447
+ ### No Critical Gaps
448
+ - All events properly sourced
449
+ - All command inputs captured
450
+ - All read models have data
451
+ - Event flow complete
452
+ - System boundaries clear
453
+
454
+ ---
455
+
456
+ ## Readiness Assessment
457
+
458
+ **Overall Completeness**: 95%
459
+
460
+ **Blockers**: None
461
+
462
+ **Ready for Code Generation**: YES
463
+
464
+ **Minor Improvements**:
465
+ - Add estimated delivery date (non-blocking)
466
+ - Enhance refund tracking (non-blocking)
467
+
468
+ **Recommendation**: Proceed to code generation phase.
469
+ ```
470
+
471
+ ## Quality Checklist
472
+
473
+ - [ ] Every field has clear origin
474
+ - [ ] Every field has identified destinations
475
+ - [ ] All command inputs are captured
476
+ - [ ] All read models have sources
477
+ - [ ] **Every column with a COMMAND or READMODEL node has a slice defined (unless it's a linked copy)**
478
+ - [ ] Event flow is complete
479
+ - [ ] No events are missing
480
+ - [ ] System boundaries are clear
481
+ - [ ] Alternative paths covered
482
+ - [ ] Error paths documented
483
+ - [ ] Processors are identified
484
+ - [ ] No circular dependencies
485
+ - [ ] All scenarios have data sources
486
+ - [ ] **Workflow step contracts defined for each step**
487
+ - [ ] **Each contract has explicit preconditions**
488
+ - [ ] **Each contract has explicit postconditions**
489
+ - [ ] **Dependencies between steps documented**
490
+ - [ ] **Teams can work in parallel based on contracts**
491
+
492
+ ### CRITICAL: Event vs Read Model Validation
493
+ - [ ] **Reviewed every "calculated event"**: Is it a domain fact or pure calculation?
494
+ - [ ] **No aggregation events**: Totals, averages, counts are read models, NOT events
495
+ - [ ] **Recalculated state identified**: If a value changes multiple times, it's a read model
496
+ - [ ] **Processor outputs categorized**:
497
+ - [ ] Facts → Events (e.g., PaymentAuthorized)
498
+ - [ ] Calculations → Read Models (e.g., SellerRatingCalculated)
499
+ - [ ] Notifications → No event/model (info-only)
500
+ - [ ] **History tracking correct**: Read models track history in `history[]`, not as separate events
501
+
502
+ ## Completeness Criteria
503
+
504
+ The model is **complete** when:
505
+ Every event field has a source (command or system or is marked as generated)
506
+ Every command input becomes event/state data
507
+ Every read model field has event source
508
+ All state transitions are covered
509
+ Alternative flows are documented
510
+ Error conditions are handled
511
+ System boundaries are clear
512
+ No "magic" data appears without source
513
+ Data flows logically end-to-end
514
+ All stakeholder needs are met
515
+ **Events are facts (immutable domain actions)** **Read models are projections (derived/calculated state)** **No calculated events exist** (aggregations/totals are read models)
516
+ **Every COMMAND/READMODEL column has a slice defined**, except linked copies
517
+
518
+ ## Common Incompleteness Issues
519
+
520
+ | Issue | Example | Fix |
521
+ |-------|---------|-----|
522
+ | Missing event | "No event for failure" | Add failure event |
523
+ | Orphaned data | "Field in view, not in event" | Add field to event |
524
+ | Circular flow | "A needs B, B needs A" | Redesign boundary |
525
+ | Missing field | "View needs date, event has none" | Add field to event |
526
+ | Unclear origin | "Where does this come from?" | Trace back to source |
527
+ | **Calculated event** | SellerRatingCalculated, InventoryTotal | **Move to read model** (recalculated state is projection) |
528
+ | **False duplicate** | Two nodes share a title | Check `data.linkedTo` on both before reporting — a linked copy is intentional, not a gap |
529
+ | **Missing slice** | COMMAND/READMODEL column with no SLICE_BORDER | Define a slice for that column (unless it's a linked copy) |
530
+
531
+ ## Reference Documentation
532
+
533
+ - **[Security Analysis with Event Modeling](references/security-analysis-with-event-modeling.md)** — How to use the field traceability matrix and data flow visibility from this step to conduct a systematic security review: identifying trust boundaries, privilege escalation paths, and data exposure risks across the event model.
534
+
535
+ ## Next Steps
536
+
537
+ If completeness check passes:
538
+ → Proceed to code generation
539
+
540
+ If gaps found:
541
+ → Return to appropriate step to fix
542
+ → Re-run completeness check