@eventmodelers/cli 1.0.97 → 1.0.98
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/README.md +45 -2
- package/cli.js +59 -5
- package/lib/modeling-exec.js +4 -86
- package/package.json +6 -1
- package/shared/build-kit/README.md +12 -4
- package/shared/build-kit/lib/mcp-register.js +96 -0
- package/shared/build-kit/lib/ralph.js +49 -0
- package/shared/build-kit/lib/tracing.js +6 -5
- package/shared/build-kit/ralph-claude.js +4 -1
- package/shared/build-kit/ralph-exec.js +8 -8
- package/shared/skills/learn-eventmodelers-api/SKILL.md +0 -1
- package/shared/skills/request-feedback/SKILL.md +23 -32
- package/stacks/axon/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/axon/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/axon/templates/build-kit/lib/prompt.md +2 -2
- package/stacks/blank/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/blank/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/blank/templates/build-kit/lib/prompt.md +2 -9
- package/stacks/kurrent/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/kurrent/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/kurrent/templates/build-kit/lib/prompt.md +2 -2
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +4 -4
- package/stacks/node/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/node/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/node/templates/build-kit/lib/prompt.md +2 -2
- package/stacks/opencqrs/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/opencqrs/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/opencqrs/templates/build-kit/lib/prompt.md +2 -2
- package/stacks/react/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/react/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/react/templates/build-kit/lib/prompt.md +2 -9
- package/stacks/supabase/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/supabase/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/supabase/templates/build-kit/lib/prompt.md +2 -2
- package/stacks/supabase-react/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/supabase-react/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/supabase-react/templates/build-kit/lib/prompt.md +2 -9
- package/stacks/umadb/templates/build-kit/CLAUDE.md +1 -6
- package/stacks/umadb/templates/build-kit/lib/backend-prompt.md +1 -8
- package/stacks/umadb/templates/build-kit/lib/prompt.md +2 -2
- package/stacks/modeling-kit/templates/.claude/settings.local.json +0 -13
|
@@ -91,12 +91,7 @@ When starting to work on a slice, invoke the `update-slice-status` skill with `I
|
|
|
91
91
|
**CRITICAL: You MUST always use the provided skills to build slices. NEVER implement a slice manually.**
|
|
92
92
|
**ALL fields, event names, command names, and business rules MUST come exclusively from slice.json. Do NOT invent, assume, or guess any field or logic not present in the slice definition.**
|
|
93
93
|
|
|
94
|
-
**If,
|
|
95
|
-
a decision you need in order to proceed — do not guess, and do not build anyway.** Invoke the
|
|
96
|
-
`request-feedback` skill with the specific question; it posts the question as a comment on the slice
|
|
97
|
-
and marks it `Blocked`, and you then stop work on this slice for this run. This is an escalation path,
|
|
98
|
-
not a routine step — read `slice.json` and the matching build skill's own instructions fully first;
|
|
99
|
-
most slices are fully specified and need none of this.
|
|
94
|
+
**Default: make a reasonable assumption and build the slice.** If a detail is unclear or missing (an example value, a field type, a status mapping, a referenced event that isn't modeled yet, ...), pick the most sensible interpretation from `slice.json`, its specifications and the surrounding model, build it, and record each assumption in one line in `progress.txt` and as a code comment. Ambiguity alone is never a reason to stop. **Only if the slice literally cannot be built** — nothing runnable can be produced even with sensible assumptions — invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked`. That must be the absolute exception; a `Blocked` slice should mean "impossible without a human", never "the agent preferred to ask".
|
|
100
95
|
|
|
101
96
|
**Exception: a missing `apiEndpoint`** (no backend endpoint/table decided yet) is a partial version of
|
|
102
97
|
this — flag it, but don't fully stop. `build-state-change`/`build-state-view` Step 1 cover the exact
|
|
@@ -40,14 +40,7 @@ You work within **exactly ONE context at a time** — the one named in `.build-k
|
|
|
40
40
|
|
|
41
41
|
## Escalating Ambiguity
|
|
42
42
|
|
|
43
|
-
**
|
|
44
|
-
in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the
|
|
45
|
-
specific question; it posts the question as a comment on the slice and marks it `Blocked` on the
|
|
46
|
-
board (overriding the `InProgress` set in step 5), then stop this iteration without finishing the
|
|
47
|
-
build — reply `<promise>DONE</promise>` as if the iteration's work was to raise the question, not to
|
|
48
|
-
implement the slice. This is an escalation path, not a routine step — read the slice.json and the
|
|
49
|
-
matching build skill's own instructions fully first; most slices are fully specified and need none of
|
|
50
|
-
this.
|
|
43
|
+
**Default: make a reasonable assumption and build the slice.** If a detail is unclear or missing (an example value, a field type, a status mapping, a referenced event that isn't modeled yet, ...), pick the most sensible interpretation from `slice.json`, its specifications and the surrounding model, build it, and record each assumption in one line in `progress.txt` and as a code comment. Ambiguity alone is never a reason to stop. **Only if the slice literally cannot be built** — nothing runnable can be produced even with sensible assumptions — invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked`. That must be the absolute exception; a `Blocked` slice should mean "impossible without a human", never "the agent preferred to ask".
|
|
51
44
|
|
|
52
45
|
## Progress Report Format
|
|
53
46
|
|
|
@@ -52,7 +52,7 @@ This is the build trigger. Setting `InProgress` and building are one atomic step
|
|
|
52
52
|
|
|
53
53
|
**Claim conflict**: if this call reports the slice is already in `InProgress` (or any status other than `Planned`), another agent already claimed it first — this is expected, not an error. Log it in `progress.txt`, drop this task without building, and continue the loop (the next task will naturally cover the next slice). Do not retry.
|
|
54
54
|
|
|
55
|
-
2.
|
|
55
|
+
2. Run `/load-slice sliceId=<payload.sliceId>` to fetch the full slice, then read the slice definition from `.build-kit/.slices/<contextSlug>/<sliceFolder>/slice.json`. The runner keeps a `slice.json` fresh from a summary endpoint, so a file holding only `id`, `title`, `status` and `sliceType` is that stub, not an empty slice — never conclude a slice has no elements from it. Only if the full fetch itself returns no commands/events/read models/fields is the slice actually empty.
|
|
56
56
|
|
|
57
57
|
3. Determine the **slice type** from `sliceType` in the slice.json:
|
|
58
58
|
- **`STATE_CHANGE`** → invoke `/build-state-change`
|
|
@@ -95,14 +95,7 @@ After completing a task, remove it from the array and write the updated array ba
|
|
|
95
95
|
|
|
96
96
|
## Escalating Ambiguity
|
|
97
97
|
|
|
98
|
-
**
|
|
99
|
-
in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the
|
|
100
|
-
specific question; it posts the question as a comment on the slice and marks it `Blocked` on the
|
|
101
|
-
board (overriding the `InProgress` set earlier), then stop this iteration without finishing the
|
|
102
|
-
build — reply `<promise>DONE</promise>` as if the iteration's work was to raise the question, not to
|
|
103
|
-
implement the slice. This is an escalation path, not a routine step — read the slice.json and the
|
|
104
|
-
matching build skill's own instructions fully first; most slices are fully specified and need none of
|
|
105
|
-
this.
|
|
98
|
+
**Default: make a reasonable assumption and build the slice.** If a detail is unclear or missing (an example value, a field type, a status mapping, a referenced event that isn't modeled yet, ...), pick the most sensible interpretation from `slice.json`, its specifications and the surrounding model, build it, and record each assumption in one line in `progress.txt` and as a code comment. Ambiguity alone is never a reason to stop. **Only if the slice literally cannot be built** — nothing runnable can be produced even with sensible assumptions — invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked`. That must be the absolute exception; a `Blocked` slice should mean "impossible without a human", never "the agent preferred to ask".
|
|
106
99
|
|
|
107
100
|
**Exception: a missing `apiEndpoint`** (no backend endpoint/table decided yet) is a partial version of
|
|
108
101
|
this — flag it, but don't fully stop. `build-state-change`/`build-state-view` Step 1 cover the exact
|
|
@@ -48,12 +48,7 @@ When starting to work on a slice, invoke the `update-slice-status` skill with `I
|
|
|
48
48
|
**CRITICAL: You MUST always use the provided skills to build slices. NEVER implement a slice manually.**
|
|
49
49
|
**ALL fields, event names, command names, and business rules MUST come exclusively from slice.json. Do NOT invent, assume, or guess any field or logic not present in the slice definition.**
|
|
50
50
|
|
|
51
|
-
**If,
|
|
52
|
-
a decision you need in order to proceed — do not guess, and do not build anyway.** Invoke the
|
|
53
|
-
`request-feedback` skill with the specific question; it posts the question as a comment on the slice
|
|
54
|
-
and marks it `Blocked`, and you then stop work on this slice for this run. This is an escalation path,
|
|
55
|
-
not a routine step — read `slice.json` and the matching build skill's own instructions fully first;
|
|
56
|
-
most slices are fully specified and need none of this.
|
|
51
|
+
**Default: make a reasonable assumption and build the slice.** If a detail is unclear or missing (an example value, a field type, a status mapping, a referenced event that isn't modeled yet, ...), pick the most sensible interpretation from `slice.json`, its specifications and the surrounding model, build it, and record each assumption in one line in `progress.txt` and as a code comment. Ambiguity alone is never a reason to stop. **Only if the slice literally cannot be built** — nothing runnable can be produced even with sensible assumptions — invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked`. That must be the absolute exception; a `Blocked` slice should mean "impossible without a human", never "the agent preferred to ask".
|
|
57
52
|
|
|
58
53
|
When asked to build a slice, always follow this flow:
|
|
59
54
|
|
|
@@ -50,14 +50,7 @@ You work within **exactly ONE context at a time** — the one named in `.build-k
|
|
|
50
50
|
|
|
51
51
|
## Escalating Ambiguity
|
|
52
52
|
|
|
53
|
-
**
|
|
54
|
-
in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the
|
|
55
|
-
specific question; it posts the question as a comment on the slice and marks it `Blocked` on the
|
|
56
|
-
board (overriding the `InProgress` set earlier), then stop this iteration without finishing the
|
|
57
|
-
build — reply `<promise>DONE</promise>` as if the iteration's work was to raise the question, not to
|
|
58
|
-
implement the slice. This is an escalation path, not a routine step — read the slice.json and the
|
|
59
|
-
matching build skill's own instructions fully first; most slices are fully specified and need none of
|
|
60
|
-
this.
|
|
53
|
+
**Default: make a reasonable assumption and build the slice.** If a detail is unclear or missing (an example value, a field type, a status mapping, a referenced event that isn't modeled yet, ...), pick the most sensible interpretation from `slice.json`, its specifications and the surrounding model, build it, and record each assumption in one line in `progress.txt` and as a code comment. Ambiguity alone is never a reason to stop. **Only if the slice literally cannot be built** — nothing runnable can be produced even with sensible assumptions — invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked`. That must be the absolute exception; a `Blocked` slice should mean "impossible without a human", never "the agent preferred to ask".
|
|
61
54
|
|
|
62
55
|
## Progress Report Format
|
|
63
56
|
|
|
@@ -48,13 +48,13 @@ Inspect the `sliceStatus` in the payload:
|
|
|
48
48
|
|
|
49
49
|
This is the build trigger. Setting `InProgress` and building are one atomic step:
|
|
50
50
|
|
|
51
|
-
**
|
|
51
|
+
**Default: make a reasonable assumption and build the slice.** If a detail is unclear or missing (an example value, a field type, a status mapping, a referenced event that isn't modeled yet, ...), pick the most sensible interpretation from `slice.json`, its specifications and the surrounding model, build it, and record each assumption in one line in `progress.txt` and as a code comment. Ambiguity alone is never a reason to stop. **Only if the slice literally cannot be built** — nothing runnable can be produced even with sensible assumptions — invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked`. That must be the absolute exception; a `Blocked` slice should mean "impossible without a human", never "the agent preferred to ask".
|
|
52
52
|
|
|
53
53
|
1. Immediately call `/update-slice-status` to set the slice to `InProgress` on the board.
|
|
54
54
|
|
|
55
55
|
**Claim conflict**: if this call reports the slice is already in `InProgress` (or any status other than `Planned`), another agent already claimed it first — this is expected, not an error. Log it in `progress.txt`, drop this task without building, and continue the loop (the next task will naturally cover the next slice). Do not retry.
|
|
56
56
|
|
|
57
|
-
2.
|
|
57
|
+
2. Run `/load-slice sliceId=<payload.sliceId>` to fetch the full slice, then read the slice definition from `.build-kit/.slices/<contextSlug>/<sliceFolder>/slice.json`. The runner keeps a `slice.json` fresh from a summary endpoint, so a file holding only `id`, `title`, `status` and `sliceType` is that stub, not an empty slice — never conclude a slice has no elements from it. Only if the full fetch itself returns no commands/events/read models/fields is the slice actually empty.
|
|
58
58
|
|
|
59
59
|
3. Determine the **slice type** from the slice.json:
|
|
60
60
|
- **Translation** — `sliceType === "TRANSLATION"` → read `description` and `notes` from slice.json for hints; default to `/build-automation` if nothing else is specified
|