eventmodeler 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/index.js +7133 -34
  2. package/package.json +5 -4
  3. package/dist/api/client-config.js +0 -10
  4. package/dist/api/generated/client/client.gen.js +0 -235
  5. package/dist/api/generated/client/index.js +0 -6
  6. package/dist/api/generated/client/types.gen.js +0 -2
  7. package/dist/api/generated/client/utils.gen.js +0 -228
  8. package/dist/api/generated/client.gen.js +0 -4
  9. package/dist/api/generated/core/auth.gen.js +0 -14
  10. package/dist/api/generated/core/bodySerializer.gen.js +0 -57
  11. package/dist/api/generated/core/params.gen.js +0 -100
  12. package/dist/api/generated/core/pathSerializer.gen.js +0 -106
  13. package/dist/api/generated/core/queryKeySerializer.gen.js +0 -92
  14. package/dist/api/generated/core/serverSentEvents.gen.js +0 -133
  15. package/dist/api/generated/core/types.gen.js +0 -2
  16. package/dist/api/generated/core/utils.gen.js +0 -87
  17. package/dist/api/generated/index.js +0 -2
  18. package/dist/api/generated/sdk.gen.js +0 -4222
  19. package/dist/api/generated/types.gen.js +0 -2
  20. package/dist/api/generated/zod.gen.js +0 -7217
  21. package/dist/commands/add.js +0 -315
  22. package/dist/commands/auth.js +0 -14
  23. package/dist/commands/create.js +0 -192
  24. package/dist/commands/design.js +0 -108
  25. package/dist/commands/guide.js +0 -15
  26. package/dist/commands/init.js +0 -21
  27. package/dist/commands/list-schemas.js +0 -177
  28. package/dist/commands/list.js +0 -39
  29. package/dist/commands/loop.js +0 -101
  30. package/dist/commands/map.js +0 -40
  31. package/dist/commands/mark.js +0 -27
  32. package/dist/commands/move.js +0 -35
  33. package/dist/commands/remove.js +0 -170
  34. package/dist/commands/rename.js +0 -53
  35. package/dist/commands/resize.js +0 -30
  36. package/dist/commands/search.js +0 -14
  37. package/dist/commands/set.js +0 -199
  38. package/dist/commands/show-schemas.js +0 -259
  39. package/dist/commands/show.js +0 -56
  40. package/dist/commands/summary.js +0 -13
  41. package/dist/commands/update.js +0 -240
  42. package/dist/lib/auth.js +0 -331
  43. package/dist/lib/config.js +0 -80
  44. package/dist/lib/excalidraw-schema.js +0 -66
  45. package/dist/lib/globals.js +0 -8
  46. package/dist/lib/model.js +0 -11
  47. package/dist/lib/project-config.js +0 -103
  48. package/dist/lib/resolve.js +0 -59
  49. package/dist/lib/scenario.js +0 -15
  50. package/dist/slices/add-scenario/index.js +0 -103
  51. package/dist/slices/guide/guides/codegen.js +0 -339
  52. package/dist/slices/guide/guides/connect-slices.js +0 -202
  53. package/dist/slices/guide/guides/create-slices.js +0 -273
  54. package/dist/slices/guide/guides/explore.js +0 -238
  55. package/dist/slices/guide/guides/information-flow.js +0 -304
  56. package/dist/slices/guide/guides/scenarios.js +0 -214
  57. package/dist/slices/guide/index.js +0 -40
  58. package/dist/slices/help/index.js +0 -96
  59. package/dist/slices/help/topics/build-codegen.js +0 -109
  60. package/dist/slices/help/topics/build-slice.js +0 -147
  61. package/dist/slices/help/topics/check-completeness.js +0 -57
  62. package/dist/slices/help/topics/connect-slices.js +0 -99
  63. package/dist/slices/help/topics/explore-model.js +0 -112
  64. package/dist/slices/help/topics/json-reference.js +0 -188
  65. package/dist/slices/help/topics/linked-copies.js +0 -89
  66. package/dist/slices/help/topics/manipulate-canvas.js +0 -150
  67. package/dist/slices/help/topics/write-scenarios.js +0 -162
  68. package/dist/slices/init/index.js +0 -86
  69. package/dist/slices/init/loop.js +0 -60
  70. package/dist/slices/login/index.js +0 -20
  71. package/dist/slices/logout/index.js +0 -14
  72. package/dist/slices/open-app/index.js +0 -36
  73. package/dist/slices/whoami/index.js +0 -19
@@ -1,273 +0,0 @@
1
- export const meta = {
2
- name: 'create-slices',
3
- description: 'Understand slice types, fields, and how to build slices with flows',
4
- };
5
- export const content = `
6
- # Understanding Slices
7
-
8
- There are three slice types in an event model. Each represents a different pattern of data flow.
9
-
10
- ---
11
-
12
- ## State-Change Slices
13
-
14
- A state-change slice represents a **user-initiated action** that changes system state:
15
-
16
- \`\`\`
17
- Screen → Command → Event
18
- \`\`\`
19
-
20
- - **Screen**: The UI where the user initiates the action
21
- - **Command**: The intent/request to change state
22
- - **Event**: The fact that state changed
23
-
24
- ### When to Use
25
-
26
- Use state-change slices when:
27
- - A user performs an action (clicks a button, submits a form)
28
- - That action changes the state of an entity
29
- - Examples: "Place Order", "Cancel Subscription", "Update Profile", "Add Item to Cart"
30
-
31
- ### Building a State-Change Slice
32
-
33
- To build a state-change slice, you add the individual elements and connect them with flows:
34
-
35
- 1. Add a screen, a command, and an event (using \`add field\` to define their fields)
36
- 2. Create flows: Screen → Command, Command → Event
37
- 3. Map the fields on each flow
38
-
39
- ### Example: Place Order Slice
40
-
41
- First, add fields to each element:
42
- \`\`\`bash
43
- eventmodeler add field "Checkout Screen" '{"name": "customerId", "type": "UUID"}'
44
- eventmodeler add field "Checkout Screen" '{"name": "items", "type": "String", "isUserInput": true}'
45
- eventmodeler add field "Checkout Screen" '{"name": "shippingAddress", "type": "String", "isUserInput": true}'
46
-
47
- eventmodeler add field "PlaceOrder" '{"name": "customerId", "type": "UUID"}'
48
- eventmodeler add field "PlaceOrder" '{"name": "items", "type": "String"}'
49
- eventmodeler add field "PlaceOrder" '{"name": "shippingAddress", "type": "String"}'
50
-
51
- eventmodeler add field "OrderPlaced" '{"name": "orderId", "type": "UUID", "isGenerated": true}'
52
- eventmodeler add field "OrderPlaced" '{"name": "customerId", "type": "UUID"}'
53
- eventmodeler add field "OrderPlaced" '{"name": "items", "type": "String"}'
54
- eventmodeler add field "OrderPlaced" '{"name": "shippingAddress", "type": "String"}'
55
- eventmodeler add field "OrderPlaced" '{"name": "placedAt", "type": "DateTime", "isGenerated": true}'
56
- \`\`\`
57
-
58
- Then connect with flows:
59
- \`\`\`bash
60
- eventmodeler create flow --from "Checkout Screen" --to "PlaceOrder"
61
- eventmodeler create flow --from "PlaceOrder" --to "OrderPlaced"
62
- \`\`\`
63
-
64
- Then map fields on the flows:
65
- \`\`\`bash
66
- eventmodeler map fields --from "PlaceOrder" --to "OrderPlaced" '[
67
- {"from": "customerId", "to": "customerId"},
68
- {"from": "items", "to": "items"},
69
- {"from": "shippingAddress", "to": "shippingAddress"}
70
- ]'
71
- \`\`\`
72
-
73
- ---
74
-
75
- ## Automation Slices
76
-
77
- An automation slice represents a **system-initiated action**:
78
-
79
- \`\`\`
80
- ReadModel → Processor → Command → Event
81
- \`\`\`
82
-
83
- - **ReadModel**: The state/data the processor needs to make decisions
84
- - **Processor**: The system component that decides when and how to act
85
- - **Command**: The intent/request to change state
86
- - **Event**: The fact that state changed
87
-
88
- ### When to Use
89
-
90
- Use automation slices when:
91
- - The system automatically responds to events
92
- - No direct user interaction triggers the action
93
- - Examples: "Auto-assign Reviewer", "Send Reminder Email", "Calculate Shipping", "Process Payment"
94
-
95
- ### Building an Automation Slice
96
-
97
- 1. Add a read model, processor, command, and event with their fields
98
- 2. Create internal flows: ReadModel → Processor, Processor → Command, Command → Event
99
- 3. Connect external events to the read model with flows
100
-
101
- ### Example: Auto-Fulfill Order
102
-
103
- \`\`\`bash
104
- eventmodeler add field "OrderReadyForFulfillment" '{"name": "orderId", "type": "UUID"}'
105
- eventmodeler add field "OrderReadyForFulfillment" '{"name": "isPaid", "type": "Boolean"}'
106
- eventmodeler add field "OrderReadyForFulfillment" '{"name": "shippingAddress", "type": "String"}'
107
-
108
- eventmodeler add field "FulfillOrder" '{"name": "orderId", "type": "UUID"}'
109
- eventmodeler add field "FulfillOrder" '{"name": "warehouseId", "type": "UUID", "isGenerated": true}'
110
-
111
- eventmodeler add field "OrderFulfilled" '{"name": "orderId", "type": "UUID"}'
112
- eventmodeler add field "OrderFulfilled" '{"name": "warehouseId", "type": "UUID"}'
113
- eventmodeler add field "OrderFulfilled" '{"name": "fulfilledAt", "type": "DateTime", "isGenerated": true}'
114
- \`\`\`
115
-
116
- Connect internal flows:
117
- \`\`\`bash
118
- eventmodeler create flow --from "OrderReadyForFulfillment" --to "Order Fulfillment Processor"
119
- eventmodeler create flow --from "Order Fulfillment Processor" --to "FulfillOrder"
120
- eventmodeler create flow --from "FulfillOrder" --to "OrderFulfilled"
121
- \`\`\`
122
-
123
- ### Connecting Trigger Events
124
-
125
- Connect external events to the automation's read model:
126
-
127
- \`\`\`bash
128
- eventmodeler create flow --from "OrderPlaced" --to "OrderReadyForFulfillment"
129
- eventmodeler create flow --from "PaymentReceived" --to "OrderReadyForFulfillment"
130
- \`\`\`
131
-
132
- ### Automation vs State-View Read Models
133
-
134
- | Automation ReadModel | State-View ReadModel |
135
- |---------------------|---------------------|
136
- | Inside automation slice | Standalone slice |
137
- | Feeds a Processor | Feeds a Screen |
138
- | "What the processor needs" | "What the user sees" |
139
-
140
- ---
141
-
142
- ## State-View Slices
143
-
144
- A state-view slice represents a **read model** - a projection of event data for querying:
145
-
146
- \`\`\`
147
- Read Model (fed by events)
148
- \`\`\`
149
-
150
- ### When to Use
151
-
152
- Use state-view slices when:
153
- - You need to display data to users
154
- - A processor needs to query current state
155
- - You want to aggregate data from multiple events
156
- - Examples: "Order Summary", "User Dashboard", "Inventory Levels", "Account Balance"
157
-
158
- ### Building a State-View Slice
159
-
160
- 1. Add the read model with its fields
161
- 2. Create flows from events to the read model
162
- 3. Map the fields on each flow
163
-
164
- ### Example: Order Summary View
165
-
166
- \`\`\`bash
167
- eventmodeler add field "OrderSummary" '{"name": "orderId", "type": "UUID"}'
168
- eventmodeler add field "OrderSummary" '{"name": "customerId", "type": "UUID"}'
169
- eventmodeler add field "OrderSummary" '{"name": "customerName", "type": "String"}'
170
- eventmodeler add field "OrderSummary" '{"name": "status", "type": "String"}'
171
- eventmodeler add field "OrderSummary" '{"name": "totalAmount", "type": "Decimal"}'
172
- eventmodeler add field "OrderSummary" '{"name": "itemCount", "type": "Int"}'
173
- eventmodeler add field "OrderSummary" '{"name": "placedAt", "type": "DateTime"}'
174
- eventmodeler add field "OrderSummary" '{"name": "lastUpdatedAt", "type": "DateTime"}'
175
- \`\`\`
176
-
177
- ### Connecting Events After Creation
178
-
179
- To complete the picture:
180
-
181
- 1. Create flows from events: \`eventmodeler create flow --from "EventName" --to "ReadModelName"\`
182
- 2. Map fields: \`eventmodeler map fields --from "EventName" --to "ReadModelName" '[...]'\`
183
- 3. Verify: \`eventmodeler show completeness "ReadModelName"\`
184
-
185
- ---
186
-
187
- ## Field Types
188
-
189
- \`UUID\`, \`String\`, \`Int\`, \`Long\`, \`Double\`, \`Decimal\`, \`Boolean\`, \`Date\`, \`DateTime\`, \`Custom\`
190
-
191
- ## Field Attributes
192
-
193
- - \`"isOptional": true\` - Field may not have a value
194
- - \`"isGenerated": true\` - System-generated (e.g., IDs, timestamps), not from user input
195
- - \`"isUserInput": true\` - Entered by the user on the screen
196
- - \`"isList": true\` - Field is a list/array of the specified type
197
-
198
- ## Working with Lists and Custom Types
199
-
200
- **List of primitives** - use \`"isList": true\` with any valid type:
201
- \`\`\`json
202
- {"name": "tags", "type": "String", "isList": true}
203
- {"name": "quantities", "type": "Int", "isList": true}
204
- \`\`\`
205
-
206
- ### Custom Types (Nested Objects)
207
-
208
- **CRITICAL: Custom fields MUST contain subfields.** The \`"type": "Custom"\` indicates a nested object structure, and the \`"subfields"\` array defines its properties. A Custom field without subfields is invalid and creates an empty, useless type.
209
-
210
- **Custom type with nested fields:**
211
- \`\`\`json
212
- {"name": "address", "type": "Custom", "subfields": [
213
- {"name": "street", "type": "String"},
214
- {"name": "city", "type": "String"},
215
- {"name": "postalCode", "type": "String"}
216
- ]}
217
- \`\`\`
218
-
219
- **List of custom objects** - combine \`"type": "Custom"\` with \`"isList": true\`:
220
- \`\`\`json
221
- {"name": "lineItems", "type": "Custom", "isList": true, "subfields": [
222
- {"name": "productId", "type": "UUID"},
223
- {"name": "quantity", "type": "Int"},
224
- {"name": "unitPrice", "type": "Decimal"}
225
- ]}
226
- \`\`\`
227
-
228
- **Nested custom types** - subfields can themselves be Custom types:
229
- \`\`\`json
230
- {"name": "customer", "type": "Custom", "subfields": [
231
- {"name": "customerId", "type": "UUID"},
232
- {"name": "name", "type": "String"},
233
- {"name": "billingAddress", "type": "Custom", "subfields": [
234
- {"name": "street", "type": "String"},
235
- {"name": "city", "type": "String"},
236
- {"name": "country", "type": "String"}
237
- ]}
238
- ]}
239
- \`\`\`
240
-
241
- ## Common Mistakes
242
-
243
- - **Creating empty Custom fields**: Custom fields MUST have subfields that define their structure.
244
- - Wrong: \`{"name": "address", "type": "Custom"}\`
245
- - Right: \`{"name": "address", "type": "Custom", "subfields": [{"name": "street", "type": "String"}, ...]}\`
246
-
247
- - **Using "List" as a field type**: "List" is not a valid type. Use \`"isList": true\` with a valid type instead.
248
- - Wrong: \`{"name": "items", "type": "List"}\`
249
- - Right: \`{"name": "items", "type": "String", "isList": true}\`
250
-
251
- - **Using wrong attribute names**: Always use camelCase attributes.
252
- - Wrong: \`"optional": true\`, \`"generated": true\`, \`"list": true\`, \`"user-input": true\`
253
- - Right: \`"isOptional": true\`, \`"isGenerated": true\`, \`"isList": true\`, \`"isUserInput": true\`
254
-
255
- ## Workflow
256
-
257
- 1. **Understand the action** - What is the user/system trying to do?
258
- 2. **Design the fields** - What information flows through this slice?
259
- 3. **Propose before creating** - Get approval on the design first
260
- 4. **Create the elements and flows** - Add fields and connect with flows
261
- 5. **Verify** - \`eventmodeler show slice "<name>"\`
262
- 6. **Connect** - Create flows to/from other slices as needed
263
-
264
- ## Best Practices
265
-
266
- 1. **Get approval first** - Propose the design before creating
267
- 2. **Use meaningful names** - Slice name should describe the action ("Place Order" not "Order Slice")
268
- 3. **Include generated fields** - Events should have IDs and timestamps
269
- 4. **Match field names** - Same names enable automatic mapping
270
- 5. **Consider what's user input vs system data** - Mark appropriately
271
- 6. **Name automation read models for their purpose** - "OrderReadyForFulfillment" not "OrderData"
272
- 7. **Name processors descriptively** - "Order Fulfillment Processor" not just "Processor"
273
- `;
@@ -1,238 +0,0 @@
1
- export const meta = {
2
- name: 'explore',
3
- description: 'Navigate and query an event model: list, show, search, completeness',
4
- };
5
- export const content = `
6
- # Exploring Event Models with the CLI
7
-
8
- The \`eventmodeler\` CLI lets you query and explore event models linked to your project.
9
-
10
- ## Getting an Overview
11
-
12
- **Start here** to understand the model:
13
-
14
- \`\`\`bash
15
- eventmodeler summary
16
- \`\`\`
17
- Shows statistics: total slices, events, commands, read models, etc.
18
-
19
- \`\`\`bash
20
- eventmodeler list slices
21
- \`\`\`
22
- Lists all slices with their status (created, in-progress, blocked, done). Slices represent vertical features.
23
-
24
- \`\`\`bash
25
- eventmodeler list slices --chapter "<name>"
26
- \`\`\`
27
- Lists only slices within a specific chapter.
28
-
29
- \`\`\`bash
30
- eventmodeler list chapters
31
- \`\`\`
32
- Lists chapters - timeline sections that group slices.
33
-
34
- ## Listing Elements
35
-
36
- \`\`\`bash
37
- eventmodeler list events # All events in the model
38
- eventmodeler list commands # All commands in the model
39
- eventmodeler list readmodels # All read models
40
- eventmodeler list screens # All screens
41
- eventmodeler list processors # All processors
42
- eventmodeler list scenarios # All scenarios
43
- eventmodeler list aggregates # All aggregates (event groupings)
44
- eventmodeler list actors # All actors (user/system roles)
45
- \`\`\`
46
-
47
- All \`list\` commands output JSON.
48
-
49
- ## Searching
50
-
51
- \`\`\`bash
52
- eventmodeler search "<term>"
53
- \`\`\`
54
- Searches across all entity names: slices, events, commands, read models, aggregates, and actors.
55
-
56
- ## Drilling Into Details
57
-
58
- ### Show a Slice
59
- \`\`\`bash
60
- eventmodeler show slice "<name>"
61
- \`\`\`
62
- Returns JSON with:
63
- - All components in the slice (screens, commands, events, read-models, processors)
64
- - **Flow annotations** on each component showing incoming and outgoing connections
65
- - Fields on each component with types and attributes
66
- - Information flow (which components connect to which)
67
- - **Inbound flows**: External elements flowing INTO this slice (with field mappings)
68
- - **Outbound flows**: Elements in this slice flowing OUT to other slices (with field mappings)
69
- - Scenarios (Given-When-Then test cases)
70
-
71
- The inbound/outbound flows show cross-slice dependencies - crucial for understanding how a slice integrates with the rest of the system.
72
-
73
- **Scenarios are key** - they define the slice's behavior and give it context. A slice's scenarios show:
74
- - **Given**: What events have already occurred (the starting state)
75
- - **When**: What command is being executed with what field values
76
- - **Then**: The expected outcome - either:
77
- - Events that should be produced
78
- - An error that should occur
79
- - A read model assertion (expected state)
80
-
81
- Example scenario in slice output:
82
- \`\`\`json
83
- {
84
- "scenarios": [
85
- {
86
- "name": "Successfully place order",
87
- "given": [
88
- { "event": "CustomerRegistered", "fieldValues": { "customerId": "123" } }
89
- ],
90
- "when": {
91
- "command": "PlaceOrder",
92
- "commandFieldValues": { "customerId": "123", "items": ["..."] }
93
- },
94
- "then": {
95
- "type": "events",
96
- "events": [
97
- { "event": "OrderPlaced", "fieldValues": { "orderId": "456", "customerId": "123" } }
98
- ]
99
- }
100
- },
101
- {
102
- "name": "Cannot place order without items",
103
- "when": {
104
- "command": "PlaceOrder",
105
- "commandFieldValues": { "customerId": "123", "items": [] }
106
- },
107
- "then": {
108
- "type": "error",
109
- "errorType": "ValidationError",
110
- "errorMessage": "Order must contain at least one item"
111
- }
112
- }
113
- ]
114
- }
115
- \`\`\`
116
-
117
- Reading scenarios helps understand:
118
- - What preconditions the slice expects
119
- - What inputs the command accepts
120
- - What the happy path looks like
121
- - What error cases are handled
122
-
123
- ### Show an Event or Command
124
- \`\`\`bash
125
- eventmodeler show event "<name>"
126
- eventmodeler show command "<name>"
127
- \`\`\`
128
- Returns JSON with the element's fields and connections.
129
-
130
- ### Show Read Models, Screens, and Processors
131
- \`\`\`bash
132
- eventmodeler show readmodel "<name>"
133
- eventmodeler show screen "<name>"
134
- eventmodeler show processor "<name>"
135
- \`\`\`
136
- Use these for detailed flow context:
137
- - \`show readmodel\`: fields, source events, and who consumes it
138
- - \`show screen\`: fields, source read models, and triggered commands
139
- - \`show processor\`: fields, source read models, and triggered commands
140
-
141
- ### Show Aggregate and Scenario
142
- \`\`\`bash
143
- eventmodeler show aggregate "<name>"
144
- eventmodeler show scenario "<name>"
145
- \`\`\`
146
- - \`show aggregate\`: aggregate ID configuration and contained events
147
- - \`show scenario\`: complete Given-When-Then with field values
148
-
149
- ### Show a Chapter
150
- \`\`\`bash
151
- eventmodeler show chapter "<name>"
152
- \`\`\`
153
- Shows the chapter with:
154
- - All slices within the chapter
155
- - **Flow graph**: How slices connect to each other (which events flow to which read models, etc.) with field mappings
156
- - **External dependencies**:
157
- - Inbound: Flows from outside the chapter into slices within it
158
- - Outbound: Flows from slices in this chapter to elements outside it
159
-
160
- Use \`show chapter\` to understand the relationships between slices in a feature area. Use \`list slices --chapter\` for a simple list without flow details.
161
-
162
- ### Show an Actor
163
- \`\`\`bash
164
- eventmodeler show actor "<name>"
165
- \`\`\`
166
- Shows the actor and lists all screens associated with it.
167
-
168
- ## Managing Slice Status
169
-
170
- Slices have a status that tracks their progress: \`created\`, \`in-progress\`, \`blocked\`, \`done\`.
171
-
172
- \`\`\`bash
173
- # Mark a slice as in progress
174
- eventmodeler mark "Place Order" in-progress
175
-
176
- # Mark a slice as done
177
- eventmodeler mark "Place Order" done
178
-
179
- # Mark a slice as blocked
180
- eventmodeler mark "Place Order" blocked
181
-
182
- # Reset to created
183
- eventmodeler mark "Place Order" created
184
- \`\`\`
185
-
186
- Use \`list slices\` to see current statuses.
187
-
188
- ## Checking Information Completeness
189
-
190
- Information completeness tracks whether fields flow correctly between connected elements.
191
-
192
- ### Check a Specific Element
193
- \`\`\`bash
194
- eventmodeler show completeness "<name>"
195
- \`\`\`
196
- Auto-detects the element type (command, event, read model, screen, or processor) and shows:
197
- - Incoming flows to that element
198
- - Which fields are satisfied (have a source)
199
- - Which fields are unsatisfied (missing a source)
200
-
201
- ### Check the Entire Model
202
- \`\`\`bash
203
- eventmodeler show model-completeness
204
- \`\`\`
205
- Project-wide view of all information flows:
206
- - Summary: complete count, incomplete count, total
207
- - Lists all incomplete flows with their unsatisfied fields
208
-
209
- ### Check Aggregate ID Fields
210
- \`\`\`bash
211
- eventmodeler show aggregate-completeness "<aggregate-name>"
212
- \`\`\`
213
- Checks if all events in an aggregate have the aggregate's ID field.
214
-
215
- ## Exploration Strategy
216
-
217
- When exploring an unfamiliar event model:
218
-
219
- 1. **Get the big picture**: \`eventmodeler summary\` → understand scale
220
- 2. **See the features**: \`eventmodeler list slices\` → what does this system do?
221
- 3. **Understand organization**: \`eventmodeler list chapters\` → how is it structured over time?
222
- 4. **Dive into a slice**: \`eventmodeler show slice "<name>"\` → how does one feature work?
223
- 5. **Read the scenarios**: They tell you what the slice actually does, its preconditions, and edge cases
224
- 6. **Search for specifics**: \`eventmodeler search "<term>"\` → find related elements
225
-
226
- When checking model health:
227
- 1. **Overall completeness**: \`eventmodeler show model-completeness\` → any broken flows?
228
- 2. **Specific element**: \`eventmodeler show completeness "<name>"\` → what's missing here?
229
- 3. **Aggregate consistency**: \`eventmodeler show aggregate-completeness "<name>"\` → ID fields present?
230
-
231
- When looking for something specific:
232
- - Know the feature name? → \`show slice\`
233
- - Know an event name? → \`show event\` or \`search\`
234
- - Know a read model/screen/processor name? → \`show readmodel\` / \`show screen\` / \`show processor\`
235
- - Need scenario details? → \`list scenarios\` then \`show scenario\`
236
- - Want all events? → \`list events\`
237
- - Checking data flow? → \`show completeness\` or \`show model-completeness\`
238
- `;