@eventmodelers/cli 1.0.116 → 1.0.118

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eventmodelers/cli",
3
- "version": "1.0.116",
3
+ "version": "1.0.118",
4
4
  "description": "Eventmodelers CLI — real-time Claude agent + skills for Claude Code, for any stack (Node, Supabase, Axon, OpenCQRS, UmaDB, Kurrent, or modeling-only)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -69,6 +69,8 @@ Every pass reads the code through the same four lenses; each produces *hypothese
69
69
 
70
70
  **With a URL, walk it via `discover-storyboard`** (URL already known — don't ask again; pass the flow as guidance and ask for screenshots). Its click path is the *proposed* order and its screens go into the chapter as evidence; confirm both against the API and persistence lenses. Submit forms only against a local or test system, or after the person agrees.
71
71
 
72
+ If the code is a generic engine (templates, schemas, configurable entities), model one real case it handles, not the engine (see *Concrete Over Generic* in `eventmodeling-core-rules`).
73
+
72
74
  Where the lenses disagree (a route nobody calls, a table never written, a test for removed behaviour, a screen with no backend), that is a question for the person — not something to model.
73
75
 
74
76
  ---
@@ -93,7 +95,7 @@ Rules of thumb: every API call is either a screen-driven command/read or an auto
93
95
 
94
96
  ### Pass 0 — all chapters, high level
95
97
  1. Read the sources broadly through the four lenses to spot the business workflows — walking the running UI from Step 1 via `discover-storyboard` if there is one.
96
- 2. Group them into chapters and create them as `eventmodeling-brainstorming-events` (§ *Group events by workflow* / *Create one chapter per group*) does — a chapter is a workflow, never one endpoint or CRUD operation. Order the chapters per `eventmodeling-plotting-events`; ask where it is unclear. Add the **Decisions** lane, put the `Legacy Sources` note into **column 0** (see *The analysis log*), then sketch only the milestones (titles only) **from column 1 on**.
98
+ 2. Group them into chapters and create them as `eventmodeling-brainstorming-events` (§ *Group events by workflow* / *Create one chapter per group*) does — a chapter is a user journey, never one endpoint, controller or CRUD operation. Code is split by operation (`OwnerController#initCreationForm`, `#processFindForm`, `#showOwner`, `#processUpdateOwnerForm`); the story is not — registering, finding, viewing and updating an owner are **one** chapter. Order the chapters per `eventmodeling-plotting-events`; ask where it is unclear. Add the **Decisions** lane, put the `Legacy Sources` note into **column 0** (see *The analysis log*), then sketch only the milestones (titles only) **from column 1 on**.
97
99
  3. Report the chapters and **ask which chapter to start with**. Never pick for them.
98
100
 
99
101
  ### Pass N — detail the chosen chapter
@@ -78,6 +78,14 @@ After completing the analysis, partition the full event list into groups where e
78
78
 
79
79
  If all events belong to a single flow, one timeline is correct — do not split artificially.
80
80
 
81
+ **A chapter tells a story — a user journey, not an operation.** Read the chapter titles aloud in order: each should be a journey someone lives through from start to outcome (*Owner & Pet Care*, *Visit Booking*), never a single action or screen (*Register Owner*, *Find Owner*, *Update Owner*, *View Owner*). Creating, finding, viewing and updating the same thing is **one** story — registering an owner, looking them up and correcting their address belong in one chapter. Signs a chapter is too fine-grained:
82
+
83
+ - its title is one verb + one noun, or names one form/page;
84
+ - it holds one or two slices;
85
+ - the next chapter starts with the read model or entity this one just produced (*Owner Registered* → *Find and View an Owner*) — that is the same story continuing; merge them.
86
+
87
+ When in doubt, merge: a chapter with a dozen slices that reads as one journey is right; five chapters of two slices each is not.
88
+
81
89
  **Divergent journey vs. a decision point — do not confuse the two.** A group of events sometimes contains a branch, and the branch's nature decides whether it gets its own chapter or stays inside this one:
82
90
 
83
91
  - **Divergent journey → its own chapter.** The actor makes a different choice *before* the process even starts, and everything downstream differs as a result (e.g. "Checkout with saved card" vs. "Checkout as guest" — different screens, different commands, arguably a different Role Catalog entry). Group these as separate workflows in Step 1, not as one group with a fork in it.
@@ -165,6 +165,14 @@ Model the business process as it would work without any software first, then tra
165
165
 
166
166
  Question any step that exists only because of the system — a loading spinner, a cache refresh, a session check is not a business step and does not belong on the timeline. This is the discipline behind the Anti-Patterns below; the anti-patterns are what it looks like when this principle is skipped.
167
167
 
168
+ ## Concrete Over Generic
169
+
170
+ Looking at the model, a reader must understand how the business works. Model one real flow with real examples and real data, not a generic model that covers every case. This applies to generic platforms too: model one real case the platform handles, not the platform's own structure.
171
+
172
+ Example (a template-driven health record system):
173
+ - ❌ `Commit Composition` with fields `content`, or `name`/`category`/`entries` — still says nothing about the business.
174
+ - ✅ `Record Blood Pressure` → `Blood Pressure Recorded` with `systolic: 132`, `diastolic: 92`, `pulse: 113`, `composer: Dr. Marcus Johnson`.
175
+
168
176
  ## Anti-Patterns
169
177
 
170
178
  - **Data-loading commands**: `LoadOrders`/`FetchData` are queries, not business intent — model as a READMODEL, not a COMMAND.
@@ -209,5 +217,6 @@ Before treating a model as done, verify:
209
217
  - [ ] The timeline starts with a state-view or an automation reacting to an event — not a bare COMMAND
210
218
  - [ ] No two `state-change`/`state-change` slices are chained without a new trigger between them
211
219
  - [ ] No SCREEN is wired to more than one COMMAND (the bed — see Structural Shapes)
220
+ - [ ] The model follows one real flow with real data, not a generic one (see Concrete Over Generic)
212
221
 
213
222
  This is the fast pass — the full, deeper check is `eventmodeling-validating-event-models-checklist`.