@milehimikey/em 1.19.6 → 1.19.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/.claude/skills/event-modeling/SKILL.md +1 -1
  2. package/.claude/skills/event-modeling-conform/SKILL.md +1 -1
  3. package/.claude/skills/event-modeling-conform/reference/conform.md +3 -3
  4. package/.claude/skills/event-modeling-design/SKILL.md +1 -1
  5. package/.claude/skills/event-modeling-discover/SKILL.md +1 -1
  6. package/.claude/skills/event-modeling-engagement/SKILL.md +1 -1
  7. package/.claude/skills/event-modeling-implement/SKILL.md +1 -1
  8. package/.claude/skills/event-modeling-review/SKILL.md +1 -1
  9. package/.claude/skills/event-modeling-shared/reference/em-dsl.md +2 -2
  10. package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +1 -1
  11. package/.claude-plugin/marketplace.json +2 -2
  12. package/README.md +11 -1
  13. package/dist/cli/conformSupersede.js +13 -3
  14. package/dist/cli/conformSupersede.js.map +1 -1
  15. package/dist/cli/markImplemented.js +21 -3
  16. package/dist/cli/markImplemented.js.map +1 -1
  17. package/dist/cli/sliceConform.d.ts +43 -0
  18. package/dist/cli/sliceConform.js +75 -2
  19. package/dist/cli/sliceConform.js.map +1 -1
  20. package/dist/cli/status.js +4 -3
  21. package/dist/cli/status.js.map +1 -1
  22. package/dist/cli.js +24 -18
  23. package/dist/cli.js.map +1 -1
  24. package/package.json +1 -1
  25. package/plugin/.claude-plugin/plugin.json +2 -2
  26. package/plugin/shared/reference/em-dsl.md +2 -2
  27. package/plugin/shared/reference/slice-doc-schema.md +1 -1
  28. package/plugin/skills/conform/SKILL.md +1 -1
  29. package/plugin/skills/conform/reference/conform.md +3 -3
  30. package/plugin/skills/design/SKILL.md +1 -1
  31. package/plugin/skills/discover/SKILL.md +1 -1
  32. package/plugin/skills/engagement/SKILL.md +1 -1
  33. package/plugin/skills/event-modeling/SKILL.md +1 -1
  34. package/plugin/skills/implement/SKILL.md +1 -1
  35. package/plugin/skills/review/SKILL.md +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milehimikey/em",
3
- "version": "1.19.6",
3
+ "version": "1.19.7",
4
4
  "description": "AI-friendly Event Modeling — a slice-first text DSL rendered to a strict, self-contained Graphviz grid (SVG/PNG)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "em",
3
- "version": "1.19.6",
3
+ "version": "1.19.7",
4
4
  "description": "Event Modeling with em: discover, design, implement, conform, review and engagement skills over a slice-first text DSL, plus the em MCP server.",
5
5
  "author": {
6
6
  "name": "Mike Key"
@@ -10,7 +10,7 @@
10
10
  "command": "npx",
11
11
  "args": [
12
12
  "-y",
13
- "@milehimikey/em@1.19.6",
13
+ "@milehimikey/em@1.19.7",
14
14
  "mcp"
15
15
  ]
16
16
  }
@@ -110,7 +110,7 @@ em changelog <file> -o, --out <path> # write to a
110
110
  em state read [dir] # print the state file's mechanical fields as JSON
111
111
  em state set-phase <phase> [dir] # rewrite Current phase: (and Last updated:); --step also rewrites Current step:
112
112
  em state set-phase <phase> [dir] --step <n> # also set Current step: to this value
113
- 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`)
113
+ 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, or, when that is absent, in every findings file at the report's own revision (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 and none at the report's revision: warns once and records the marker as given (migration path for a report predating `em conform-findings`)
114
114
  em state set-conformance <revision> [dir] --report <path> # path to the conformance report just written
115
115
  em state set-conformance <revision> [dir] --partial # record the marker as PARTIAL even though some in-scope findings are still unruled
116
116
  em state set-review <date> [dir] # rewrite Last stakeholder review: (and Last updated:)
@@ -128,7 +128,7 @@ em conform-scope <file> # mechanize
128
128
  em conform-scope <file> --repo <path> # path to (or inside) the target codebase's git repository
129
129
  em conform-scope <file> --full # ignore Last conformance:/changed paths; scope every implemented slice
130
130
  em conform-scope <file> --seed-asis # write <model>-asis.em as a byte copy of the canonical model and ensure it's gitignored
131
- 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)
131
+ 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 (refuses, naming them, when only other findings files exist at the report's revision; warns once and stamps the banner only when it doesn't — the migration path for a report predating em conform-findings)
132
132
  em conform-supersede <file> <report-path> --as-of <rev> # the revision this ruling was made against — same value passed to `em state set-conformance`
133
133
  em conform-supersede <file> <report-path> --findings <spec> # which finding number(s) this stamps as ruled, e.g. "1-3" or "1,2,4"
134
134
  em conform-supersede <file> <report-path> --on <date> # ruling date, YYYY-MM-DD (default: today, local date)
@@ -71,7 +71,7 @@ to decide `frontmatter-invalid` without re-deriving frontmatter-shape rules of i
71
71
  | `ratifiedRef` | string | full commit sha | written only by `em slice ratify` (MIL-284 — see [cli.md](https://github.com/milehimikey/em/blob/main/docs/cli.md#em-slice-ratify-file-slice-key---by-name)) when the model directory is inside a git repository: `HEAD` at ratification, the commit whose tree holds the body that was signed (ratify refuses a doc with uncommitted changes so this holds). Absent when ratified before 1.15, outside git, or with `em slice ratify --no-ref` (GH #255 — for a repo whose squash/rebase merges would leave the commit unreachable from the target branch; `--no-ref` also removes a line already present). **An address, not the identity:** valid only while the commit stays reachable; `ratifiedHash` is what identifies the signed content. Cleared by `em slice revise`. Joined into `em export`'s `slice.doc.ratifiedRef` (schema `1.16`). Not a target-repo revision: `em slice conform --at` still names that itself |
72
72
  | `ratifiedHash` | string | `sha256:<64 hex>` | written only by `em slice ratify` (MIL-284): `sha256` over the **authored text** of the doc body (everything after the frontmatter fence, EOLs normalised). Since 1.19.0 (GH #347) the text strictly between each [generated region](#generated-regions-and-authored-sections)'s two marker lines is left out (the marker lines themselves stay in), so `em slice sync` can refresh a ratified or shipped doc's regions without moving the hash — the regions restate the model, whose contract changes surface through model validation and its pin (`model-versions/v<N>.json`); a doc whose markers don't balance has nothing left out. Since 1.17.0 (GH #253) the doc also leaves out **what describes a later version**: inside `## Open Questions` the heading line, blank lines and every `deferred to v<n>` item, then trailing whitespace is trimmed — so `em slice defer` can record a question on a ratified or shipped doc without moving the hash. Answered `- [x]` history, any `- [ ]`, the region marker lines and every other section stay signed. The signed content's identity without git. A hash in an older scope whose body is intact is still read as intact — recorded by 1.17.0–1.18.x (generated regions inside) or before 1.17.0 (whole body); `em upgrade`'s `ratified-hash-scope` step re-stamps it, and so do `em slice sync` and `em slice defer` when they first write to the doc. Cleared by `em slice revise`. Read by `em validate --slice-ready` (`slice-ready-body-changed-since-ratification`) and by `ratify`'s same-sign-off re-run; joined into `em export`'s `slice.doc.ratifiedHash` (schema `1.16`) |
73
73
  | `shippedVersion` | integer | positive integer | written only by `em slice mark-implemented` (MIL-284): the doc's `version:` when the merge was recorded. With `shippedRef`/`shippedOn`/`implementedIn`, joined into `em export`'s `slice.doc.shipped` (schema `1.16`). Additive in 1.15 — `status`/`implementedIn` still carry the lifecycle for every reader |
74
- | `shippedRef` | string | full commit sha | written only by `em slice mark-implemented` (MIL-284): the doc's `ratifiedRef` at merge time, i.e. the ref the shipped version was signed at; absent when the doc had none (ratified before 1.15, outside git, or with `--no-ref`, GH #255). Same caveat as `ratifiedRef`: an address, valid while reachable — `ratifiedHash` identifies the content |
74
+ | `shippedRef` | string | full commit sha | written only by `em slice mark-implemented` (MIL-284): the doc's `ratifiedRef` at merge time, i.e. the ref the shipped version was signed at; absent when the doc had none (ratified before 1.15, outside git, or with `--no-ref`, GH #255) — a `shippedRef:` line left by the previous version's ship is removed on the flip (GH #392). Same caveat as `ratifiedRef`: an address, valid while reachable — `ratifiedHash` identifies the content |
75
75
  | `shippedOn` | string | `YYYY-MM-DD` | written only by `em slice mark-implemented` (MIL-284): the local date of the merge record, or `--on <date>` |
76
76
  | `meaningConfirmed` | boolean | `true` | written only by `em slice ratify --meaning-unchanged` (MIL-238 — see [cli.md](https://github.com/milehimikey/em/blob/main/docs/cli.md#em-slice-ratify-file-slice-key---by-name)): the API-first sign-off on a public-touching slice — this version does not change what the public contract means. Joined into `em export`'s `slice.doc.meaningConfirmed` (schema `1.15`; `false` when absent) |
77
77
  | `contractChange` | string | quoted free text (`contractChange: "<why>"`) | written only by `em slice ratify --contract-change "<why>"` (MIL-238): the API-first sign-off on a public-touching slice — why a consumer must read this change differently. Joined into `em export`'s `slice.doc.contractChange` (schema `1.15`, quotes stripped; `null` when absent) |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: conform
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when checking a ratified event model (and its slice docs) for drift against the codebase
6
6
  that implements it — advisory only, never a gate, never an unprompted edit — or when walking
@@ -343,7 +343,7 @@ em state set-conformance <target-repo revision> --report conformance/YYYY-MM-DD-
343
343
  ```
344
344
 
345
345
  — the revision is the one you just diffed against, so the next run's scope starts from here.
346
- The command writes the exact format step 1 parses back out; never hand-edit the bullet.
346
+ The command writes the exact format step 1 parses back out; never hand-edit the bullet. Gates read every same-revision findings file (the report's own `-findings.json` first, else every file whose `revision` matches). The same-revision lookup uses the report's OWN revision (its `Target repo: … @ <rev>` header line; the caller's `<rev>` / `--as-of` only when the report has none).
347
347
  **Refuses (MIL-214) while any `implemented` slice still has an unruled finding** in the findings
348
348
  JSON beside the report — rule on every finding first (or certify what's already ruled via `em
349
349
  slice conform` above), or pass `--partial` to record the marker with a loud notice instead
@@ -364,7 +364,7 @@ a ruling you're only banner-stamping after the fact), run the same command witho
364
364
  em conform-supersede <model-name>.em conformance/YYYY-MM-DD-report.md --as-of <target-repo revision> --findings <spec>
365
365
  ```
366
366
 
367
- — stamping the report with a "superseded as of `<rev>`" banner so a later reader who finds it
367
+ — a ruling is written to the file the report names (`<x>-report.md` <-> `<x>-findings.json`; with only per-slice files at that revision, pass the per-slice report or it refuses; `--as-of` is NOT the lookup key — the report's own `Target repo: … @ <rev>` header revision is, and `--as-of` only when the report has none) — stamping the report with a "superseded as of `<rev>`" banner so a later reader who finds it
368
368
  (a search hit, a bookmark, a link from an old PR description) sees immediately that its
369
369
  file:line citations describe an ancestor of the current model, not its current state. This is
370
370
  what keeps a superseded report an honest piece of history rather than a silently-misleading
@@ -380,7 +380,7 @@ each call adds its own stamp rather than overwriting the last.
380
380
  the gitignoring (`*-asis.em`, idempotent) mechanically, never built up from nothing and never
381
381
  hand-maintained. It's regenerated every conform run.
382
382
  - **Report location:** `conformance/<YYYY-MM-DD>-report.md` in the model directory. One file
383
- per run; don't overwrite a prior date's report.
383
+ per run; don't overwrite a prior date's report. Its findings go in the same-stem `-findings.json`; gates read every same-revision findings file, so per-slice runs may write `<date>-<name>-findings.json`, and a ruling is written to the file the report names. The same-revision lookup uses the report's OWN revision (its `Target repo: … @ <rev>` header line; the caller's `<rev>` / `--as-of` only when the report has none).
384
384
  - **Red note wording:** `issue "conformance: <what's wrong, plainly>"` — plain enough that
385
385
  whoever ratifies it later understands the claim without re-reading the report.
386
386
  - **Naming/matching rules:** same past-tense-event / imperative-command / thing-shown-view
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when structuring a draft event model into swimlanes and the four patterns (State Change,
6
6
  State View, Automation, Translation), evaluating a model's structural completeness, or writing
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: discover
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when starting a brand-new event model from scratch — greenfield discovery: brainstorming
6
6
  past-tense events, storyboarding the happy path, finding the commands and read models — or when
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: engagement
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when leading an engagement: building a named set of ratified event-modeling slices
6
6
  (`em engagement`) into one independent PR per slice, each against main, by dispatching the
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: event-modeling
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when the user runs `/em:event-modeling` (with or without a phase name), or wants to resume an
6
6
  event-modeling session without specifying which part of the process applies. Reads the model's
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: implement
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when building a single ratified event-modeling slice (status: ready-to-implement) into
6
6
  merged, tested code — the one phase where the agent builds rather than facilitates. Gates on
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: review
3
- em-version: 1.19.6
3
+ em-version: 1.19.7
4
4
  description: >-
5
5
  Use when starting em's live browser viewer (`em watch --serve`) so a team can watch a model
6
6
  update in real time, or facilitating a SCHEDULED stakeholder walkthrough that steps through