@eventmodelers/cli 1.0.66 → 1.0.67
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.
|
|
3
|
+
"version": "1.0.67",
|
|
4
4
|
"description": "Eventmodelers CLI — real-time Claude agent + skills for Claude Code, for any stack (Node, Supabase, Axon, Cratis, OpenCQRS, UmaDB, Kurrent, or modeling-only)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -87,12 +87,19 @@ Only needed without MCP; `get_connected_nodes` already applies this rule itself
|
|
|
87
87
|
|
|
88
88
|
Hand-built or imported chapters frequently have **no edges at all** — every node comes back with `edges: []` and `get_board_outline`'s edge list is empty. That is not an error and not a reason to stop: in that case grid geometry *is* the chain. Use the chapter cell layout (already in memory from 3a) to find inbound neighbours:
|
|
89
89
|
|
|
90
|
-
In a standard event modeling layout:
|
|
90
|
+
In a standard event modeling layout (rows per `eventmodeling-core-rules` — `actor`: SCREEN/AUTOMATION, `interaction`: COMMAND/READMODEL, `swimlane`: EVENT):
|
|
91
|
+
|
|
91
92
|
- **READMODEL** in the interaction row → its inbound EVENT is in the swimlane row of the **same column**
|
|
92
93
|
- **EVENT** in the swimlane row → its inbound COMMAND is in the interaction row of the **same column**
|
|
93
|
-
- **COMMAND** in the interaction row → its
|
|
94
|
+
- **COMMAND** in the interaction row → its issuer is the SCREEN/AUTOMATION in the actor row of the **same column**; the READMODEL supplying that issuer is in the interaction row of the **previous column** — never this column, whose interaction row is already occupied by this COMMAND. A column's interaction row holds exactly one node, a COMMAND *or* a READMODEL, never both, so "same column" is not an option when walking back from a COMMAND
|
|
95
|
+
- **SCREEN** in the actor row → its inbound READMODEL is in the interaction row of the **same column**, or of the **previous column** when this screen's own interaction row is taken by the COMMAND it issues
|
|
96
|
+
- **AUTOMATION** in the actor row → its inbound READMODEL is in the interaction row of the **previous column** — never the same column, which already holds the COMMAND it issues
|
|
97
|
+
|
|
98
|
+
Walking **forward** (does this node have a consumer?), a READMODEL's SCREEN/AUTOMATION is in the actor row of its **own column or the very next one** — both are correct. Never conclude a read model is unconsumed from its own column alone; check the next column before reporting a gap.
|
|
99
|
+
|
|
100
|
+
Two mistakes this list exists to prevent: a COMMAND's inbound READMODEL is in the **interaction** row (the same row type the COMMAND itself sits in, one column earlier), *not* the swimlane row, which holds EVENTs only. And a READMODEL feeding a consumer one column to its right is the normal shape, not a backward arrow (`eventmodeling-core-rules` — "Connections Read Forward").
|
|
94
101
|
|
|
95
|
-
Resolve candidates from the chapter read you already have — do **not** issue a `?cellId=` lookup per candidate. If the chapter's `meta.timelineData.cells` is sparse or absent, derive each node's (column, row) from `node.position.x/y` bucketed against `meta.timelineData.columns[].width` and `rows[].height`; that mapping is enough to apply the
|
|
102
|
+
Resolve candidates from the chapter read you already have — do **not** issue a `?cellId=` lookup per candidate. If the chapter's `meta.timelineData.cells` is sparse or absent, derive each node's (column, row) from `node.position.x/y` bucketed against `meta.timelineData.columns[].width` and `rows[].height`; that mapping is enough to apply the rules above. Skip candidates that don't exist or are already in the chain.
|
|
96
103
|
|
|
97
104
|
### 3c — Stop condition
|
|
98
105
|
Stop traversal when:
|
package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/SKILL.md
CHANGED
|
@@ -172,7 +172,7 @@ Once a component's fields are genuinely homogeneous (every field needs the same
|
|
|
172
172
|
|
|
173
173
|
After this step is done, **every SCREEN and every AUTOMATION on the board must be connected to at least one read model** via a `READMODEL → SCREEN` or `READMODEL → AUTOMATION` connection, and every screen identified above as having 2+ components must have been broken apart per Step 5c before any read model is placed. If a screen or automation has no incoming read model connection, it is a gap — either a read model is missing or the connection arrow is missing.
|
|
174
174
|
|
|
175
|
-
> **Placement rule**: A read model must be placed immediately upstream of the SCREEN or AUTOMATION it serves — sharing that column when possible (a SCREEN with a free interaction row), or one column to the left when not (any AUTOMATION; a SCREEN whose column is already occupied).
|
|
175
|
+
> **Placement rule**: A read model must be placed immediately upstream of the SCREEN or AUTOMATION it serves — sharing that column when possible (a SCREEN with a free interaction row), or one column to the left when not (any AUTOMATION; a SCREEN whose column is already occupied). So a read model's consumer sits either in the read model's own column or in the very next one — both are correct, and a consumer one column to the right is **not** a gap and must never be reported as one. What *is* a gap is a read model with no SCREEN or AUTOMATION in either of those two places: an orphan that will never be displayed or acted on.
|
|
176
176
|
|
|
177
177
|
> **Automation todo-list read models are designed in Step 4b, not here.** The full pattern — every automation's todo-list read model, the "no invisible signal" rule, and the two-chained-automation translation requirement for externally-triggered automations — now lives in `eventmodeling-designing-automation-chains` (Step 4b), which runs immediately after Step 4, before this step. If Step 4b ran, every automation already on the board has its todo-list read model wired; Step 5i below only re-checks this defensively. The rare exception is an automation discovered only now, during output analysis (see "Output Format" above) — if that happens, apply `eventmodeling-designing-automation-chains`'s rules to it directly rather than re-deriving them here.
|
|
178
178
|
|