@eventmodelers/cli 1.0.36 → 1.0.38
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.
- package/package.json +1 -1
- package/shared/skills/learn-eventmodelers-api/SKILL.md +22 -13
- package/stacks/modeling-kit/templates/.claude/skills/add-next-slice/SKILL.md +2 -23
- package/stacks/modeling-kit/templates/.claude/skills/add-next-slice/references/api-fallback.md +11 -0
- package/stacks/modeling-kit/templates/.claude/skills/analyze-existing-model/SKILL.md +6 -57
- package/stacks/modeling-kit/templates/.claude/skills/analyze-existing-model/references/api-fallback.md +68 -0
- package/stacks/modeling-kit/templates/.claude/skills/attributes/SKILL.md +4 -61
- package/stacks/modeling-kit/templates/.claude/skills/attributes/references/api-fallback.md +39 -0
- package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/SKILL.md +9 -53
- package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/references/api-fallback.md +63 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-applying-conways-law/SKILL.md +12 -380
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-applying-conways-law/references/examples.md +329 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +45 -290
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/api-fallback.md +97 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/examples.md +35 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/SKILL.md +15 -410
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/references/api-fallback.md +22 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/references/examples.md +397 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-core-rules/SKILL.md +182 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-automation-chains/SKILL.md +148 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-automation-chains/references/api-fallback.md +21 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-event-models/SKILL.md +48 -448
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-event-models/references/examples.md +167 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md +31 -380
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/references/api-fallback.md +31 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/references/examples.md +216 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/SKILL.md +33 -393
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/references/api-fallback.md +79 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/references/examples.md +282 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/SKILL.md +54 -454
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/references/api-fallback.md +67 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/references/examples.md +273 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-interview-protocol/SKILL.md +31 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/SKILL.md +37 -184
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/domain-patterns.md +58 -99
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/patterns.md +82 -163
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/SKILL.md +86 -78
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/references/api-fallback.md +51 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-plotting-events/SKILL.md +5 -5
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-plotting-events/references/api-fallback.md +10 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/SKILL.md +22 -51
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/api-fallback.md +41 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/examples.md +12 -9
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/patterns.md +1 -10
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/SKILL.md +29 -382
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/references/api-fallback.md +77 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/references/examples.md +271 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-translating-external-events/SKILL.md +12 -349
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-translating-external-events/references/examples.md +306 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models/SKILL.md +69 -107
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models/references/api-fallback.md +14 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models-checklist/SKILL.md +75 -160
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models-checklist/references/api-fallback.md +14 -0
- package/stacks/modeling-kit/templates/.claude/skills/examples/SKILL.md +3 -110
- package/stacks/modeling-kit/templates/.claude/skills/examples/references/api-fallback.md +118 -0
- package/stacks/modeling-kit/templates/.claude/skills/handle-comment/SKILL.md +5 -25
- package/stacks/modeling-kit/templates/.claude/skills/handle-comment/references/api-fallback.md +35 -0
- package/stacks/modeling-kit/templates/.claude/skills/html-screen/SKILL.md +9 -44
- package/stacks/modeling-kit/templates/.claude/skills/html-screen/references/api-fallback.md +51 -0
- package/stacks/modeling-kit/templates/.claude/skills/place-element/SKILL.md +34 -180
- package/stacks/modeling-kit/templates/.claude/skills/place-element/references/api-fallback.md +203 -0
- package/stacks/modeling-kit/templates/.claude/skills/storyboard/SKILL.md +14 -81
- package/stacks/modeling-kit/templates/.claude/skills/storyboard/references/api-fallback.md +74 -0
- package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/SKILL.md +4 -45
- package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/references/api-fallback.md +44 -0
- package/stacks/modeling-kit/templates/.claude/skills/timeline/SKILL.md +19 -88
- package/stacks/modeling-kit/templates/.claude/skills/timeline/references/api-fallback.md +91 -0
- package/stacks/modeling-kit/templates/.claude/skills/update-prompt-status/SKILL.md +1 -9
- package/stacks/modeling-kit/templates/.claude/skills/update-prompt-status/references/api-fallback.md +14 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-integrating-legacy-systems/SKILL.md +0 -674
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/snapshotting.md +0 -204
package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/SKILL.md
CHANGED
|
@@ -10,6 +10,8 @@ allowed-tools:
|
|
|
10
10
|
|
|
11
11
|
> **Before doing anything else**, invoke the `connect` skill — if not already connected — to resolve `TOKEN`, `BOARD_ID`, `ORG_ID`, and `BASE_URL`. Do not proceed until it has completed. Consult `learn-eventmodelers-api` only if you need to look up a specific endpoint or field this file doesn't cover — don't load it eagerly.
|
|
12
12
|
|
|
13
|
+
This step applies the shared element rules in **`eventmodeling-core-rules`** — read it once per session if you haven't already; it defines what a COMMAND/EVENT/READMODEL/SCREEN/AUTOMATION is, how each is named, and the anti-patterns to reject, so this step doesn't restate them.
|
|
14
|
+
|
|
13
15
|
Prefer `mcp__eventmodelers__*` tools when available (registered by the `connect` skill) — the curl blocks below are the fallback for sessions without MCP connected.
|
|
14
16
|
|
|
15
17
|
## Board Context
|
|
@@ -23,16 +25,7 @@ mcp__eventmodelers__get_nodes { "boardId": "<BOARD_ID>", "type": "COMMAND" }
|
|
|
23
25
|
mcp__eventmodelers__get_nodes { "boardId": "<BOARD_ID>", "type": "READMODEL" }
|
|
24
26
|
```
|
|
25
27
|
|
|
26
|
-
**Fallback (no MCP):**
|
|
27
|
-
```bash
|
|
28
|
-
# All nodes (events, commands, read models, screens)
|
|
29
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
30
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
|
|
31
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
32
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
|
|
33
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
34
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
|
|
35
|
-
```
|
|
28
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Board Context".
|
|
36
29
|
|
|
37
30
|
Use these results as the source of truth for the completeness check.
|
|
38
31
|
|
|
@@ -48,115 +41,13 @@ After the analysis, use the `handle-comment` skill to post findings on relevant
|
|
|
48
41
|
Perform comprehensive completeness check:
|
|
49
42
|
|
|
50
43
|
### 1. Field Origin & Destination Matrix
|
|
51
|
-
For every field in every event, verify
|
|
52
|
-
|
|
53
|
-
```text
|
|
54
|
-
Event: OrderCreated
|
|
55
|
-
|
|
56
|
-
Field: orderId
|
|
57
|
-
Origin: Generated by system (UUID)
|
|
58
|
-
Destinations:
|
|
59
|
-
OrderConfirmed event (references)
|
|
60
|
-
OrderStatusView (displays)
|
|
61
|
-
OrderListView (displays)
|
|
62
|
-
OrderShipped event (references)
|
|
63
|
-
Status: Complete
|
|
64
|
-
|
|
65
|
-
Field: customerId
|
|
66
|
-
Origin: CreateOrder command (from UI)
|
|
67
|
-
Destinations:
|
|
68
|
-
OrderStatusView (displays)
|
|
69
|
-
OrderListView (displays)
|
|
70
|
-
Inventory System (knows who ordered)
|
|
71
|
-
Status: Complete
|
|
72
|
-
|
|
73
|
-
Field: items[]
|
|
74
|
-
Origin: CreateOrder command (user selects)
|
|
75
|
-
Destinations:
|
|
76
|
-
OrderStatusView (displays)
|
|
77
|
-
Inventory System (what to reserve)
|
|
78
|
-
Fulfillment System (what to ship)
|
|
79
|
-
Status: Complete
|
|
80
|
-
|
|
81
|
-
Field: total
|
|
82
|
-
Origin: Calculated from items[] and unit prices
|
|
83
|
-
Destinations:
|
|
84
|
-
OrderStatusView (displays)
|
|
85
|
-
OrderListView (displays)
|
|
86
|
-
PaymentSystem (amount to charge)
|
|
87
|
-
Accounting (for reconciliation)
|
|
88
|
-
Status: Complete
|
|
89
|
-
|
|
90
|
-
Field: shippingAddress
|
|
91
|
-
Origin: CreateOrder command (user enters)
|
|
92
|
-
Destinations:
|
|
93
|
-
OrderStatusView (displays)
|
|
94
|
-
Fulfillment System (where to ship)
|
|
95
|
-
Carrier (delivery address)
|
|
96
|
-
Status: Complete
|
|
97
|
-
|
|
98
|
-
Field: createdAt
|
|
99
|
-
Origin: System timestamp when event created
|
|
100
|
-
Destinations:
|
|
101
|
-
OrderStatusView (displays)
|
|
102
|
-
OrderListView (displays)
|
|
103
|
-
Metrics (average order age)
|
|
104
|
-
Status: Complete
|
|
105
|
-
```
|
|
44
|
+
For every field in every event, verify its origin (a command, a calculation, or the system) and every destination that consumes it (other events, read models, external systems), marking each field's status as complete or a gap. A full worked example (Order domain) is in `references/examples.md`.
|
|
106
45
|
|
|
107
46
|
### 2. Check All Commands
|
|
108
|
-
Verify every command input is captured
|
|
109
|
-
|
|
110
|
-
```text
|
|
111
|
-
Command: CreateOrder
|
|
112
|
-
Input: customerId, items[], shippingAddress
|
|
113
|
-
customerId → OrderCreated.customerId
|
|
114
|
-
items[] → OrderCreated.items
|
|
115
|
-
shippingAddress → OrderCreated.shippingAddress
|
|
116
|
-
Status: All inputs captured
|
|
117
|
-
|
|
118
|
-
Command: ConfirmOrder
|
|
119
|
-
Input: orderId, paymentMethod
|
|
120
|
-
orderId → OrderConfirmed.orderId (implicit)
|
|
121
|
-
paymentMethod → OrderConfirmed.paymentMethod
|
|
122
|
-
Status: All inputs captured
|
|
123
|
-
|
|
124
|
-
Command: AuthorizePayment
|
|
125
|
-
Input: orderId, paymentId, authCode
|
|
126
|
-
orderId → PaymentAuthorized.orderId (implicit)
|
|
127
|
-
paymentId → PaymentAuthorized.paymentId
|
|
128
|
-
authCode → PaymentAuthorized.authCode
|
|
129
|
-
Status: All inputs captured
|
|
130
|
-
```
|
|
47
|
+
Verify every command input is captured somewhere in the resulting event, whether directly or implicitly. A full worked example is in `references/examples.md`.
|
|
131
48
|
|
|
132
49
|
### 3. Check All Read Models
|
|
133
|
-
Verify read
|
|
134
|
-
|
|
135
|
-
```text
|
|
136
|
-
ReadModel: OrderStatusView
|
|
137
|
-
Needs to display:
|
|
138
|
-
orderId ← OrderCreated
|
|
139
|
-
customerId ← OrderCreated
|
|
140
|
-
status ← OrderConfirmed, PaymentAuthorized, etc.
|
|
141
|
-
items ← OrderCreated
|
|
142
|
-
total ← OrderCreated
|
|
143
|
-
createdAt ← OrderCreated
|
|
144
|
-
confirmedAt ← OrderConfirmed
|
|
145
|
-
paymentId ← PaymentAuthorized
|
|
146
|
-
paymentMethod ← OrderConfirmed
|
|
147
|
-
shipmentId ← OrderShipped
|
|
148
|
-
trackingNumber ← OrderShipped
|
|
149
|
-
Status: All fields sourced
|
|
150
|
-
|
|
151
|
-
ReadModel: OrderListView
|
|
152
|
-
Needs to display:
|
|
153
|
-
orderId ← OrderCreated
|
|
154
|
-
customerId ← OrderCreated
|
|
155
|
-
total ← OrderCreated
|
|
156
|
-
status ← OrderConfirmed, OrderCancelled, etc.
|
|
157
|
-
createdAt ← OrderCreated
|
|
158
|
-
Status: All fields sourced
|
|
159
|
-
```
|
|
50
|
+
Verify every field a read model displays is sourced from a connected event. A full worked example is in `references/examples.md`.
|
|
160
51
|
|
|
161
52
|
### 4. Check Slice Coverage
|
|
162
53
|
|
|
@@ -171,322 +62,40 @@ Or, to get the full SLICE_BORDER nodes (with `columnId`) the same way as the cur
|
|
|
171
62
|
mcp__eventmodelers__get_nodes { "boardId": "<BOARD_ID>", "type": "SLICE_BORDER" }
|
|
172
63
|
```
|
|
173
64
|
|
|
174
|
-
**Fallback (no MCP):**
|
|
175
|
-
```bash
|
|
176
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
177
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SLICE_BORDER"
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Cross-reference each COMMAND/READMODEL node's column against the `columnId` of the SLICE_BORDER nodes:
|
|
181
|
-
|
|
182
|
-
```text
|
|
183
|
-
Column: CreateOrder (COMMAND)
|
|
184
|
-
Slice defined? Yes — "Place Order"
|
|
185
|
-
Status: Covered
|
|
186
|
-
|
|
187
|
-
Column: OrderStatusView (READMODEL)
|
|
188
|
-
Slice defined? No
|
|
189
|
-
Status: Missing slice — flag as gap
|
|
65
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "4. Check Slice Coverage".
|
|
190
66
|
|
|
191
|
-
|
|
192
|
-
Slice defined? N/A — linked copy, exempt
|
|
193
|
-
Status: Skip
|
|
194
|
-
```
|
|
67
|
+
Cross-reference each COMMAND/READMODEL node's column against the `columnId` of the SLICE_BORDER nodes, flagging any column with no matching slice as a gap (skipping linked copies, which are exempt). A full worked example is in `references/examples.md`.
|
|
195
68
|
|
|
196
69
|
### 5. Check Event Stream Completeness
|
|
197
70
|
Verify no "missing" events:
|
|
198
71
|
|
|
199
|
-
|
|
200
|
-
Scenario: Order from creation to delivery
|
|
201
|
-
|
|
202
|
-
Timeline:
|
|
203
|
-
1. OrderCreated (from CreateOrder command)
|
|
204
|
-
2. OrderConfirmed (from ConfirmOrder command)
|
|
205
|
-
3. PaymentAuthorized (from AuthorizePayment processor command)
|
|
206
|
-
4. InventoryReserved (from ReserveInventory processor command)
|
|
207
|
-
5. OrderShipped (from CreateShipment processor command)
|
|
208
|
-
6. DeliveryConfirmed (from MarkDelivered processor command)
|
|
209
|
-
|
|
210
|
-
Missing events? None identified
|
|
211
|
-
|
|
212
|
-
Alternative paths:
|
|
213
|
-
- OrderCancelled (can happen after OrderCreated or OrderConfirmed)
|
|
214
|
-
- PaymentFailed (can happen during PaymentAuthorized)
|
|
215
|
-
- RefundInitiated (can happen after PaymentFailed or OrderCancelled)
|
|
216
|
-
|
|
217
|
-
Status: All paths covered
|
|
218
|
-
```
|
|
72
|
+
Walk the full timeline scenario end-to-end (creation through terminal state) checking for missing events, and separately verify that alternative/branch paths (cancellations, failures, compensations) are also represented. A full worked example is in `references/examples.md`.
|
|
219
73
|
|
|
220
74
|
### 6. Check System Boundaries
|
|
221
75
|
Verify each system owns events:
|
|
222
76
|
|
|
223
|
-
|
|
224
|
-
Order System
|
|
225
|
-
Events: OrderCreated, OrderConfirmed, OrderCancelled
|
|
226
|
-
Processor: None (triggers other systems)
|
|
227
|
-
Status: Clean ownership
|
|
228
|
-
|
|
229
|
-
Payment System
|
|
230
|
-
Events: PaymentAuthorized, PaymentFailed, PaymentRefunded
|
|
231
|
-
Processor: PaymentAuthorizer (listens to OrderConfirmed)
|
|
232
|
-
Status: Clean ownership
|
|
233
|
-
|
|
234
|
-
Inventory System
|
|
235
|
-
Events: InventoryReserved, InventoryReleased
|
|
236
|
-
Processor: InventoryReserver (listens to PaymentAuthorized)
|
|
237
|
-
Status: Clean ownership
|
|
238
|
-
|
|
239
|
-
Fulfillment System
|
|
240
|
-
Events: OrderShipped, DeliveryConfirmed
|
|
241
|
-
Processor: ShipmentCreator (listens to InventoryReserved)
|
|
242
|
-
Status: Clean ownership
|
|
243
|
-
|
|
244
|
-
Notification System
|
|
245
|
-
Events: None (no persistence, info-only)
|
|
246
|
-
Processor: Notifier (listens to all events)
|
|
247
|
-
Status: Cross-cutting concern
|
|
248
|
-
```
|
|
77
|
+
For each system/bounded context, verify it owns a coherent, non-overlapping set of events, and that any processor it runs only reacts to events it's entitled to. A full worked example is in `references/examples.md`.
|
|
249
78
|
|
|
250
79
|
### 7. Define Workflow Step Contracts
|
|
251
80
|
Each workflow step is a contract between the previous step and the next. Document preconditions and postconditions:
|
|
252
81
|
|
|
253
|
-
|
|
254
|
-
Workflow Step 1: CreateOrder (Step Owns: Order Creation)
|
|
255
|
-
|
|
256
|
-
Preconditions (what must exist before this step):
|
|
257
|
-
- Customer must exist
|
|
258
|
-
- Products must exist in catalog
|
|
259
|
-
- User must be authenticated
|
|
260
|
-
|
|
261
|
-
Postconditions (what exists after this step):
|
|
262
|
-
- OrderCreated event exists
|
|
263
|
-
- Event contains: orderId, customerId, items, total, shippingAddress, createdAt
|
|
264
|
-
|
|
265
|
-
Contract: Any system can assume if these postconditions are true,
|
|
266
|
-
the order has been properly created through this step.
|
|
267
|
-
|
|
268
|
-
--- Workflow Step 2: ConfirmOrder (Step Owns: Order Confirmation)
|
|
269
|
-
|
|
270
|
-
Preconditions (depends on Step 1 postcondition):
|
|
271
|
-
- OrderCreated event must exist ( from Step 1 contract)
|
|
272
|
-
- Customer must select payment method
|
|
273
|
-
|
|
274
|
-
Postconditions (what exists after this step):
|
|
275
|
-
- OrderConfirmed event exists
|
|
276
|
-
- Event contains: orderId, paymentMethod, confirmedAt
|
|
277
|
-
|
|
278
|
-
Contract: Any system can assume if these postconditions are true,
|
|
279
|
-
the order has been properly confirmed.
|
|
82
|
+
Treat each workflow step as a contract: document its preconditions (what must already be true, usually the previous step's postcondition) and its postconditions (what event now exists and which fields it carries), so a later step — or a different team — can build against the contract without waiting on the implementation. A full worked example (a three-step Order contract chain) is in `references/examples.md`.
|
|
280
83
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
Preconditions (depends on Step 2 postcondition):
|
|
284
|
-
- OrderConfirmed event must exist ( from Step 2 contract)
|
|
285
|
-
- Payment method must be valid
|
|
286
|
-
|
|
287
|
-
Postconditions (what exists after this step):
|
|
288
|
-
- PaymentAuthorized event exists
|
|
289
|
-
- Event contains: paymentId, authCode, amount
|
|
290
|
-
|
|
291
|
-
Contract: Once this postcondition is true, next steps can proceed
|
|
292
|
-
without re-checking payment (trust the contract).
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
**Why Contracts Matter for Parallel Development**:
|
|
296
|
-
```text
|
|
297
|
-
Team A: Works on CreateOrder (Step 1)
|
|
298
|
-
→ Knows postcondition: OrderCreated with specific fields
|
|
299
|
-
→ Knows other teams depend on this
|
|
300
|
-
|
|
301
|
-
Team B: Works on ConfirmOrder (Step 2)
|
|
302
|
-
→ Can start immediately, doesn't wait for Step 1 implementation
|
|
303
|
-
→ Just needs to know: "I expect OrderCreated event with these fields"
|
|
304
|
-
→ Writes tests that mock the OrderCreated event
|
|
305
|
-
→ When Step 1 is done, tests pass immediately
|
|
306
|
-
|
|
307
|
-
Team C: Works on AuthorizePayment (Step 3)
|
|
308
|
-
→ Can start immediately
|
|
309
|
-
→ Expects: OrderConfirmed event with these fields
|
|
310
|
-
→ When Step 2 is done, tests pass immediately
|
|
311
|
-
|
|
312
|
-
Result: 3 teams working in parallel instead of waiting sequentially!
|
|
313
|
-
```
|
|
84
|
+
**Why contracts matter for parallel development**: a team can start building the next step immediately against the previous step's postcondition (mocking the event it depends on), instead of waiting for that step's implementation to finish. See `eventmodeling-orchestrating-event-modeling`'s linked `project-planning-with-event-modeling.md` reference for the fully worked example and the resulting flat cost curve.
|
|
314
85
|
|
|
315
86
|
### 8. Check Field Traceability
|
|
316
87
|
Matrix of all fields origin → destination:
|
|
317
88
|
|
|
318
|
-
|
|
319
|
-
| Field | Event | Command | Read Model | Processor |
|
|
320
|
-
|-------|-------|---------|-----------|-----------|
|
|
321
|
-
| orderId | OrderCreated | - | All views | All |
|
|
322
|
-
| customerId | OrderCreated | CreateOrder | OrderStatusView | - |
|
|
323
|
-
| items | OrderCreated | CreateOrder | List/Status views | Inventory |
|
|
324
|
-
| total | OrderCreated | - | List/Status views | - |
|
|
325
|
-
| paymentId | PaymentAuthorized | AuthorizePayment | StatusView | Inventory |
|
|
326
|
-
| shipmentId | OrderShipped | CreateShipment | StatusView | Notification |
|
|
327
|
-
| trackingNumber | OrderShipped | - | TrackingView | Notification |
|
|
328
|
-
|
|
329
|
-
Status: All fields traceable
|
|
330
|
-
```
|
|
89
|
+
Build a matrix of every field crossing Event / Command / Read Model / Processor, confirming each field's presence is accounted for across the whole model. A full worked example is in `references/examples.md`.
|
|
331
90
|
|
|
332
91
|
### 9. Identify Gaps
|
|
333
92
|
Document any missing pieces:
|
|
334
93
|
|
|
335
|
-
|
|
336
|
-
Analysis: Are there any missing fields?
|
|
337
|
-
- Estimated delivery date?
|
|
338
|
-
→ Need to add to OrderShipped event
|
|
339
|
-
→ Can be calculated from carrier
|
|
340
|
-
→ Add to ShipmentTrackingView
|
|
341
|
-
|
|
342
|
-
- Cancellation reason?
|
|
343
|
-
→ Already in OrderCancelled event
|
|
344
|
-
|
|
345
|
-
- Payment failure reason?
|
|
346
|
-
→ Already in PaymentFailed event
|
|
347
|
-
|
|
348
|
-
- Refund status?
|
|
349
|
-
→ Need to track in RefundInitiated event
|
|
350
|
-
→ Add to PaymentStatusView
|
|
351
|
-
|
|
352
|
-
Actions taken:
|
|
353
|
-
Add estimatedDelivery to OrderShipped
|
|
354
|
-
Add refundStatus to PaymentStatusView
|
|
355
|
-
Add refundInitiatedAt to OrderStatusView
|
|
356
|
-
```
|
|
94
|
+
For each candidate gap, check whether the data already exists elsewhere in the model before treating it as missing, and record which gaps were fixed versus which remain outstanding. A full worked example is in `references/examples.md`.
|
|
357
95
|
|
|
358
96
|
## Output Format
|
|
359
97
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
```markdown
|
|
363
|
-
# Completeness Check: [Domain Name]
|
|
364
|
-
|
|
365
|
-
## Workflow Step Contracts
|
|
366
|
-
|
|
367
|
-
### Step 1: CreateOrder
|
|
368
|
-
|
|
369
|
-
**Preconditions**:
|
|
370
|
-
- Customer exists in system
|
|
371
|
-
- Products exist in catalog
|
|
372
|
-
|
|
373
|
-
**Postconditions**:
|
|
374
|
-
- OrderCreated event exists with fields: [list]
|
|
375
|
-
|
|
376
|
-
**Teams that depend on this contract**: [All downstream teams]
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
### Step 2: ConfirmOrder
|
|
381
|
-
|
|
382
|
-
**Preconditions** (depends on Step 1):
|
|
383
|
-
- OrderCreated event exists
|
|
384
|
-
|
|
385
|
-
**Postconditions**:
|
|
386
|
-
- OrderConfirmed event exists with fields: [list]
|
|
387
|
-
|
|
388
|
-
--- [Continue for each workflow step]
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
|
-
## Field Traceability Matrix
|
|
393
|
-
|
|
394
|
-
### Events
|
|
395
|
-
|
|
396
|
-
| Event | Field | Origin | Destinations | Status |
|
|
397
|
-
|-------|-------|--------|-------------|--------|
|
|
398
|
-
| OrderCreated | orderId | System | ConfirmOrder, Views | |
|
|
399
|
-
| OrderCreated | customerId | CreateOrder | All views | |
|
|
400
|
-
| OrderCreated | items | CreateOrder | Inventory, Views | |
|
|
401
|
-
| OrderCreated | total | Calculated | Views, Payment | |
|
|
402
|
-
| OrderConfirmed | paymentId | AuthorizePayment | Views, Accounting | |
|
|
403
|
-
| OrderShipped | trackingNumber | Carrier | TrackingView | |
|
|
404
|
-
|
|
405
|
-
---
|
|
406
|
-
|
|
407
|
-
## System Ownership Verification
|
|
408
|
-
|
|
409
|
-
### Order System
|
|
410
|
-
- Events owned: OrderCreated, OrderConfirmed, OrderCancelled
|
|
411
|
-
- Completeness: All order lifecycle events present
|
|
412
|
-
|
|
413
|
-
### Payment System
|
|
414
|
-
- Events owned: PaymentAuthorized, PaymentFailed, PaymentRefunded
|
|
415
|
-
- Completeness: All payment states covered
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
## Command → Event Verification
|
|
420
|
-
|
|
421
|
-
| Command | Input | Event | Captured |
|
|
422
|
-
|---------|-------|-------|----------|
|
|
423
|
-
| CreateOrder | customerId, items, address | OrderCreated | |
|
|
424
|
-
| ConfirmOrder | paymentMethod | OrderConfirmed | |
|
|
425
|
-
| AuthorizePayment | paymentId, authCode | PaymentAuthorized | |
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
|
|
429
|
-
## Slice Coverage
|
|
430
|
-
|
|
431
|
-
| Column | Node | Has Slice? | Status |
|
|
432
|
-
|--------|------|-----------|--------|
|
|
433
|
-
| 1 | CreateOrder (COMMAND) | Yes — "Place Order" | |
|
|
434
|
-
| 2 | OrderStatusView (READMODEL) | No | Missing slice |
|
|
435
|
-
| 3 | ConfirmOrder (COMMAND, linked copy) | N/A | Exempt (linkedTo set) |
|
|
436
|
-
|
|
437
|
-
---
|
|
438
|
-
|
|
439
|
-
## Read Model Coverage
|
|
440
|
-
|
|
441
|
-
### OrderStatusView
|
|
442
|
-
- All relevant event data included
|
|
443
|
-
- All user display needs met
|
|
444
|
-
- All processor decision fields present
|
|
445
|
-
|
|
446
|
-
### OrderListView
|
|
447
|
-
- Summary fields captured
|
|
448
|
-
- Filtering/sorting fields present
|
|
449
|
-
- Linked to OrderStatusView for details
|
|
450
|
-
|
|
451
|
-
---
|
|
452
|
-
|
|
453
|
-
## Gap Analysis
|
|
454
|
-
|
|
455
|
-
### Issues Found
|
|
456
|
-
1. Estimated delivery date missing
|
|
457
|
-
- Fix: Add to OrderShipped event
|
|
458
|
-
- Type: DateTime (ISO 8601)
|
|
459
|
-
- Source: Calculated from carrier API
|
|
460
|
-
- Status: Will add in next iteration
|
|
461
|
-
|
|
462
|
-
2. Refund tracking incomplete
|
|
463
|
-
- Fix: Add RefundInitiated event timestamp
|
|
464
|
-
- Fix: Add refund status to PaymentStatusView
|
|
465
|
-
- Status: Will add in next iteration
|
|
466
|
-
|
|
467
|
-
### No Critical Gaps
|
|
468
|
-
- All events properly sourced
|
|
469
|
-
- All command inputs captured
|
|
470
|
-
- All read models have data
|
|
471
|
-
- Event flow complete
|
|
472
|
-
- System boundaries clear
|
|
473
|
-
|
|
474
|
-
---
|
|
475
|
-
|
|
476
|
-
## Readiness Assessment
|
|
477
|
-
|
|
478
|
-
**Overall Completeness**: 95%
|
|
479
|
-
|
|
480
|
-
**Blockers**: None
|
|
481
|
-
|
|
482
|
-
**Ready for Code Generation**: YES
|
|
483
|
-
|
|
484
|
-
**Minor Improvements**:
|
|
485
|
-
- Add estimated delivery date (non-blocking)
|
|
486
|
-
- Enhance refund tracking (non-blocking)
|
|
487
|
-
|
|
488
|
-
**Recommendation**: Proceed to code generation phase.
|
|
489
|
-
```
|
|
98
|
+
Older versions of this skill wrote the completeness check as a markdown report rather than posting comments on board nodes — that legacy template is kept in `references/examples.md` for reference only; the actual output mechanism is the `handle-comment`-based comment posting described in "Board Context" above.
|
|
490
99
|
|
|
491
100
|
## Quality Checklist
|
|
492
101
|
|
|
@@ -548,10 +157,6 @@ The model is **complete** when:
|
|
|
548
157
|
| **False duplicate** | Two nodes share a title | Check `data.linkedTo` on both before reporting — a linked copy is intentional, not a gap |
|
|
549
158
|
| **Missing slice** | COMMAND/READMODEL column with no SLICE_BORDER | Define a slice for that column (unless it's a linked copy) |
|
|
550
159
|
|
|
551
|
-
## Reference Documentation
|
|
552
|
-
|
|
553
|
-
- **[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.
|
|
554
|
-
|
|
555
160
|
## Next Steps
|
|
556
161
|
|
|
557
162
|
If completeness check passes:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Checking Completeness — curl Fallback Calls
|
|
2
|
+
|
|
3
|
+
Only needed when MCP is not connected. Every call below has an MCP equivalent in the main SKILL.md — always prefer that.
|
|
4
|
+
|
|
5
|
+
## Board Context
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# All nodes (events, commands, read models, screens)
|
|
9
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
10
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
|
|
11
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
12
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
|
|
13
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
14
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 4. Check Slice Coverage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
21
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SLICE_BORDER"
|
|
22
|
+
```
|