Merge remote-tracking branch 'origin/main' into docs/add-front-matter
# Conflicts: # docs/downloads.md
This commit is contained in:
commit
9d202e8c07
|
|
@ -0,0 +1,13 @@
|
||||||
|
## What
|
||||||
|
<!-- 1-2 sentences describing WHAT changed -->
|
||||||
|
|
||||||
|
## Why
|
||||||
|
<!-- 1-2 sentences explaining WHY this change is needed -->
|
||||||
|
<!-- Fixes `#issue_number` (if applicable) -->
|
||||||
|
|
||||||
|
## How
|
||||||
|
<!-- 2-3 bullets listing HOW you implemented it -->
|
||||||
|
-
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
<!-- 1-2 sentences on how you tested this -->
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
name: Trigger CodeRabbit on Ready for Review
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ready_for_review]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
trigger-review:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: Request CodeRabbit review
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.payload.pull_request.number,
|
||||||
|
body: '@coderabbitai review'
|
||||||
|
});
|
||||||
|
|
@ -1,193 +0,0 @@
|
||||||
name: Manual Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
version_bump:
|
|
||||||
description: Version bump type
|
|
||||||
required: true
|
|
||||||
default: beta
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- beta
|
|
||||||
- alpha
|
|
||||||
- patch
|
|
||||||
- minor
|
|
||||||
- major
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: ".nvmrc"
|
|
||||||
cache: npm
|
|
||||||
registry-url: https://registry.npmjs.org
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm ci
|
|
||||||
|
|
||||||
- name: Run tests and validation
|
|
||||||
run: |
|
|
||||||
npm run validate
|
|
||||||
npm run format:check
|
|
||||||
npm run lint
|
|
||||||
|
|
||||||
- name: Configure Git
|
|
||||||
run: |
|
|
||||||
git config user.name "github-actions[bot]"
|
|
||||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
||||||
|
|
||||||
- name: Bump version
|
|
||||||
run: |
|
|
||||||
case "${{ github.event.inputs.version_bump }}" in
|
|
||||||
alpha|beta) npm version prerelease --no-git-tag-version --preid=${{ github.event.inputs.version_bump }} ;;
|
|
||||||
*) npm version ${{ github.event.inputs.version_bump }} --no-git-tag-version ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
- name: Get new version and previous tag
|
|
||||||
id: version
|
|
||||||
run: |
|
|
||||||
echo "new_version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
|
|
||||||
echo "previous_tag=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Update installer package.json
|
|
||||||
run: |
|
|
||||||
sed -i 's/"version": ".*"/"version": "${{ steps.version.outputs.new_version }}"/' tools/installer/package.json
|
|
||||||
|
|
||||||
# TODO: Re-enable web bundles once tools/cli/bundlers/ is restored
|
|
||||||
# - name: Generate web bundles
|
|
||||||
# run: npm run bundle
|
|
||||||
|
|
||||||
- name: Commit version bump
|
|
||||||
run: |
|
|
||||||
git add .
|
|
||||||
git commit -m "release: bump to v${{ steps.version.outputs.new_version }}"
|
|
||||||
|
|
||||||
- name: Generate release notes
|
|
||||||
id: release_notes
|
|
||||||
run: |
|
|
||||||
# Get commits since last tag
|
|
||||||
COMMITS=$(git log ${{ steps.version.outputs.previous_tag }}..HEAD --pretty=format:"- %s" --reverse)
|
|
||||||
|
|
||||||
# Categorize commits
|
|
||||||
FEATURES=$(echo "$COMMITS" | grep -E "^- (feat|Feature)" || true)
|
|
||||||
FIXES=$(echo "$COMMITS" | grep -E "^- (fix|Fix)" || true)
|
|
||||||
CHORES=$(echo "$COMMITS" | grep -E "^- (chore|Chore)" || true)
|
|
||||||
OTHERS=$(echo "$COMMITS" | grep -v -E "^- (feat|Feature|fix|Fix|chore|Chore|release:|Release:)" || true)
|
|
||||||
|
|
||||||
# Build release notes
|
|
||||||
cat > release_notes.md << 'EOF'
|
|
||||||
## 🚀 What's New in v${{ steps.version.outputs.new_version }}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [ ! -z "$FEATURES" ]; then
|
|
||||||
echo "### ✨ New Features" >> release_notes.md
|
|
||||||
echo "$FEATURES" >> release_notes.md
|
|
||||||
echo "" >> release_notes.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z "$FIXES" ]; then
|
|
||||||
echo "### 🐛 Bug Fixes" >> release_notes.md
|
|
||||||
echo "$FIXES" >> release_notes.md
|
|
||||||
echo "" >> release_notes.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z "$OTHERS" ]; then
|
|
||||||
echo "### 📦 Other Changes" >> release_notes.md
|
|
||||||
echo "$OTHERS" >> release_notes.md
|
|
||||||
echo "" >> release_notes.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z "$CHORES" ]; then
|
|
||||||
echo "### 🔧 Maintenance" >> release_notes.md
|
|
||||||
echo "$CHORES" >> release_notes.md
|
|
||||||
echo "" >> release_notes.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >> release_notes.md << 'EOF'
|
|
||||||
|
|
||||||
## 📦 Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx bmad-method install
|
|
||||||
```
|
|
||||||
|
|
||||||
**Full Changelog**: https://github.com/bmad-code-org/BMAD-METHOD/compare/${{ steps.version.outputs.previous_tag }}...v${{ steps.version.outputs.new_version }}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Output for GitHub Actions
|
|
||||||
echo "RELEASE_NOTES<<EOF" >> $GITHUB_OUTPUT
|
|
||||||
cat release_notes.md >> $GITHUB_OUTPUT
|
|
||||||
echo "EOF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Create and push tag
|
|
||||||
run: |
|
|
||||||
# Check if tag already exists
|
|
||||||
if git rev-parse "v${{ steps.version.outputs.new_version }}" >/dev/null 2>&1; then
|
|
||||||
echo "Tag v${{ steps.version.outputs.new_version }} already exists, skipping tag creation"
|
|
||||||
else
|
|
||||||
git tag -a "v${{ steps.version.outputs.new_version }}" -m "Release v${{ steps.version.outputs.new_version }}"
|
|
||||||
git push origin "v${{ steps.version.outputs.new_version }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Push changes to main
|
|
||||||
run: |
|
|
||||||
if git push origin HEAD:main 2>/dev/null; then
|
|
||||||
echo "✅ Successfully pushed to main branch"
|
|
||||||
else
|
|
||||||
echo "⚠️ Could not push to main (protected branch). This is expected."
|
|
||||||
echo "📝 Version bump and tag were created successfully."
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Publish to NPM
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
||||||
run: |
|
|
||||||
VERSION="${{ steps.version.outputs.new_version }}"
|
|
||||||
if [[ "$VERSION" == *"alpha"* ]]; then
|
|
||||||
echo "Publishing alpha prerelease version with --tag alpha"
|
|
||||||
npm publish --tag alpha
|
|
||||||
elif [[ "$VERSION" == *"beta"* ]]; then
|
|
||||||
echo "Publishing beta prerelease version with --tag latest"
|
|
||||||
npm publish --tag latest
|
|
||||||
else
|
|
||||||
echo "Publishing stable version with --tag latest"
|
|
||||||
npm publish --tag latest
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Create GitHub Release
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
|
||||||
tag_name: v${{ steps.version.outputs.new_version }}
|
|
||||||
name: "BMad Method v${{ steps.version.outputs.new_version }}"
|
|
||||||
body: |
|
|
||||||
${{ steps.release_notes.outputs.RELEASE_NOTES }}
|
|
||||||
draft: false
|
|
||||||
prerelease: ${{ contains(steps.version.outputs.new_version, 'alpha') || contains(steps.version.outputs.new_version, 'beta') }}
|
|
||||||
|
|
||||||
- name: Summary
|
|
||||||
run: |
|
|
||||||
echo "## 🎉 Successfully released v${{ steps.version.outputs.new_version }}!" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "### 📦 Distribution" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "- **NPM**: Published with @latest tag" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "- **GitHub Release**: https://github.com/bmad-code-org/BMAD-METHOD/releases/tag/v${{ steps.version.outputs.new_version }}" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "### ✅ Installation" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "npx bmad-method@${{ steps.version.outputs.new_version }} install" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
---
|
|
||||||
title: Downloads
|
|
||||||
description: Download BMad Method source bundles, prompts, and LLM-optimized documentation files
|
|
||||||
---
|
|
||||||
|
|
||||||
Download BMad Method resources for offline use, AI training, or integration.
|
|
||||||
|
|
||||||
## Source Bundles
|
|
||||||
|
|
||||||
Download these from the `downloads/` folder on the documentation site.
|
|
||||||
|
|
||||||
| File | Description |
|
|
||||||
| ------------------ | ------------------------------- |
|
|
||||||
| `bmad-sources.zip` | Complete BMad source files |
|
|
||||||
| `bmad-prompts.zip` | Agent and workflow prompts only |
|
|
||||||
|
|
||||||
## LLM-Optimized Files
|
|
||||||
|
|
||||||
These files are designed for AI consumption - perfect for loading into Claude, ChatGPT, or any LLM context window. See [API Access](#api-access) below for URLs.
|
|
||||||
|
|
||||||
| File | Description | Use Case |
|
|
||||||
| --------------- | ----------------------------------- | -------------------------- |
|
|
||||||
| `llms.txt` | Documentation index with summaries | Quick overview, navigation |
|
|
||||||
| `llms-full.txt` | Complete documentation concatenated | Full context loading |
|
|
||||||
|
|
||||||
### Using with LLMs
|
|
||||||
|
|
||||||
**Claude Projects:**
|
|
||||||
```
|
|
||||||
Upload llms-full.txt as project knowledge
|
|
||||||
```
|
|
||||||
|
|
||||||
**ChatGPT:**
|
|
||||||
```
|
|
||||||
Paste llms.txt for navigation, or sections from llms-full.txt as needed
|
|
||||||
```
|
|
||||||
|
|
||||||
**API Usage:**
|
|
||||||
```python
|
|
||||||
import requests
|
|
||||||
docs = requests.get("https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt").text
|
|
||||||
# Include in your system prompt or context
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation Options
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx bmad-method install
|
|
||||||
```
|
|
||||||
|
|
||||||
[More details](/docs/how-to/install-bmad.md)
|
|
||||||
|
|
||||||
## Version Information
|
|
||||||
|
|
||||||
- **Current Version:** See [CHANGELOG](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md)
|
|
||||||
- **Release Notes:** Available on [GitHub Releases](https://github.com/bmad-code-org/BMAD-METHOD/releases)
|
|
||||||
|
|
||||||
## API Access
|
|
||||||
|
|
||||||
For programmatic access to BMad documentation:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Get documentation index
|
|
||||||
curl https://bmad-code-org.github.io/BMAD-METHOD/llms.txt
|
|
||||||
|
|
||||||
# Get full documentation
|
|
||||||
curl https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Want to improve BMad Method? Check out:
|
|
||||||
|
|
||||||
- [Contributing Guide](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CONTRIBUTING.md)
|
|
||||||
- [GitHub Repository](https://github.com/bmad-code-org/BMAD-METHOD)
|
|
||||||
|
|
@ -3,7 +3,7 @@ title: "Established Projects"
|
||||||
description: How to use BMad Method on existing codebases
|
description: How to use BMad Method on existing codebases
|
||||||
---
|
---
|
||||||
|
|
||||||
Use BMad Method effectively when working on existing projects and legacy codebases.
|
Use BMad Method effectively when working on existing projects and legacy codebases, sometimes also referred to as brownfield projects.
|
||||||
|
|
||||||
This guide covers the essential workflow for onboarding to existing projects with BMad Method.
|
This guide covers the essential workflow for onboarding to existing projects with BMad Method.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,6 @@ Fetch `llms-full.txt` into your session:
|
||||||
https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt
|
https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
See the [Downloads page](/docs/downloads.md) for other downloadable resources.
|
|
||||||
|
|
||||||
### 3. Ask Your Question
|
### 3. Ask Your Question
|
||||||
|
|
||||||
:::note[Example]
|
:::note[Example]
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ description: Step-by-step guide to installing BMad in your project
|
||||||
|
|
||||||
Use the `npx bmad-method install` command to set up BMad in your project with your choice of modules and AI tools.
|
Use the `npx bmad-method install` command to set up BMad in your project with your choice of modules and AI tools.
|
||||||
|
|
||||||
|
If you want to use a non interactive installer and provide all install options on the command line, [this guide](/docs/non-interactive-installation.md).
|
||||||
|
|
||||||
## When to Use This
|
## When to Use This
|
||||||
|
|
||||||
- Starting a new project with BMad
|
- Starting a new project with BMad
|
||||||
|
|
|
||||||
|
|
@ -3,23 +3,17 @@ title: "Document Sharding Guide"
|
||||||
description: Split large markdown files into smaller organized files for better context management
|
description: Split large markdown files into smaller organized files for better context management
|
||||||
---
|
---
|
||||||
|
|
||||||
Use the `shard-doc` tool to split large markdown files into smaller, organized files for better context management.
|
Use the `shard-doc` tool if you need to split large markdown files into smaller, organized files for better context management.
|
||||||
|
|
||||||
|
This is no longer recommended, and soon with updated workflows and most major llms and tools supporting sub processes this will be unnecessary.
|
||||||
|
|
||||||
## When to Use This
|
## When to Use This
|
||||||
|
|
||||||
- Very large complex PRDs
|
Only use this if you notice your chosen tool / model combination are failing to load and read all the documents as input when needed.
|
||||||
- Architecture documents with multiple system layers
|
|
||||||
- Epic files with 4+ epics (especially for Phase 4)
|
|
||||||
- UX design specs covering multiple subsystems
|
|
||||||
|
|
||||||
## What is Document Sharding?
|
## What is Document Sharding?
|
||||||
|
|
||||||
Document sharding splits large markdown files into smaller, organized files based on level 2 headings (`## Heading`). This enables:
|
Document sharding splits large markdown files into smaller, organized files based on level 2 headings (`## Heading`).
|
||||||
|
|
||||||
- **Selective Loading** - Workflows load only the sections they need
|
|
||||||
- **Reduced Token Usage** - Massive efficiency gains for large projects
|
|
||||||
- **Better Organization** - Logical section-based file structure
|
|
||||||
- **Maintained Context** - Index file preserves document structure
|
|
||||||
|
|
||||||
### Architecture
|
### Architecture
|
||||||
|
|
||||||
|
|
@ -62,28 +56,6 @@ Agent: Sharding PRD.md...
|
||||||
✓ Complete!
|
✓ Complete!
|
||||||
```
|
```
|
||||||
|
|
||||||
## What You Get
|
|
||||||
|
|
||||||
**index.md structure:**
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
|
|
||||||
## Sections
|
|
||||||
|
|
||||||
1. [Overview](./overview.md) - Project vision and objectives
|
|
||||||
2. [User Requirements](./user-requirements.md) - Feature specifications
|
|
||||||
3. [Epic 1: Authentication](./epic-1-authentication.md) - User auth system
|
|
||||||
4. [Epic 2: Dashboard](./epic-2-dashboard.md) - Main dashboard UI
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
**Individual section files:**
|
|
||||||
|
|
||||||
- Named from heading text (kebab-case)
|
|
||||||
- Contains complete section content
|
|
||||||
- Preserves all markdown formatting
|
|
||||||
- Can be read independently
|
|
||||||
|
|
||||||
## How Workflow Discovery Works
|
## How Workflow Discovery Works
|
||||||
|
|
||||||
BMad workflows use a **dual discovery system**:
|
BMad workflows use a **dual discovery system**:
|
||||||
|
|
|
||||||
|
|
@ -20,14 +20,7 @@ Use the BMad installer to upgrade from v4 to v6, which includes automatic detect
|
||||||
|
|
||||||
### 1. Run the Installer
|
### 1. Run the Installer
|
||||||
|
|
||||||
```bash
|
Follow the [Installer Instructions](/docs/how-to/install-bmad.md).
|
||||||
npx bmad-method install
|
|
||||||
```
|
|
||||||
|
|
||||||
The installer automatically detects:
|
|
||||||
|
|
||||||
- **Legacy v4 folder**: `.bmad-method`
|
|
||||||
- **IDE command artifacts**: Legacy bmad folders in `.claude/commands/`, `.cursor/commands/`, etc.
|
|
||||||
|
|
||||||
### 2. Handle Legacy Installation
|
### 2. Handle Legacy Installation
|
||||||
|
|
||||||
|
|
@ -35,21 +28,16 @@ When v4 is detected, you can:
|
||||||
|
|
||||||
- Allow the installer to back up and remove `.bmad-method`
|
- Allow the installer to back up and remove `.bmad-method`
|
||||||
- Exit and handle cleanup manually
|
- Exit and handle cleanup manually
|
||||||
- Keep both (not recommended for same project)
|
|
||||||
|
If you named your bmad method folder something else - you will need to manual remove the folder yourself.
|
||||||
|
|
||||||
### 3. Clean Up IDE Commands
|
### 3. Clean Up IDE Commands
|
||||||
|
|
||||||
Manually remove legacy v4 IDE commands:
|
Manually remove legacy v4 IDE commands - for example if you have claude, look for any nested folders that start with bmad and remove them:
|
||||||
|
|
||||||
- `.claude/commands/BMad/agents`
|
- `.claude/commands/BMad/agents`
|
||||||
- `.claude/commands/BMad/tasks`
|
- `.claude/commands/BMad/tasks`
|
||||||
|
|
||||||
New v6 commands will be at `.claude/commands/bmad/<module>/agents|workflows`.
|
|
||||||
|
|
||||||
:::tip[Accidentally Deleted Commands?]
|
|
||||||
If you delete the wrong commands, rerun the installer and choose "quick update" to restore them.
|
|
||||||
:::
|
|
||||||
|
|
||||||
### 4. Migrate Planning Artifacts
|
### 4. Migrate Planning Artifacts
|
||||||
|
|
||||||
**If you have planning documents (Brief/PRD/UX/Architecture):**
|
**If you have planning documents (Brief/PRD/UX/Architecture):**
|
||||||
|
|
@ -71,24 +59,6 @@ If you have stories created or implemented:
|
||||||
3. Run the Scrum Master's `sprint-planning` workflow
|
3. Run the Scrum Master's `sprint-planning` workflow
|
||||||
4. Tell the SM which epics/stories are already complete
|
4. Tell the SM which epics/stories are already complete
|
||||||
|
|
||||||
### 6. Migrate Agent Customizations
|
|
||||||
|
|
||||||
**v4:** Modified agent files directly in `_bmad-*` folders
|
|
||||||
|
|
||||||
**v6:** All customizations go in `_bmad/_config/agents/` using customize files:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# _bmad/_config/agents/bmm-pm.customize.yaml
|
|
||||||
persona:
|
|
||||||
name: 'Captain Jack'
|
|
||||||
role: 'Swashbuckling Product Owner'
|
|
||||||
communication_style: |
|
|
||||||
- Talk like a pirate
|
|
||||||
- Use nautical metaphors
|
|
||||||
```
|
|
||||||
|
|
||||||
After modifying customization files, rerun the installer and choose "rebuild all agents" or "quick update".
|
|
||||||
|
|
||||||
## What You Get
|
## What You Get
|
||||||
|
|
||||||
**v6 unified structure:**
|
**v6 unified structure:**
|
||||||
|
|
@ -107,25 +77,19 @@ your-project/
|
||||||
|
|
||||||
## Module Migration
|
## Module Migration
|
||||||
|
|
||||||
| v4 Module | v6 Status |
|
| v4 Module | v6 Status |
|
||||||
|-----------|-----------|
|
| ----------------------------- | ----------------------------------------- |
|
||||||
| `_bmad-2d-phaser-game-dev` | Integrated into BMGD Module |
|
| `.bmad-2d-phaser-game-dev` | Integrated into BMGD Module |
|
||||||
| `_bmad-2d-unity-game-dev` | Integrated into BMGD Module |
|
| `.bmad-2d-unity-game-dev` | Integrated into BMGD Module |
|
||||||
| `_bmad-godot-game-dev` | Integrated into BMGD Module |
|
| `.bmad-godot-game-dev` | Integrated into BMGD Module |
|
||||||
| `_bmad-infrastructure-devops` | Deprecated — new DevOps agent coming soon |
|
| `.bmad-infrastructure-devops` | Deprecated — new DevOps agent coming soon |
|
||||||
| `_bmad-creative-writing` | Not adapted — new v6 module coming soon |
|
| `.bmad-creative-writing` | Not adapted — new v6 module coming soon |
|
||||||
|
|
||||||
## Key Changes
|
## Key Changes
|
||||||
|
|
||||||
| Concept | v4 | v6 |
|
| Concept | v4 | v6 |
|
||||||
|---------|----|----|
|
| ------------- | ------------------------------------- | ------------------------------------ |
|
||||||
| **Core** | `_bmad-core` was actually BMad Method | `_bmad/core/` is universal framework |
|
| **Core** | `_bmad-core` was actually BMad Method | `_bmad/core/` is universal framework |
|
||||||
| **Method** | `_bmad-method` | `_bmad/bmm/` |
|
| **Method** | `_bmad-method` | `_bmad/bmm/` |
|
||||||
| **Config** | Modified files directly | `config.yaml` per module |
|
| **Config** | Modified files directly | `config.yaml` per module |
|
||||||
| **Documents** | Sharded or unsharded required setup | Fully flexible, auto-scanned |
|
| **Documents** | Sharded or unsharded required setup | Fully flexible, auto-scanned |
|
||||||
|
|
||||||
## Tips
|
|
||||||
|
|
||||||
- **Back up first** — Keep your v4 installation until you verify v6 works
|
|
||||||
- **Use v6 workflows** — Even partial planning docs benefit from v6's improved discovery
|
|
||||||
- **Rebuild after customizing** — Always run the installer after changing customize files
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ title: Welcome to the BMad Method
|
||||||
description: AI-driven development framework with specialized agents, guided workflows, and intelligent planning
|
description: AI-driven development framework with specialized agents, guided workflows, and intelligent planning
|
||||||
---
|
---
|
||||||
|
|
||||||
The BMad Method (**B**reakthrough **M**ethod of **A**gile AI **D**riven Development) is an AI-driven development framework that helps you build software faster and smarter. It provides specialized AI agents, guided workflows, and intelligent planning that adapts to your project's complexity—whether you're fixing a bug or building an enterprise platform.
|
The BMad Method (**B**reakthrough **M**ethod of **A**gile AI **D**riven Development) is an AI-driven development framework that helps you build software through the whole process from ideation and planning all the way through agentic implementation. It provides specialized AI agents, guided workflows, and intelligent planning that adapts to your project's complexity, whether you're fixing a bug or building an enterprise platform.
|
||||||
|
|
||||||
If you're comfortable working with AI coding assistants like Claude, Cursor, or GitHub Copilot, you're ready to get started.
|
If you're comfortable working with AI coding assistants like Claude, Cursor, or GitHub Copilot, you're ready to get started.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "bmad-method",
|
"name": "bmad-method",
|
||||||
"version": "6.0.0-Beta.6",
|
"version": "6.0.0-Beta.7",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "bmad-method",
|
"name": "bmad-method",
|
||||||
"version": "6.0.0-Beta.6",
|
"version": "6.0.0-Beta.7",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@clack/core": "^1.0.0",
|
"@clack/core": "^1.0.0",
|
||||||
|
|
|
||||||
|
|
@ -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.6",
|
"version": "6.0.0-Beta.7",
|
||||||
"description": "Breakthrough Method of Agile AI-driven Development",
|
"description": "Breakthrough Method of Agile AI-driven Development",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"agile",
|
"agile",
|
||||||
|
|
@ -41,10 +41,6 @@
|
||||||
"lint:md": "markdownlint-cli2 \"**/*.md\"",
|
"lint:md": "markdownlint-cli2 \"**/*.md\"",
|
||||||
"prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
|
"prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
|
||||||
"rebundle": "node tools/cli/bundlers/bundle-web.js rebundle",
|
"rebundle": "node tools/cli/bundlers/bundle-web.js rebundle",
|
||||||
"release:major": "gh workflow run \"Manual Release\" -f version_bump=major",
|
|
||||||
"release:minor": "gh workflow run \"Manual Release\" -f version_bump=minor",
|
|
||||||
"release:patch": "gh workflow run \"Manual Release\" -f version_bump=patch",
|
|
||||||
"release:watch": "gh run watch",
|
|
||||||
"test": "npm run test:schemas && npm run test:install && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
|
"test": "npm run test:schemas && npm run test:install && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
|
||||||
"test:coverage": "c8 --reporter=text --reporter=html npm run test:schemas",
|
"test:coverage": "c8 --reporter=text --reporter=html npm run test:schemas",
|
||||||
"test:install": "node test/test-installation-components.js",
|
"test:install": "node test/test-installation-components.js",
|
||||||
|
|
@ -93,7 +89,6 @@
|
||||||
"@astrojs/sitemap": "^3.6.0",
|
"@astrojs/sitemap": "^3.6.0",
|
||||||
"@astrojs/starlight": "^0.37.5",
|
"@astrojs/starlight": "^0.37.5",
|
||||||
"@eslint/js": "^9.33.0",
|
"@eslint/js": "^9.33.0",
|
||||||
"archiver": "^7.0.1",
|
|
||||||
"astro": "^5.16.0",
|
"astro": "^5.16.0",
|
||||||
"c8": "^10.1.3",
|
"c8": "^10.1.3",
|
||||||
"eslint": "^9.33.0",
|
"eslint": "^9.33.0",
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ Recap that the brief captures everything needed to guide subsequent product deve
|
||||||
|
|
||||||
### 5. Suggest next steps
|
### 5. Suggest next steps
|
||||||
|
|
||||||
Product Brief complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `Validate PRD`.
|
Product Brief complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `Validate PRD`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ Show the generated architectural patterns and present continue option:
|
||||||
#### If 'C' (Continue):
|
#### If 'C' (Continue):
|
||||||
|
|
||||||
- Append the final content to the research document
|
- Append the final content to the research document
|
||||||
- Update frontmatter: `stepsCompleted: [1, 2, 3]`
|
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4]`
|
||||||
- Load: `./step-05-implementation-research.md`
|
- Load: `./step-05-implementation-research.md`
|
||||||
|
|
||||||
## APPEND TO DOCUMENT:
|
## APPEND TO DOCUMENT:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Technical Research Step 4: Implementation Research
|
# Technical Research Step 5: Implementation Research
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
- 🎯 Show web search analysis before presenting findings
|
- 🎯 Show web search analysis before presenting findings
|
||||||
- ⚠️ Present [C] complete option after implementation research content generation
|
- ⚠️ Present [C] complete option after implementation research content generation
|
||||||
- 💾 ONLY save when user chooses C (Complete)
|
- 💾 ONLY save when user chooses C (Complete)
|
||||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4]` before completing workflow
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5]` before completing workflow
|
||||||
- 🚫 FORBIDDEN to complete workflow until C is selected
|
- 🚫 FORBIDDEN to complete workflow until C is selected
|
||||||
|
|
||||||
## CONTEXT BOUNDARIES:
|
## CONTEXT BOUNDARIES:
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
- Current document and frontmatter from previous steps are available
|
- Current document and frontmatter from previous steps are available
|
||||||
- Focus on implementation approaches and technology adoption strategies
|
- Focus on implementation approaches and technology adoption strategies
|
||||||
- Web search capabilities with source verification are enabled
|
- Web search capabilities with source verification are enabled
|
||||||
- This is the final step in the technical research workflow
|
- This step prepares for the final synthesis step
|
||||||
|
|
||||||
## YOUR TASK:
|
## YOUR TASK:
|
||||||
|
|
||||||
|
|
@ -149,10 +149,10 @@ _Source: [URL]_
|
||||||
[Success measurement framework]
|
[Success measurement framework]
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6. Present Analysis and Complete Option
|
### 6. Present Analysis and Continue Option
|
||||||
|
|
||||||
Show the generated implementation research and present complete option:
|
Show the generated implementation research and present continue option:
|
||||||
"I've completed the **implementation research and technology adoption** analysis, finalizing our comprehensive technical research.
|
"I've completed the **implementation research and technology adoption** analysis for {{research_topic}}.
|
||||||
|
|
||||||
**Implementation Highlights:**
|
**Implementation Highlights:**
|
||||||
|
|
||||||
|
|
@ -162,23 +162,24 @@ Show the generated implementation research and present complete option:
|
||||||
- Team organization and skill requirements identified
|
- Team organization and skill requirements identified
|
||||||
- Cost optimization and resource management strategies provided
|
- Cost optimization and resource management strategies provided
|
||||||
|
|
||||||
**This completes our technical research covering:**
|
**Technical research phases completed:**
|
||||||
|
|
||||||
- Technical overview and landscape analysis
|
- Step 1: Research scope confirmation
|
||||||
- Architectural patterns and design decisions
|
- Step 2: Technology stack analysis
|
||||||
- Implementation approaches and technology adoption
|
- Step 3: Integration patterns analysis
|
||||||
- Practical recommendations and implementation roadmap
|
- Step 4: Architectural patterns analysis
|
||||||
|
- Step 5: Implementation research (current step)
|
||||||
|
|
||||||
**Ready to complete the technical research report?**
|
**Ready to proceed to the final synthesis step?**
|
||||||
[C] Complete Research - Save final document and conclude
|
[C] Continue - Save this to document and proceed to synthesis
|
||||||
|
|
||||||
### 7. Handle Complete Selection
|
### 7. Handle Continue Selection
|
||||||
|
|
||||||
#### If 'C' (Complete Research):
|
#### If 'C' (Continue):
|
||||||
|
|
||||||
- Append the final content to the research document
|
- Append the final content to the research document
|
||||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4]`
|
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]`
|
||||||
- Complete the technical research workflow
|
- Load: `./step-06-research-synthesis.md`
|
||||||
|
|
||||||
## APPEND TO DOCUMENT:
|
## APPEND TO DOCUMENT:
|
||||||
|
|
||||||
|
|
@ -191,9 +192,9 @@ When user selects 'C', append the content directly to the research document usin
|
||||||
✅ Testing and deployment practices clearly documented
|
✅ Testing and deployment practices clearly documented
|
||||||
✅ Team organization and skill requirements mapped
|
✅ Team organization and skill requirements mapped
|
||||||
✅ Cost optimization and risk mitigation strategies provided
|
✅ Cost optimization and risk mitigation strategies provided
|
||||||
✅ [C] complete option presented and handled correctly
|
✅ [C] continue option presented and handled correctly
|
||||||
✅ Content properly appended to document when C selected
|
✅ Content properly appended to document when C selected
|
||||||
✅ Technical research workflow completed successfully
|
✅ Proper routing to synthesis step (step-06)
|
||||||
|
|
||||||
## FAILURE MODES:
|
## FAILURE MODES:
|
||||||
|
|
||||||
|
|
@ -202,8 +203,9 @@ When user selects 'C', append the content directly to the research document usin
|
||||||
❌ Missing critical technology adoption strategies
|
❌ Missing critical technology adoption strategies
|
||||||
❌ Not providing practical implementation guidance
|
❌ Not providing practical implementation guidance
|
||||||
❌ Incomplete development workflows or operational practices analysis
|
❌ Incomplete development workflows or operational practices analysis
|
||||||
❌ Not presenting completion option for research workflow
|
❌ Not presenting continue option to synthesis step
|
||||||
❌ Appending content without user selecting 'C'
|
❌ Appending content without user selecting 'C'
|
||||||
|
❌ Not routing to step-06-research-synthesis.md
|
||||||
|
|
||||||
❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions
|
❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions
|
||||||
❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file
|
❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file
|
||||||
|
|
@ -221,19 +223,11 @@ When user selects 'C', append the content directly to the research document usin
|
||||||
|
|
||||||
When 'C' is selected:
|
When 'C' is selected:
|
||||||
|
|
||||||
- All technical research steps completed
|
- Implementation research step completed
|
||||||
- Comprehensive technical research document generated
|
- Content appended to research document with source citations
|
||||||
- All sections appended with source citations
|
- Frontmatter updated with stepsCompleted: [1, 2, 3, 4, 5]
|
||||||
- Technical research workflow status updated
|
- Ready to proceed to final synthesis step
|
||||||
- Final implementation recommendations provided to user
|
|
||||||
|
|
||||||
## NEXT STEPS:
|
## NEXT STEP:
|
||||||
|
|
||||||
Technical research workflow complete. User may:
|
After user selects 'C', load `./step-06-research-synthesis.md` to produce the comprehensive technical research document with narrative introduction, detailed TOC, and executive summary.
|
||||||
|
|
||||||
- Use technical research to inform architecture decisions
|
|
||||||
- Conduct additional research on specific technologies
|
|
||||||
- Combine technical research with other research types for comprehensive insights
|
|
||||||
- Move forward with implementation based on technical insights
|
|
||||||
|
|
||||||
Congratulations on completing comprehensive technical research! 🎉
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Technical Research Step 5: Technical Synthesis and Completion
|
# Technical Research Step 6: Technical Synthesis and Completion
|
||||||
|
|
||||||
## MANDATORY EXECUTION RULES (READ FIRST):
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
- 🎯 Show web search analysis before presenting findings
|
- 🎯 Show web search analysis before presenting findings
|
||||||
- ⚠️ Present [C] complete option after synthesis content generation
|
- ⚠️ Present [C] complete option after synthesis content generation
|
||||||
- 💾 ONLY save when user chooses C (Complete)
|
- 💾 ONLY save when user chooses C (Complete)
|
||||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5]` before completing workflow
|
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6]` before completing workflow
|
||||||
- 🚫 FORBIDDEN to complete workflow until C is selected
|
- 🚫 FORBIDDEN to complete workflow until C is selected
|
||||||
- 📚 GENERATE COMPLETE DOCUMENT STRUCTURE with intro, TOC, and summary
|
- 📚 GENERATE COMPLETE DOCUMENT STRUCTURE with intro, TOC, and summary
|
||||||
|
|
||||||
|
|
@ -417,7 +417,7 @@ _This comprehensive technical research document serves as an authoritative techn
|
||||||
#### If 'C' (Complete Research):
|
#### If 'C' (Complete Research):
|
||||||
|
|
||||||
- Append the complete technical document to the research file
|
- Append the complete technical document to the research file
|
||||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]`
|
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6]`
|
||||||
- Complete the technical research workflow
|
- Complete the technical research workflow
|
||||||
- Provide final technical document delivery confirmation
|
- Provide final technical document delivery confirmation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ Offer validation workflows to ensure PRD is ready for implementation:
|
||||||
|
|
||||||
### 4. Suggest Next Workflows
|
### 4. Suggest Next Workflows
|
||||||
|
|
||||||
PRD complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `Create PRD`.
|
PRD complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `Create PRD`.
|
||||||
|
|
||||||
### 5. Final Completion Confirmation
|
### 5. Final Completion Confirmation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,7 @@ Display:
|
||||||
- **IF X (Exit):**
|
- **IF X (Exit):**
|
||||||
- Display: "**Validation Report Saved:** {validationReportPath}"
|
- Display: "**Validation Report Saved:** {validationReportPath}"
|
||||||
- Display: "**Summary:** {overall status} - {recommendation}"
|
- Display: "**Summary:** {overall status} - {recommendation}"
|
||||||
- PRD Validation complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `Validate PRD`.
|
- PRD Validation complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `Validate PRD`.
|
||||||
|
|
||||||
- **IF Any other:** Help user, then redisplay menu
|
- **IF Any other:** Help user, then redisplay menu
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ Update the main workflow status file:
|
||||||
|
|
||||||
### 3. Suggest Next Steps
|
### 3. Suggest Next Steps
|
||||||
|
|
||||||
UX Design complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `Create UX`.
|
UX Design complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `Create UX`.
|
||||||
|
|
||||||
### 5. Final Completion Confirmation
|
### 5. Final Completion Confirmation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,9 @@
|
||||||
name: 'step-01-document-discovery'
|
name: 'step-01-document-discovery'
|
||||||
description: 'Discover and inventory all project documents, handling duplicates and organizing file structure'
|
description: 'Discover and inventory all project documents, handling duplicates and organizing file structure'
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: './step-01-document-discovery.md'
|
|
||||||
nextStepFile: './step-02-prd-analysis.md'
|
nextStepFile: './step-02-prd-analysis.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
||||||
templateFile: '{workflow_path}/templates/readiness-report-template.md'
|
templateFile: '../templates/readiness-report-template.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 1: Document Discovery
|
# Step 1: Document Discovery
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,7 @@
|
||||||
name: 'step-02-prd-analysis'
|
name: 'step-02-prd-analysis'
|
||||||
description: 'Read and analyze PRD to extract all FRs and NFRs for coverage validation'
|
description: 'Read and analyze PRD to extract all FRs and NFRs for coverage validation'
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: './step-02-prd-analysis.md'
|
|
||||||
nextStepFile: './step-03-epic-coverage-validation.md'
|
nextStepFile: './step-03-epic-coverage-validation.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
||||||
epicsFile: '{planning_artifacts}/*epic*.md' # Will be resolved to actual file
|
epicsFile: '{planning_artifacts}/*epic*.md' # Will be resolved to actual file
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,7 @@
|
||||||
name: 'step-03-epic-coverage-validation'
|
name: 'step-03-epic-coverage-validation'
|
||||||
description: 'Validate that all PRD FRs are covered in epics and stories'
|
description: 'Validate that all PRD FRs are covered in epics and stories'
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: './step-03-epic-coverage-validation.md'
|
|
||||||
nextStepFile: './step-04-ux-alignment.md'
|
nextStepFile: './step-04-ux-alignment.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,7 @@
|
||||||
name: 'step-04-ux-alignment'
|
name: 'step-04-ux-alignment'
|
||||||
description: 'Check for UX document and validate alignment with PRD and Architecture'
|
description: 'Check for UX document and validate alignment with PRD and Architecture'
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: './step-04-ux-alignment.md'
|
|
||||||
nextStepFile: './step-05-epic-quality-review.md'
|
nextStepFile: './step-05-epic-quality-review.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,8 @@
|
||||||
name: 'step-05-epic-quality-review'
|
name: 'step-05-epic-quality-review'
|
||||||
description: 'Validate epics and stories against create-epics-and-stories best practices'
|
description: 'Validate epics and stories against create-epics-and-stories best practices'
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: './step-05-epic-quality-review.md'
|
|
||||||
nextStepFile: './step-06-final-assessment.md'
|
nextStepFile: './step-06-final-assessment.md'
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
||||||
epicsBestPractices: '{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 5: Epic Quality Review
|
# Step 5: Epic Quality Review
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,6 @@
|
||||||
name: 'step-06-final-assessment'
|
name: 'step-06-final-assessment'
|
||||||
description: 'Compile final assessment and polish the readiness report'
|
description: 'Compile final assessment and polish the readiness report'
|
||||||
|
|
||||||
# Path Definitions
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness'
|
|
||||||
|
|
||||||
# File References
|
|
||||||
thisStepFile: './step-06-final-assessment.md'
|
|
||||||
workflowFile: '{workflow_path}/workflow.md'
|
|
||||||
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -115,7 +109,7 @@ The assessment found [number] issues requiring attention. Review the detailed re
|
||||||
|
|
||||||
The implementation readiness workflow is now complete. The report contains all findings and recommendations for the user to consider.
|
The implementation readiness workflow is now complete. The report contains all findings and recommendations for the user to consider.
|
||||||
|
|
||||||
Implementation Readiness complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `implementation readiness`.
|
Implementation Readiness complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `implementation readiness`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ completedAt: '{{current_date}}'
|
||||||
|
|
||||||
### 3. Next Steps Guidance
|
### 3. Next Steps Guidance
|
||||||
|
|
||||||
Architecture complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `Create Architecture`.
|
Architecture complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `Create Architecture`.
|
||||||
|
|
||||||
Upon Completion of task output: offer to answer any questions about the Architecture Document.
|
Upon Completion of task output: offer to answer any questions about the Architecture Document.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,6 @@ If all validations pass:
|
||||||
|
|
||||||
When C is selected, the workflow is complete and the epics.md is ready for development.
|
When C is selected, the workflow is complete and the epics.md is ready for development.
|
||||||
|
|
||||||
Epics and Stories complete. Read fully and follow: `_bmad/core/tasks/bmad-help.md` with argument `Create Epics and Stories`.
|
Epics and Stories complete. Read fully and follow: `_bmad/core/tasks/help.md` with argument `Create Epics and Stories`.
|
||||||
|
|
||||||
Upon Completion of task output: offer to answer any questions about the Epics and Stories.
|
Upon Completion of task output: offer to answer any questions about the Epics and Stories.
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
name: 'step-01-mode-detection'
|
name: 'step-01-mode-detection'
|
||||||
description: 'Determine execution mode (tech-spec vs direct), handle escalation, set state variables'
|
description: 'Determine execution mode (tech-spec vs direct), handle escalation, set state variables'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev'
|
|
||||||
thisStepFile: './step-01-mode-detection.md'
|
|
||||||
nextStepFile_modeA: './step-03-execute.md'
|
nextStepFile_modeA: './step-03-execute.md'
|
||||||
nextStepFile_modeB: './step-02-context-gathering.md'
|
nextStepFile_modeB: './step-02-context-gathering.md'
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
name: 'step-02-context-gathering'
|
name: 'step-02-context-gathering'
|
||||||
description: 'Quick context gathering for direct mode - identify files, patterns, dependencies'
|
description: 'Quick context gathering for direct mode - identify files, patterns, dependencies'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev'
|
|
||||||
thisStepFile: './step-02-context-gathering.md'
|
|
||||||
nextStepFile: './step-03-execute.md'
|
nextStepFile: './step-03-execute.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
name: 'step-03-execute'
|
name: 'step-03-execute'
|
||||||
description: 'Execute implementation - iterate through tasks, write code, run tests'
|
description: 'Execute implementation - iterate through tasks, write code, run tests'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev'
|
|
||||||
thisStepFile: './step-03-execute.md'
|
|
||||||
nextStepFile: './step-04-self-check.md'
|
nextStepFile: './step-04-self-check.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
name: 'step-04-self-check'
|
name: 'step-04-self-check'
|
||||||
description: 'Self-audit implementation against tasks, tests, AC, and patterns'
|
description: 'Self-audit implementation against tasks, tests, AC, and patterns'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev'
|
|
||||||
thisStepFile: './step-04-self-check.md'
|
|
||||||
nextStepFile: './step-05-adversarial-review.md'
|
nextStepFile: './step-05-adversarial-review.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@
|
||||||
name: 'step-05-adversarial-review'
|
name: 'step-05-adversarial-review'
|
||||||
description: 'Construct diff and invoke adversarial review task'
|
description: 'Construct diff and invoke adversarial review task'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev'
|
|
||||||
thisStepFile: './step-05-adversarial-review.md'
|
|
||||||
nextStepFile: './step-06-resolve-findings.md'
|
nextStepFile: './step-06-resolve-findings.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -59,7 +57,7 @@ Merge all changes into `{diff_output}`.
|
||||||
|
|
||||||
### 2. Invoke Adversarial Review
|
### 2. Invoke Adversarial Review
|
||||||
|
|
||||||
With `{diff_output}` constructed, invoke the review task. If possible, use information asymmetry: run this step, and only it, in a separate subagent or process with read access to the project, but no context except the `{diff_output}`.
|
With `{diff_output}` constructed, load and follow the review task. If possible, use information asymmetry: load this step, and only it, in a separate subagent or process with read access to the project, but no context except the `{diff_output}`.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<invoke-task>Review {diff_output} using {project-root}/_bmad/core/tasks/review-adversarial-general.xml</invoke-task>
|
<invoke-task>Review {diff_output} using {project-root}/_bmad/core/tasks/review-adversarial-general.xml</invoke-task>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
---
|
---
|
||||||
name: 'step-06-resolve-findings'
|
name: 'step-06-resolve-findings'
|
||||||
description: 'Handle review findings interactively, apply fixes, update tech-spec with final status'
|
description: 'Handle review findings interactively, apply fixes, update tech-spec with final status'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev'
|
|
||||||
thisStepFile: './step-06-resolve-findings.md'
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 6: Resolve Findings
|
# Step 6: Resolve Findings
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,9 @@
|
||||||
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/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: '../tech-spec-template.md'
|
||||||
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
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/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'
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
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/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'
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
name: 'step-04-review'
|
name: 'step-04-review'
|
||||||
description: 'Review and finalize the tech-spec'
|
description: 'Review and finalize the tech-spec'
|
||||||
|
|
||||||
workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec'
|
|
||||||
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
wipFile: '{implementation_artifacts}/tech-spec-wip.md'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -153,7 +152,7 @@ b) **HALT and wait for user selection.**
|
||||||
#### Adversarial Review [R] Process:
|
#### Adversarial Review [R] Process:
|
||||||
|
|
||||||
1. **Invoke Adversarial Review Task**:
|
1. **Invoke Adversarial Review Task**:
|
||||||
> With `{finalFile}` constructed, invoke the review task. If possible, use information asymmetry: run this task, and only it, in a separate subagent or process with read access to the project, but no context except the `{finalFile}`.
|
> With `{finalFile}` constructed, load and follow the review task. If possible, use information asymmetry: load this task, and only it, in a separate subagent or process with read access to the project, but no context except the `{finalFile}`.
|
||||||
<invoke-task>Review {finalFile} using {project-root}/_bmad/core/tasks/review-adversarial-general.xml</invoke-task>
|
<invoke-task>Review {finalFile} using {project-root}/_bmad/core/tasks/review-adversarial-general.xml</invoke-task>
|
||||||
> **Platform fallback:** If task invocation not available, load the task file and follow its instructions inline, passing `{finalFile}` as the content.
|
> **Platform fallback:** If task invocation not available, load the task file and follow its instructions inline, passing `{finalFile}` as the content.
|
||||||
> The task should: review `{finalFile}` and return a list of findings.
|
> The task should: review `{finalFile}` and return a list of findings.
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,17 @@ Thank you for using BMAD Party Mode for collaborative multi-agent discussions!"
|
||||||
- Express genuine appreciation for user's participation and engagement
|
- Express genuine appreciation for user's participation and engagement
|
||||||
- Leave user with encouragement for future collaborative sessions
|
- Leave user with encouragement for future collaborative sessions
|
||||||
|
|
||||||
|
## RETURN PROTOCOL:
|
||||||
|
|
||||||
|
If this workflow was invoked from within a parent workflow:
|
||||||
|
|
||||||
|
1. Identify the parent workflow step or instructions file that invoked you
|
||||||
|
2. Re-read that file now to restore context
|
||||||
|
3. Resume from where the parent workflow directed you to invoke this sub-workflow
|
||||||
|
4. Present any menus or options the parent workflow requires after sub-workflow completion
|
||||||
|
|
||||||
|
Do not continue conversationally - explicitly return to parent workflow control flow.
|
||||||
|
|
||||||
## WORKFLOW COMPLETION:
|
## WORKFLOW COMPLETION:
|
||||||
|
|
||||||
After farewell sequence and final closure:
|
After farewell sequence and final closure:
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@
|
||||||
* BMAD Documentation Build Pipeline
|
* BMAD Documentation Build Pipeline
|
||||||
*
|
*
|
||||||
* Consolidates docs from multiple sources, generates LLM-friendly files,
|
* Consolidates docs from multiple sources, generates LLM-friendly files,
|
||||||
* creates downloadable bundles, and builds the Astro+Starlight site.
|
* and builds the Astro+Starlight site.
|
||||||
*
|
*
|
||||||
* Build outputs:
|
* Build outputs:
|
||||||
* build/artifacts/ - With llms.txt, llms-full.txt, ZIPs
|
* build/artifacts/ - With llms.txt, llms-full.txt
|
||||||
* build/site/ - Final Astro output (deployable)
|
* build/site/ - Final Astro output (deployable)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -13,7 +13,6 @@ import { execSync } from 'node:child_process';
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import archiver from 'archiver';
|
|
||||||
import { getSiteUrl } from '../website/src/lib/site-url.mjs';
|
import { getSiteUrl } from '../website/src/lib/site-url.mjs';
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
@ -35,7 +34,6 @@ const LLM_EXCLUDE_PATTERNS = [
|
||||||
'changelog',
|
'changelog',
|
||||||
'ide-info/',
|
'ide-info/',
|
||||||
'v4-to-v6-upgrade',
|
'v4-to-v6-upgrade',
|
||||||
'downloads/',
|
|
||||||
'faq',
|
'faq',
|
||||||
'reference/glossary/',
|
'reference/glossary/',
|
||||||
'explanation/game-dev/',
|
'explanation/game-dev/',
|
||||||
|
|
@ -81,17 +79,16 @@ main().catch((error) => {
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Pipeline Stages
|
// Pipeline Stages
|
||||||
/**
|
/**
|
||||||
* Generate LLM files and downloadable bundles for the documentation pipeline.
|
* Generate LLM files for the documentation pipeline.
|
||||||
*
|
*
|
||||||
* Creates the build/artifacts directory, writes `llms.txt` and `llms-full.txt` (sourced from the provided docs directory),
|
* Creates the build/artifacts directory and writes `llms.txt` and `llms-full.txt` (sourced from the provided docs directory).
|
||||||
* and produces download ZIP bundles.
|
|
||||||
*
|
*
|
||||||
* @param {string} docsDir - Path to the source docs directory containing Markdown files.
|
* @param {string} docsDir - Path to the source docs directory containing Markdown files.
|
||||||
* @returns {string} Path to the created artifacts directory.
|
* @returns {string} Path to the created artifacts directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
async function generateArtifacts(docsDir) {
|
async function generateArtifacts(docsDir) {
|
||||||
printHeader('Generating LLM files and download bundles');
|
printHeader('Generating LLM files');
|
||||||
|
|
||||||
const outputDir = path.join(BUILD_DIR, 'artifacts');
|
const outputDir = path.join(BUILD_DIR, 'artifacts');
|
||||||
fs.mkdirSync(outputDir, { recursive: true });
|
fs.mkdirSync(outputDir, { recursive: true });
|
||||||
|
|
@ -99,7 +96,6 @@ async function generateArtifacts(docsDir) {
|
||||||
// Generate LLM files reading from docs/, output to artifacts/
|
// Generate LLM files reading from docs/, output to artifacts/
|
||||||
generateLlmsTxt(outputDir);
|
generateLlmsTxt(outputDir);
|
||||||
generateLlmsFullTxt(docsDir, outputDir);
|
generateLlmsFullTxt(docsDir, outputDir);
|
||||||
await generateDownloadBundles(outputDir);
|
|
||||||
|
|
||||||
console.log();
|
console.log();
|
||||||
console.log(` \u001B[32m✓\u001B[0m Artifact generation complete`);
|
console.log(` \u001B[32m✓\u001B[0m Artifact generation complete`);
|
||||||
|
|
@ -176,8 +172,6 @@ function generateLlmsTxt(outputDir) {
|
||||||
'## Quick Links',
|
'## Quick Links',
|
||||||
'',
|
'',
|
||||||
`- [Full Documentation (llms-full.txt)](${siteUrl}/llms-full.txt) - Complete docs for AI context`,
|
`- [Full Documentation (llms-full.txt)](${siteUrl}/llms-full.txt) - Complete docs for AI context`,
|
||||||
`- [Source Bundle](${siteUrl}/downloads/bmad-sources.zip) - Complete source code`,
|
|
||||||
`- [Prompts Bundle](${siteUrl}/downloads/bmad-prompts.zip) - Agent prompts and workflows`,
|
|
||||||
'',
|
'',
|
||||||
].join('\n');
|
].join('\n');
|
||||||
|
|
||||||
|
|
@ -249,7 +243,6 @@ function compareLlmDocs(a, b) {
|
||||||
|
|
||||||
function getLlmSortKey(filePath) {
|
function getLlmSortKey(filePath) {
|
||||||
if (filePath === 'index.md') return 0;
|
if (filePath === 'index.md') return 0;
|
||||||
if (filePath === 'downloads.md') return 1;
|
|
||||||
if (filePath.startsWith(`tutorials${path.sep}`) || filePath.startsWith('tutorials/')) return 2;
|
if (filePath.startsWith(`tutorials${path.sep}`) || filePath.startsWith('tutorials/')) return 2;
|
||||||
if (filePath.startsWith(`how-to${path.sep}`) || filePath.startsWith('how-to/')) return 3;
|
if (filePath.startsWith(`how-to${path.sep}`) || filePath.startsWith('how-to/')) return 3;
|
||||||
if (filePath.startsWith(`explanation${path.sep}`) || filePath.startsWith('explanation/')) return 4;
|
if (filePath.startsWith(`explanation${path.sep}`) || filePath.startsWith('explanation/')) return 4;
|
||||||
|
|
@ -322,48 +315,6 @@ function validateLlmSize(content) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// =============================================================================
|
|
||||||
// Download Bundle Generation
|
|
||||||
// =============================================================================
|
|
||||||
|
|
||||||
async function generateDownloadBundles(outputDir) {
|
|
||||||
console.log(' → Generating download bundles...');
|
|
||||||
|
|
||||||
const downloadsDir = path.join(outputDir, 'downloads');
|
|
||||||
fs.mkdirSync(downloadsDir, { recursive: true });
|
|
||||||
|
|
||||||
await generateSourcesBundle(downloadsDir);
|
|
||||||
await generatePromptsBundle(downloadsDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function generateSourcesBundle(downloadsDir) {
|
|
||||||
const srcDir = path.join(PROJECT_ROOT, 'src');
|
|
||||||
if (!fs.existsSync(srcDir)) return;
|
|
||||||
|
|
||||||
const zipPath = path.join(downloadsDir, 'bmad-sources.zip');
|
|
||||||
await createZipArchive(srcDir, zipPath, ['__pycache__', '.pyc', '.DS_Store', 'node_modules']);
|
|
||||||
|
|
||||||
const size = (fs.statSync(zipPath).size / 1024 / 1024).toFixed(1);
|
|
||||||
console.log(` bmad-sources.zip (${size}M)`);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a zip archive of the project's prompts modules and place it in the downloads directory.
|
|
||||||
*
|
|
||||||
* Creates bmad-prompts.zip from src/modules, excluding common unwanted paths, writes it to the provided downloads directory, and logs the resulting file size. If the modules directory does not exist, the function returns without creating a bundle.
|
|
||||||
* @param {string} downloadsDir - Destination directory where bmad-prompts.zip will be written.
|
|
||||||
*/
|
|
||||||
async function generatePromptsBundle(downloadsDir) {
|
|
||||||
const modulesDir = path.join(PROJECT_ROOT, 'src', 'modules');
|
|
||||||
if (!fs.existsSync(modulesDir)) return;
|
|
||||||
|
|
||||||
const zipPath = path.join(downloadsDir, 'bmad-prompts.zip');
|
|
||||||
await createZipArchive(modulesDir, zipPath, ['docs', '.DS_Store', '__pycache__', 'node_modules']);
|
|
||||||
|
|
||||||
const size = Math.floor(fs.statSync(zipPath).size / 1024);
|
|
||||||
console.log(` bmad-prompts.zip (${size}K)`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Astro Build
|
// Astro Build
|
||||||
/**
|
/**
|
||||||
|
|
@ -384,7 +335,6 @@ function runAstroBuild() {
|
||||||
* Copy generated artifact files into the built site directory.
|
* Copy generated artifact files into the built site directory.
|
||||||
*
|
*
|
||||||
* Copies llms.txt and llms-full.txt from the artifacts directory into the site directory.
|
* Copies llms.txt and llms-full.txt from the artifacts directory into the site directory.
|
||||||
* If a downloads subdirectory exists under artifacts, copies it into siteDir/downloads.
|
|
||||||
*
|
*
|
||||||
* @param {string} artifactsDir - Path to the build artifacts directory containing generated files.
|
* @param {string} artifactsDir - Path to the build artifacts directory containing generated files.
|
||||||
* @param {string} siteDir - Path to the target site directory where artifacts should be placed.
|
* @param {string} siteDir - Path to the target site directory where artifacts should be placed.
|
||||||
|
|
@ -394,11 +344,6 @@ function copyArtifactsToSite(artifactsDir, siteDir) {
|
||||||
|
|
||||||
fs.copyFileSync(path.join(artifactsDir, 'llms.txt'), path.join(siteDir, 'llms.txt'));
|
fs.copyFileSync(path.join(artifactsDir, 'llms.txt'), path.join(siteDir, 'llms.txt'));
|
||||||
fs.copyFileSync(path.join(artifactsDir, 'llms-full.txt'), path.join(siteDir, 'llms-full.txt'));
|
fs.copyFileSync(path.join(artifactsDir, 'llms-full.txt'), path.join(siteDir, 'llms-full.txt'));
|
||||||
|
|
||||||
const downloadsDir = path.join(artifactsDir, 'downloads');
|
|
||||||
if (fs.existsSync(downloadsDir)) {
|
|
||||||
copyDirectory(downloadsDir, path.join(siteDir, 'downloads'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
@ -407,7 +352,7 @@ function copyArtifactsToSite(artifactsDir, siteDir) {
|
||||||
* Prints a concise end-of-build summary and displays a sample listing of the final site directory.
|
* Prints a concise end-of-build summary and displays a sample listing of the final site directory.
|
||||||
*
|
*
|
||||||
* @param {string} docsDir - Path to the source documentation directory used for the build.
|
* @param {string} docsDir - Path to the source documentation directory used for the build.
|
||||||
* @param {string} artifactsDir - Path to the directory containing generated artifacts (e.g., llms.txt, downloads).
|
* @param {string} artifactsDir - Path to the directory containing generated artifacts (e.g., llms.txt).
|
||||||
* @param {string} siteDir - Path to the final built site directory whose contents will be listed.
|
* @param {string} siteDir - Path to the final built site directory whose contents will be listed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -526,35 +471,6 @@ function copyDirectory(src, dest, exclude = []) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a ZIP archive of a directory, optionally excluding entries that match given substrings.
|
|
||||||
* @param {string} sourceDir - Path to the source directory to archive.
|
|
||||||
* @param {string} outputPath - Path to write the resulting ZIP file.
|
|
||||||
* @param {string[]} [exclude=[]] - Array of substrings; any entry whose path includes one of these substrings will be omitted.
|
|
||||||
* @returns {Promise<void>} Resolves when the archive has been fully written and closed, rejects on error.
|
|
||||||
*/
|
|
||||||
function createZipArchive(sourceDir, outputPath, exclude = []) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const output = fs.createWriteStream(outputPath);
|
|
||||||
const archive = archiver('zip', { zlib: { level: 9 } });
|
|
||||||
|
|
||||||
output.on('close', resolve);
|
|
||||||
archive.on('error', reject);
|
|
||||||
|
|
||||||
archive.pipe(output);
|
|
||||||
|
|
||||||
const baseName = path.basename(sourceDir);
|
|
||||||
archive.directory(sourceDir, baseName, (entry) => {
|
|
||||||
for (const pattern of exclude) {
|
|
||||||
if (entry.name.includes(pattern)) return false;
|
|
||||||
}
|
|
||||||
return entry;
|
|
||||||
});
|
|
||||||
|
|
||||||
archive.finalize();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// Console Output Formatting
|
// Console Output Formatting
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,7 @@ Follow all instructions in the ${type} file exactly as written.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate task and tool commands using underscore format (Windows-compatible)
|
* Generate task and tool commands using underscore format (Windows-compatible)
|
||||||
* Creates flat files like: bmad_bmm_bmad-help.md
|
* Creates flat files like: bmad_bmm_help.md
|
||||||
*
|
*
|
||||||
* @param {string} projectDir - Project directory
|
* @param {string} projectDir - Project directory
|
||||||
* @param {string} bmadDir - BMAD installation directory
|
* @param {string} bmadDir - BMAD installation directory
|
||||||
|
|
@ -268,7 +268,7 @@ Follow all instructions in the ${type} file exactly as written.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate task and tool commands using underscore format (Windows-compatible)
|
* Generate task and tool commands using underscore format (Windows-compatible)
|
||||||
* Creates flat files like: bmad_bmm_bmad-help.md
|
* Creates flat files like: bmad_bmm_help.md
|
||||||
*
|
*
|
||||||
* @param {string} projectDir - Project directory
|
* @param {string} projectDir - Project directory
|
||||||
* @param {string} bmadDir - BMAD installation directory
|
* @param {string} bmadDir - BMAD installation directory
|
||||||
|
|
@ -312,7 +312,7 @@ Follow all instructions in the ${type} file exactly as written.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write task/tool artifacts using underscore format (Windows-compatible)
|
* Write task/tool artifacts using underscore format (Windows-compatible)
|
||||||
* Creates flat files like: bmad_bmm_bmad-help.md
|
* Creates flat files like: bmad_bmm_help.md
|
||||||
*
|
*
|
||||||
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
||||||
* @param {Array} artifacts - Task/tool artifacts with relativePath
|
* @param {Array} artifacts - Task/tool artifacts with relativePath
|
||||||
|
|
@ -338,7 +338,7 @@ Follow all instructions in the ${type} file exactly as written.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write task/tool artifacts using dash format (NEW STANDARD)
|
* Write task/tool artifacts using dash format (NEW STANDARD)
|
||||||
* Creates flat files like: bmad-bmm-bmad-help.md
|
* Creates flat files like: bmad-bmm-help.md
|
||||||
*
|
*
|
||||||
* Note: Tasks/tools do NOT have bmad-agent- prefix - only agents do.
|
* Note: Tasks/tools do NOT have bmad-agent- prefix - only agents do.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
|
---
|
||||||
|
mode: primary
|
||||||
|
description: '{{description}}'
|
||||||
|
---
|
||||||
|
|
||||||
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
||||||
|
|
||||||
<agent-activation CRITICAL="TRUE">
|
<agent-activation CRITICAL="TRUE">
|
||||||
1. LOAD the FULL agent file from {project-root}/_bmad/{{path}}
|
1. LOAD the FULL agent file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
||||||
3. FOLLOW every step in the <activation> section precisely
|
3. FOLLOW every step in the <activation> section precisely
|
||||||
4. DISPLAY the welcome/greeting as instructed
|
4. DISPLAY the welcome/greeting as instructed
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
description: '{{description}}'
|
||||||
|
---
|
||||||
|
|
||||||
|
Execute the BMAD '{{name}}' task.
|
||||||
|
|
||||||
|
TASK INSTRUCTIONS:
|
||||||
|
1. LOAD the task file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
2. READ its entire contents
|
||||||
|
3. FOLLOW every instruction precisely as specified
|
||||||
|
|
||||||
|
TASK FILE: {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
description: '{{description}}'
|
||||||
|
---
|
||||||
|
|
||||||
|
Execute the BMAD '{{name}}' tool.
|
||||||
|
|
||||||
|
TOOL INSTRUCTIONS:
|
||||||
|
1. LOAD the tool file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
2. READ its entire contents
|
||||||
|
3. FOLLOW every instruction precisely as specified
|
||||||
|
|
||||||
|
TOOL FILE: {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
description: '{{description}}'
|
||||||
|
---
|
||||||
|
|
||||||
|
Execute the BMAD '{{name}}' workflow.
|
||||||
|
|
||||||
|
CRITICAL: You must load and follow the workflow definition exactly.
|
||||||
|
|
||||||
|
WORKFLOW INSTRUCTIONS:
|
||||||
|
1. LOAD the workflow file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
2. READ its entire contents
|
||||||
|
3. FOLLOW every step precisely as specified
|
||||||
|
4. DO NOT skip or modify any steps
|
||||||
|
|
||||||
|
WORKFLOW FILE: {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
description: '{{description}}'
|
||||||
|
---
|
||||||
|
|
||||||
|
Execute the BMAD '{{name}}' workflow.
|
||||||
|
|
||||||
|
CRITICAL: You must load and follow the workflow definition exactly.
|
||||||
|
|
||||||
|
WORKFLOW INSTRUCTIONS:
|
||||||
|
1. LOAD the workflow file from {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
2. READ its entire contents
|
||||||
|
3. FOLLOW every step precisely as specified
|
||||||
|
4. DO NOT skip or modify any steps
|
||||||
|
|
||||||
|
WORKFLOW FILE: {project-root}/{{bmadFolderName}}/{{path}}
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: '{{name}}'
|
|
||||||
description: '{{description}}'
|
|
||||||
---
|
|
||||||
|
|
@ -322,6 +322,25 @@ async function autocompleteMultiselect(options) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// === FIX: Make SPACE always act as selection key (not search input) ===
|
||||||
|
// Override _isActionKey to treat SPACE like TAB - always an action key
|
||||||
|
// This prevents SPACE from being added to the search input
|
||||||
|
const originalIsActionKey = prompt._isActionKey.bind(prompt);
|
||||||
|
prompt._isActionKey = function (char, key) {
|
||||||
|
if (key && key.name === 'space') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return originalIsActionKey(char, key);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Handle SPACE toggle when NOT navigating (internal code only handles it when isNavigating=true)
|
||||||
|
prompt.on('key', (char, key) => {
|
||||||
|
if (key && key.name === 'space' && !prompt.isNavigating && prompt.focusedValue !== undefined) {
|
||||||
|
prompt.toggleSelected(prompt.focusedValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// === END FIX ===
|
||||||
|
|
||||||
const result = await prompt.prompt();
|
const result = await prompt.prompt();
|
||||||
await handleCancel(result);
|
await handleCancel(result);
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
|
|
@ -634,7 +634,7 @@ class UI {
|
||||||
|
|
||||||
// Interactive mode
|
// Interactive mode
|
||||||
const interactiveSelectedIdes = await prompts.autocompleteMultiselect({
|
const interactiveSelectedIdes = await prompts.autocompleteMultiselect({
|
||||||
message: 'Select tools:',
|
message: 'Integrate with:',
|
||||||
options: allToolOptions,
|
options: allToolOptions,
|
||||||
initialValues: configuredIdes.length > 0 ? configuredIdes : undefined,
|
initialValues: configuredIdes.length > 0 ? configuredIdes : undefined,
|
||||||
required: false,
|
required: false,
|
||||||
|
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
||||||
# Bundle Distribution Setup (For Maintainers)
|
|
||||||
|
|
||||||
**Audience:** BMAD maintainers setting up bundle auto-publishing
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## One-Time Setup
|
|
||||||
|
|
||||||
Run these commands once to enable auto-publishing:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Create bmad-bundles repo
|
|
||||||
gh repo create bmad-code-org/bmad-bundles --public --description "BMAD Web Bundles"
|
|
||||||
|
|
||||||
# 2. Ensure `main` exists (GitHub Pages API requires a source branch)
|
|
||||||
git clone git@github.com:bmad-code-org/bmad-bundles.git
|
|
||||||
cd bmad-bundles
|
|
||||||
printf '# bmad-bundles\n\nStatic bundles published from BMAD-METHOD.\n' > README.md
|
|
||||||
git add README.md
|
|
||||||
git commit -m "Initial commit"
|
|
||||||
git push origin main
|
|
||||||
cd -
|
|
||||||
|
|
||||||
# 3. Enable GitHub Pages (API replacement for removed --enable-pages flag)
|
|
||||||
gh api repos/bmad-code-org/bmad-bundles/pages --method POST -f source[branch]=main -f source[path]=/
|
|
||||||
# (Optional) confirm status
|
|
||||||
gh api repos/bmad-code-org/bmad-bundles/pages --jq '{status,source}'
|
|
||||||
|
|
||||||
# 4. Create GitHub PAT and add as secret
|
|
||||||
# Go to: https://github.com/settings/tokens/new
|
|
||||||
# Scopes: repo (full control)
|
|
||||||
# Name: bmad-bundles-ci
|
|
||||||
# Then add as secret:
|
|
||||||
gh secret set BUNDLES_PAT --repo bmad-code-org/BMAD-METHOD
|
|
||||||
# (paste PAT when prompted)
|
|
||||||
```
|
|
||||||
|
|
||||||
If the Pages POST returns `409`, the site already exists. If it returns `422` about `main` missing, redo step 2 to push the initial commit.
|
|
||||||
|
|
||||||
**Done.** Bundles auto-publish on every main merge.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## How It Works
|
|
||||||
|
|
||||||
**On main merge:**
|
|
||||||
|
|
||||||
- `.github/workflows/bundle-latest.yaml` runs
|
|
||||||
- Publishes to: `https://bmad-code-org.github.io/bmad-bundles/`
|
|
||||||
|
|
||||||
**On release:**
|
|
||||||
|
|
||||||
- `npm run release:patch` runs `.github/workflows/manual-release.yaml`
|
|
||||||
- Attaches bundles to: `https://github.com/bmad-code-org/BMAD-METHOD/releases/latest`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Test latest channel
|
|
||||||
git push origin main
|
|
||||||
# Wait 2 min, then: curl https://bmad-code-org.github.io/bmad-bundles/
|
|
||||||
|
|
||||||
# Test stable channel
|
|
||||||
npm run release:patch
|
|
||||||
# Check: gh release view
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
**"Permission denied" or auth errors**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Verify PAT secret exists
|
|
||||||
gh secret list --repo bmad-code-org/BMAD-METHOD | grep BUNDLES_PAT
|
|
||||||
|
|
||||||
# If missing, recreate PAT and add secret:
|
|
||||||
gh secret set BUNDLES_PAT --repo bmad-code-org/BMAD-METHOD
|
|
||||||
```
|
|
||||||
|
|
||||||
**GitHub Pages not updating / need to re-check config**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
gh api repos/bmad-code-org/bmad-bundles/pages --jq '{status,source,html_url}'
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Distribution URLs
|
|
||||||
|
|
||||||
**Stable:** `https://github.com/bmad-code-org/BMAD-METHOD/releases/latest`
|
|
||||||
**Latest:** `https://bmad-code-org.github.io/bmad-bundles/`
|
|
||||||
|
|
@ -73,4 +73,3 @@ Note: If copying, remember to keep the copy in sync with changes to `docs/`.
|
||||||
The build pipeline (`npm run docs:build`) produces:
|
The build pipeline (`npm run docs:build`) produces:
|
||||||
- Static HTML site in `build/site/`
|
- Static HTML site in `build/site/`
|
||||||
- LLM-friendly files: `llms.txt`, `llms-full.txt`
|
- LLM-friendly files: `llms.txt`, `llms-full.txt`
|
||||||
- Downloadable ZIP bundles in `downloads/`
|
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,6 @@ const shouldRenderSearch =
|
||||||
{shouldRenderSearch && <Search {...Astro.props} />}
|
{shouldRenderSearch && <Search {...Astro.props} />}
|
||||||
</div>
|
</div>
|
||||||
<div class="sl-hidden md:sl-flex print:hidden right-group">
|
<div class="sl-hidden md:sl-flex print:hidden right-group">
|
||||||
<nav class="sl-flex nav-links">
|
|
||||||
<a href={`${import.meta.env.BASE_URL}downloads/`}>Downloads</a>
|
|
||||||
</nav>
|
|
||||||
<div class="sl-flex social-icons">
|
<div class="sl-flex social-icons">
|
||||||
<SocialIcons {...Astro.props} />
|
<SocialIcons {...Astro.props} />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -55,33 +52,11 @@ const shouldRenderSearch =
|
||||||
}
|
}
|
||||||
|
|
||||||
.right-group,
|
.right-group,
|
||||||
.social-icons,
|
.social-icons {
|
||||||
.nav-links {
|
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-links a {
|
|
||||||
color: var(--sl-color-white);
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: 0.875rem;
|
|
||||||
font-weight: 500;
|
|
||||||
padding: 0.25rem 0.5rem;
|
|
||||||
border-radius: 4px;
|
|
||||||
transition: color 0.15s ease, background-color 0.15s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-links a:hover {
|
|
||||||
color: var(--sl-color-accent);
|
|
||||||
background-color: rgba(140, 140, 255, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-links::after {
|
|
||||||
content: '';
|
|
||||||
height: 2rem;
|
|
||||||
border-inline-end: 1px solid var(--sl-color-gray-5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.social-icons::after {
|
.social-icons::after {
|
||||||
content: '';
|
content: '';
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,6 @@ import type { Props } from '@astrojs/starlight/props';
|
||||||
<div class="sl-flex social-icons">
|
<div class="sl-flex social-icons">
|
||||||
<SocialIcons {...Astro.props} />
|
<SocialIcons {...Astro.props} />
|
||||||
</div>
|
</div>
|
||||||
<nav class="sl-flex nav-links">
|
|
||||||
<a href={`${import.meta.env.BASE_URL}downloads/`}>Downloads</a>
|
|
||||||
</nav>
|
|
||||||
<ThemeSelect {...Astro.props} />
|
<ThemeSelect {...Astro.props} />
|
||||||
<LanguageSelect {...Astro.props} />
|
<LanguageSelect {...Astro.props} />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -33,21 +30,4 @@ import type { Props } from '@astrojs/starlight/props';
|
||||||
padding: 0.5rem 0;
|
padding: 0.5rem 0;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.nav-links {
|
|
||||||
gap: 1rem;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.nav-links a {
|
|
||||||
color: var(--sl-color-white);
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: 0.875rem;
|
|
||||||
font-weight: 500;
|
|
||||||
padding: 0.5rem 0.75rem;
|
|
||||||
border-radius: 4px;
|
|
||||||
transition: color 0.15s ease, background-color 0.15s ease;
|
|
||||||
}
|
|
||||||
.nav-links a:hover {
|
|
||||||
color: var(--sl-color-accent);
|
|
||||||
background-color: rgba(140, 140, 255, 0.1);
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
*
|
*
|
||||||
* Transforms:
|
* Transforms:
|
||||||
* /img/foo.png → /BMAD-METHOD/img/foo.png (when base is /BMAD-METHOD/)
|
* /img/foo.png → /BMAD-METHOD/img/foo.png (when base is /BMAD-METHOD/)
|
||||||
* /downloads/file.zip → /BMAD-METHOD/downloads/file.zip
|
|
||||||
* /llms.txt → /BMAD-METHOD/llms.txt
|
* /llms.txt → /BMAD-METHOD/llms.txt
|
||||||
*
|
*
|
||||||
* Only affects absolute paths (/) - relative paths and external URLs are unchanged.
|
* Only affects absolute paths (/) - relative paths and external URLs are unchanged.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue