Compare commits

..

No commits in common. "5ad35d68bd0210d84687d5aa94d2f619df3baff9" and "6bfc937bd3f687e99ed9632e14b6c8902e1dcd8d" have entirely different histories.

10 changed files with 5 additions and 167 deletions

View File

@ -1,12 +0,0 @@
---
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.

View File

@ -1,74 +0,0 @@
# 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} | |
```

View File

@ -2,26 +2,9 @@
## [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)
--- ---

View File

@ -62,7 +62,7 @@ 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/bmad-method-test-architecture-enterprise)** | Risk-based test strategy and automation | | **[Test Architect (TEA)](https://github.com/bmad-code-org/tea)** | 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 |

View File

@ -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

View File

@ -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
--- ---

View File

@ -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.' description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests "party mode" only.'
--- ---
# Party Mode Workflow # Party Mode Workflow

View File

@ -34,25 +34,6 @@ 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
@ -559,40 +540,6 @@ 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

View File

@ -206,9 +206,7 @@ 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(', ');
} }
// Propagate handler's success status (default true for backward compat) return { success: true, ide: ideName, detail, handlerResult };
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 };

View File

@ -40,7 +40,6 @@ 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"
@ -203,9 +202,6 @@ 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