@eventmodelers/cli 1.0.96 → 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.
Files changed (41) hide show
  1. package/README.md +70 -3
  2. package/cli.js +113 -6
  3. package/lib/modeling-exec.js +4 -86
  4. package/package.json +6 -1
  5. package/shared/build-kit/README.md +22 -4
  6. package/shared/build-kit/lib/mcp-register.js +96 -0
  7. package/shared/build-kit/lib/ralph.js +49 -0
  8. package/shared/build-kit/lib/tracing.js +6 -5
  9. package/shared/build-kit/ralph-claude.js +4 -1
  10. package/shared/build-kit/ralph-exec.js +8 -8
  11. package/shared/skills/learn-eventmodelers-api/SKILL.md +0 -1
  12. package/shared/skills/request-feedback/SKILL.md +23 -32
  13. package/stacks/axon/templates/build-kit/CLAUDE.md +1 -6
  14. package/stacks/axon/templates/build-kit/lib/backend-prompt.md +1 -8
  15. package/stacks/axon/templates/build-kit/lib/prompt.md +2 -2
  16. package/stacks/blank/templates/build-kit/CLAUDE.md +1 -6
  17. package/stacks/blank/templates/build-kit/lib/backend-prompt.md +1 -8
  18. package/stacks/blank/templates/build-kit/lib/prompt.md +2 -9
  19. package/stacks/kurrent/templates/build-kit/CLAUDE.md +1 -6
  20. package/stacks/kurrent/templates/build-kit/lib/backend-prompt.md +1 -8
  21. package/stacks/kurrent/templates/build-kit/lib/prompt.md +2 -2
  22. package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +4 -4
  23. package/stacks/node/templates/build-kit/CLAUDE.md +1 -6
  24. package/stacks/node/templates/build-kit/lib/backend-prompt.md +1 -8
  25. package/stacks/node/templates/build-kit/lib/prompt.md +2 -2
  26. package/stacks/opencqrs/templates/build-kit/CLAUDE.md +1 -6
  27. package/stacks/opencqrs/templates/build-kit/lib/backend-prompt.md +1 -8
  28. package/stacks/opencqrs/templates/build-kit/lib/prompt.md +2 -2
  29. package/stacks/react/templates/build-kit/CLAUDE.md +1 -6
  30. package/stacks/react/templates/build-kit/lib/backend-prompt.md +1 -8
  31. package/stacks/react/templates/build-kit/lib/prompt.md +2 -9
  32. package/stacks/supabase/templates/build-kit/CLAUDE.md +1 -6
  33. package/stacks/supabase/templates/build-kit/lib/backend-prompt.md +1 -8
  34. package/stacks/supabase/templates/build-kit/lib/prompt.md +2 -2
  35. package/stacks/supabase-react/templates/build-kit/CLAUDE.md +1 -6
  36. package/stacks/supabase-react/templates/build-kit/lib/backend-prompt.md +1 -8
  37. package/stacks/supabase-react/templates/build-kit/lib/prompt.md +2 -9
  38. package/stacks/umadb/templates/build-kit/CLAUDE.md +1 -6
  39. package/stacks/umadb/templates/build-kit/lib/backend-prompt.md +1 -8
  40. package/stacks/umadb/templates/build-kit/lib/prompt.md +2 -2
  41. package/stacks/modeling-kit/templates/.claude/settings.local.json +0 -13
@@ -32,12 +32,7 @@ When starting to work on a slice, invoke the `update-slice-status` skill with `I
32
32
  **CRITICAL: You MUST always use the provided skills to build slices. NEVER implement a slice manually.**
33
33
  **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.**
34
34
 
35
- **If, at any point below, the slice's requirements are genuinely ambiguous, contradictory, or missing
36
- a decision you need in order to proceed — do not guess, and do not build anyway.** Invoke the
37
- `request-feedback` skill with the specific question; it posts the question as a comment on the slice
38
- and marks it `Blocked`, and you then stop work on this slice for this run. This is an escalation path,
39
- not a routine step — read `slice.json` and the matching build skill's own instructions fully first;
40
- most slices are fully specified and need none of this.
35
+ **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".
41
36
 
42
37
  When asked to build a slice, always follow this flow:
43
38
 
@@ -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
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need
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. Read the slice definition from `.build-kit/.slices/<contextSlug>/<sliceFolder>/slice.json` (written by `/load-slice`).
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 the slice.json:
58
58
  - **Translation** — `sliceType === "TRANSLATION"` → read `description` and `notes` from slice.json for hints; default to `/build-automation` if nothing else is specified
@@ -93,14 +93,7 @@ After completing a task, remove it from the array and write the updated array ba
93
93
 
94
94
  ## Escalating Ambiguity
95
95
 
96
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need
97
- in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the
98
- specific question; it posts the question as a comment on the slice and marks it `Blocked` on the
99
- board (overriding the `InProgress` set earlier), then stop this iteration without finishing the
100
- build — reply `<promise>DONE</promise>` as if the iteration's work was to raise the question, not to
101
- implement the slice. This is an escalation path, not a routine step — read the slice.json and the
102
- matching build skill's own instructions fully first; most slices are fully specified and need none of
103
- this.
96
+ **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".
104
97
 
105
98
  ## Progress Report Format
106
99
 
@@ -37,12 +37,7 @@ When starting to work on a slice, invoke the `update-slice-status` skill with `I
37
37
  **CRITICAL: You MUST always use the provided skills to build slices. NEVER implement a slice manually.**
38
38
  **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.**
39
39
 
40
- **If, at any point below, the slice's requirements are genuinely ambiguous, contradictory, or missing
41
- a decision you need in order to proceed — do not guess, and do not build anyway.** Invoke the
42
- `request-feedback` skill with the specific question; it posts the question as a comment on the slice
43
- and marks it `Blocked`, and you then stop work on this slice for this run. This is an escalation path,
44
- not a routine step — read `slice.json` and the matching build skill's own instructions fully first;
45
- most slices are fully specified and need none of this.
40
+ **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".
46
41
 
47
42
  When asked to build a slice, always follow this flow:
48
43
 
@@ -44,14 +44,7 @@ You work within **exactly ONE context at a time** — the one named in `.build-k
44
44
 
45
45
  ## Escalating Ambiguity
46
46
 
47
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need
48
- in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the
49
- specific question; it posts the question as a comment on the slice and marks it `Blocked` on the
50
- board (overriding the `InProgress` set earlier), then stop this iteration without finishing the
51
- build — reply `<promise>DONE</promise>` as if the iteration's work was to raise the question, not to
52
- implement the slice. This is an escalation path, not a routine step — read the slice.json and the
53
- matching build skill's own instructions fully first; most slices are fully specified and need none of
54
- this.
47
+ **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".
55
48
 
56
49
  ## Progress Report Format
57
50
 
@@ -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
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked` (superseding the `InProgress` set in step 1), then drop this task without finishing the build. This is an escalation path, not a routine step — most slices are fully specified.
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. Read the slice definition from `.build-kit/.slices/<contextSlug>/<sliceFolder>/slice.json` (written by `/load-slice`).
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
  - **Webhook** — `sliceType === "WEBHOOK"` → invoke `/build-webhook`
@@ -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, at any point below, the slice's requirements are genuinely ambiguous, contradictory, or missing
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
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need
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. Read the slice definition from `.build-kit/.slices/<contextSlug>/<sliceFolder>/slice.json` (written by `/load-slice`).
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
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need
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, at any point below, the slice's requirements are genuinely ambiguous, contradictory, or missing
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
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need
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
- **If the slice's requirements are genuinely ambiguous, contradictory, or missing a decision you need in order to proceed — do not guess, and do not build anyway.** Invoke `/request-feedback` with the specific question; it posts the question as a comment on the slice and marks it `Blocked` (superseding the `InProgress` set in step 1), then drop this task without finishing the build. This is an escalation path, not a routine step — most slices are fully specified.
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. Read the slice definition from `.build-kit/.slices/<contextSlug>/<sliceFolder>/slice.json` (written by `/load-slice`).
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
@@ -1,13 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Skill(connect)",
5
- "Bash(curl *)",
6
- "Bash(python3 -c \"import uuid; print\\(uuid.uuid4\\(\\)\\)\")",
7
- "Bash(python3 -c ' *)",
8
- "Read(//tmp/**)",
9
- "Bash(python3 -m json.tool)",
10
- "Bash(npm run *)"
11
- ]
12
- }
13
- }