@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
|
@@ -50,18 +50,21 @@ No slice depends on another slice directly — only on the events it produces.
|
|
|
50
50
|
|
|
51
51
|
## Creating These Slices via the API
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
curl -X POST $BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TL/slices \
|
|
55
|
-
-H "x-token: $TOKEN" -H "Content-Type: application/json" \
|
|
56
|
-
-d '{"type":"state-change","nodes":{"swimlane":{"title":"PlaceOrder"}}}'
|
|
53
|
+
These elements already exist on the timeline (from `spec-info`) — use `create_slice_definitions`/`slice-definitions`, which only adds a `SLICE_BORDER` to each column's existing element. Never use `create_slice`/the plain `/slices` endpoint here: that endpoint creates a brand-new column with its own nodes, which would duplicate the element already on the board.
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
```
|
|
56
|
+
mcp__eventmodelers__create_slice_definitions { "boardId": "<BOARD_ID>", "timelineId": "<TL>", "slices": [
|
|
57
|
+
{ "columnId": "<placeOrderColumnId>", "title": "PlaceOrder" },
|
|
58
|
+
{ "columnId": "<orderDetailViewColumnId>", "title": "OrderDetailView" },
|
|
59
|
+
{ "columnId": "<reserveInventoryOnPaymentColumnId>", "title": "ReserveInventoryOnPayment" }
|
|
60
|
+
] }
|
|
61
|
+
```
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
**Fallback (no MCP)** — one call per column, the REST fallback has no batch form:
|
|
64
|
+
```bash
|
|
65
|
+
curl -X POST $BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/timelines/$TL/slice-definitions \
|
|
63
66
|
-H "x-token: $TOKEN" -H "Content-Type: application/json" \
|
|
64
|
-
-d '{"
|
|
67
|
+
-d '{"columnId":"<placeOrderColumnId>","title":"PlaceOrder"}'
|
|
65
68
|
```
|
|
66
69
|
|
|
67
70
|
---
|
|
@@ -65,16 +65,7 @@ This is the most common dependency: nearly every state-view slice depends on the
|
|
|
65
65
|
|
|
66
66
|
### 1. One Element Per Slice
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
CORRECT:
|
|
70
|
-
Slice: PlaceOrder (state-change) — just the PlaceOrder command
|
|
71
|
-
Slice: OrderDetailView (state-view) — just the OrderDetailView read model
|
|
72
|
-
|
|
73
|
-
WRONG:
|
|
74
|
-
Slice: "Order Management" containing the PlaceOrder command AND the OrderDetailView read model
|
|
75
|
-
Problem: mixes a state-change and a state-view in one slice — the API models
|
|
76
|
-
these as different slice types for a reason.
|
|
77
|
-
```
|
|
68
|
+
See the main SKILL.md's "Core Concept" section — never combine a COMMAND and a READMODEL into one slice, even under an inviting broader "feature" name.
|
|
78
69
|
|
|
79
70
|
### 2. Name the Slice After Its Element
|
|
80
71
|
|
package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/SKILL.md
CHANGED
|
@@ -11,18 +11,16 @@ allowed-tools:
|
|
|
11
11
|
|
|
12
12
|
> **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.
|
|
13
13
|
|
|
14
|
+
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.
|
|
15
|
+
|
|
14
16
|
Prefer `mcp__eventmodelers__*` tools when available (registered by the `connect` skill) — the curl blocks below are the fallback for sessions without MCP connected.
|
|
15
17
|
|
|
16
18
|
## Interview Phase (Optional)
|
|
17
19
|
|
|
18
20
|
**When to Interview**: Skip if the user has already specified: existing UI patterns or mockups to reference, critical data fields, and UI/UX preferences. Interview when these details haven't been discussed or when the user wants guidance on storyboarding depth.
|
|
19
21
|
|
|
20
|
-
**Interview Strategy**: Clarify UI needs, data priorities, and existing patterns to guide storyboard design. This ensures mockups capture all necessary fields without over-designing.
|
|
21
|
-
|
|
22
22
|
### Critical Questions
|
|
23
23
|
|
|
24
|
-
When UI design guidance is needed:
|
|
25
|
-
|
|
26
24
|
1. **Current UI State** (Impact: Determines if you're designing from scratch or enhancing existing)
|
|
27
25
|
- Question: "Do you have: (A) Existing UI/wireframes to reference, (B) Rough sketches, (C) Starting from scratch?"
|
|
28
26
|
- Why it matters: Existing UI provides constraints and patterns; starting fresh allows more design freedom
|
|
@@ -38,52 +36,7 @@ When UI design guidance is needed:
|
|
|
38
36
|
- Why it matters: Platform and fidelity affect storyboard detail; mobile has different constraints than web
|
|
39
37
|
- Follow-up triggers: If (C) → ask about prototype tool; if minimal → discuss what level of detail is enough
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
**Conditional Entry**:
|
|
44
|
-
```
|
|
45
|
-
If user has provided:
|
|
46
|
-
- Existing UI patterns or references
|
|
47
|
-
- AND identified critical data fields
|
|
48
|
-
- AND specified storyboard detail level
|
|
49
|
-
|
|
50
|
-
Then: Skip interview, proceed directly to storyboarding
|
|
51
|
-
|
|
52
|
-
Else: Conduct interview
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**Phase 1: Context Assessment** (Questions 1-2)
|
|
56
|
-
- Understand existing UI context
|
|
57
|
-
- Identify data priorities
|
|
58
|
-
- Establish storyboard scope
|
|
59
|
-
|
|
60
|
-
**Phase 2: Design Guidance** (Question 3)
|
|
61
|
-
- Determine platform and fidelity
|
|
62
|
-
- Adjust storyboard detail accordingly
|
|
63
|
-
|
|
64
|
-
### Capturing Interview Findings
|
|
65
|
-
|
|
66
|
-
Document findings to guide storyboard creation:
|
|
67
|
-
|
|
68
|
-
```markdown
|
|
69
|
-
## Interview Findings: [Domain Name] UI
|
|
70
|
-
|
|
71
|
-
**Existing UI Context**: [Starting from scratch / Enhancing / Matching pattern]
|
|
72
|
-
**Most Critical Data**: [List fields in priority order]
|
|
73
|
-
**Platform**: [Web / Mobile / Both]
|
|
74
|
-
**Storyboard Detail**: [Minimal wireframes / Detailed mockups]
|
|
75
|
-
|
|
76
|
-
**Key UI Interactions**:
|
|
77
|
-
- [Action 1]: [What data triggers it]
|
|
78
|
-
- [Action 2]: [What data triggers it]
|
|
79
|
-
|
|
80
|
-
**Storyboard Focus**:
|
|
81
|
-
- Prioritize showing [most critical fields]
|
|
82
|
-
- Ensure [specific interactions] are clear
|
|
83
|
-
- Reference [existing patterns] for consistency
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Optional: Write to `.trogonai/interviews/[timestamp]-storyboarding-events.interview.internal.trogonai.md`.
|
|
39
|
+
Follow **`eventmodeling-interview-protocol`** to run this interview and record its findings — label this step "**3. Storyboarding** (`eventmodeling-storyboarding-events`)". Findings should cover: existing UI context, most critical data fields (priority order), platform and detail-level preferences, key UI interactions, and storyboard focus.
|
|
87
40
|
|
|
88
41
|
---
|
|
89
42
|
|
|
@@ -92,161 +45,22 @@ Optional: Write to `.trogonai/interviews/[timestamp]-storyboarding-events.interv
|
|
|
92
45
|
Given the event timeline, create UI storyboards:
|
|
93
46
|
|
|
94
47
|
### 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
|
-
```
|
|
48
|
+
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
49
|
|
|
128
50
|
### 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
|
-
```
|
|
51
|
+
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
52
|
|
|
161
53
|
### 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
|
-
```
|
|
54
|
+
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
55
|
|
|
194
56
|
### 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
|
-
```
|
|
57
|
+
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
58
|
|
|
216
59
|
### 5. Organize Screens by Swimlane (Actor/System)
|
|
217
60
|
|
|
218
61
|
**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
62
|
|
|
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
|
-
```
|
|
63
|
+
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
64
|
|
|
251
65
|
**Validation**: If a role from the catalog has zero screens, either:
|
|
252
66
|
- The role is missing screens (add them), or
|
|
@@ -257,34 +71,7 @@ This shows which actors interact with which screens and helps visualize system b
|
|
|
257
71
|
**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
72
|
|
|
259
73
|
### 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
|
-
```
|
|
74
|
+
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
75
|
|
|
289
76
|
**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
77
|
|
|
@@ -311,13 +98,7 @@ mcp__eventmodelers__get_nodes { "boardId": "$BOARD_ID", "type": "HTML_SCREEN" }
|
|
|
311
98
|
mcp__eventmodelers__get_nodes { "boardId": "$BOARD_ID", "type": "SCREEN" }
|
|
312
99
|
```
|
|
313
100
|
|
|
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
|
-
```
|
|
101
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Board Integration — Check existing screen nodes".
|
|
321
102
|
|
|
322
103
|
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
104
|
|
|
@@ -327,17 +108,13 @@ After completing the screen analysis, use the `handle-comment` skill to post a Q
|
|
|
327
108
|
|
|
328
109
|
1. Fetch the chapter and collect every row where `type === "actor"`, keyed by its `label`:
|
|
329
110
|
|
|
330
|
-
**Prefer MCP
|
|
111
|
+
**Prefer MCP** — `projection: "cells"` returns just `{rows, columns, cells}`, not the whole chapter node:
|
|
331
112
|
```
|
|
332
|
-
mcp__eventmodelers__get_node { "boardId": "$BOARD_ID", "nodeId": "$CHAPTER_ID" }
|
|
333
|
-
# →
|
|
113
|
+
mcp__eventmodelers__get_node { "boardId": "$BOARD_ID", "nodeId": "$CHAPTER_ID", "projection": "cells" }
|
|
114
|
+
# → rows — collect every row where type === "actor" into { label → rowId }
|
|
334
115
|
```
|
|
335
116
|
|
|
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
|
-
```
|
|
117
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Resolve One Actor Lane Per Human Role — Step 1: Fetch the chapter's actor rows".
|
|
341
118
|
|
|
342
119
|
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
120
|
|
|
@@ -348,13 +125,7 @@ After completing the screen analysis, use the `handle-comment` skill to post a Q
|
|
|
348
125
|
mcp__eventmodelers__add_lane { "boardId": "$BOARD_ID", "timelineId": "$CHAPTER_ID", "type": "actor", "label": "<Role Name>" }
|
|
349
126
|
```
|
|
350
127
|
|
|
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
|
-
```
|
|
128
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Resolve One Actor Lane Per Human Role — Step 3: Create a new actor lane".
|
|
358
129
|
|
|
359
130
|
Add the returned `rowId` to the map under that role's name. Do this once per role, not once per screen.
|
|
360
131
|
|
|
@@ -445,7 +216,7 @@ Every screen node requires rendered content. **HTML_SCREEN (via the `html-screen
|
|
|
445
216
|
|
|
446
217
|
**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
218
|
|
|
448
|
-
1. Determine the target column (same column as the event/command, OR one column to the right
|
|
219
|
+
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
220
|
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
221
|
3. `cellId = actorRowId + "-" + columnId`
|
|
451
222
|
|
|
@@ -460,23 +231,16 @@ mcp__eventmodelers__create_screen {
|
|
|
460
231
|
"chapterId": "<CHAPTER_ID>",
|
|
461
232
|
"cellId": "<actorRowId>-<columnId>",
|
|
462
233
|
"pages": ["<div>...</div>"],
|
|
463
|
-
"description": "<concise description of what this screen shows>"
|
|
234
|
+
"description": "<concise description of what this screen shows>",
|
|
235
|
+
"fields": [ /* per "Mandatory Field Definitions" below — set in this same call */ ]
|
|
464
236
|
}
|
|
465
237
|
```
|
|
466
238
|
|
|
467
|
-
**Fallback (no MCP):**
|
|
468
|
-
|
|
469
|
-
|
|
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
|
-
```
|
|
239
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Mandatory Screen Rendering — Step B: Create the HTML_SCREEN node".
|
|
240
|
+
|
|
241
|
+
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.
|
|
478
242
|
|
|
479
|
-
|
|
243
|
+
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
244
|
|
|
481
245
|
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
246
|
|
|
@@ -501,22 +265,7 @@ mcp__eventmodelers__submit_node_events {
|
|
|
501
265
|
}
|
|
502
266
|
```
|
|
503
267
|
|
|
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
|
-
```
|
|
268
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Mandatory Screen Rendering — Step B (sketch path): Create the SCREEN node".
|
|
520
269
|
|
|
521
270
|
**Step C (sketch path only) — Render the wireframe sketch immediately** (`POST /images/$NODE_ID/sketch`).
|
|
522
271
|
|
|
@@ -541,21 +290,7 @@ mcp__eventmodelers__render_screen {
|
|
|
541
290
|
}
|
|
542
291
|
```
|
|
543
292
|
|
|
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
|
-
```
|
|
293
|
+
**Fallback (no MCP):** see `references/api-fallback.md` — "Mandatory Screen Rendering — Step C (sketch path): Render the wireframe sketch".
|
|
559
294
|
|
|
560
295
|
Design each wireframe using the grid description language from the `storyboard-screen` skill (50×40 grid, 1 unit = 20 px):
|
|
561
296
|
|
|
@@ -587,17 +322,17 @@ When placing screens on the board, follow these alignment rules:
|
|
|
587
322
|
| Screen type | Where it goes on the board |
|
|
588
323
|
|-------------|---------------------------|
|
|
589
324
|
| **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,
|
|
325
|
+
| **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
326
|
|
|
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
|
|
327
|
+
> **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
328
|
|
|
594
329
|
### Multi-component screens are broken apart in Step 5, not here
|
|
595
330
|
|
|
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
|
|
331
|
+
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
332
|
|
|
598
333
|
### Placing Automations
|
|
599
334
|
|
|
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
|
|
335
|
+
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
336
|
|
|
602
337
|
**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
338
|
|
|
@@ -639,95 +374,7 @@ If a second role also needs a screen related to the same event, insert a new col
|
|
|
639
374
|
|
|
640
375
|
## Output Format
|
|
641
376
|
|
|
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
|
-
```
|
|
377
|
+
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
378
|
|
|
732
379
|
## Quality Checklist
|
|
733
380
|
|
|
@@ -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
|
+
```
|