bmad-method 6.0.0-Beta.6 → 6.0.0-Beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/changelog-social/SKILL.md +11 -2
- package/.claude/skills/draft-changelog/SKILL.md +1 -1
- package/.claude/skills/gh-triage/SKILL.md +1 -1
- package/.claude/skills/release-module/SKILL.md +1 -1
- package/.claude/skills/release-module/prompts/instructions.md +0 -20
- package/CHANGELOG.md +22 -1
- package/package.json +1 -1
- package/src/bmm/agents/analyst.agent.yaml +11 -5
- package/src/bmm/agents/pm.agent.yaml +3 -6
- package/src/bmm/module-help.csv +7 -10
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +0 -1
- package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
- package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
- package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +65 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +0 -1
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +0 -1
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +0 -1
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +0 -1
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -2
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -2
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -2
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -2
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -2
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -2
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -3
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +0 -1
- package/src/bmm/workflows/document-project/workflow.yaml +0 -2
- package/src/bmm/workflows/qa/automate/workflow.yaml +0 -2
- package/tools/cli/bmad-cli.js +42 -3
- package/tools/cli/installers/lib/core/manifest-generator.js +8 -36
- package/tools/cli/installers/lib/modules/manager.js +0 -4
- package/src/bmm/workflows/1-analysis/research/workflow.md +0 -173
- package/src/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +0 -433
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow.md +0 -150
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: quick-spec
|
|
3
3
|
description: Conversational spec engineering - ask questions, investigate code, produce implementation-ready tech-spec.
|
|
4
4
|
main_config: '{project-root}/_bmad/bmm/config.yaml'
|
|
5
|
-
web_bundle: true
|
|
6
5
|
|
|
7
6
|
# Checkpoint handler paths
|
|
8
7
|
advanced_elicitation: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml'
|
package/tools/cli/bmad-cli.js
CHANGED
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
const { program } = require('commander');
|
|
2
2
|
const path = require('node:path');
|
|
3
3
|
const fs = require('node:fs');
|
|
4
|
+
const { execSync } = require('node:child_process');
|
|
5
|
+
|
|
6
|
+
// Check for updates - do this asynchronously so it doesn't block startup
|
|
7
|
+
const packageJson = require('../../package.json');
|
|
8
|
+
const packageName = 'bmad-method';
|
|
9
|
+
checkForUpdate().catch(() => {
|
|
10
|
+
// Silently ignore errors - version check is best-effort
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
async function checkForUpdate() {
|
|
14
|
+
try {
|
|
15
|
+
// For beta versions, check the beta tag; otherwise check latest
|
|
16
|
+
const isBeta =
|
|
17
|
+
packageJson.version.includes('Beta') ||
|
|
18
|
+
packageJson.version.includes('beta') ||
|
|
19
|
+
packageJson.version.includes('alpha') ||
|
|
20
|
+
packageJson.version.includes('rc');
|
|
21
|
+
const tag = isBeta ? 'beta' : 'latest';
|
|
22
|
+
|
|
23
|
+
const result = execSync(`npm view ${packageName}@${tag} version`, {
|
|
24
|
+
encoding: 'utf8',
|
|
25
|
+
stdio: 'pipe',
|
|
26
|
+
timeout: 5000,
|
|
27
|
+
}).trim();
|
|
28
|
+
|
|
29
|
+
if (result && result !== packageJson.version) {
|
|
30
|
+
console.warn('');
|
|
31
|
+
console.warn(' ╔═══════════════════════════════════════════════════════════════════════════════╗');
|
|
32
|
+
console.warn(' ║ UPDATE AVAILABLE ║');
|
|
33
|
+
console.warn(' ║ ║');
|
|
34
|
+
console.warn(` ║ You are using version ${packageJson.version} but ${result} is available. ║`);
|
|
35
|
+
console.warn(' ║ ║');
|
|
36
|
+
console.warn(' ║ To update,exir and first run: ║');
|
|
37
|
+
console.warn(` ║ npm cache clean --force && npx bmad-method@${tag} install ║`);
|
|
38
|
+
console.warn(' ║ ║');
|
|
39
|
+
console.warn(' ╚═══════════════════════════════════════════════════════════════════════════════╝');
|
|
40
|
+
console.warn('');
|
|
41
|
+
}
|
|
42
|
+
} catch {
|
|
43
|
+
// Silently fail - network issues or npm not available
|
|
44
|
+
}
|
|
45
|
+
}
|
|
4
46
|
|
|
5
47
|
// Fix for stdin issues when running through npm on Windows
|
|
6
48
|
// Ensures keyboard interaction works properly with CLI prompts
|
|
@@ -20,9 +62,6 @@ if (process.stdin.isTTY) {
|
|
|
20
62
|
}
|
|
21
63
|
}
|
|
22
64
|
|
|
23
|
-
// Load package.json from root for version info
|
|
24
|
-
const packageJson = require('../../package.json');
|
|
25
|
-
|
|
26
65
|
// Load all command modules
|
|
27
66
|
const commandsPath = path.join(__dirname, 'commands');
|
|
28
67
|
const commandFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js'));
|
|
@@ -159,7 +159,11 @@ class ManifestGenerator {
|
|
|
159
159
|
// Recurse into subdirectories
|
|
160
160
|
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
161
161
|
await findWorkflows(fullPath, newRelativePath);
|
|
162
|
-
} else if (
|
|
162
|
+
} else if (
|
|
163
|
+
entry.name === 'workflow.yaml' ||
|
|
164
|
+
entry.name === 'workflow.md' ||
|
|
165
|
+
(entry.name.startsWith('workflow-') && entry.name.endsWith('.md'))
|
|
166
|
+
) {
|
|
163
167
|
// Parse workflow file (both YAML and MD formats)
|
|
164
168
|
if (debug) {
|
|
165
169
|
console.log(`[DEBUG] Found workflow file: ${fullPath}`);
|
|
@@ -729,47 +733,15 @@ class ManifestGenerator {
|
|
|
729
733
|
async writeWorkflowManifest(cfgDir) {
|
|
730
734
|
const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
|
|
731
735
|
const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
|
|
732
|
-
const parseCsvLine = (line) => {
|
|
733
|
-
const columns = line.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
|
|
734
|
-
return columns.map((c) => c.replaceAll(/^"|"$/g, ''));
|
|
735
|
-
};
|
|
736
|
-
|
|
737
|
-
// Read existing manifest to preserve entries
|
|
738
|
-
const existingEntries = new Map();
|
|
739
|
-
if (await fs.pathExists(csvPath)) {
|
|
740
|
-
const content = await fs.readFile(csvPath, 'utf8');
|
|
741
|
-
const lines = content.split('\n').filter((line) => line.trim());
|
|
742
|
-
|
|
743
|
-
// Skip header
|
|
744
|
-
for (let i = 1; i < lines.length; i++) {
|
|
745
|
-
const line = lines[i];
|
|
746
|
-
if (line) {
|
|
747
|
-
const parts = parseCsvLine(line);
|
|
748
|
-
if (parts.length >= 4) {
|
|
749
|
-
const [name, description, module, workflowPath] = parts;
|
|
750
|
-
existingEntries.set(`${module}:${name}`, {
|
|
751
|
-
name,
|
|
752
|
-
description,
|
|
753
|
-
module,
|
|
754
|
-
path: workflowPath,
|
|
755
|
-
});
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
736
|
|
|
761
737
|
// Create CSV header - standalone column removed, everything is canonicalized to 4 columns
|
|
762
738
|
let csv = 'name,description,module,path\n';
|
|
763
739
|
|
|
764
|
-
//
|
|
740
|
+
// Build workflows map from discovered workflows only
|
|
741
|
+
// Old entries are NOT preserved - the manifest reflects what actually exists on disk
|
|
765
742
|
const allWorkflows = new Map();
|
|
766
743
|
|
|
767
|
-
//
|
|
768
|
-
for (const [key, value] of existingEntries) {
|
|
769
|
-
allWorkflows.set(key, value);
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
// Add/update new workflows
|
|
744
|
+
// Only add workflows that were actually discovered in this scan
|
|
773
745
|
for (const workflow of this.workflows) {
|
|
774
746
|
const key = `${workflow.module}:${workflow.name}`;
|
|
775
747
|
allWorkflows.set(key, {
|
|
@@ -781,10 +781,6 @@ class ModuleManager {
|
|
|
781
781
|
return;
|
|
782
782
|
}
|
|
783
783
|
|
|
784
|
-
// Remove web_bundle section using regex to preserve formatting
|
|
785
|
-
// Match the web_bundle key and all its content (including nested items)
|
|
786
|
-
// This handles both web_bundle: false and web_bundle: {...}
|
|
787
|
-
|
|
788
784
|
// Find the line that starts web_bundle
|
|
789
785
|
const lines = yamlContent.split('\n');
|
|
790
786
|
let startIdx = -1;
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: research
|
|
3
|
-
description: Conduct comprehensive research across multiple domains using current web data and verified sources - Market, Technical, Domain and other research types.
|
|
4
|
-
web_bundle: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Research Workflow
|
|
8
|
-
|
|
9
|
-
**Goal:** Conduct comprehensive, exhaustive research across multiple domains using current web data and verified sources to produce complete research documents with compelling narratives and proper citations.
|
|
10
|
-
|
|
11
|
-
**Document Standards:**
|
|
12
|
-
|
|
13
|
-
- **Comprehensive Coverage**: Exhaustive research with no critical gaps
|
|
14
|
-
- **Source Verification**: Every factual claim backed by web sources with URL citations
|
|
15
|
-
- **Document Length**: As long as needed to fully cover the research topic
|
|
16
|
-
- **Professional Structure**: Compelling narrative introduction, detailed TOC, and comprehensive summary
|
|
17
|
-
- **Authoritative Sources**: Multiple independent sources for all critical claims
|
|
18
|
-
|
|
19
|
-
**Your Role:** You are a research facilitator and web data analyst working with an expert partner. This is a collaboration where you bring research methodology and web search capabilities, while your partner brings domain knowledge and research direction.
|
|
20
|
-
|
|
21
|
-
**Final Deliverable**: A complete research document that serves as an authoritative reference on the research topic with:
|
|
22
|
-
|
|
23
|
-
- Compelling narrative introduction
|
|
24
|
-
- Comprehensive table of contents
|
|
25
|
-
- Detailed research sections with proper citations
|
|
26
|
-
- Executive summary and conclusions
|
|
27
|
-
|
|
28
|
-
## WORKFLOW ARCHITECTURE
|
|
29
|
-
|
|
30
|
-
This uses **micro-file architecture** with **routing-based discovery**:
|
|
31
|
-
|
|
32
|
-
- Each research type has its own step folder
|
|
33
|
-
- Step 01 discovers research type and routes to appropriate sub-workflow
|
|
34
|
-
- Sequential progression within each research type
|
|
35
|
-
- Document state tracked in output frontmatter
|
|
36
|
-
|
|
37
|
-
## INITIALIZATION
|
|
38
|
-
|
|
39
|
-
### Configuration Loading
|
|
40
|
-
|
|
41
|
-
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
|
|
42
|
-
|
|
43
|
-
- `project_name`, `output_folder`, , `planning_artifacts`, `user_name`
|
|
44
|
-
- `communication_language`, `document_output_language`, `user_skill_level`
|
|
45
|
-
- `date` as a system-generated value
|
|
46
|
-
|
|
47
|
-
### Paths
|
|
48
|
-
|
|
49
|
-
- `installed_path` = `{project-root}/_bmad/bmm/workflows/1-analysis/research`
|
|
50
|
-
- `template_path` = `{installed_path}/research.template.md`
|
|
51
|
-
- `default_output_file` = `{planning_artifacts}/research/{{research_type}}-{{topic}}-research-{{date}}.md` (dynamic based on research type)
|
|
52
|
-
|
|
53
|
-
## PREREQUISITE
|
|
54
|
-
|
|
55
|
-
**⛔ Web search required.** If unavailable, abort and tell the user.
|
|
56
|
-
|
|
57
|
-
## RESEARCH BEHAVIOR
|
|
58
|
-
|
|
59
|
-
### Web Research Standards
|
|
60
|
-
|
|
61
|
-
- **Current Data Only**: Search the web to verify and supplement your knowledge with current facts
|
|
62
|
-
- **Source Verification**: Require citations for all factual claims
|
|
63
|
-
- **Anti-Hallucination Protocol**: Never present information without verified sources
|
|
64
|
-
- **Multiple Sources**: Require at least 2 independent sources for critical claims
|
|
65
|
-
- **Conflict Resolution**: Present conflicting views and note discrepancies
|
|
66
|
-
- **Confidence Levels**: Flag uncertain data with [High/Medium/Low Confidence]
|
|
67
|
-
|
|
68
|
-
### Source Quality Standards
|
|
69
|
-
|
|
70
|
-
- **Distinguish Clearly**: Facts (from sources) vs Analysis (interpretation) vs Speculation
|
|
71
|
-
- **URL Citation**: Always include source URLs when presenting web search data
|
|
72
|
-
- **Critical Claims**: Market size, growth rates, competitive data need verification
|
|
73
|
-
- **Fact Checking**: Apply fact-checking to critical data points
|
|
74
|
-
|
|
75
|
-
## Implementation Instructions
|
|
76
|
-
|
|
77
|
-
Execute research type discovery and routing:
|
|
78
|
-
|
|
79
|
-
### Research Type Discovery
|
|
80
|
-
|
|
81
|
-
**Your Role:** You are a research facilitator and web data analyst working with an expert partner. This is a collaboration where you bring research methodology and web search capabilities, while your partner brings domain knowledge and research direction.
|
|
82
|
-
|
|
83
|
-
**Research Standards:**
|
|
84
|
-
|
|
85
|
-
- **Anti-Hallucination Protocol**: Never present information without verified sources
|
|
86
|
-
- **Current Data Only**: Search the web to verify and supplement your knowledge with current facts
|
|
87
|
-
- **Source Citation**: Always include URLs for factual claims from web searches
|
|
88
|
-
- **Multiple Sources**: Require 2+ independent sources for critical claims
|
|
89
|
-
- **Conflict Resolution**: Present conflicting views and note discrepancies
|
|
90
|
-
- **Confidence Levels**: Flag uncertain data with [High/Medium/Low Confidence]
|
|
91
|
-
|
|
92
|
-
### Collaborative Research Discovery
|
|
93
|
-
|
|
94
|
-
"Welcome {{user_name}}! I'm excited to work with you as your research partner. I bring web research capabilities with rigorous source verification, while you bring the domain expertise and research direction.
|
|
95
|
-
|
|
96
|
-
**Let me help you clarify what you'd like to research.**
|
|
97
|
-
|
|
98
|
-
**First, tell me: What specific topic, problem, or area do you want to research?**
|
|
99
|
-
|
|
100
|
-
For example:
|
|
101
|
-
|
|
102
|
-
- 'The electric vehicle market in Europe'
|
|
103
|
-
- 'Cloud migration strategies for healthcare'
|
|
104
|
-
- 'AI implementation in financial services'
|
|
105
|
-
- 'Sustainable packaging regulations'
|
|
106
|
-
- 'Or anything else you have in mind...'
|
|
107
|
-
|
|
108
|
-
### Topic Exploration and Clarification
|
|
109
|
-
|
|
110
|
-
Based on the user's initial topic, explore and refine the research scope:
|
|
111
|
-
|
|
112
|
-
#### Topic Clarification Questions:
|
|
113
|
-
|
|
114
|
-
1. **Core Topic**: "What exactly about [topic] are you most interested in?"
|
|
115
|
-
2. **Research Goals**: "What do you hope to achieve with this research?"
|
|
116
|
-
3. **Scope**: "Should we focus broadly or dive deep into specific aspects?"
|
|
117
|
-
4. **Timeline**: "Are you looking at current state, historical context, or future trends?"
|
|
118
|
-
5. **Application**: "How will you use this research? (product development, strategy, academic, etc.)"
|
|
119
|
-
|
|
120
|
-
#### Context Building:
|
|
121
|
-
|
|
122
|
-
- **Initial Input**: User provides topic or research interest
|
|
123
|
-
- **Collaborative Refinement**: Work together to clarify scope and objectives
|
|
124
|
-
- **Goal Alignment**: Ensure research direction matches user needs
|
|
125
|
-
- **Research Boundaries**: Establish clear focus areas and deliverables
|
|
126
|
-
|
|
127
|
-
### Research Type Identification
|
|
128
|
-
|
|
129
|
-
After understanding the research topic and goals, identify the most appropriate research approach:
|
|
130
|
-
|
|
131
|
-
**Research Type Options:**
|
|
132
|
-
|
|
133
|
-
1. **Market Research** - Market size, growth, competition, customer insights
|
|
134
|
-
_Best for: Understanding market dynamics, customer behavior, competitive landscape_
|
|
135
|
-
|
|
136
|
-
2. **Domain Research** - Industry analysis, regulations, technology trends in specific domain
|
|
137
|
-
_Best for: Understanding industry context, regulatory environment, ecosystem_
|
|
138
|
-
|
|
139
|
-
3. **Technical Research** - Technology evaluation, architecture decisions, implementation approaches
|
|
140
|
-
_Best for: Technical feasibility, technology selection, implementation strategies_
|
|
141
|
-
|
|
142
|
-
**Recommendation**: Based on [topic] and [goals], I recommend [suggested research type] because [specific rationale].
|
|
143
|
-
|
|
144
|
-
**What type of research would work best for your needs?**
|
|
145
|
-
|
|
146
|
-
### Research Type Routing
|
|
147
|
-
|
|
148
|
-
<critical>Based on user selection, route to appropriate sub-workflow with the discovered topic using the following IF block sets of instructions. YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`</critical>
|
|
149
|
-
|
|
150
|
-
#### If Market Research:
|
|
151
|
-
|
|
152
|
-
- Set `research_type = "market"`
|
|
153
|
-
- Set `research_topic = [discovered topic from discussion]`
|
|
154
|
-
- Create the starter output file: `{planning_artifacts}/research/market-{{research_topic}}-research-{{date}}.md` with exact copy of the ./research.template.md contents
|
|
155
|
-
- Load: `./market-steps/step-01-init.md` with topic context
|
|
156
|
-
|
|
157
|
-
#### If Domain Research:
|
|
158
|
-
|
|
159
|
-
- Set `research_type = "domain"`
|
|
160
|
-
- Set `research_topic = [discovered topic from discussion]`
|
|
161
|
-
- Create the starter output file: `{planning_artifacts}/research/domain-{{research_topic}}-research-{{date}}.md` with exact copy of the ./research.template.md contents
|
|
162
|
-
- Load: `./domain-steps/step-01-init.md` with topic context
|
|
163
|
-
|
|
164
|
-
#### If Technical Research:
|
|
165
|
-
|
|
166
|
-
- Set `research_type = "technical"`
|
|
167
|
-
- Set `research_topic = [discovered topic from discussion]`
|
|
168
|
-
- Create the starter output file: `{planning_artifacts}/research/technical-{{research_topic}}-research-{{date}}.md` with exact copy of the ./research.template.md contents
|
|
169
|
-
- Load: `./technical-steps/step-01-init.md` with topic context
|
|
170
|
-
|
|
171
|
-
**Important**: The discovered topic from the collaborative discussion should be passed to the research initialization steps, so they don't need to ask "What do you want to research?" again - they can focus on refining the scope for their specific research type.
|
|
172
|
-
|
|
173
|
-
**Note:** All research workflows require web search for current data and source verification.
|