@milehimikey/em 1.17.0 → 1.18.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.
Files changed (183) 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-design/SKILL.md +46 -5
  4. package/.claude/skills/event-modeling-discover/SKILL.md +43 -8
  5. package/.claude/skills/event-modeling-discover/reference/extract.md +6 -1
  6. package/.claude/skills/event-modeling-discover/reference/prd-rubric.md +102 -0
  7. package/.claude/skills/event-modeling-discover/reference/prd-spec-path.md +171 -0
  8. package/.claude/skills/event-modeling-engagement/SKILL.md +8 -3
  9. package/.claude/skills/event-modeling-implement/SKILL.md +1 -1
  10. package/.claude/skills/event-modeling-implement/reference/implement.md +8 -0
  11. package/.claude/skills/event-modeling-review/SKILL.md +1 -1
  12. package/.claude/skills/event-modeling-shared/reference/em-dsl.md +90 -5
  13. package/.claude/skills/event-modeling-shared/reference/methodology.md +268 -0
  14. package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +96 -2
  15. package/.claude/skills/event-modeling-shared/templates/slice.md +11 -3
  16. package/.claude-plugin/marketplace.json +2 -2
  17. package/dist/catalog/docModelConsistencyValidate.js +160 -0
  18. package/dist/catalog/docModelConsistencyValidate.js.map +1 -1
  19. package/dist/catalog/invariantsValidate.d.ts +2 -0
  20. package/dist/catalog/invariantsValidate.js +67 -1
  21. package/dist/catalog/invariantsValidate.js.map +1 -1
  22. package/dist/catalog/scenarioQualityValidate.d.ts +4 -0
  23. package/dist/catalog/scenarioQualityValidate.js +148 -0
  24. package/dist/catalog/scenarioQualityValidate.js.map +1 -0
  25. package/dist/catalog/scenarios.d.ts +5 -0
  26. package/dist/catalog/scenarios.js +80 -0
  27. package/dist/catalog/scenarios.js.map +1 -1
  28. package/dist/catalog/sliceReadyValidate.d.ts +8 -0
  29. package/dist/catalog/sliceReadyValidate.js +35 -3
  30. package/dist/catalog/sliceReadyValidate.js.map +1 -1
  31. package/dist/catalog/sliceSections.d.ts +3 -2
  32. package/dist/catalog/sliceSections.js +99 -9
  33. package/dist/catalog/sliceSections.js.map +1 -1
  34. package/dist/cli/ciInit.d.ts +4 -11
  35. package/dist/cli/ciInit.js +24 -6
  36. package/dist/cli/ciInit.js.map +1 -1
  37. package/dist/cli/coverage.d.ts +9 -0
  38. package/dist/cli/coverage.js +18 -0
  39. package/dist/cli/coverage.js.map +1 -1
  40. package/dist/cli/defer.d.ts +28 -0
  41. package/dist/cli/defer.js +87 -4
  42. package/dist/cli/defer.js.map +1 -1
  43. package/dist/cli/engagement.d.ts +2 -2
  44. package/dist/cli/engagement.js +24 -1
  45. package/dist/cli/engagement.js.map +1 -1
  46. package/dist/cli/markImplemented.d.ts +14 -10
  47. package/dist/cli/markImplemented.js +49 -1
  48. package/dist/cli/markImplemented.js.map +1 -1
  49. package/dist/cli/prdTriage.d.ts +109 -0
  50. package/dist/cli/prdTriage.js +378 -0
  51. package/dist/cli/prdTriage.js.map +1 -0
  52. package/dist/cli/render-inputs.d.ts +2 -0
  53. package/dist/cli/render-inputs.js +4 -0
  54. package/dist/cli/render-inputs.js.map +1 -1
  55. package/dist/cli/revise.d.ts +2 -0
  56. package/dist/cli/revise.js +7 -2
  57. package/dist/cli/revise.js.map +1 -1
  58. package/dist/cli/shape.d.ts +27 -0
  59. package/dist/cli/shape.js +77 -0
  60. package/dist/cli/shape.js.map +1 -0
  61. package/dist/cli/sliceIndex.d.ts +6 -1
  62. package/dist/cli/sliceIndex.js +28 -13
  63. package/dist/cli/sliceIndex.js.map +1 -1
  64. package/dist/cli/sliceNew.d.ts +4 -1
  65. package/dist/cli/sliceNew.js +26 -9
  66. package/dist/cli/sliceNew.js.map +1 -1
  67. package/dist/cli/status.d.ts +21 -1
  68. package/dist/cli/status.js +25 -3
  69. package/dist/cli/status.js.map +1 -1
  70. package/dist/cli/storylineSuggest.d.ts +26 -0
  71. package/dist/cli/storylineSuggest.js +252 -0
  72. package/dist/cli/storylineSuggest.js.map +1 -0
  73. package/dist/cli/upgrade.d.ts +15 -3
  74. package/dist/cli/upgrade.js +426 -7
  75. package/dist/cli/upgrade.js.map +1 -1
  76. package/dist/cli/upgradeReshape.d.ts +60 -0
  77. package/dist/cli/upgradeReshape.js +425 -0
  78. package/dist/cli/upgradeReshape.js.map +1 -0
  79. package/dist/cli.js +286 -29
  80. package/dist/cli.js.map +1 -1
  81. package/dist/emit/dot.d.ts +2 -0
  82. package/dist/emit/dot.js +44 -8
  83. package/dist/emit/dot.js.map +1 -1
  84. package/dist/emit/engagementJson.d.ts +1 -1
  85. package/dist/emit/engagementJson.js +3 -1
  86. package/dist/emit/engagementJson.js.map +1 -1
  87. package/dist/emit/json.d.ts +21 -1
  88. package/dist/emit/json.js +26 -2
  89. package/dist/emit/json.js.map +1 -1
  90. package/dist/emit/queryJson.d.ts +1 -1
  91. package/dist/emit/queryJson.js +3 -1
  92. package/dist/emit/queryJson.js.map +1 -1
  93. package/dist/emit/statusJson.d.ts +1 -1
  94. package/dist/emit/statusJson.js +6 -1
  95. package/dist/emit/statusJson.js.map +1 -1
  96. package/dist/emit/theme.d.ts +1 -0
  97. package/dist/emit/theme.js +13 -0
  98. package/dist/emit/theme.js.map +1 -1
  99. package/dist/emit/validateJson.d.ts +5 -2
  100. package/dist/emit/validateJson.js +36 -2
  101. package/dist/emit/validateJson.js.map +1 -1
  102. package/dist/layout/grid.d.ts +5 -1
  103. package/dist/layout/grid.js +93 -2
  104. package/dist/layout/grid.js.map +1 -1
  105. package/dist/mcp/server.js +46 -11
  106. package/dist/mcp/server.js.map +1 -1
  107. package/dist/model/edges.d.ts +7 -0
  108. package/dist/model/edges.js +33 -16
  109. package/dist/model/edges.js.map +1 -1
  110. package/dist/model/model.d.ts +33 -0
  111. package/dist/model/model.js +87 -3
  112. package/dist/model/model.js.map +1 -1
  113. package/dist/model/queryIndex.js +2 -2
  114. package/dist/model/queryIndex.js.map +1 -1
  115. package/dist/model/refs.js +8 -5
  116. package/dist/model/refs.js.map +1 -1
  117. package/dist/model/rules.d.ts +149 -0
  118. package/dist/model/rules.js +144 -0
  119. package/dist/model/rules.js.map +1 -1
  120. package/dist/model/shapeLint.d.ts +12 -0
  121. package/dist/model/shapeLint.js +170 -0
  122. package/dist/model/shapeLint.js.map +1 -0
  123. package/dist/model/storylines.d.ts +51 -0
  124. package/dist/model/storylines.js +188 -0
  125. package/dist/model/storylines.js.map +1 -0
  126. package/dist/model/validate.d.ts +6 -1
  127. package/dist/model/validate.js +317 -14
  128. package/dist/model/validate.js.map +1 -1
  129. package/dist/parser/againSugar.d.ts +30 -0
  130. package/dist/parser/againSugar.js +105 -0
  131. package/dist/parser/againSugar.js.map +1 -0
  132. package/dist/parser/ast.d.ts +33 -0
  133. package/dist/parser/lexer.d.ts +2 -0
  134. package/dist/parser/lexer.js +4 -0
  135. package/dist/parser/lexer.js.map +1 -1
  136. package/dist/parser/parser.js +284 -4
  137. package/dist/parser/parser.js.map +1 -1
  138. package/dist/query/format.js +1 -0
  139. package/dist/query/format.js.map +1 -1
  140. package/dist/query/verbs.d.ts +4 -0
  141. package/dist/query/verbs.js +30 -3
  142. package/dist/query/verbs.js.map +1 -1
  143. package/dist/render/drawEdges.js +100 -4
  144. package/dist/render/drawEdges.js.map +1 -1
  145. package/dist/render/render.js +20 -2
  146. package/dist/render/render.js.map +1 -1
  147. package/dist/render/sliceDiagram.js +5 -5
  148. package/dist/render/sliceDiagram.js.map +1 -1
  149. package/dist/render/storylineBands.d.ts +11 -0
  150. package/dist/render/storylineBands.js +80 -0
  151. package/dist/render/storylineBands.js.map +1 -0
  152. package/dist/render/storylineDiagram.d.ts +14 -0
  153. package/dist/render/storylineDiagram.js +142 -0
  154. package/dist/render/storylineDiagram.js.map +1 -0
  155. package/dist/roster/check.d.ts +32 -0
  156. package/dist/roster/check.js +92 -0
  157. package/dist/roster/check.js.map +1 -0
  158. package/dist/roster/context.d.ts +3 -0
  159. package/dist/roster/context.js +23 -0
  160. package/dist/roster/context.js.map +1 -0
  161. package/dist/roster/init.d.ts +15 -0
  162. package/dist/roster/init.js +52 -0
  163. package/dist/roster/init.js.map +1 -0
  164. package/dist/roster/roster.d.ts +79 -0
  165. package/dist/roster/roster.js +298 -0
  166. package/dist/roster/roster.js.map +1 -0
  167. package/package.json +1 -1
  168. package/plugin/.claude-plugin/plugin.json +2 -2
  169. package/plugin/shared/reference/em-dsl.md +90 -5
  170. package/plugin/shared/reference/methodology.md +268 -0
  171. package/plugin/shared/reference/slice-doc-schema.md +96 -2
  172. package/plugin/shared/templates/slice.md +11 -3
  173. package/plugin/skills/conform/SKILL.md +1 -1
  174. package/plugin/skills/design/SKILL.md +46 -5
  175. package/plugin/skills/discover/SKILL.md +43 -8
  176. package/plugin/skills/discover/reference/extract.md +6 -1
  177. package/plugin/skills/discover/reference/prd-rubric.md +103 -0
  178. package/plugin/skills/discover/reference/prd-spec-path.md +172 -0
  179. package/plugin/skills/engagement/SKILL.md +8 -3
  180. package/plugin/skills/event-modeling/SKILL.md +1 -1
  181. package/plugin/skills/implement/SKILL.md +1 -1
  182. package/plugin/skills/implement/reference/implement.md +8 -0
  183. package/plugin/skills/review/SKILL.md +1 -1
@@ -0,0 +1,378 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // GH #295: the PRD/spec discovery path's record — `discovery/prd-triage.json`. The discover skill
3
+ // (reference/prd-spec-path.md) walks an input document: walkthroughs -> storylines, split into
4
+ // single-claim statements, classify against the SHIPPED rubric, group by reaction, rewrite-don't-
5
+ // drop, record. The LLM does the judgment; em does the part that must not be judged: the shape,
6
+ // the verbatim quotes (the LLM may reword, never invent — every statement and storyline quotes
7
+ // the input and the quote must appear in it), the rubric version, and "every statement has a
8
+ // group and an outcome". `em discover triage-check <file>` (cli.ts) and the MCP tool
9
+ // `discover_triage_check` are thin wrappers over `checkPrdTriage` below.
10
+ //
11
+ // The rubric's source of truth for the checker is PRD_RUBRIC here; the same data ships in the
12
+ // skill bundle as reference/prd-rubric.md (a ```json block — the bundle is markdown-only) so the
13
+ // agent reads it, and test/prdTriage.test.ts asserts the two are identical.
14
+ import { existsSync, readFileSync } from "node:fs";
15
+ import { dirname, isAbsolute, resolve } from "node:path";
16
+ export const PRD_TRIAGE_SCHEMA_VERSION = "1.0";
17
+ export const TRIAGE_OUTCOMES = ["modeled", "rewritten", "constraint", "parked", "question"];
18
+ export const TRIAGE_CONFIDENCE = ["high", "low"];
19
+ export const TRIAGE_PROVENANCE = ["walkthrough", "reference"];
20
+ /** A quote shorter than this is too short to prove anything (`"order"` appears everywhere). */
21
+ export const MIN_QUOTE_CHARS = 12;
22
+ export const PRD_RUBRIC = {
23
+ rubricVersion: "1.0",
24
+ independentCheck: "Is this about the business, independent of how it is built?",
25
+ categories: [
26
+ { id: "business-fact", aboutBusiness: true, outcomes: ["modeled", "rewritten", "parked", "question"], meaning: "Something that happens or is true in the business; candidate event or field." },
27
+ { id: "user-intent", aboutBusiness: true, outcomes: ["modeled", "rewritten", "parked", "question"], meaning: "What an actor wants to accomplish; candidate command with its trigger." },
28
+ { id: "information-need", aboutBusiness: true, outcomes: ["modeled", "rewritten", "parked", "question"], meaning: "What an actor needs to see or know to act; candidate read model." },
29
+ { id: "actor", aboutBusiness: true, outcomes: ["modeled", "parked", "question"], meaning: "A person, role or calling system; candidate persona." },
30
+ { id: "business-rule", aboutBusiness: true, outcomes: ["modeled", "rewritten", "parked", "question"], meaning: "A constraint the business imposes; candidate invariant or scenario." },
31
+ { id: "external-system", aboutBusiness: "either", outcomes: ["modeled", "rewritten", "constraint", "parked", "question"], meaning: "A system outside the boundary; candidate translation slice or constraint." },
32
+ { id: "implementation-detail", aboutBusiness: false, outcomes: ["rewritten", "constraint", "parked", "question"], meaning: "How it is built. Rewritten in business language when it implies a business fact; a real tech choice goes to the constraints list." },
33
+ { id: "nfr", aboutBusiness: "either", outcomes: ["constraint", "parked", "question"], meaning: "Performance, availability, security, compliance: feeds the constitution, never a slice." },
34
+ { id: "goal-background", aboutBusiness: true, outcomes: ["parked", "rewritten", "question"], meaning: "Why the product exists; context for the main storyline, not a slice." },
35
+ { id: "question", aboutBusiness: "either", outcomes: ["question", "parked"], meaning: "An open question in the source; becomes a Socratic question, never an invented answer." },
36
+ { id: "resource-or-endpoint", aboutBusiness: false, outcomes: ["rewritten", "parked", "question"], meaning: "Describes an API resource or endpoint. Rewritten to the intent it serves (one endpoint may carry several); never promoted to a command as-is." },
37
+ ],
38
+ };
39
+ export const RUBRIC_CATEGORY_IDS = PRD_RUBRIC.categories.map((c) => c.id);
40
+ const norm = (s) => s.replace(/\s+/g, " ").trim();
41
+ /** Comparison form for the verbatim check, applied to BOTH sides: Markdown emphasis/code marks
42
+ * stripped, smart quotes straightened, whitespace collapsed. */
43
+ const normQuote = (s) => norm(s
44
+ .replace(/[‘’]/g, "'")
45
+ .replace(/[“”]/g, '"')
46
+ .replace(/[`*_]/g, ""));
47
+ function isObj(v) {
48
+ return typeof v === "object" && v !== null && !Array.isArray(v);
49
+ }
50
+ /** Shape + cross-reference validation of a parsed triage document (no file access). When
51
+ * `sourceText` is given, also checks every quote appears verbatim (see `normQuote`). Quotes
52
+ * shorter than MIN_QUOTE_CHARS are always rejected. `referenceOnlyGroups` lists the groups whose
53
+ * every statement came from the resource/endpoint reference rather than a walkthrough. */
54
+ export function validatePrdTriage(input, sourceText) {
55
+ const errors = [];
56
+ const err = (m) => errors.push(m);
57
+ if (!isObj(input))
58
+ return { ok: false, errors: ["top level must be a JSON object"] };
59
+ if (input.prdTriageSchemaVersion !== PRD_TRIAGE_SCHEMA_VERSION) {
60
+ err(`prdTriageSchemaVersion must be "${PRD_TRIAGE_SCHEMA_VERSION}" (got ${JSON.stringify(input.prdTriageSchemaVersion)})`);
61
+ }
62
+ if (input.rubricVersion !== PRD_RUBRIC.rubricVersion) {
63
+ err(`rubricVersion must be "${PRD_RUBRIC.rubricVersion}", the shipped rubric (got ${JSON.stringify(input.rubricVersion)})`);
64
+ }
65
+ if (typeof input.source !== "string" || input.source === "")
66
+ err("source must be a non-empty string (the input document path)");
67
+ for (const k of ["storylines", "groups", "statements", "constraints"]) {
68
+ if (!Array.isArray(input[k]))
69
+ err(`${k} must be an array`);
70
+ }
71
+ if (errors.length > 0)
72
+ return { ok: false, errors };
73
+ const nonEmpty = (v) => typeof v === "string" && v.trim() !== "";
74
+ const quoteIn = (where, q) => {
75
+ if (normQuote(q).length < MIN_QUOTE_CHARS) {
76
+ err(`${where}: quote is shorter than ${MIN_QUOTE_CHARS} characters ("${q}"); quote the whole claim`);
77
+ }
78
+ else if (sourceText !== undefined && !normQuote(sourceText).includes(normQuote(q))) {
79
+ err(`${where}: quote does not appear verbatim in the source: "${q.length > 60 ? q.slice(0, 57) + "..." : q}"`);
80
+ }
81
+ };
82
+ const seen = (kind, ids, id) => {
83
+ if (!nonEmpty(id)) {
84
+ err(`${kind}: id must be a non-empty string`);
85
+ return false;
86
+ }
87
+ if (ids.has(id)) {
88
+ err(`${kind} ${id}: duplicate id`);
89
+ return false;
90
+ }
91
+ ids.add(id);
92
+ return true;
93
+ };
94
+ const storylineIds = new Set();
95
+ const storylineSpan = new Map();
96
+ let mains = 0;
97
+ input.storylines.forEach((raw, i) => {
98
+ const w = `storylines[${i}]`;
99
+ if (!isObj(raw))
100
+ return err(`${w}: must be an object`);
101
+ if (!seen(w, storylineIds, raw.id))
102
+ return;
103
+ if (!nonEmpty(raw.name))
104
+ err(`${w} ${raw.id}: name required`);
105
+ if (typeof raw.main !== "boolean")
106
+ err(`${w} ${raw.id}: main must be a boolean`);
107
+ else if (raw.main)
108
+ mains++;
109
+ if (!nonEmpty(raw.quote))
110
+ err(`${w} ${raw.id}: quote required (the walkthrough's source span)`);
111
+ else {
112
+ quoteIn(`${w} ${raw.id}`, raw.quote);
113
+ storylineSpan.set(raw.id, normQuote(raw.quote));
114
+ }
115
+ });
116
+ if (storylineIds.size === 0)
117
+ err("storylines must name at least one storyline (the main end-to-end journey)");
118
+ else if (mains !== 1)
119
+ err(`exactly one storyline must be main (found ${mains})`);
120
+ const groupIds = new Set();
121
+ const groupStoryline = new Map();
122
+ const groupName = new Map();
123
+ input.groups.forEach((raw, i) => {
124
+ const w = `groups[${i}]`;
125
+ if (!isObj(raw))
126
+ return err(`${w}: must be an object`);
127
+ if (!seen(w, groupIds, raw.id))
128
+ return;
129
+ groupStoryline.set(raw.id, typeof raw.storyline === "string" ? raw.storyline : null);
130
+ groupName.set(raw.id, typeof raw.name === "string" ? raw.name : raw.id);
131
+ for (const k of ["name", "trigger", "actor"])
132
+ if (!nonEmpty(raw[k]))
133
+ err(`${w} ${raw.id}: ${k} required`);
134
+ // null = a reference-only group (outside every storyline); verified against its statements below.
135
+ if (raw.storyline !== null && (!nonEmpty(raw.storyline) || !storylineIds.has(raw.storyline))) {
136
+ err(`${w} ${raw.id}: storyline must name a declared storyline, or be null for a reference-only group`);
137
+ }
138
+ });
139
+ const statementIds = new Set();
140
+ const byId = new Map();
141
+ const usedGroups = new Set();
142
+ const groupMembers = new Map();
143
+ const quoteOwner = new Map();
144
+ input.statements.forEach((raw, i) => {
145
+ const w = `statements[${i}]`;
146
+ if (!isObj(raw))
147
+ return err(`${w}: must be an object`);
148
+ if (!seen(w, statementIds, raw.id))
149
+ return;
150
+ const id = raw.id;
151
+ byId.set(id, raw);
152
+ const at = `${w} ${id}`;
153
+ if (!nonEmpty(raw.quote))
154
+ err(`${at}: quote required`);
155
+ else {
156
+ quoteIn(at, raw.quote);
157
+ const nq = normQuote(raw.quote);
158
+ for (const [pq, pid] of quoteOwner) {
159
+ if (pq === nq)
160
+ err(`${at}: quote duplicates statement ${pid}'s; one statement per claim`);
161
+ else if (pq.includes(nq) || nq.includes(pq))
162
+ err(`${at}: quote overlaps statement ${pid}'s (one contains the other); one statement per claim`);
163
+ }
164
+ if (!quoteOwner.has(nq))
165
+ quoteOwner.set(nq, id);
166
+ // Provenance is checked, not declared: walkthrough quotes lie inside a storyline span,
167
+ // reference quotes lie outside every span.
168
+ const inside = [...storylineSpan].filter(([, span]) => span.includes(nq)).map(([sid]) => sid);
169
+ if (raw.provenance === "walkthrough" && inside.length === 0) {
170
+ err(`${at}: provenance is walkthrough but its quote lies inside no storyline's span (a walkthrough statement must quote a storyline's span)`);
171
+ }
172
+ if (raw.provenance === "reference" && inside.length > 0) {
173
+ err(`${at}: provenance is reference but its quote lies inside storyline ${inside[0]}'s span (a reference statement must quote text outside every storyline span)`);
174
+ }
175
+ }
176
+ const cat = PRD_RUBRIC.categories.find((c) => c.id === raw.category);
177
+ if (!cat)
178
+ err(`${at}: category must be one of ${RUBRIC_CATEGORY_IDS.join(", ")} (got ${JSON.stringify(raw.category)})`);
179
+ if (typeof raw.aboutBusiness !== "boolean")
180
+ err(`${at}: aboutBusiness must be a boolean (the independent check)`);
181
+ if (!TRIAGE_CONFIDENCE.includes(raw.confidence))
182
+ err(`${at}: confidence must be high or low`);
183
+ const outcome = raw.outcome;
184
+ if (!TRIAGE_OUTCOMES.includes(outcome)) {
185
+ err(`${at}: outcome must be one of ${TRIAGE_OUTCOMES.join(", ")}`);
186
+ return;
187
+ }
188
+ if (cat && !cat.outcomes.includes(outcome))
189
+ err(`${at}: category ${cat.id} may not have outcome ${outcome} (allowed: ${cat.outcomes.join(", ")})`);
190
+ if (!TRIAGE_PROVENANCE.includes(raw.provenance))
191
+ err(`${at}: provenance must be walkthrough or reference`);
192
+ // The independent check contradicting the category's expectation is a disagreement: a human's call.
193
+ if (cat && cat.aboutBusiness !== "either" && typeof raw.aboutBusiness === "boolean" && raw.aboutBusiness !== cat.aboutBusiness && outcome !== "question") {
194
+ err(`${at}: aboutBusiness is ${raw.aboutBusiness} but category ${cat.id} expects ${cat.aboutBusiness}; a disagreement must have outcome question (carry the proposed rewrite in the question), not ${outcome}`);
195
+ }
196
+ const needsGroup = outcome === "modeled" || outcome === "rewritten";
197
+ if (needsGroup || (outcome === "question" && raw.group !== null && raw.group !== undefined)) {
198
+ if (!nonEmpty(raw.group) || !groupIds.has(raw.group))
199
+ err(`${at}: outcome ${outcome} needs a group naming a declared group`);
200
+ else {
201
+ usedGroups.add(raw.group);
202
+ const members = groupMembers.get(raw.group) ?? [];
203
+ members.push(raw);
204
+ groupMembers.set(raw.group, members);
205
+ }
206
+ const gs = nonEmpty(raw.group) && groupStoryline.has(raw.group) ? groupStoryline.get(raw.group) : undefined;
207
+ if (gs === null) {
208
+ if (raw.storyline !== null && raw.storyline !== undefined)
209
+ err(`${at}: its group ${String(raw.group)} is reference-only (storyline null), so the statement's storyline must be null`);
210
+ }
211
+ else if (!nonEmpty(raw.storyline) || !storylineIds.has(raw.storyline)) {
212
+ err(`${at}: outcome ${outcome} needs a storyline naming a declared storyline`);
213
+ }
214
+ else if (gs !== undefined && gs !== raw.storyline) {
215
+ err(`${at}: storyline ${raw.storyline} differs from its group ${String(raw.group)}'s storyline ${gs}`);
216
+ }
217
+ }
218
+ else if (raw.group !== null && raw.group !== undefined) {
219
+ err(`${at}: outcome ${outcome} must have group null (only modeled/rewritten statements join a slice group; a question may name the group it would join)`);
220
+ }
221
+ if (outcome === "rewritten" && !nonEmpty(raw.rewrite))
222
+ err(`${at}: outcome rewritten needs a rewrite (business-language text)`);
223
+ if (outcome === "parked" && !nonEmpty(raw.reason))
224
+ err(`${at}: outcome parked needs a reason (it also goes in the Decisions log)`);
225
+ if (outcome === "question" && !nonEmpty(raw.question))
226
+ err(`${at}: outcome question needs a question`);
227
+ if (cat?.id === "resource-or-endpoint" && outcome === "modeled") {
228
+ err(`${at}: a resource-or-endpoint statement is never modeled as-is; rewrite it to the intent it serves`);
229
+ }
230
+ if (raw.confidence === "low" && outcome !== "question")
231
+ err(`${at}: low confidence must become a question, not ${outcome}`);
232
+ if (raw.scenarioOf !== undefined && (!nonEmpty(raw.scenarioOf) || !groupIds.has(raw.scenarioOf))) {
233
+ err(`${at}: scenarioOf must name a declared group`);
234
+ }
235
+ });
236
+ if (statementIds.size === 0)
237
+ err("statements must not be empty");
238
+ const constrained = new Set();
239
+ input.constraints.forEach((raw, i) => {
240
+ const w = `constraints[${i}]`;
241
+ if (!isObj(raw))
242
+ return err(`${w}: must be an object`);
243
+ if (!nonEmpty(raw.id))
244
+ err(`${w}: id required`);
245
+ if (!nonEmpty(raw.text))
246
+ err(`${w}: text required`);
247
+ if (!Array.isArray(raw.statements) || raw.statements.length === 0)
248
+ return err(`${w}: statements must list at least one statement id`);
249
+ for (const s of raw.statements) {
250
+ const st = typeof s === "string" ? byId.get(s) : undefined;
251
+ if (!st)
252
+ err(`${w}: unknown statement ${JSON.stringify(s)}`);
253
+ else if (st.outcome !== "constraint")
254
+ err(`${w}: statement ${String(s)} has outcome ${String(st.outcome)}, not constraint`);
255
+ else
256
+ constrained.add(s);
257
+ }
258
+ });
259
+ for (const [id, st] of byId) {
260
+ if (st.outcome === "constraint" && !constrained.has(id))
261
+ err(`statement ${id}: outcome constraint but no constraints[] entry lists it`);
262
+ }
263
+ for (const g of groupIds)
264
+ if (!usedGroups.has(g))
265
+ err(`group ${g}: no statement joins it`);
266
+ // Walkthrough-first: a group is EITHER anchored (a walkthrough statement whose quote lies inside
267
+ // its named storyline's span) OR reference-only (every statement `reference`, the group and its
268
+ // statements outside every storyline: storyline null). Reference-only groups are listed in the
269
+ // report for the human to inspect.
270
+ const referenceOnlyGroups = [];
271
+ for (const g of groupIds) {
272
+ const members = groupMembers.get(g);
273
+ if (!members)
274
+ continue;
275
+ const named = groupStoryline.get(g) ?? null;
276
+ if (members.every((m) => m.provenance === "reference")) {
277
+ if (named !== null)
278
+ err(`group ${g}: every statement is reference, so it is a reference-only group and must have storyline null (it joins no walkthrough storyline), not ${named}`);
279
+ else
280
+ referenceOnlyGroups.push(groupName.get(g) ?? g);
281
+ continue;
282
+ }
283
+ if (named === null) {
284
+ err(`group ${g}: storyline is null but it has walkthrough statements; name the storyline they advance`);
285
+ continue;
286
+ }
287
+ const span = storylineSpan.get(named);
288
+ // Only modeled/rewritten walkthrough statements anchor; a question is a pointer, never an anchor.
289
+ const inSpan = (m) => m.provenance === "walkthrough" && span !== undefined && typeof m.quote === "string" && span.includes(normQuote(m.quote));
290
+ const anchored = members.some((m) => (m.outcome === "modeled" || m.outcome === "rewritten") && inSpan(m));
291
+ if (!anchored && members.some((m) => m.outcome === "question" && inSpan(m))) {
292
+ err(`group ${g}: anchored by questions only — answer them or make the group reference-only`);
293
+ }
294
+ else if (!anchored)
295
+ err(`group ${g}: no walkthrough statement lies inside storyline ${named}'s span; anchor it in that walkthrough, or move it to a reference-only group`);
296
+ }
297
+ return errors.length > 0 ? { ok: false, errors } : { ok: true, doc: input, referenceOnlyGroups };
298
+ }
299
+ /** Check a `discovery/prd-triage.json`. The input document is `opts.source` when given, else the
300
+ * file's own `source`, resolved relative to the triage file's directory. */
301
+ export function checkPrdTriage(path, opts = {}) {
302
+ if (!existsSync(path))
303
+ return { ok: false, path, errors: [`no such file: ${path}`] };
304
+ let parsed;
305
+ try {
306
+ parsed = JSON.parse(readFileSync(path, "utf8"));
307
+ }
308
+ catch {
309
+ return { ok: false, path, errors: [`${path} is not valid JSON`] };
310
+ }
311
+ const declared = isObj(parsed) && typeof parsed.source === "string" ? parsed.source : undefined;
312
+ const sourceRef = opts.source ?? declared;
313
+ let sourcePath;
314
+ let sourceText;
315
+ const pre = [];
316
+ if (sourceRef) {
317
+ sourcePath = opts.source ? resolve(opts.source) : isAbsolute(sourceRef) ? sourceRef : resolve(dirname(path), sourceRef);
318
+ if (!existsSync(sourcePath))
319
+ pre.push(`source document not found: ${sourcePath}`);
320
+ else
321
+ sourceText = readFileSync(sourcePath, "utf8");
322
+ }
323
+ const shape = validatePrdTriage(parsed, sourceText);
324
+ const errors = [...pre, ...(shape.ok ? [] : shape.errors)];
325
+ if (errors.length > 0 || !shape.ok)
326
+ return { ok: false, path, errors };
327
+ return {
328
+ ok: true,
329
+ path,
330
+ source: sourcePath ?? shape.doc.source,
331
+ statements: shape.doc.statements.length,
332
+ storylines: shape.doc.storylines.length,
333
+ groups: shape.doc.groups.length,
334
+ referenceOnlyGroups: shape.referenceOnlyGroups,
335
+ errors: [],
336
+ };
337
+ }
338
+ /** `em discover triage-check --json` document. */
339
+ export function buildCheckPrdTriageJson(result) {
340
+ const doc = result.ok
341
+ ? { ok: true, path: result.path, source: result.source, storylines: result.storylines, groups: result.groups, statements: result.statements, referenceOnlyGroups: result.referenceOnlyGroups, errors: [] }
342
+ : { ok: false, path: result.path, errors: result.errors };
343
+ return JSON.stringify(doc, null, 2);
344
+ }
345
+ /** The Markdown view of a triage record (`--markdown`): deterministic, for the engagement reader. */
346
+ export function renderPrdTriageMarkdown(doc, referenceOnlyGroups = []) {
347
+ const L = ["# PRD triage", "", `Source: \`${doc.source}\` · rubric ${doc.rubricVersion} · schema ${doc.prdTriageSchemaVersion}`, ""];
348
+ L.push("## Storylines", "");
349
+ for (const s of doc.storylines)
350
+ L.push(`- **${s.name}**${s.main ? " (main)" : ""} — "${norm(s.quote)}"`);
351
+ L.push("", "## Slice groups", "");
352
+ for (const g of doc.groups) {
353
+ L.push(`### ${g.name}`, "", `Storyline: ${g.storyline ?? "none (reference-only)"} · trigger: ${g.trigger} · acting: ${g.actor}`, "");
354
+ for (const s of doc.statements.filter((x) => x.group === g.id)) {
355
+ const body = s.outcome === "rewritten" ? `${s.rewrite} _(from: "${norm(s.quote)}")_` : `"${norm(s.quote)}"`;
356
+ L.push(`- \`${s.id}\` [${s.category}] ${body}${s.scenarioOf ? ` — scenario of ${s.scenarioOf}` : ""}`);
357
+ }
358
+ L.push("");
359
+ }
360
+ if (referenceOnlyGroups.length > 0) {
361
+ L.push("## Reference-only groups — operations no walkthrough touches; check these are not CRUD fill", "");
362
+ for (const g of referenceOnlyGroups)
363
+ L.push(`- ${g}`);
364
+ L.push("");
365
+ }
366
+ const withOutcome = (o) => doc.statements.filter((s) => s.outcome === o);
367
+ L.push("## Constraints (feed the constitution)", "");
368
+ for (const c of doc.constraints)
369
+ L.push(`- ${c.text} (${c.statements.join(", ")})`);
370
+ L.push("", "## Parked", "");
371
+ for (const s of withOutcome("parked"))
372
+ L.push(`- \`${s.id}\` "${norm(s.quote)}" — ${s.reason}`);
373
+ L.push("", "## Questions for the owner", "");
374
+ for (const s of withOutcome("question"))
375
+ L.push(`- \`${s.id}\` ${s.question} _(source: "${norm(s.quote)}")_`);
376
+ return L.join("\n") + "\n";
377
+ }
378
+ //# sourceMappingURL=prdTriage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prdTriage.js","sourceRoot":"","sources":["../../src/cli/prdTriage.ts"],"names":[],"mappings":"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"}
@@ -24,4 +24,6 @@ export declare function resolveSliceArg(name: string, slices: Slice[]): SliceLoo
24
24
  * .em file — the same slices/ + kebabSlug convention em catalog's sibling-file
25
25
  * lookup and the event-modeling skill's slice-doc path already use.
26
26
  */
27
+ /** `em render --storyline`'s default output: `<dir of the .em file>/storylines/<kebab-slug>.svg`. */
28
+ export declare function defaultStorylineOut(file: string, storylineName: string): string;
27
29
  export declare function defaultSliceOut(file: string, sliceName: string): string;
@@ -35,6 +35,10 @@ export function resolveSliceArg(name, slices) {
35
35
  * .em file — the same slices/ + kebabSlug convention em catalog's sibling-file
36
36
  * lookup and the event-modeling skill's slice-doc path already use.
37
37
  */
38
+ /** `em render --storyline`'s default output: `<dir of the .em file>/storylines/<kebab-slug>.svg`. */
39
+ export function defaultStorylineOut(file, storylineName) {
40
+ return join(dirname(file), "storylines", `${kebabSlug(storylineName)}.svg`);
41
+ }
38
42
  export function defaultSliceOut(file, sliceName) {
39
43
  return join(dirname(file), "slices", `${kebabSlug(sliceName)}.svg`);
40
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"render-inputs.js","sourceRoot":"","sources":["../../src/cli/render-inputs.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,qDAAqD;AAErD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAe;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO;QACL,KAAK,EAAE,8BAA8B,IAAI,qBAAqB,KAAK,IAAI,uBAAuB,EAAE;KACjG,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,SAAiB;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"render-inputs.js","sourceRoot":"","sources":["../../src/cli/render-inputs.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,qDAAqD;AAErD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAe;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO;QACL,KAAK,EAAE,8BAA8B,IAAI,qBAAqB,KAAK,IAAI,uBAAuB,EAAE;KACjG,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,qGAAqG;AACrG,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,aAAqB;IACrE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,SAAiB;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC"}
@@ -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;