@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
@@ -1,7 +1,7 @@
1
1
  import { NormalizedModel } from "../model/model.js";
2
2
  import { RefsResult } from "../model/refs.js";
3
3
  import { Diagnostic } from "../model/validate.js";
4
- import { ElementExport } from "./json.js";
4
+ import { ElementExport, FieldExport, TypeExport } from "./json.js";
5
5
  /** The sentence every generated `model` carries (MIL-239 relies on it verbatim). */
6
6
  export declare const CONSUMER_TOLERANCE_SENTENCE = "Consumers tolerate unknown fields; additive changes do not break them.";
7
7
  export declare const API_HEADER_LINE = "// GENERATED by em api generate \u2014 do not hand-edit.";
@@ -11,6 +11,13 @@ export interface ApiContractResult {
11
11
  /** Same diagnostics `buildExport` would raise for this model. */
12
12
  diagnostics: Diagnostic[];
13
13
  }
14
+ /** Declared types reachable (transitively) from any of the given elements' fields, as the set of
15
+ * their export refs — same walk `em api generate`'s contract body and `em api surface` (GH #448)
16
+ * use to decide which declared types belong on the public surface, shared so neither re-derives
17
+ * it with a subtly different recursion. */
18
+ export declare function reachableTypeRefs(elements: {
19
+ fields: FieldExport[] | null;
20
+ }[], typesByRef: Map<string, TypeExport>): Set<string>;
14
21
  /** The public elements `em api` covers, in export (timeline) order. A repeated view
15
22
  * (`view X again`) contributes its first public instance only — one logical read model,
16
23
  * one TypeSpec declaration. Shared with `em api check` so both read the same surface. */
package/dist/emit/api.js CHANGED
@@ -4,8 +4,12 @@
4
4
  // plain `model`/`interface`/`op` declarations, core scalars only, no imports, no decorators,
5
5
  // no `@versioned` (one release train; versions are Backlog).
6
6
  //
7
- // - public commands -> `interface Commands { op <name>(<params>): void; }` (the write API)
8
- // - public events -> `model` (async payloads)
7
+ // - public commands -> `model` (payload) + `interface Commands { op <name>(payload: <Model>): void; }`
8
+ // (the write API; GH #445 — same payload-model shape as events/views, so field notes and
9
+ // `INV-*` lines ride along and the payload is decoratable by a binding file's `@@`)
10
+ // - public events -> `model` (async payload) + `interface Events { op on<Event>(payload): void; }`
11
+ // (GH #446 — one op per public event, so a binding file has a declaration to `@@channel`/
12
+ // `@@publish` against instead of re-stating the payload shape)
9
13
  // - public views -> `model` + `interface Views { op get<View>(): <View>; }` (the read API)
10
14
  // - declared `type`s reachable from any of those -> `model`
11
15
  //
@@ -22,7 +26,7 @@
22
26
  // hash (R12 amended): the text depends only on the public surface, so an internal-only `.em`
23
27
  // edit leaves the contract byte-identical and neither CODEOWNERS routing nor the API-first
24
28
  // gate fires on it.
25
- import { resolvePublicType } from "../model/model.js";
29
+ import { PUBLIC_SCALAR_TYPE_NAMES, PUBLIC_SCALAR_TYPES, resolvePublicType } from "../model/model.js";
26
30
  import { dedupe } from "../util/slug.js";
27
31
  import { buildExportDoc } from "./json.js";
28
32
  /** The sentence every generated `model` carries (MIL-239 relies on it verbatim). */
@@ -39,6 +43,24 @@ function pascalCase(name) {
39
43
  function camelCase(pascal) {
40
44
  return pascal.length > 0 ? pascal[0].toLowerCase() + pascal.slice(1) : pascal;
41
45
  }
46
+ /** Declared types reachable (transitively) from any of the given elements' fields, as the set of
47
+ * their export refs — same walk `em api generate`'s contract body and `em api surface` (GH #448)
48
+ * use to decide which declared types belong on the public surface, shared so neither re-derives
49
+ * it with a subtly different recursion. */
50
+ export function reachableTypeRefs(elements, typesByRef) {
51
+ const reachable = new Set();
52
+ const walk = (fields) => {
53
+ for (const f of fields ?? []) {
54
+ if (f.typeRef && !reachable.has(f.typeRef.ref)) {
55
+ reachable.add(f.typeRef.ref);
56
+ walk(typesByRef.get(f.typeRef.ref)?.fields ?? null);
57
+ }
58
+ }
59
+ };
60
+ for (const el of elements)
61
+ walk(el.fields);
62
+ return reachable;
63
+ }
42
64
  /** A field name that isn't a bare TypeSpec identifier is backtick-quoted (TypeSpec's own escape). */
43
65
  function fieldIdentifier(name) {
44
66
  if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
@@ -119,23 +141,16 @@ export function buildApiContract(model, refs, diagnostics, source, path, sourceL
119
141
  const typesByRef = new Map(doc.model.types.map((t) => [t.ref, t]));
120
142
  const surface = publicSurfaceOf(doc.model.slices);
121
143
  // Declared types reachable (transitively) from a public element's fields.
122
- const reachable = new Set();
123
- const walk = (fields) => {
124
- for (const f of fields ?? []) {
125
- if (f.typeRef && !reachable.has(f.typeRef.ref)) {
126
- reachable.add(f.typeRef.ref);
127
- walk(typesByRef.get(f.typeRef.ref)?.fields ?? null);
128
- }
129
- }
130
- };
131
- for (const el of [...surface.commands, ...surface.events, ...surface.views])
132
- walk(el.fields);
144
+ const reachable = reachableTypeRefs([...surface.commands, ...surface.events, ...surface.views], typesByRef);
133
145
  const usedNames = new Set();
134
146
  const typeNameByRef = new Map();
135
147
  for (const t of doc.model.types) {
136
148
  if (reachable.has(t.ref))
137
149
  typeNameByRef.set(t.ref, dedupe(pascalCase(t.name), usedNames, "_"));
138
150
  }
151
+ // GH #444 (#443 ask 1): which table entries this contract actually uses, so the namespace
152
+ // declares exactly the scalars its own fields need — never a dead declaration.
153
+ const usedScalars = new Set();
139
154
  const fieldType = (f, owner) => {
140
155
  if (f.typeRef) {
141
156
  const name = typeNameByRef.get(f.typeRef.ref) ?? pascalCase(f.typeRef.name);
@@ -145,6 +160,7 @@ export function buildApiContract(model, refs, diagnostics, source, path, sourceL
145
160
  if (!r || r.kind !== "scalar") {
146
161
  throw new Error(`em api generate: ${owner} field "${f.name}" has no public type — em validate's public-field-type-unresolved should have refused this model`);
147
162
  }
163
+ usedScalars.add(r.scalar);
148
164
  return r.array ? `${r.tsType}[]` : r.tsType;
149
165
  };
150
166
  const member = (f, owner) => `${fieldIdentifier(f.name)}${f.optional ? "?" : ""}: ${fieldType(f, owner)}`;
@@ -172,13 +188,28 @@ export function buildApiContract(model, refs, diagnostics, source, path, sourceL
172
188
  }
173
189
  if (typeBlocks.length > 0)
174
190
  sections.push(typeBlocks.join("\n\n"));
191
+ // GH #446: an event op's payload reuses the exact model name chosen above for its `model`
192
+ // block — never re-derived — so the op always points at the declaration a binding file would
193
+ // `@@channel`/`@@publish` against. Op names dedupe through their own set (like `opNames` does
194
+ // for commands), even though in practice they can only collide if the (already-deduped) model
195
+ // names do too.
175
196
  const eventBlocks = [];
197
+ const eventNames = [];
176
198
  for (const el of surface.events) {
177
199
  const name = dedupe(pascalCase(el.name), usedNames, "_");
200
+ eventNames.push(name);
178
201
  eventBlocks.push(renderModel(name, el.fields, `event "${el.name}"`, elementNotes(el), invariantLines(el)));
179
202
  }
180
203
  if (eventBlocks.length > 0)
181
204
  sections.push(eventBlocks.join("\n\n"));
205
+ const eventOpNames = new Set();
206
+ const eventOps = [];
207
+ for (const name of eventNames) {
208
+ const opName = dedupe(`on${name}`, eventOpNames, "_");
209
+ eventOps.push(`op ${opName}(payload: ${name}): void;`);
210
+ }
211
+ if (eventOps.length > 0)
212
+ sections.push(["interface Events {", ...indent(eventOps, 1), "}"].join("\n"));
182
213
  const viewBlocks = [];
183
214
  const viewOps = [];
184
215
  for (const el of surface.views) {
@@ -190,23 +221,36 @@ export function buildApiContract(model, refs, diagnostics, source, path, sourceL
190
221
  sections.push(viewBlocks.join("\n\n"));
191
222
  sections.push(["interface Views {", ...indent(viewOps, 1), "}"].join("\n"));
192
223
  }
224
+ // GH #445 (#443 ask 2): a command's payload rides the same `renderModel` path as an event's or
225
+ // a view's — so field notes and `INV-*` lines live on the payload model, the same home
226
+ // events/views already use, not the op. That is also what makes the fields decoratable at
227
+ // all: TypeSpec `@@` augment decorators target models and model properties, never positional
228
+ // op parameters.
193
229
  const opNames = new Set();
230
+ const commandModelBlocks = [];
194
231
  const commandOps = [];
195
232
  for (const el of surface.commands) {
196
233
  const opName = dedupe(camelCase(pascalCase(el.name)), opNames, "_");
197
- const notes = elementNotes(el);
198
- if (notes.length > 0)
199
- commandOps.push(`/** ${notes.join("; ")} */`);
200
- commandOps.push(...invariantLines(el));
201
- const params = (el.fields ?? []).map((f) => {
202
- const n = fieldNotes(f);
203
- const line = member(f, `command "${el.name}"`);
204
- return n ? `/** ${n} */ ${line}` : line;
205
- });
206
- commandOps.push(`op ${opName}(${params.join(", ")}): void;`);
234
+ const payloadName = dedupe(pascalCase(el.name), usedNames, "_");
235
+ commandModelBlocks.push(renderModel(payloadName, el.fields, `command "${el.name}"`, elementNotes(el), invariantLines(el)));
236
+ commandOps.push(`op ${opName}(payload: ${payloadName}): void;`);
207
237
  }
238
+ if (commandModelBlocks.length > 0)
239
+ sections.push(commandModelBlocks.join("\n\n"));
208
240
  if (commandOps.length > 0)
209
241
  sections.push(["interface Commands {", ...indent(commandOps, 1), "}"].join("\n"));
242
+ // Scalar declarations go first, in table order (not order of first use) — every field type
243
+ // above is already computed by this point, so `usedScalars` is complete.
244
+ const scalarDecls = [];
245
+ for (const name of PUBLIC_SCALAR_TYPE_NAMES) {
246
+ if (!usedScalars.has(name))
247
+ continue;
248
+ const decl = PUBLIC_SCALAR_TYPES[name].scalarDecl;
249
+ if (decl)
250
+ scalarDecls.push(decl);
251
+ }
252
+ if (scalarDecls.length > 0)
253
+ sections.unshift(scalarDecls.join("\n"));
210
254
  const namespaceName = pascalCase(doc.model.name ?? "Model");
211
255
  const header = [
212
256
  API_HEADER_LINE,
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/emit/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/emit/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ApiSurfaceReport } from "../cli/api.js";
2
+ export declare const API_SURFACE_SCHEMA_VERSION = "1.0";
3
+ export declare function buildApiSurfaceJson(r: ApiSurfaceReport): string;
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Builds the `em api surface --json` document (GH #448) — the model's public commands, events,
3
+ // views and reachable declared types, as a versioned JSON document for companion tools (contract
4
+ // bridges, augment generators) that today re-derive this from `em export --json` and risk
5
+ // drifting from em's own notion of the surface. Shared by the CLI and the MCP `api_surface` tool
6
+ // so the two are byte-identical. Own schema constant, independent of the export `SCHEMA_VERSION`
7
+ // and `API_CHECK_SCHEMA_VERSION` (apiCheckJson.ts); deterministic for the same inputs (no
8
+ // timestamps, no absolute paths — `file` is as given on the command line, same convention
9
+ // `apiCheckJson.ts` follows).
10
+ import { GENERATOR_NAME, GENERATOR_VERSION } from "./json.js";
11
+ // 1.0 (GH #448): initial shape.
12
+ export const API_SURFACE_SCHEMA_VERSION = "1.0";
13
+ export function buildApiSurfaceJson(r) {
14
+ const doc = {
15
+ apiSurfaceSchemaVersion: API_SURFACE_SCHEMA_VERSION,
16
+ generator: { name: GENERATOR_NAME, version: GENERATOR_VERSION },
17
+ file: r.file,
18
+ modelKey: r.modelKey,
19
+ commands: r.commands,
20
+ events: r.events,
21
+ views: r.views,
22
+ types: r.types,
23
+ };
24
+ return JSON.stringify(doc, null, 2);
25
+ }
26
+ //# sourceMappingURL=apiSurfaceJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiSurfaceJson.js","sourceRoot":"","sources":["../../src/emit/apiSurfaceJson.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,+FAA+F;AAC/F,iGAAiG;AACjG,0FAA0F;AAC1F,iGAAiG;AACjG,iGAAiG;AACjG,0FAA0F;AAC1F,0FAA0F;AAC1F,8BAA8B;AAG9B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D,gCAAgC;AAChC,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD,MAAM,UAAU,mBAAmB,CAAC,CAAmB;IACrD,MAAM,GAAG,GAAG;QACV,uBAAuB,EAAE,0BAA0B;QACnD,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC/D,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -1,15 +1,20 @@
1
1
  import type { EngagementPlan, EngagementStatus } from "../cli/engagement.js";
2
2
  import type { FoundationCheck } from "../cli/engagementFoundation.js";
3
+ import type { EngagementBrief } from "../cli/engagementBrief.js";
3
4
  /** The engagement FILE's frontmatter contract (`engagementSchemaVersion`, docs/engagement-schema.md).
4
5
  * 1.0 (MIL-268): slug, created, createdBy, parallel, status, slices[{key, state, branch, base, pr, heldBy?}].
5
6
  * 1.1 (GH #241): optional `tracking` — the engagement-level ticket key or URL. A 1.0 file still reads.
6
- * 1.2 (GH #334): optional `prTitle` — the PR title template (`{key}`, `{slice}`). 1.0 and 1.1 files still read. */
7
- export declare const ENGAGEMENT_SCHEMA_VERSION = "1.2";
7
+ * 1.2 (GH #334): optional `prTitle` — the PR title template (`{key}`, `{slice}`). 1.0 and 1.1 files still read.
8
+ * 1.3 (GH #455): optional `context` — a list of repo-relative paths to documents an implementer
9
+ * needs beyond the slice doc (constitution, NFR docs, ADRs). 1.0, 1.1 and 1.2 files still read. */
10
+ export declare const ENGAGEMENT_SCHEMA_VERSION = "1.3";
8
11
  /** Every `engagementSchemaVersion` this em reads; it always writes {@link ENGAGEMENT_SCHEMA_VERSION}. */
9
12
  export declare const ENGAGEMENT_READABLE_VERSIONS: readonly string[];
10
- export declare const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.4";
13
+ export declare const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.5";
11
14
  export declare const ENGAGEMENT_STATUS_SCHEMA_VERSION = "1.1";
12
15
  export declare function buildEngagementPlanJson(plan: EngagementPlan): string;
13
16
  export declare const ENGAGEMENT_FOUNDATION_SCHEMA_VERSION = "1.0";
14
17
  export declare function buildEngagementFoundationJson(file: string, slug: string, check: FoundationCheck): string;
18
+ export declare const ENGAGEMENT_BRIEF_SCHEMA_VERSION = "1.0";
19
+ export declare function buildEngagementBriefJson(brief: EngagementBrief): string;
15
20
  export declare function buildEngagementStatusJson(status: EngagementStatus): string;
@@ -8,10 +8,12 @@ import { GENERATOR_NAME, GENERATOR_VERSION } from "./json.js";
8
8
  /** The engagement FILE's frontmatter contract (`engagementSchemaVersion`, docs/engagement-schema.md).
9
9
  * 1.0 (MIL-268): slug, created, createdBy, parallel, status, slices[{key, state, branch, base, pr, heldBy?}].
10
10
  * 1.1 (GH #241): optional `tracking` — the engagement-level ticket key or URL. A 1.0 file still reads.
11
- * 1.2 (GH #334): optional `prTitle` — the PR title template (`{key}`, `{slice}`). 1.0 and 1.1 files still read. */
12
- export const ENGAGEMENT_SCHEMA_VERSION = "1.2";
11
+ * 1.2 (GH #334): optional `prTitle` — the PR title template (`{key}`, `{slice}`). 1.0 and 1.1 files still read.
12
+ * 1.3 (GH #455): optional `context` — a list of repo-relative paths to documents an implementer
13
+ * needs beyond the slice doc (constitution, NFR docs, ADRs). 1.0, 1.1 and 1.2 files still read. */
14
+ export const ENGAGEMENT_SCHEMA_VERSION = "1.3";
13
15
  /** Every `engagementSchemaVersion` this em reads; it always writes {@link ENGAGEMENT_SCHEMA_VERSION}. */
14
- export const ENGAGEMENT_READABLE_VERSIONS = ["1.0", "1.1", "1.2"];
16
+ export const ENGAGEMENT_READABLE_VERSIONS = ["1.0", "1.1", "1.2", "1.3"];
15
17
  // 1.0 (MIL-268): initial shape.
16
18
  // 1.1 (GH #241): additive `tracking` on the document and on each slice.
17
19
  // 1.2 (GH #239): additive `preflight: [{ kind, subject, slices, message }]` — the model-wide gaps
@@ -22,7 +24,10 @@ export const ENGAGEMENT_READABLE_VERSIONS = ["1.0", "1.1", "1.2"];
22
24
  // 1.4 (GH #334): additive `prTitle` on the document (the engagement's template, or `null`) and on
23
25
  // each slice (the resolved PR title the implementer is handed), and a `preflight[].kind:
24
26
  // "pr-title-fallback"` per keyless slice whose `{key}` template fell back to the default.
25
- export const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.4";
27
+ // 1.5 (GH #455): additive `context` on the document — the engagement's repo-relative document
28
+ // paths, `[]` when absent — and a `preflight[].kind: "context-missing"` per context path that
29
+ // does not exist on disk at plan time.
30
+ export const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.5";
26
31
  // 1.0 (MIL-268): initial shape.
27
32
  // 1.1 (GH #241): additive `tracking` on the document and on each slice.
28
33
  export const ENGAGEMENT_STATUS_SCHEMA_VERSION = "1.1";
@@ -37,6 +42,7 @@ export function buildEngagementPlanJson(plan) {
37
42
  parallel: plan.parallel,
38
43
  tracking: plan.tracking,
39
44
  prTitle: plan.prTitle,
45
+ context: plan.context,
40
46
  levels: plan.levels,
41
47
  slices: plan.slices,
42
48
  preflight: plan.preflight,
@@ -63,6 +69,27 @@ export function buildEngagementFoundationJson(file, slug, check) {
63
69
  };
64
70
  return JSON.stringify(doc, null, 2);
65
71
  }
72
+ // 1.0 (GH #454): `{ engagementBriefSchemaVersion, generator, file, engagement, slug,
73
+ // inlineContext, slices[{ key, sliceName, pattern, docStatus, tracking, prTitle, branch, base,
74
+ // ledgerState, ledgerBranch, ledgerBase, ledgerPr, doc: { found, path, content }, fallbackElements,
75
+ // modelContext: { consumes, produces, neighborUnits, repeatedViews }, contract: { publicTouching,
76
+ // contractPath, publicElements }, definitionOfDone: { invariantIds, scenarioTitles, bindingsPath,
77
+ // bindingsExample, conformCheckCommand, isolationNote, prTitle }, context[{ path, inline, content,
78
+ // missing }] }] }` — one brief per engagement slice (model/Ledger order), `slices` has exactly one
79
+ // entry when `--slice` narrowed it. The MCP `engagement_brief` tool returns the same document.
80
+ export const ENGAGEMENT_BRIEF_SCHEMA_VERSION = "1.0";
81
+ export function buildEngagementBriefJson(brief) {
82
+ const doc = {
83
+ engagementBriefSchemaVersion: ENGAGEMENT_BRIEF_SCHEMA_VERSION,
84
+ generator: { name: GENERATOR_NAME, version: GENERATOR_VERSION },
85
+ file: brief.file,
86
+ engagement: brief.engagement,
87
+ slug: brief.slug,
88
+ inlineContext: brief.inlineContext,
89
+ slices: brief.slices,
90
+ };
91
+ return JSON.stringify(doc, null, 2);
92
+ }
66
93
  export function buildEngagementStatusJson(status) {
67
94
  const doc = {
68
95
  engagementStatusSchemaVersion: ENGAGEMENT_STATUS_SCHEMA_VERSION,
@@ -1 +1 @@
1
- {"version":3,"file":"engagementJson.js","sourceRoot":"","sources":["../../src/emit/engagementJson.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engagementJson.js","sourceRoot":"","sources":["../../src/emit/engagementJson.ts"],"names":[],"mappings":"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"}
@@ -34,8 +34,9 @@ import { buildExport, buildSliceExport, GENERATOR_VERSION } from "../emit/json.j
34
34
  import { buildDocJsonExport } from "../emit/docJson.js";
35
35
  import { buildValidateJson, buildShapeJson, buildSliceReadyJson, buildValidateListJson, collectMarkers } from "../emit/validateJson.js";
36
36
  import { buildDiffJson } from "../emit/diffJson.js";
37
- import { runApiCheck } from "../cli/api.js";
37
+ import { runApiCheck, runApiSurface } from "../cli/api.js";
38
38
  import { buildApiCheckJson } from "../emit/apiCheckJson.js";
39
+ import { buildApiSurfaceJson } from "../emit/apiSurfaceJson.js";
39
40
  import { buildShapeReport, readWaiveFile } from "../cli/shape.js";
40
41
  import { validateLineage } from "../catalog/lineageValidate.js";
41
42
  import { validateFrontmatterCoherence } from "../catalog/frontmatterCoherenceValidate.js";
@@ -49,7 +50,8 @@ import { computeSliceReadiness } from "../catalog/sliceReadyValidate.js";
49
50
  import { engagementMembersFor, engagementPlanFor, engagementStatusFor } from "../cli/engagement.js";
50
51
  import { checkFoundation } from "../cli/engagementFoundation.js";
51
52
  import { readOpenEngagements } from "../cli/engagementFile.js";
52
- import { buildEngagementFoundationJson, buildEngagementPlanJson, buildEngagementStatusJson } from "../emit/engagementJson.js";
53
+ import { engagementBriefFor } from "../cli/engagementBrief.js";
54
+ import { buildEngagementBriefJson, buildEngagementFoundationJson, buildEngagementPlanJson, buildEngagementStatusJson } from "../emit/engagementJson.js";
53
55
  import { buildSliceSyncJson, runSliceSync } from "../cli/sliceSync.js";
54
56
  import { buildCoverageReport, resolveScopedSlices, resolveCoverageSliceKey } from "../cli/coverage.js";
55
57
  import { buildCoverageJson } from "../emit/coverageJson.js";
@@ -73,6 +75,8 @@ import { buildMetricsJson } from "../emit/metricsJson.js";
73
75
  import { runSystemScope } from "../cli/scopeInputs.js";
74
76
  import { buildScopeJson } from "../emit/scopeJson.js";
75
77
  import { checkFindingsFile, buildCheckFindingsJson } from "../cli/findings.js";
78
+ import { runBindingsCheck, buildBindingsCheckJson } from "../cli/bindings.js";
79
+ import { resolveSliceKey } from "../model/resolveSlice.js";
76
80
  import { checkPrdTriage, buildCheckPrdTriageJson } from "../cli/prdTriage.js";
77
81
  import { compileForQuery } from "../query/pipeline.js";
78
82
  import { buildQuerySystem } from "../query/system.js";
@@ -531,7 +535,7 @@ export function createServer() {
531
535
  // merged `sliceFacts` above (which spans every input file when several are given).
532
536
  const conformance = compiledFiles.map(({ file }) => {
533
537
  const facts = factsByFile.get(file) ?? [];
534
- const sliceDocFacts = facts.map((f) => ({ key: f.key, status: f.rawStatus, implementedIn: f.implementedIn, shipped: f.shipped }));
538
+ const sliceDocFacts = facts.map((f) => ({ key: f.key, status: f.rawStatus, implementedIn: f.implementedIn, shipped: f.shipped, file: f.sliceFile }));
535
539
  return resolveConformanceEntry(file, repo, sliceDocFacts);
536
540
  });
537
541
  // MIL-218: one model-version entry per input file — same computation cli.ts's `status`
@@ -838,6 +842,37 @@ export function createServer() {
838
842
  }, async ({ path }) => {
839
843
  return textResult(buildCheckFindingsJson(checkFindingsFile(path)));
840
844
  });
845
+ server.registerTool("conform_bindings_check", {
846
+ title: "Verify per-slice bindings manifests against a target repo",
847
+ description: "Return the same JSON document `em conform bindings check <file> --repo <repo> --json` " +
848
+ "prints (GH #449): for each conformance/bindings/<slice-key>.yaml beside `file` (or just " +
849
+ "`slice`'s), whether each bound element's `ref` resolves against the compiled model and " +
850
+ "each bound `file`/`identifier` exists/is found under `repo` (plain substring, never " +
851
+ "code-parsed). Distinct failure kinds: an unknown `slice` key (tool error), a missing " +
852
+ "bindings file, malformed YAML, an unknown slice named inside a file, and an unknown " +
853
+ "element ref. Advisory only — read-only, never wired into `validate`/`slice_ready`.",
854
+ inputSchema: {
855
+ file: z.string().describe("input .em model file"),
856
+ repo: z.string().describe("path to the target codebase (bound files resolve relative to it; not required to be a git repository)"),
857
+ slice: z.string().optional().describe("check only this slice's bindings file (default: every conformance/bindings/*.yaml)"),
858
+ },
859
+ }, async ({ file, repo, slice }) => {
860
+ const compiled = compileFile(file);
861
+ if ("error" in compiled)
862
+ return errorResult(compiled.error);
863
+ const { model, refs, diagnostics } = compiled;
864
+ if (hasErrors(diagnostics)) {
865
+ return errorResult(`not checking bindings: "${file}" has errors — run \`validate\` first and fix them`);
866
+ }
867
+ let sliceKey;
868
+ if (slice !== undefined) {
869
+ const resolved = resolveSliceKey(model, refs, slice);
870
+ if (!resolved.ok)
871
+ return errorResult(resolved.message);
872
+ sliceKey = resolved.key;
873
+ }
874
+ return textResult(buildBindingsCheckJson(runBindingsCheck(refs, dirname(file), repo, sliceKey)));
875
+ });
841
876
  server.registerTool("discover_triage_check", {
842
877
  title: "Check a PRD/spec discovery triage record",
843
878
  description: "Return the same JSON document `em discover triage-check <path> --json` prints (GH #295): " +
@@ -1056,6 +1091,22 @@ export function createServer() {
1056
1091
  return errorResult(outcome.message);
1057
1092
  return textResult(buildApiCheckJson(outcome.report));
1058
1093
  });
1094
+ server.registerTool("api_surface", {
1095
+ title: "The model's public surface as a JSON document",
1096
+ description: "Return the same JSON document `em api surface <file> --json` prints (GH #448): the " +
1097
+ "model's public commands, events and views, plus every declared type reachable from " +
1098
+ "their fields, each field's type resolved through the fixed scalar table or a declared " +
1099
+ "type (`resolvePublicType`) — the same notion of the public surface `em api generate`/ " +
1100
+ "`em api check` already share, so a companion tool reads it directly instead of " +
1101
+ "re-deriving it from `em export --json`. Refuses (tool error) when the model has errors, " +
1102
+ "same as `em api generate`.",
1103
+ inputSchema: { file: fileParam },
1104
+ }, async ({ file }) => {
1105
+ const outcome = runApiSurface(file);
1106
+ if (!outcome.ok)
1107
+ return errorResult(outcome.message);
1108
+ return textResult(buildApiSurfaceJson(outcome.report));
1109
+ });
1059
1110
  const slugParam = z.string().describe("engagement slug — the file <model dir>/engagements/<slug>.md");
1060
1111
  server.registerTool("engagement_plan", {
1061
1112
  title: "Build plan for an engagement",
@@ -1115,6 +1166,43 @@ export function createServer() {
1115
1166
  return errorResult(`em engagement foundation: ${members.message}`);
1116
1167
  return textResult(buildEngagementFoundationJson(file, slug, checkFoundation(compiled.model, members.members, members.idx, code)));
1117
1168
  });
1169
+ server.registerTool("engagement_brief", {
1170
+ title: "Self-contained per-slice work brief for an engagement",
1171
+ description: "Return the same JSON document `em engagement brief <file> <slug> --json` prints (GH #454): a " +
1172
+ "deterministic, self-contained work brief for implementers em does not control (a ticket-driven " +
1173
+ "cloud agent) — the bound slice doc verbatim, or the model's own elements when there is none; " +
1174
+ "model context (events/elements consumed and produced, neighbor units, repeated view instances) " +
1175
+ "folded from model.edges the same way the build plan is; the public-contract surface " +
1176
+ "(slicePublicTouching, the contract file path, public elements); a definition-of-done " +
1177
+ "(INV-*/scenario ids to test, a filled bindings-manifest skeleton plus the exact `em conform " +
1178
+ "bindings check` verify line, the slice-isolation rule, the resolved PR title); and the " +
1179
+ "engagement's context: documents (GH #455) — pointers, or full text with `inlineContext`. One " +
1180
+ "brief per engagement slice unless `slice` narrows it to one. Read-only. Tool error when the " +
1181
+ "engagement is missing, the model no longer has one of its slices, or `slice` names a key not " +
1182
+ "in the engagement.",
1183
+ inputSchema: {
1184
+ file: fileParam,
1185
+ slug: slugParam,
1186
+ slice: z.string().optional().describe("only this slice's brief (export key, display name, or unique prefix)"),
1187
+ inlineContext: z.boolean().optional().describe("embed each context document's full text instead of just its path"),
1188
+ },
1189
+ }, async ({ file, slug, slice, inlineContext }) => {
1190
+ const compiled = compileFile(file);
1191
+ if ("error" in compiled)
1192
+ return errorResult(compiled.error);
1193
+ const { model, refs } = compiled;
1194
+ // GH #237: an input that resolves to no slice goes through as typed, so the engagement's own
1195
+ // "is not in engagement" refusal (which names what the Ledger holds) still speaks.
1196
+ let sliceKey = null;
1197
+ if (slice !== undefined) {
1198
+ const resolved = resolveSliceKey(model, refs, slice);
1199
+ sliceKey = resolved.ok ? resolved.key : slice;
1200
+ }
1201
+ const result = engagementBriefFor({ file, model, refs, baseDir: dirname(file) }, slug, { sliceKey, inlineContext: inlineContext === true });
1202
+ if (!result.ok)
1203
+ return errorResult(`em engagement brief: ${result.message}`);
1204
+ return textResult(buildEngagementBriefJson(result.brief));
1205
+ });
1118
1206
  return server;
1119
1207
  }
1120
1208
  //# sourceMappingURL=server.js.map