@milehimikey/em 1.21.0 → 1.22.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 (73) hide show
  1. package/.claude/agents/em-implementer.md +10 -0
  2. package/.claude/agents/em-validator.md +1 -0
  3. package/.claude/skills/event-modeling/SKILL.md +1 -1
  4. package/.claude/skills/event-modeling-conform/SKILL.md +7 -4
  5. package/.claude/skills/event-modeling-conform/reference/conform.md +82 -4
  6. package/.claude/skills/event-modeling-design/SKILL.md +1 -1
  7. package/.claude/skills/event-modeling-discover/SKILL.md +1 -1
  8. package/.claude/skills/event-modeling-engagement/SKILL.md +1 -1
  9. package/.claude/skills/event-modeling-engagement/reference/engagement.md +1 -0
  10. package/.claude/skills/event-modeling-implement/SKILL.md +5 -3
  11. package/.claude/skills/event-modeling-implement/reference/implement.md +14 -0
  12. package/.claude/skills/event-modeling-review/SKILL.md +1 -1
  13. package/.claude/skills/event-modeling-shared/reference/em-dsl.md +19 -6
  14. package/.claude/skills/event-modeling-shared/reference/operating-principles.md +26 -15
  15. package/.claude-plugin/marketplace.json +2 -2
  16. package/dist/cli/api.d.ts +84 -0
  17. package/dist/cli/api.js +146 -15
  18. package/dist/cli/api.js.map +1 -1
  19. package/dist/cli/bindings.d.ts +152 -0
  20. package/dist/cli/bindings.js +462 -0
  21. package/dist/cli/bindings.js.map +1 -0
  22. package/dist/cli/conformScope.d.ts +32 -0
  23. package/dist/cli/conformScope.js +68 -5
  24. package/dist/cli/conformScope.js.map +1 -1
  25. package/dist/cli/engagement.d.ts +24 -1
  26. package/dist/cli/engagement.js +50 -6
  27. package/dist/cli/engagement.js.map +1 -1
  28. package/dist/cli/engagementBrief.d.ts +127 -0
  29. package/dist/cli/engagementBrief.js +313 -0
  30. package/dist/cli/engagementBrief.js.map +1 -0
  31. package/dist/cli/engagementFile.d.ts +14 -0
  32. package/dist/cli/engagementFile.js +54 -0
  33. package/dist/cli/engagementFile.js.map +1 -1
  34. package/dist/cli/status.d.ts +5 -0
  35. package/dist/cli/status.js +1 -0
  36. package/dist/cli/status.js.map +1 -1
  37. package/dist/cli/upgrade.js +9 -10
  38. package/dist/cli/upgrade.js.map +1 -1
  39. package/dist/cli.js +143 -11
  40. package/dist/cli.js.map +1 -1
  41. package/dist/emit/api.d.ts +8 -1
  42. package/dist/emit/api.js +68 -24
  43. package/dist/emit/api.js.map +1 -1
  44. package/dist/emit/apiSurfaceJson.d.ts +3 -0
  45. package/dist/emit/apiSurfaceJson.js +26 -0
  46. package/dist/emit/apiSurfaceJson.js.map +1 -0
  47. package/dist/emit/engagementJson.d.ts +8 -3
  48. package/dist/emit/engagementJson.js +31 -4
  49. package/dist/emit/engagementJson.js.map +1 -1
  50. package/dist/mcp/server.js +91 -3
  51. package/dist/mcp/server.js.map +1 -1
  52. package/dist/model/model.d.ts +17 -5
  53. package/dist/model/model.js +18 -17
  54. package/dist/model/model.js.map +1 -1
  55. package/dist/templates.d.ts +4 -0
  56. package/dist/templates.js +29 -0
  57. package/dist/templates.js.map +1 -1
  58. package/package.json +1 -1
  59. package/plugin/.claude-plugin/plugin.json +2 -2
  60. package/plugin/agents/em-implementer.md +10 -0
  61. package/plugin/agents/em-validator.md +1 -0
  62. package/plugin/shared/reference/em-dsl.md +19 -6
  63. package/plugin/shared/reference/operating-principles.md +26 -15
  64. package/plugin/skills/conform/SKILL.md +7 -4
  65. package/plugin/skills/conform/reference/conform.md +82 -4
  66. package/plugin/skills/design/SKILL.md +1 -1
  67. package/plugin/skills/discover/SKILL.md +1 -1
  68. package/plugin/skills/engagement/SKILL.md +1 -1
  69. package/plugin/skills/engagement/reference/engagement.md +1 -0
  70. package/plugin/skills/event-modeling/SKILL.md +1 -1
  71. package/plugin/skills/implement/SKILL.md +5 -3
  72. package/plugin/skills/implement/reference/implement.md +14 -0
  73. package/plugin/skills/review/SKILL.md +1 -1
@@ -0,0 +1,127 @@
1
+ import { NormalizedModel } from "../model/model.js";
2
+ import { RefsResult } from "../model/refs.js";
3
+ /** What `engagement brief` needs beyond `{file, model, refs}` — no readiness/diagnostics input
4
+ * (unlike `plan`): the brief describes the slice, it never judges whether it's ready to build. */
5
+ export interface EngagementBriefModelInput {
6
+ file: string;
7
+ model: NormalizedModel;
8
+ refs: RefsResult;
9
+ baseDir: string;
10
+ }
11
+ export interface BriefElementSummary {
12
+ /** Bare `<kind>.<slug>` (docs/bindings.md's ref shape) — no `<sliceKey>/` prefix: the brief
13
+ * already names the one slice every one of these elements belongs to. */
14
+ ref: string;
15
+ kind: string;
16
+ name: string;
17
+ public: boolean;
18
+ fields: Array<{
19
+ name: string;
20
+ type: string | null;
21
+ optional: boolean;
22
+ }>;
23
+ }
24
+ /** An element on the OTHER side of a cross-unit edge — full qualified export ref (model-wide
25
+ * unambiguous), plus which engagement unit owns it. */
26
+ export interface BriefNeighborItem {
27
+ ref: string;
28
+ kind: string;
29
+ name: string;
30
+ unit: string;
31
+ }
32
+ export interface BriefRepeatedView {
33
+ /** The view's display name, as declared by this slice. */
34
+ view: string;
35
+ /** The other (textual) slice export keys where `view <this> again` reads it — every one of
36
+ * them folds (MIL-208) into this same unit, so none is a separate PR. */
37
+ instances: string[];
38
+ }
39
+ export interface BriefContextDoc {
40
+ /** As stored in the engagement file — repo-relative, exactly as given. */
41
+ path: string;
42
+ inline: boolean;
43
+ /** The file's full text when `inline` and it was found; null otherwise. */
44
+ content: string | null;
45
+ /** Null when `inline` is false (never checked in pointer mode — the same "stored as given,
46
+ * never checked at write time" posture the engagement file itself holds for `context:`). */
47
+ missing: boolean | null;
48
+ }
49
+ export interface EngagementBriefSlice {
50
+ key: string;
51
+ sliceName: string;
52
+ pattern: string;
53
+ docStatus: string | null;
54
+ tracking: string | null;
55
+ prTitle: string;
56
+ /** The MIL-280 convention: every slice branch is `impl/<key>`, cut from and targeting `main`. */
57
+ branch: string;
58
+ base: string;
59
+ /** The Ledger's OWN recorded state/branch/base/pr (`em engagement set`) — branch/base/pr are
60
+ * null until a human or the lead has actually recorded them; `branch`/`base` above are the
61
+ * convention to follow when they're still null. */
62
+ ledgerState: string;
63
+ ledgerBranch: string | null;
64
+ ledgerBase: string | null;
65
+ ledgerPr: string | null;
66
+ doc: {
67
+ found: boolean;
68
+ path: string | null;
69
+ content: string | null;
70
+ };
71
+ /** Non-null only when `doc.found` is false: this slice's own elements/fields from the model,
72
+ * since there is no doc to read as the spec. */
73
+ fallbackElements: BriefElementSummary[] | null;
74
+ modelContext: {
75
+ consumes: BriefNeighborItem[];
76
+ produces: BriefNeighborItem[];
77
+ neighborUnits: string[];
78
+ repeatedViews: BriefRepeatedView[];
79
+ };
80
+ contract: {
81
+ publicTouching: boolean;
82
+ contractPath: string | null;
83
+ publicElements: BriefElementSummary[];
84
+ };
85
+ definitionOfDone: {
86
+ invariantIds: string[];
87
+ scenarioTitles: string[];
88
+ bindingsPath: string;
89
+ bindingsExample: string;
90
+ conformCheckCommand: string;
91
+ isolationNote: string;
92
+ prTitle: string;
93
+ };
94
+ context: BriefContextDoc[];
95
+ }
96
+ export interface EngagementBrief {
97
+ file: string;
98
+ engagement: string;
99
+ slug: string;
100
+ inlineContext: boolean;
101
+ slices: EngagementBriefSlice[];
102
+ }
103
+ export type BriefResult = {
104
+ ok: true;
105
+ brief: EngagementBrief;
106
+ } | {
107
+ ok: false;
108
+ message: string;
109
+ };
110
+ /** docs/bindings.md's minimal shape, filled in for this slice's own elements and invariant ids —
111
+ * `TODO` placeholders where only the implementer who writes the code knows the file/identifier.
112
+ * A template to complete, not a claim. */
113
+ export declare function buildBindingsExample(key: string, elements: BriefElementSummary[], invariantIds: string[]): string;
114
+ /** GH #454: the shared builder the CLI action and the MCP `engagement_brief` tool both call — one
115
+ * input, one document, byte-identical. Refusal posture matches `plan`: an unreadable/invalid
116
+ * engagement file or a model the engagement no longer matches (`missingKeys`) refuses with no
117
+ * partial brief. An unresolved `--slice` is passed through AS GIVEN (same GH #237 convention
118
+ * `engagement set`'s CLI action uses) so the "not in engagement" refusal below is what speaks,
119
+ * not a generic resolver error. */
120
+ export declare function engagementBriefFor(input: EngagementBriefModelInput, slug: string, opts?: {
121
+ sliceKey?: string | null;
122
+ inlineContext?: boolean;
123
+ }): BriefResult;
124
+ /** Text form: a self-contained brief per slice, each pasteable into its own ticket as-is, in
125
+ * engagement order. More than one is separated by a plain rule line (not nested under one
126
+ * shared heading) so each chunk still reads as its own document. */
127
+ export declare function formatEngagementBriefText(brief: EngagementBrief): string;
@@ -0,0 +1,313 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // `em engagement brief` (GH #454): a deterministic, self-contained per-slice work brief for
3
+ // implementers em does not control — a ticket-driven cloud agent fed by Jira/Linear tickets, not
4
+ // an em-aware session. `em implement` hands such a session the slice doc plus a conversation's
5
+ // worth of context; this hands a ticket EVERYTHING it needs in one paste, built from machinery
6
+ // that already exists elsewhere so nothing here is re-derived or re-judged:
7
+ //
8
+ // - the spec: the bound slice doc, read the same way `readSliceDoc` always has, embedded
9
+ // verbatim — it IS the spec. No doc: the model's own elements/fields for the slice, loudly
10
+ // flagged as a gap rather than silently working around it.
11
+ // - model context: cross-unit edges (`model/edges.ts`, `loops-to` excluded — the same exclusion
12
+ // `engagement.ts`'s unit graph already uses) folded to engagement units exactly as
13
+ // `unitPredecessors`/`buildEngagementPlan` do, via the exported `unitOfElement`.
14
+ // - contract surface: `catalog/apiFirst.ts`'s `slicePublicTouching`/`contractPathFor` — the same
15
+ // gate `--slice-ready` and `em slice ratify` already enforce.
16
+ // - definition of done: the slice's own `INV-*` ids and authored scenario titles (the doc-side
17
+ // extraction `em engagement plan`'s pre-flight already uses), a filled-in skeleton of the
18
+ // bindings manifest (docs/bindings.md) scoped to this slice's own elements/invariants, the
19
+ // exact `em conform bindings check` verify line, and the resolved PR title (`resolvePrTitle`,
20
+ // the same helper `plan` calls).
21
+ // - context documents: the engagement's `context:` list (GH #455) — pointers by default,
22
+ // `--inline-context` embeds each file's full text (a missing file is a loud marker, never a
23
+ // crash — the same spirit as `plan`'s `context-missing` pre-flight).
24
+ //
25
+ // One brief per engagement slice (model/Ledger order) unless `--slice` narrows it to one. `--json`
26
+ // is the MCP `engagement_brief` tool's document, byte-for-byte (see emit/engagementJson.ts).
27
+ import { existsSync, readFileSync } from "node:fs";
28
+ import { dirname, join } from "node:path";
29
+ import { collectModelInvariants } from "../model/model.js";
30
+ import { semanticEdges } from "../model/edges.js";
31
+ import { computeModelKey } from "../model/qualifiedRef.js";
32
+ import { slicePublicTouching } from "../catalog/apiFirst.js";
33
+ import { contractPathFor } from "./api.js";
34
+ import { readSliceDoc } from "../catalog/readSliceDoc.js";
35
+ import { docFolders } from "../catalog/docLocate.js";
36
+ import { authoredScenarios } from "../catalog/sliceSections.js";
37
+ import { extractInvariantIds } from "../catalog/invTokens.js";
38
+ import { loadEngagement } from "./engagementFile.js";
39
+ import { buildUnitIndex, effectiveTracking, missingKeys, missingMessage, resolvePrTitle, unitOfElement, SLICE_BASE } from "./engagement.js";
40
+ const ISOLATION_NOTE = "Touch nothing outside this slice's own scope: no edits to a sibling slice's code or tests, " +
41
+ "and no shared files beyond what the foundation PR already landed (implement.md §8). If the " +
42
+ "work needs something outside this boundary, stop and say so instead of reaching across it.";
43
+ function bareRef(fullRef, kind, name, sliceKey) {
44
+ if (fullRef === undefined)
45
+ return `${kind}.${name}`;
46
+ const prefix = `${sliceKey}/`;
47
+ return fullRef.startsWith(prefix) ? fullRef.slice(prefix.length) : fullRef;
48
+ }
49
+ function summarizeElement(el, refs, sliceKey) {
50
+ return {
51
+ ref: bareRef(refs.refById.get(el.id), el.kind, el.name, sliceKey),
52
+ kind: el.kind,
53
+ name: el.name,
54
+ public: el.public === true,
55
+ fields: (el.fields ?? []).map((f) => ({ name: f.name, type: f.type ?? null, optional: f.optional === true })),
56
+ };
57
+ }
58
+ /** docs/bindings.md's minimal shape, filled in for this slice's own elements and invariant ids —
59
+ * `TODO` placeholders where only the implementer who writes the code knows the file/identifier.
60
+ * A template to complete, not a claim. */
61
+ export function buildBindingsExample(key, elements, invariantIds) {
62
+ const lines = [`bindingsSchemaVersion: "1.0"`, `slice: ${key}`, "elements:"];
63
+ if (elements.length === 0) {
64
+ lines.push(" []");
65
+ }
66
+ else {
67
+ for (const el of elements)
68
+ lines.push(` - ref: ${el.ref}`, " file: TODO", " identifier: TODO");
69
+ }
70
+ lines.push("invariants:");
71
+ if (invariantIds.length === 0) {
72
+ lines.push(" []");
73
+ }
74
+ else {
75
+ for (const id of invariantIds)
76
+ lines.push(` - id: ${id}`, " enforcedIn: {file: TODO, identifier: TODO}", " testedIn: {file: TODO, identifier: TODO}");
77
+ }
78
+ return lines.join("\n");
79
+ }
80
+ /** Where `slices/<key>.md` sits — root first, then any storyline folder (`catalog/docLocate.ts`'s
81
+ * own search order) — without resolving against the process's cwd, so the path is a pure
82
+ * function of `baseDir` (deterministic regardless of where the command runs from). */
83
+ function sliceDocDisplayPath(baseDir, key) {
84
+ const rel = `slices/${key}.md`;
85
+ for (const folder of docFolders(baseDir)) {
86
+ const candidate = join(baseDir, folder, rel);
87
+ if (existsSync(candidate))
88
+ return candidate;
89
+ }
90
+ return null;
91
+ }
92
+ /** The slice's own model context: cross-UNIT edges only (same-unit pattern edges, and anything
93
+ * folded into this unit via `unitOfElement`, are internal and not "context"). `loops-to` is
94
+ * excluded, matching every other engagement graph read (it re-feeds an earlier read model, never
95
+ * a build or context dependency). */
96
+ function buildModelContext(model, refs, idx, key) {
97
+ const consumes = new Map();
98
+ const produces = new Map();
99
+ const neighborUnits = new Set();
100
+ for (const e of semanticEdges(model)) {
101
+ if (e.source === "loops-to")
102
+ continue;
103
+ const fromUnit = unitOfElement(model, idx, e.from);
104
+ const toUnit = unitOfElement(model, idx, e.to);
105
+ if (!fromUnit || !toUnit || fromUnit === toUnit)
106
+ continue;
107
+ if (toUnit === key) {
108
+ const el = model.byId.get(e.from);
109
+ if (el) {
110
+ const ref = refs.refById.get(el.id) ?? `${el.kind}.${el.name}`;
111
+ consumes.set(ref, { ref, kind: el.kind, name: el.name, unit: fromUnit });
112
+ neighborUnits.add(fromUnit);
113
+ }
114
+ }
115
+ if (fromUnit === key) {
116
+ const el = model.byId.get(e.to);
117
+ if (el) {
118
+ const ref = refs.refById.get(el.id) ?? `${el.kind}.${el.name}`;
119
+ produces.set(ref, { ref, kind: el.kind, name: el.name, unit: toUnit });
120
+ neighborUnits.add(toUnit);
121
+ }
122
+ }
123
+ }
124
+ const order = (a, b) => (idx.sliceIndexOf.get(a) ?? 0) - (idx.sliceIndexOf.get(b) ?? 0);
125
+ const byRef = (a, b) => a.ref.localeCompare(b.ref);
126
+ const sliceIndex = idx.sliceIndexOf.get(key);
127
+ const repeatedViews = [];
128
+ if (sliceIndex !== undefined) {
129
+ for (const el of model.slices[sliceIndex].elements) {
130
+ if (el.kind !== "view" || el.again)
131
+ continue;
132
+ const instances = [
133
+ ...new Set(model.elements.filter((x) => x.again === true && x.logicalId === el.id).map((x) => refs.sliceKeys[x.sliceIndex]).filter((s) => s !== undefined)),
134
+ ];
135
+ if (instances.length > 0)
136
+ repeatedViews.push({ view: el.name, instances });
137
+ }
138
+ }
139
+ return {
140
+ consumes: [...consumes.values()].sort(byRef),
141
+ produces: [...produces.values()].sort(byRef),
142
+ neighborUnits: [...neighborUnits].sort(order),
143
+ repeatedViews,
144
+ };
145
+ }
146
+ function buildContextDoc(path, inline) {
147
+ if (!inline)
148
+ return { path, inline: false, content: null, missing: null };
149
+ if (!existsSync(path))
150
+ return { path, inline: true, content: null, missing: true };
151
+ try {
152
+ return { path, inline: true, content: readFileSync(path, "utf8"), missing: false };
153
+ }
154
+ catch {
155
+ return { path, inline: true, content: null, missing: true };
156
+ }
157
+ }
158
+ function buildSliceBrief(input, eng, idx, entry, inlineContext) {
159
+ const { model, refs, baseDir } = input;
160
+ const key = entry.key;
161
+ const sliceIndex = idx.sliceIndexOf.get(key);
162
+ const slice = model.slices[sliceIndex];
163
+ const sliceName = slice.name ?? key;
164
+ const tracking = effectiveTracking(idx.docTracking.get(key) ?? null, eng.tracking);
165
+ const prTitle = resolvePrTitle(eng.prTitle, tracking, sliceName, key);
166
+ const docPath = sliceDocDisplayPath(baseDir, key);
167
+ const doc = readSliceDoc(baseDir, key);
168
+ const ownElements = slice.elements.map((el) => summarizeElement(el, refs, key));
169
+ const invariantIds = doc ? extractInvariantIds(doc.body) : collectModelInvariants(model).filter((inv) => inv.element.sliceIndex === sliceIndex).map((inv) => inv.id);
170
+ const scenarioTitles = doc ? authoredScenarios(doc.body).map((s) => s.title) : [];
171
+ const publicTouching = slicePublicTouching(slice);
172
+ const contractPath = publicTouching ? contractPathFor(input.file, computeModelKey(model, input.file)) : null;
173
+ const publicElements = ownElements.filter((e) => e.public);
174
+ const bindingsPath = join(dirname(input.file), "conformance", "bindings", `${key}.yaml`);
175
+ const bindingsExample = buildBindingsExample(key, ownElements, invariantIds);
176
+ const conformCheckCommand = `em conform bindings check ${input.file} --repo <path-to-target-repo> --slice ${key} --exit-code`;
177
+ return {
178
+ key,
179
+ sliceName,
180
+ pattern: idx.pattern.get(key) ?? "unknown",
181
+ docStatus: idx.docStatus.get(key) ?? null,
182
+ tracking,
183
+ prTitle,
184
+ branch: `impl/${key}`,
185
+ base: SLICE_BASE,
186
+ ledgerState: entry.state,
187
+ ledgerBranch: entry.branch,
188
+ ledgerBase: entry.base,
189
+ ledgerPr: entry.pr,
190
+ doc: { found: doc !== null, path: docPath, content: doc ? doc.body.trim() : null },
191
+ fallbackElements: doc ? null : ownElements,
192
+ modelContext: buildModelContext(model, refs, idx, key),
193
+ contract: { publicTouching, contractPath, publicElements },
194
+ definitionOfDone: { invariantIds, scenarioTitles, bindingsPath, bindingsExample, conformCheckCommand, isolationNote: ISOLATION_NOTE, prTitle },
195
+ context: eng.context.map((path) => buildContextDoc(path, inlineContext)),
196
+ };
197
+ }
198
+ /** GH #454: the shared builder the CLI action and the MCP `engagement_brief` tool both call — one
199
+ * input, one document, byte-identical. Refusal posture matches `plan`: an unreadable/invalid
200
+ * engagement file or a model the engagement no longer matches (`missingKeys`) refuses with no
201
+ * partial brief. An unresolved `--slice` is passed through AS GIVEN (same GH #237 convention
202
+ * `engagement set`'s CLI action uses) so the "not in engagement" refusal below is what speaks,
203
+ * not a generic resolver error. */
204
+ export function engagementBriefFor(input, slug, opts = {}) {
205
+ const loaded = loadEngagement(input.file, slug);
206
+ if (!loaded.ok)
207
+ return loaded;
208
+ const idx = buildUnitIndex(input.model, input.refs, input.baseDir);
209
+ const missing = missingKeys(loaded.file, idx);
210
+ if (missing.length > 0)
211
+ return { ok: false, message: missingMessage(slug, missing) };
212
+ let entries = loaded.file.slices;
213
+ if (opts.sliceKey !== undefined && opts.sliceKey !== null) {
214
+ const entry = entries.find((e) => e.key === opts.sliceKey);
215
+ if (!entry)
216
+ return { ok: false, message: `slice "${opts.sliceKey}" is not in engagement "${slug}"` };
217
+ entries = [entry];
218
+ }
219
+ const inlineContext = opts.inlineContext === true;
220
+ const slices = entries.map((entry) => buildSliceBrief(input, loaded.file, idx, entry, inlineContext));
221
+ return { ok: true, brief: { file: input.file, engagement: loaded.path, slug: loaded.file.slug, inlineContext, slices } };
222
+ }
223
+ const RULE = "=".repeat(72);
224
+ function formatOneBrief(brief, s) {
225
+ const lines = [];
226
+ lines.push(`# Work brief: ${brief.slug} / ${s.key} — "${s.sliceName}"`, "");
227
+ lines.push(`- Tracking: ${s.tracking ?? "none"}`);
228
+ lines.push(`- PR title to use: "${s.prTitle}"`);
229
+ lines.push(`- Branch: \`${s.branch}\` on \`${s.base}\` (MIL-280: every slice PR targets main, never another slice's branch)`);
230
+ const ledgerBits = [s.ledgerBranch ? `branch ${s.ledgerBranch}` : null, s.ledgerBase ? `base ${s.ledgerBase}` : null, s.ledgerPr ? `pr ${s.ledgerPr}` : null].filter((x) => x !== null);
231
+ lines.push(`- Ledger: ${s.ledgerState}${ledgerBits.length > 0 ? ` (${ledgerBits.join(", ")})` : ""}`);
232
+ lines.push(`- Pattern: ${s.pattern} · doc status: ${s.docStatus ?? "(no doc)"}`, "");
233
+ lines.push("## The spec", "");
234
+ if (s.doc.found) {
235
+ lines.push(`Verbatim from \`${s.doc.path}\` — this IS the spec.`, "", "<!-- BEGIN SPEC -->", s.doc.content ?? "", "<!-- END SPEC -->");
236
+ }
237
+ else {
238
+ lines.push(`**NO BOUND DOC FOUND for slice "${s.key}" — there is nothing to read as a spec.** Expected \`slices/${s.key}.md\`. ` +
239
+ "The model's own elements for this slice are listed below; this brief is INCOMPLETE until a slice doc is authored and ratified.", "", "| Kind | Name | Public | Fields |", "|---|---|---|---|");
240
+ for (const el of s.fallbackElements ?? []) {
241
+ const fields = el.fields.map((f) => `${f.name}${f.optional ? "?" : ""}${f.type ? `: ${f.type}` : ""}`).join(", ") || "—";
242
+ lines.push(`| ${el.kind} | ${el.name} | ${el.public ? "yes" : "no"} | ${fields} |`);
243
+ }
244
+ }
245
+ lines.push("");
246
+ lines.push("## Model context", "");
247
+ lines.push(s.modelContext.consumes.length > 0 ? "Consumes:" : "Consumes: nothing from outside this slice.");
248
+ for (const c of s.modelContext.consumes)
249
+ lines.push(`- ${c.kind} \`${c.name}\` (${c.ref}) — produced by unit \`${c.unit}\``);
250
+ lines.push(s.modelContext.produces.length > 0 ? "Produces:" : "Produces: nothing read outside this slice.");
251
+ for (const p of s.modelContext.produces)
252
+ lines.push(`- ${p.kind} \`${p.name}\` (${p.ref}) — read by unit \`${p.unit}\``);
253
+ lines.push(`Neighbor slices: ${s.modelContext.neighborUnits.length > 0 ? s.modelContext.neighborUnits.map((u) => `\`${u}\``).join(", ") : "none"}`);
254
+ if (s.modelContext.repeatedViews.length > 0) {
255
+ lines.push("Repeated view instances:");
256
+ for (const r of s.modelContext.repeatedViews)
257
+ lines.push(`- \`${r.view}\` is read again, later, in: ${r.instances.map((i) => `\`${i}\``).join(", ")} (same unit — no separate PR)`);
258
+ }
259
+ lines.push("");
260
+ lines.push("## Contract surface", "");
261
+ lines.push(s.contract.publicTouching
262
+ ? `This slice is **public-touching**. Contract file: \`${s.contract.contractPath}\`.`
263
+ : "This slice is not public-touching — it owns no `public` command, event or view.");
264
+ if (s.contract.publicElements.length > 0) {
265
+ lines.push("Public elements:");
266
+ for (const el of s.contract.publicElements)
267
+ lines.push(`- ${el.kind} \`${el.name}\` (${el.ref})`);
268
+ }
269
+ lines.push("");
270
+ lines.push("## Definition of done", "");
271
+ lines.push(s.definitionOfDone.invariantIds.length > 0
272
+ ? `- Tests traceable to this slice's invariants: ${s.definitionOfDone.invariantIds.join(", ")}`
273
+ : "- This slice declares no INV-* invariants.");
274
+ lines.push(s.definitionOfDone.scenarioTitles.length > 0
275
+ ? `- Tests traceable to this slice's scenarios: ${s.definitionOfDone.scenarioTitles.map((t) => `"${t}"`).join(", ")}`
276
+ : "- The spec has no authored `### Scenario:` blocks yet.");
277
+ lines.push(`- Commit \`${s.definitionOfDone.bindingsPath}\` (see docs/bindings.md) binding every element ref and invariant id above to the file/identifier that implements it. Minimal shape:`, "");
278
+ lines.push(" ```yaml");
279
+ for (const l of s.definitionOfDone.bindingsExample.split("\n"))
280
+ lines.push(` ${l}`);
281
+ lines.push(" ```", "");
282
+ lines.push(` Then verify: \`${s.definitionOfDone.conformCheckCommand}\``);
283
+ lines.push(`- Slice isolation: ${s.definitionOfDone.isolationNote}`);
284
+ lines.push(`- PR title: "${s.definitionOfDone.prTitle}"`, "");
285
+ lines.push(brief.inlineContext ? "## Context documents (inlined: --inline-context)" : "## Context documents", "");
286
+ if (s.context.length === 0) {
287
+ lines.push("No engagement-level context documents.");
288
+ }
289
+ else if (!brief.inlineContext) {
290
+ for (const c of s.context)
291
+ lines.push(`- ${c.path}`);
292
+ }
293
+ else {
294
+ for (const c of s.context) {
295
+ lines.push(`### ${c.path}`, "");
296
+ if (c.missing) {
297
+ lines.push(`**MISSING: context document "${c.path}" was not found on disk — this brief could not inline it.**`);
298
+ }
299
+ else {
300
+ lines.push(`<!-- BEGIN CONTEXT: ${c.path} -->`, c.content ?? "", `<!-- END CONTEXT: ${c.path} -->`);
301
+ }
302
+ lines.push("");
303
+ }
304
+ }
305
+ return lines.join("\n").trimEnd();
306
+ }
307
+ /** Text form: a self-contained brief per slice, each pasteable into its own ticket as-is, in
308
+ * engagement order. More than one is separated by a plain rule line (not nested under one
309
+ * shared heading) so each chunk still reads as its own document. */
310
+ export function formatEngagementBriefText(brief) {
311
+ return brief.slices.map((s) => formatOneBrief(brief, s)).join(`\n\n${RULE}\n\n`);
312
+ }
313
+ //# sourceMappingURL=engagementBrief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engagementBrief.js","sourceRoot":"","sources":["../../src/cli/engagementBrief.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,10 @@ export interface EngagementFile {
26
26
  tracking: string | null;
27
27
  /** GH #334: the PR title template (`{key}`, `{slice}`); null when absent (the default title applies). */
28
28
  prTitle: string | null;
29
+ /** GH #455: repo-relative paths to documents an implementer needs beyond the slice doc
30
+ * (constitution, NFR docs, ADRs) — stored exactly as given, `[]` when absent. Not checked
31
+ * against the filesystem here; `plan`'s pre-flight does that. */
32
+ context: string[];
29
33
  parallel: number;
30
34
  status: "open" | "closed";
31
35
  slices: EngagementSliceEntry[];
@@ -63,6 +67,16 @@ export declare function parseEngagementFile(text: string): ParseResult;
63
67
  export declare function spliceSliceEntry(text: string, entry: EngagementSliceEntry): string | null;
64
68
  /** Replace the frontmatter `status:` value. Null when the line is not found. */
65
69
  export declare function spliceStatus(text: string, status: "open" | "closed"): string | null;
70
+ /** GH #455: a `--context-doc` value (or a `context:` entry) must be a non-empty single line.
71
+ * Never checked against the filesystem — paths are stored exactly as given. */
72
+ export declare function validateContextPaths(paths: string[]): string | null;
73
+ /** Replace (or insert) the frontmatter's whole `context:` list — `set --context-doc` replaces
74
+ * the list wholesale, same as every other `set` input. When the line already exists, only its
75
+ * value is replaced (same splice discipline as every other field here); when it doesn't, it is
76
+ * inserted right before `parallel:` (the schema's fixed field order: tracking?, prTitle?,
77
+ * context?, parallel). A no-op for an empty list on a file with no existing `context:` line.
78
+ * `null` when the frontmatter is missing or malformed (no `parallel:` line to anchor on). */
79
+ export declare function spliceContextList(text: string, context: string[]): string | null;
66
80
  /** Regenerate the Ledger region's body in the file's own EOL. Null when the marker pair is
67
81
  * missing. */
68
82
  export declare function spliceLedger(text: string, ledgerLines: string[]): string | null;
@@ -38,6 +38,11 @@ export function detectEol(text) {
38
38
  return text.includes("\r\n") ? "\r\n" : "\n";
39
39
  }
40
40
  const q = (s) => (s === null ? "null" : JSON.stringify(s));
41
+ /** GH #455: `context:`'s value — a one-line JSON-style flow sequence, so the whole field stays a
42
+ * single splice-able line like every other frontmatter field here. */
43
+ function formatContextList(paths) {
44
+ return `[${paths.map((p) => JSON.stringify(p)).join(", ")}]`;
45
+ }
41
46
  /** One `slices:` entry as its single frontmatter line (no EOL). Key order is fixed. */
42
47
  export function formatSliceEntryLine(e) {
43
48
  const held = e.heldBy ? `, heldBy: ${e.heldBy}` : "";
@@ -72,6 +77,7 @@ export function renderEngagementFile(fm, ledgerLines) {
72
77
  `createdBy: ${q(fm.createdBy)}`,
73
78
  ...(fm.tracking === null ? [] : [`tracking: ${q(fm.tracking)}`]),
74
79
  ...(fm.prTitle === null ? [] : [`prTitle: ${q(fm.prTitle)}`]),
80
+ ...(fm.context.length === 0 ? [] : [`context: ${formatContextList(fm.context)}`]),
75
81
  `parallel: ${fm.parallel}`,
76
82
  `status: ${fm.status}`,
77
83
  "slices:",
@@ -118,6 +124,17 @@ export function parseEngagementFile(text) {
118
124
  const status = str(d.status);
119
125
  if (status !== "open" && status !== "closed")
120
126
  return { ok: false, message: `status must be open or closed, got "${status ?? "(missing)"}"` };
127
+ const context = [];
128
+ if (d.context !== undefined && d.context !== null) {
129
+ if (!Array.isArray(d.context))
130
+ return { ok: false, message: "context must be a list of repo-relative paths" };
131
+ for (const item of d.context) {
132
+ const s = str(item);
133
+ if (s === null || s.trim() === "")
134
+ return { ok: false, message: "every context entry must be a non-empty string (a repo-relative path)" };
135
+ context.push(s);
136
+ }
137
+ }
121
138
  const parallel = Number(d.parallel);
122
139
  if (!Number.isInteger(parallel) || parallel < 1)
123
140
  return { ok: false, message: "parallel must be a positive integer" };
@@ -149,6 +166,7 @@ export function parseEngagementFile(text) {
149
166
  createdBy: str(d.createdBy),
150
167
  tracking: str(d.tracking),
151
168
  prTitle: str(d.prTitle),
169
+ context,
152
170
  parallel,
153
171
  status,
154
172
  slices,
@@ -181,6 +199,42 @@ export function spliceStatus(text, status) {
181
199
  const next = inner.replace(re, (_m, prefix) => `${prefix}${status}`);
182
200
  return text.slice(0, loc.innerStart) + next + text.slice(loc.innerEnd);
183
201
  }
202
+ /** GH #455: a `--context-doc` value (or a `context:` entry) must be a non-empty single line.
203
+ * Never checked against the filesystem — paths are stored exactly as given. */
204
+ export function validateContextPaths(paths) {
205
+ for (const p of paths) {
206
+ if (p.trim() === "")
207
+ return "--context-doc must be a non-empty path";
208
+ if (/[\r\n]/.test(p))
209
+ return "--context-doc must be a single line (no newlines)";
210
+ }
211
+ return null;
212
+ }
213
+ /** Replace (or insert) the frontmatter's whole `context:` list — `set --context-doc` replaces
214
+ * the list wholesale, same as every other `set` input. When the line already exists, only its
215
+ * value is replaced (same splice discipline as every other field here); when it doesn't, it is
216
+ * inserted right before `parallel:` (the schema's fixed field order: tracking?, prTitle?,
217
+ * context?, parallel). A no-op for an empty list on a file with no existing `context:` line.
218
+ * `null` when the frontmatter is missing or malformed (no `parallel:` line to anchor on). */
219
+ export function spliceContextList(text, context) {
220
+ const loc = locateFrontmatterInner(text);
221
+ if (!loc)
222
+ return null;
223
+ const inner = text.slice(loc.innerStart, loc.innerEnd);
224
+ const existing = fieldLineRegex("context").exec(inner);
225
+ if (existing) {
226
+ const at = loc.innerStart + existing.index;
227
+ return text.slice(0, at) + existing[1] + formatContextList(context) + text.slice(at + existing[0].length);
228
+ }
229
+ if (context.length === 0)
230
+ return text;
231
+ const anchor = fieldLineRegex("parallel").exec(inner);
232
+ if (!anchor)
233
+ return null;
234
+ const eol = detectEol(text);
235
+ const at = loc.innerStart + anchor.index;
236
+ return text.slice(0, at) + `context: ${formatContextList(context)}` + eol + text.slice(at);
237
+ }
184
238
  /** Regenerate the Ledger region's body in the file's own EOL. Null when the marker pair is
185
239
  * missing. */
186
240
  export function spliceLedger(text, ledgerLines) {
@@ -1 +1 @@
1
- {"version":3,"file":"engagementFile.js","sourceRoot":"","sources":["../../src/cli/engagementFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engagementFile.js","sourceRoot":"","sources":["../../src/cli/engagementFile.ts"],"names":[],"mappings":"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"}