@milehimikey/em 1.0.0 → 1.1.1
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/.claude/skills/event-modeling/SKILL.md +23 -70
- package/.claude/skills/event-modeling/reference/em-dsl.md +0 -15
- package/.claude/skills/event-modeling/templates/model-readme.md +4 -4
- package/.claude/skills/event-modeling/templates/slice.md +2 -4
- package/.claude/skills/event-modeling/templates/state.md +3 -9
- package/README.md +16 -31
- package/dist/cli.js +4 -227
- package/dist/cli.js.map +1 -1
- package/dist/model/edges.js +25 -1
- package/dist/model/edges.js.map +1 -1
- package/dist/model/model.d.ts +4 -0
- package/dist/model/model.js +13 -0
- package/dist/model/model.js.map +1 -1
- package/dist/model/validate.d.ts +0 -2
- package/dist/model/validate.js +51 -6
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/ast.d.ts +2 -0
- package/dist/parser/parser.js +9 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/render/drawEdges.js +46 -1
- package/dist/render/drawEdges.js.map +1 -1
- package/package.json +4 -5
- package/.claude/skills/event-modeling/reference/frontmatter.md +0 -129
- package/dist/config.d.ts +0 -15
- package/dist/config.js +0 -60
- package/dist/config.js.map +0 -1
- package/dist/migrate/migrate.d.ts +0 -26
- package/dist/migrate/migrate.js +0 -276
- package/dist/migrate/migrate.js.map +0 -1
- package/dist/model/deriveSliceFields.d.ts +0 -21
- package/dist/model/deriveSliceFields.js +0 -60
- package/dist/model/deriveSliceFields.js.map +0 -1
- package/dist/model/frontmatter.d.ts +0 -21
- package/dist/model/frontmatter.js +0 -38
- package/dist/model/frontmatter.js.map +0 -1
- package/dist/model/sliceDoc.d.ts +0 -56
- package/dist/model/sliceDoc.js +0 -28
- package/dist/model/sliceDoc.js.map +0 -1
- package/dist/model/validateSliceDocs.d.ts +0 -7
- package/dist/model/validateSliceDocs.js +0 -195
- package/dist/model/validateSliceDocs.js.map +0 -1
- package/dist/slice/generate.d.ts +0 -17
- package/dist/slice/generate.js +0 -61
- package/dist/slice/generate.js.map +0 -1
- package/dist/slice/query.d.ts +0 -42
- package/dist/slice/query.js +0 -96
- package/dist/slice/query.js.map +0 -1
- package/dist/slice/sync.d.ts +0 -18
- package/dist/slice/sync.js +0 -104
- package/dist/slice/sync.js.map +0 -1
- package/dist/util/findModel.d.ts +0 -1
- package/dist/util/findModel.js +0 -27
- package/dist/util/findModel.js.map +0 -1
|
@@ -16,10 +16,9 @@ You are facilitating an Event Modeling session. Your job is to **extract an accu
|
|
|
16
16
|
the user through Socratic questioning** — never to invent the domain. You drive the `em` CLI to
|
|
17
17
|
render the model live, and you produce implementation-ready slice design docs.
|
|
18
18
|
|
|
19
|
-
Read `reference/methodology.md` (the 7 steps + 4 patterns)
|
|
20
|
-
validation rules)
|
|
21
|
-
|
|
22
|
-
source of truth. Templates live in `templates/`.
|
|
19
|
+
Read `reference/methodology.md` (the 7 steps + 4 patterns) and `reference/em-dsl.md` (DSL syntax
|
|
20
|
+
+ validation rules) before doing real work — they are the source of truth. Templates live in
|
|
21
|
+
`templates/`.
|
|
23
22
|
|
|
24
23
|
## Operating principles (every phase)
|
|
25
24
|
|
|
@@ -59,13 +58,7 @@ source of truth. Templates live in `templates/`.
|
|
|
59
58
|
2. Locate the model. Look for an existing `<dir>/.event-modeling.md` and `*.em` in the working
|
|
60
59
|
directory (or a `models/` subfolder). If found, read the state file. If not, and the phase
|
|
61
60
|
needs one, ask the user for the model name and where to create it.
|
|
62
|
-
3.
|
|
63
|
-
`em validate <model>.em` — a missing-frontmatter doc errors with a message pointing at this),
|
|
64
|
-
tell the user this model predates the frontmatter standard and offer to run
|
|
65
|
-
`em migrate <model-dir>` before continuing (it refuses a dirty git tree by default — commit
|
|
66
|
-
first, or pass `--force`). Don't hand-edit old-format docs around this; migrate once, then
|
|
67
|
-
proceed normally.
|
|
68
|
-
4. Parse the argument (`$ARGUMENTS`) to pick the phase below. With **no argument**, read the
|
|
61
|
+
3. Parse the argument (`$ARGUMENTS`) to pick the phase below. With **no argument**, read the
|
|
69
62
|
state file and resume the recorded phase/step; if no model exists, propose starting `discover`.
|
|
70
63
|
|
|
71
64
|
## Project layout this skill creates
|
|
@@ -76,24 +69,14 @@ source of truth. Templates live in `templates/`.
|
|
|
76
69
|
<model-name>.svg # render target for em watch
|
|
77
70
|
live.html # auto-refresh viewer (copy of templates/live.html, SVG_FILE set)
|
|
78
71
|
README.md # overview + slice index (from templates/model-readme.md)
|
|
79
|
-
.event-modeling.md # resumable state (from templates/state.md
|
|
80
|
-
|
|
81
|
-
slices/<slice-id>.md # one rich slice doc per slice, scaffolded via `em slice new`
|
|
72
|
+
.event-modeling.md # resumable state (from templates/state.md)
|
|
73
|
+
slices/<slice-name>.md # one rich slice doc per slice (from templates/slice.md)
|
|
82
74
|
```
|
|
83
75
|
|
|
84
|
-
When creating a new model, scaffold the directory, copy the
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
delivered files. **Slice docs are the one exception**: don't hand-copy `templates/slice.md` —
|
|
89
|
-
use `em slice new` (see the `slice` phase below), which injects the required frontmatter and
|
|
90
|
-
respects a project's `em.config.json` custom template if one is configured.
|
|
91
|
-
|
|
92
|
-
Ask the **Regulatory scope** session input (state.md) up front, alongside Scope line / PRD
|
|
93
|
-
reference / Headless-API-model: does this domain have compliance requirements (PCI-DSS, SOX,
|
|
94
|
-
HIPAA, GDPR, ...) or none? This decides whether the `slice` phase asks about the `compliance:`
|
|
95
|
-
frontmatter block per slice (see `reference/frontmatter.md`) — don't ask about compliance at all
|
|
96
|
-
for a model with no regulatory scope.
|
|
76
|
+
When creating a new model, scaffold the directory, copy the templates in (filling the
|
|
77
|
+
placeholders), and set `SVG_FILE` in the copied `live.html` to `<model-name>.svg`. You may use
|
|
78
|
+
`em init` for a starter `.em`, but usually you'll build it up from the discovery conversation
|
|
79
|
+
instead. Fill template placeholders — never leave `{{...}}` in delivered files.
|
|
97
80
|
|
|
98
81
|
---
|
|
99
82
|
|
|
@@ -159,33 +142,17 @@ the corresponding event/slice to the `.em` and re-render. The happy-path spine f
|
|
|
159
142
|
phases is the starting point, not the finished event set.
|
|
160
143
|
|
|
161
144
|
For each slice:
|
|
162
|
-
1.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
one; the shipped default otherwise) ready to fill in.
|
|
166
|
-
2. Hold a Socratic deep-dive to fill every body section: intent, trigger/actor, command + field
|
|
167
|
-
table (types & rules), event(s) + payload (mark immutable facts), invariants (give each a
|
|
168
|
-
stable ID), Given/When/Then scenarios (happy path + rule boundaries + edge cases),
|
|
145
|
+
1. Hold a Socratic deep-dive to fill every section of `templates/slice.md`: intent, trigger/actor,
|
|
146
|
+
command + field table (types & rules), event(s) + payload (mark immutable facts), invariants
|
|
147
|
+
(give each a stable ID), Given/When/Then scenarios (happy path + rule boundaries + edge cases),
|
|
169
148
|
alternate/error flows (retries, idempotency, compensations), read models affected, open
|
|
170
|
-
questions. Park anything unresolved rather than guessing.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
for
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
3. Wire it into the `.em`: add `note "slices/<id>.md"` to the slice's primary element (the command
|
|
178
|
-
for State Change, the view for State View, the processor for Automation, the translation for
|
|
179
|
-
Translation).
|
|
180
|
-
4. Run `em slice sync <id>` — it discovers the linked element from that `note` and fills in the
|
|
181
|
-
generated frontmatter fields (`commands`/`events`/`readModels`/`contexts`/`personas`, and
|
|
182
|
-
`triggers`/`triggeredBy` for automation/translation). **Re-run `em slice sync <id>` (or
|
|
183
|
-
`--all`) after any later `.em` edit that touches this slice's elements** — generated fields
|
|
184
|
-
drift otherwise, and `em validate` will flag it.
|
|
185
|
-
5. When the doc is solid, move it forward: `em slice update <id> --status reviewed` (and later
|
|
186
|
-
`--status ready-to-implement`). Update `README.md`'s slice index.
|
|
187
|
-
6. Re-render and `em validate` (validates the `.em` **and** every slice doc's frontmatter by
|
|
188
|
-
default).
|
|
149
|
+
questions. Park anything unresolved rather than guessing.
|
|
150
|
+
2. Write the doc to `slices/<slice-name>.md` (kebab-case the slice name).
|
|
151
|
+
3. Wire it into the `.em`: add `note "slices/<slice-name>.md"` to the slice's primary element
|
|
152
|
+
(the command for State Change, the view for State View, the processor for Automation, the
|
|
153
|
+
translation for Translation).
|
|
154
|
+
4. Update `README.md`'s slice index and the state file's slice inventory (`draft` → `ready`).
|
|
155
|
+
5. Re-render and `em validate`.
|
|
189
156
|
|
|
190
157
|
## Phase: `watch` — live team view
|
|
191
158
|
|
|
@@ -200,13 +167,8 @@ For each slice:
|
|
|
200
167
|
## Phase: `validate`
|
|
201
168
|
|
|
202
169
|
Run `em validate <model-name>.em` and walk through each diagnostic with the user, explaining the
|
|
203
|
-
rule (see `reference/em-dsl.md`
|
|
204
|
-
|
|
205
|
-
- `.em`-level fixes: split an automation's command into the next slice, add a missing `from`, give
|
|
206
|
-
a command its event.
|
|
207
|
-
- Slice-doc-level fixes: no frontmatter block → run `em migrate` (pre-1.0 model); "out of sync
|
|
208
|
-
with .em" → run `em slice sync <id>`; orphan doc → wire a `note "slices/<id>.md"` onto the
|
|
209
|
-
right element, then sync.
|
|
170
|
+
rule (see `reference/em-dsl.md`) and proposing the fix (e.g. split an automation's command into
|
|
171
|
+
the next slice, add a missing `from`, give a command its event). Apply fixes on agreement.
|
|
210
172
|
|
|
211
173
|
Then do one check `em validate` can't: scan every `translation`/`processor`/`automation` slice and
|
|
212
174
|
confirm none contains an `event` — each reaction must trigger a `command` in the next slice
|
|
@@ -220,20 +182,11 @@ two slices and route it through a command.
|
|
|
220
182
|
```bash
|
|
221
183
|
em --version
|
|
222
184
|
em init <name>.em # optional starter scaffold
|
|
223
|
-
em validate <name>.em # check
|
|
185
|
+
em validate <name>.em # check rules; exit 0 if clean/warnings only
|
|
224
186
|
em render <name>.em -o <name>.svg # render (svg/png/pdf by extension)
|
|
225
187
|
em render <name>.em --emit-dot # inspect generated Graphviz DOT
|
|
226
188
|
em watch <name>.em -o <name>.svg # re-render on save (run in background)
|
|
227
|
-
|
|
228
|
-
em slice new "<Slice Name>" --pattern <pattern> # scaffold slices/<id>.md with frontmatter
|
|
229
|
-
em slice sync <id> # after wiring note "slices/<id>.md" into the .em
|
|
230
|
-
em slice update <id> --status <status> # move a slice's lifecycle status forward
|
|
231
|
-
em slice list / show <id> / search "<query>" # query slice docs by frontmatter (--format json)
|
|
232
|
-
em slice search "<q>" --format json --full # ...with every field, not just the summary row
|
|
233
|
-
em migrate <model-dir> # one-time upgrade from a pre-1.0 model
|
|
234
189
|
```
|
|
235
190
|
|
|
236
|
-
See `reference/frontmatter.md` for the full slice-doc frontmatter schema and CLI reference.
|
|
237
|
-
|
|
238
191
|
Always finish a working session by: re-rendering, running `em validate`, and updating
|
|
239
192
|
`.event-modeling.md` with the current phase/step, decisions, and open questions.
|
|
@@ -20,21 +20,6 @@ em validate <file> # check event-modeling rules; exit 0 if only warn
|
|
|
20
20
|
Install if missing: `npm i -g @milehimikey/em`. PNG works with no system deps; PDF needs
|
|
21
21
|
`rsvg-convert`.
|
|
22
22
|
|
|
23
|
-
**Slice docs** (frontmatter, lifecycle, search — see `reference/frontmatter.md` for the schema):
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
em slice new "Slice Name" [--pattern state-change] [--id <id>] # scaffold slices/<id>.md
|
|
27
|
-
em slice sync <id> # after wiring note "slices/<id>.md" into the .em
|
|
28
|
-
em slice sync --all # re-sync every doc in the model directory
|
|
29
|
-
em slice list [--status <s>] [--pattern <p>] [--context <c>] [--tag <t>] [--format json] [--full]
|
|
30
|
-
em slice show <id> [--body] [--format json]
|
|
31
|
-
em slice search "<query>" [--pattern <p>] [--status <s>] [--context <c>] [--tag <t>] [--format json] [--full]
|
|
32
|
-
em slice update <id> [--status <s>] [--bump-version]
|
|
33
|
-
em migrate <model-dir> [--dry-run] [--report <path>] # one-time upgrade from a pre-1.0 model
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
`em validate <file>` also validates every doc in `slices/` by default (`--skip-slices` to opt out).
|
|
37
|
-
|
|
38
23
|
---
|
|
39
24
|
|
|
40
25
|
## Grammar
|
|
@@ -19,10 +19,10 @@ Static render: `em render {{model-name}}.em -o {{model-name}}.svg`
|
|
|
19
19
|
- **Translation** — External input (or Read Model) → Translation → (next slice) Command → Event
|
|
20
20
|
|
|
21
21
|
## Slices
|
|
22
|
-
<!-- Keep this index in sync as slice docs are written
|
|
23
|
-
| # | Slice | Pattern |
|
|
24
|
-
|
|
25
|
-
| 1 | {{Slice Name}} | {{Pattern}} |
|
|
22
|
+
<!-- Keep this index in sync as slice docs are written. -->
|
|
23
|
+
| # | Slice | Pattern | Design doc |
|
|
24
|
+
|---|-------|---------|------------|
|
|
25
|
+
| 1 | {{Slice Name}} | {{Pattern}} | [slices/{{slice-name}}.md](slices/{{slice-name}}.md) |
|
|
26
26
|
|
|
27
27
|
## Status
|
|
28
28
|
See [`.event-modeling.md`](.event-modeling.md) for current phase, decisions, and open questions.
|
|
@@ -3,15 +3,13 @@ Rich slice design document. One per slice, stored in <model>/slices/<slice-name>
|
|
|
3
3
|
linked from the .em model with: note "slices/<slice-name>.md" on the slice's defining element.
|
|
4
4
|
Fill every section through Socratic questioning. Leave "Open Questions" rather than guessing.
|
|
5
5
|
Replace the bracketed placeholders; delete guidance comments before finishing.
|
|
6
|
-
|
|
7
|
-
This is the body template only — `em slice new` injects the required frontmatter block above
|
|
8
|
-
this content (id, pattern, status, version, sliceElement, and the generated search fields).
|
|
9
|
-
Pattern and status live there now, not as prose here — see reference/frontmatter.md.
|
|
10
6
|
-->
|
|
11
7
|
|
|
12
8
|
# Slice: {{Slice Name}}
|
|
13
9
|
|
|
10
|
+
- **Pattern:** {{State Change | State View | Automation | Translation}}
|
|
14
11
|
- **Swimlane:** {{Persona/Actor}} → {{Context/Aggregate}}
|
|
12
|
+
- **Status:** {{draft | reviewed | ready-to-implement}}
|
|
15
13
|
|
|
16
14
|
## Intent
|
|
17
15
|
{{Why this slice exists — the user or business goal it serves, in one or two sentences.}}
|
|
@@ -4,11 +4,6 @@ The skill reads this on `/event-modeling` (no arg) to resume where you left off.
|
|
|
4
4
|
Keep it current at the end of every working session.
|
|
5
5
|
-->
|
|
6
6
|
|
|
7
|
-
---
|
|
8
|
-
schemaVersion: 1
|
|
9
|
-
model: {{model-name}}.em
|
|
10
|
-
---
|
|
11
|
-
|
|
12
7
|
# Event Modeling Progress — {{Model Name}}
|
|
13
8
|
|
|
14
9
|
- **Model file:** `{{model-name}}.em`
|
|
@@ -20,7 +15,6 @@ model: {{model-name}}.em
|
|
|
20
15
|
- **Scope line:** {{one-line description of what's in/out of bounds for this model}}
|
|
21
16
|
- **PRD / spec reference:** {{path, link, or "none"}}
|
|
22
17
|
- **Headless/API model:** {{yes | no}}
|
|
23
|
-
- **Regulatory scope:** {{e.g. PCI-DSS, SOX, HIPAA, or "none"}}
|
|
24
18
|
|
|
25
19
|
## Steps completed
|
|
26
20
|
- [ ] 1. Brainstorm events
|
|
@@ -40,6 +34,6 @@ model: {{model-name}}.em
|
|
|
40
34
|
- [ ] {{question}}
|
|
41
35
|
|
|
42
36
|
## Slice inventory
|
|
43
|
-
| Slice |
|
|
44
|
-
|
|
45
|
-
| {{Slice Name}} | {{
|
|
37
|
+
| Slice | Pattern | Doc status |
|
|
38
|
+
|-------|---------|------------|
|
|
39
|
+
| {{Slice Name}} | {{State Change/View/Automation/Translation}} | {{none / draft / ready}} |
|
package/README.md
CHANGED
|
@@ -98,6 +98,12 @@ read model. The empty API lane is dropped when a model has neither; pass `--keep
|
|
|
98
98
|
to keep it.
|
|
99
99
|
|
|
100
100
|
`@Persona` / `@Context` choose the row within a band (undeclared tags create a new row).
|
|
101
|
+
`view <Name> again [from "Event", …]` declares a LATER INSTANCE of an already-declared read
|
|
102
|
+
model — the Event Modeling device for keeping the timeline forward-only as a view evolves.
|
|
103
|
+
Instances are one logical view: the first declaration owns the `note` doc; each instance lists
|
|
104
|
+
the events that reach it there; instances are linked left-to-right with a continuity arrow, and
|
|
105
|
+
reactions (`processor … from "View"`) read the nearest instance at-or-before their slice.
|
|
106
|
+
|
|
101
107
|
`view … from "Event"[, "Event2"]` declares which events feed a read model and draws the
|
|
102
108
|
data-flow arrow. Arrows within a slice are inferred from the pattern; use `arrow A -> B` for
|
|
103
109
|
anything extra (e.g. a read model feeding a different screen).
|
|
@@ -148,16 +154,19 @@ em render <file> -o out.png # PNG (in-process, no system deps)
|
|
|
148
154
|
em render <file> --emit-dot # print the generated DOT instead of rendering
|
|
149
155
|
em render <file> --keep-empty-lanes # don't collapse the API lane when empty
|
|
150
156
|
em watch <file> [-o out.svg] # re-render on every save
|
|
151
|
-
em validate <file> # check event-modeling rules
|
|
152
|
-
em migrate <model-dir> # one-time upgrade of a pre-1.0 model to the frontmatter standard
|
|
157
|
+
em validate <file> # check event-modeling rules (non-zero exit on errors)
|
|
153
158
|
```
|
|
154
159
|
|
|
155
|
-
See [Slice docs & frontmatter](#slice-docs--frontmatter) below for the `em slice` command group.
|
|
156
|
-
|
|
157
160
|
## Validation rules (`em validate`)
|
|
158
161
|
|
|
159
162
|
- two same-band elements in one slice (collision) → **error** (split into separate slices)
|
|
160
163
|
- a read model whose `from "Event"` doesn't exist → **error**
|
|
164
|
+
- **time flows left to right** (the Two Laws): an event feeding an EARLIER view instance,
|
|
165
|
+
a reaction reading a view that only exists later, or an explicit backward `arrow` → **error**
|
|
166
|
+
(fix: add `view X again` at the point on the timeline where the event lands)
|
|
167
|
+
- `again` on a view with no earlier declaration → **error**; `again` on non-views → parse error
|
|
168
|
+
- multi-event slices always render as a FAN from the command (never event→event); fanned
|
|
169
|
+
arrows route around the column gutter so they cannot read as a chain
|
|
161
170
|
- an automation/translation whose `from "<read model>"` doesn't exist → **error**
|
|
162
171
|
- an `arrow` endpoint that matches no element → **error**
|
|
163
172
|
- an automation/translation slice that also holds the command it triggers → **warning**
|
|
@@ -165,34 +174,10 @@ See [Slice docs & frontmatter](#slice-docs--frontmatter) below for the `em slice
|
|
|
165
174
|
- a read model with no source event → **warning**
|
|
166
175
|
- a name defined more than once and referenced → **warning** (resolves to first)
|
|
167
176
|
|
|
168
|
-
## Slice docs & frontmatter
|
|
169
|
-
|
|
170
|
-
Slice design docs (`slices/<id>.md`, written during the skill's `slice` phase or via
|
|
171
|
-
`em slice new`) carry a required YAML frontmatter block — a stable `id`, lifecycle `status`,
|
|
172
|
-
integer `version`, and fields generated from the `.em` (`commands`/`events`/`readModels`/
|
|
173
|
-
`contexts`/`personas`, plus `triggers`/`triggeredBy` for automation/translation) — so an AI agent
|
|
174
|
-
can search and filter across a model with hundreds of slices from frontmatter alone, without
|
|
175
|
-
reading every doc's body or re-parsing the `.em`:
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
em slice new "Place Order" --pattern state-change # scaffold slices/place-order.md
|
|
179
|
-
em slice sync place-order # after wiring note "slices/..." into the .em
|
|
180
|
-
em slice list --status ready-to-implement
|
|
181
|
-
em slice search --pattern automation --context Payment --format json
|
|
182
|
-
em slice search --status ready-to-implement --format json --full # every field, not just a summary
|
|
183
|
-
em slice update place-order --status reviewed --bump-version
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
The doc body itself is **yours to define** — point `em.config.json` at a custom template
|
|
187
|
-
(`{ "sliceTemplate": "path/to/template.md" }`) and `em` injects the frontmatter on top of it
|
|
188
|
-
regardless of what sections you ask for. Full schema, lifecycle model, and the handoff contract a
|
|
189
|
-
build/SDD tool should treat as authoritative once a slice is `ready-to-implement`:
|
|
190
|
-
[docs/1.0.0-spec.md](docs/1.0.0-spec.md).
|
|
191
|
-
|
|
192
177
|
## Documentation
|
|
193
178
|
|
|
194
|
-
- [docs/
|
|
195
|
-
`
|
|
179
|
+
- [docs/timeline-model.md](docs/timeline-model.md) — the Two Laws of the Timeline (forward-only
|
|
180
|
+
validation, `view … again`)
|
|
196
181
|
- [docs/why-dot-not-plantuml.md](docs/why-dot-not-plantuml.md) — why DOT + the strict-grid /
|
|
197
182
|
self-drawn-edges architecture
|
|
198
183
|
- [docs/features.md](docs/features.md) — full feature list and roadmap
|
|
@@ -224,7 +209,7 @@ Then, in Claude Code, run:
|
|
|
224
209
|
/event-modeling # start (or resume) a guided session
|
|
225
210
|
/event-modeling discover # steps 1–4: brainstorm events, timeline, commands, read models
|
|
226
211
|
/event-modeling model # steps 5–7: swimlanes, patterns, completeness check
|
|
227
|
-
/event-modeling slice # deep implementation specs, one per slice
|
|
212
|
+
/event-modeling slice # deep implementation specs, one per slice
|
|
228
213
|
/event-modeling watch # open a live browser view for team modeling sessions
|
|
229
214
|
/event-modeling validate # run em validate and resolve all diagnostics
|
|
230
215
|
```
|
package/dist/cli.js
CHANGED
|
@@ -4,24 +4,18 @@ import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
|
4
4
|
import { cp, mkdir } from "node:fs/promises";
|
|
5
5
|
import { basename, dirname, extname, join, resolve } from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
|
-
import { Command
|
|
7
|
+
import { Command } from "commander";
|
|
8
8
|
import { compile } from "./pipeline.js";
|
|
9
9
|
import { ParseError } from "./parser/parser.js";
|
|
10
10
|
import { renderDot, formatFromPath } from "./render/render.js";
|
|
11
11
|
import { watchFile } from "./render/watch.js";
|
|
12
12
|
import { formatDiagnostic, hasErrors } from "./model/validate.js";
|
|
13
|
-
import { loadSliceDocs } from "./model/sliceDoc.js";
|
|
14
|
-
import { validateSliceDocs, VALID_PATTERNS, VALID_STATUSES } from "./model/validateSliceDocs.js";
|
|
15
|
-
import { newSlice } from "./slice/generate.js";
|
|
16
|
-
import { syncAll, syncSlice } from "./slice/sync.js";
|
|
17
|
-
import { listSliceRecords, listSlices, searchSliceRecords, searchSlices, showSlice, updateSlice, } from "./slice/query.js";
|
|
18
|
-
import { applyMigration, assertCleanWorkingTree, formatMigrationReport, planMigration, } from "./migrate/migrate.js";
|
|
19
13
|
import { STARTER_EM } from "./templates.js";
|
|
20
14
|
const program = new Command();
|
|
21
15
|
program
|
|
22
16
|
.name("em")
|
|
23
17
|
.description("Event Modeling CLI — slice-first DSL rendered as a strict Graphviz grid")
|
|
24
|
-
.version("1.
|
|
18
|
+
.version("1.1.1");
|
|
25
19
|
program
|
|
26
20
|
.command("init")
|
|
27
21
|
.description("scaffold a starter .em model")
|
|
@@ -105,13 +99,8 @@ program
|
|
|
105
99
|
.command("validate")
|
|
106
100
|
.description("check a model against event-modeling rules")
|
|
107
101
|
.argument("<file>", "input .em file")
|
|
108
|
-
.
|
|
109
|
-
|
|
110
|
-
const { model, diagnostics } = compileFile(file);
|
|
111
|
-
if (!opts.skipSlices) {
|
|
112
|
-
const docs = loadSliceDocs(dirname(file));
|
|
113
|
-
diagnostics.push(...validateSliceDocs(model, file, docs));
|
|
114
|
-
}
|
|
102
|
+
.action((file) => {
|
|
103
|
+
const { diagnostics } = compileFile(file);
|
|
115
104
|
printDiagnostics(diagnostics);
|
|
116
105
|
if (hasErrors(diagnostics))
|
|
117
106
|
process.exit(1);
|
|
@@ -139,198 +128,6 @@ skill
|
|
|
139
128
|
console.log(`installed event-modeling skill → ${dest}`);
|
|
140
129
|
console.log("in Claude Code, run /event-modeling to start a guided session");
|
|
141
130
|
});
|
|
142
|
-
const slice = program.command("slice").description("manage slice design docs (slices/*.md)");
|
|
143
|
-
slice
|
|
144
|
-
.command("new")
|
|
145
|
-
.description("scaffold a new slice doc with injected frontmatter")
|
|
146
|
-
.argument("<name>", 'slice title, e.g. "Place Order"')
|
|
147
|
-
.option("--dir <path>", "model directory", ".")
|
|
148
|
-
.option("--model <path>", "explicit .em file (default: the only .em in --dir)")
|
|
149
|
-
.option("--config <path>", "explicit em.config.json path")
|
|
150
|
-
.addOption(new Option("--pattern <pattern>", "slice pattern").choices(VALID_PATTERNS).default("state-change"))
|
|
151
|
-
.option("--id <id>", "explicit slice id (default: kebab-case of the name)")
|
|
152
|
-
.option("--slice-element <id>", "the .em Element.id this doc documents, if already known")
|
|
153
|
-
.option("-f, --force", "overwrite an existing doc with this id")
|
|
154
|
-
.action((name, opts) => {
|
|
155
|
-
try {
|
|
156
|
-
const result = newSlice(name, {
|
|
157
|
-
dir: opts.dir,
|
|
158
|
-
modelPath: opts.model,
|
|
159
|
-
configPath: opts.config,
|
|
160
|
-
pattern: opts.pattern,
|
|
161
|
-
id: opts.id,
|
|
162
|
-
sliceElement: opts.sliceElement,
|
|
163
|
-
force: opts.force,
|
|
164
|
-
});
|
|
165
|
-
console.log(`wrote ${result.path} (id: ${result.id})`);
|
|
166
|
-
}
|
|
167
|
-
catch (e) {
|
|
168
|
-
reportError(e);
|
|
169
|
-
process.exit(1);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
slice
|
|
173
|
-
.command("sync")
|
|
174
|
-
.description("recompute generated frontmatter fields (commands/events/readModels/contexts/personas/triggers) from the .em")
|
|
175
|
-
.argument("[id]", "slice id to sync (omit with --all)")
|
|
176
|
-
.option("--dir <path>", "model directory", ".")
|
|
177
|
-
.option("--model <path>", "explicit .em file")
|
|
178
|
-
.option("--all", "sync every slice doc in the directory")
|
|
179
|
-
.action((id, opts) => {
|
|
180
|
-
try {
|
|
181
|
-
if (opts.all) {
|
|
182
|
-
const { synced, skipped } = syncAll({ dir: opts.dir, modelPath: opts.model });
|
|
183
|
-
for (const s of synced)
|
|
184
|
-
console.log(`synced ${s.path}${s.changed ? "" : " (no changes)"}`);
|
|
185
|
-
for (const s of skipped)
|
|
186
|
-
console.warn(` skip ${s.file}: ${s.reason}`);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
if (!id) {
|
|
190
|
-
console.error("pass a slice id, or --all");
|
|
191
|
-
process.exit(1);
|
|
192
|
-
}
|
|
193
|
-
const result = syncSlice(id, { dir: opts.dir, modelPath: opts.model });
|
|
194
|
-
console.log(`synced ${result.path}${result.changed ? "" : " (no changes)"}`);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch (e) {
|
|
198
|
-
reportError(e);
|
|
199
|
-
process.exit(1);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
slice
|
|
203
|
-
.command("list")
|
|
204
|
-
.description("list slice docs from frontmatter only (no .em parse, no body read)")
|
|
205
|
-
.option("--dir <path>", "model directory", ".")
|
|
206
|
-
.addOption(new Option("--status <status>", "filter by status").choices(VALID_STATUSES))
|
|
207
|
-
.addOption(new Option("--pattern <pattern>", "filter by pattern").choices(VALID_PATTERNS))
|
|
208
|
-
.option("--context <context>", "filter by context")
|
|
209
|
-
.option("--tag <tag>", "filter by tag")
|
|
210
|
-
.option("--format <fmt>", "table | json", "table")
|
|
211
|
-
.option("--full", "emit every frontmatter field per slice (requires --format json)")
|
|
212
|
-
.action((opts) => {
|
|
213
|
-
const filter = {
|
|
214
|
-
dir: opts.dir,
|
|
215
|
-
status: opts.status,
|
|
216
|
-
pattern: opts.pattern,
|
|
217
|
-
context: opts.context,
|
|
218
|
-
tag: opts.tag,
|
|
219
|
-
};
|
|
220
|
-
if (opts.full) {
|
|
221
|
-
requireJson(opts.format);
|
|
222
|
-
console.log(JSON.stringify(listSliceRecords(filter), null, 2));
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
printSlices(listSlices(filter), opts.format);
|
|
226
|
-
});
|
|
227
|
-
slice
|
|
228
|
-
.command("show")
|
|
229
|
-
.description("show one slice doc's frontmatter")
|
|
230
|
-
.argument("<id>", "slice id")
|
|
231
|
-
.option("--dir <path>", "model directory", ".")
|
|
232
|
-
.option("--format <fmt>", "table | json", "table")
|
|
233
|
-
.option("--body", "include the doc body")
|
|
234
|
-
.action((id, opts) => {
|
|
235
|
-
const doc = showSlice(id, { dir: opts.dir });
|
|
236
|
-
if (!doc) {
|
|
237
|
-
console.error(`no slice doc with id "${id}" found in ${opts.dir}`);
|
|
238
|
-
process.exit(1);
|
|
239
|
-
}
|
|
240
|
-
if (opts.format === "json") {
|
|
241
|
-
const payload = opts.body ? { ...doc.frontmatter, body: doc.body } : doc.frontmatter;
|
|
242
|
-
console.log(JSON.stringify(payload, null, 2));
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
console.log(`# ${doc.file}`);
|
|
246
|
-
for (const [k, v] of Object.entries(doc.frontmatter ?? {})) {
|
|
247
|
-
console.log(`${k}: ${JSON.stringify(v)}`);
|
|
248
|
-
}
|
|
249
|
-
if (opts.body) {
|
|
250
|
-
console.log("");
|
|
251
|
-
console.log(doc.body);
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
slice
|
|
255
|
-
.command("search")
|
|
256
|
-
.description("search slice docs by frontmatter only (title/tags/commands/events/readModels)")
|
|
257
|
-
.argument("[query]", "free-text query", "")
|
|
258
|
-
.option("--dir <path>", "model directory", ".")
|
|
259
|
-
.addOption(new Option("--status <status>", "filter by status").choices(VALID_STATUSES))
|
|
260
|
-
.addOption(new Option("--pattern <pattern>", "filter by pattern").choices(VALID_PATTERNS))
|
|
261
|
-
.option("--context <context>", "filter by context")
|
|
262
|
-
.option("--tag <tag>", "filter by tag")
|
|
263
|
-
.option("--format <fmt>", "table | json", "table")
|
|
264
|
-
.option("--full", "emit every frontmatter field per slice (requires --format json)")
|
|
265
|
-
.action((query, opts) => {
|
|
266
|
-
const filter = {
|
|
267
|
-
dir: opts.dir,
|
|
268
|
-
status: opts.status,
|
|
269
|
-
pattern: opts.pattern,
|
|
270
|
-
context: opts.context,
|
|
271
|
-
tag: opts.tag,
|
|
272
|
-
};
|
|
273
|
-
if (opts.full) {
|
|
274
|
-
requireJson(opts.format);
|
|
275
|
-
console.log(JSON.stringify(searchSliceRecords(query, filter), null, 2));
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
printSlices(searchSlices(query, filter), opts.format);
|
|
279
|
-
});
|
|
280
|
-
slice
|
|
281
|
-
.command("update")
|
|
282
|
-
.description("write status/version changes back into a slice doc's frontmatter")
|
|
283
|
-
.argument("<id>", "slice id")
|
|
284
|
-
.option("--dir <path>", "model directory", ".")
|
|
285
|
-
.addOption(new Option("--status <status>", "new status").choices(VALID_STATUSES))
|
|
286
|
-
.option("--bump-version", "increment version by 1")
|
|
287
|
-
.action((id, opts) => {
|
|
288
|
-
try {
|
|
289
|
-
const result = updateSlice(id, {
|
|
290
|
-
dir: opts.dir,
|
|
291
|
-
status: opts.status,
|
|
292
|
-
bumpVersion: opts.bumpVersion,
|
|
293
|
-
});
|
|
294
|
-
console.log(`updated ${result.path}`);
|
|
295
|
-
}
|
|
296
|
-
catch (e) {
|
|
297
|
-
reportError(e);
|
|
298
|
-
process.exit(1);
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
program
|
|
302
|
-
.command("migrate")
|
|
303
|
-
.description("upgrade a pre-1.0 model directory to the frontmatter standard (docs/1.0.0-spec.md)")
|
|
304
|
-
.argument("<model-dir>", "model directory")
|
|
305
|
-
.option("--model <path>", "explicit .em file")
|
|
306
|
-
.option("--dry-run", "print the plan/report without writing")
|
|
307
|
-
.option("--force", "proceed even with uncommitted changes or no git repo")
|
|
308
|
-
.option("--report <path>", "write the migration report to a file instead of stdout")
|
|
309
|
-
.action((dir, opts) => {
|
|
310
|
-
try {
|
|
311
|
-
if (!opts.dryRun)
|
|
312
|
-
assertCleanWorkingTree(dir, opts.force);
|
|
313
|
-
const plan = planMigration(dir, { modelPath: opts.model });
|
|
314
|
-
const report = formatMigrationReport(plan);
|
|
315
|
-
if (opts.report) {
|
|
316
|
-
writeFileSync(opts.report, report);
|
|
317
|
-
console.log(`wrote migration report -> ${opts.report}`);
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
console.log(report);
|
|
321
|
-
}
|
|
322
|
-
if (opts.dryRun) {
|
|
323
|
-
console.log("dry run — no files written");
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
applyMigration(plan);
|
|
327
|
-
console.log("migration applied");
|
|
328
|
-
}
|
|
329
|
-
catch (e) {
|
|
330
|
-
reportError(e);
|
|
331
|
-
process.exit(1);
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
131
|
program.parseAsync().catch((e) => {
|
|
335
132
|
reportError(e);
|
|
336
133
|
process.exit(1);
|
|
@@ -383,24 +180,4 @@ function printDiagnostics(diags) {
|
|
|
383
180
|
function reportError(e) {
|
|
384
181
|
console.error(e instanceof Error ? e.message : String(e));
|
|
385
182
|
}
|
|
386
|
-
/** --full emits a shape only JSON can carry; fail loudly rather than silently ignoring it. */
|
|
387
|
-
function requireJson(format) {
|
|
388
|
-
if (format !== "json") {
|
|
389
|
-
console.error("--full requires --format json");
|
|
390
|
-
process.exit(1);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
function printSlices(results, format) {
|
|
394
|
-
if (format === "json") {
|
|
395
|
-
console.log(JSON.stringify(results, null, 2));
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
if (results.length === 0) {
|
|
399
|
-
console.log("no matching slices");
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
for (const s of results) {
|
|
403
|
-
console.log(`${s.id}\t${s.pattern ?? "?"}\t${s.status ?? "?"}\tv${s.version ?? "?"}\t${s.title}`);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
183
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|