@eventmodelers/cli 1.0.35 → 1.0.37
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 +12 -10
- 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 +9 -319
- 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 +23 -199
- 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 +13 -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-designing-automation-chains/SKILL.md +132 -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 +9 -236
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-event-models/references/examples.md +257 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md +28 -302
- 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 +30 -343
- 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 +51 -399
- 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-optimizing-stream-design/SKILL.md +45 -152
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/domain-patterns.md +49 -90
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/patterns.md +64 -137
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/SKILL.md +74 -65
- 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 +1 -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 +19 -36
- 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 +26 -332
- 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 +9 -294
- 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 +12 -11
- 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 +6 -36
- 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 +23 -183
- package/stacks/modeling-kit/templates/.claude/skills/place-element/references/api-fallback.md +193 -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-storyboarding-events/SKILL.md
CHANGED
|
@@ -92,161 +92,22 @@ Optional: Write to `.trogonai/interviews/[timestamp]-storyboarding-events.interv
|
|
|
92
92
|
Given the event timeline, create UI storyboards:
|
|
93
93
|
|
|
94
94
|
### 1. Identify UI Screens/Views
|
|
95
|
-
Create a mockup for each state of the system:
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
Screen 1: Order Creation Form
|
|
99
|
-
|
|
100
|
-
Place Your Order
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Customer ID: [____________]
|
|
104
|
-
|
|
105
|
-
Items:
|
|
106
|
-
Product 1 Qty: [_] Price: $_
|
|
107
|
-
Product 2 Qty: [_] Price: $_
|
|
108
|
-
Product 3 Qty: [_] Price: $_
|
|
109
|
-
|
|
110
|
-
Total: $___
|
|
111
|
-
|
|
112
|
-
Shipping Address:
|
|
113
|
-
[_____________________]
|
|
114
|
-
[_____________________]
|
|
115
|
-
|
|
116
|
-
[ Create Order ]
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
Trigger: CreateOrder command
|
|
120
|
-
Result Events: OrderCreated
|
|
121
|
-
Data captured from UI:
|
|
122
|
-
- customerId
|
|
123
|
-
- items (products + quantities)
|
|
124
|
-
- total
|
|
125
|
-
- shippingAddress
|
|
126
|
-
```
|
|
95
|
+
Create a mockup for each state of the system: for each screen, note the trigger action, the command it produces, the resulting event, and the data fields the screen captures. A full worked example (Order Creation Form) is in `references/examples.md`.
|
|
127
96
|
|
|
128
97
|
### 2. Show State Transitions Between Screens
|
|
129
|
-
Document what changes when events occur:
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
Screen 2: Order Confirmation
|
|
133
|
-
(After OrderCreated event)
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
Order Confirmation
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
Order ID: #12345
|
|
140
|
-
Status: Draft
|
|
141
|
-
|
|
142
|
-
Items: 3 products
|
|
143
|
-
Total: $150.00
|
|
144
|
-
|
|
145
|
-
Shipping: 123 Main St
|
|
146
|
-
|
|
147
|
-
Payment Options:
|
|
148
|
-
Credit Card
|
|
149
|
-
Bank Transfer
|
|
150
|
-
|
|
151
|
-
[ Confirm Order ]
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
Trigger: ConfirmOrder command
|
|
155
|
-
Result Events: OrderConfirmed
|
|
156
|
-
Data from UI:
|
|
157
|
-
- orderId (from OrderCreated)
|
|
158
|
-
- paymentMethod
|
|
159
|
-
```
|
|
98
|
+
Document what changes when events occur: after each event, the next screen shows the fields that were just set by that event, alongside the next command the user can trigger. A full worked example (Order Confirmation, after OrderCreated) is in `references/examples.md`.
|
|
160
99
|
|
|
161
100
|
### 3. Document All Data Fields
|
|
162
|
-
For each screen, list what data is displayed
|
|
163
|
-
|
|
164
|
-
```
|
|
165
|
-
Screen: Order Status View
|
|
166
|
-
|
|
167
|
-
Your Order Status
|
|
168
|
-
|
|
169
|
-
Order ID: #12345 (from OrderCreated)
|
|
170
|
-
Status: Confirmed (from OrderConfirmed)
|
|
171
|
-
Confirmed at: 2024-12-31 10:00 (from OrderConfirmed)
|
|
172
|
-
|
|
173
|
-
Payment: Authorized (from PaymentAuthorized)
|
|
174
|
-
Auth Code: AUTH-789 (from PaymentAuthorized)
|
|
175
|
-
|
|
176
|
-
Inventory: Reserved (from InventoryReserved)
|
|
177
|
-
Expected Ship: 2025-01-02 (from InventoryReserved)
|
|
178
|
-
|
|
179
|
-
Shipped: Pending (awaiting OrderShipped)
|
|
180
|
-
Tracking: -- (waiting for shipment)
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
Fields and their origins:
|
|
184
|
-
orderId → OrderCreated event
|
|
185
|
-
status → OrderConfirmed event
|
|
186
|
-
confirmedAt → OrderConfirmed event
|
|
187
|
-
paymentStatus → PaymentAuthorized event
|
|
188
|
-
authCode → PaymentAuthorized event
|
|
189
|
-
inventoryStatus → InventoryReserved event
|
|
190
|
-
expectedShip → InventoryReserved event
|
|
191
|
-
tracking → OrderShipped event (when available)
|
|
192
|
-
```
|
|
101
|
+
For each screen, list what data is displayed, and the specific event each field's value originated from. A full worked example (Order Status View) is in `references/examples.md`.
|
|
193
102
|
|
|
194
103
|
### 4. Show Data Flow Through Screens
|
|
195
|
-
Map how data enters/exits UI:
|
|
196
|
-
|
|
197
|
-
```
|
|
198
|
-
Order Entry UI
|
|
199
|
-
(user inputs)
|
|
200
|
-
customerId
|
|
201
|
-
items[]
|
|
202
|
-
total
|
|
203
|
-
shippingAddress
|
|
204
|
-
↓
|
|
205
|
-
Command: CreateOrder
|
|
206
|
-
↓
|
|
207
|
-
Event: OrderCreated
|
|
208
|
-
↓
|
|
209
|
-
Order Status UI (displays)
|
|
210
|
-
orderId (from event)
|
|
211
|
-
items (from event)
|
|
212
|
-
total (from event)
|
|
213
|
-
shippingAddress (from event)
|
|
214
|
-
```
|
|
104
|
+
Map how data enters/exits UI: user input flows into a command, the command produces an event, and the event's data flows back out into the next screen that displays it. A full worked example is in `references/examples.md`.
|
|
215
105
|
|
|
216
106
|
### 5. Organize Screens by Swimlane (Actor/System)
|
|
217
107
|
|
|
218
108
|
**MANDATORY**: Use the **Role Catalog** from Step 1 (eventmodeling-brainstorming-events) as the source of swimlanes. Every human role in the catalog MUST have its own swimlane. Every system actor that has a UI or todo-list view gets a swimlane too — but this swimlane is narrative-only (see "Board Integration" below): system actors never get a physical actor lane of their own on the board, only human roles do.
|
|
219
109
|
|
|
220
|
-
Group screens by who interacts with them:
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
Swimlane: Customer (Human Role)
|
|
224
|
-
Screen 1: Order Entry Form
|
|
225
|
-
Screen 2: Order Confirmation
|
|
226
|
-
Screen 3: Order Status View
|
|
227
|
-
Screen 4: Tracking View
|
|
228
|
-
|
|
229
|
-
Swimlane: Seller (Human Role)
|
|
230
|
-
Screen 1: Order Fulfillment Dashboard
|
|
231
|
-
Screen 2: Review Response Form
|
|
232
|
-
Screen 3: Product Management
|
|
233
|
-
|
|
234
|
-
Swimlane: Support Agent (Human Role)
|
|
235
|
-
Screen 1: Escalation Queue
|
|
236
|
-
Screen 2: Manual Override Panel
|
|
237
|
-
|
|
238
|
-
Swimlane: Payment Processor (System Actor)
|
|
239
|
-
Screen 1: Payment Verification (automated)
|
|
240
|
-
Screen 2: Authorization Confirmation
|
|
241
|
-
|
|
242
|
-
Swimlane: Inventory System (System Actor)
|
|
243
|
-
Screen 1: Reservation Todo List (internal)
|
|
244
|
-
Screen 2: Availability Check
|
|
245
|
-
|
|
246
|
-
Swimlane: Fulfillment System (System Actor)
|
|
247
|
-
Screen 1: Shipment Creation Todo
|
|
248
|
-
Screen 2: Shipping Confirmation
|
|
249
|
-
```
|
|
110
|
+
Group screens by who interacts with them: one swimlane per human role (Customer, Seller, Support Agent, ...) listing that role's screens, plus one narrative swimlane per system actor (Payment Processor, Inventory System, ...) listing the screens/views it interacts with. A full worked example (Order domain swimlane grouping) is in `references/examples.md`.
|
|
250
111
|
|
|
251
112
|
**Validation**: If a role from the catalog has zero screens, either:
|
|
252
113
|
- The role is missing screens (add them), or
|
|
@@ -257,34 +118,7 @@ This shows which actors interact with which screens and helps visualize system b
|
|
|
257
118
|
**This grouping is not just narrative for human roles** — "Board Integration" below turns each *human role's* swimlane in this catalog into its own physical actor lane on the board, so a screen's role determines which lane it is actually placed in, not just how it is described in the report. System actor swimlanes stay narrative-only: their automations are placed in the chapter's shared default actor lane, never a lane fabricated to mimic a human role's lane (see "Placing Automations" below).
|
|
258
119
|
|
|
259
120
|
### 6. Show Processor "Todo List" Pattern
|
|
260
|
-
For automated processors, show the todo list metaphor:
|
|
261
|
-
|
|
262
|
-
```
|
|
263
|
-
Processor: InventoryReserver
|
|
264
|
-
|
|
265
|
-
Internal "Todo List" (based on received events):
|
|
266
|
-
|
|
267
|
-
Inventory Reservation Todos
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
Order-123: Reserve 2x Prod-1 (triggered by PaymentAuthorized)
|
|
271
|
-
Order-124: Reserve 3x Prod-2 (triggered by PaymentAuthorized)
|
|
272
|
-
Order-125: Reserve 1x Prod-3 (triggered by PaymentAuthorized)
|
|
273
|
-
|
|
274
|
-
Processor checks todo items:
|
|
275
|
-
For each: Check availability
|
|
276
|
-
If available: Mark done
|
|
277
|
-
Reserve inventory
|
|
278
|
-
Produce event
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
This todo list is driven by:
|
|
283
|
-
Events received → Items added to todo
|
|
284
|
-
Processor logic → Items processed
|
|
285
|
-
Success → InventoryReserved event produced + todo marked done
|
|
286
|
-
Failure → InventoryFailed event produced + todo marked failed
|
|
287
|
-
```
|
|
121
|
+
For automated processors, show the todo list metaphor: each received triggering event adds a todo item, the processor checks each item's condition, and success or failure produces a corresponding event while marking the item done or failed. A full worked example (InventoryReserver's todo list) is in `references/examples.md`.
|
|
288
122
|
|
|
289
123
|
**When it comes time to elaborate scenarios for this todo list (`eventmodeling-elaborating-scenarios`), reach for a storyline rather than plain GWT scenarios.** A todo list is exactly the shape a storyline is built for: the *same* read model (the todo list itself) walked through multiple states — empty → item added → item marked done/failed — which is one narrated walkthrough, not a set of isolated before/after pairs. See that skill's "Storylines" section for the data shape and posting mechanics.
|
|
290
124
|
|
|
@@ -311,13 +145,7 @@ mcp__eventmodelers__get_nodes { "boardId": "$BOARD_ID", "type": "HTML_SCREEN" }
|
|
|
311
145
|
mcp__eventmodelers__get_nodes { "boardId": "$BOARD_ID", "type": "SCREEN" }
|
|
312
146
|
```
|
|
313
147
|
|
|
314
|
-
**Fallback (no MCP):**
|
|
315
|
-
```bash
|
|
316
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
317
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=HTML_SCREEN"
|
|
318
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
319
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SCREEN"
|
|
320
|
-
```
|
|
148
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Board Integration — Check existing screen nodes".
|
|
321
149
|
|
|
322
150
|
After completing the screen analysis, use the `handle-comment` skill to post a QUESTION comment on any screen node where data fields are unclear or missing sources are identified.
|
|
323
151
|
|
|
@@ -327,17 +155,13 @@ After completing the screen analysis, use the `handle-comment` skill to post a Q
|
|
|
327
155
|
|
|
328
156
|
1. Fetch the chapter and collect every row where `type === "actor"`, keyed by its `label`:
|
|
329
157
|
|
|
330
|
-
**Prefer MCP
|
|
158
|
+
**Prefer MCP** — `projection: "cells"` returns just `{rows, columns, cells}`, not the whole chapter node:
|
|
331
159
|
```
|
|
332
|
-
mcp__eventmodelers__get_node { "boardId": "$BOARD_ID", "nodeId": "$CHAPTER_ID" }
|
|
333
|
-
# →
|
|
160
|
+
mcp__eventmodelers__get_node { "boardId": "$BOARD_ID", "nodeId": "$CHAPTER_ID", "projection": "cells" }
|
|
161
|
+
# → rows — collect every row where type === "actor" into { label → rowId }
|
|
334
162
|
```
|
|
335
163
|
|
|
336
|
-
**Fallback (no MCP):**
|
|
337
|
-
```bash
|
|
338
|
-
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
339
|
-
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$CHAPTER_ID"
|
|
340
|
-
```
|
|
164
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Resolve One Actor Lane Per Human Role — Step 1: Fetch the chapter's actor rows".
|
|
341
165
|
|
|
342
166
|
2. For every **human role only** in the Role Catalog (Step 1's swimlane list above), check the map for a `label` that matches the role name (case-insensitive). If found, reuse that `rowId`. **Skip system actors/processors entirely** — do not create or look up a lane for them here; they never get an entry in this map.
|
|
343
167
|
|
|
@@ -348,13 +172,7 @@ After completing the screen analysis, use the `handle-comment` skill to post a Q
|
|
|
348
172
|
mcp__eventmodelers__add_lane { "boardId": "$BOARD_ID", "timelineId": "$CHAPTER_ID", "type": "actor", "label": "<Role Name>" }
|
|
349
173
|
```
|
|
350
174
|
|
|
351
|
-
**Fallback (no MCP):**
|
|
352
|
-
```bash
|
|
353
|
-
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_ID/lanes" \
|
|
354
|
-
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
355
|
-
-H "Content-Type: application/json" \
|
|
356
|
-
-d '{"type": "actor", "label": "<Role Name>"}'
|
|
357
|
-
```
|
|
175
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Resolve One Actor Lane Per Human Role — Step 3: Create a new actor lane".
|
|
358
176
|
|
|
359
177
|
Add the returned `rowId` to the map under that role's name. Do this once per role, not once per screen.
|
|
360
178
|
|
|
@@ -445,7 +263,7 @@ Every screen node requires rendered content. **HTML_SCREEN (via the `html-screen
|
|
|
445
263
|
|
|
446
264
|
**Step A — Compute the cell ID.** This applies to SCREEN nodes (human roles only) — AUTOMATION nodes follow "Placing Automations" below instead. Screens go in **that screen's own role's actor lane** in their target column — look up `actorRowId` from the role→lane map built above, keyed by the screen's role (e.g. "Admin", "User"). Never fall back to "the" actor lane as if there were only one.
|
|
447
265
|
|
|
448
|
-
1. Determine the target column (same column as the event/command, OR one column to the right
|
|
266
|
+
1. Determine the target column (same column as the event/command for a command/input screen, OR the same column as the read model for a view/output screen — one column to the right only if that shared column isn't available).
|
|
449
267
|
2. `actorRowId = roleLaneMap[<this screen's role>]` — the map was already resolved once for the whole chapter; do not re-fetch the chapter per screen. If this screen's role is genuinely new (wasn't in the original Role Catalog), resolve/create its lane now the same way (see above) and add it to the map before continuing.
|
|
450
268
|
3. `cellId = actorRowId + "-" + columnId`
|
|
451
269
|
|
|
@@ -460,23 +278,16 @@ mcp__eventmodelers__create_screen {
|
|
|
460
278
|
"chapterId": "<CHAPTER_ID>",
|
|
461
279
|
"cellId": "<actorRowId>-<columnId>",
|
|
462
280
|
"pages": ["<div>...</div>"],
|
|
463
|
-
"description": "<concise description of what this screen shows>"
|
|
281
|
+
"description": "<concise description of what this screen shows>",
|
|
282
|
+
"fields": [ /* per "Mandatory Field Definitions" below — set in this same call */ ]
|
|
464
283
|
}
|
|
465
284
|
```
|
|
466
285
|
|
|
467
|
-
**Fallback (no MCP):**
|
|
468
|
-
```bash
|
|
469
|
-
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/<node-uuid>" \
|
|
470
|
-
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
471
|
-
-H "Content-Type: application/json" \
|
|
472
|
-
-d '{
|
|
473
|
-
"chapterId": "<CHAPTER_ID>",
|
|
474
|
-
"cellId": "<actorRowId>-<columnId>",
|
|
475
|
-
"pages": ["<div>...</div>"]
|
|
476
|
-
}'
|
|
477
|
-
```
|
|
286
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Mandatory Screen Rendering — Step B: Create the HTML_SCREEN node".
|
|
478
287
|
|
|
479
|
-
|
|
288
|
+
The MCP `create_screen` call above already sets `meta.fields` (per "Mandatory Field Definitions" below) in the same call — no separate `node:changed` follow-up needed when using MCP.
|
|
289
|
+
|
|
290
|
+
A storyboard screen is placed at a *provisional* position — Steps 4 and 5 wire it to its COMMAND / READMODEL once those exist, and may move it first. Pass `autoConnect: false` on `create_screen` / `create_screens` here so the placement doesn't pre-wire the screen to whatever happens to sit in the adjacent column; the real `SCREEN → COMMAND` and `READMODEL → SCREEN` edges are created deliberately in Steps 4 and 5. When creating several screens whose HTML is already authored, use `create_screens` (batch) with `autoConnect: false`.
|
|
480
291
|
|
|
481
292
|
Design the page(s) as real HTML/CSS, following the `html-screen` skill's guidance: write full-size markup (16px body text, generous padding — the canvas scales it down, don't shrink it yourself), one complete self-contained fragment per page (no `<html>`/`<head>`/`<body>` wrapper — the canvas adds those), no `<script>`/inline handlers (stripped server-side), and Bulma CSS classes (`title`, `button`, `is-primary`, `field`/`control`/`input`, etc. — remember heading size modifiers like `class="title is-1"`) since Bulma 0.9.4 is loaded by default. Every page MUST include real field labels matching the actual event/command fields this screen captures or displays, and at least one primary action (submit/confirm button) for command screens.
|
|
482
293
|
|
|
@@ -501,22 +312,7 @@ mcp__eventmodelers__submit_node_events {
|
|
|
501
312
|
}
|
|
502
313
|
```
|
|
503
314
|
|
|
504
|
-
**Fallback (no MCP):**
|
|
505
|
-
```bash
|
|
506
|
-
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
|
|
507
|
-
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
508
|
-
-H "Content-Type: application/json" \
|
|
509
|
-
-d '[{
|
|
510
|
-
"id": "<event-uuid>",
|
|
511
|
-
"eventType": "node:created",
|
|
512
|
-
"nodeId": "<node-uuid>",
|
|
513
|
-
"boardId": "<BOARD_ID>",
|
|
514
|
-
"timestamp": 1234567890,
|
|
515
|
-
"chapterId": "<CHAPTER_ID>",
|
|
516
|
-
"cellId": "<actorRowId>-<columnId>",
|
|
517
|
-
"meta": {"type": "SCREEN", "title": "<Screen Title>", "fields": [...]}
|
|
518
|
-
}]'
|
|
519
|
-
```
|
|
315
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Mandatory Screen Rendering — Step B (sketch path): Create the SCREEN node".
|
|
520
316
|
|
|
521
317
|
**Step C (sketch path only) — Render the wireframe sketch immediately** (`POST /images/$NODE_ID/sketch`).
|
|
522
318
|
|
|
@@ -541,21 +337,7 @@ mcp__eventmodelers__render_screen {
|
|
|
541
337
|
}
|
|
542
338
|
```
|
|
543
339
|
|
|
544
|
-
**Fallback (no MCP):**
|
|
545
|
-
```bash
|
|
546
|
-
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/images/$NODE_ID/sketch" \
|
|
547
|
-
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
548
|
-
-H "Content-Type: application/json" \
|
|
549
|
-
-d '{
|
|
550
|
-
"description": "<concise description of what this screen shows>",
|
|
551
|
-
"elements": [
|
|
552
|
-
{"type":"rectangle","gridX":0,"gridY":0,"gridWidth":50,"gridHeight":40,"fill":"white"},
|
|
553
|
-
{"type":"rectangle","gridX":0,"gridY":0,"gridWidth":50,"gridHeight":3,"fill":"violet"},
|
|
554
|
-
{"type":"headline","gridX":2,"gridY":1,"text":"Screen Title","fontSize":16,"fill":"white","gridWidth":46},
|
|
555
|
-
...more elements...
|
|
556
|
-
]
|
|
557
|
-
}'
|
|
558
|
-
```
|
|
340
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Mandatory Screen Rendering — Step C (sketch path): Render the wireframe sketch".
|
|
559
341
|
|
|
560
342
|
Design each wireframe using the grid description language from the `storyboard-screen` skill (50×40 grid, 1 unit = 20 px):
|
|
561
343
|
|
|
@@ -587,17 +369,17 @@ When placing screens on the board, follow these alignment rules:
|
|
|
587
369
|
| Screen type | Where it goes on the board |
|
|
588
370
|
|-------------|---------------------------|
|
|
589
371
|
| **Input/command screen** (triggers a command) | **The role's own actor lane, same column as the COMMAND and EVENT** it produces. The screen and command share a column — the screen sits in that role's actor lane, the command in the interaction row, the event in the swimlane row. |
|
|
590
|
-
| **View/output screen** (displays a read model) | **The role's own actor lane,
|
|
372
|
+
| **View/output screen** (displays a read model) | **The role's own actor lane, the SAME column as the READ MODEL** it displays (READMODEL in the interaction row, screen in the actor row — a downward connection, not a backward one). Only bumps one column to the right if that column's interaction row is already taken by something else. If the screen displays more than one read model, only the primary one shares its column — every additional read model goes further left. This column is finalised in Step 5 (Identifying Outputs) — during storyboarding, just document which read model each view screen will query. |
|
|
591
373
|
|
|
592
|
-
> **Do not create standalone screen columns that are disconnected from commands or read models.** Every screen must either share its column with the command it submits, or
|
|
374
|
+
> **Do not create standalone screen columns that are disconnected from commands or read models.** Every screen must either share its column with the command it submits, or share its column with the (primary) read model it displays.
|
|
593
375
|
|
|
594
376
|
### Multi-component screens are broken apart in Step 5, not here
|
|
595
377
|
|
|
596
|
-
Storyboarding renders **one plain screen per screen state** — do not pre-split a screen into per-component copies here. Deciding how many components a view screen actually has, and breaking it apart into one highlighted copy per component, is `eventmodeling-identifying-outputs`'s job (its "Step 5a — Enumerate consumers and identify components" and "Step 5c — Break apart multi-component screens into copies"), because a component is defined by its read model and read models aren't designed until Step 5. During storyboarding, just place the single screen
|
|
378
|
+
Storyboarding renders **one plain screen per screen state** — do not pre-split a screen into per-component copies here. Deciding how many components a view screen actually has, and breaking it apart into one highlighted copy per component, is `eventmodeling-identifying-outputs`'s job (its "Step 5a — Enumerate consumers and identify components" and "Step 5c — Break apart multi-component screens into copies"), because a component is defined by its read model and read models aren't designed until Step 5. During storyboarding, just place the single screen in the same column where its read model will end up (per the table above); document which read model it will query even before that read model exists.
|
|
597
379
|
|
|
598
380
|
### Placing Automations
|
|
599
381
|
|
|
600
|
-
When a processor or system actor reacts to events automatically (no human interaction), place an **AUTOMATION** node in the chapter's **default actor lane** instead of a SCREEN — never create, reuse, or look up a per-system-actor lane for it, and never resolve it through the human role→lane map above. Automations go in the same column as the COMMAND they trigger
|
|
382
|
+
When a processor or system actor reacts to events automatically (no human interaction), place an **AUTOMATION** node in the chapter's **default actor lane** instead of a SCREEN — never create, reuse, or look up a per-system-actor lane for it, and never resolve it through the human role→lane map above. Automations go in the same column as the COMMAND they trigger. Unlike a view screen, an automation's READMODEL is never in that same column — the automation's own column already holds the COMMAND it issues (interaction row), so the read model that feeds it always goes one column to the left.
|
|
601
383
|
|
|
602
384
|
**Do not design automation actor lanes to mimic human ones.** A "Payment Processor" or "Inventory System" swimlane in the narrative report (Step 5 above) is a documentation grouping only — it must never be materialized as its own labeled `actor`-type lane on the board. Only human roles get a physical lane; every automation, regardless of which system actor it narratively belongs to, renders in the same shared default actor lane.
|
|
603
385
|
|
|
@@ -639,95 +421,7 @@ If a second role also needs a screen related to the same event, insert a new col
|
|
|
639
421
|
|
|
640
422
|
## Output Format
|
|
641
423
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
```markdown
|
|
645
|
-
# Storyboard: [Domain Name]
|
|
646
|
-
|
|
647
|
-
## Swimlane Organization (from Role Catalog)
|
|
648
|
-
|
|
649
|
-
### Human Role Swimlanes
|
|
650
|
-
|
|
651
|
-
#### Customer Swimlane
|
|
652
|
-
- Screen 1: Order Entry Form
|
|
653
|
-
- Screen 2: Order Confirmation
|
|
654
|
-
- Screen 3: Order Status View
|
|
655
|
-
|
|
656
|
-
#### [Other Human Role Swimlanes — one per role in the catalog]
|
|
657
|
-
|
|
658
|
-
### System Actor Swimlanes
|
|
659
|
-
|
|
660
|
-
_(Narrative grouping only — these are not physical board lanes. Every automation below renders in the chapter's shared default actor lane; see "Placing Automations".)_
|
|
661
|
-
|
|
662
|
-
#### Payment Processor Swimlane
|
|
663
|
-
- Screen 1: Payment Verification (automated)
|
|
664
|
-
- [Shows what UI/views the processor interacts with]
|
|
665
|
-
|
|
666
|
-
#### [Other System Actor Swimlanes]
|
|
667
|
-
|
|
668
|
-
---
|
|
669
|
-
|
|
670
|
-
## Screen 1: [Screen Name]
|
|
671
|
-
|
|
672
|
-
### Mockup
|
|
673
|
-
```
|
|
674
|
-
[ASCII art mockup or description]
|
|
675
|
-
```
|
|
676
|
-
|
|
677
|
-
### Data Displayed
|
|
678
|
-
- Field 1: Description, source event
|
|
679
|
-
- Field 2: Description, source event
|
|
680
|
-
|
|
681
|
-
### User Actions (Commands)
|
|
682
|
-
- Action: [Action], produces: [Event]
|
|
683
|
-
|
|
684
|
-
### Business Rules
|
|
685
|
-
- Rule about what can/cannot be done on this screen
|
|
686
|
-
|
|
687
|
-
---
|
|
688
|
-
|
|
689
|
-
## Screen 2: [Screen Name]
|
|
690
|
-
|
|
691
|
-
[Repeat for each screen]
|
|
692
|
-
|
|
693
|
-
---
|
|
694
|
-
|
|
695
|
-
## Processor Todo Lists
|
|
696
|
-
|
|
697
|
-
### Processor: [Processor Name]
|
|
698
|
-
|
|
699
|
-
Internal "Todo List" pattern:
|
|
700
|
-
```
|
|
701
|
-
Triggered by: [Event type]
|
|
702
|
-
Todo action: [What needs to be done]
|
|
703
|
-
Success produces: [Event]
|
|
704
|
-
Failure produces: [Event]
|
|
705
|
-
```
|
|
706
|
-
|
|
707
|
-
[Repeat for each processor]
|
|
708
|
-
|
|
709
|
-
---
|
|
710
|
-
|
|
711
|
-
## Data Flow Diagram
|
|
712
|
-
|
|
713
|
-
[Show how data enters from UI and returns via events]
|
|
714
|
-
|
|
715
|
-
---
|
|
716
|
-
|
|
717
|
-
## Field Traceability Matrix
|
|
718
|
-
|
|
719
|
-
| Field | Screen | Source Event | Status |
|
|
720
|
-
|-------|--------|-------------|--------|
|
|
721
|
-
| orderId | Status View | OrderCreated | |
|
|
722
|
-
| shipmentId | Status View | OrderShipped | |
|
|
723
|
-
| customerId | All | OrderCreated | |
|
|
724
|
-
|
|
725
|
-
---
|
|
726
|
-
|
|
727
|
-
## Missing Data Analysis
|
|
728
|
-
|
|
729
|
-
[Any fields without clear source or destination]
|
|
730
|
-
```
|
|
424
|
+
Older versions of this skill wrote the storyboard as a markdown document (swimlane organization, one section per screen, processor todo lists, a field traceability matrix) rather than rendering and placing screen nodes on the board — that legacy template is kept in `references/examples.md` for reference only; it is not the actual output mechanism. The actual output is the rendered HTML_SCREEN/AUTOMATION nodes placed per "Mandatory Screen Rendering" and "Timeline Placement Rules" above.
|
|
731
425
|
|
|
732
426
|
## Quality Checklist
|
|
733
427
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Storyboarding Events — 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 Integration — Check existing screen nodes
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
9
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=HTML_SCREEN"
|
|
10
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
11
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SCREEN"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Resolve One Actor Lane Per Human Role — Step 1: Fetch the chapter's actor rows
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
18
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/$CHAPTER_ID"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Resolve One Actor Lane Per Human Role — Step 3: Create a new actor lane
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$CHAPTER_ID/lanes" \
|
|
25
|
+
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
26
|
+
-H "Content-Type: application/json" \
|
|
27
|
+
-d '{"type": "actor", "label": "<Role Name>"}'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Mandatory Screen Rendering — Step B: Create the HTML_SCREEN node
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/html-screen-nodes/<node-uuid>" \
|
|
34
|
+
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
35
|
+
-H "Content-Type: application/json" \
|
|
36
|
+
-d '{
|
|
37
|
+
"chapterId": "<CHAPTER_ID>",
|
|
38
|
+
"cellId": "<actorRowId>-<columnId>",
|
|
39
|
+
"pages": ["<div>...</div>"]
|
|
40
|
+
}'
|
|
41
|
+
```
|
|
42
|
+
Then, over REST only (no `fields` param on the HTML-screen endpoint), still set `meta.fields` via a separate `node:changed` call.
|
|
43
|
+
|
|
44
|
+
## Mandatory Screen Rendering — Step B (sketch path): Create the SCREEN node
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes/events" \
|
|
48
|
+
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
49
|
+
-H "Content-Type: application/json" \
|
|
50
|
+
-d '[{
|
|
51
|
+
"id": "<event-uuid>",
|
|
52
|
+
"eventType": "node:created",
|
|
53
|
+
"nodeId": "<node-uuid>",
|
|
54
|
+
"boardId": "<BOARD_ID>",
|
|
55
|
+
"timestamp": 1234567890,
|
|
56
|
+
"chapterId": "<CHAPTER_ID>",
|
|
57
|
+
"cellId": "<actorRowId>-<columnId>",
|
|
58
|
+
"meta": {"type": "SCREEN", "title": "<Screen Title>", "fields": [...]}
|
|
59
|
+
}]'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Mandatory Screen Rendering — Step C (sketch path): Render the wireframe sketch
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
curl -s -X POST "$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/images/$NODE_ID/sketch" \
|
|
66
|
+
-H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" -H "x-user-id: storyboarding-events" \
|
|
67
|
+
-H "Content-Type: application/json" \
|
|
68
|
+
-d '{
|
|
69
|
+
"description": "<concise description of what this screen shows>",
|
|
70
|
+
"elements": [
|
|
71
|
+
{"type":"rectangle","gridX":0,"gridY":0,"gridWidth":50,"gridHeight":40,"fill":"white"},
|
|
72
|
+
{"type":"rectangle","gridX":0,"gridY":0,"gridWidth":50,"gridHeight":3,"fill":"violet"},
|
|
73
|
+
{"type":"headline","gridX":2,"gridY":1,"text":"Screen Title","fontSize":16,"fill":"white","gridWidth":46},
|
|
74
|
+
...more elements...
|
|
75
|
+
]
|
|
76
|
+
}'
|
|
77
|
+
```
|