bmad-method 6.6.1-next.6 → 6.6.1-next.8
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/evals/bmm-skills/bmad-product-brief/evals.json +24 -55
- package/package.json +1 -1
- package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +18 -17
- package/src/bmm-skills/1-analysis/bmad-product-brief/customize.toml +30 -2
- package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/customize.toml +3 -13
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/SKILL.md +16 -90
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/SKILL.md +16 -88
- package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +90 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +76 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +158 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +30 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/validation-report-template.html +190 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +113 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/facilitation-guide.md +79 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +24 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/validation-render.md +58 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/scripts/render-validation-html.py +290 -0
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/SKILL.md +16 -90
- package/src/bmm-skills/module-help.csv +2 -4
- package/src/core-skills/bmad-customize/SKILL.md +1 -1
- package/src/core-skills/bmad-help/SKILL.md +2 -2
- package/tools/installer/modules/external-manager.js +14 -2
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/distillate.md +0 -28
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/data/domain-complexity.csv +0 -15
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/data/prd-purpose.md +0 -197
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/data/project-types.csv +0 -11
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-01-init.md +0 -186
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-01b-continue.md +0 -161
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-02-discovery.md +0 -210
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-02b-vision.md +0 -142
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -158
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-03-success.md +0 -214
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-04-journeys.md +0 -201
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-05-domain.md +0 -194
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-06-innovation.md +0 -211
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-07-project-type.md +0 -222
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-08-scoping.md +0 -263
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-09-functional.md +0 -219
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -230
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-11-polish.md +0 -221
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/steps-c/step-12-complete.md +0 -121
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/templates/prd-template.md +0 -10
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/data/prd-purpose.md +0 -197
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01-discovery.md +0 -242
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -204
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-02-review.md +0 -245
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-03-edit.md +0 -250
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +0 -165
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +0 -15
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +0 -197
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/data/project-types.csv +0 -11
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -221
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -188
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -206
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -171
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -211
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -225
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -214
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -202
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -240
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -260
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -206
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -261
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -239
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -230
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"skill_name": "bmad-product-brief",
|
|
3
|
-
"_design_notes": "
|
|
3
|
+
"_design_notes": "Single-shot evals across two patterns. Pattern A (A1-A8) tests artifact correctness given complete inputs in headless mode. Pattern B tests process discipline (decision log fidelity, polish execution, intent boundaries) by inspecting transcript and side-artifacts. Facilitation/conversation-quality evals are deferred to a future multi-turn simulator.",
|
|
4
4
|
"evals": [
|
|
5
5
|
{
|
|
6
6
|
"id": "A1",
|
|
7
7
|
"_pattern": "artifact-correctness",
|
|
8
|
-
"prompt": "Run headless. Create a product brief for InsuLens.\n\nContext (use exactly this
|
|
9
|
-
"expected_output": "A run folder containing brief.md (with valid YAML frontmatter)
|
|
8
|
+
"prompt": "Run headless. Create a product brief for InsuLens.\n\nContext (use exactly this — do not invent):\n- Product: a smartphone app that pairs with off-the-shelf $200 thermal imaging accessories (FLIR ONE Pro and Seek Compact Pro). The app guides homeowners through a structured walkthrough and produces a professional-grade insulation audit in under 20 minutes.\n- Target: suburban homeowners aged 35-65 with houses built before 2000 (poor original insulation, rising energy bills).\n- Validation evidence: 50 user interviews completed in Q4 2025; 78% expressed willingness to pay $49 for a one-time audit if results were credible.\n- Stakes: this brief is the primary input investors will read before our first Series A pitch call.\n- Hardware dependency: requires a thermal imaging accessory (we do not manufacture hardware).\n- Known unknowns: insurance/warranty implications of homeowner-driven audits; whether the 78% intent translates to paid conversion at scale.\nRight-size for investor-stage rigor. Output a JSON status block at the end with status, intent, and artifact paths.",
|
|
9
|
+
"expected_output": "A run folder containing brief.md (with valid YAML frontmatter) and decision-log.md. Brief is 1-2 pages, addresses target audience, hardware dependency, validation evidence, and surfaces unknowns alongside knowns. Final assistant message includes JSON with status='complete', intent='create', and artifact paths.",
|
|
10
10
|
"files": [],
|
|
11
11
|
"expectations": [
|
|
12
12
|
"A run folder is created with brief.md and decision-log.md",
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
"brief.md references the 50-user interview validation OR the 78% willingness-to-pay finding",
|
|
19
19
|
"brief.md surfaces at least one explicit unknown or unvalidated assumption",
|
|
20
20
|
"brief.md does not introduce facts absent from the input prompt (no invented competitors, fabricated metrics, or unstated partnerships)",
|
|
21
|
-
"distillate.md exists in the run folder",
|
|
22
21
|
"The final assistant message contains a JSON object with keys 'status', 'intent', and at least one artifact path",
|
|
23
22
|
"The JSON 'intent' value is 'create'"
|
|
24
23
|
]
|
|
@@ -32,14 +31,14 @@
|
|
|
32
31
|
"expectations": [
|
|
33
32
|
"The final assistant message contains a JSON object with key 'status' set to 'blocked'",
|
|
34
33
|
"The JSON output includes a 'reason' field explaining what context is missing",
|
|
35
|
-
"If brief.md exists at all, its body content (excluding frontmatter) is fewer than 100 words OR is a placeholder skeleton
|
|
34
|
+
"If brief.md exists at all, its body content (excluding frontmatter) is fewer than 100 words OR is a placeholder skeleton — the skill did not invent a product",
|
|
36
35
|
"The transcript contains no clarifying questions sent back to the user (headless mode honored)"
|
|
37
36
|
]
|
|
38
37
|
},
|
|
39
38
|
{
|
|
40
39
|
"id": "A3",
|
|
41
40
|
"_pattern": "artifact-correctness",
|
|
42
|
-
"prompt": "Run headless. Create a brief for our neighborhood compost coordinator app idea
|
|
41
|
+
"prompt": "Run headless. Create a brief for our neighborhood compost coordinator app idea — we are moving forward with it. Q2 brainstorming session notes are at evals/bmm-skills/bmad-product-brief/files/q2-brainstorm.md; pull only what is relevant to the compost concept.",
|
|
43
42
|
"expected_output": "Brief focuses tightly on the compost coordinator concept. Source brainstorm is filtered, not ingested wholesale. Decision-log records that filtering occurred.",
|
|
44
43
|
"files": ["evals/bmm-skills/bmad-product-brief/files/q2-brainstorm.md"],
|
|
45
44
|
"expectations": [
|
|
@@ -53,7 +52,7 @@
|
|
|
53
52
|
{
|
|
54
53
|
"id": "A4",
|
|
55
54
|
"_pattern": "artifact-correctness",
|
|
56
|
-
"prompt": "Run headless. Validate the brief at evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md
|
|
55
|
+
"prompt": "Run headless. Validate the brief at evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md — the Mossridge Public Library board meets Monday and we need this to land. Read the addendum and decision-log in the same folder first. Cite specific sections, identify weaknesses, caveat what cannot be evaluated. Return inline only — no separate validation file.",
|
|
57
56
|
"expected_output": "Inline critique citing specific sections from the input brief. No new files. Caveats at least one claim that cannot be evaluated from the brief alone. Offers to roll findings into an Update.",
|
|
58
57
|
"files": [
|
|
59
58
|
"evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md",
|
|
@@ -72,7 +71,7 @@
|
|
|
72
71
|
"id": "A5",
|
|
73
72
|
"_pattern": "artifact-correctness",
|
|
74
73
|
"prompt": "Run headless. Create a brief for: a weekend-project iOS app called Sproutkeeper that reminds houseplant owners when to water their plants based on plant type and indoor humidity sensor data. Target is hobbyist plant owners. MVP scope only, single-developer side project, no investors, no team, just personal evening project.",
|
|
75
|
-
"expected_output": "Lightweight brief right-sized to a side project. Low rigor. No investor-grade framing.
|
|
74
|
+
"expected_output": "Lightweight brief right-sized to a side project. Low rigor. No investor-grade framing.",
|
|
76
75
|
"files": [],
|
|
77
76
|
"expectations": [
|
|
78
77
|
"The final assistant message contains a JSON object with intent='create'",
|
|
@@ -99,7 +98,7 @@
|
|
|
99
98
|
{
|
|
100
99
|
"id": "A7",
|
|
101
100
|
"_pattern": "artifact-correctness",
|
|
102
|
-
"prompt": "Run headless. Create a brief for Brightway
|
|
101
|
+
"prompt": "Run headless. Create a brief for Brightway — our smart bike helmet with crash detection, turn signals, and braking lights. Meridian Insights produced a market research report on e-mobility at evals/bmm-skills/bmad-product-brief/files/meridian-mobility-report.md. Use only what is relevant to the safety helmet category — do not let the e-scooter, charging-infrastructure, or bike-share segments bleed into the brief.",
|
|
103
102
|
"expected_output": "Brief focuses on the smart bike helmet concept. Pulls relevant findings from the helmet section. Other mobility segments do not appear.",
|
|
104
103
|
"files": ["evals/bmm-skills/bmad-product-brief/files/meridian-mobility-report.md"],
|
|
105
104
|
"expectations": [
|
|
@@ -113,7 +112,7 @@
|
|
|
113
112
|
{
|
|
114
113
|
"id": "A8",
|
|
115
114
|
"_pattern": "artifact-correctness",
|
|
116
|
-
"prompt": "Run headless. Create a brief for Pantry Bridge
|
|
115
|
+
"prompt": "Run headless. Create a brief for Pantry Bridge — a meal-kit subscription targeted at adults 65+ who live alone and want fresh meals without grocery shopping. Customer research transcripts are at evals/bmm-skills/bmad-product-brief/files/pantry-bridge-interviews.md. Pull what is relevant from the older-adult interviews; do not conflate insights from the working-parent, student, or corporate-buyer personas.",
|
|
117
116
|
"expected_output": "Brief focuses on the older-adult target persona. Eleanor's interview drives the insights. Other personas do not pollute the brief.",
|
|
118
117
|
"files": ["evals/bmm-skills/bmad-product-brief/files/pantry-bridge-interviews.md"],
|
|
119
118
|
"expectations": [
|
|
@@ -127,7 +126,7 @@
|
|
|
127
126
|
{
|
|
128
127
|
"id": "B1",
|
|
129
128
|
"_pattern": "process-discipline",
|
|
130
|
-
"prompt": "Run headless. Create a brief for HelmStack
|
|
129
|
+
"prompt": "Run headless. Create a brief for HelmStack — an open-source observability platform for distributed systems.\n\nWe have made these specific decisions and want each captured in the decision log with rationale:\n\n1. Pricing: Free open-source core; paid SaaS at $29/seat/month. Rejected paid-one-shot-license model because it would limit network effects in the OSS community.\n2. Launch: Invite-only beta for 6 weeks before public launch. Rejected open public launch — operational risk too high before stability is proven on real workloads.\n3. Stack: TypeScript + Postgres for the backend. Rejected Go + MongoDB — TypeScript aligned better with our team's existing skills and the frontend codebase.\n4. ICP: 5-50 person engineering teams for MVP. Rejected enterprise-first focus because the sales cycle is too long for our capital runway.\n5. Self-host: SaaS-only at launch; self-host arrives in v2. Rejected concurrent self-host because it would slow shipping velocity past our funding window.\n\nProduce brief.md and decision-log.md.",
|
|
131
130
|
"expected_output": "Decision log contains all five named decisions with rationale captured. Brief reflects the decisions but the decision log is the canonical record.",
|
|
132
131
|
"files": [],
|
|
133
132
|
"expectations": [
|
|
@@ -142,14 +141,14 @@
|
|
|
142
141
|
{
|
|
143
142
|
"id": "B2",
|
|
144
143
|
"_pattern": "process-discipline",
|
|
145
|
-
"prompt": "Run headless. Create a brief for HelmStack
|
|
144
|
+
"prompt": "Run headless. Create a brief for HelmStack — an open-source observability platform for distributed systems.\n\nWe have made these specific decisions and want each captured in the decision log with rationale:\n\n1. Pricing: Free open-source core; paid SaaS at $29/seat/month. Rejected paid-one-shot-license model because it would limit network effects in the OSS community.\n2. Launch: Invite-only beta for 6 weeks before public launch. Rejected open public launch — operational risk too high before stability is proven on real workloads.\n3. Stack: TypeScript + Postgres for the backend. Rejected Go + MongoDB — TypeScript aligned better with our team's existing skills and the frontend codebase.\n4. ICP: 5-50 person engineering teams for MVP. Rejected enterprise-first focus because the sales cycle is too long for our capital runway.\n5. Self-host: SaaS-only at launch; self-host arrives in v2. Rejected concurrent self-host because it would slow shipping velocity past our funding window.\n\nProduce brief.md and decision-log.md.",
|
|
146
145
|
"expected_output": "Brief is consistent with the decision log: every decision in the log is reflected in the brief, and no claim in the brief is absent from the input prompt or the log. Tests bidirectional fidelity.",
|
|
147
146
|
"files": [],
|
|
148
147
|
"expectations": [
|
|
149
148
|
"brief.md mentions the OSS-core + paid-SaaS pricing structure",
|
|
150
149
|
"brief.md references the invite-only-beta launch sequencing OR identifies the launch model consistent with the decision log",
|
|
151
|
-
"brief.md references the platform-stack choice (TypeScript + Postgres) OR is silent on stack
|
|
152
|
-
"brief.md identifies 5-50 person eng teams as the ICP (or equivalent
|
|
150
|
+
"brief.md references the platform-stack choice (TypeScript + Postgres) OR is silent on stack — but does not contradict it (no mention of Go, MongoDB, etc.)",
|
|
151
|
+
"brief.md identifies 5-50 person eng teams as the ICP (or equivalent — small-to-mid-size eng teams)",
|
|
153
152
|
"brief.md does not introduce decisions, competitors, partnerships, metrics, or product features absent from both the input prompt and decision-log.md (no invented facts)",
|
|
154
153
|
"Each substantive decision in decision-log.md has a corresponding reflection in brief.md (no log-to-brief drops)"
|
|
155
154
|
]
|
|
@@ -157,8 +156,8 @@
|
|
|
157
156
|
{
|
|
158
157
|
"id": "B3",
|
|
159
158
|
"_pattern": "process-discipline",
|
|
160
|
-
"prompt": "Run headless. Create a product brief for InsuLens.\n\nContext (use exactly this
|
|
161
|
-
"expected_output": "The transcript shows the polish phase executing
|
|
159
|
+
"prompt": "Run headless. Create a product brief for InsuLens.\n\nContext (use exactly this — do not invent):\n- Product: a smartphone app that pairs with off-the-shelf $200 thermal imaging accessories (FLIR ONE Pro and Seek Compact Pro). The app guides homeowners through a structured walkthrough and produces a professional-grade insulation audit in under 20 minutes.\n- Target: suburban homeowners aged 35-65 with houses built before 2000.\n- Validation: 50 user interviews completed in Q4 2025; 78% willingness to pay $49 for a one-time audit.\n- Stakes: Series A pitch input.\n- Hardware: requires a thermal accessory (we do not manufacture hardware).\n\nProduce brief.md and decision-log.md. Run the polish phase before presenting.",
|
|
160
|
+
"expected_output": "The transcript shows the polish phase executing — the skill invokes bmad-editorial-review-structure and bmad-editorial-review-prose, either via the Skill tool directly or via Agent tool calls whose description or prompt targets those editorial skills. Both passes must occur after the initial draft is written and before the final JSON status block.",
|
|
162
161
|
"files": [],
|
|
163
162
|
"expectations": [
|
|
164
163
|
"The transcript contains either a Skill tool call invoking bmad-editorial-review-structure, OR an Agent tool call whose description or prompt references structural review or bmad-editorial-review-structure",
|
|
@@ -167,29 +166,15 @@
|
|
|
167
166
|
"Both editorial-pass dispatches (Skill or Agent) occur before the final assistant message containing the JSON status block"
|
|
168
167
|
]
|
|
169
168
|
},
|
|
170
|
-
{
|
|
171
|
-
"id": "B4",
|
|
172
|
-
"_pattern": "process-discipline",
|
|
173
|
-
"prompt": "Run headless. Create a product brief for InsuLens.\n\nContext (use exactly this \u2014 do not invent):\n- Product: a smartphone app that pairs with off-the-shelf $200 thermal imaging accessories (FLIR ONE Pro and Seek Compact Pro). Walkthrough produces a professional-grade insulation audit in under 20 minutes.\n- Target: suburban homeowners aged 35-65 with houses built before 2000.\n- Validation: 50 user interviews; 78% willingness to pay $49.\n- Stakes: Series A pitch input.\n- Hardware: requires a thermal accessory.\n\nProduce brief.md, decision-log.md, and a distillate. Follow the standard Create flow: workspace setup, draft, finalize (decision log audit, polish, distillate, close-out).",
|
|
174
|
-
"expected_output": "Workspace setup happens before drafting. Draft happens before polish. Polish happens before distillate generation. Distillate generation happens before the final close-out JSON block. Each phase boundary is observable in the transcript.",
|
|
175
|
-
"files": [],
|
|
176
|
-
"expectations": [
|
|
177
|
-
"The first Write tool call to decision-log.md OR brief.md (skeleton) occurs before the substantive Write that produces the full brief body",
|
|
178
|
-
"The polish-phase Skill tool calls (bmad-editorial-review-structure and/or bmad-editorial-review-prose) occur after the brief body is written",
|
|
179
|
-
"The bmad-distillator Skill tool call (or distillate.md write) occurs after the polish-phase Skill tool calls",
|
|
180
|
-
"The final JSON status block in the assistant message occurs after distillate.md is written or skipped with explanation"
|
|
181
|
-
]
|
|
182
|
-
},
|
|
183
169
|
{
|
|
184
170
|
"id": "B5",
|
|
185
171
|
"_pattern": "process-discipline",
|
|
186
|
-
"prompt": "Run headless. Update the brief at evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md
|
|
172
|
+
"prompt": "Run headless. Update the brief at evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md — we have decided to add B2B catering services for corporate events, in addition to the direct-to-consumer delivery model. Read the existing decision-log.md and addendum.md in the same folder first.",
|
|
187
173
|
"expected_output": "The skill MUST detect the contradiction with the prior 'rejected B2B catering for MVP' decision (in decision-log.md) before applying the change. Acceptable resolutions: (a) halt with blocked status surfacing the conflict, or (b) apply the change with addendum.md capturing the override and rationale. Brief must not silently flip without acknowledging the prior decision.",
|
|
188
174
|
"files": [
|
|
189
175
|
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md",
|
|
190
176
|
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/addendum.md",
|
|
191
|
-
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md"
|
|
192
|
-
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/distillate.md"
|
|
177
|
+
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md"
|
|
193
178
|
],
|
|
194
179
|
"expectations": [
|
|
195
180
|
"The transcript or output explicitly references the prior 'rejected B2B catering for MVP' decision from decision-log.md",
|
|
@@ -202,26 +187,24 @@
|
|
|
202
187
|
{
|
|
203
188
|
"id": "B6",
|
|
204
189
|
"_pattern": "process-discipline",
|
|
205
|
-
"prompt": "Run headless. Update the brief at evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md
|
|
206
|
-
"expected_output": "Clean update
|
|
190
|
+
"prompt": "Run headless. Update the brief at evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md — we have signed our fifth chef partner (Chicago metro). Add this to the existing operating-model and what's-known sections. Read the existing decision-log.md first.",
|
|
191
|
+
"expected_output": "Clean update — does not contradict any prior decision. Brief gets updated, decision-log gains a new entry, YAML 'updated' bumps but 'created' stays the same. No spurious addendum since this is a status update, not an override.",
|
|
207
192
|
"files": [
|
|
208
193
|
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md",
|
|
209
194
|
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/addendum.md",
|
|
210
|
-
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md"
|
|
211
|
-
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/distillate.md"
|
|
195
|
+
"evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md"
|
|
212
196
|
],
|
|
213
197
|
"expectations": [
|
|
214
198
|
"brief.md is updated to reflect the signed fifth chef partner in Chicago",
|
|
215
199
|
"brief.md frontmatter 'updated' field is later than the original 'created' timestamp; 'created' is unchanged",
|
|
216
200
|
"decision-log.md contains a new entry referencing the fifth chef signing",
|
|
217
|
-
"
|
|
218
|
-
"The transcript does not surface a fictional contradiction \u2014 this is a clean update, not an override of a prior decision"
|
|
201
|
+
"The transcript does not surface a fictional contradiction — this is a clean update, not an override of a prior decision"
|
|
219
202
|
]
|
|
220
203
|
},
|
|
221
204
|
{
|
|
222
205
|
"id": "B7",
|
|
223
206
|
"_pattern": "process-discipline",
|
|
224
|
-
"prompt": "Run headless. Validate the brief at evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md
|
|
207
|
+
"prompt": "Run headless. Validate the brief at evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md — we are presenting to the library board Monday. Read the addendum and decision-log in the same folder. Cite specific sections. Return inline only.",
|
|
225
208
|
"expected_output": "Validate is read-only. No new files created. No existing files modified. Critique returned inline in the assistant output.",
|
|
226
209
|
"files": [
|
|
227
210
|
"evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md",
|
|
@@ -235,30 +218,16 @@
|
|
|
235
218
|
"The final assistant message contains a JSON object with intent='validate'"
|
|
236
219
|
]
|
|
237
220
|
},
|
|
238
|
-
{
|
|
239
|
-
"id": "B8",
|
|
240
|
-
"_pattern": "process-discipline",
|
|
241
|
-
"timeout": 900,
|
|
242
|
-
"prompt": "Run headless. Create a product brief for InsuLens (smartphone app that pairs with thermal imaging accessories for homeowner insulation audits, target suburban homeowners 35-65 with houses pre-2000, 50 user interviews with 78% willingness to pay $49, Series A pitch input). Generate a distillate \u2014 this brief will feed downstream PRD work.",
|
|
243
|
-
"expected_output": "distillate.md exists alongside brief.md and decision-log.md. The distillate is a meaningful condensation of the brief. Content of the distillate matches the brief without introducing new facts. The transcript shows the bmad-distillator subagent invoked.",
|
|
244
|
-
"files": [],
|
|
245
|
-
"expectations": [
|
|
246
|
-
"distillate.md exists in the run folder alongside brief.md and decision-log.md",
|
|
247
|
-
"distillate.md is a meaningful condensation of brief.md \u2014 substantially more concise and capturing only the key decisions, target audience, validation evidence, and known unknowns needed for downstream PRD work, not a near-verbatim copy",
|
|
248
|
-
"distillate.md does not introduce facts or claims not present in brief.md (no inventions on compression)",
|
|
249
|
-
"The transcript contains a Skill tool call invoking bmad-distillator"
|
|
250
|
-
]
|
|
251
|
-
},
|
|
252
221
|
{
|
|
253
222
|
"id": "C1",
|
|
254
223
|
"_pattern": "config-compliance",
|
|
255
|
-
"prompt": "Run headless. Create a product brief for TaskFlow
|
|
224
|
+
"prompt": "Run headless. Create a product brief for TaskFlow — a lightweight daily planning app for freelancers who juggle multiple clients. Core idea: a single daily view that pulls together tasks, time blocks, and client context so the freelancer always knows what to work on next. Target is independent freelancers, 1-3 clients at a time, who currently manage their day across sticky notes, calendar apps, and spreadsheets. MVP is mobile-first. No investors — the founder is bootstrapping.",
|
|
256
225
|
"expected_output": "Brief written in Spanish (document_output_language=Spanish). Assistant's conversational output reflects the configured British-accent communication style. Brief lands at the custom output path (test-output/artifacts/briefs/...) rather than the default _bmad-output path. Brief is right-sized for a bootstrapped solo project.",
|
|
257
226
|
"files": [],
|
|
258
227
|
"expectations": [
|
|
259
228
|
"brief.md exists under test-output/artifacts/briefs/ (the custom planning_artifacts path), not under _bmad-output/",
|
|
260
229
|
"The final JSON status block artifact paths reference test-output/ rather than _bmad-output/",
|
|
261
|
-
"brief.md body is written in Spanish
|
|
230
|
+
"brief.md body is written in Spanish — the majority of prose content (headings, section bodies) is in Spanish, not English",
|
|
262
231
|
"brief.md covers the TaskFlow concept: freelancer daily planning, multi-client context, the sticky-notes-plus-calendar-plus-spreadsheet problem",
|
|
263
232
|
"brief.md is right-sized for a bootstrapped side project — appropriate depth and scope for a solo-founder app with no investor audience, no TAM/SAM/SOM framing, no Series A language, and no sections that pad for enterprise credibility",
|
|
264
233
|
"The assistant's non-document output (transcript text content outside of brief.md) contains at least one marker of British informal register (e.g., 'mate', 'cheers', 'brilliant', 'sorted', 'innit', 'blimey', 'proper', 'right then', or equivalent pub-idiom phrasing)"
|
package/package.json
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bmad-product-brief
|
|
3
3
|
description: Create, update, or validate a product brief. Use when the user wants help producing, editing, or validating a brief.
|
|
4
|
-
dependencies:
|
|
5
|
-
- bmad-distillator
|
|
6
|
-
- bmad-editorial-review-structure
|
|
7
|
-
- bmad-editorial-review-prose
|
|
8
|
-
- bmad-help
|
|
9
4
|
---
|
|
10
5
|
|
|
11
6
|
# Overview
|
|
@@ -16,20 +11,23 @@ You are not in a hurry. You will not do the thinking for them. Coach, do not qui
|
|
|
16
11
|
|
|
17
12
|
Briefs produced here are honest, right-sized to purpose, and built for what comes next — they do not pad, they do not fabricate moats, they surface what is unknown alongside what is known - the user must feel that it is their own creation.
|
|
18
13
|
|
|
14
|
+
At the opening greeting, let the user know they can invoke `bmad-party-mode` for multi-agent perspectives or `bmad-advanced-elicitation` for deeper exploration at any point.
|
|
15
|
+
|
|
19
16
|
## On Activation
|
|
20
17
|
|
|
21
18
|
1. Resolve customization: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, surface the diagnostic and halt.
|
|
22
19
|
2. Execute each entry in `{workflow.activation_steps_prepend}` in order.
|
|
23
20
|
3. Treat every entry in `{workflow.persistent_facts}` as foundational context for the rest of the run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.
|
|
24
|
-
4.
|
|
25
|
-
5.
|
|
26
|
-
6.
|
|
21
|
+
4. Note `{workflow.external_sources}` as a registry of external systems available for consultation when the conversation surfaces a relevant need — knowledge bases, internal MCP tools, reference systems. Do not query preemptively; consult each only when its directive matches the moment. If a named tool is unavailable at runtime, fall back to standard behavior and note the gap when relevant.
|
|
22
|
+
5. Load `{project-root}/_bmad/bmm/config.yaml` (and `config.user.yaml` if present). Resolve `{user_name}`, `{communication_language}`, `{document_output_language}`, `{planning_artifacts}`, `{project_name}`, `{date}`.
|
|
23
|
+
6. Greet `{user_name}` in `{communication_language}`. Detect intent (create / update / validate). If interactive and intent is unclear, ask; for headless behavior see `## Headless Mode`.
|
|
24
|
+
7. Execute each entry in `{workflow.activation_steps_append}` in order.
|
|
27
25
|
|
|
28
26
|
## Intent Operating Modes
|
|
29
27
|
|
|
30
28
|
**Create.** A brief the user is proud of, that meets their needs, drawn out through real conversation — do not assume: instead converse and understand, and then help craft the best product brief for their needs. Begin in `## Discovery` before drafting; the brief comes after the picture is on the table. Shape follows the product and need. Treat `{workflow.brief_template}` as a starting structure, not a contract: drop sections that do not earn their place, add sections the product needs, reorder freely - create sections for specialized domains or concerns also as needed. The brief serves the product's story, not the template's shape. Bind `{doc_workspace}` to a fresh folder at `{workflow.output_dir}/{workflow.output_folder_name}/` and write `brief.md` there with YAML frontmatter (title, status, created, updated). For Update and Validate, `{doc_workspace}` is the existing folder of the brief being targeted.
|
|
31
29
|
|
|
32
|
-
**Update.** Reconcile an existing brief with a change signal
|
|
30
|
+
**Update.** Reconcile an existing brief with a change signal. Before proposing changes, read the brief, addendum, `decision-log.md`, and original inputs — and run the `## Discovery` posture against the change signal (a patch applied without context becomes drift). Surface conflicts with prior decisions before changing. Headless override: log the reversal to `decision-log.md`, then apply; halt `blocked` if intent is ambiguous. If the change is fundamental, offer Create instead of patching.
|
|
33
31
|
|
|
34
32
|
**Validate.** Honest critique against the brief's own purpose. Read the brief, the addendum if present, `decision-log.md`, and any original inputs first — a validation that ignores prior decisions, rejected ideas, or context the user supplied is shallow. Cite specific lines. Caveat what cannot be evaluated. Return inline — no separate file unless asked. Always offer to roll findings into an Update, even in headless mode — include `"offer_to_update": true` in the JSON status block.
|
|
35
33
|
|
|
@@ -43,9 +41,11 @@ When invoked headless, do not ask. Complete the intent using what is provided, w
|
|
|
43
41
|
"intent": "create",
|
|
44
42
|
"brief": "{doc_workspace}/brief.md",
|
|
45
43
|
"addendum": "{doc_workspace}/addendum.md",
|
|
46
|
-
"distillate": "{doc_workspace}/distillate.md",
|
|
47
44
|
"decision_log": "{doc_workspace}/decision-log.md",
|
|
48
|
-
"open_questions": []
|
|
45
|
+
"open_questions": [],
|
|
46
|
+
"external_handoffs": [
|
|
47
|
+
{"directive": "Confluence upload", "tool": "corp:confluence_upload", "url": "https://confluence.corp/PROD/123", "status": "ok"}
|
|
48
|
+
]
|
|
49
49
|
}
|
|
50
50
|
```
|
|
51
51
|
|
|
@@ -66,15 +66,16 @@ Conversationally surface what the user brings, why this brief exists, and the do
|
|
|
66
66
|
## Constraints
|
|
67
67
|
|
|
68
68
|
- **Right-size to purpose.** A passion project does not need investor-grade rigor. A VC pitch input does. Read the room.
|
|
69
|
-
- **Persistence is real-time.** Once Create intent is confirmed, the workspace (run folder, `brief.md` skeleton with `status: draft`, `decision-log.md`) exists on disk and the user knows the path.
|
|
69
|
+
- **Persistence is real-time.** Once Create intent is confirmed, the workspace (run folder, `brief.md` skeleton with `status: draft`, `decision-log.md`) exists on disk and the user knows the path.
|
|
70
|
+
- **File roles.** `decision-log.md` is canonical memory and audit trail — every decision, change, and override (including headless overrides) is recorded there as the conversation unfolds. `addendum.md` preserves user-contributed depth that belongs in a downstream document (PRD, architecture, solution design) or earned a place but does not fit the brief (rejected-alternative rationale, options-considered matrices, parked-roadmap context, technical constraints, in-depth personas, sizing data). Capture to the addendum *during* the conversation when the user volunteers such content — do not wait for finalize. Audit and override information never goes in the addendum.
|
|
70
71
|
- **Continuity across sessions.** If a prior in-progress draft for this project exists, the user is offered to resume.
|
|
71
72
|
- **Extract, don't ingest.** Source artifacts (provided by the user or discovered during the run — transcripts, brainstorms, research reports, code, web results, prior briefs) enter the parent conversation as relevance-filtered extracts, not loaded wholesale. Subagents do the extraction against the user's stated focus; the parent context stays lean.
|
|
72
|
-
- **Length and coherence.** Aim for 1-2 pages — if it is longer, the detail belongs in the addendum
|
|
73
|
+
- **Length and coherence.** Aim for 1-2 pages — if it is longer, the detail belongs in the addendum. Structure in service of the product; downstream consumers (PRD workflow, etc.) read this, so coherent shape matters.
|
|
73
74
|
|
|
74
75
|
## Finalize
|
|
75
76
|
|
|
76
|
-
1. Decision log audit + addendum: the user ends this step with an explicit, shared accounting of how the meaningful contents of `decision-log.md` were handled — captured in the brief, captured in `addendum.md` (
|
|
77
|
-
2. Polish: apply each entry in `{workflow.doc_standards}` (a `skill:`, `file:`, or plain-text directive) to `brief.md` (and `addendum.md` if it exists). Run passes as parallel subagents.
|
|
78
|
-
3.
|
|
79
|
-
4. Tell the user it is ready:
|
|
77
|
+
1. Decision log audit + addendum review: the user ends this step with an explicit, shared accounting of how the meaningful contents of `decision-log.md` were handled — captured in the brief, captured in `addendum.md` (which may already hold detail captured during the conversation — see `## Constraints` for what belongs there), or set aside as process noise.
|
|
78
|
+
2. Polish: apply each entry in `{workflow.doc_standards}` (a `skill:`, `file:`, or plain-text directive) to `brief.md` (and `addendum.md` if it exists). Run passes as parallel subagents - apply all doc standards to `brief.md` first, then `addendum.md` so we present a high-quality draft for the user to review and finalize.
|
|
79
|
+
3. External handoffs: execute each entry in `{workflow.external_handoffs}` to route artifacts beyond local files (Confluence, Notion, ticket systems, etc.) — each directive names the MCP tool and the fields it needs. Invoke the tool, capture any URLs or IDs returned, and surface them in the user message. If a named tool is unavailable, skip that handoff and flag it; local files always exist regardless.
|
|
80
|
+
4. Tell the user it is ready: local paths and external destinations (URLs returned from handoffs). Invoke `bmad-help` to suggest what next steps make sense in the bmad method ecosystem.
|
|
80
81
|
5. Run `{workflow.on_complete}` if non-empty. Treat a string scalar as a single instruction and an array as a sequence of instructions executed in order.
|
|
@@ -39,8 +39,7 @@ on_complete = ""
|
|
|
39
39
|
# to enforce a different structure (e.g. regulated-industry, investor-deck).
|
|
40
40
|
brief_template = "assets/brief-template.md"
|
|
41
41
|
|
|
42
|
-
# Run folder location. The brief
|
|
43
|
-
# all land inside `{output_dir}/{output_folder_name}/`.
|
|
42
|
+
# Run folder location. The brief and optional addendum land inside `{output_dir}/{output_folder_name}/`.
|
|
44
43
|
output_dir = "{planning_artifacts}/briefs"
|
|
45
44
|
output_folder_name = "brief-{project_name}-{date}"
|
|
46
45
|
|
|
@@ -64,3 +63,32 @@ doc_standards = [
|
|
|
64
63
|
"skill:bmad-editorial-review-structure",
|
|
65
64
|
"skill:bmad-editorial-review-prose",
|
|
66
65
|
]
|
|
66
|
+
|
|
67
|
+
# External-source registry. Natural-language directives describing knowledge
|
|
68
|
+
# bases, MCP tools, or internal systems the LLM may consult during the workflow
|
|
69
|
+
# when a relevant need surfaces. The LLM does NOT query these preemptively —
|
|
70
|
+
# it consults them on demand (during Discovery, validation, drafting, etc.).
|
|
71
|
+
# Each entry names the tool, the conditions for using it, and any fields the
|
|
72
|
+
# tool needs. If a named MCP tool is unavailable at runtime, the LLM falls
|
|
73
|
+
# back to standard behavior and notes the gap. Empty by default.
|
|
74
|
+
#
|
|
75
|
+
# Examples (set in team/user override TOML):
|
|
76
|
+
# "When researching internal product context, consult corp:kb_search (database='product-docs') before web search."
|
|
77
|
+
# "For voice-of-customer signal during Discovery, query corp:feedback_search with project={project_name}."
|
|
78
|
+
# "When validating domain-compliance claims for a healthcare brief, cross-check against corp:hipaa_reference."
|
|
79
|
+
external_sources = []
|
|
80
|
+
|
|
81
|
+
# External-handoff routing. Natural-language directives the LLM applies at
|
|
82
|
+
# Finalize to route outputs beyond local files (Confluence, Notion, Google
|
|
83
|
+
# Drive, ticket systems, etc.). Each entry names the MCP tool, the destination,
|
|
84
|
+
# and the fields the tool needs. Handoffs run after the artifact is polished
|
|
85
|
+
# and before the final user-facing message. URLs or IDs returned by the
|
|
86
|
+
# destination are captured and surfaced to the user. If a named tool is
|
|
87
|
+
# unavailable at runtime, the handoff is skipped and flagged in the JSON
|
|
88
|
+
# status; local files always exist regardless. Fires automatically — users
|
|
89
|
+
# can opt out in their prompt for a specific run. Empty by default.
|
|
90
|
+
#
|
|
91
|
+
# Examples (set in team/user override TOML):
|
|
92
|
+
# "After finalize, upload brief.md and addendum.md to Confluence via corp:confluence_upload (space_key='PROD', parent_page='Product Briefs', label='brief', author={user_name})."
|
|
93
|
+
# "Post a ready-for-review ping to Slack via corp:slack_post (channel='#product', text='New brief: '+{confluence_url})."
|
|
94
|
+
external_handoffs = []
|
|
@@ -55,19 +55,9 @@ principles = [
|
|
|
55
55
|
# registered skill by name) or `prompt` (executes the prompt text directly).
|
|
56
56
|
|
|
57
57
|
[[agent.menu]]
|
|
58
|
-
code = "
|
|
59
|
-
description = "
|
|
60
|
-
skill = "bmad-
|
|
61
|
-
|
|
62
|
-
[[agent.menu]]
|
|
63
|
-
code = "VP"
|
|
64
|
-
description = "Validate a PRD is comprehensive, lean, well organized and cohesive"
|
|
65
|
-
skill = "bmad-validate-prd"
|
|
66
|
-
|
|
67
|
-
[[agent.menu]]
|
|
68
|
-
code = "EP"
|
|
69
|
-
description = "Update an existing Product Requirements Document"
|
|
70
|
-
skill = "bmad-edit-prd"
|
|
58
|
+
code = "PRD"
|
|
59
|
+
description = "Create, update, or validate a PRD — state your intent or the skill will ask"
|
|
60
|
+
skill = "bmad-prd"
|
|
71
61
|
|
|
72
62
|
[[agent.menu]]
|
|
73
63
|
code = "CE"
|
|
@@ -1,104 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bmad-create-prd
|
|
3
|
-
description: '
|
|
3
|
+
description: 'DEPRECATED — consolidated into bmad-prd create intent - this skill will be removed in v7 in favor of `bmad-prd`.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# DEPRECATED — forwards to bmad-prd (create intent)
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
**Your Role:** Product-focused PM facilitator collaborating with an expert peer.
|
|
11
|
-
|
|
12
|
-
You will continue to operate with your given name, identity, and communication_style, merged with the details of this role description.
|
|
13
|
-
|
|
14
|
-
## Conventions
|
|
15
|
-
|
|
16
|
-
- Bare paths (e.g. `steps-c/step-01-init.md`) resolve from the skill root.
|
|
17
|
-
- `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).
|
|
18
|
-
- `{project-root}`-prefixed paths resolve from the project working directory.
|
|
19
|
-
- `{skill-name}` resolves to the skill directory's basename.
|
|
20
|
-
|
|
21
|
-
## WORKFLOW ARCHITECTURE
|
|
22
|
-
|
|
23
|
-
This uses **step-file architecture** for disciplined execution:
|
|
24
|
-
|
|
25
|
-
### Core Principles
|
|
26
|
-
|
|
27
|
-
- **Micro-file Design**: Each step is a self-contained instruction file that is a part of an overall workflow that must be followed exactly
|
|
28
|
-
- **Just-In-Time Loading**: Only the current step file is in memory - never load future step files until told to do so
|
|
29
|
-
- **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed
|
|
30
|
-
- **State Tracking**: Document progress in output file frontmatter using `stepsCompleted` array when a workflow produces a document
|
|
31
|
-
- **Append-Only Building**: Build documents by appending content as directed to the output file
|
|
32
|
-
|
|
33
|
-
### Step Processing Rules
|
|
34
|
-
|
|
35
|
-
1. **READ COMPLETELY**: Always read the entire step file before taking any action
|
|
36
|
-
2. **FOLLOW SEQUENCE**: Execute all numbered sections in order, never deviate
|
|
37
|
-
3. **WAIT FOR INPUT**: If a menu is presented, halt and wait for user selection
|
|
38
|
-
4. **CHECK CONTINUATION**: If the step has a menu with Continue as an option, only proceed to next step when user selects 'C' (Continue)
|
|
39
|
-
5. **SAVE STATE**: Update `stepsCompleted` in frontmatter before loading next step
|
|
40
|
-
6. **LOAD NEXT**: When directed, read fully and follow the next step file
|
|
41
|
-
|
|
42
|
-
### Critical Rules (NO EXCEPTIONS)
|
|
43
|
-
|
|
44
|
-
- 🛑 **NEVER** load multiple step files simultaneously
|
|
45
|
-
- 📖 **ALWAYS** read entire step file before execution
|
|
46
|
-
- 🚫 **NEVER** skip steps or optimize the sequence
|
|
47
|
-
- 💾 **ALWAYS** update frontmatter of output files when writing the final output for a specific step
|
|
48
|
-
- 🎯 **ALWAYS** follow the exact instructions in the step file
|
|
49
|
-
- ⏸️ **ALWAYS** halt at menus and wait for user input
|
|
50
|
-
- 📋 **NEVER** create mental todo lists from future steps
|
|
8
|
+
This skill was consolidated into `bmad-prd`. It is retained as a thin compatibility shim so existing invocations by name and `_bmad/custom/bmad-create-prd.toml` override files keep working. New work should invoke `bmad-prd` directly — it detects create / update / validate intent from the conversation.
|
|
51
9
|
|
|
52
10
|
## On Activation
|
|
53
11
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
Run: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`
|
|
57
|
-
|
|
58
|
-
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
|
|
59
|
-
|
|
60
|
-
1. `{skill-root}/customize.toml` — defaults
|
|
61
|
-
2. `{project-root}/_bmad/custom/{skill-name}.toml` — team overrides
|
|
62
|
-
3. `{project-root}/_bmad/custom/{skill-name}.user.toml` — personal overrides
|
|
63
|
-
|
|
64
|
-
Any missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append.
|
|
65
|
-
|
|
66
|
-
### Step 2: Execute Prepend Steps
|
|
67
|
-
|
|
68
|
-
Execute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.
|
|
69
|
-
|
|
70
|
-
### Step 3: Load Persistent Facts
|
|
71
|
-
|
|
72
|
-
Treat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.
|
|
73
|
-
|
|
74
|
-
### Step 4: Load Config
|
|
75
|
-
|
|
76
|
-
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
|
|
77
|
-
- Use `{user_name}` for greeting
|
|
78
|
-
- Use `{communication_language}` for all communications
|
|
79
|
-
- Use `{document_output_language}` for output documents
|
|
80
|
-
- Use `{planning_artifacts}` for output location and artifact scanning
|
|
81
|
-
- Use `{project_knowledge}` for additional context scanning
|
|
82
|
-
|
|
83
|
-
### Step 5: Greet the User
|
|
84
|
-
|
|
85
|
-
Greet `{user_name}`, speaking in `{communication_language}`.
|
|
86
|
-
|
|
87
|
-
### Step 6: Execute Append Steps
|
|
88
|
-
|
|
89
|
-
Execute each entry in `{workflow.activation_steps_append}` in order.
|
|
90
|
-
|
|
91
|
-
Activation is complete. Begin the workflow below.
|
|
12
|
+
1. Resolve customization: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. This picks up any `{project-root}/_bmad/custom/bmad-create-prd.toml` and `bmad-create-prd.user.toml` overrides for the legacy fields (`activation_steps_prepend`, `activation_steps_append`, `persistent_facts`, `on_complete`).
|
|
92
13
|
|
|
93
|
-
|
|
14
|
+
2. Load `{project-root}/_bmad/bmm/config.yaml` (and `config.user.yaml` if present) to resolve `{user_name}` and `{communication_language}`.
|
|
94
15
|
|
|
95
|
-
|
|
16
|
+
3. Emit a deprecation notice to the user in `{communication_language}`:
|
|
96
17
|
|
|
97
|
-
|
|
18
|
+
> Notice: `bmad-create-prd` is deprecated and will be removed in a future release. It now forwards to `bmad-prd` with create intent. To silence this notice and access the full new customization surface (`prd_template`, `validation_checklist`, `doc_standards`, `external_sources`, `external_handoffs`, `output_dir`, `output_folder_name`), migrate `_bmad/custom/bmad-create-prd.toml` to `_bmad/custom/bmad-prd.toml` and invoke `bmad-prd` directly next time. Customization fields that were in this version still remain in the new version and will be respected if present in `_bmad/custom/bmad-prd.toml`, but the new version also supports additional fields that you can take advantage of by migrating.
|
|
98
19
|
|
|
99
|
-
|
|
100
|
-
✅ YOU MUST ALWAYS WRITE all artifact and document content in `{document_output_language}`.
|
|
20
|
+
4. Invoke `bmad-prd` with the following context. Pass these as the activating context so `bmad-prd` honors them instead of resolving its own customization from scratch:
|
|
101
21
|
|
|
102
|
-
**
|
|
22
|
+
- **Intent:** `create` — skip `bmad-prd`'s usual intent detection step.
|
|
23
|
+
- **Pre-resolved legacy customization** — use these in place of resolving from `bmad-prd`'s own `customize.toml` for the four legacy fields. For everything else (`prd_template`, `validation_checklist`, `validation_report_template`, `doc_standards`, `output_dir`, `output_folder_name`, `external_sources`, `external_handoffs`), use `bmad-prd`'s own defaults and overrides as normal:
|
|
24
|
+
- `activation_steps_prepend` = the resolved value from step 1
|
|
25
|
+
- `activation_steps_append` = the resolved value from step 1
|
|
26
|
+
- `persistent_facts` = the resolved value from step 1
|
|
27
|
+
- `on_complete` = the resolved value from step 1
|
|
28
|
+
- **Original user input:** forward whatever the user said when invoking this skill verbatim.
|
|
103
29
|
|
|
104
|
-
|
|
30
|
+
`bmad-prd` takes the workflow from here. Do not execute any further steps in this shim.
|