Compare commits

...

5 Commits

Author SHA1 Message Date
The Chef 7d3d51ff4f
docs: fix typos in README and customization guide (#1424)
- Remove duplicate "for" in README example command
- Fix "this is" to "thing is" in README
- Remove extra "at" in "star project icon at near" in README
- Fix "MEthod" to "Method" in customize-bmad.md
2026-01-26 23:25:08 -08:00
Vladimir Hrusovsky 4c92e0cc88
Fix: Correct workflow_path in bmad-quick-flow/quick-spec steps (#1368)
- Fix workflow_path in step-01-understand.md, step-02-investigate.md, and step-03-generate.md
- Changed from non-existent 'create-tech-spec' to correct 'quick-spec'
- Aligns with step-04-review.md which already had correct path

Co-authored-by: Your Name <you@example.com>
Co-authored-by: Brian <bmadcode@gmail.com>
2026-01-26 23:15:22 -08:00
Brian Madison 0d2b8c3429 readme link fix 2026-01-26 18:22:04 -08:00
Brian Madison 984bd9e558 Bump version to 6.0.0-Beta.2 2026-01-26 17:44:49 -06:00
Brian Madison 6a282f86b4 allow updates from any beta, warn on alpha and v4 2026-01-26 17:33:02 -06:00
16 changed files with 50 additions and 95 deletions

View File

@ -1,6 +1,13 @@
# Changelog # Changelog
## [6.0.0-Beta.0] ## [6.0.0-Beta.2]
- Fix installer so commands match what is installed, centralize most ide into a central file instead of separate files for each ide.
- Specific IDEs may still need udpates, but all is config driven now and should be easier to maintain
- Kiro still needs updates, but its been in this state since contributed, will investigate soon
- Any version older than Beta.0 will recommend removal and reinstall to project. From later alphas though its sufficient to quick update if still desired, but best is just start fresh with Beta.
## [6.0.0-Beta.1]
**Release: January 2026 - Alpha to Beta Transition** **Release: January 2026 - Alpha to Beta Transition**

View File

@ -32,10 +32,10 @@ Follow the installer prompts, then open your AI IDE (Claude Code, Cursor, Windsu
> **Not sure what to do?** Run `/bmad-help` — it tells you exactly what's next and what's optional. You can also ask it questions like: > **Not sure what to do?** Run `/bmad-help` — it tells you exactly what's next and what's optional. You can also ask it questions like:
- `/bmad-help How should I build a web app for for my TShirt Business that can scale to millions?` - `/bmad-help How should I build a web app for my TShirt Business that can scale to millions?`
- `/bmad-help I just finished the architecture, I am not sure what to do next` - `/bmad-help I just finished the architecture, I am not sure what to do next`
And the amazing this is BMad Help evolves depending on what modules you install also! And the amazing thing is BMad Help evolves depending on what modules you install also!
- `/bmad-help Im interested in really exploring creative ways to demo BMad at work, what do you recommend to help plan a great slide deck and compelling narrative?`, and if you have the Creative Intelligence Suite installed, it will offer you different or complimentary advice than if you just have BMad Method Module installed! - `/bmad-help Im interested in really exploring creative ways to demo BMad at work, what do you recommend to help plan a great slide deck and compelling narrative?`, and if you have the Creative Intelligence Suite installed, it will offer you different or complimentary advice than if you just have BMad Method Module installed!
The workflows below show the fastest path to working code. You can also load agents directly for a more structured process, extensive planning, or to learn about agile development practices — the agents guide you with menus, explanations, and elicitation at each step. The workflows below show the fastest path to working code. You can also load agents directly for a more structured process, extensive planning, or to learn about agile development practices — the agents guide you with menus, explanations, and elicitation at each step.
@ -59,7 +59,7 @@ Products, platforms, complex features — structured planning then build:
5. `/sprint-planning` — initialize sprint tracking 5. `/sprint-planning` — initialize sprint tracking
6. **Repeat per story:** `/create-story``/dev-story``/code-review` 6. **Repeat per story:** `/create-story``/dev-story``/code-review`
Every step tells you what's next. Optional phases (brainstorming, research, UX design) are available when you need them — ask `/bmad-help` anytime. For a detailed walkthrough, see the [Getting Started Tutorial](http://docs.bmad-method.org/tutorials/getting-started/getting-started-bmadv6/). Every step tells you what's next. Optional phases (brainstorming, research, UX design) are available when you need them — ask `/bmad-help` anytime. For a detailed walkthrough, see the [Getting Started Tutorial](http://docs.bmad-method.org/tutorials/getting-started/).
## Modules ## Modules
@ -78,8 +78,8 @@ BMad Method extends with official modules for specialized domains. Modules are a
**[Full Documentation](http://docs.bmad-method.org)** — Tutorials, how-to guides, concepts, and reference **[Full Documentation](http://docs.bmad-method.org)** — Tutorials, how-to guides, concepts, and reference
- [Getting Started Tutorial](http://docs.bmad-method.org/tutorials/getting-started/getting-started-bmadv6/) - [Getting Started Tutorial](http://docs.bmad-method.org/tutorials/getting-started/)
- [Upgrading from Previous Versions](http://docs.bmad-method.org/how-to/installation/upgrade-to-v6/) - [Upgrading from Previous Versions](http://docs.bmad-method.org/how-to/upgrade-to-v6/)
### For v4 Users ### For v4 Users
@ -96,7 +96,7 @@ BMad Method extends with official modules for specialized domains. Modules are a
BMad is free for everyone — and always will be. If you'd like to support development: BMad is free for everyone — and always will be. If you'd like to support development:
- ⭐ Please click the star project icon at near the top right of this page - ⭐ Please click the star project icon near the top right of this page
- ☕ [Buy Me a Coffee](https://buymeacoffee.com/bmad) — Fuel the development - ☕ [Buy Me a Coffee](https://buymeacoffee.com/bmad) — Fuel the development
- 🏢 Corporate sponsorship — DM on Discord - 🏢 Corporate sponsorship — DM on Discord
- 🎤 Speaking & Media — Available for conferences, podcasts, interviews (BM on Discord) - 🎤 Speaking & Media — Available for conferences, podcasts, interviews (BM on Discord)

View File

@ -151,7 +151,7 @@ prompts:
## Workflow Customization ## Workflow Customization
Information about customizing existing BMad MEthod workflows and skills are coming soon. Information about customizing existing BMad Method workflows and skills are coming soon.
## Module Customization ## Module Customization

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "bmad-method", "name": "bmad-method",
"version": "6.0.0-Beta.1", "version": "6.0.0-Beta.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bmad-method", "name": "bmad-method",
"version": "6.0.0-Beta.1", "version": "6.0.0-Beta.2",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@clack/prompts": "^0.11.0", "@clack/prompts": "^0.11.0",

View File

@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "bmad-method", "name": "bmad-method",
"version": "6.0.0-Beta.1", "version": "6.0.0-Beta.2",
"description": "Breakthrough Method of Agile AI-driven Development", "description": "Breakthrough Method of Agile AI-driven Development",
"keywords": [ "keywords": [
"agile", "agile",

View File

@ -2,7 +2,7 @@
name: 'step-01-understand' name: 'step-01-understand'
description: 'Analyze the requirement delta between current state and what user wants to build' description: 'Analyze the requirement delta between current state and what user wants to build'
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec'
nextStepFile: './step-02-investigate.md' nextStepFile: './step-02-investigate.md'
skipToStepFile: './step-03-generate.md' skipToStepFile: './step-03-generate.md'
templateFile: '{workflow_path}/tech-spec-template.md' templateFile: '{workflow_path}/tech-spec-template.md'

View File

@ -2,7 +2,7 @@
name: 'step-02-investigate' name: 'step-02-investigate'
description: 'Map technical constraints and anchor points within the codebase' description: 'Map technical constraints and anchor points within the codebase'
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec'
nextStepFile: './step-03-generate.md' nextStepFile: './step-03-generate.md'
wipFile: '{implementation_artifacts}/tech-spec-wip.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md'
--- ---

View File

@ -2,7 +2,7 @@
name: 'step-03-generate' name: 'step-03-generate'
description: 'Build the implementation plan based on the technical mapping of constraints' description: 'Build the implementation plan based on the technical mapping of constraints'
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec'
nextStepFile: './step-04-review.md' nextStepFile: './step-04-review.md'
wipFile: '{implementation_artifacts}/tech-spec-wip.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md'
--- ---

View File

@ -139,7 +139,7 @@ b) **HALT and wait for user selection.**
#### Menu Handling Logic: #### Menu Handling Logic:
- IF A: Read fully and follow: `{advanced_elicitation}` with current spec content, process enhanced insights, ask user "Accept improvements? (y/n)", if yes update spec then redisplay menu, if no keep original then redisplay menu - IF A: Read fully and follow: `{advanced_elicitation}` with current spec content, process enhanced insights, ask user "Accept improvements? (y/n)", if yes update spec then redisplay menu, if no keep original then redisplay menu
- IF B: Load and execute `{quick_dev_workflow}` with the final spec file (warn: fresh context is better) - IF B: Read the entire workflow file at `{quick_dev_workflow}` and follow the instructions with the final spec file (warn: fresh context is better)
- IF D: Exit workflow - display final confirmation and path to spec - IF D: Exit workflow - display final confirmation and path to spec
- IF P: Read fully and follow: `{party_mode_exec}` with current spec content, process collaborative insights, ask user "Accept changes? (y/n)", if yes update spec then redisplay menu, if no keep original then redisplay menu - IF P: Read fully and follow: `{party_mode_exec}` with current spec content, process collaborative insights, ask user "Accept changes? (y/n)", if yes update spec then redisplay menu, if no keep original then redisplay menu
- IF R: Execute Adversarial Review (see below) - IF R: Execute Adversarial Review (see below)

View File

@ -999,6 +999,9 @@ class Installer {
// Configure IDEs and copy documentation // Configure IDEs and copy documentation
if (!config.skipIde && config.ides && config.ides.length > 0) { if (!config.skipIde && config.ides && config.ides.length > 0) {
// Ensure IDE manager is initialized (handlers may not be loaded in quick update flow)
await this.ideManager.ensureInitialized();
// Filter out any undefined/null values from the IDE list // Filter out any undefined/null values from the IDE list
const validIdes = config.ides.filter((ide) => ide && typeof ide === 'string'); const validIdes = config.ides.filter((ide) => ide && typeof ide === 'string');

View File

@ -76,7 +76,7 @@ description: '${description.replaceAll("'", "''")}'
# ${item.displayName || item.name} # ${item.displayName || item.name}
LOAD and execute the ${type} at: ${itemPath} Read the entire ${type} file at: ${itemPath}
Follow all instructions in the ${type} file exactly as written. Follow all instructions in the ${type} file exactly as written.
`; `;

View File

@ -1,6 +1,8 @@
---
name: '{{name}}' name: '{{name}}'
description: '{{description}}' description: '{{description}}'
---
LOAD and execute the workflow at: {project-root}/_bmad/{{workflow_path}} Read the entire workflow file at: {project-root}/_bmad/{{workflow_path}}
Follow all instructions in the workflow file exactly as written. Follow all instructions in the workflow file exactly as written.

View File

@ -4,6 +4,6 @@
--- ---
LOAD and execute the workflow at: {project-root}/_bmad/{{workflow_path}} Read the entire workflow file at: {project-root}/_bmad/{{workflow_path}}
Follow all instructions in the workflow file exactly as written. Follow all instructions in the workflow file exactly as written.

View File

@ -4,6 +4,6 @@
## Instructions ## Instructions
LOAD and execute the workflow at: {project-root}/_bmad/{{workflow_path}} Read the entire workflow file at: {project-root}/_bmad/{{workflow_path}}
Follow all instructions in the workflow file exactly as written. Follow all instructions in the workflow file exactly as written.

View File

@ -5,6 +5,6 @@ auto_execution_mode: "iterate"
# {{name}} # {{name}}
LOAD and execute the workflow at: {project-root}/_bmad/{{workflow_path}} Read the entire workflow file at {project-root}/_bmad/{{workflow_path}}
Follow all instructions in the workflow file exactly as written. Follow all instructions in the workflow file exactly as written.

View File

@ -81,7 +81,7 @@ class UI {
hasLegacyCfg = bmadResult.hasLegacyCfg; hasLegacyCfg = bmadResult.hasLegacyCfg;
} }
// Handle legacy .bmad or _cfg folder - these are very old (more than 2 versions behind) // Handle legacy .bmad or _cfg folder - these are very old (v4 or alpha)
// Show version warning instead of offering conversion // Show version warning instead of offering conversion
if (hasLegacyBmadFolder || hasLegacyCfg) { if (hasLegacyBmadFolder || hasLegacyCfg) {
console.log(''); console.log('');
@ -92,9 +92,8 @@ class UI {
'Found a ".bmad"/"bmad" folder, or a legacy "_cfg" folder under the bmad folder - this is from a old BMAD version that is out of date for automatic upgrade, manual intervention required.', 'Found a ".bmad"/"bmad" folder, or a legacy "_cfg" folder under the bmad folder - this is from a old BMAD version that is out of date for automatic upgrade, manual intervention required.',
), ),
); );
console.log(chalk.yellow('This version is more than 2 alpha versions behind current.')); console.log(chalk.yellow('You have a legacy version installed (v4 or alpha).'));
console.log(''); console.log('');
console.log(chalk.dim('For stability, we only support updates from the previous 2 alpha versions.'));
console.log(chalk.dim('Legacy installations may have compatibility issues.')); console.log(chalk.dim('Legacy installations may have compatibility issues.'));
console.log(''); console.log('');
console.log(chalk.dim('For the best experience, we strongly recommend:')); console.log(chalk.dim('For the best experience, we strongly recommend:'));
@ -188,8 +187,8 @@ class UI {
const currentVersion = require(packageJsonPath).version; const currentVersion = require(packageJsonPath).version;
const installedVersion = existingInstall.version || 'unknown'; const installedVersion = existingInstall.version || 'unknown';
// Check if version is too old and warn user // Check if version is pre beta
const shouldProceed = await this.showOldAlphaVersionWarning(installedVersion, currentVersion, path.basename(bmadDir)); const shouldProceed = await this.showLegacyVersionWarning(installedVersion, currentVersion, path.basename(bmadDir));
// If user chose to cancel, exit the installer // If user chose to cancel, exit the installer
if (!shouldProceed) { if (!shouldProceed) {
@ -1457,96 +1456,40 @@ class UI {
} }
/** /**
* Parse alpha version string (e.g., "6.0.0-Alpha.20") * Check if installed version is a legacy version that needs fresh install
* @param {string} version - Version string
* @returns {Object|null} Object with alphaNumber and fullVersion, or null if invalid
*/
parseAlphaVersion(version) {
if (!version || version === 'unknown') {
return null;
}
// Remove 'v' prefix if present
const cleanVersion = version.toString().replace(/^v/i, '');
// Match alpha version pattern: X.Y.Z-Alpha.N (case-insensitive)
const match = cleanVersion.match(/[\d.]+-Alpha\.(\d+)/i);
if (!match) {
return null;
}
return {
alphaNumber: parseInt(match[1], 10),
fullVersion: cleanVersion,
};
}
/**
* Check if installed version is more than 2 alpha versions behind current
* @param {string} installedVersion - The installed version * @param {string} installedVersion - The installed version
* @param {string} currentVersion - The current version * @returns {boolean} True if legacy (v4 or any alpha)
* @returns {Object} Object with { isOldVersion, versionDiff, shouldWarn, installed, current }
*/ */
checkAlphaVersionAge(installedVersion, currentVersion) { isLegacyVersion(installedVersion) {
const installed = this.parseAlphaVersion(installedVersion); if (!installedVersion || installedVersion === 'unknown') {
const current = this.parseAlphaVersion(currentVersion); return true; // Treat unknown as legacy for safety
// If we can't parse either version, don't warn
if (!installed || !current) {
return { isOldVersion: false, versionDiff: 0, shouldWarn: false };
} }
// Check if version string contains -alpha or -Alpha (any v6 alpha)
// Calculate alpha version difference return /-alpha\./i.test(installedVersion);
const versionDiff = current.alphaNumber - installed.alphaNumber;
// Consider it old if more than 2 versions behind
const isOldVersion = versionDiff > 2;
return {
isOldVersion,
versionDiff,
shouldWarn: isOldVersion,
installed: installed.fullVersion,
current: current.fullVersion,
installedAlpha: installed.alphaNumber,
currentAlpha: current.alphaNumber,
};
} }
/** /**
* Show warning for old alpha version and ask if user wants to proceed * Show warning for legacy version (v4 or alpha) and ask if user wants to proceed
* @param {string} installedVersion - The installed version * @param {string} installedVersion - The installed version
* @param {string} currentVersion - The current version * @param {string} currentVersion - The current version
* @param {string} bmadFolderName - Name of the BMAD folder * @param {string} bmadFolderName - Name of the BMAD folder
* @returns {Promise<boolean>} True if user wants to proceed, false if they cancel * @returns {Promise<boolean>} True if user wants to proceed, false if they cancel
*/ */
async showOldAlphaVersionWarning(installedVersion, currentVersion, bmadFolderName) { async showLegacyVersionWarning(installedVersion, currentVersion, bmadFolderName) {
const versionInfo = this.checkAlphaVersionAge(installedVersion, currentVersion); if (!this.isLegacyVersion(installedVersion)) {
return true; // Not legacy, proceed
// Also warn if version is unknown or can't be parsed (legacy/unsupported)
const isUnknownVersion = installedVersion === 'unknown' || !versionInfo.installed;
if (!versionInfo.shouldWarn && !isUnknownVersion) {
return true; // Not old, proceed
} }
console.log(''); console.log('');
console.log(chalk.yellow.bold('⚠️ VERSION WARNING')); console.log(chalk.yellow.bold('⚠️ VERSION WARNING'));
console.log(chalk.yellow('─'.repeat(80))); console.log(chalk.yellow('─'.repeat(80)));
if (isUnknownVersion) { if (installedVersion === 'unknown') {
console.log(chalk.yellow('Unable to detect your installed BMAD version.')); console.log(chalk.yellow('Unable to detect your installed BMAD version.'));
console.log(chalk.yellow('This appears to be a legacy or unsupported installation.')); console.log(chalk.yellow('This appears to be a legacy or unsupported installation.'));
console.log('');
console.log(chalk.dim('For stability, we only support updates from the previous 2 alpha versions.'));
console.log(chalk.dim('Legacy installations may have compatibility issues.'));
} else { } else {
console.log(chalk.yellow(`You are updating from ${versionInfo.installed} to ${versionInfo.current}.`)); console.log(chalk.yellow(`You are updating from ${installedVersion} to ${currentVersion}.`));
console.log(chalk.yellow(`This is ${versionInfo.versionDiff} alpha versions behind.`)); console.log(chalk.yellow('You have a legacy version installed (v4 or alpha).'));
console.log('');
console.log(chalk.dim(`For stability, we only support updates from the previous 2 alpha versions`));
console.log(chalk.dim(`(Alpha.${versionInfo.currentAlpha - 2} through Alpha.${versionInfo.currentAlpha - 1}).`));
} }
console.log(''); console.log('');