bmad-method-quarkus 1.0.0 → 1.0.2

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 (75) hide show
  1. package/package.json +1 -1
  2. package/src/bmm-skills/agents/bmad-quarkus-build/SKILL.md +112 -0
  3. package/src/bmm-skills/agents/bmad-quarkus-build/customize.toml +87 -0
  4. package/src/bmm-skills/agents/bmad-quarkus-build/skills/quarkus-architect/SKILL.md +108 -0
  5. package/src/bmm-skills/agents/bmad-quarkus-build/skills/quarkus-architect/customize.toml +62 -0
  6. package/src/bmm-skills/agents/bmad-quarkus-build/skills/quarkus-architect/references/architecture-review.md +17 -0
  7. package/src/bmm-skills/agents/bmad-quarkus-build/skills/quarkus-architect/references/prompt-quality-canon.md +79 -0
  8. package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-hexagonal-core/SKILL.md +1 -1
  9. package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/SKILL.md +1 -1
  10. package/src/bmm-skills/agents/bmad-quarkus-dev/references/prompt-quality-canon.md +79 -0
  11. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/SKILL.md +80 -0
  12. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/SKILL.md:Zone.Identifier +0 -0
  13. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/assets/module-help.csv +9 -0
  14. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/assets/module-help.csv:Zone.Identifier +0 -0
  15. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/assets/module.yaml +16 -0
  16. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/assets/module.yaml:Zone.Identifier +0 -0
  17. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/scripts/cleanup-legacy.py +287 -0
  18. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/scripts/cleanup-legacy.py:Zone.Identifier +0 -0
  19. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/scripts/merge-config.py +441 -0
  20. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/scripts/merge-config.py:Zone.Identifier +0 -0
  21. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/scripts/merge-help-csv.py +246 -0
  22. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/bqa-setup/scripts/merge-help-csv.py:Zone.Identifier +0 -0
  23. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-error-handling-i18n/SKILL.md +181 -0
  24. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-error-handling-i18n/SKILL.md:Zone.Identifier +0 -0
  25. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-grpc-services/SKILL.md +141 -0
  26. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-grpc-services/SKILL.md:Zone.Identifier +0 -0
  27. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-hexagonal-core/SKILL.md +392 -0
  28. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-hexagonal-core/SKILL.md:Zone.Identifier +0 -0
  29. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-kafka-messaging/SKILL.md +148 -0
  30. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-kafka-messaging/SKILL.md:Zone.Identifier +0 -0
  31. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-observability-otel/SKILL.md +180 -0
  32. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-observability-otel/SKILL.md:Zone.Identifier +0 -0
  33. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-openapi-tmforum/SKILL.md +128 -0
  34. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-openapi-tmforum/SKILL.md:Zone.Identifier +0 -0
  35. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-sql-jdbc-agroal/SKILL.md +245 -0
  36. package/src/bmm-skills/agents/bmad-quarkus-dev/skills/quarkus-sql-jdbc-agroal/SKILL.md:Zone.Identifier +0 -0
  37. package/src/bmm-skills/module.yaml +10 -3
  38. package/src/commands/dev-all.md +105 -0
  39. package/src/commands/quarkus-all.md +156 -0
  40. package/tools/installer/ide/_config-driven.js +43 -0
  41. package/tools/installer/ide/platform-codes.yaml +2 -0
  42. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/references/prompt-quality-canon.md +0 -0
  43. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/SKILL.md +0 -0
  44. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build/skills/bqa-setup}/SKILL.md:Zone.Identifier +0 -0
  45. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/assets/module-help.csv +0 -0
  46. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/assets/module-help.csv:Zone.Identifier +0 -0
  47. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/assets/module.yaml +0 -0
  48. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/assets/module.yaml:Zone.Identifier +0 -0
  49. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/scripts/cleanup-legacy.py +0 -0
  50. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/scripts/cleanup-legacy.py:Zone.Identifier +0 -0
  51. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/scripts/merge-config.py +0 -0
  52. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/scripts/merge-config.py:Zone.Identifier +0 -0
  53. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/scripts/merge-help-csv.py +0 -0
  54. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/bqa-setup/scripts/merge-help-csv.py:Zone.Identifier +0 -0
  55. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-error-handling-i18n/SKILL.md +0 -0
  56. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/bqa-setup → bmad-quarkus-build/skills/quarkus-error-handling-i18n}/SKILL.md:Zone.Identifier +0 -0
  57. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-grpc-services/SKILL.md +0 -0
  58. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-error-handling-i18n → bmad-quarkus-build/skills/quarkus-grpc-services}/SKILL.md:Zone.Identifier +0 -0
  59. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-grpc-services → bmad-quarkus-build/skills/quarkus-hexagonal-core}/SKILL.md:Zone.Identifier +0 -0
  60. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-kafka-messaging/SKILL.md +0 -0
  61. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-hexagonal-core → bmad-quarkus-build/skills/quarkus-kafka-messaging}/SKILL.md:Zone.Identifier +0 -0
  62. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-observability-otel/SKILL.md +0 -0
  63. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-kafka-messaging → bmad-quarkus-build/skills/quarkus-observability-otel}/SKILL.md:Zone.Identifier +0 -0
  64. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-openapi-tmforum/SKILL.md +0 -0
  65. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-observability-otel → bmad-quarkus-build/skills/quarkus-openapi-tmforum}/SKILL.md:Zone.Identifier +0 -0
  66. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-build}/skills/quarkus-sql-jdbc-agroal/SKILL.md +0 -0
  67. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-openapi-tmforum → bmad-quarkus-build/skills/quarkus-sql-jdbc-agroal}/SKILL.md:Zone.Identifier +0 -0
  68. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/.memlog.md +0 -0
  69. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/.memlog.md:Zone.Identifier +0 -0
  70. /package/src/bmm-skills/agents/{bmad-quarkus-architect/skills/quarkus-sql-jdbc-agroal → bmad-quarkus-dev}/SKILL.md:Zone.Identifier +0 -0
  71. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/customize.toml +0 -0
  72. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/customize.toml:Zone.Identifier +0 -0
  73. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/references/enrich-stories.md +0 -0
  74. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/references/enrich-stories.md:Zone.Identifier +0 -0
  75. /package/src/bmm-skills/agents/{bmad-quarkus-architect → bmad-quarkus-dev}/references/prompt-quality-canon.md:Zone.Identifier +0 -0
@@ -0,0 +1,105 @@
1
+ ---
2
+ description: Batch-run the BMAD dev-story workflow across all pending stories, with per-epic checkpoints and optional commit-per-story.
3
+ argument-hint: "[commit] [skip-review] [checkpoint] [epic=<id>] e.g. `/dev-all` or `/dev-all commit skip-review` or `/dev-all checkpoint epic=3`"
4
+ allowed-tools: Read, Edit, Write, Bash(git status:*), Bash(git add:*), Bash(git commit:*), Bash(git log:*)
5
+ ---
6
+
7
+ # Batch develop BMAD stories
8
+
9
+ You are running an **unattended batch** of the BMAD dev-story workflow. Work through
10
+ stories one at a time (preserving per-story context), but do **not** stop for
11
+ confirmation between stories. Only the per-epic checkpoint below is a hard stop.
12
+
13
+ ## The BMAD build cycle — run these EXACT commands per story
14
+
15
+ For each story, run the DEV agent's three-step cycle, in order:
16
+
17
+ 1. `bmad-create-story` — create the story file from the epic
18
+ 2. `bmad-dev-story` — implement the story
19
+ 3. `bmad-code-review` — quality validation
20
+
21
+ Invoke these real BMAD workflows — do NOT improvise your own create/implement/review
22
+ steps. They carry the architecture context and dev-notes inheritance that keep output
23
+ coherent.
24
+
25
+ > **Note on "fresh chats":** BMAD's docs say to repeat this cycle *in a fresh chat per
26
+ > story*, so each story gets a clean context window. This batch command runs multiple
27
+ > stories in one session, which sacrifices that guarantee for hands-off throughput.
28
+ > That's an acceptable trade for a small/well-understood epic. For a large epic, prefer
29
+ > running the cycle manually per story, or use the per-epic checkpoint below to resume
30
+ > each epic in a fresh session.
31
+
32
+ - **State file:** `sprint-status.yaml` (source of truth for story status)
33
+ - **Epic definitions:** `epics.md`
34
+
35
+ ## Arguments
36
+
37
+ Parse `$ARGUMENTS`:
38
+ - `commit` → enable **commit-per-story** (off by default). When enabled, after a
39
+ story passes review, run `git add -A && git commit` with a message like
40
+ `feat(<epic>): <story-id> <short title>`.
41
+ - `epic=<id>` → restrict the batch to a single epic.
42
+ - `checkpoint` → **pause** for confirmation at each epic boundary (off by default —
43
+ by default the run is fully unattended and does NOT stop between epics).
44
+ - `skip-review` → skip the `bmad-code-review` step. The per-story cycle becomes
45
+ `bmad-create-story` → `bmad-dev-story` only.
46
+
47
+ **Default (no `epic=` given): process ALL epics**, in order, running every not-done
48
+ story across the whole project **without stopping between epics**. So bare `/dev-all`
49
+ develops everything unattended; `/dev-all epic=2` develops only epic 2; add
50
+ `checkpoint` if you want a pause + summary before each new epic.
51
+
52
+ ## Loop
53
+
54
+ 1. **Read `sprint-status.yaml`.** Build the ordered list of stories whose status is
55
+ NOT `done` (e.g. `pending`, `ready`, `in-progress`, `blocked` should be surfaced —
56
+ see step 6 for blocked). Respect the `epic=` filter if present.
57
+
58
+ 2. **If the list is empty**, report "All stories already done" and stop.
59
+
60
+ 3. **For each story, in order:**
61
+ a. Announce which story you're starting (id + title).
62
+ b. Run the BMAD cycle for that story, in order:
63
+ `bmad-create-story` → `bmad-dev-story` → `bmad-code-review`.
64
+ **If `skip-review` is set, omit `bmad-code-review`** (run create → dev only).
65
+ c. If review passed (or `skip-review` is set and implementation completed without
66
+ error), set that story's status to `done` in `sprint-status.yaml`.
67
+ d. **If commit-per-story is enabled**, stage and commit (see Arguments). Keep each
68
+ commit scoped to that one story so a bad story can be rolled back in isolation.
69
+ e. Continue to the next story WITHOUT asking for confirmation.
70
+
71
+ 4. **Per-epic boundary.** When you finish the last story of an epic and more epics
72
+ remain, post a short summary: epic name, stories completed/blocked, tests added,
73
+ files touched, and anything that looked off (scope creep, tests worked around,
74
+ architectural surprises).
75
+ - **Default: do NOT stop.** Print the summary and immediately continue into the
76
+ next epic without asking for confirmation.
77
+ - **Only if `checkpoint` is set:** stop after the summary and wait for my go-ahead
78
+ before starting the next epic.
79
+
80
+ 5. **Context hygiene on long runs.** If you notice your context getting large mid-run,
81
+ say so in the nearest epic-boundary summary and recommend I resume the remaining
82
+ epics in a fresh session. Don't silently push through degraded context. (This is the
83
+ main risk of a fully unattended all-epics run — flag it rather than hide it.)
84
+
85
+ 6. **Error / blocked handling.** If a story fails `bmad-code-review` twice, or you hit an error you
86
+ can't resolve, or a dependency is missing:
87
+ - Set its status to `blocked` in `sprint-status.yaml` with a one-line reason.
88
+ - Do NOT mark it `done`. Do NOT keep retrying indefinitely.
89
+ - Skip it and continue with the remaining stories, then report all blocked stories
90
+ in the next checkpoint / final summary.
91
+
92
+ ## Final summary
93
+
94
+ When every eligible story is `done` or `blocked`, stop and report:
95
+ - Count done vs. blocked, grouped by epic
96
+ - List of blocked stories with reasons
97
+ - Commits made (if commit-per-story was on)
98
+ - Any follow-ups I should handle manually
99
+
100
+ ## Guardrails
101
+
102
+ - Never mark a story `done` unless its review actually passed.
103
+ - Never force-push or rewrite history. Commits only, and only when `commit` is set.
104
+ - If `sprint-status.yaml` and `epics.md` disagree about which stories exist, trust
105
+ `sprint-status.yaml` for status but flag the mismatch in the summary.
@@ -0,0 +1,156 @@
1
+ ---
2
+ description: Batch-build BMAD stories through Marcus (bmad-quarkus-build) — one skill invocation per story instead of the create-story/dev-story/code-review cycle.
3
+ argument-hint: "[commit] [checkpoint] [review] [force] [dry-run] [epic=<id>] [limit=<n>] e.g. `/quarkus-all` or `/quarkus-all commit epic=20` or `/quarkus-all dry-run`"
4
+ allowed-tools: Read, Edit, Write, Bash(git status:*), Bash(git add:*), Bash(git commit:*), Bash(git log:*), Bash(git diff:*), Bash(./mvnw:*), Bash(mvn:*)
5
+ ---
6
+
7
+ # Batch build BMAD stories with the Quarkus agent
8
+
9
+ You are running an **unattended batch** of Quarkus story implementation. Work through
10
+ stories one at a time (preserving per-story context), but do **not** stop for
11
+ confirmation between stories. Only the per-epic checkpoint below is a hard stop.
12
+
13
+ ## The cycle — ONE command per story
14
+
15
+ For each story, invoke exactly **one** skill:
16
+
17
+ ```
18
+ bmad-quarkus-build → "Marcus, implement story <story-key>"
19
+ ```
20
+
21
+ That is the whole per-story cycle. **Do NOT run `bmad-create-story`, `bmad-dev-story`,
22
+ or `bmad-code-review` as separate steps** — Marcus owns the full loop (story
23
+ preparation → red-green-refactor implementation → self-review against the ACs) and
24
+ routes into `bmad-build` plus whichever of the 7 Quarkus domain standards the story
25
+ touches (`quarkus-hexagonal-core`, `quarkus-sql-jdbc-agroal`,
26
+ `quarkus-error-handling-i18n`, `quarkus-openapi-tmforum`, `quarkus-grpc-services`,
27
+ `quarkus-kafka-messaging`, `quarkus-observability-otel`). Splitting the cycle back into
28
+ three commands loses that routing and the native-image/hexagonal review that comes with it.
29
+
30
+ Pass the story key in the invocation so Marcus dispatches directly instead of rendering
31
+ his menu (his activation Step 8 skips the menu when the intent is already named).
32
+
33
+ Marcus stays active across stories once activated — do not re-run his activation
34
+ greeting for every story, just hand him the next story key.
35
+
36
+ - **State file:** `_bmad-output/implementation-artifacts/sprint-status.yaml` (source of truth for story status)
37
+ - **Story files:** `_bmad-output/implementation-artifacts/<story-key>.md`
38
+ - **Epic definitions:** `governance/_bmad-output/planning-artifacts/epics.md`
39
+
40
+ > **Note on "fresh chats":** BMAD's docs say to repeat the build cycle *in a fresh chat
41
+ > per story*, so each story gets a clean context window. This batch command runs multiple
42
+ > stories in one session, which sacrifices that guarantee for hands-off throughput. That's
43
+ > an acceptable trade for a small/well-understood epic. For a large epic, prefer running
44
+ > `bmad-quarkus-build` manually per story, or use the per-epic checkpoint below to resume
45
+ > each epic in a fresh session.
46
+
47
+ ## Arguments
48
+
49
+ Parse `$ARGUMENTS`:
50
+ - `commit` → enable **commit-per-story** (off by default). After a story passes, run
51
+ `git add -A && git commit` with a message like `feat(epic-20): 20-1 create a digital identity`.
52
+ - `epic=<id>` → restrict the batch to a single epic (`epic=20`, `epic=256`).
53
+ - `limit=<n>` → stop after `n` stories have been completed this run.
54
+ - `checkpoint` → **pause** for confirmation at each epic boundary (off by default — by
55
+ default the run is fully unattended and does NOT stop between epics).
56
+ - `review` → add a separate `bmad-code-review` pass **after** Marcus finishes each story.
57
+ Off by default: Marcus already reviews his own output, and this is the one case where a
58
+ second command per story is intentional (fresh-context adversarial review).
59
+ - `force` → override the build-eligibility gate below. Requires that I said so explicitly;
60
+ never infer it.
61
+ - `dry-run` → print the ordered story list, the eligibility verdict per epic, and stop.
62
+ Change nothing. Use this first on any wide run.
63
+
64
+ **Default (no `epic=` given): process all *build-eligible* epics**, in order, running every
65
+ not-done story **without stopping between epics**.
66
+
67
+ ## Build eligibility — read this BEFORE touching any story
68
+
69
+ `sprint-status.yaml` carries BUILD-STATUS markers as trailing comments on epic headings.
70
+ **They are not statuses.** A `backlog` status on a marked epic means NOT STARTED — it does
71
+ **not** mean cleared to start.
72
+
73
+ - `[V1]` → **build-ready.** Epics 20, 21, 22, 23, 24, 26, 28, 30, 31.
74
+ - `[BUILD-PROHIBITED]` → **skip.** Epics 32, 33, 34, 35, 36 (36 also reassigned to BC-05).
75
+ Feature files exist, but building is forbidden — ADR-024 requires a P2→P10 re-run, never
76
+ a local fix.
77
+ - `[BUILD-PROHIBITED in part]` → **skip epic 27** unless I name a specific permitted story.
78
+ - `[UNCLASSIFIED]` → **skip.** Epics 25, 29, 37–45, 262, 263. Per OI-50 the build decision
79
+ belongs to the Product Owner + Architect Lead, not to us.
80
+ - `[BLOCKED]` → **skip.** Epics 256, 263.
81
+
82
+ Re-read the markers from the file rather than trusting this list — the file is the source of
83
+ truth and its scope can change. If `epic=<id>` names a non-eligible epic, refuse and say
84
+ which marker blocks it; only `force` overrides, and even then print the marker you are
85
+ overriding.
86
+
87
+ The whole file is scoped to **BC-01 only** (29 of the 263 epics in `epics.md`). The other
88
+ epics are absent by design — never treat their absence as done or as something to go build.
89
+
90
+ ## Loop
91
+
92
+ 1. **Read `sprint-status.yaml`.** Build the ordered list of stories whose status is NOT
93
+ `done`. Legal story statuses in this file are `backlog`, `ready-for-dev`, `in-progress`,
94
+ `review`, `done`. Apply the eligibility gate, then the `epic=` filter, then `limit=`.
95
+
96
+ 2. **If the list is empty**, report "No eligible stories pending" and stop.
97
+
98
+ 3. **For each story, in order:**
99
+ a. Announce which story you're starting (key + title + epic).
100
+ b. Invoke `bmad-quarkus-build` with that story key. One invocation. Nothing else.
101
+ c. If `review` is set, run `bmad-code-review` on the resulting diff.
102
+ d. On success — ACs met, tests written test-first and passing — set the story's status to
103
+ `done` in `sprint-status.yaml` and update `last_updated`.
104
+ e. If it's the epic's last story and all its stories are now `done`, set `epic-<id>: done`.
105
+ Set `epic-<id>: in-progress` when starting the epic's first story.
106
+ f. **If commit-per-story is enabled**, stage and commit. Keep each commit scoped to that
107
+ one story so a bad story can be rolled back in isolation.
108
+ g. Continue to the next story WITHOUT asking for confirmation.
109
+
110
+ 4. **Per-epic boundary.** When you finish the last story of an epic and more epics remain,
111
+ post a short summary: epic, stories completed/held, tests added, files touched, and
112
+ anything that looked off (scope creep, tests worked around, hexagonal or native-image
113
+ surprises, a domain standard that contradicted the story).
114
+ - **Default: do NOT stop.** Print the summary and continue into the next epic.
115
+ - **Only if `checkpoint` is set:** stop after the summary and wait for my go-ahead.
116
+
117
+ 5. **Context hygiene on long runs.** If your context is getting large mid-run, say so in the
118
+ nearest epic-boundary summary and recommend resuming the remaining epics in a fresh
119
+ session. Don't silently push through degraded context — that's the main risk of a fully
120
+ unattended all-epics run.
121
+
122
+ 6. **Error / held handling.** If Marcus can't complete a story, a second attempt fails, or a
123
+ dependency is missing:
124
+ - **Do not invent a `blocked` status** — this file's state machine has no such value and
125
+ the header says so explicitly. Leave the story at its current status and append a
126
+ trailing comment on its line: `# HELD 2026-xx-xx: <one-line reason>`.
127
+ - Do NOT mark it `done`. Do NOT retry indefinitely (two attempts max).
128
+ - Skip it and continue, then report all held stories in the next checkpoint / final summary.
129
+
130
+ ## Final summary
131
+
132
+ When every eligible story is `done` or held, stop and report:
133
+ - Count done vs. held, grouped by epic
134
+ - Held stories with reasons
135
+ - Epics skipped by the eligibility gate, with the marker that skipped them
136
+ - Commits made (if `commit` was on)
137
+ - Any follow-ups I should handle manually
138
+
139
+ ## Guardrails
140
+
141
+ - **One `bmad-quarkus-build` invocation per story.** Never decompose it back into
142
+ `bmad-create-story` → `bmad-dev-story` → `bmad-code-review`.
143
+ - Never mark a story `done` unless its tests actually pass and every AC is met. ACs in these
144
+ stories are verbatim Gherkin — do not edit, reword, or renumber them.
145
+ - Never start a story in a `[BUILD-PROHIBITED]`, `[BUILD-PROHIBITED in part]`,
146
+ `[UNCLASSIFIED]`, or `[BLOCKED]` epic without explicit `force`.
147
+ - FR-1243 forbids marking anything Done while a blocker is in scope, and the 2026-08-13
148
+ readiness report reads NEEDS WORK. This command asserts no gate verdict and closes no open
149
+ item — it only advances story statuses it actually completed.
150
+ - Never force-push or rewrite history. Commits only, and only when `commit` is set.
151
+ - `sprint-status.yaml` has a stale `story_location:` pointing at a macOS path
152
+ (`/Users/diego/...`). Trust the real repo path `_bmad-output/implementation-artifacts`;
153
+ flag the mismatch in the final summary rather than editing it mid-run.
154
+ - If `sprint-status.yaml` and `epics.md` disagree about which stories exist, trust
155
+ `sprint-status.yaml` for status and flag the mismatch. Declared-vs-actual epic count gaps
156
+ (the file notes one) are a PM finding — report, don't reconcile.
@@ -4,6 +4,7 @@ const yaml = require('yaml');
4
4
  const prompts = require('../prompts');
5
5
  const csv = require('csv-parse/sync');
6
6
  const { BMAD_FOLDER_NAME } = require('./shared/path-utils');
7
+ const { getSourcePath } = require('../project-root');
7
8
  const { getInstalledCanonicalIds, isBmadOwnedEntry } = require('./shared/installed-skills');
8
9
 
9
10
  // Reserved OpenCode slash commands. A skill whose canonicalId collides with
@@ -255,6 +256,7 @@ class ConfigDrivenIdeSetup {
255
256
 
256
257
  if (config.commands_target_dir) {
257
258
  results.commands = await this.installCommandPointers(projectDir, bmadDir, config, options);
259
+ results.customCommands = await this.installCustomCommands(projectDir, config, options);
258
260
  }
259
261
 
260
262
  await this.printSummary(results, target_dir, options);
@@ -301,6 +303,11 @@ class ConfigDrivenIdeSetup {
301
303
  fallbackDescription: 0,
302
304
  };
303
305
 
306
+ // If filtered to custom commands only, skip generating pointer files for skills
307
+ if (config.commands_filter === 'custom-only') {
308
+ return result;
309
+ }
310
+
304
311
  const csvPath = path.join(bmadDir, '_config', 'skill-manifest.csv');
305
312
  if (!(await fs.pathExists(csvPath))) return result;
306
313
 
@@ -404,6 +411,42 @@ class ConfigDrivenIdeSetup {
404
411
  return result;
405
412
  }
406
413
 
414
+ /**
415
+ * Copy static/custom command markdown files from src/commands/ into commands_target_dir.
416
+ * @param {string} projectDir - Project directory
417
+ * @param {Object} config - Installer config; reads commands_target_dir.
418
+ * @param {Object} options - Setup options.
419
+ * @returns {Promise<Object>} { copied, writeFailures }
420
+ */
421
+ async installCustomCommands(projectDir, config, options = {}) {
422
+ const result = { copied: 0, writeFailures: 0 };
423
+ if (!config.commands_target_dir) return result;
424
+
425
+ const sourceCommandsDir = getSourcePath('commands');
426
+ if (!(await fs.pathExists(sourceCommandsDir))) return result;
427
+
428
+ const commandsPath = path.join(projectDir, config.commands_target_dir);
429
+ await fs.ensureDir(commandsPath);
430
+
431
+ const files = await fs.readdir(sourceCommandsDir);
432
+ for (const file of files) {
433
+ if (file.endsWith('.md')) {
434
+ const srcFile = path.join(sourceCommandsDir, file);
435
+ const destFile = path.join(commandsPath, file);
436
+ try {
437
+ await fs.copy(srcFile, destFile, { overwrite: true });
438
+ result.copied++;
439
+ } catch (error) {
440
+ result.writeFailures++;
441
+ if (!options.silent) {
442
+ await prompts.log.warn(`Failed to copy custom command ${file}: ${error.message}`);
443
+ }
444
+ }
445
+ }
446
+ }
447
+ return result;
448
+ }
449
+
407
450
  /**
408
451
  * Install verbatim native SKILL.md directories from skill-manifest.csv.
409
452
  * Copies the entire source directory as-is into the IDE skill directory.
@@ -62,6 +62,8 @@ platforms:
62
62
  installer:
63
63
  target_dir: .claude/skills
64
64
  global_target_dir: ~/.claude/skills
65
+ commands_target_dir: .claude/commands
66
+ commands_filter: custom-only
65
67
 
66
68
  cline:
67
69
  name: "Cline"