Compare commits
6 Commits
ba56976885
...
25b609885b
| Author | SHA1 | Date |
|---|---|---|
|
|
25b609885b | |
|
|
1677d54f22 | |
|
|
5ad35d68bd | |
|
|
2f484f15b6 | |
|
|
2d2f4855b1 | |
|
|
d94757a7d4 |
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
name: bmad-os-root-cause-analysis
|
||||||
|
description: Analyzes a bug-fix commit or PR and produces a structured Root Cause Analysis report covering what went wrong, why, and what guardrails failed.
|
||||||
|
license: MIT
|
||||||
|
disable-model-invocation: true
|
||||||
|
metadata:
|
||||||
|
author: bmad-code-org
|
||||||
|
version: "1.0.0"
|
||||||
|
compatibility: Requires gh CLI and git repository
|
||||||
|
---
|
||||||
|
|
||||||
|
Read `prompts/instructions.md` and execute.
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
# Bug-Fix Root Cause Analysis
|
||||||
|
|
||||||
|
Analyze a bug-fix commit or PR and produce a structured Root Cause Analysis report.
|
||||||
|
|
||||||
|
## Principles
|
||||||
|
|
||||||
|
- **Direct attribution.** This report names the individual who introduced the defect. Industry convention advocates blameless postmortems. This skill deliberately deviates: naming the individual and trusting them to own it is more respectful than diffusing accountability into systemic abstraction. Direct, factual, not accusatory. If authorship can't be determined confidently, say so.
|
||||||
|
- **Pyramid communication.** The executive summary must convey the full picture. A reader who stops after the first paragraph gets the gist. Everything else is supporting evidence.
|
||||||
|
|
||||||
|
## Preflight
|
||||||
|
|
||||||
|
Verify `gh auth status` and that you're in a git repository. Stop with a clear message if either fails.
|
||||||
|
|
||||||
|
## Execution
|
||||||
|
|
||||||
|
1. **Identify the fix.** Accept whatever the user provides — commit SHA, PR, issue, description. Resolve to the specific fix commit/PR using `gh` and `git`. If ambiguous, ask. Confirm the change is actually a bug fix before proceeding.
|
||||||
|
2. **Gather evidence.** Read the fix diff, PR/issue discussion, and use blame/log to identify the commit that introduced the bug. Collect timeline data.
|
||||||
|
3. **Analyze.** Apply 5 Whys. Classify the root cause. Identify contributing factors.
|
||||||
|
4. **Evaluate guardrails.** Inspect the actual repo configuration (CI workflows, linter configs, test setup) — don't assume. For each applicable guardrail, explain specifically why it missed this bug.
|
||||||
|
5. **Write the report** to `_bmad-output/rca-reports/rca-{YYYY-MM-DD}-{slug}.md`. Present the executive summary in chat.
|
||||||
|
|
||||||
|
## Report Structure
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Root Cause Analysis: {Bug Title}
|
||||||
|
|
||||||
|
**Date:** {today}
|
||||||
|
**Fix:** {PR link or commit SHA}
|
||||||
|
**Severity:** {Critical | High | Medium | Low}
|
||||||
|
**Root Cause Category:** {Requirements | Design | Code Logic | Test Gap | Process | Environment/Config}
|
||||||
|
|
||||||
|
## Executive Summary
|
||||||
|
|
||||||
|
{One paragraph. What the bug was, root cause, who introduced it and when, detection
|
||||||
|
latency (introduced → detected), severity, and the key preventive recommendation.}
|
||||||
|
|
||||||
|
## What Was the Problem?
|
||||||
|
|
||||||
|
## When Did It Happen?
|
||||||
|
|
||||||
|
| Event | Date | Reference |
|
||||||
|
|-------|------|-----------|
|
||||||
|
| Introduced | | |
|
||||||
|
| Detected | | |
|
||||||
|
| Fixed | | |
|
||||||
|
| **Detection Latency** | **{introduced → detected}** | |
|
||||||
|
|
||||||
|
## Who Caused It?
|
||||||
|
|
||||||
|
{Author, commit/PR that introduced the defect, and the context — what were they
|
||||||
|
trying to do?}
|
||||||
|
|
||||||
|
## How Did It Happen?
|
||||||
|
|
||||||
|
## Why Did It Happen?
|
||||||
|
|
||||||
|
{5 Whys analysis. Root cause category. Contributing factors.}
|
||||||
|
|
||||||
|
## Failed Guardrails Analysis
|
||||||
|
|
||||||
|
| Guardrail | In Place? | Why It Failed |
|
||||||
|
|-----------|-----------|---------------|
|
||||||
|
| | | |
|
||||||
|
|
||||||
|
**Most Critical Failure:** {Which one mattered most and why.}
|
||||||
|
|
||||||
|
## Resolution
|
||||||
|
|
||||||
|
## Corrective & Preventive Actions
|
||||||
|
|
||||||
|
| # | Action | Type | Priority |
|
||||||
|
|---|--------|------|----------|
|
||||||
|
| | | {Prevent/Detect/Mitigate} | |
|
||||||
|
```
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: 📚 Documentation
|
- name: 📚 Documentation
|
||||||
url: http://docs.bmad-method.org
|
url: https://docs.bmad-method.org
|
||||||
about: Check the docs first — tutorials, guides, and reference
|
about: Check the docs first — tutorials, guides, and reference
|
||||||
- name: 💬 Discord Community
|
- name: 💬 Discord Community
|
||||||
url: https://discord.gg/gk8jAdXWmj
|
url: https://discord.gg/gk8jAdXWmj
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ body:
|
||||||
attributes:
|
attributes:
|
||||||
label: Documentation location
|
label: Documentation location
|
||||||
description: Where is the documentation that needs improvement?
|
description: Where is the documentation that needs improvement?
|
||||||
placeholder: e.g., http://docs.bmad-method.org/tutorials/getting-started/ or "In the README"
|
placeholder: e.g., https://docs.bmad-method.org/tutorials/getting-started/ or "In the README"
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
|
|
||||||
17
CHANGELOG.md
17
CHANGELOG.md
|
|
@ -2,9 +2,26 @@
|
||||||
|
|
||||||
## [6.0.3]
|
## [6.0.3]
|
||||||
|
|
||||||
|
### 🎁 Features
|
||||||
|
|
||||||
|
* Add bmad-os-root-cause-analysis skill for analyzing bug-fix commits and producing structured root cause analysis reports with pyramid communication format (#1741)
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
* Fix installer to refuse installation when ancestor directory has BMAD commands, preventing duplicate command autocompletion in nested directories (#1735)
|
||||||
|
* Fix OpenCode integration by replacing unsupported `name` frontmatter with `mode: all` and update directory names to plural form (#1764)
|
||||||
|
* Fix CSV manifest pipeline double-escaping of quotes that was corrupting output files; switch Gemini templates to single quotes (#1746)
|
||||||
* Fix workflow descriptions to use proper quotes so they format better in skill conversion and don't break yaml front matter
|
* Fix workflow descriptions to use proper quotes so they format better in skill conversion and don't break yaml front matter
|
||||||
|
* Fix workflow help task chaining by removing ambiguous "with-argument" clause that caused LLMs to misinterpret help.md as skill calls (#1740)
|
||||||
|
|
||||||
|
### ♻️ Refactoring
|
||||||
|
|
||||||
|
* Standardize all workflow descriptions to use proper quotes to prevent breaking command or skill front matter during skill conversion
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
* Fix broken TEA hyperlinks to point to new repository URL (#1772)
|
||||||
|
* Rebrand BMAD acronym to "Build More Architect Dreams" across documentation (#1765)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
14
README.md
14
README.md
|
|
@ -20,7 +20,7 @@ Traditional AI tools do the thinking for you, producing average results. BMad ag
|
||||||
- **Party Mode** — Bring multiple agent personas into one session to collaborate and discuss
|
- **Party Mode** — Bring multiple agent personas into one session to collaborate and discuss
|
||||||
- **Complete Lifecycle** — From brainstorming to deployment
|
- **Complete Lifecycle** — From brainstorming to deployment
|
||||||
|
|
||||||
[Learn more at **docs.bmad-method.org**](http://docs.bmad-method.org)
|
[Learn more at **docs.bmad-method.org**](https://docs.bmad-method.org)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ Traditional AI tools do the thinking for you, producing average results. BMad ag
|
||||||
|
|
||||||
**V6 is here and we're just getting started!** The BMad Method is evolving rapidly with optimizations including Cross Platform Agent Team and Sub Agent inclusion, Skills Architecture, BMad Builder v1, Dev Loop Automation, and so much more in the works.
|
**V6 is here and we're just getting started!** The BMad Method is evolving rapidly with optimizations including Cross Platform Agent Team and Sub Agent inclusion, Skills Architecture, BMad Builder v1, Dev Loop Automation, and so much more in the works.
|
||||||
|
|
||||||
**[📍 Check out the complete Roadmap →](http://docs.bmad-method.org/roadmap/)**
|
**[📍 Check out the complete Roadmap →](https://docs.bmad-method.org/roadmap/)**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -50,7 +50,7 @@ Follow the installer prompts, then open your AI IDE (Claude Code, Cursor, etc.)
|
||||||
npx bmad-method install --directory /path/to/project --modules bmm --tools claude-code --yes
|
npx bmad-method install --directory /path/to/project --modules bmm --tools claude-code --yes
|
||||||
```
|
```
|
||||||
|
|
||||||
[See all installation options](http://docs.bmad-method.org/how-to/non-interactive-installation/)
|
[See all installation options](https://docs.bmad-method.org/how-to/non-interactive-installation/)
|
||||||
|
|
||||||
> **Not sure what to do?** Run `/bmad-help` — it tells you exactly what's next and what's optional. You can also ask questions like `/bmad-help I just finished the architecture, what do I do next?`
|
> **Not sure what to do?** Run `/bmad-help` — it tells you exactly what's next and what's optional. You can also ask questions like `/bmad-help I just finished the architecture, what do I do next?`
|
||||||
|
|
||||||
|
|
@ -62,17 +62,17 @@ BMad Method extends with official modules for specialized domains. Available dur
|
||||||
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
||||||
| **[BMad Method (BMM)](https://github.com/bmad-code-org/BMAD-METHOD)** | Core framework with 34+ workflows |
|
| **[BMad Method (BMM)](https://github.com/bmad-code-org/BMAD-METHOD)** | Core framework with 34+ workflows |
|
||||||
| **[BMad Builder (BMB)](https://github.com/bmad-code-org/bmad-builder)** | Create custom BMad agents and workflows |
|
| **[BMad Builder (BMB)](https://github.com/bmad-code-org/bmad-builder)** | Create custom BMad agents and workflows |
|
||||||
| **[Test Architect (TEA)](https://github.com/bmad-code-org/tea)** | Risk-based test strategy and automation |
|
| **[Test Architect (TEA)](https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise)** | Risk-based test strategy and automation |
|
||||||
| **[Game Dev Studio (BMGD)](https://github.com/bmad-code-org/bmad-module-game-dev-studio)** | Game development workflows (Unity, Unreal, Godot) |
|
| **[Game Dev Studio (BMGD)](https://github.com/bmad-code-org/bmad-module-game-dev-studio)** | Game development workflows (Unity, Unreal, Godot) |
|
||||||
| **[Creative Intelligence Suite (CIS)](https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite)** | Innovation, brainstorming, design thinking |
|
| **[Creative Intelligence Suite (CIS)](https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite)** | Innovation, brainstorming, design thinking |
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
[BMad Method Docs Site](http://docs.bmad-method.org) — Tutorials, guides, concepts, and reference
|
[BMad Method Docs Site](https://docs.bmad-method.org) — Tutorials, guides, concepts, and reference
|
||||||
|
|
||||||
**Quick links:**
|
**Quick links:**
|
||||||
- [Getting Started Tutorial](http://docs.bmad-method.org/tutorials/getting-started/)
|
- [Getting Started Tutorial](https://docs.bmad-method.org/tutorials/getting-started/)
|
||||||
- [Upgrading from Previous Versions](http://docs.bmad-method.org/how-to/upgrade-to-v6/)
|
- [Upgrading from Previous Versions](https://docs.bmad-method.org/how-to/upgrade-to-v6/)
|
||||||
- [Test Architect Documentation](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/)
|
- [Test Architect Documentation](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
name: help
|
name: help
|
||||||
description: "Analyzes what is done and the users query and offers advice on what to do next. Use if user says what should I do next or what do I do now"
|
description: 'Analyzes what is done and the users query and offers advice on what to do next. Use if user says what should I do next or what do I do now'
|
||||||
---
|
---
|
||||||
|
|
||||||
# Task: BMAD Help
|
# Task: BMAD Help
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
name: brainstorming
|
name: brainstorming
|
||||||
description: 'Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says "help me brainstorm" or "help me ideate".'
|
description: 'Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says help me brainstorm or help me ideate.'
|
||||||
context_file: '' # Optional context file path for project-specific guidance
|
context_file: '' # Optional context file path for project-specific guidance
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
name: party-mode
|
name: party-mode
|
||||||
description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests "party mode" only.'
|
description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests party mode.'
|
||||||
---
|
---
|
||||||
|
|
||||||
# Party Mode Workflow
|
# Party Mode Workflow
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ startMessage: |
|
||||||
- Select and install modules during setup - customize your experience
|
- Select and install modules during setup - customize your experience
|
||||||
- New BMad Method for Agile AI-Driven Development (the evolution of V4)
|
- New BMad Method for Agile AI-Driven Development (the evolution of V4)
|
||||||
- Exciting new modules available during installation, with community modules coming soon
|
- Exciting new modules available during installation, with community modules coming soon
|
||||||
- Documentation: docs.bmad-method.com
|
- Documentation: https://docs.bmad-method.org
|
||||||
|
|
||||||
🌟 BMad is 100% free and open source.
|
🌟 BMad is 100% free and open source.
|
||||||
- No gated Discord. No paywalls. No gated content.
|
- No gated Discord. No paywalls. No gated content.
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,25 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
||||||
* @returns {Promise<Object>} Setup result
|
* @returns {Promise<Object>} Setup result
|
||||||
*/
|
*/
|
||||||
async setup(projectDir, bmadDir, options = {}) {
|
async setup(projectDir, bmadDir, options = {}) {
|
||||||
|
// Check for BMAD files in ancestor directories that would cause duplicates
|
||||||
|
if (this.installerConfig?.ancestor_conflict_check) {
|
||||||
|
const conflict = await this.findAncestorConflict(projectDir);
|
||||||
|
if (conflict) {
|
||||||
|
await prompts.log.error(
|
||||||
|
`Found existing BMAD commands in ancestor installation: ${conflict}\n` +
|
||||||
|
` ${this.name} inherits commands from parent directories, so this would cause duplicates.\n` +
|
||||||
|
` Please remove the BMAD files from that directory first:\n` +
|
||||||
|
` rm -rf "${conflict}"/bmad*`,
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
reason: 'ancestor-conflict',
|
||||||
|
error: `Ancestor conflict: ${conflict}`,
|
||||||
|
conflictDir: conflict,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`);
|
if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`);
|
||||||
|
|
||||||
// Clean up any old BMAD installation first
|
// Clean up any old BMAD installation first
|
||||||
|
|
@ -540,6 +559,40 @@ LOAD and execute from: {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Check ancestor directories for existing BMAD files in the same target_dir.
|
||||||
|
* IDEs like Claude Code inherit commands from parent directories, so an existing
|
||||||
|
* installation in an ancestor would cause duplicate commands.
|
||||||
|
* @param {string} projectDir - Project directory being installed to
|
||||||
|
* @returns {Promise<string|null>} Path to conflicting directory, or null if clean
|
||||||
|
*/
|
||||||
|
async findAncestorConflict(projectDir) {
|
||||||
|
const targetDir = this.installerConfig?.target_dir;
|
||||||
|
if (!targetDir) return null;
|
||||||
|
|
||||||
|
const resolvedProject = await fs.realpath(path.resolve(projectDir));
|
||||||
|
let current = path.dirname(resolvedProject);
|
||||||
|
const root = path.parse(current).root;
|
||||||
|
|
||||||
|
while (current !== root && current.length > root.length) {
|
||||||
|
const candidatePath = path.join(current, targetDir);
|
||||||
|
try {
|
||||||
|
if (await fs.pathExists(candidatePath)) {
|
||||||
|
const entries = await fs.readdir(candidatePath);
|
||||||
|
const hasBmad = entries.some((e) => typeof e === 'string' && e.toLowerCase().startsWith('bmad'));
|
||||||
|
if (hasBmad) {
|
||||||
|
return candidatePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Can't read directory — skip
|
||||||
|
}
|
||||||
|
current = path.dirname(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Walk up ancestor directories from relativeDir toward projectDir, removing each if empty
|
* Walk up ancestor directories from relativeDir toward projectDir, removing each if empty
|
||||||
* Stops at projectDir boundary — never removes projectDir itself
|
* Stops at projectDir boundary — never removes projectDir itself
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,9 @@ class IdeManager {
|
||||||
if (handlerResult.tools > 0) parts.push(`${handlerResult.tools} tools`);
|
if (handlerResult.tools > 0) parts.push(`${handlerResult.tools} tools`);
|
||||||
detail = parts.join(', ');
|
detail = parts.join(', ');
|
||||||
}
|
}
|
||||||
return { success: true, ide: ideName, detail, handlerResult };
|
// Propagate handler's success status (default true for backward compat)
|
||||||
|
const success = handlerResult?.success !== false;
|
||||||
|
return { success, ide: ideName, detail, error: handlerResult?.error, handlerResult };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`);
|
await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`);
|
||||||
return { success: false, ide: ideName, error: error.message };
|
return { success: false, ide: ideName, error: error.message };
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ platforms:
|
||||||
installer:
|
installer:
|
||||||
target_dir: .claude/commands
|
target_dir: .claude/commands
|
||||||
template_type: default
|
template_type: default
|
||||||
|
ancestor_conflict_check: true
|
||||||
|
|
||||||
cline:
|
cline:
|
||||||
name: "Cline"
|
name: "Cline"
|
||||||
|
|
@ -202,6 +203,9 @@ platforms:
|
||||||
# artifact_types: [agents, workflows, tasks, tools]
|
# artifact_types: [agents, workflows, tasks, tools]
|
||||||
# artifact_types: array (optional) # Filter which artifacts to install (default: all)
|
# artifact_types: array (optional) # Filter which artifacts to install (default: all)
|
||||||
# skip_existing: boolean (optional) # Skip files that already exist (default: false)
|
# skip_existing: boolean (optional) # Skip files that already exist (default: false)
|
||||||
|
# ancestor_conflict_check: boolean (optional) # Refuse install when ancestor dir has BMAD files
|
||||||
|
# # in the same target_dir (for IDEs that inherit
|
||||||
|
# # commands from parent directories)
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Platform Categories
|
# Platform Categories
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue