@milehimikey/em 1.17.0 → 1.18.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.
Files changed (196) hide show
  1. package/.claude/agents/em-implementer.md +7 -4
  2. package/.claude/agents/em-validator.md +2 -2
  3. package/.claude/skills/event-modeling/SKILL.md +1 -1
  4. package/.claude/skills/event-modeling-conform/SKILL.md +1 -1
  5. package/.claude/skills/event-modeling-design/SKILL.md +46 -5
  6. package/.claude/skills/event-modeling-discover/SKILL.md +43 -8
  7. package/.claude/skills/event-modeling-discover/reference/extract.md +6 -1
  8. package/.claude/skills/event-modeling-discover/reference/prd-rubric.md +102 -0
  9. package/.claude/skills/event-modeling-discover/reference/prd-spec-path.md +171 -0
  10. package/.claude/skills/event-modeling-engagement/SKILL.md +21 -9
  11. package/.claude/skills/event-modeling-implement/SKILL.md +1 -1
  12. package/.claude/skills/event-modeling-implement/reference/implement.md +18 -0
  13. package/.claude/skills/event-modeling-review/SKILL.md +4 -2
  14. package/.claude/skills/event-modeling-shared/reference/em-dsl.md +94 -6
  15. package/.claude/skills/event-modeling-shared/reference/methodology.md +268 -0
  16. package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +96 -2
  17. package/.claude/skills/event-modeling-shared/templates/slice.md +11 -3
  18. package/.claude-plugin/marketplace.json +2 -2
  19. package/dist/catalog/docModelConsistencyValidate.js +160 -0
  20. package/dist/catalog/docModelConsistencyValidate.js.map +1 -1
  21. package/dist/catalog/invariantsValidate.d.ts +2 -0
  22. package/dist/catalog/invariantsValidate.js +67 -1
  23. package/dist/catalog/invariantsValidate.js.map +1 -1
  24. package/dist/catalog/scenarioQualityValidate.d.ts +4 -0
  25. package/dist/catalog/scenarioQualityValidate.js +148 -0
  26. package/dist/catalog/scenarioQualityValidate.js.map +1 -0
  27. package/dist/catalog/scenarios.d.ts +5 -0
  28. package/dist/catalog/scenarios.js +80 -0
  29. package/dist/catalog/scenarios.js.map +1 -1
  30. package/dist/catalog/sliceDoc.d.ts +4 -0
  31. package/dist/catalog/sliceDoc.js +16 -7
  32. package/dist/catalog/sliceDoc.js.map +1 -1
  33. package/dist/catalog/sliceReadyValidate.d.ts +11 -2
  34. package/dist/catalog/sliceReadyValidate.js +62 -3
  35. package/dist/catalog/sliceReadyValidate.js.map +1 -1
  36. package/dist/catalog/sliceSections.d.ts +3 -2
  37. package/dist/catalog/sliceSections.js +99 -9
  38. package/dist/catalog/sliceSections.js.map +1 -1
  39. package/dist/cli/ciInit.d.ts +4 -11
  40. package/dist/cli/ciInit.js +24 -6
  41. package/dist/cli/ciInit.js.map +1 -1
  42. package/dist/cli/coverage.d.ts +9 -0
  43. package/dist/cli/coverage.js +18 -0
  44. package/dist/cli/coverage.js.map +1 -1
  45. package/dist/cli/defer.d.ts +28 -0
  46. package/dist/cli/defer.js +87 -4
  47. package/dist/cli/defer.js.map +1 -1
  48. package/dist/cli/engagement.d.ts +13 -2
  49. package/dist/cli/engagement.js +60 -5
  50. package/dist/cli/engagement.js.map +1 -1
  51. package/dist/cli/engagementFile.d.ts +2 -0
  52. package/dist/cli/engagementFile.js +3 -1
  53. package/dist/cli/engagementFile.js.map +1 -1
  54. package/dist/cli/markImplemented.d.ts +14 -10
  55. package/dist/cli/markImplemented.js +49 -1
  56. package/dist/cli/markImplemented.js.map +1 -1
  57. package/dist/cli/prdTriage.d.ts +109 -0
  58. package/dist/cli/prdTriage.js +393 -0
  59. package/dist/cli/prdTriage.js.map +1 -0
  60. package/dist/cli/render-inputs.d.ts +2 -0
  61. package/dist/cli/render-inputs.js +4 -0
  62. package/dist/cli/render-inputs.js.map +1 -1
  63. package/dist/cli/review.d.ts +17 -2
  64. package/dist/cli/review.js +39 -10
  65. package/dist/cli/review.js.map +1 -1
  66. package/dist/cli/revise.d.ts +2 -0
  67. package/dist/cli/revise.js +7 -2
  68. package/dist/cli/revise.js.map +1 -1
  69. package/dist/cli/shape.d.ts +27 -0
  70. package/dist/cli/shape.js +77 -0
  71. package/dist/cli/shape.js.map +1 -0
  72. package/dist/cli/sliceIndex.d.ts +6 -1
  73. package/dist/cli/sliceIndex.js +28 -13
  74. package/dist/cli/sliceIndex.js.map +1 -1
  75. package/dist/cli/sliceNew.d.ts +4 -1
  76. package/dist/cli/sliceNew.js +26 -9
  77. package/dist/cli/sliceNew.js.map +1 -1
  78. package/dist/cli/status.d.ts +21 -1
  79. package/dist/cli/status.js +25 -3
  80. package/dist/cli/status.js.map +1 -1
  81. package/dist/cli/storylineSuggest.d.ts +26 -0
  82. package/dist/cli/storylineSuggest.js +252 -0
  83. package/dist/cli/storylineSuggest.js.map +1 -0
  84. package/dist/cli/upgrade.d.ts +15 -3
  85. package/dist/cli/upgrade.js +516 -7
  86. package/dist/cli/upgrade.js.map +1 -1
  87. package/dist/cli/upgradeReshape.d.ts +60 -0
  88. package/dist/cli/upgradeReshape.js +425 -0
  89. package/dist/cli/upgradeReshape.js.map +1 -0
  90. package/dist/cli.js +311 -35
  91. package/dist/cli.js.map +1 -1
  92. package/dist/emit/dot.d.ts +2 -0
  93. package/dist/emit/dot.js +44 -8
  94. package/dist/emit/dot.js.map +1 -1
  95. package/dist/emit/engagementJson.d.ts +4 -3
  96. package/dist/emit/engagementJson.js +11 -4
  97. package/dist/emit/engagementJson.js.map +1 -1
  98. package/dist/emit/json.d.ts +21 -1
  99. package/dist/emit/json.js +26 -2
  100. package/dist/emit/json.js.map +1 -1
  101. package/dist/emit/queryJson.d.ts +1 -1
  102. package/dist/emit/queryJson.js +3 -1
  103. package/dist/emit/queryJson.js.map +1 -1
  104. package/dist/emit/statusJson.d.ts +1 -1
  105. package/dist/emit/statusJson.js +6 -1
  106. package/dist/emit/statusJson.js.map +1 -1
  107. package/dist/emit/theme.d.ts +1 -0
  108. package/dist/emit/theme.js +13 -0
  109. package/dist/emit/theme.js.map +1 -1
  110. package/dist/emit/validateJson.d.ts +9 -5
  111. package/dist/emit/validateJson.js +40 -5
  112. package/dist/emit/validateJson.js.map +1 -1
  113. package/dist/layout/grid.d.ts +5 -1
  114. package/dist/layout/grid.js +93 -2
  115. package/dist/layout/grid.js.map +1 -1
  116. package/dist/mcp/server.js +46 -11
  117. package/dist/mcp/server.js.map +1 -1
  118. package/dist/model/edges.d.ts +7 -0
  119. package/dist/model/edges.js +33 -16
  120. package/dist/model/edges.js.map +1 -1
  121. package/dist/model/model.d.ts +33 -0
  122. package/dist/model/model.js +87 -3
  123. package/dist/model/model.js.map +1 -1
  124. package/dist/model/queryIndex.js +2 -2
  125. package/dist/model/queryIndex.js.map +1 -1
  126. package/dist/model/refs.js +8 -5
  127. package/dist/model/refs.js.map +1 -1
  128. package/dist/model/rules.d.ts +149 -0
  129. package/dist/model/rules.js +144 -0
  130. package/dist/model/rules.js.map +1 -1
  131. package/dist/model/shapeLint.d.ts +12 -0
  132. package/dist/model/shapeLint.js +170 -0
  133. package/dist/model/shapeLint.js.map +1 -0
  134. package/dist/model/storylines.d.ts +51 -0
  135. package/dist/model/storylines.js +188 -0
  136. package/dist/model/storylines.js.map +1 -0
  137. package/dist/model/validate.d.ts +6 -1
  138. package/dist/model/validate.js +317 -14
  139. package/dist/model/validate.js.map +1 -1
  140. package/dist/parser/againSugar.d.ts +30 -0
  141. package/dist/parser/againSugar.js +105 -0
  142. package/dist/parser/againSugar.js.map +1 -0
  143. package/dist/parser/ast.d.ts +33 -0
  144. package/dist/parser/lexer.d.ts +2 -0
  145. package/dist/parser/lexer.js +4 -0
  146. package/dist/parser/lexer.js.map +1 -1
  147. package/dist/parser/parser.js +284 -4
  148. package/dist/parser/parser.js.map +1 -1
  149. package/dist/query/format.js +1 -0
  150. package/dist/query/format.js.map +1 -1
  151. package/dist/query/verbs.d.ts +4 -0
  152. package/dist/query/verbs.js +30 -3
  153. package/dist/query/verbs.js.map +1 -1
  154. package/dist/render/drawEdges.js +100 -4
  155. package/dist/render/drawEdges.js.map +1 -1
  156. package/dist/render/render.js +20 -2
  157. package/dist/render/render.js.map +1 -1
  158. package/dist/render/sliceDiagram.js +5 -5
  159. package/dist/render/sliceDiagram.js.map +1 -1
  160. package/dist/render/storylineBands.d.ts +11 -0
  161. package/dist/render/storylineBands.js +80 -0
  162. package/dist/render/storylineBands.js.map +1 -0
  163. package/dist/render/storylineDiagram.d.ts +14 -0
  164. package/dist/render/storylineDiagram.js +142 -0
  165. package/dist/render/storylineDiagram.js.map +1 -0
  166. package/dist/roster/check.d.ts +32 -0
  167. package/dist/roster/check.js +92 -0
  168. package/dist/roster/check.js.map +1 -0
  169. package/dist/roster/context.d.ts +3 -0
  170. package/dist/roster/context.js +23 -0
  171. package/dist/roster/context.js.map +1 -0
  172. package/dist/roster/init.d.ts +15 -0
  173. package/dist/roster/init.js +52 -0
  174. package/dist/roster/init.js.map +1 -0
  175. package/dist/roster/roster.d.ts +79 -0
  176. package/dist/roster/roster.js +298 -0
  177. package/dist/roster/roster.js.map +1 -0
  178. package/package.json +1 -1
  179. package/plugin/.claude-plugin/plugin.json +2 -2
  180. package/plugin/agents/em-implementer.md +7 -4
  181. package/plugin/agents/em-validator.md +2 -2
  182. package/plugin/shared/reference/em-dsl.md +94 -6
  183. package/plugin/shared/reference/methodology.md +268 -0
  184. package/plugin/shared/reference/slice-doc-schema.md +96 -2
  185. package/plugin/shared/templates/slice.md +11 -3
  186. package/plugin/skills/conform/SKILL.md +1 -1
  187. package/plugin/skills/design/SKILL.md +46 -5
  188. package/plugin/skills/discover/SKILL.md +43 -8
  189. package/plugin/skills/discover/reference/extract.md +6 -1
  190. package/plugin/skills/discover/reference/prd-rubric.md +103 -0
  191. package/plugin/skills/discover/reference/prd-spec-path.md +172 -0
  192. package/plugin/skills/engagement/SKILL.md +21 -9
  193. package/plugin/skills/event-modeling/SKILL.md +1 -1
  194. package/plugin/skills/implement/SKILL.md +1 -1
  195. package/plugin/skills/implement/reference/implement.md +18 -0
  196. package/plugin/skills/review/SKILL.md +4 -2
@@ -11,6 +11,7 @@ export type ApplyReviseResult = {
11
11
  content: string;
12
12
  newVersion: number;
13
13
  kind: ReviseKind;
14
+ shippedVersion: number | null;
14
15
  reopened: number;
15
16
  injected: number;
16
17
  } | {
@@ -59,6 +60,7 @@ export type RunReviseResult = {
59
60
  path: string;
60
61
  newVersion: number;
61
62
  kind: ReviseKind;
63
+ shippedVersion: number | null;
62
64
  advisory: ReviseAdvisory | null;
63
65
  reopened: number;
64
66
  injected: number;
@@ -199,7 +199,12 @@ function applyRevise(raw, kind, opts = {}) {
199
199
  const injected = keepsNumber || !opts.queuedFor
200
200
  ? { content: reopened.content, count: 0 }
201
201
  : injectQueuedQuestions(reopened.content, opts.queuedFor(newVersion));
202
- return { ok: true, content: injected.content, newVersion, kind, reopened: reopened.count, injected: injected.count };
202
+ // GH #284: the version that stays shipped, when the doc carries one (the message must not say
203
+ // "never shipped" over a doc that has a shipped version).
204
+ const shippedRaw = fieldLineRegex("shippedVersion").exec(inner);
205
+ const shippedNum = shippedRaw ? Number(normalizeFieldValue(shippedRaw[2])) : NaN;
206
+ const shippedVersion = Number.isInteger(shippedNum) && shippedNum >= 1 ? shippedNum : kind === "shipped" ? currentVersion : null;
207
+ return { ok: true, content: injected.content, newVersion, kind, shippedVersion, reopened: reopened.count, injected: injected.count };
203
208
  }
204
209
  export function reviseAdvisory(baseDir, sliceKey, shippedVersion, conformedVersion) {
205
210
  const neverCertified = conformedVersion === null || conformedVersion !== shippedVersion;
@@ -252,6 +257,6 @@ export function runRevise(model, refs, baseDir, sliceKey, withdraw = false, keep
252
257
  writeFileSync(absPath, result.content, "utf8");
253
258
  if (result.injected > 0)
254
259
  clearQueue(baseDir, sliceKey, result.newVersion);
255
- return { ok: true, path: doc.path, newVersion: result.newVersion, kind: result.kind, advisory, reopened: result.reopened, injected: result.injected };
260
+ return { ok: true, path: doc.path, newVersion: result.newVersion, kind: result.kind, shippedVersion: result.shippedVersion, advisory, reopened: result.reopened, injected: result.injected };
256
261
  }
257
262
  //# sourceMappingURL=revise.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"revise.js","sourceRoot":"","sources":["../../src/cli/revise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"revise.js","sourceRoot":"","sources":["../../src/cli/revise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Diagnostic } from "../model/validate.js";
2
+ import { type RuleCode } from "../model/rules.js";
3
+ import { readWaiveFile } from "./refsCheck.js";
4
+ export { readWaiveFile };
5
+ /** Every registered rule code in the shape family, registry order. */
6
+ export declare function shapeRuleCodes(): RuleCode[];
7
+ export interface ShapeRuleReport {
8
+ code: string;
9
+ title: string;
10
+ /** docs/validation.md anchor for the rule (`shape` unless the registry names another). */
11
+ docAnchor: string;
12
+ /** Findings that count (not waived). */
13
+ findings: Diagnostic[];
14
+ /** Findings a waive file excused — listed, never counted. */
15
+ waived: Diagnostic[];
16
+ }
17
+ export interface ShapeReport {
18
+ rules: ShapeRuleReport[];
19
+ /** Total findings that count / that were waived. */
20
+ findings: number;
21
+ waived: number;
22
+ /** Waive-file lines that excused nothing (stale key, unknown rule code). */
23
+ staleWaivers: string[];
24
+ }
25
+ export declare function buildShapeReport(diagnostics: Diagnostic[], waiveLines: string[]): ShapeReport;
26
+ /** Text table: rule, count, first ref, docs anchor; waived findings listed separately below. */
27
+ export declare function formatShapeText(report: ShapeReport, modelErrors: number): string;
@@ -0,0 +1,77 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // GH #282: `em validate --shape` — the focused view of the advisory storyline-shape lints. A rule
3
+ // belongs to it by one field alone, `family: "shape"` on its RULES entry (model/rules.ts), so a new
4
+ // shape lint plugs in by registering that field; nothing here names a rule. Advisory by
5
+ // construction: this module only groups and partitions diagnostics the validator already computed,
6
+ // and the CLI exits 0 whatever it finds. `--waive-file` reuses `em refs`'s waiver file (one line per waiver, `#` comments, missing file = no waivers) so an estate can baseline accepted shapes.
7
+ import { RULES } from "../model/rules.js";
8
+ import { readWaiveFile } from "./refsCheck.js";
9
+ export { readWaiveFile };
10
+ /** Every registered rule code in the shape family, registry order. */
11
+ export function shapeRuleCodes() {
12
+ return Object.keys(RULES).filter((c) => RULES[c].family === "shape");
13
+ }
14
+ function parseWaivers(lines, codes) {
15
+ const waivers = [];
16
+ const stale = [];
17
+ for (const line of lines) {
18
+ const parts = line.split(/\s+/);
19
+ if (parts.length === 1)
20
+ waivers.push({ line, rule: null, key: parts[0], used: false });
21
+ else if (parts.length === 2 && codes.has(parts[0]))
22
+ waivers.push({ line, rule: parts[0], key: parts[1], used: false });
23
+ else
24
+ stale.push(line); // unknown rule code, or a malformed line
25
+ }
26
+ return { waivers, stale };
27
+ }
28
+ const under = (ref, key) => ref === key || ref.startsWith(`${key}/`);
29
+ export function buildShapeReport(diagnostics, waiveLines) {
30
+ const codes = shapeRuleCodes();
31
+ const { waivers, stale } = parseWaivers(waiveLines, new Set(codes));
32
+ const rules = codes.map((code) => {
33
+ const def = RULES[code];
34
+ const findings = [];
35
+ const waived = [];
36
+ for (const d of diagnostics.filter((x) => x.code === code)) {
37
+ const refs = d.refs ?? [];
38
+ // Waived when it has refs and every ref lies under a waiver that applies to this rule.
39
+ const applicable = waivers.filter((w) => w.rule === null || w.rule === code);
40
+ const covering = refs.length === 0 ? null : refs.map((r) => applicable.filter((w) => under(r, w.key)));
41
+ if (covering && covering.every((c) => c.length > 0)) {
42
+ waived.push(d);
43
+ for (const c of covering)
44
+ for (const w of c)
45
+ w.used = true;
46
+ }
47
+ else
48
+ findings.push(d);
49
+ }
50
+ return { code, title: def.title, docAnchor: def.docAnchor ?? "shape", findings, waived };
51
+ });
52
+ return {
53
+ rules,
54
+ findings: rules.reduce((n, r) => n + r.findings.length, 0),
55
+ waived: rules.reduce((n, r) => n + r.waived.length, 0),
56
+ staleWaivers: [...stale, ...waivers.filter((w) => !w.used).map((w) => w.line)],
57
+ };
58
+ }
59
+ /** Text table: rule, count, first ref, docs anchor; waived findings listed separately below. */
60
+ export function formatShapeText(report, modelErrors) {
61
+ const rows = report.rules.map((r) => [r.code, String(r.findings.length), r.findings[0]?.refs?.[0] ?? "-", `docs/validation.md#${r.docAnchor}`]);
62
+ const head = ["rule", "count", "first ref", "docs"];
63
+ const widths = head.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
64
+ const line = (cells) => cells.map((c, i) => c.padEnd(widths[i])).join(" ").trimEnd();
65
+ const out = [line(head), ...rows.map(line)];
66
+ if (report.waived > 0) {
67
+ out.push("", `waived (${report.waived}, not counted):`);
68
+ for (const r of report.rules)
69
+ for (const d of r.waived)
70
+ out.push(` ${r.code}: ${(d.refs ?? []).join(", ")}`);
71
+ }
72
+ out.push("", report.findings === 0 ? "ok — no shape findings" : `${report.findings} shape finding(s) — fix each, or record it as \`shape-accepted: <rule> <refs> — <reason>\` in \`.event-modeling.md\` \`## Decisions log\` (advisory: exit 0)`);
73
+ if (modelErrors > 0)
74
+ out.push(`note: the model has ${modelErrors} error(s) — run \`em validate\`; shape findings may be incomplete`);
75
+ return out.join("\n");
76
+ }
77
+ //# sourceMappingURL=shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape.js","sourceRoot":"","sources":["../../src/cli/shape.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ export declare const SLICE_INDEX_MARKER = "slices";
7
7
  export interface SliceIndexRow {
8
8
  index: number;
9
9
  name: string;
10
+ /** GH #277: the `storyline` block the slice is declared in, or `—`. The column is only
11
+ * rendered when the model declares at least one storyline (see `buildSliceIndexTable`), so a
12
+ * model without storylines keeps its README table byte-identical. */
13
+ storyline: string;
10
14
  pattern: string;
11
15
  status: string;
12
16
  /** MIL-201: the doc's `reviewedBy`, or `—`. Sits between Status and Ratified by so the two
@@ -18,7 +22,8 @@ export interface SliceIndexRow {
18
22
  implementedIn: string;
19
23
  /** MIL-214: `v<N> @ <rev>`, or `—` — see `conformedCell`. */
20
24
  conformed: string;
21
- docPath: string;
25
+ /** Null when the slice has no doc bound (nothing to link to) — rendered as `—`. */
26
+ docPath: string | null;
22
27
  }
23
28
  export interface SliceIndexTable {
24
29
  /** The full replacement body for the GENERATED:slices block — header + one row per slice
@@ -59,29 +59,44 @@ function statusCell(doc, continuationOf) {
59
59
  * doc-resolution convention `em export`/`em catalog` use for `slices/<key>.md`. */
60
60
  export function buildSliceIndexTable(model, refs, baseDir) {
61
61
  const diagnostics = [];
62
- const rows = model.slices.map((slice, i) => {
62
+ // GH #287: a continuation column synthesized from `view X again` inside another slice has no
63
+ // source slice block of its own, so it gets no row (and does not consume a row number).
64
+ const rows = [];
65
+ model.slices.forEach((slice, i) => {
66
+ if (slice.synthesized)
67
+ return;
63
68
  const sliceKey = refs.sliceKeys[i];
64
69
  const pattern = classifySlicePattern(slice);
65
70
  const { doc, diagnostics: docDiags, continuationOf } = resolveSliceDocJoin(model, refs, slice, sliceKey, baseDir, (id) => refs.refById.get(id));
66
71
  diagnostics.push(...docDiags);
67
- return {
68
- index: i + 1,
72
+ rows.push({
73
+ index: rows.length + 1,
69
74
  name: slice.name,
75
+ storyline: slice.storyline ?? "—",
70
76
  pattern: slicePatternLabel(pattern),
71
77
  status: statusCell(doc, continuationOf),
72
- reviewedBy: doc.reviewedBy ?? "—",
73
- ratifiedBy: doc.ratifiedBy ?? "—",
78
+ // GH #275: a continuation row borrows its parent's doc, but the parent's review /
79
+ // ratify / tracking / implemented / conformed facts belong to the parent, not to this
80
+ // row — show `—` and keep only the `continuation of …` status.
81
+ reviewedBy: continuationOf ? "—" : (doc.reviewedBy ?? "—"),
82
+ ratifiedBy: continuationOf ? "—" : (doc.ratifiedBy ?? "—"),
74
83
  owner: doc.owner ?? "—",
75
- tracking: doc.tracking ?? "—",
76
- implementedIn: doc.implementedIn ?? "—",
77
- conformed: conformedCell(doc),
78
- docPath: doc.path,
79
- };
84
+ tracking: continuationOf ? "—" : (doc.tracking ?? "—"),
85
+ implementedIn: continuationOf ? "—" : (doc.implementedIn ?? "—"),
86
+ conformed: continuationOf ? "—" : conformedCell(doc),
87
+ // GH #275: `no-doc-bound` carries a made-up `slices/<key>.md` path that nothing backs.
88
+ docPath: !doc.found && doc.reason === "no-doc-bound" ? null : doc.path,
89
+ });
80
90
  });
81
- const lines = rows.map((r) => `| ${r.index} | ${escapeCell(r.name)} | ${escapeCell(r.pattern)} | ${escapeCell(r.status)} | ` +
91
+ // GH #277: a Storyline column right after Slice, only for a model that declares storylines.
92
+ const withStoryline = (model.storylines ?? []).length > 0;
93
+ const header = withStoryline
94
+ ? TABLE_HEADER.split("\n").map((l, n) => (n === 0 ? l.replace("| Slice |", "| Slice | Storyline |") : l.replace("|-------|", "|-------|-----------|"))).join("\n")
95
+ : TABLE_HEADER;
96
+ const lines = rows.map((r) => `| ${r.index} | ${escapeCell(r.name)} | ${withStoryline ? `${escapeCell(r.storyline)} | ` : ""}${escapeCell(r.pattern)} | ${escapeCell(r.status)} | ` +
82
97
  `${escapeCell(r.reviewedBy)} | ${escapeCell(r.ratifiedBy)} | ${escapeCell(r.owner)} | ` +
83
- `${escapeCell(r.tracking)} | ${escapeCell(r.implementedIn)} | ${escapeCell(r.conformed)} | [${r.docPath}](${r.docPath}) |`);
84
- return { markdown: [TABLE_HEADER, ...lines].join("\n"), rows, diagnostics };
98
+ `${escapeCell(r.tracking)} | ${escapeCell(r.implementedIn)} | ${escapeCell(r.conformed)} | ${r.docPath ? `[${r.docPath}](${r.docPath})` : "—"} |`);
99
+ return { markdown: [header, ...lines].join("\n"), rows, diagnostics };
85
100
  }
86
101
  /**
87
102
  * Rewrite (or, in `check` mode, verify) the GENERATED:slices block in `<dirname(emFilePath)>/
@@ -1 +1 @@
1
- {"version":3,"file":"sliceIndex.js","sourceRoot":"","sources":["../../src/cli/sliceIndex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sliceIndex.js","sourceRoot":"","sources":["../../src/cli/sliceIndex.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,10 @@ export declare function sliceDocKey(displayName: string): string;
19
19
  * `em slice sync` fills once the doc is bound. Authored sections carry the template's
20
20
  * placeholder bullets and stay hand-written.
21
21
  */
22
- export declare function buildSliceDocContent(displayName: string, key: string, pattern: SlicePattern, swimlane: string, regions?: GeneratedRegion[]): string;
22
+ export declare function buildSliceDocContent(displayName: string, key: string, pattern: SlicePattern, swimlane: string, regions?: GeneratedRegion[],
23
+ /** GH #278: the alternatives of an `event A | B @Ctx` line the slice records, in order —
24
+ * the scenario template gets one Then-case (one scenario) per alternative. */
25
+ alternatives?: string[]): string;
23
26
  /**
24
27
  * Build the full contents of a fresh, near-free `slices/<key>.md` STUB (MIL-184: `em slice new
25
28
  * --stub` / `em slice stub-all`) — the same 5 frontmatter keys `buildSliceDocContent` writes
@@ -43,7 +43,10 @@ export function sliceDocKey(displayName) {
43
43
  * `em slice sync` fills once the doc is bound. Authored sections carry the template's
44
44
  * placeholder bullets and stay hand-written.
45
45
  */
46
- export function buildSliceDocContent(displayName, key, pattern, swimlane, regions = placeholderRegions()) {
46
+ export function buildSliceDocContent(displayName, key, pattern, swimlane, regions = placeholderRegions(),
47
+ /** GH #278: the alternatives of an `event A | B @Ctx` line the slice records, in order —
48
+ * the scenario template gets one Then-case (one scenario) per alternative. */
49
+ alternatives = []) {
47
50
  const block = (kind) => {
48
51
  const out = [];
49
52
  for (const r of regions) {
@@ -96,14 +99,28 @@ export function buildSliceDocContent(displayName, key, pattern, swimlane, region
96
99
  INVARIANTS_ELABORATE_COMMENT,
97
100
  ``,
98
101
  `## Scenarios (Given / When / Then)`,
99
- `### Scenario: Happy path`,
100
- `- **Given:**`,
101
- ` - {{starting state / prior events}}`,
102
- `- **When:**`,
103
- ` - {{command/trigger}}`,
104
- `- **Then:**`,
105
- ` - {{event(s) recorded}}`,
106
- ` - {{resulting read-model change}}`,
102
+ ...(alternatives.length > 1
103
+ ? alternatives.flatMap((alt, i) => [
104
+ `### Scenario: Records ${alt}`,
105
+ `- **Given:**`,
106
+ ` - {{starting state / prior events that make this the outcome}}`,
107
+ `- **When:**`,
108
+ ` - {{command/trigger}}`,
109
+ `- **Then:**`,
110
+ ` - ${alt} is recorded`,
111
+ ` - {{resulting read-model change}}`,
112
+ ...(i < alternatives.length - 1 ? [``] : []),
113
+ ])
114
+ : [
115
+ `### Scenario: Happy path`,
116
+ `- **Given:**`,
117
+ ` - {{starting state / prior events}}`,
118
+ `- **When:**`,
119
+ ` - {{command/trigger}}`,
120
+ `- **Then:**`,
121
+ ` - {{event(s) recorded}}`,
122
+ ` - {{resulting read-model change}}`,
123
+ ]),
107
124
  ``,
108
125
  `## Alternate & Error Flows`,
109
126
  `- {{e.g. external call fails → retry policy / compensating event}}`,
@@ -1 +1 @@
1
- {"version":3,"file":"sliceNew.js","sourceRoot":"","sources":["../../src/cli/sliceNew.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sliceNew.js","sourceRoot":"","sources":["../../src/cli/sliceNew.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qFAAqF;AACrF,8FAA8F;AAC9F,0IAA0I;AAC1I,6FAA6F;AAC7F,4FAA4F;AAC5F,8FAA8F;AAC9F,+FAA+F;AAC/F,8FAA8F;AAC9F,+FAA+F;AAC/F,6FAA6F;AAC7F,EAAE;AACF,8FAA8F;AAC9F,oFAAoF;AACpF,6BAA6B;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,4BAA4B,EAC5B,kBAAkB,EAClB,aAAa,EAEb,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAErC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAU,CAAC;AAGnG,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAQ,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;8BAG8B;AAC9B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;;;6EAG6E;AAC7E,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,GAAW,EACX,OAAqB,EACrB,QAAgB,EAChB,UAA6B,kBAAkB,EAAE;AACjD;+EAC+E;AAC/E,eAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAY,EAAE;QAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;gBAAE,SAAS;YAC9B,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,KAAK;QACL,kBAAkB,cAAc,EAAE;QAClC,YAAY,OAAO,EAAE;QACrB,aAAa,QAAQ,EAAE;QACvB,eAAe;QACf,YAAY;QACZ,KAAK;QACL,YAAY,WAAW,EAAE;QACzB,EAAE;QACF,gBAAgB,GAAG,OAAO;QAC1B,EAAE;QACF,WAAW;QACX,kGAAkG;QAClG,4DAA4D;QAC5D,EAAE;QACF,oBAAoB;QACpB,+FAA+F;QAC/F,+FAA+F;QAC/F,iGAAiG;QACjG,kGAAkG;QAClG,sBAAsB;QACtB,EAAE;QACF,oBAAoB;QACpB,GAAG,KAAK,CAAC,SAAS,CAAC;QACnB,EAAE;QACF,YAAY;QACZ,+EAA+E;QAC/E,EAAE;QACF,qBAAqB;QACrB,GAAG,KAAK,CAAC,OAAO,CAAC;QACjB,2EAA2E;QAC3E,EAAE;QACF,sBAAsB;QACtB,GAAG,KAAK,CAAC,MAAM,CAAC;QAChB,6EAA6E;QAC7E,iFAAiF;QACjF,EAAE;QACF,gCAAgC;QAChC,GAAG,KAAK,CAAC,YAAY,CAAC;QACtB,4BAA4B;QAC5B,EAAE;QACF,oCAAoC;QACpC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,yBAAyB,GAAG,EAAE;gBAC9B,cAAc;gBACd,kEAAkE;gBAClE,aAAa;gBACb,yBAAyB;gBACzB,aAAa;gBACb,OAAO,GAAG,cAAc;gBACxB,qCAAqC;gBACrC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC;YACJ,CAAC,CAAC;gBACE,0BAA0B;gBAC1B,cAAc;gBACd,uCAAuC;gBACvC,aAAa;gBACb,yBAAyB;gBACzB,aAAa;gBACb,2BAA2B;gBAC3B,qCAAqC;aACtC,CAAC;QACN,EAAE;QACF,4BAA4B;QAC5B,oEAAoE;QACpE,qEAAqE;QACrE,EAAE;QACF,gCAAgC;QAChC,qFAAqF;QACrF,8FAA8F;QAC9F,yEAAyE;QACzE,EAAE;QACF,wCAAwC;QACxC,qDAAqD;QACrD,yDAAyD;QACzD,EAAE;QACF,mBAAmB;QACnB,oBAAoB;KACrB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAqB,EAAE,QAAgB;IAC9F,OAAO,CACL,OAAO;QACP,kBAAkB,cAAc,IAAI;QACpC,YAAY,OAAO,IAAI;QACvB,aAAa,QAAQ,IAAI;QACzB,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,YAAY,WAAW,IAAI;QAC3B,IAAI;QACJ,mEAAmE,CACpE,CAAC;AACJ,CAAC"}
@@ -38,6 +38,11 @@ export interface SliceStatusFact {
38
38
  /** MIL-283: a version of this slice has shipped (`doc.shipped`, the shipped record) — the fact
39
39
  * conformance scope and `byStatus.shipped` read; `rawStatus`/`bucket` stay the WORKING status. */
40
40
  shipped: boolean;
41
+ /** GH #285: the shipped version number and the doc's current `version:` — what lets `em status`
42
+ * say "implemented (v1) · draft v2 open" for a slice whose next version is open over a shipped
43
+ * one. Null when nothing shipped / no usable doc. */
44
+ shippedVersion?: number | null;
45
+ version?: number | null;
41
46
  /** The doc's own `implementedIn:` value verbatim (or null) — carried through from the same
42
47
  * `resolveSliceDocJoin` call this fact set already makes, so `resolveSlicePRsBehindHead`
43
48
  * (MIL-164) can build its `SliceDocFacts[]` input from these facts directly rather than
@@ -285,6 +290,17 @@ export interface StatusSliceCounts {
285
290
  frontmatterInvalid: number;
286
291
  unknown: number;
287
292
  };
293
+ /** GH #285 (status schema 1.11): slices whose next version is open (working status `draft`/
294
+ * `reviewed`/`ready-to-implement`) over a shipped one — `em slice mark-implemented`/`revise`
295
+ * leave a doc like this, and a bare `draft` count would read as "never implemented". In model
296
+ * order; `shippedVersion` < `version`. */
297
+ nextOpen: Array<{
298
+ file: string;
299
+ key: string;
300
+ shippedVersion: number;
301
+ version: number;
302
+ status: string;
303
+ }>;
288
304
  }
289
305
  export interface StatusDriftCounts {
290
306
  inSync: number;
@@ -390,11 +406,15 @@ export interface StatusReport {
390
406
  open: number;
391
407
  slugs: string[];
392
408
  };
409
+ /** GH #259 (status schema 1.12): the ratifier roster beside the first input model --
410
+ * `present` (`ratifiers.yaml` found and valid), `invalid` (found but unusable: `ratify`/`review`
411
+ * refuse), or `absent` (today's behaviour, any name accepted). */
412
+ roster: "present" | "absent" | "invalid";
393
413
  }
394
414
  /** Aggregate everything `em status` reports into one `StatusReport` — pure, no I/O. Callers
395
415
  * (the CLI action, the MCP tool) resolve every input first (compile each model, join every
396
416
  * slice's doc, scan the test tree once, resolve conformance) and hand the results here. */
397
- export declare function buildStatusReport(files: string[], sliceFacts: SliceStatusFact[], openIssuesCount: number, invariants: StatusInvariantTotals | null, conformance: ConformanceEntry[], diagnostics: StatusDiagnostic[], modelVersion?: ModelVersionStatusEntry[], emVersion?: EmVersionStatusEntry[], system?: StatusReport["system"], engagements?: StatusReport["engagements"]): StatusReport;
417
+ export declare function buildStatusReport(files: string[], sliceFacts: SliceStatusFact[], openIssuesCount: number, invariants: StatusInvariantTotals | null, conformance: ConformanceEntry[], diagnostics: StatusDiagnostic[], modelVersion?: ModelVersionStatusEntry[], emVersion?: EmVersionStatusEntry[], system?: StatusReport["system"], engagements?: StatusReport["engagements"], roster?: StatusReport["roster"]): StatusReport;
398
418
  /** Sum per-model `CoverageReport`s (see `./coverage.ts`) into one `StatusInvariantTotals` —
399
419
  * `em status` doesn't need the per-slice/per-ID detail `em coverage --json` carries, just the
400
420
  * totals, across however many models `--tests <dir>` was scanned against. */
@@ -78,6 +78,8 @@ export function resolveSliceStatusFacts(file, model, refs, baseDir) {
78
78
  docPath,
79
79
  rawStatus: doc.status,
80
80
  shipped: doc.shipped !== null,
81
+ shippedVersion: doc.shipped?.version ?? null,
82
+ version: doc.version,
81
83
  implementedIn: doc.implementedIn,
82
84
  owner: doc.owner,
83
85
  bucket: classifyStatusBucket(doc.found, doc.reason, doc.status),
@@ -339,8 +341,9 @@ export function resolveEmVersionStatusEntry(file, installedVersion) {
339
341
  /** Aggregate everything `em status` reports into one `StatusReport` — pure, no I/O. Callers
340
342
  * (the CLI action, the MCP tool) resolve every input first (compile each model, join every
341
343
  * slice's doc, scan the test tree once, resolve conformance) and hand the results here. */
342
- export function buildStatusReport(files, sliceFacts, openIssuesCount, invariants, conformance, diagnostics, modelVersion = [], emVersion = [], system = null, engagements = { open: 0, slugs: [] }) {
344
+ export function buildStatusReport(files, sliceFacts, openIssuesCount, invariants, conformance, diagnostics, modelVersion = [], emVersion = [], system = null, engagements = { open: 0, slugs: [] }, roster = "absent") {
343
345
  const byStatus = { draft: 0, reviewed: 0, readyToImplement: 0, implemented: 0, shipped: 0, noDoc: 0, frontmatterInvalid: 0, unknown: 0 };
346
+ const nextOpen = [];
344
347
  const drift = {
345
348
  inSync: 0,
346
349
  neverImplemented: 0,
@@ -372,6 +375,12 @@ export function buildStatusReport(files, sliceFacts, openIssuesCount, invariants
372
375
  }
373
376
  if (f.shipped)
374
377
  byStatus.shipped++;
378
+ if (f.shippedVersion != null &&
379
+ f.version != null &&
380
+ f.version > f.shippedVersion &&
381
+ (f.bucket === "draft" || f.bucket === "reviewed" || f.bucket === "ready-to-implement")) {
382
+ nextOpen.push({ file: f.file, key: f.key, shippedVersion: f.shippedVersion, version: f.version, status: f.bucket });
383
+ }
375
384
  switch (f.bucket) {
376
385
  case "draft":
377
386
  byStatus.draft++;
@@ -435,7 +444,7 @@ export function buildStatusReport(files, sliceFacts, openIssuesCount, invariants
435
444
  }
436
445
  return {
437
446
  files,
438
- slices: { total: sliceFacts.length, byStatus },
447
+ slices: { total: sliceFacts.length, byStatus, nextOpen },
439
448
  continuations,
440
449
  driftSignal: drift,
441
450
  invariants,
@@ -448,6 +457,7 @@ export function buildStatusReport(files, sliceFacts, openIssuesCount, invariants
448
457
  system,
449
458
  publicSlicesUnconfirmed,
450
459
  engagements,
460
+ roster,
451
461
  };
452
462
  }
453
463
  /** Sum per-model `CoverageReport`s (see `./coverage.ts`) into one `StatusInvariantTotals` —
@@ -563,7 +573,10 @@ export function formatStatusSummary(report) {
563
573
  const oqPart = (report.issues.openQuestionsUnchecked > 0 ? `, ${pluralize(report.issues.openQuestionsUnchecked, "unchecked open question")}` : "") +
564
574
  (report.issues.queuedQuestions > 0 ? `, ${report.issues.queuedQuestions} deferred to a later version` : "");
565
575
  const conformancePart = formatConformancePart(report.conformance[0]);
566
- return `${implemented}/${total} implemented · ${invPart} · ${issuesPart}${oqPart} · ${conformancePart}`;
576
+ // GH #285: slices whose next version is open count under `draft`, not `implemented` — say so.
577
+ const k = report.slices.nextOpen.length;
578
+ const nextPart = k > 0 ? ` (+${k} shipped, next draft open)` : "";
579
+ return `${implemented}/${total} implemented${nextPart} · ${invPart} · ${issuesPart}${oqPart} · ${conformancePart}`;
567
580
  }
568
581
  /** The detail block below the summary line: one line per rollup dimension, plus one line per
569
582
  * model's conformance entry. */
@@ -573,6 +586,11 @@ export function formatStatusDetail(report) {
573
586
  lines.push(`slices: ${report.slices.total} total — ${byStatus.shipped} shipped (${byStatus.implemented} implemented), ${byStatus.readyToImplement} ready-to-implement, ` +
574
587
  `${byStatus.reviewed} reviewed, ${byStatus.draft} draft, ${byStatus.noDoc} no doc, ${byStatus.frontmatterInvalid} frontmatter invalid, ` +
575
588
  `${byStatus.unknown} unknown status`);
589
+ // GH #285: a slice whose next version is open over a shipped one counts under `draft` above;
590
+ // name each so it is not read as "never implemented".
591
+ for (const n of report.slices.nextOpen) {
592
+ lines.push(` ${n.key}: implemented (v${n.shippedVersion}) · ${n.status} v${n.version} open`);
593
+ }
576
594
  // MIL-208: continuation slices (again-view-only, no doc of their own) are excluded from
577
595
  // `byStatus`/`driftSignal` above (the originating slice's own status/drift already counts
578
596
  // once) — named on their own line rather than silently missing from the total.
@@ -617,6 +635,7 @@ export function formatStatusDetail(report) {
617
635
  }
618
636
  // MIL-268: the open engagements line (always present; slugs only when there are any).
619
637
  lines.push(`open engagements: ${report.engagements.open}${report.engagements.open > 0 ? ` (${report.engagements.slugs.join(", ")})` : ""}`);
638
+ lines.push(`roster: ${report.roster}`);
620
639
  if (report.system)
621
640
  lines.push(`consumer adaptation: ${report.system.consumerNotAdapted} not adapted (${report.system.manifest})`);
622
641
  if (report.diagnostics.length > 0) {
@@ -648,6 +667,9 @@ export function formatStatusMarkdown(report) {
648
667
  const { byStatus } = report.slices;
649
668
  const rows = [
650
669
  ["Slices", `${byStatus.shipped}/${report.slices.total} shipped (${byStatus.implemented} implemented, ${byStatus.readyToImplement} ready-to-implement, ${byStatus.reviewed} reviewed, ${byStatus.draft} draft)`],
670
+ ...(report.slices.nextOpen.length > 0
671
+ ? [["Next versions open", report.slices.nextOpen.map((n) => `${n.key}: implemented (v${n.shippedVersion}) · ${n.status} v${n.version} open`).join("; ")]]
672
+ : []),
651
673
  ["Continuations", `${report.continuations}`],
652
674
  ["Invariants", report.invariants ? `${report.invariants.cited}/${report.invariants.total} covered` : "not checked"],
653
675
  ["Open issues", `${report.issues.openIssues}`],