@milehimikey/em 1.18.0 → 1.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/em-implementer.md +7 -4
- package/.claude/agents/em-validator.md +2 -2
- 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 +1 -1
- package/.claude/skills/event-modeling-discover/SKILL.md +1 -1
- package/.claude/skills/event-modeling-discover/reference/prd-rubric.md +1 -1
- package/.claude/skills/event-modeling-discover/reference/prd-spec-path.md +1 -1
- package/.claude/skills/event-modeling-engagement/SKILL.md +14 -7
- package/.claude/skills/event-modeling-implement/SKILL.md +1 -1
- package/.claude/skills/event-modeling-implement/reference/implement.md +10 -0
- package/.claude/skills/event-modeling-review/SKILL.md +4 -2
- package/.claude/skills/event-modeling-shared/reference/em-dsl.md +4 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/dist/catalog/sliceDoc.d.ts +4 -0
- package/dist/catalog/sliceDoc.js +16 -7
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/catalog/sliceReadyValidate.d.ts +3 -2
- package/dist/catalog/sliceReadyValidate.js +28 -1
- package/dist/catalog/sliceReadyValidate.js.map +1 -1
- package/dist/cli/engagement.d.ts +12 -1
- package/dist/cli/engagement.js +36 -4
- package/dist/cli/engagement.js.map +1 -1
- package/dist/cli/engagementFile.d.ts +2 -0
- package/dist/cli/engagementFile.js +3 -1
- package/dist/cli/engagementFile.js.map +1 -1
- package/dist/cli/prdTriage.js +15 -0
- package/dist/cli/prdTriage.js.map +1 -1
- package/dist/cli/review.d.ts +17 -2
- package/dist/cli/review.js +39 -10
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/upgrade.d.ts +2 -2
- package/dist/cli/upgrade.js +90 -0
- package/dist/cli/upgrade.js.map +1 -1
- package/dist/cli.js +25 -6
- package/dist/cli.js.map +1 -1
- package/dist/emit/engagementJson.d.ts +4 -3
- package/dist/emit/engagementJson.js +9 -4
- package/dist/emit/engagementJson.js.map +1 -1
- package/dist/emit/validateJson.d.ts +4 -3
- package/dist/emit/validateJson.js +4 -3
- package/dist/emit/validateJson.js.map +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/agents/em-implementer.md +7 -4
- package/plugin/agents/em-validator.md +2 -2
- package/plugin/shared/reference/em-dsl.md +4 -1
- package/plugin/skills/conform/SKILL.md +1 -1
- package/plugin/skills/design/SKILL.md +1 -1
- package/plugin/skills/discover/SKILL.md +1 -1
- package/plugin/skills/discover/reference/prd-rubric.md +1 -1
- package/plugin/skills/discover/reference/prd-spec-path.md +1 -1
- package/plugin/skills/engagement/SKILL.md +14 -7
- package/plugin/skills/event-modeling/SKILL.md +1 -1
- package/plugin/skills/implement/SKILL.md +1 -1
- package/plugin/skills/implement/reference/implement.md +10 -0
- package/plugin/skills/review/SKILL.md +4 -2
|
@@ -2,11 +2,12 @@ import type { EngagementPlan, EngagementStatus } from "../cli/engagement.js";
|
|
|
2
2
|
import type { FoundationCheck } from "../cli/engagementFoundation.js";
|
|
3
3
|
/** The engagement FILE's frontmatter contract (`engagementSchemaVersion`, docs/engagement-schema.md).
|
|
4
4
|
* 1.0 (MIL-268): slug, created, createdBy, parallel, status, slices[{key, state, branch, base, pr, heldBy?}].
|
|
5
|
-
* 1.1 (GH #241): optional `tracking` — the engagement-level ticket key or URL. A 1.0 file still reads.
|
|
6
|
-
|
|
5
|
+
* 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
8
|
/** Every `engagementSchemaVersion` this em reads; it always writes {@link ENGAGEMENT_SCHEMA_VERSION}. */
|
|
8
9
|
export declare const ENGAGEMENT_READABLE_VERSIONS: readonly string[];
|
|
9
|
-
export declare const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.
|
|
10
|
+
export declare const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.4";
|
|
10
11
|
export declare const ENGAGEMENT_STATUS_SCHEMA_VERSION = "1.1";
|
|
11
12
|
export declare function buildEngagementPlanJson(plan: EngagementPlan): string;
|
|
12
13
|
export declare const ENGAGEMENT_FOUNDATION_SCHEMA_VERSION = "1.0";
|
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
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
|
-
* 1.1 (GH #241): optional `tracking` — the engagement-level ticket key or URL. A 1.0 file still reads.
|
|
11
|
-
|
|
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";
|
|
12
13
|
/** Every `engagementSchemaVersion` this em reads; it always writes {@link ENGAGEMENT_SCHEMA_VERSION}. */
|
|
13
|
-
export const ENGAGEMENT_READABLE_VERSIONS = ["1.0", "1.1"];
|
|
14
|
+
export const ENGAGEMENT_READABLE_VERSIONS = ["1.0", "1.1", "1.2"];
|
|
14
15
|
// 1.0 (MIL-268): initial shape.
|
|
15
16
|
// 1.1 (GH #241): additive `tracking` on the document and on each slice.
|
|
16
17
|
// 1.2 (GH #239): additive `preflight: [{ kind, subject, slices, message }]` — the model-wide gaps
|
|
@@ -18,7 +19,10 @@ export const ENGAGEMENT_READABLE_VERSIONS = ["1.0", "1.1"];
|
|
|
18
19
|
// doc-model-mismatch); advisory, never a hold. `[]` when there are none.
|
|
19
20
|
// 1.3 (GH #282): additive `preflight[].kind: "shape"` — one entry per shape-family lint
|
|
20
21
|
// (`em validate --shape`) that fires on the engagement's slices; `subject` is the rule code.
|
|
21
|
-
|
|
22
|
+
// 1.4 (GH #334): additive `prTitle` on the document (the engagement's template, or `null`) and on
|
|
23
|
+
// each slice (the resolved PR title the implementer is handed), and a `preflight[].kind:
|
|
24
|
+
// "pr-title-fallback"` per keyless slice whose `{key}` template fell back to the default.
|
|
25
|
+
export const ENGAGEMENT_PLAN_SCHEMA_VERSION = "1.4";
|
|
22
26
|
// 1.0 (MIL-268): initial shape.
|
|
23
27
|
// 1.1 (GH #241): additive `tracking` on the document and on each slice.
|
|
24
28
|
export const ENGAGEMENT_STATUS_SCHEMA_VERSION = "1.1";
|
|
@@ -32,6 +36,7 @@ export function buildEngagementPlanJson(plan) {
|
|
|
32
36
|
status: plan.status,
|
|
33
37
|
parallel: plan.parallel,
|
|
34
38
|
tracking: plan.tracking,
|
|
39
|
+
prTitle: plan.prTitle,
|
|
35
40
|
levels: plan.levels,
|
|
36
41
|
slices: plan.slices,
|
|
37
42
|
preflight: plan.preflight,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engagementJson.js","sourceRoot":"","sources":["../../src/emit/engagementJson.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,6FAA6F;AAC7F,gFAAgF;AAChF,+FAA+F;AAC/F,gGAAgG;AAChG,mFAAmF;AAInF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"engagementJson.js","sourceRoot":"","sources":["../../src/emit/engagementJson.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,6FAA6F;AAC7F,gFAAgF;AAChF,+FAA+F;AAC/F,gGAAgG;AAChG,mFAAmF;AAInF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D;;;oHAGoH;AACpH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAE/C,yGAAyG;AACzG,MAAM,CAAC,MAAM,4BAA4B,GAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAErF,gCAAgC;AAChC,wEAAwE;AACxE,kGAAkG;AAClG,0FAA0F;AAC1F,2EAA2E;AAC3E,wFAAwF;AACxF,+FAA+F;AAC/F,kGAAkG;AAClG,2FAA2F;AAC3F,4FAA4F;AAC5F,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAEpD,gCAAgC;AAChC,wEAAwE;AACxE,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAEtD,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,MAAM,GAAG,GAAG;QACV,2BAA2B,EAAE,8BAA8B;QAC3D,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC/D,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,kGAAkG;AAClG,2FAA2F;AAC3F,2FAA2F;AAC3F,iGAAiG;AACjG,+BAA+B;AAC/B,MAAM,CAAC,MAAM,oCAAoC,GAAG,KAAK,CAAC;AAE1D,MAAM,UAAU,6BAA6B,CAAC,IAAY,EAAE,IAAY,EAAE,KAAsB;IAC9F,MAAM,GAAG,GAAG;QACV,iCAAiC,EAAE,oCAAoC;QACvE,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC/D,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,EAAE,EAAE,KAAK,CAAC,EAAE;KACb,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAwB;IAChE,MAAM,GAAG,GAAG;QACV,6BAA6B,EAAE,gCAAgC;QAC/D,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC/D,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -16,9 +16,10 @@ export declare const VALIDATE_SLICE_READY_SCHEMA_VERSION = "1.4";
|
|
|
16
16
|
* conditions individually (see `computeSliceReadyGates`, catalog/sliceReadyValidate.ts);
|
|
17
17
|
* `null` when `sliceKey` matches no slice in the model (the `slice-ready-unknown-slice` error
|
|
18
18
|
* case — nothing to gate). `ready` is the same predicate driving `em validate`'s exit code
|
|
19
|
-
* for `--slice-ready` (scoped diagnostics
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* for `--slice-ready` (no error-severity scoped diagnostics and no warning whose code is in the
|
|
20
|
+
* gating list of GH #332, see docs/cli.md; any other warning is listed in `diagnostics` but never
|
|
21
|
+
* flips it) — it is the AND of the gates only when `gates` is non-null AND nothing gating
|
|
22
|
+
* remains (e.g. a `both-ends-of-a-flow/*` warning on one of its own elements); `diagnostics` carries that full
|
|
22
23
|
* scoped list so a consumer sees exactly why, never just the 4 named gates. `continuationOf`
|
|
23
24
|
* (MIL-208) is `null` for an ordinary slice or when `gates` is `null`. */
|
|
24
25
|
export declare function buildSliceReadyJson(file: string, sliceKey: string, gates: SliceReadyGates | null, diagnostics: Diagnostic[], ready: boolean, continuationOf: string | null, reviewSkipped?: string | null, advisories?: Diagnostic[]): string;
|
|
@@ -70,9 +70,10 @@ export const VALIDATE_SLICE_READY_SCHEMA_VERSION = "1.4";
|
|
|
70
70
|
* conditions individually (see `computeSliceReadyGates`, catalog/sliceReadyValidate.ts);
|
|
71
71
|
* `null` when `sliceKey` matches no slice in the model (the `slice-ready-unknown-slice` error
|
|
72
72
|
* case — nothing to gate). `ready` is the same predicate driving `em validate`'s exit code
|
|
73
|
-
* for `--slice-ready` (scoped diagnostics
|
|
74
|
-
*
|
|
75
|
-
*
|
|
73
|
+
* for `--slice-ready` (no error-severity scoped diagnostics and no warning whose code is in the
|
|
74
|
+
* gating list of GH #332, see docs/cli.md; any other warning is listed in `diagnostics` but never
|
|
75
|
+
* flips it) — it is the AND of the gates only when `gates` is non-null AND nothing gating
|
|
76
|
+
* remains (e.g. a `both-ends-of-a-flow/*` warning on one of its own elements); `diagnostics` carries that full
|
|
76
77
|
* scoped list so a consumer sees exactly why, never just the 4 named gates. `continuationOf`
|
|
77
78
|
* (MIL-208) is `null` for an ordinary slice or when `gates` is `null`. */
|
|
78
79
|
export function buildSliceReadyJson(file, sliceKey, gates, diagnostics, ready, continuationOf, reviewSkipped = null, advisories = []) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateJson.js","sourceRoot":"","sources":["../../src/emit/validateJson.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,yFAAyF;AACzF,gFAAgF;AAChF,+FAA+F;AAC/F,+FAA+F;AAC/F,6FAA6F;AAC7F,iDAAiD;AACjD,EAAE;AACF,qFAAqF;AACrF,gGAAgG;AAChG,6FAA6F;AAC7F,oFAAoF;AACpF,EAAE;AACF,uFAAuF;AACvF,+FAA+F;AAC/F,uFAAuF;AACvF,0DAA0D;AAE1D,OAAO,EAAc,mBAAmB,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,KAAK,EAAY,MAAM,mBAAmB,CAAC;AAKpD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D;;;2FAG2F;AAC3F,SAAS,4BAA4B,CAAC,CAAa;IACjD,OAAO,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,IAAgB,CAAC,CAAC,aAAa,EAAE,CAAC;AAC/F,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;;iCAGiC;AACjC,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,WAAyB;IACvE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,GAAG,GAAG;QACV,qBAAqB,EAAE,uBAAuB;QAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC/D,IAAI;QACJ,EAAE,EAAE,MAAM,KAAK,CAAC;QAChB,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;QACrF,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC;KAC3D,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,gCAAgC;AAChC,4FAA4F;AAC5F,+FAA+F;AAC/F,gGAAgG;AAChG,8FAA8F;AAC9F,sBAAsB;AACtB,uFAAuF;AACvF,gGAAgG;AAChG,oFAAoF;AACpF,iGAAiG;AACjG,6FAA6F;AAC7F,2BAA2B;AAC3B,gGAAgG;AAChG,iGAAiG;AACjG,mGAAmG;AACnG,yFAAyF;AACzF,8FAA8F;AAC9F,gGAAgG;AAChG,8FAA8F;AAC9F,wCAAwC;AACxC,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"validateJson.js","sourceRoot":"","sources":["../../src/emit/validateJson.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "em",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.1",
|
|
4
4
|
"description": "Event Modeling with em: discover, design, implement, conform, review and engagement skills over a slice-first text DSL, plus the em MCP server.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Mike Key"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"command": "npx",
|
|
11
11
|
"args": [
|
|
12
12
|
"-y",
|
|
13
|
-
"@milehimikey/em@1.18.
|
|
13
|
+
"@milehimikey/em@1.18.1",
|
|
14
14
|
"mcp"
|
|
15
15
|
]
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: em-implementer
|
|
3
|
-
description: Implements exactly one ratified event-modeling slice in an assigned worktree and branch and opens its pull request; the engagement skill dispatches it once per slice with only the slice key, the worktree path and, when there is one, a tracking key.
|
|
3
|
+
description: Implements exactly one ratified event-modeling slice in an assigned worktree and branch and opens its pull request; the engagement skill dispatches it once per slice with only the slice key, the worktree path, the exact pull-request title and, when there is one, a tracking key.
|
|
4
4
|
tools: Read, Write, Edit, Bash, Grep, Glob, Skill
|
|
5
5
|
---
|
|
6
6
|
<!-- GENERATED FILE from .claude/agents/em-implementer.md by scripts/build-plugin.ts — do not hand-edit; run npm run docs:generate -->
|
|
@@ -23,11 +23,14 @@ You are the em implementer. You build one slice, in one worktree, on one branch,
|
|
|
23
23
|
|
|
24
24
|
If your prompt carries a tracking key (an issue-tracker key such as `PROJ-123`, or a URL), the lead has already resolved it for this slice: the slice doc's own `tracking:` wins over the engagement's. Use it as given:
|
|
25
25
|
|
|
26
|
-
- Title the pull request `<key>: <slice name>`.
|
|
27
26
|
- Cite it in the pull request body.
|
|
28
27
|
- Put it in a commit message only when the constitution's commit convention asks for a ticket key.
|
|
29
28
|
|
|
30
|
-
With no tracking key,
|
|
29
|
+
With no tracking key, invent none.
|
|
30
|
+
|
|
31
|
+
## Pull request title
|
|
32
|
+
|
|
33
|
+
Your prompt carries the exact pull-request title (the plan's `prTitle`, resolved by the lead from the engagement's title template). Title the pull request exactly that, character for character. Do not add, drop or reformat a prefix, and do not compose a title yourself. If the prompt carries no title, stop and report it.
|
|
31
34
|
|
|
32
35
|
## Hard lines
|
|
33
36
|
|
|
@@ -40,6 +43,6 @@ With no tracking key, title the pull request as you would without one and invent
|
|
|
40
43
|
|
|
41
44
|
Reply with:
|
|
42
45
|
|
|
43
|
-
- The pull request URL (its title
|
|
46
|
+
- The pull request URL (its title is exactly the one you were given).
|
|
44
47
|
- A per-invariant test map: one line per `INV-*` id, `INV-<id> -> <test file>::<test name>`.
|
|
45
48
|
- Any gap you stopped on, stated as the doc line and the question.
|
|
@@ -10,7 +10,7 @@ You are the em validator. You run checks and report what they say. You make no j
|
|
|
10
10
|
|
|
11
11
|
## Scope
|
|
12
12
|
|
|
13
|
-
You were given a slice key and the worktree path of its pull request, and, when the slice has one, a tracking key. You read output; you never change anything. Use Bash only to run the checks below and read-only git or `gh` commands. Do not write, edit, create, delete, commit, or push anything.
|
|
13
|
+
You were given a slice key and the worktree path of its pull request, the exact pull-request title the implementer was given and, when the slice has one, a tracking key. You read output; you never change anything. Use Bash only to run the checks below and read-only git or `gh` commands. Do not write, edit, create, delete, commit, or push anything.
|
|
14
14
|
|
|
15
15
|
## Checks
|
|
16
16
|
|
|
@@ -22,7 +22,7 @@ Run each one and record pass or fail:
|
|
|
22
22
|
4. Diff footprint: every changed path sits inside the slice's package, as the constitution's layout rule describes it. This is a judgment against that rule; quote the rule and list any path outside it.
|
|
23
23
|
5. No diff under `slices/**`, `*.em`, `constitution.md`, or `engagements/`. Use `git diff --name-only <base>...HEAD`.
|
|
24
24
|
6. The pull request body cites the slice doc.
|
|
25
|
-
7.
|
|
25
|
+
7. The pull request title equals the title you were given, exactly (`gh pr view <pr> --json title`). A mismatch fails the check and quotes both. If no title was given, skip this check and say so.
|
|
26
26
|
|
|
27
27
|
## Output
|
|
28
28
|
|
|
@@ -71,10 +71,12 @@ em slice index <file> --check # verify the
|
|
|
71
71
|
em slice mark-implemented <file> <slice-key> <pr-url> # flip a slice doc's frontmatter to `status: implemented` / `implementedIn: <pr-url>` — the one edit an implementing agent makes to a ratified doc at merge (MIL-103, replaces the em-sdd-bridge `em-sdd-mark-implemented` script; see reference/implement.md §6). Applies only to a `ready-to-implement` doc (MIL-277: a `draft`/`reviewed` doc refuses — ratify first). Also records the shipped version beside the link (MIL-284): `shippedVersion:`, `shippedRef:` (the doc's `ratifiedRef:`, when it has one) and `shippedOn:`, and opens the next version as a `draft` when an Open Question was deferred to it (MIL-283). Idempotent on the same URL — also after that draft opened; refuses to overwrite a different one; never touches the doc body except to re-open those deferred questions
|
|
72
72
|
em slice mark-implemented <file> <slice-key> <pr-url> --on <date> # merge date recorded as `shippedOn:`, YYYY-MM-DD (default: today, local date; MIL-284)
|
|
73
73
|
em slice mark-implemented <file> <slice-key> <pr-url> --json # print a JSON document instead of text: { path, changed, implementedIn, nextDraft: { version, reopened[] } | null } (GH #285)
|
|
74
|
-
em slice review <file> <slice-key> # flip a slice doc's frontmatter to `status: reviewed` and record `reviewedBy:`/`reviewedOn:` — the FIRST of the two human gates (MIL-201, docs/process.md#the-slice-lifecycle-gates): the room walked this slice and every open question it raised is resolved. Ratification is a separate, later gate (`em slice ratify`). Legal from `status: draft`; idempotent on the same --by/--on pair; refuses to overwrite a different one already recorded; refuses a doc already `ready-to-implement`/`implemented`; never touches `version:` or the doc body
|
|
74
|
+
em slice review <file> <slice-key> # flip a slice doc's frontmatter to `status: reviewed` and record `reviewedBy:`/`reviewedOn:` — the FIRST of the two human gates (MIL-201, docs/process.md#the-slice-lifecycle-gates): the room walked this slice and every open question it raised is resolved. Ratification is a separate, later gate (`em slice ratify`). Legal from `status: draft`; idempotent on the same --by/--on pair; refuses to overwrite a different one already recorded (--again re-records it); refuses a doc with an unchecked `## Open Questions` item unless --allow-open (GH #333); refuses a doc already `ready-to-implement`/`implemented`; never touches `version:` or the doc body
|
|
75
75
|
em slice review <file> <slice-key> --by <name> # the reviewer's (or facilitator's) name
|
|
76
76
|
em slice review <file> <slice-key> --on <date> # review date, YYYY-MM-DD (default: today, local date)
|
|
77
77
|
em slice review <file> <slice-key> --roster <path> # ratifier roster to check --by against (GH #259; default: the nearest ratifiers.yaml above the model, none = unrestricted)
|
|
78
|
+
em slice review <file> <slice-key> --again # re-record reviewedBy/reviewedOn on a doc already `status: reviewed` (prints old -> new); still refused on ready-to-implement/implemented
|
|
79
|
+
em slice review <file> <slice-key> --allow-open # record the review although `## Open Questions` has unchecked items (a deliberately partial walk); prints a notice with the open count
|
|
78
80
|
em slice ratify <file> <slice-key> # flip a slice doc's frontmatter to `status: ready-to-implement` and record `ratifiedBy:`/`ratifiedOn:` — the handoff sign-off (MIL-165, docs/process.md#the-slice-lifecycle-gates) that makes who ratified, and when, a first-class recorded fact. The review gate is a check on the doc's current `status:`, not on whether `reviewedBy:`/`reviewedOn:` are populated: a doc at `reviewed` passes; a `ready-to-implement` doc only when the same signer is completing their own record (since 1.15.0, MIL-283 — a new sign-off is a new version: `em slice revise`); any other status — a `draft` that never went through `em slice review` — is refused unless --skip-review is passed. Idempotent on the same --by/--on pair; refuses to overwrite a different one already recorded, and (MIL-284) a same-pair re-run on a doc whose body moved after sign-off; never touches `version:` or the doc body. Inside a git work tree also records `ratifiedRef:` (HEAD, refusing a doc with uncommitted changes) and always `ratifiedHash:`; with --no-ref (GH #255) only the hash — for a repo whose squash/rebase merges would leave the ref unreachable — and git is not consulted
|
|
79
81
|
em slice ratify <file> <slice-key> --by <name> # the ratifier's name
|
|
80
82
|
em slice ratify <file> <slice-key> --no-ref # record ratifiedHash: only, no ratifiedRef: (GH #255) — the signed content keeps its identity, nothing points at a commit a squash or rebase merge would orphan; the uncommitted-changes check does not apply
|
|
@@ -229,6 +231,7 @@ em engagement new <file> <slug> --downstream-of <ref> # a slice ke
|
|
|
229
231
|
em engagement new <file> <slug> --parallel <n> # how many slices of one level may be in flight at once
|
|
230
232
|
em engagement new <file> <slug> --by <name> # who created the engagement (createdBy)
|
|
231
233
|
em engagement new <file> <slug> --tracking <key> # an issue-tracker key or URL the slice PRs cite (a slice doc's own tracking: wins)
|
|
234
|
+
em engagement new <file> <slug> --pr-title <template> # PR title template for the slice PRs; {key} = tracking key, {slice} = slice name, {sliceKey} = slice key (default "{key}: {slice}", or "{slice}" without a key)
|
|
232
235
|
em engagement new <file> <slug> --force # overwrite an existing engagement file with this slug
|
|
233
236
|
em engagement plan <file> <slug> # the engagement's build plan: dependency levels over model.edges (loops-to excluded), and per slice its readiness, branch impl/<key>, base (always main — MIL-280), and any hold
|
|
234
237
|
em engagement plan <file> <slug> --json # print a JSON document instead of text (same document as the MCP engagement_plan tool)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: conform
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when checking a ratified event model (and its slice docs) for drift against the codebase
|
|
6
6
|
that implements it — advisory only, never a gate, never an unprompted edit — or when walking
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when structuring a draft event model into swimlanes and the four patterns (State Change,
|
|
6
6
|
State View, Automation, Translation), evaluating a model's structural completeness, or writing
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discover
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when starting a brand-new event model from scratch — greenfield discovery: brainstorming
|
|
6
6
|
past-tense events, storyboarding the happy path, finding the commands and read models — or when
|
|
@@ -63,7 +63,7 @@ All of these are checked by `em discover triage-check`; write the record so they
|
|
|
63
63
|
group** has only `reference` statements and **no storyline**: `storyline: null` on the group and
|
|
64
64
|
on its statements. It never joins a walkthrough storyline. The report lists reference-only
|
|
65
65
|
groups outside every storyline — operations no walkthrough touches; check these are not CRUD fill.
|
|
66
|
-
8. **One statement per claim.** A statement's normalised quote may not equal, contain
|
|
66
|
+
8. **One statement per claim.** A statement's normalised quote may not equal, contain, be contained in, or partially overlap (by character range in the normalised source) another statement's quote; the error names both. Ranges are taken at a quote's first occurrence in the normalised source, so a sentence repeated in the PRD can hide or produce an overlap.
|
|
67
67
|
9. **Quotes are verbatim** (Markdown emphasis marks, smart quotes and whitespace aside) and at
|
|
68
68
|
least 12 characters. A storyline `quote` is the **full** walkthrough span, start to finish.
|
|
69
69
|
|
|
@@ -85,7 +85,7 @@ event share one slice.
|
|
|
85
85
|
built only from `reference` statements (operations no walkthrough touches) is reference-only:
|
|
86
86
|
`storyline: null` on the group and on its statements. It never joins a walkthrough storyline,
|
|
87
87
|
and the report lists it outside every storyline for the human to inspect.
|
|
88
|
-
- A claim is quoted once: no statement's quote may equal, contain
|
|
88
|
+
- A claim is quoted once: no statement's quote may equal, contain, be contained in, or partially overlap by character range in the normalised source another's. Only `modeled`/`rewritten` walkthrough statements anchor a group; a `question` never does.
|
|
89
89
|
|
|
90
90
|
## Step 4 — Rewrite, don't drop
|
|
91
91
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: engagement
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when leading an engagement: building a named set of ratified event-modeling slices
|
|
6
6
|
(`em engagement`) into one independent PR per slice, each against main, by dispatching the
|
|
@@ -72,7 +72,11 @@ Run the shared preconditions first (tool check, bundle currency, locate the mode
|
|
|
72
72
|
5. **The engagement exists.** `em engagement status <model>.em <slug>`. If there is no such
|
|
73
73
|
engagement, ask the human which slices it covers (a list, a context, or "everything
|
|
74
74
|
downstream of X") and run `em engagement new <model>.em <slug> --slices a,b,c` (or
|
|
75
|
-
`--context <C>`, or `--downstream-of <ref>`) `--by "<their name>"`.
|
|
75
|
+
`--context <C>`, or `--downstream-of <ref>`) `--by "<their name>"`. First check the host
|
|
76
|
+
repo's PR-title convention (a commitlint config, a PR-title workflow, or the last few merged
|
|
77
|
+
PR titles) and pass `--pr-title "<template>"` when it differs from the default
|
|
78
|
+
`<key>: <slice name>`; placeholders are `{key}`, `{slice}` (display name) and `{sliceKey}`
|
|
79
|
+
(kebab key, usually what a lint wants). When `new` warns that the
|
|
76
80
|
selection has several unconnected components, relay its suggestion (one engagement each)
|
|
77
81
|
and let the human decide before going on.
|
|
78
82
|
|
|
@@ -118,10 +122,13 @@ For each slice the plan lists as not held:
|
|
|
118
122
|
4. Record it:
|
|
119
123
|
`em engagement set <model>.em <slug> <key> --state building --branch impl/<key> --base <base>`
|
|
120
124
|
5. Dispatch `em-implementer` (`em:em-implementer` under the plugin) on the implementer model.
|
|
121
|
-
Its prompt is ONLY the slice key, the absolute worktree path
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
Its prompt is ONLY the slice key, the absolute worktree path, the exact pull-request title
|
|
126
|
+
and, when there is one, the tracking key. The title is the slice's `prTitle` from
|
|
127
|
+
`em engagement plan --json` (GH #334), already resolved from the engagement's `--pr-title`
|
|
128
|
+
template or the default: pass it verbatim and never compose one. The tracking key is the
|
|
129
|
+
plan's `tracking` (GH #241), already resolved: the slice doc's own `tracking:` wins over the
|
|
130
|
+
engagement's `--tracking`, and it is `null` when neither is set (then say nothing about
|
|
131
|
+
tracking). Surface any `pr-title-fallback` pre-flight entry to the human. It reads
|
|
125
132
|
its own spec, the constitution and the implement contract. Give it no plan, no other slice,
|
|
126
133
|
and no merge instructions.
|
|
127
134
|
|
|
@@ -133,7 +140,7 @@ When the implementer returns a PR URL (and a per-invariant test map):
|
|
|
133
140
|
base: `gh pr view <url> --json baseRefName` must be `main`. If not, fix it with
|
|
134
141
|
`gh pr edit <url> --base main`. That is a lead step; the implementer never changes a base.
|
|
135
142
|
2. Dispatch `em-validator` (`em:em-validator`) with the slice key, the worktree path and the same
|
|
136
|
-
tracking key (when the slice has one)
|
|
143
|
+
tracking key (when the slice has one) and the same `prTitle`. It
|
|
137
144
|
returns one PASS/FAIL line per check and `OVERALL: PASS` or a failure.
|
|
138
145
|
3. On `OVERALL: PASS`: `em engagement set <model>.em <slug> <key> --state review`. Dispatch
|
|
139
146
|
`em-reviewer` (`em:em-reviewer`) with the slice key and the PR URL. Dispatch `em-critic`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: event-modeling
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when the user runs `/em:event-modeling` (with or without a phase name), or wants to resume an
|
|
6
6
|
event-modeling session without specifying which part of the process applies. Reads the model's
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: implement
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when building a single ratified event-modeling slice (status: ready-to-implement) into
|
|
6
6
|
merged, tested code — the one phase where the agent builds rather than facilitates. Gates on
|
|
@@ -35,6 +35,16 @@ every `## Open Questions` checkbox is checked, and no status/version/link incohe
|
|
|
35
35
|
— `gates` names each of those 4 conditions individually (`docBound`/`frontmatterUsable`/
|
|
36
36
|
`statusReady`/`noUncheckedOpenQuestions`) if you need to say which one is blocking.
|
|
37
37
|
|
|
38
|
+
`ready` is the named gates, plus error-severity diagnostics scoped to the slice, plus these warning-severity codes:
|
|
39
|
+
|
|
40
|
+
- `slice-ready-no-doc-bound`, `slice-ready-status-not-ready`, `slice-ready-open-questions-unchecked`: the gates themselves.
|
|
41
|
+
- `binding-missing-file`, `frontmatter-invalid`: the `frontmatterUsable` gate.
|
|
42
|
+
- `both-ends-of-a-flow/*`: a dangling slice is not a complete pattern.
|
|
43
|
+
- `fields-completeness/event-field-no-source`: the `assigned` marker contract (MIL-148).
|
|
44
|
+
- `invariants/public-command-without-invariants`: the API-first readiness requirement (`docs/process.md`).
|
|
45
|
+
|
|
46
|
+
A warning whose code is in this list blocks; any other warning never does (it stays in `diagnostics`; don't treat it as a blocker). `--strict` promotes advisory rules only.
|
|
47
|
+
|
|
38
48
|
**`ready: false` means stop** — with one named exception: a slice already `status: implemented`
|
|
39
49
|
with `driftSignal: in-sync` or `uncertified` (MIL-214) also reads `ready: false` (its
|
|
40
50
|
`statusReady` gate fails because nothing is newly ratified), and that specific case is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review
|
|
3
|
-
em-version: 1.18.
|
|
3
|
+
em-version: 1.18.1
|
|
4
4
|
description: >-
|
|
5
5
|
Use when starting em's live browser viewer (`em watch --serve`) so a team can watch a model
|
|
6
6
|
update in real time, or facilitating a SCHEDULED stakeholder walkthrough that steps through
|
|
@@ -66,7 +66,9 @@ review:` marker (mirrors `Last conformance:`).
|
|
|
66
66
|
|
|
67
67
|
Then, and only then: a slice with nothing left `- [ ]` and no open `issue` →
|
|
68
68
|
`em slice review <model>.em <key> --by <name>` (flips its doc to `status: reviewed` and records
|
|
69
|
-
`reviewedBy:`/`reviewedOn:`).
|
|
69
|
+
`reviewedBy:`/`reviewedOn:`). `em slice review` itself exits 1 on an unchecked Open Question
|
|
70
|
+
(`--allow-open` records a deliberately partial walk; `--again` re-records a review after a body edit).
|
|
71
|
+
Anything still open stays `draft` — the walkthrough doesn't decide
|
|
70
72
|
it, the next session or the open-questions list does.
|
|
71
73
|
|
|
72
74
|
**The facilitator never ratifies, never offers to ratify, and never suggests ratification in a
|