@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.
- package/.claude/skills/event-modeling/SKILL.md +1 -1
- package/.claude/skills/event-modeling-conform/SKILL.md +1 -1
- package/.claude/skills/event-modeling-design/SKILL.md +46 -5
- package/.claude/skills/event-modeling-discover/SKILL.md +43 -8
- package/.claude/skills/event-modeling-discover/reference/extract.md +6 -1
- package/.claude/skills/event-modeling-discover/reference/prd-rubric.md +102 -0
- package/.claude/skills/event-modeling-discover/reference/prd-spec-path.md +171 -0
- package/.claude/skills/event-modeling-engagement/SKILL.md +8 -3
- package/.claude/skills/event-modeling-implement/SKILL.md +1 -1
- package/.claude/skills/event-modeling-implement/reference/implement.md +8 -0
- package/.claude/skills/event-modeling-review/SKILL.md +1 -1
- package/.claude/skills/event-modeling-shared/reference/em-dsl.md +90 -5
- package/.claude/skills/event-modeling-shared/reference/methodology.md +268 -0
- package/.claude/skills/event-modeling-shared/reference/slice-doc-schema.md +96 -2
- package/.claude/skills/event-modeling-shared/templates/slice.md +11 -3
- package/.claude-plugin/marketplace.json +2 -2
- package/dist/catalog/docModelConsistencyValidate.js +160 -0
- package/dist/catalog/docModelConsistencyValidate.js.map +1 -1
- package/dist/catalog/invariantsValidate.d.ts +2 -0
- package/dist/catalog/invariantsValidate.js +67 -1
- package/dist/catalog/invariantsValidate.js.map +1 -1
- package/dist/catalog/scenarioQualityValidate.d.ts +4 -0
- package/dist/catalog/scenarioQualityValidate.js +148 -0
- package/dist/catalog/scenarioQualityValidate.js.map +1 -0
- package/dist/catalog/scenarios.d.ts +5 -0
- package/dist/catalog/scenarios.js +80 -0
- package/dist/catalog/scenarios.js.map +1 -1
- package/dist/catalog/sliceReadyValidate.d.ts +8 -0
- package/dist/catalog/sliceReadyValidate.js +35 -3
- package/dist/catalog/sliceReadyValidate.js.map +1 -1
- package/dist/catalog/sliceSections.d.ts +3 -2
- package/dist/catalog/sliceSections.js +99 -9
- package/dist/catalog/sliceSections.js.map +1 -1
- package/dist/cli/ciInit.d.ts +4 -11
- package/dist/cli/ciInit.js +24 -6
- package/dist/cli/ciInit.js.map +1 -1
- package/dist/cli/coverage.d.ts +9 -0
- package/dist/cli/coverage.js +18 -0
- package/dist/cli/coverage.js.map +1 -1
- package/dist/cli/defer.d.ts +28 -0
- package/dist/cli/defer.js +87 -4
- package/dist/cli/defer.js.map +1 -1
- package/dist/cli/engagement.d.ts +2 -2
- package/dist/cli/engagement.js +24 -1
- package/dist/cli/engagement.js.map +1 -1
- package/dist/cli/markImplemented.d.ts +14 -10
- package/dist/cli/markImplemented.js +49 -1
- package/dist/cli/markImplemented.js.map +1 -1
- package/dist/cli/prdTriage.d.ts +109 -0
- package/dist/cli/prdTriage.js +378 -0
- package/dist/cli/prdTriage.js.map +1 -0
- package/dist/cli/render-inputs.d.ts +2 -0
- package/dist/cli/render-inputs.js +4 -0
- package/dist/cli/render-inputs.js.map +1 -1
- package/dist/cli/revise.d.ts +2 -0
- package/dist/cli/revise.js +7 -2
- package/dist/cli/revise.js.map +1 -1
- package/dist/cli/shape.d.ts +27 -0
- package/dist/cli/shape.js +77 -0
- package/dist/cli/shape.js.map +1 -0
- package/dist/cli/sliceIndex.d.ts +6 -1
- package/dist/cli/sliceIndex.js +28 -13
- package/dist/cli/sliceIndex.js.map +1 -1
- package/dist/cli/sliceNew.d.ts +4 -1
- package/dist/cli/sliceNew.js +26 -9
- package/dist/cli/sliceNew.js.map +1 -1
- package/dist/cli/status.d.ts +21 -1
- package/dist/cli/status.js +25 -3
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/storylineSuggest.d.ts +26 -0
- package/dist/cli/storylineSuggest.js +252 -0
- package/dist/cli/storylineSuggest.js.map +1 -0
- package/dist/cli/upgrade.d.ts +15 -3
- package/dist/cli/upgrade.js +426 -7
- package/dist/cli/upgrade.js.map +1 -1
- package/dist/cli/upgradeReshape.d.ts +60 -0
- package/dist/cli/upgradeReshape.js +425 -0
- package/dist/cli/upgradeReshape.js.map +1 -0
- package/dist/cli.js +286 -29
- package/dist/cli.js.map +1 -1
- package/dist/emit/dot.d.ts +2 -0
- package/dist/emit/dot.js +44 -8
- package/dist/emit/dot.js.map +1 -1
- package/dist/emit/engagementJson.d.ts +1 -1
- package/dist/emit/engagementJson.js +3 -1
- package/dist/emit/engagementJson.js.map +1 -1
- package/dist/emit/json.d.ts +21 -1
- package/dist/emit/json.js +26 -2
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/queryJson.d.ts +1 -1
- package/dist/emit/queryJson.js +3 -1
- package/dist/emit/queryJson.js.map +1 -1
- package/dist/emit/statusJson.d.ts +1 -1
- package/dist/emit/statusJson.js +6 -1
- package/dist/emit/statusJson.js.map +1 -1
- package/dist/emit/theme.d.ts +1 -0
- package/dist/emit/theme.js +13 -0
- package/dist/emit/theme.js.map +1 -1
- package/dist/emit/validateJson.d.ts +5 -2
- package/dist/emit/validateJson.js +36 -2
- package/dist/emit/validateJson.js.map +1 -1
- package/dist/layout/grid.d.ts +5 -1
- package/dist/layout/grid.js +93 -2
- package/dist/layout/grid.js.map +1 -1
- package/dist/mcp/server.js +46 -11
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/edges.d.ts +7 -0
- package/dist/model/edges.js +33 -16
- package/dist/model/edges.js.map +1 -1
- package/dist/model/model.d.ts +33 -0
- package/dist/model/model.js +87 -3
- package/dist/model/model.js.map +1 -1
- package/dist/model/queryIndex.js +2 -2
- package/dist/model/queryIndex.js.map +1 -1
- package/dist/model/refs.js +8 -5
- package/dist/model/refs.js.map +1 -1
- package/dist/model/rules.d.ts +149 -0
- package/dist/model/rules.js +144 -0
- package/dist/model/rules.js.map +1 -1
- package/dist/model/shapeLint.d.ts +12 -0
- package/dist/model/shapeLint.js +170 -0
- package/dist/model/shapeLint.js.map +1 -0
- package/dist/model/storylines.d.ts +51 -0
- package/dist/model/storylines.js +188 -0
- package/dist/model/storylines.js.map +1 -0
- package/dist/model/validate.d.ts +6 -1
- package/dist/model/validate.js +317 -14
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/againSugar.d.ts +30 -0
- package/dist/parser/againSugar.js +105 -0
- package/dist/parser/againSugar.js.map +1 -0
- package/dist/parser/ast.d.ts +33 -0
- package/dist/parser/lexer.d.ts +2 -0
- package/dist/parser/lexer.js +4 -0
- package/dist/parser/lexer.js.map +1 -1
- package/dist/parser/parser.js +284 -4
- package/dist/parser/parser.js.map +1 -1
- package/dist/query/format.js +1 -0
- package/dist/query/format.js.map +1 -1
- package/dist/query/verbs.d.ts +4 -0
- package/dist/query/verbs.js +30 -3
- package/dist/query/verbs.js.map +1 -1
- package/dist/render/drawEdges.js +100 -4
- package/dist/render/drawEdges.js.map +1 -1
- package/dist/render/render.js +20 -2
- package/dist/render/render.js.map +1 -1
- package/dist/render/sliceDiagram.js +5 -5
- package/dist/render/sliceDiagram.js.map +1 -1
- package/dist/render/storylineBands.d.ts +11 -0
- package/dist/render/storylineBands.js +80 -0
- package/dist/render/storylineBands.js.map +1 -0
- package/dist/render/storylineDiagram.d.ts +14 -0
- package/dist/render/storylineDiagram.js +142 -0
- package/dist/render/storylineDiagram.js.map +1 -0
- package/dist/roster/check.d.ts +32 -0
- package/dist/roster/check.js +92 -0
- package/dist/roster/check.js.map +1 -0
- package/dist/roster/context.d.ts +3 -0
- package/dist/roster/context.js +23 -0
- package/dist/roster/context.js.map +1 -0
- package/dist/roster/init.d.ts +15 -0
- package/dist/roster/init.js +52 -0
- package/dist/roster/init.js.map +1 -0
- package/dist/roster/roster.d.ts +79 -0
- package/dist/roster/roster.js +298 -0
- package/dist/roster/roster.js.map +1 -0
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/shared/reference/em-dsl.md +90 -5
- package/plugin/shared/reference/methodology.md +268 -0
- package/plugin/shared/reference/slice-doc-schema.md +96 -2
- package/plugin/shared/templates/slice.md +11 -3
- package/plugin/skills/conform/SKILL.md +1 -1
- package/plugin/skills/design/SKILL.md +46 -5
- package/plugin/skills/discover/SKILL.md +43 -8
- package/plugin/skills/discover/reference/extract.md +6 -1
- package/plugin/skills/discover/reference/prd-rubric.md +103 -0
- package/plugin/skills/discover/reference/prd-spec-path.md +172 -0
- package/plugin/skills/engagement/SKILL.md +8 -3
- package/plugin/skills/event-modeling/SKILL.md +1 -1
- package/plugin/skills/implement/SKILL.md +1 -1
- package/plugin/skills/implement/reference/implement.md +8 -0
- package/plugin/skills/review/SKILL.md +1 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// `em storyline suggest <model>` (GH #290): advisory, read-only. Proposes `storyline` blocks (GH #277)
|
|
3
|
+
// for a model written before they existed and prints them as a unified diff the user applies by
|
|
4
|
+
// hand (`patch -p0`, `git apply`) — it never writes the model.
|
|
5
|
+
//
|
|
6
|
+
// Grouping, in this order, over the slices not already inside a storyline block:
|
|
7
|
+
// 1. one storyline per distinct slice `source "url"` (the slices sharing that URL);
|
|
8
|
+
// 2. the remaining slices by the view-instance chains they feed: a read model with at least one
|
|
9
|
+
// `view … again` instance links its originating slice, every `again` slice and the slices
|
|
10
|
+
// declaring the events any instance is built from. A chain that touches exactly one `source`
|
|
11
|
+
// group joins it; otherwise it becomes a storyline of its own;
|
|
12
|
+
// 3. a slice that fits neither stays outside every storyline (and keeps the advisory
|
|
13
|
+
// `slice-outside-storyline` warning once any storyline exists).
|
|
14
|
+
// A group whose slices are not adjacent in the file becomes several blocks with the same name — the
|
|
15
|
+
// grammar's "a repeated name continues the storyline" — `source` only on the first.
|
|
16
|
+
import { isAbsolute, relative, resolve, basename, sep } from "node:path";
|
|
17
|
+
import { normalizeName } from "../model/model.js";
|
|
18
|
+
import { encodeQuoted } from "../parser/lexer.js";
|
|
19
|
+
function nameFromUrl(url) {
|
|
20
|
+
const frag = url.includes("#") ? url.slice(url.indexOf("#") + 1) : "";
|
|
21
|
+
const last = url.split("#")[0].replace(/\/+$/, "").split("/").pop() ?? "";
|
|
22
|
+
const raw = (frag || last).replace(/\.[a-z]+$/i, "").replace(/[-_]+/g, " ").trim();
|
|
23
|
+
if (raw === "")
|
|
24
|
+
return "Storyline";
|
|
25
|
+
return /^[a-z]/.test(raw) ? raw[0].toUpperCase() + raw.slice(1) : raw;
|
|
26
|
+
}
|
|
27
|
+
export function suggestStorylines(model) {
|
|
28
|
+
const n = model.slices.length;
|
|
29
|
+
const free = (i) => model.slices[i].storyline === undefined;
|
|
30
|
+
const parent = Array.from({ length: n }, (_, i) => i);
|
|
31
|
+
const find = (x) => (parent[x] === x ? x : (parent[x] = find(parent[x])));
|
|
32
|
+
const union = (a, b) => {
|
|
33
|
+
parent[find(a)] = find(b);
|
|
34
|
+
};
|
|
35
|
+
// View-instance chains.
|
|
36
|
+
for (const origin of model.elements) {
|
|
37
|
+
if (origin.kind !== "view" || origin.again === true)
|
|
38
|
+
continue;
|
|
39
|
+
const instances = model.elements.filter((e) => e.kind === "view" && e.again === true && e.logicalId === origin.id);
|
|
40
|
+
if (instances.length === 0)
|
|
41
|
+
continue;
|
|
42
|
+
for (const inst of [origin, ...instances]) {
|
|
43
|
+
union(origin.sliceIndex, inst.sliceIndex);
|
|
44
|
+
for (const evName of inst.from ?? []) {
|
|
45
|
+
for (const ev of model.byName.get(normalizeName(evName)) ?? [])
|
|
46
|
+
if (ev.kind === "event")
|
|
47
|
+
union(origin.sliceIndex, ev.sliceIndex);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const taken = new Set((model.storylines ?? []).map((s) => s.name.toLowerCase()));
|
|
52
|
+
const unique = (base) => {
|
|
53
|
+
let name = base;
|
|
54
|
+
for (let k = 2; taken.has(name.toLowerCase()); k++)
|
|
55
|
+
name = `${base} (${k})`;
|
|
56
|
+
taken.add(name.toLowerCase());
|
|
57
|
+
return name;
|
|
58
|
+
};
|
|
59
|
+
const bySource = new Map();
|
|
60
|
+
const sourceOf = (i) => model.slices[i].source;
|
|
61
|
+
const out = [];
|
|
62
|
+
const sourceName = (url) => {
|
|
63
|
+
let g = bySource.get(url);
|
|
64
|
+
if (!g) {
|
|
65
|
+
g = { name: unique(nameFromUrl(url)), source: url, sliceIndexes: [], basis: "source" };
|
|
66
|
+
bySource.set(url, g);
|
|
67
|
+
out.push(g);
|
|
68
|
+
}
|
|
69
|
+
return g.name;
|
|
70
|
+
};
|
|
71
|
+
// Component -> the distinct sources among its free slices.
|
|
72
|
+
const componentSources = new Map();
|
|
73
|
+
for (let i = 0; i < n; i++) {
|
|
74
|
+
const src = sourceOf(i);
|
|
75
|
+
if (!free(i) || src === undefined)
|
|
76
|
+
continue;
|
|
77
|
+
const set = componentSources.get(find(i)) ?? new Set();
|
|
78
|
+
set.add(src);
|
|
79
|
+
componentSources.set(find(i), set);
|
|
80
|
+
}
|
|
81
|
+
const groupOf = new Map(); // slice index -> storyline name
|
|
82
|
+
const chainGroups = new Map();
|
|
83
|
+
const componentSize = new Map();
|
|
84
|
+
for (let i = 0; i < n; i++)
|
|
85
|
+
if (free(i))
|
|
86
|
+
componentSize.set(find(i), (componentSize.get(find(i)) ?? 0) + 1);
|
|
87
|
+
for (let i = 0; i < n; i++) {
|
|
88
|
+
if (!free(i))
|
|
89
|
+
continue;
|
|
90
|
+
const src = sourceOf(i);
|
|
91
|
+
if (src !== undefined) {
|
|
92
|
+
groupOf.set(i, sourceName(src));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const srcs = componentSources.get(find(i));
|
|
96
|
+
if (srcs !== undefined && srcs.size === 1) {
|
|
97
|
+
groupOf.set(i, sourceName([...srcs][0]));
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if ((componentSize.get(find(i)) ?? 0) > 1) {
|
|
101
|
+
let g = chainGroups.get(find(i));
|
|
102
|
+
if (!g) {
|
|
103
|
+
g = { name: unique(`${model.slices[i].name} journey`), sliceIndexes: [], basis: "view-chain" };
|
|
104
|
+
chainGroups.set(find(i), g);
|
|
105
|
+
out.push(g);
|
|
106
|
+
}
|
|
107
|
+
groupOf.set(i, g.name);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const byName = new Map(out.map((g) => [g.name, g]));
|
|
111
|
+
for (const [i, name] of [...groupOf].sort((a, b) => a[0] - b[0]))
|
|
112
|
+
byName.get(name).sliceIndexes.push(i);
|
|
113
|
+
const ungrouped = [];
|
|
114
|
+
for (let i = 0; i < n; i++)
|
|
115
|
+
if (free(i) && !groupOf.has(i))
|
|
116
|
+
ungrouped.push(i);
|
|
117
|
+
return { storylines: out.filter((g) => g.sliceIndexes.length > 0), ungrouped };
|
|
118
|
+
}
|
|
119
|
+
/** Index (0-based) of the line holding the `}` that closes the block opened on `start`. */
|
|
120
|
+
export function blockEnd(lines, start) {
|
|
121
|
+
let depth = 0;
|
|
122
|
+
let opened = false;
|
|
123
|
+
for (let i = start; i < lines.length; i++) {
|
|
124
|
+
let inStr = false;
|
|
125
|
+
for (let c = 0; c < lines[i].length; c++) {
|
|
126
|
+
const ch = lines[i][c];
|
|
127
|
+
if (inStr) {
|
|
128
|
+
if (ch === "\\")
|
|
129
|
+
c++;
|
|
130
|
+
else if (ch === '"')
|
|
131
|
+
inStr = false;
|
|
132
|
+
}
|
|
133
|
+
else if (ch === '"')
|
|
134
|
+
inStr = true;
|
|
135
|
+
else if (ch === "#")
|
|
136
|
+
break;
|
|
137
|
+
else if (ch === "{") {
|
|
138
|
+
depth++;
|
|
139
|
+
opened = true;
|
|
140
|
+
}
|
|
141
|
+
else if (ch === "}")
|
|
142
|
+
depth--;
|
|
143
|
+
}
|
|
144
|
+
if (opened && depth <= 0)
|
|
145
|
+
return i;
|
|
146
|
+
}
|
|
147
|
+
return lines.length - 1;
|
|
148
|
+
}
|
|
149
|
+
/** The path used in the diff headers: relative to the cwd, no leading `./`, never absolute (`git apply`
|
|
150
|
+
* rejects `a/./x.em` and `a//abs/x.em`). A file outside the cwd falls back to its basename. */
|
|
151
|
+
export function diffPath(file) {
|
|
152
|
+
let rel = isAbsolute(file) || file.startsWith(".") ? relative(process.cwd(), resolve(file)) : file;
|
|
153
|
+
if (rel.startsWith("..") || isAbsolute(rel))
|
|
154
|
+
rel = basename(file);
|
|
155
|
+
return rel.split(sep).join("/").replace(/^(\.\/)+/, "");
|
|
156
|
+
}
|
|
157
|
+
/** Unified diff of `ops` (every original line appears as " " or "-"), 3 lines of context. */
|
|
158
|
+
function unifiedDiff(file, ops) {
|
|
159
|
+
const CONTEXT = 3;
|
|
160
|
+
const changed = ops.map((o) => o.t !== " ");
|
|
161
|
+
const hunks = [];
|
|
162
|
+
for (let i = 0; i < ops.length; i++) {
|
|
163
|
+
if (!changed[i])
|
|
164
|
+
continue;
|
|
165
|
+
const lo = Math.max(0, i - CONTEXT);
|
|
166
|
+
const hi = Math.min(ops.length - 1, i + CONTEXT);
|
|
167
|
+
const last = hunks[hunks.length - 1];
|
|
168
|
+
if (last && lo <= last[1] + 1)
|
|
169
|
+
last[1] = hi;
|
|
170
|
+
else
|
|
171
|
+
hunks.push([lo, hi]);
|
|
172
|
+
}
|
|
173
|
+
const out = [`--- a/${file}`, `+++ b/${file}`];
|
|
174
|
+
for (const [lo, hi] of hunks) {
|
|
175
|
+
let oldStart = 1;
|
|
176
|
+
let newStart = 1;
|
|
177
|
+
for (let i = 0; i < lo; i++) {
|
|
178
|
+
if (ops[i].t !== "+")
|
|
179
|
+
oldStart++;
|
|
180
|
+
if (ops[i].t !== "-")
|
|
181
|
+
newStart++;
|
|
182
|
+
}
|
|
183
|
+
const slice = ops.slice(lo, hi + 1);
|
|
184
|
+
const oldLen = slice.filter((o) => o.t !== "+").length;
|
|
185
|
+
const newLen = slice.filter((o) => o.t !== "-").length;
|
|
186
|
+
out.push(`@@ -${oldLen === 0 ? oldStart - 1 : oldStart},${oldLen} +${newLen === 0 ? newStart - 1 : newStart},${newLen} @@`);
|
|
187
|
+
for (const o of slice)
|
|
188
|
+
out.push(o.t + o.text);
|
|
189
|
+
}
|
|
190
|
+
return out.join("\n") + "\n";
|
|
191
|
+
}
|
|
192
|
+
/** `model` compiled from `text` (the file named `file` in the diff headers). */
|
|
193
|
+
export function buildStorylineSuggestion(model, text, file) {
|
|
194
|
+
const { storylines, ungrouped } = suggestStorylines(model);
|
|
195
|
+
if (storylines.length === 0)
|
|
196
|
+
return { storylines, ungrouped, patch: "" };
|
|
197
|
+
const crlf = text.includes("\r\n");
|
|
198
|
+
const lines = text.split("\n").map((l) => l.replace(/\r$/, ""));
|
|
199
|
+
const trailingNewline = lines[lines.length - 1] === "";
|
|
200
|
+
if (trailingNewline)
|
|
201
|
+
lines.pop();
|
|
202
|
+
// A run may only span slices with nothing but blank lines and `#` comments between them: any other
|
|
203
|
+
// top-level line (a `persona`, a `context`...) is not legal inside a storyline block, so it splits
|
|
204
|
+
// the run into two same-name blocks.
|
|
205
|
+
const gapIsClean = (a, b) => {
|
|
206
|
+
const from = blockEnd(lines, model.slices[a].line - 1) + 1;
|
|
207
|
+
for (let i = from; i < model.slices[b].line - 1; i++) {
|
|
208
|
+
const t = lines[i].trim();
|
|
209
|
+
if (t !== "" && !t.startsWith("#"))
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
return true;
|
|
213
|
+
};
|
|
214
|
+
// Contiguous runs (by slice index) per storyline.
|
|
215
|
+
const runs = [];
|
|
216
|
+
for (const story of storylines) {
|
|
217
|
+
let k = 0;
|
|
218
|
+
while (k < story.sliceIndexes.length) {
|
|
219
|
+
let j = k;
|
|
220
|
+
while (j + 1 < story.sliceIndexes.length &&
|
|
221
|
+
story.sliceIndexes[j + 1] === story.sliceIndexes[j] + 1 &&
|
|
222
|
+
gapIsClean(story.sliceIndexes[j], story.sliceIndexes[j + 1]))
|
|
223
|
+
j++;
|
|
224
|
+
runs.push({ story, first: story.sliceIndexes[k], last: story.sliceIndexes[j], continues: k > 0 });
|
|
225
|
+
k = j + 1;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
runs.sort((a, b) => a.first - b.first);
|
|
229
|
+
const quote = (s) => `"${encodeQuoted(s)}"`;
|
|
230
|
+
const ops = [];
|
|
231
|
+
let cursor = 0;
|
|
232
|
+
for (const run of runs) {
|
|
233
|
+
const start = model.slices[run.first].line - 1;
|
|
234
|
+
const end = blockEnd(lines, model.slices[run.last].line - 1);
|
|
235
|
+
for (; cursor < start; cursor++)
|
|
236
|
+
ops.push({ t: " ", text: lines[cursor] });
|
|
237
|
+
ops.push({ t: "+", text: `storyline ${quote(run.story.name)}${!run.continues && run.story.source !== undefined ? ` source ${quote(run.story.source)}` : ""} {` });
|
|
238
|
+
for (let i = start; i <= end; i++)
|
|
239
|
+
ops.push({ t: "-", text: lines[i] });
|
|
240
|
+
for (let i = start; i <= end; i++)
|
|
241
|
+
ops.push({ t: "+", text: lines[i].trim() === "" ? lines[i] : ` ${lines[i]}` });
|
|
242
|
+
ops.push({ t: "+", text: "}" });
|
|
243
|
+
cursor = end + 1;
|
|
244
|
+
}
|
|
245
|
+
for (; cursor < lines.length; cursor++)
|
|
246
|
+
ops.push({ t: " ", text: lines[cursor] });
|
|
247
|
+
let patch = unifiedDiff(diffPath(file), ops);
|
|
248
|
+
if (crlf)
|
|
249
|
+
patch = patch.replace(/\n/g, "\r\n");
|
|
250
|
+
return { storylines, ungrouped, patch };
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=storylineSuggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storylineSuggest.js","sourceRoot":"","sources":["../../src/cli/storylineSuggest.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/upgrade.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GRANDFATHERED_RATIFIER } from "../roster/roster.js";
|
|
1
2
|
import { NormalizedModel } from "../model/model.js";
|
|
2
3
|
import { RefsResult } from "../model/refs.js";
|
|
3
4
|
import { GitRunner } from "./diff-inputs.js";
|
|
@@ -13,6 +14,10 @@ export interface UpgradeContext {
|
|
|
13
14
|
packagedAgentsRoot?: string;
|
|
14
15
|
model: NormalizedModel;
|
|
15
16
|
refs: RefsResult;
|
|
17
|
+
/** `--fold-continuations`: apply the opt-in `fold-continuations` step (default form: stack). */
|
|
18
|
+
foldContinuations?: boolean;
|
|
19
|
+
/** `--to-sugar` (implies `--fold-continuations`): fold into the host command slice instead. */
|
|
20
|
+
toSugar?: boolean;
|
|
16
21
|
}
|
|
17
22
|
export interface StepDetection {
|
|
18
23
|
applicable: boolean;
|
|
@@ -25,11 +30,12 @@ export interface StepDetection {
|
|
|
25
30
|
export type StepApplyOutcome = {
|
|
26
31
|
ok: true;
|
|
27
32
|
changedFiles: string[];
|
|
33
|
+
notes?: string[];
|
|
28
34
|
} | {
|
|
29
35
|
ok: false;
|
|
30
36
|
message: string;
|
|
31
37
|
};
|
|
32
|
-
export type UpgradeStepId = "skill-bundle" | "skill-plugin" | "reaction-shape" | "state-file" | "ci-block" | "constitution" | "ratified-signoff" | "ratified-hash-scope" | "system-manifest";
|
|
38
|
+
export type UpgradeStepId = "skill-bundle" | "skill-plugin" | "reaction-shape" | "state-file" | "ci-block" | "constitution" | "ratified-signoff" | "ratified-hash-scope" | "collapse-alternative-events" | "fold-continuations" | "view-doc-sources-stale" | "slice-index-stale" | "parking-lot-fragments" | "system-manifest";
|
|
33
39
|
export interface UpgradeStepDef {
|
|
34
40
|
id: UpgradeStepId;
|
|
35
41
|
/** The em release that introduced the feature this step brings a repo up to date with —
|
|
@@ -38,19 +44,21 @@ export interface UpgradeStepDef {
|
|
|
38
44
|
sinceVersion: string;
|
|
39
45
|
detect(ctx: UpgradeContext): StepDetection;
|
|
40
46
|
apply(ctx: UpgradeContext): StepApplyOutcome;
|
|
47
|
+
/** Opt-in steps are detected and listed by every run but applied only when this returns true. */
|
|
48
|
+
optedIn?(ctx: UpgradeContext): boolean;
|
|
41
49
|
}
|
|
42
50
|
/** MIL-257: the one human-readable sentence for "the state file exists but `parseState` rejected
|
|
43
51
|
* it", naming the file so the `--check` final line / `--apply` refusal is self-explanatory.
|
|
44
52
|
* `parseState`'s "missing bullet line(s): ..." reads as `is missing ...`; its format-mismatch
|
|
45
53
|
* messages (`"- **X:**" doesn't match ...`) follow a colon instead. */
|
|
46
54
|
export declare function describeStateFileFailure(path: string, parseMessage: string): string;
|
|
47
|
-
export
|
|
55
|
+
export { GRANDFATHERED_RATIFIER };
|
|
48
56
|
/** Pure text transform: inserts the grandfather sign-off after the `status:` line, using only
|
|
49
57
|
* the key lines that are missing (a stray `ratifiedOn:` is kept as-is), in the file's own EOL.
|
|
50
58
|
* `null` when the doc isn't a candidate (no frontmatter/status, or `ratifiedBy` already set). */
|
|
51
59
|
export declare function applyGrandfatherSignoff(raw: string, ratifiedOn: string): string | null;
|
|
52
60
|
export declare const UPGRADE_STEPS: readonly UpgradeStepDef[];
|
|
53
|
-
export type HumanItemId = "no-model-version" | "continuation-has-own-doc" | "ready-to-implement-no-ratifiedby" | "coverage-scope-default" | "unratified-constitution" | "predates-1.6" | "public-field-types-unresolved" | "plugin-install-locally";
|
|
61
|
+
export type HumanItemId = "no-model-version" | "continuation-has-own-doc" | "ready-to-implement-no-ratifiedby" | "coverage-scope-default" | "unratified-constitution" | "predates-1.6" | "public-field-types-unresolved" | "plugin-install-locally" | "slice-doc-stale-signed" | "lineage-backlink-missing" | "fold-continuations-opt-in" | "shared-event-now-legal" | "roster-not-initialised";
|
|
54
62
|
export interface HumanItem {
|
|
55
63
|
id: HumanItemId;
|
|
56
64
|
reason: string;
|
|
@@ -92,6 +100,8 @@ export interface StepReport {
|
|
|
92
100
|
applicable: boolean;
|
|
93
101
|
human: boolean;
|
|
94
102
|
reason: string;
|
|
103
|
+
/** Present (true) for an opt-in step that is detected but not opted into by this run's flags: listed, never applied. */
|
|
104
|
+
optIn?: boolean;
|
|
95
105
|
}
|
|
96
106
|
export interface UpgradeReport {
|
|
97
107
|
from: FromVersion;
|
|
@@ -108,6 +118,8 @@ export interface ApplyStepResult {
|
|
|
108
118
|
applied: boolean;
|
|
109
119
|
changedFiles: string[];
|
|
110
120
|
commit: string | null;
|
|
121
|
+
/** What a human must still do for this step (e.g. content of a retired doc to carry over). */
|
|
122
|
+
notes?: string[];
|
|
111
123
|
}
|
|
112
124
|
export type ApplyUpgradeResult = {
|
|
113
125
|
ok: true;
|