@milehimikey/em 1.14.2 → 1.16.0
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/agents/em-implementer.md +12 -2
- package/.claude/agents/em-validator.md +2 -1
- package/.claude/skills/event-modeling/SKILL.md +3 -3
- package/.claude/skills/event-modeling-conform/SKILL.md +1 -1
- package/.claude/skills/event-modeling-design/SKILL.md +29 -18
- package/.claude/skills/event-modeling-discover/SKILL.md +1 -1
- package/.claude/skills/event-modeling-engagement/SKILL.md +60 -56
- package/.claude/skills/event-modeling-engagement/reference/engagement.md +13 -19
- package/.claude/skills/event-modeling-implement/SKILL.md +3 -3
- package/.claude/skills/event-modeling-implement/reference/implement.md +40 -27
- package/.claude/skills/event-modeling-review/SKILL.md +13 -3
- package/.claude/skills/event-modeling-shared/reference/em-dsl.md +234 -228
- package/.claude/skills/event-modeling-shared/reference/operating-principles.md +3 -3
- package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +69 -27
- package/.claude/skills/event-modeling-shared/templates/constitution.md +5 -7
- package/.claude-plugin/marketplace.json +2 -2
- package/dist/catalog/deferQueue.d.ts +20 -0
- package/dist/catalog/deferQueue.js +63 -0
- package/dist/catalog/deferQueue.js.map +1 -0
- package/dist/catalog/docJoin.d.ts +22 -1
- package/dist/catalog/docJoin.js +13 -4
- package/dist/catalog/docJoin.js.map +1 -1
- package/dist/catalog/docModelConsistencyValidate.js +4 -8
- package/dist/catalog/docModelConsistencyValidate.js.map +1 -1
- package/dist/catalog/driftSignal.d.ts +16 -12
- package/dist/catalog/driftSignal.js +14 -9
- package/dist/catalog/driftSignal.js.map +1 -1
- package/dist/catalog/sliceDoc.d.ts +51 -0
- package/dist/catalog/sliceDoc.js +47 -0
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/catalog/sliceReadyValidate.js +19 -1
- package/dist/catalog/sliceReadyValidate.js.map +1 -1
- package/dist/catalog/sliceSections.d.ts +5 -0
- package/dist/catalog/sliceSections.js +11 -2
- package/dist/catalog/sliceSections.js.map +1 -1
- package/dist/cli/conformScope.d.ts +4 -0
- package/dist/cli/conformScope.js +2 -2
- package/dist/cli/conformScope.js.map +1 -1
- package/dist/cli/coverage.js +7 -3
- package/dist/cli/coverage.js.map +1 -1
- package/dist/cli/defer.d.ts +106 -2
- package/dist/cli/defer.js +357 -24
- package/dist/cli/defer.js.map +1 -1
- package/dist/cli/engagement.d.ts +26 -5
- package/dist/cli/engagement.js +55 -28
- package/dist/cli/engagement.js.map +1 -1
- package/dist/cli/engagementFile.d.ts +2 -0
- package/dist/cli/engagementFile.js +5 -3
- package/dist/cli/engagementFile.js.map +1 -1
- package/dist/cli/findings.d.ts +2 -2
- package/dist/cli/findings.js +2 -2
- package/dist/cli/frontmatterSurgery.d.ts +3 -3
- package/dist/cli/frontmatterSurgery.js +3 -3
- package/dist/cli/frontmatterSurgery.js.map +1 -1
- package/dist/cli/markImplemented.d.ts +23 -18
- package/dist/cli/markImplemented.js +99 -15
- package/dist/cli/markImplemented.js.map +1 -1
- package/dist/cli/ratify.d.ts +36 -6
- package/dist/cli/ratify.js +130 -35
- package/dist/cli/ratify.js.map +1 -1
- package/dist/cli/review.js +3 -3
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/revise.d.ts +67 -0
- package/dist/cli/revise.js +229 -0
- package/dist/cli/revise.js.map +1 -0
- package/dist/cli/sliceConform.d.ts +4 -3
- package/dist/cli/sliceConform.js +29 -12
- package/dist/cli/sliceConform.js.map +1 -1
- package/dist/cli/status.d.ts +30 -6
- package/dist/cli/status.js +59 -19
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/upgrade.js +17 -12
- package/dist/cli/upgrade.js.map +1 -1
- package/dist/cli.js +173 -85
- package/dist/cli.js.map +1 -1
- package/dist/emit/engagementJson.d.ts +7 -4
- package/dist/emit/engagementJson.js +11 -4
- package/dist/emit/engagementJson.js.map +1 -1
- package/dist/emit/json.d.ts +1 -1
- package/dist/emit/json.js +18 -5
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/statusJson.d.ts +1 -1
- package/dist/emit/statusJson.js +6 -1
- package/dist/emit/statusJson.js.map +1 -1
- package/dist/mcp/server.js +5 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/continuation.d.ts +11 -1
- package/dist/model/continuation.js +29 -0
- package/dist/model/continuation.js.map +1 -1
- package/dist/model/resolveSlice.d.ts +19 -0
- package/dist/model/resolveSlice.js +69 -0
- package/dist/model/resolveSlice.js.map +1 -0
- package/dist/model/rules.d.ts +8 -0
- package/dist/model/rules.js +8 -0
- package/dist/model/rules.js.map +1 -1
- package/dist/model/sliceDocIndex.d.ts +5 -0
- package/dist/model/sliceDocIndex.js +6 -4
- package/dist/model/sliceDocIndex.js.map +1 -1
- package/dist/model/validate.js +5 -2
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/parser.js +55 -1
- package/dist/parser/parser.js.map +1 -1
- package/dist/templates.d.ts +1 -1
- package/dist/templates.js +5 -7
- package/dist/templates.js.map +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/agents/em-implementer.md +12 -2
- package/plugin/agents/em-validator.md +2 -1
- package/plugin/shared/reference/em-dsl.md +234 -228
- package/plugin/shared/reference/operating-principles.md +3 -3
- package/plugin/shared/reference/slice-doc-schema.md +69 -27
- package/plugin/shared/templates/constitution.md +5 -7
- package/plugin/skills/conform/SKILL.md +1 -1
- package/plugin/skills/design/SKILL.md +29 -18
- package/plugin/skills/discover/SKILL.md +1 -1
- package/plugin/skills/engagement/SKILL.md +60 -56
- package/plugin/skills/engagement/reference/engagement.md +13 -19
- package/plugin/skills/event-modeling/SKILL.md +3 -3
- package/plugin/skills/implement/SKILL.md +3 -3
- package/plugin/skills/implement/reference/implement.md +40 -27
- package/plugin/skills/review/SKILL.md +13 -3
- package/dist/cli/reratify.d.ts +0 -58
- package/dist/cli/reratify.js +0 -238
- package/dist/cli/reratify.js.map +0 -1
|
@@ -13,233 +13,239 @@ Keep `.em` files focused on **structure**; put deep design in markdown linked vi
|
|
|
13
13
|
|
|
14
14
|
<!-- GENERATED:cli:start -- run `npm run docs:generate` to refresh, do not hand-edit -->
|
|
15
15
|
```bash
|
|
16
|
-
em --version
|
|
17
|
-
em init [file]
|
|
18
|
-
em init [file] -f, --force
|
|
19
|
-
em scaffold <name>
|
|
20
|
-
em scaffold <name> -f, --force
|
|
21
|
-
em scaffold <name> --under <dir>
|
|
22
|
-
em render <file>
|
|
23
|
-
em render <file> -o, --out <path>
|
|
24
|
-
em render <file> -T, --format <fmt>
|
|
25
|
-
em render <file> --slice <name>
|
|
26
|
-
em render <file> --emit-dot
|
|
27
|
-
em render <file> --keep-empty-lanes
|
|
28
|
-
em export <file>
|
|
29
|
-
em export <file> -o, --out <path>
|
|
30
|
-
em export <file> --slice <key>
|
|
31
|
-
em api generate <file>
|
|
32
|
-
em api generate <file> -o, --out <path>
|
|
33
|
-
em api generate <file> --stdout
|
|
34
|
-
em api check <file>
|
|
35
|
-
em api check <file> --base <rev>
|
|
36
|
-
em api check <file> --json
|
|
37
|
-
em typespec <file>
|
|
38
|
-
em typespec <file> -o, --out <path>
|
|
39
|
-
em diff <old> [new]
|
|
40
|
-
em diff <old> [new] --from <rev>
|
|
41
|
-
em diff <old> [new] --to <rev>
|
|
42
|
-
em diff <old> [new] --exit-code
|
|
43
|
-
em diff <old> [new] --json
|
|
44
|
-
em glossary <files>
|
|
45
|
-
em glossary <files> --json
|
|
46
|
-
em glossary <files> -o, --out <path>
|
|
47
|
-
em glossary <files> --list-conflicts
|
|
48
|
-
em glossary <files> --fail-on-conflicts
|
|
49
|
-
em catalog <files>
|
|
50
|
-
em catalog <files> -o, --out <dir>
|
|
51
|
-
em catalog <files> -T, --format <fmt>
|
|
52
|
-
em catalog <files> --title <text>
|
|
53
|
-
em catalog <files> --keep-empty-lanes
|
|
54
|
-
em slice new <name>
|
|
55
|
-
em slice new <name> --pattern <pattern>
|
|
56
|
-
em slice new <name> --swimlane <swimlane>
|
|
57
|
-
em slice new <name> -f, --force
|
|
58
|
-
em slice new <name> --wire <model-file>
|
|
59
|
-
em slice new <name> --stub
|
|
60
|
-
em slice sync <model-file> [key]
|
|
61
|
-
em slice sync <model-file> [key] --check
|
|
62
|
-
em slice sync <model-file> [key] --json
|
|
63
|
-
em slice stub-all <file>
|
|
64
|
-
em slice stub-all <file> --status <status>
|
|
65
|
-
em slice stub-all <file> --by <name>
|
|
66
|
-
em slice stub-all <file> --implemented-in <url>
|
|
67
|
-
em slice stub-all <file> --dry-run
|
|
68
|
-
em slice index <file>
|
|
69
|
-
em slice index <file> --check
|
|
70
|
-
em slice mark-implemented <file> <slice-key> <pr-url>
|
|
71
|
-
em slice
|
|
72
|
-
em slice review <file> <slice-key>
|
|
73
|
-
em slice review <file> <slice-key> --
|
|
74
|
-
em slice
|
|
75
|
-
em slice ratify <file> <slice-key>
|
|
76
|
-
em slice ratify <file> <slice-key> --
|
|
77
|
-
em slice ratify <file> <slice-key> --
|
|
78
|
-
em slice ratify <file> <slice-key> --
|
|
79
|
-
em slice ratify <file> <slice-key> --
|
|
80
|
-
em slice
|
|
81
|
-
em slice
|
|
82
|
-
em slice
|
|
83
|
-
em slice
|
|
84
|
-
em slice
|
|
85
|
-
em slice
|
|
86
|
-
em slice
|
|
87
|
-
em slice defer <file> <slice-key> <question>
|
|
88
|
-
em slice
|
|
89
|
-
em slice
|
|
90
|
-
em slice
|
|
91
|
-
em slice
|
|
92
|
-
em
|
|
93
|
-
em
|
|
94
|
-
em
|
|
95
|
-
em
|
|
96
|
-
em
|
|
97
|
-
em
|
|
98
|
-
em
|
|
99
|
-
em
|
|
100
|
-
em
|
|
101
|
-
em state
|
|
102
|
-
em state set-
|
|
103
|
-
em state
|
|
104
|
-
em state
|
|
105
|
-
em
|
|
106
|
-
em
|
|
107
|
-
em
|
|
108
|
-
em
|
|
109
|
-
em
|
|
110
|
-
em model version
|
|
111
|
-
em
|
|
112
|
-
em
|
|
113
|
-
em
|
|
114
|
-
em
|
|
115
|
-
em
|
|
116
|
-
em
|
|
117
|
-
em
|
|
118
|
-
em conform-
|
|
119
|
-
em conform-
|
|
120
|
-
em conform-
|
|
121
|
-
em conform-
|
|
122
|
-
em conform-supersede <file> <report-path>
|
|
123
|
-
em conform-
|
|
124
|
-
em conform-
|
|
125
|
-
em
|
|
126
|
-
em
|
|
127
|
-
em
|
|
128
|
-
em
|
|
129
|
-
em
|
|
130
|
-
em watch <file>
|
|
131
|
-
em
|
|
132
|
-
em
|
|
133
|
-
em
|
|
134
|
-
em
|
|
135
|
-
em
|
|
136
|
-
em validate <file>
|
|
137
|
-
em validate <file> --
|
|
138
|
-
em
|
|
139
|
-
em
|
|
140
|
-
em
|
|
141
|
-
em
|
|
142
|
-
em
|
|
143
|
-
em
|
|
144
|
-
em
|
|
145
|
-
em
|
|
146
|
-
em
|
|
147
|
-
em
|
|
148
|
-
em
|
|
149
|
-
em
|
|
150
|
-
em coverage <file> --
|
|
151
|
-
em
|
|
152
|
-
em
|
|
153
|
-
em
|
|
154
|
-
em
|
|
155
|
-
em
|
|
156
|
-
em status <files> --
|
|
157
|
-
em status <files>
|
|
158
|
-
em
|
|
159
|
-
em
|
|
160
|
-
em
|
|
161
|
-
em
|
|
162
|
-
em
|
|
163
|
-
em
|
|
164
|
-
em
|
|
165
|
-
em
|
|
166
|
-
em
|
|
167
|
-
em
|
|
168
|
-
em
|
|
169
|
-
em
|
|
170
|
-
em query
|
|
171
|
-
em query
|
|
172
|
-
em query
|
|
173
|
-
em query
|
|
174
|
-
em query
|
|
175
|
-
em query
|
|
176
|
-
em query
|
|
177
|
-
em query
|
|
178
|
-
em query
|
|
179
|
-
em query
|
|
180
|
-
em query
|
|
181
|
-
em query
|
|
182
|
-
em query
|
|
183
|
-
em query
|
|
184
|
-
em query slices <files>
|
|
185
|
-
em query slices <files> --
|
|
186
|
-
em query
|
|
187
|
-
em query
|
|
188
|
-
em query
|
|
189
|
-
em query
|
|
190
|
-
em query
|
|
191
|
-
em query
|
|
192
|
-
em query
|
|
193
|
-
em query
|
|
194
|
-
em query
|
|
195
|
-
em query
|
|
196
|
-
em query
|
|
197
|
-
em query
|
|
198
|
-
em
|
|
199
|
-
em
|
|
200
|
-
em
|
|
201
|
-
em
|
|
202
|
-
em
|
|
203
|
-
em engagement new <file> <slug>
|
|
204
|
-
em engagement new <file> <slug> --
|
|
205
|
-
em engagement
|
|
206
|
-
em engagement
|
|
207
|
-
em engagement
|
|
208
|
-
em engagement
|
|
209
|
-
em engagement
|
|
210
|
-
em engagement
|
|
211
|
-
em engagement
|
|
212
|
-
em engagement
|
|
213
|
-
em engagement
|
|
214
|
-
em engagement
|
|
215
|
-
em
|
|
216
|
-
em
|
|
217
|
-
em
|
|
218
|
-
em
|
|
219
|
-
em
|
|
220
|
-
em
|
|
221
|
-
em system
|
|
222
|
-
em system
|
|
223
|
-
em system
|
|
224
|
-
em system
|
|
225
|
-
em
|
|
226
|
-
em
|
|
227
|
-
em
|
|
228
|
-
em
|
|
229
|
-
em
|
|
230
|
-
em
|
|
231
|
-
em
|
|
232
|
-
em
|
|
233
|
-
em skill
|
|
234
|
-
em skill
|
|
235
|
-
em
|
|
236
|
-
em
|
|
237
|
-
em
|
|
238
|
-
em
|
|
239
|
-
em
|
|
240
|
-
em
|
|
241
|
-
em
|
|
242
|
-
em
|
|
16
|
+
em --version # print the installed em version
|
|
17
|
+
em init [file] # scaffold a starter .em model
|
|
18
|
+
em init [file] -f, --force # overwrite if the file exists
|
|
19
|
+
em scaffold <name> # scaffold a full project: <slug>/<slug>.em, README.md, .event-modeling.md, and constitution.md (the implementation constitution — skipped, with a note, in a spec-kit project, where `.specify/memory/constitution.md` IS that document) (see docs/cli.md — for just a starter .em, use `em init`; for a multi-model project, pass --under to nest it under a shared parent directory)
|
|
20
|
+
em scaffold <name> -f, --force # overwrite the directory's contents if it already exists
|
|
21
|
+
em scaffold <name> --under <dir> # parent directory to scaffold into — writes <dir>/<slug>/ instead of ./<slug>/, the supported multi-model layout (docs/cli.md, "Multi-model projects"): one directory per model, so each model's slices/ never collides with a sibling model's
|
|
22
|
+
em render <file> # transpile a model and render it (or emit DOT)
|
|
23
|
+
em render <file> -o, --out <path> # output path (extension picks the format)
|
|
24
|
+
em render <file> -T, --format <fmt> # output format (svg, png, pdf, ...)
|
|
25
|
+
em render <file> --slice <name> # render only this slice, redrawn in its own canonical pattern shape (default out: slices/<kebab-slug>.svg)
|
|
26
|
+
em render <file> --emit-dot # print the generated DOT instead of rendering
|
|
27
|
+
em render <file> --keep-empty-lanes # keep the API lane even when empty
|
|
28
|
+
em export <file> # export a versioned JSON snapshot of the normalized model
|
|
29
|
+
em export <file> -o, --out <path> # write to a file instead of stdout
|
|
30
|
+
em export <file> --slice <key> # export only this slice's object (pattern/fields/doc) instead of the whole model (export key, MIL-128) — refuses only if THIS slice has an error; an unrelated slice's breakage elsewhere in the model doesn't block it (see docs/cli.md)
|
|
31
|
+
em api generate <file> # write the TypeSpec contract for the model's public commands, events and views to <model dir>/contracts/<model key>.tsp
|
|
32
|
+
em api generate <file> -o, --out <path> # write to this path instead of <model dir>/contracts/<model key>.tsp
|
|
33
|
+
em api generate <file> --stdout # print the contract instead of writing it
|
|
34
|
+
em api check <file> # is the committed contract current? With --base, annotate each public-surface change since that revision additive or breaking (annotation only — exits 1 only when stale)
|
|
35
|
+
em api check <file> --base <rev> # git revision to diff the public surface against
|
|
36
|
+
em api check <file> --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
37
|
+
em typespec <file> # DEPRECATED alias of `em api generate --stdout` (use em api generate)
|
|
38
|
+
em typespec <file> -o, --out <path> # write to a file instead of stdout
|
|
39
|
+
em diff <old> [new] # compare two models structurally (two files, or one file across git revisions)
|
|
40
|
+
em diff <old> [new] --from <rev> # diff <old> against this git revision instead of a second file
|
|
41
|
+
em diff <old> [new] --to <rev> # diff against this git revision instead of the current file (requires --from)
|
|
42
|
+
em diff <old> [new] --exit-code # exit 1 if the models differ, 0 if identical (git-diff convention)
|
|
43
|
+
em diff <old> [new] --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
44
|
+
em glossary <files> # cross-model glossary of terms, with consistency checks across models (see docs/cli.md)
|
|
45
|
+
em glossary <files> --json # print the full glossary document instead of the text report
|
|
46
|
+
em glossary <files> -o, --out <path> # write the JSON document to a file instead of stdout (requires --json)
|
|
47
|
+
em glossary <files> --list-conflicts # print only the conflict lines, no summary
|
|
48
|
+
em glossary <files> --fail-on-conflicts # exit non-zero if any cross-model term conflicts were found (opt-in — conflicts are warnings and don't block by default)
|
|
49
|
+
em catalog <files> # generate a browsable static HTML catalog site over one or more .em models (see docs/cli.md)
|
|
50
|
+
em catalog <files> -o, --out <dir> # output directory
|
|
51
|
+
em catalog <files> -T, --format <fmt> # diagram format embedded in the catalog (svg or png)
|
|
52
|
+
em catalog <files> --title <text> # catalog site title
|
|
53
|
+
em catalog <files> --keep-empty-lanes # keep the API lane even when empty
|
|
54
|
+
em slice new <name> # scaffold a fresh slices/<key>.md doc — the 5 frontmatter keys required at `status: draft`, the `# Slice:` heading and diagram-image stub, then every template section: the generated regions (command/event/view field tables, Invariants) filled from the model with --wire (template placeholders otherwise — `em slice sync` fills them), the authored sections (Intent, Scenarios, Open Questions, ...) with placeholder bullets (see .claude/skills/event-modeling-shared/reference/slice-doc-schema.md, templates/slice.md)
|
|
55
|
+
em slice new <name> --pattern <pattern> # slice pattern: state-change | state-view | automation | translation
|
|
56
|
+
em slice new <name> --swimlane <swimlane> # swimlane, e.g. "Persona → Context"
|
|
57
|
+
em slice new <name> -f, --force # overwrite the file if it already exists
|
|
58
|
+
em slice new <name> --wire <model-file> # also insert the `note "slices/<key>.md"` line onto the slice's primary element in this .em file (matched by export key), instead of just printing it to paste by hand (MIL-161)
|
|
59
|
+
em slice new <name> --stub # write a near-free stub instead: same 5 frontmatter keys, but a one-line placeholder body instead of the diagram-image stub and every judgment section (MIL-184) — deepen it later by re-running without --stub and -f
|
|
60
|
+
em slice sync <model-file> [key] # regenerate the GENERATED regions (command/event/view field tables, the Invariants list) of existing slice docs in place from the model, authored sections untouched (MIL-266); docs without regions are skipped with a note. --check never writes and exits 1 when a doc is stale
|
|
61
|
+
em slice sync <model-file> [key] --check # report ok / stale / no-regions per doc without writing; exit 1 when any is stale
|
|
62
|
+
em slice sync <model-file> [key] --json # print the machine-readable report (sliceSyncSchemaVersion 1.0)
|
|
63
|
+
em slice stub-all <file> # scaffold + wire a near-free stub (`em slice new --stub`'s content, MIL-184) for every slice in <file> with no resolvable doc — the fast path to status coloring for an exploratory/backbone model without hand-running `slice new` per slice. Skips a continuation slice (MIL-208, it has no doc of its own), an already-documented slice, and a slice whose pattern can't be classified
|
|
64
|
+
em slice stub-all <file> --status <status> # target status for every stub: draft | reviewed | ready-to-implement | implemented
|
|
65
|
+
em slice stub-all <file> --by <name> # identity for reviewedBy/ratifiedBy — required unless --status draft
|
|
66
|
+
em slice stub-all <file> --implemented-in <url> # PR/commit URL for implementedIn — required with --status implemented
|
|
67
|
+
em slice stub-all <file> --dry-run # list what would be stubbed/wired without writing anything
|
|
68
|
+
em slice index <file> # rewrite the model's sibling README.md's GENERATED Slices table from `em export`'s slice facts (key, pattern, doc status/implementedIn) — the hand-maintained table is deprecated
|
|
69
|
+
em slice index <file> --check # verify the table is current; exit non-zero on drift without writing (CI)
|
|
70
|
+
em slice mark-implemented <file> <slice-key> <pr-url> # flip a slice doc's frontmatter to `status: implemented` / `implementedIn: <pr-url>` — the one edit an implementing agent makes to a ratified doc at merge (MIL-103, replaces the em-sdd-bridge `em-sdd-mark-implemented` script; see reference/implement.md §6). Applies only to a `ready-to-implement` doc (MIL-277: a `draft`/`reviewed` doc refuses — ratify first). Also records the shipped version beside the link (MIL-284): `shippedVersion:`, `shippedRef:` (the doc's `ratifiedRef:`, when it has one) and `shippedOn:`, and opens the next version as a `draft` when an Open Question was deferred to it (MIL-283). Idempotent on the same URL — also after that draft opened; refuses to overwrite a different one; never touches the doc body except to re-open those deferred questions
|
|
71
|
+
em slice mark-implemented <file> <slice-key> <pr-url> --on <date> # merge date recorded as `shippedOn:`, YYYY-MM-DD (default: today, local date; MIL-284)
|
|
72
|
+
em slice review <file> <slice-key> # flip a slice doc's frontmatter to `status: reviewed` and record `reviewedBy:`/`reviewedOn:` — the FIRST of the two human gates (MIL-201, docs/process.md#the-slice-lifecycle-gates): the room walked this slice and every open question it raised is resolved. Ratification is a separate, later gate (`em slice ratify`). Legal from `status: draft`; idempotent on the same --by/--on pair; refuses to overwrite a different one already recorded; refuses a doc already `ready-to-implement`/`implemented`; never touches `version:` or the doc body
|
|
73
|
+
em slice review <file> <slice-key> --by <name> # the reviewer's (or facilitator's) name
|
|
74
|
+
em slice review <file> <slice-key> --on <date> # review date, YYYY-MM-DD (default: today, local date)
|
|
75
|
+
em slice ratify <file> <slice-key> # flip a slice doc's frontmatter to `status: ready-to-implement` and record `ratifiedBy:`/`ratifiedOn:` — the handoff sign-off (MIL-165, docs/process.md#the-slice-lifecycle-gates) that makes who ratified, and when, a first-class recorded fact. The review gate is a check on the doc's current `status:`, not on whether `reviewedBy:`/`reviewedOn:` are populated: a doc at `reviewed` passes; a `ready-to-implement` doc only when the same signer is completing their own record (since 1.15.0, MIL-283 — a new sign-off is a new version: `em slice revise`); any other status — a `draft` that never went through `em slice review` — is refused unless --skip-review is passed. Idempotent on the same --by/--on pair; refuses to overwrite a different one already recorded, and (MIL-284) a same-pair re-run on a doc whose body moved after sign-off; never touches `version:` or the doc body
|
|
76
|
+
em slice ratify <file> <slice-key> --by <name> # the ratifier's name
|
|
77
|
+
em slice ratify <file> <slice-key> --on <date> # ratification date, YYYY-MM-DD (default: today, local date)
|
|
78
|
+
em slice ratify <file> <slice-key> --skip-review # ratify without a recorded review — prints a loud notice on stderr
|
|
79
|
+
em slice ratify <file> <slice-key> --meaning-unchanged # API-first sign-off (MIL-238): this version does not change what the public contract means — records `meaningConfirmed: true`; required (or --contract-change) on a slice touching a `public` element
|
|
80
|
+
em slice ratify <file> <slice-key> --contract-change <why> # API-first sign-off (MIL-238): a consumer must read this change differently, and why — records `contractChange: "<why>"`
|
|
81
|
+
em slice revise <file> <slice-key> # open the next version of a slice doc as a `draft` (MIL-283): bumps `version:`, flips `status:` to `draft`, clears the prior version's review and sign-off (`reviewedBy/On`, `ratifiedBy/On/Ref/Hash`, `meaningConfirmed`/`contractChange`) and re-opens the questions deferred to the new version. The shipped version stays shipped: `implementedIn:` and the `shipped*` keys are untouched (written first on a doc shipped before 1.15). Applies to `status: implemented` (the shipped case) and to a ratified `ready-to-implement` doc (ratification withdrawn, never shipped); a `ready-to-implement` doc with no `ratifiedBy:` reopens as draft at the same version; `draft`/`reviewed` refuse — the next version is already open. The new version then takes the normal road: `em slice review --by`, `em slice ratify --by`. Questions queued by `em slice defer` for the new version (GH #236) are injected into its Open Questions. A ratified, never-shipped doc REFUSES without --withdraw (revising withdraws the only implementable version; queue a question with `em slice defer` instead)
|
|
82
|
+
em slice revise <file> <slice-key> --withdraw # GH #236: required on a ratified, never-shipped doc — confirms withdrawing the ratification of the only implementable version
|
|
83
|
+
em slice reratify <file> <slice-key> # DEPRECATED alias of `em slice revise` (MIL-283, since 1.15.0; removed in a later minor). Until 1.14 this left the doc at an unsigned `ready-to-implement`; it now opens a `draft` of the next version like `revise`. The --meaning-unchanged/--contract-change flags are accepted and ignored with a notice — the API-first confirmation is taken by `em slice ratify` on the new version
|
|
84
|
+
em slice reratify <file> <slice-key> --meaning-unchanged # ignored since 1.15.0 (see above)
|
|
85
|
+
em slice reratify <file> <slice-key> --contract-change <why> # ignored since 1.15.0 (see above)
|
|
86
|
+
em slice reratify <file> <slice-key> --withdraw # see `em slice revise --withdraw`
|
|
87
|
+
em slice defer <file> <slice-key> [question] # record a question this version will not answer as deferred to a later version (MIL-275): rewrites the single unchecked `## Open Questions` item containing <question> as `- [x] <item> — v<current>: <decision>; deferred to v<n> (<date>[, <by>])` so `--slice-ready` passes without a guess, and mirrors it into `.event-modeling.md` (the parking lot and a dated Decisions-log bullet; the file must exist, it is never created). Idempotent; `em slice reratify` re-opens the item when it bumps to v<n>. With --from-issue <text> instead of <question> (MIL-281): promotes the single open `issue "..."` on the slice's own elements containing <text> into the doc's Open Questions as that same deferred item, mirrors it, and removes the `issue` clause from the .em — the one-command path for a question raised in a review session. On a RATIFIED (`ready-to-implement` + `ratifiedBy:`) or shipped (`implemented`) doc (GH #236) the doc is NOT edited — its body is the signed spec — and the question is queued in `.event-modeling.md` for v<N+1>; `em slice revise` / `mark-implemented` inject it into the next draft
|
|
88
|
+
em slice defer <file> <slice-key> [question] --until <version> # the version that must answer it, v<n> (greater than the doc's version)
|
|
89
|
+
em slice defer <file> <slice-key> [question] --decision <text> # what this version does instead
|
|
90
|
+
em slice defer <file> <slice-key> [question] --from-issue <text> # defer a captured `issue "..."` on this slice instead of a doc Open Question (case-sensitive substring of its text)
|
|
91
|
+
em slice defer <file> <slice-key> [question] --by <name> # who deferred it
|
|
92
|
+
em slice defer <file> <slice-key> [question] --on <date> # deferral date, YYYY-MM-DD (default: today, local date)
|
|
93
|
+
em slice conform <file> <slice-key> # record per-slice-per-version conformance certification: sets `conformedVersion:`/`conformedAt:`/`conformedOn:` on a slice doc (MIL-214) — the fact `driftSignal: in-sync` now depends on. Legal only for a shipped slice (`status: implemented`, or any status with a `shippedVersion:` — MIL-283) with an `implementedIn:` link; `conformedVersion:` is the shipped version. Idempotent on the same (version, --at) pair; a different --at simply overwrites (a later re-certification is normal — there's no way for em to tell 'later' from 'earlier' for an arbitrary revision string, so there's no --force to reach for). Refuses when the newest conformance/*-findings.json matching --at still has an unruled finding in scope for this slice; --skip-findings-check overrides with a loud notice.
|
|
94
|
+
em slice conform <file> <slice-key> --at <rev> # the target-repo revision this certification sweep diffed against
|
|
95
|
+
em slice conform <file> <slice-key> --on <date> # certification date, YYYY-MM-DD (default: today, local date)
|
|
96
|
+
em slice conform <file> <slice-key> --skip-findings-check # certify even with unruled findings in scope — prints a loud notice on stderr
|
|
97
|
+
em changelog <file> # render a model's git history as a business-readable ledger (see docs/cli.md)
|
|
98
|
+
em changelog <file> --from <rev> # start the walk at this revision (inclusive)
|
|
99
|
+
em changelog <file> --to <rev> # end the walk at this revision (inclusive; default HEAD)
|
|
100
|
+
em changelog <file> -o, --out <path> # write to a file instead of stdout
|
|
101
|
+
em state read [dir] # print the state file's mechanical fields as JSON
|
|
102
|
+
em state set-phase <phase> [dir] # rewrite Current phase: (and Last updated:); --step also rewrites Current step:
|
|
103
|
+
em state set-phase <phase> [dir] --step <n> # also set Current step: to this value
|
|
104
|
+
em state set-conformance <revision> [dir] # rewrite Last conformance: (and Last updated:) in the exact format reference/conform.md parses. Refuses (MIL-214) while any `implemented` slice has an unruled conformance finding in the findings JSON beside --report (a `slice: null` finding blocks every slice); --partial records the marker with a ` (partial)` suffix instead, with a loud notice. Without a findings JSON beside --report: warns once and records the marker as given (migration path for a report predating `em conform-findings`)
|
|
105
|
+
em state set-conformance <revision> [dir] --report <path> # path to the conformance report just written
|
|
106
|
+
em state set-conformance <revision> [dir] --partial # record the marker as PARTIAL even though some in-scope findings are still unruled
|
|
107
|
+
em state set-review <date> [dir] # rewrite Last stakeholder review: (and Last updated:)
|
|
108
|
+
em state log-usage <file> # append one Usage log line — phase(s) touched + em validate's diagnostic categories hit, deduped and canonically formatted (MIL-161, docs/usage-data.md) — the mechanical half of 'save state at the end of every session' that used to be run-validate-then-hand-format; state file resolved next to <file>, same convention as em conform-scope
|
|
109
|
+
em state log-usage <file> --phases <list> # comma-separated phase(s) touched this session: discover, extract, model, slice, implement, conform, review, validate, watch, engagement
|
|
110
|
+
em model version bump <file> # bump the model's design version: write model-versions/v<N+1>.json (sibling of slices/, conformance/) and rewrite the state file's `Model version:` bullet (MIL-218). Refuses when the state file is missing (run `em scaffold` first), when --by is empty, and when nothing has changed since the current version (same model content hash AND same slice-version vector) unless --force — a no-op bump is the one case --force is right for.
|
|
111
|
+
em model version bump <file> --by <name> # the bumper's name
|
|
112
|
+
em model version bump <file> --on <date> # bump date, YYYY-MM-DD (default: today, local date)
|
|
113
|
+
em model version bump <file> --force # bump even though nothing has changed since the current version
|
|
114
|
+
em model version show <file> # print the model's current design version and the most recently certified version, if any (model-versions/*.json — MIL-218)
|
|
115
|
+
em model version show <file> --json # print a JSON document instead of text
|
|
116
|
+
em usage-report [root] # aggregate every .event-modeling.md's Usage log under [root] into phase/diagnostic-category tallies (MIL-161) — replaces docs/usage-data.md's hand-rolled grep/awk/sort pipeline; a logged line that doesn't match the canonical em state log-usage format is reported under unparseableLines rather than silently mistallied or dropped
|
|
117
|
+
em usage-report [root] --json # print a JSON document instead of the text report
|
|
118
|
+
em conform-scope <file> # mechanize conform phase step 1 (reference/conform.md): map the target repo's changed paths since Last conformance: to slices via each slice doc's implementedIn, JSON to stdout — --seed-asis also seeds the <model>-asis.em scratch model (see docs/cli.md)
|
|
119
|
+
em conform-scope <file> --repo <path> # path to (or inside) the target codebase's git repository
|
|
120
|
+
em conform-scope <file> --full # ignore Last conformance:/changed paths; scope every implemented slice
|
|
121
|
+
em conform-scope <file> --seed-asis # write <model>-asis.em as a byte copy of the canonical model and ensure it's gitignored
|
|
122
|
+
em conform-supersede <file> <report-path> # stamp a conformance report with a "superseded as of <rev>" banner once its findings have been ruled on (MIL-164, docs/process.md#what-ratified-means) — the companion step to run at ratification time so a reader following the report's file:line citations knows they describe an ancestor of the current model. Additive-only splice, never a rewrite of the report; idempotent on the same --as-of/--findings/--on stamp; refuses if the report doesn't exist. --locus/--by (MIL-214, both required together) additionally record the ruling itself — locus/resolvedBy/resolvedOn — on the findings named by --findings in the sibling conformance/<date>-findings.json, when one exists (warns once and stamps the banner only when it doesn't — the migration path for a report predating em conform-findings)
|
|
123
|
+
em conform-supersede <file> <report-path> --as-of <rev> # the revision this ruling was made against — same value passed to `em state set-conformance`
|
|
124
|
+
em conform-supersede <file> <report-path> --findings <spec> # which finding number(s) this stamps as ruled, e.g. "1-3" or "1,2,4"
|
|
125
|
+
em conform-supersede <file> <report-path> --on <date> # ruling date, YYYY-MM-DD (default: today, local date)
|
|
126
|
+
em conform-supersede <file> <report-path> --locus <locus> # who/what the named finding(s) say is wrong: model | doc | code | none (requires --by)
|
|
127
|
+
em conform-supersede <file> <report-path> --by <name> # who ruled on the named finding(s) (requires --locus)
|
|
128
|
+
em conform-findings check <path> # shape-validate a conformance/<date>-findings.json file (findingsSchemaVersion, required fields, enum values, ids sorted+unique, a ruled finding carries resolvedBy+resolvedOn) — exit 1 on shape errors. The conform skill writes this file directly alongside its report; this is how a headless run verifies what it just wrote.
|
|
129
|
+
em conform-findings check <path> --json # print a JSON document instead of the text report
|
|
130
|
+
em watch <file> # re-render on every save
|
|
131
|
+
em watch <file> -o, --out <path> # output path (extension picks the format)
|
|
132
|
+
em watch <file> -T, --format <fmt> # output format (svg, png, pdf, ...)
|
|
133
|
+
em watch <file> --keep-empty-lanes # keep the API lane even when empty
|
|
134
|
+
em watch <file> --serve # serve a live viewer with instant push-reload (no polling)
|
|
135
|
+
em watch <file> --port <n> # port for --serve (default 5173)
|
|
136
|
+
em validate <file> # check a model against event-modeling rules
|
|
137
|
+
em validate <file> --list-issues # print only open `issue` diagnostics (slice, element, line, text)
|
|
138
|
+
em validate <file> --list-divergences # print only accepted-divergence annotations (slice, element, line, text) — never fails the build
|
|
139
|
+
em validate <file> --list-public # print only commands, events and views marked `public` (slice, kind, name, line) — an integration-surface audit, never fails the build
|
|
140
|
+
em validate <file> --fail-on-issues # exit non-zero if the model has any open `issue`s (opt-in — issues are warnings and don't block by default)
|
|
141
|
+
em validate <file> --slice-ready <key> # readiness gate for one slice (export key): status ready-to-implement, doc resolvable via note binding, zero unchecked Open Questions, a recorded ratifiedBy, and — for a slice touching a `public` element — a current contracts/<model key>.tsp; exits non-zero if not ready (MIL-87, MIL-259, MIL-238)
|
|
142
|
+
em validate <file> --json # print a JSON document instead of text — works on a model WITH errors, unlike `em export` (MIL-128, see docs/cli.md); exit codes are unchanged
|
|
143
|
+
em migrate <file> # rewrite the old two-slice Automation/Translation shape into the merged single-slice shape MIL-120 made canonical (see docs/cli.md)
|
|
144
|
+
em migrate <file> --write # apply the rewrite to the file (default: dry run — report only, write nothing)
|
|
145
|
+
em ledger <file> # check slice docs' version: field agrees with their content across two git revisions (opt-in CI check, MIL-89 — never part of `em validate`, see docs/ci.md)
|
|
146
|
+
em ledger <file> --from <rev> # baseline revision
|
|
147
|
+
em ledger <file> --to <rev> # compare revision (default: current working tree)
|
|
148
|
+
em ledger <file> --waive <slice-key> # excuse a doc-content-without-version-bump finding for this slice key (repeatable; MIL-185, see docs/cli.md) — never waives a version regression or bump-without-content-change
|
|
149
|
+
em ledger <file> --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
150
|
+
em coverage <file> # check that every INV-* invariant ID cited in an implemented slice doc is cited by a test under --tests <dir> (MIL-130/MIL-207) — mechanizes reference/implement.md's definition-of-done citation check; advisory by default, --strict for CI; --include-ready also counts ready-to-implement docs (forward-looking report); a continuation slice (an `again` view instance with no doc of its own, MIL-208) is excluded from the report — its invariants, if any, live in the originating slice's own doc; --slice <key> scopes the report to one slice whatever its status (MIL-255), the pre-merge definition-of-done check
|
|
151
|
+
em coverage <file> --tests <dir> # directory to scan recursively for test files citing invariant IDs
|
|
152
|
+
em coverage <file> --slice <key> # only this slice (export key), whether ready-to-implement or implemented — no --include-ready needed; --strict then fails on this slice's uncited invariants, or if the slice is not in scope (draft/reviewed/unbound: nothing checked) (MIL-255)
|
|
153
|
+
em coverage <file> --strict # exit non-zero if any invariant ID has zero citations (CI)
|
|
154
|
+
em coverage <file> --include-ready # also count ready-to-implement docs, not just implemented (MIL-207)
|
|
155
|
+
em coverage <file> --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
156
|
+
em status <files> # deterministic state-of-the-system rollup over one or more .em models: slices by lifecycle status, driftSignal breakdown, invariant coverage totals (with --tests), open issue markers + unchecked Open Questions, and last-conformance commits-behind-HEAD (MIL-163, see docs/cli.md)
|
|
157
|
+
em status <files> --tests <dir> # directory to scan for INV-* test citations — enables invariant coverage totals
|
|
158
|
+
em status <files> --repo <path> # git repo to compute commits-behind-HEAD in (default: each model's own directory)
|
|
159
|
+
em status <files> --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
160
|
+
em status <files> --md # print a markdown block suited for README embedding
|
|
161
|
+
em status <files> --badge # print a generated SVG badge
|
|
162
|
+
em status <files> -o, --out <path> # write output to a file instead of stdout
|
|
163
|
+
em freshness <file> # standalone freshness signal for one model's conformance record (MIL-164): "last conformed <rev> — N commits and M slice-PRs behind HEAD", computed from the same conform-scope machinery `em status`'s conformance clause uses — for when you want just this fact, no full state-of-the-system rollup (see docs/cli.md)
|
|
164
|
+
em freshness <file> --repo <path> # git repo to compute behind-HEAD in (default: the model's own directory)
|
|
165
|
+
em freshness <file> --json # print a JSON document instead of the text line
|
|
166
|
+
em metrics <file> # the pilot metrics named in advance by the register, computed from git history alone (MIL-170): ratification turnaround (reviewed -> ratified -> implemented), conform-cycle cadence + finding counts, and status-vs-reality disagreement over time — plus a fourth, reported as not computable from history (see docs/usage-data.md). `<file>` is an anchor .em file, used only to locate slices/, conformance/, and .event-modeling.md relative to it — same convention as em ledger; never parsed or compiled
|
|
167
|
+
em metrics <file> --from <rev> # baseline revision
|
|
168
|
+
em metrics <file> --to <rev> # compare revision (default: HEAD)
|
|
169
|
+
em metrics <file> --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
170
|
+
em query consumers <files> # views/reactions consuming an event, plus their slices
|
|
171
|
+
em query consumers <files> --event <ref-or-name> # the event's export ref or display name
|
|
172
|
+
em query consumers <files> --json # print a JSON document instead of the text report
|
|
173
|
+
em query producers <files> # commands producing an event, plus their slices and ui triggers
|
|
174
|
+
em query producers <files> --event <ref-or-name> # the event's export ref or display name
|
|
175
|
+
em query producers <files> --json # print a JSON document instead of the text report
|
|
176
|
+
em query downstream <files> # transitive closure along legal edges from an element — impact analysis
|
|
177
|
+
em query downstream <files> --of <ref-or-name> # the starting element's export ref or display name
|
|
178
|
+
em query downstream <files> --depth <n> # limit traversal to n hops (default: unlimited)
|
|
179
|
+
em query downstream <files> --json # print a JSON document instead of the text report
|
|
180
|
+
em query upstream <files> # transitive closure against legal-edge direction from an element
|
|
181
|
+
em query upstream <files> --of <ref-or-name> # the starting element's export ref or display name
|
|
182
|
+
em query upstream <files> --depth <n> # limit traversal to n hops (default: unlimited)
|
|
183
|
+
em query upstream <files> --json # print a JSON document instead of the text report
|
|
184
|
+
em query slices <files> # filtered slice list — pattern/status/context/persona/tag filters AND-combine
|
|
185
|
+
em query slices <files> --pattern <p> # state-change | state-view | automation | translation | unclassified
|
|
186
|
+
em query slices <files> --status <s> # the slice's joined doc status (draft, reviewed, ready-to-implement, implemented, ...)
|
|
187
|
+
em query slices <files> --context <c> # match a slice with an event in this @Context
|
|
188
|
+
em query slices <files> --persona <p> # match a slice with a ui in this @Persona
|
|
189
|
+
em query slices <files> --tag <t> # match a slice with an event carrying this tag key
|
|
190
|
+
em query slices <files> --json # print a JSON document instead of the text report
|
|
191
|
+
em query invariant <files> # declaring slice + doc facts for one INV-* id, and (with --tests) its test citations
|
|
192
|
+
em query invariant <files> --id <inv-id> # the INV-* id to look up
|
|
193
|
+
em query invariant <files> --tests <dir> # directory to scan for test files citing this id
|
|
194
|
+
em query invariant <files> --json # print a JSON document instead of the text report
|
|
195
|
+
em query field <files> # one field's facts on an element — type, tag/assigned markers, renamed-from chain
|
|
196
|
+
em query field <files> --of <element-ref> # the element's export ref or display name
|
|
197
|
+
em query field <files> --name <field> # the field's name
|
|
198
|
+
em query field <files> --json # print a JSON document instead of the text report
|
|
199
|
+
em query path <files> # shortest path between two elements through the six legal connection types
|
|
200
|
+
em query path <files> --from <ref-or-name> # the starting element's export ref or display name
|
|
201
|
+
em query path <files> --to <ref-or-name> # the ending element's export ref or display name
|
|
202
|
+
em query path <files> --json # print a JSON document instead of the text report
|
|
203
|
+
em engagement new <file> <slug> # write <model dir>/engagements/<slug>.md — frontmatter (slices, parallel ceiling) plus the generated Ledger table; selection by --slices, --context, or --downstream-of (exactly one)
|
|
204
|
+
em engagement new <file> <slug> --slices <keys> # comma-separated slice export keys
|
|
205
|
+
em engagement new <file> <slug> --context <name> # every slice with an event in this context
|
|
206
|
+
em engagement new <file> <slug> --downstream-of <ref> # a slice key, element ref, or display name: it and everything downstream of it (loops-to excluded)
|
|
207
|
+
em engagement new <file> <slug> --parallel <n> # how many slices of one level may be in flight at once
|
|
208
|
+
em engagement new <file> <slug> --by <name> # who created the engagement (createdBy)
|
|
209
|
+
em engagement new <file> <slug> --tracking <key> # an issue-tracker key or URL the slice PRs cite (a slice doc's own tracking: wins)
|
|
210
|
+
em engagement new <file> <slug> --force # overwrite an existing engagement file with this slug
|
|
211
|
+
em engagement plan <file> <slug> # the engagement's build plan: dependency levels over model.edges (loops-to excluded), and per slice its readiness, branch impl/<key>, base (always main — MIL-280), and any hold
|
|
212
|
+
em engagement plan <file> <slug> --json # print a JSON document instead of text (same document as the MCP engagement_plan tool)
|
|
213
|
+
em engagement set <file> <slug> <key> # the only write path to the Ledger: set one slice's state (and optionally branch/base/pr); idempotent; merged is terminal; --state held records a human hold
|
|
214
|
+
em engagement set <file> <slug> <key> --state <state> # one of: planned | building | validating | review | awaiting-merge | merged | held | gap
|
|
215
|
+
em engagement set <file> <slug> <key> --branch <name> # the slice's branch
|
|
216
|
+
em engagement set <file> <slug> <key> --base <name> # the branch the slice's PR targets
|
|
217
|
+
em engagement set <file> <slug> <key> --pr <url> # the slice's PR URL
|
|
218
|
+
em engagement status <file> <slug> # the Ledger joined with each slice doc's current status, plus whether the engagement is closable
|
|
219
|
+
em engagement status <file> <slug> --json # print a JSON document instead of text (same document as the MCP engagement_status tool)
|
|
220
|
+
em engagement close <file> <slug> # set status: closed — refuses unless every slice is merged (recorded or inferred) or gap
|
|
221
|
+
em system [target] # verify a system — every model's `consumes` refs resolved against the other models' `public` events/views, the cross-model half of "both ends of a flow" (MIL-194/MIL-235, see docs/cli.md). Reads system.yaml when given (or found in the directory), else discovers every *.em in the repo
|
|
222
|
+
em system [target] --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
223
|
+
em system codeowners [target] # generate (or --check) the managed CODEOWNERS block that routes review: each model's team on its design directory, and every team that `consumes` a model's public surface on that model's contract file (MIL-234, see docs/ci.md and docs/cli.md)
|
|
224
|
+
em system codeowners [target] -o, --output <path> # the CODEOWNERS file to splice into (default: the first of CODEOWNERS, .github/CODEOWNERS, docs/CODEOWNERS that exists, else CODEOWNERS at the repo root)
|
|
225
|
+
em system codeowners [target] --check # verify the committed file already carries the generated block; never writes, exit 1 on drift (CI)
|
|
226
|
+
em system codeowners [target] --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
227
|
+
em system scope [target] # check a change set against the seams (MIL-240): fail only when it alters a producer's public surface (or contract file) AND a consuming model's design dir together (`seam-crossing`); warn on other multi-model change sets. Files changed only by `Em-Upgrade:` commits are exempt. There is no override - review on the contract file is the gate (see docs/cli.md, docs/ci.md)
|
|
228
|
+
em system scope [target] --base <rev> # the change set committed since <rev> (merge-base form, <rev>...HEAD); CI passes the PR base
|
|
229
|
+
em system scope [target] --staged # also (or only) check what is staged right now; never exempted
|
|
230
|
+
em system scope [target] --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
231
|
+
em contract # print the packaged implementation contract (reference/implement.md) to stdout — the agent-neutral discovery path for any agent that can run a shell, not just Claude Code (MIL-129); see docs/cli.md
|
|
232
|
+
em mcp # start an MCP (Model Context Protocol) server over stdio (MIL-21) — a structured, agent-facing alternative to shelling out to `em`; every tool mirrors a CLI `--json` surface byte-for-byte. docs/mcp.md isn't vendored into the skill bundle — for the handshake and the full, current tool table (the list changes as commands gain MCP parity, so it's not repeated here — MIL-187) see https://github.com/milehimikey/em/blob/main/docs/mcp.md. Equivalent to running the `em-mcp` bin directly
|
|
233
|
+
em skill install # copy the event-modeling skill bundle into .claude/skills/ (event-modeling, event-modeling-discover/-design/-implement/-conform/-review, event-modeling-shared); across a structural bundle change (e.g. the MIL-157 split of the old single event-modeling/ directory into this six-directory bundle), `em skill sync` is the migration path — --force now performs the same reconcile (MIL-180)
|
|
234
|
+
em skill install -f, --force # overwrite an existing installation, reconciling added/updated/removed files within the bundle's own managed directories the same way `em skill sync` does — never touching an unrelated sibling skill (MIL-180)
|
|
235
|
+
em skill install --no-agents-md # skip writing/updating the AGENTS.md agent-contract section (on by default, MIL-129)
|
|
236
|
+
em skill sync [path] # update the vendored .claude/skills/ event-modeling skill bundle in [path] to match the installed em package (overwrites unconditionally; local edits are never merged, MIL-93)
|
|
237
|
+
em skill sync [path] --no-agents-md # skip writing/updating the AGENTS.md agent-contract section (on by default, MIL-129)
|
|
238
|
+
em skill check [path] # check [path]'s em skills for drift against the installed em package: the em Claude Code plugin's pin (settings + this machine's marketplace registry) when the repo declares it, and the vendored .claude/skills/ bundle when present; exits non-zero on any mismatch (CI-ready, MIL-93, MIL-231)
|
|
239
|
+
em skill check [path] --json # print a JSON document instead of the text report (see docs/cli.md)
|
|
240
|
+
em skill check [path] --ci # also fail (exit 1) when the declared plugin is not registered on this machine (implied by CI=true in the environment); without it that finding prints the install commands on stderr and exits 0
|
|
241
|
+
em ci init <model> # install .github/workflows/em-ci.yml (PR gates: em validate, em slice index --check, em coverage --strict, em ledger, em skill check, em glossary --fail-on-conflicts, plus a push-triggered status-badge rebuild) and em-conform.yml (scheduled, advisory-only conformance cadence) — same install discipline as `em skill install`: marker-delimited, idempotent, --check for CI self-verification (MIL-166, see docs/ci.md). Give it a system.yaml (or its directory) instead of a model to cover every model in the system: one workflow, per-model jobs, a conform matrix (MIL-233)
|
|
242
|
+
em ci init <model> --tests <dir> # test directory the coverage/status steps scan for INV-* citations
|
|
243
|
+
em ci init <model> -f, --force # replace an existing workflow file that has no GENERATED markers, or a managed block generated for a different set of models
|
|
244
|
+
em ci init <model> --check # verify both files match the current preset; exit non-zero on drift without writing (CI)
|
|
245
|
+
em upgrade <file> # bring a model repo authored under an older em (1.6 forward) up to the installed version: an ordered list of mechanical steps (skill bundle, reaction shape, state-file bullets, generated CI blocks, constitution scaffold) plus a human list of things no command can safely decide by itself (MIL-219, see docs/upgrading.md). Dry-run by default; --apply makes one git commit per applicable step, refusing on a dirty working tree
|
|
246
|
+
em upgrade <file> --apply # apply every applicable mechanical step, one git commit each, then a final `Em version:` commit
|
|
247
|
+
em upgrade <file> --check # exit non-zero only on a hard incompatibility (an existing but unparseable state file, an un-migratable .em shape) — writes nothing; what CI runs; the final line says why
|
|
248
|
+
em upgrade <file> --json # print a JSON document instead of text (dry-run/--check only, never with --apply)
|
|
243
249
|
```
|
|
244
250
|
<!-- GENERATED:cli:end -->
|
|
245
251
|
|
|
@@ -417,7 +423,7 @@ type Name { field: Type, ... } # named structured type, reusable from any f
|
|
|
417
423
|
command/event/`ui`/`type` field is a parse error. Excludes the field from
|
|
418
424
|
`fields-completeness/view-field-no-source` entirely (and thus from `--slice-ready`). The
|
|
419
425
|
traced form still checks something: every named event must resolve among the view's ACTUAL
|
|
420
|
-
sources (
|
|
426
|
+
sources (the union of `from` across the view's originating and every `again` instance, or the same-slice events for a `from`-less view) — an
|
|
421
427
|
unresolved name is a validation error, `derived-from-unresolved`. `em export` carries it as
|
|
422
428
|
`derived: boolean` on the field (always present, same `=== true` convention as `tag`/
|
|
423
429
|
`assigned`) and `derivedFrom: string[] | null` (the traced event name(s), `null` on a bare
|