Compare commits
13 Commits
42933c3f88
...
5e8ee5a9be
| Author | SHA1 | Date |
|---|---|---|
|
|
5e8ee5a9be | |
|
|
2da016f797 | |
|
|
6947851393 | |
|
|
9d7b09d065 | |
|
|
86f2786dde | |
|
|
a638f062b9 | |
|
|
738237b4ae | |
|
|
6430173738 | |
|
|
baaa984a90 | |
|
|
38e65abd83 | |
|
|
ff9a085dd0 | |
|
|
ec26bb5d6a | |
|
|
5d5062e5d7 |
|
|
@ -60,7 +60,7 @@ representative at an online or offline event.
|
|||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
the official BMAD Discord server (https://discord.com/invite/gk8jAdXWmj) - DM a moderator or flag a post.
|
||||
the official BMAD Discord server (<https://discord.com/invite/gk8jAdXWmj>) - DM a moderator or flag a post.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
|
|
@ -116,7 +116,7 @@ the community.
|
|||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
<https://www.contributor-covenant.org/version/2/0/code_of_conduct.html>.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
|
@ -124,5 +124,5 @@ enforcement ladder](https://github.com/mozilla/diversity).
|
|||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
<https://www.contributor-covenant.org/faq>. Translations are available at
|
||||
<https://www.contributor-covenant.org/translations>.
|
||||
544
CHANGELOG.md
544
CHANGELOG.md
|
|
@ -1,5 +1,75 @@
|
|||
# Changelog
|
||||
|
||||
## [6.0.0-alpha.15]
|
||||
|
||||
**Release: December 7, 2025**
|
||||
|
||||
### 🔧 Module Installation Standardization
|
||||
|
||||
**Unified Module Configuration:**
|
||||
|
||||
- **module.yaml Standard**: All modules now use `module.yaml` instead of `_module-installer/install-config.yaml` for consistent configuration (BREAKING CHANGE)
|
||||
- **Universal Installer**: Both core and custom modules now use the same installer with consistent behavior
|
||||
- **Streamlined Module Creation**: Module builder templates updated to use new module.yaml standard
|
||||
- **Enhanced Module Discovery**: Improved module caching and discovery mechanisms
|
||||
|
||||
**Custom Content Installation Revolution:**
|
||||
|
||||
- **Interactive Custom Content Search**: Installer now proactively asks if you have custom content to install
|
||||
- **Flexible Location Specification**: Users can indicate custom content location during installation
|
||||
- **Improved Custom Module Handler**: Enhanced error handling and debug output for custom installations
|
||||
- **Comprehensive Documentation**: New custom-content-installation.md guide (245 lines) replacing custom-agent-installation.md
|
||||
|
||||
### 🤖 Code Review Integration Expansion
|
||||
|
||||
**AI Review Tools:**
|
||||
|
||||
- **CodeRabbit AI Integration**: Added .coderabbit.yaml configuration for automated code review
|
||||
- **Raven's Verdict PR Review Tool**: New PR review automation tool (297 lines of documentation)
|
||||
- **Review Path Configuration**: Proper exclusion patterns for node_modules and generated files
|
||||
- **Review Documentation**: Comprehensive usage guidance and skip conditions for PRs
|
||||
|
||||
### 📚 Documentation Improvements
|
||||
|
||||
**Documentation Restructuring:**
|
||||
|
||||
- **Code of Conduct**: Moved to .github/ folder following GitHub standards
|
||||
- **Gem Creation Link**: Updated to point to Gemini Gem manager instead of deprecated interface
|
||||
- **Example Custom Content**: Improved README files and disabled example modules to prevent accidental installation
|
||||
- **Custom Module Documentation**: Enhanced module installation guides with new YAML structure
|
||||
|
||||
### 🧹 Cleanup & Optimization
|
||||
|
||||
**Memory Management:**
|
||||
|
||||
- **Removed Hardcoded .bmad Folders**: Cleaned up demo content to use configurable paths
|
||||
- **Sidecar File Cleanup**: Removed old .bmad-user-memory folders from wellness modules
|
||||
- **Example Content Organization**: Better organization of example-custom-content directory
|
||||
|
||||
**Installer Improvements:**
|
||||
|
||||
- **Debug Output Enhancement**: Added informative debug output when installer encounters errors
|
||||
- **Custom Module Caching**: Improved caching mechanism for custom module installations
|
||||
- **Consistent Behavior**: All modules now behave consistently regardless of custom or core status
|
||||
|
||||
### 📊 Statistics
|
||||
|
||||
- **77 files changed** with 2,852 additions and 607 deletions
|
||||
- **15 commits** since alpha.14
|
||||
|
||||
### ⚠️ Breaking Changes
|
||||
|
||||
1. **module.yaml Configuration**: All modules must now use `module.yaml` instead of `_module-installer/install-config.yaml`
|
||||
- Core modules updated automatically
|
||||
- Custom modules will need to rename their configuration file
|
||||
- Module builder templates generate new format
|
||||
|
||||
### 📦 New Dependencies
|
||||
|
||||
- No new dependencies added in this release
|
||||
|
||||
---
|
||||
|
||||
## [6.0.0-alpha.14]
|
||||
|
||||
**Release: December 7, 2025**
|
||||
|
|
@ -101,159 +171,29 @@
|
|||
|
||||
### 🏗️ Revolutionary Workflow Architecture
|
||||
|
||||
**Granular Step-File Workflow System (NEW in alpha.13):**
|
||||
|
||||
- **Multi-Menu Support**: Workflows now support granular step-file architecture with dynamic menu generation
|
||||
- **Sharded Workflows**: Complete conversion of Phase 1 and 2 workflows to stepwise sharded architecture
|
||||
- **Improved Performance**: Reduced file loading times and eliminated time-based estimates throughout
|
||||
- **Workflow Builder**: New dedicated workflow builder for creating stepwise workflows
|
||||
- **PRD Workflow**: First completely reworked sharded workflow resolving Sonnet compatibility issues
|
||||
|
||||
**Core Workflow Transformations:**
|
||||
|
||||
- Phase 1 and 2 workflows completely converted to sharded step-flow architecture
|
||||
- UX Design workflow converted to sharded step workflow
|
||||
- Brainstorming, Research, and Party Mode updated to use sharded step-flow workflows
|
||||
- Architecture workflows enhanced with step sharding and performance improvements
|
||||
|
||||
### 🎯 Code Review & Development Enhancement
|
||||
|
||||
**Advanced Code Review System:**
|
||||
|
||||
- **Adversarial Code Review**: Quick-dev workflow now recommends adversarial review approach for higher quality
|
||||
- **Multi-LLM Strategy**: Dev-story workflow recommends different LLM models for code review tasks
|
||||
- **Agent Compiler Optimization**: Complete handler cleanup and performance improvements
|
||||
- **Step-File System**: Complete conversion to granular step-file architecture with dynamic menu generation
|
||||
- **Phase 4 Transformation**: Simplified architecture with sprint planning integration (Jira, Linear, Trello)
|
||||
- **Performance Improvements**: Eliminated time-based estimates, reduced file loading times
|
||||
- **Legacy Cleanup**: Removed all deprecated workflows for cleaner system
|
||||
|
||||
### 🤖 Agent System Revolution
|
||||
|
||||
**Universal Custom Agent Support:**
|
||||
- **Universal Custom Agent Support**: Extended to ALL IDEs including Antigravity and Rovo Dev
|
||||
- **Agent Creation Workflow**: Enhanced with better documentation and parameter clarity
|
||||
- **Multi-Source Discovery**: Agents now check multiple source locations for better discovery
|
||||
- **GitHub Migration**: Integration moved from chatmodes to agents folder
|
||||
|
||||
- **Complete IDE Coverage**: Custom agent support extended to ALL remaining IDEs
|
||||
- **Antigravity IDE Integration**: Added custom agent support with proper gitignore configuration
|
||||
- **Multiple Source Locations**: Compile agents now checks multiple source locations for better discovery
|
||||
- **Persona Name Display**: Fixed proper persona names display in custom agent manifests
|
||||
- **New IDE Support**: Added support for Rovo Dev IDE
|
||||
### 🧪 Testing Infrastructure
|
||||
|
||||
**Agent Creation & Management:**
|
||||
|
||||
- **Improved Creation Workflow**: Enhanced agent creation workflow with better documentation
|
||||
- **Parameter Clarity**: Renamed agent-install parameters for better understanding
|
||||
- **Menu Organization**: BMad Agents menu items logically ordered with optional/recommended/required tags
|
||||
- **GitHub Migration**: GitHub integration now uses agents folder instead of chatmodes
|
||||
|
||||
### 🔧 Phase 4 & Sprint Evolution
|
||||
|
||||
**Complete Phase 4 Transformation:**
|
||||
|
||||
- **Simplified Architecture**: Phase 4 workflows completely transformed - simpler, faster, better results
|
||||
- **Sprint Planning Integration**: Unified sprint planning with placeholders for Jira, Linear, and Trello integration
|
||||
- **Status Management**: Better status loading and updating for Phase 4 artifacts
|
||||
- **Workflow Reduction**: Phase 4 streamlined to single sprint planning item with clear validation
|
||||
- **Dynamic Workflows**: All Level 1-3 workflows now dynamically suggest next steps based on context
|
||||
|
||||
### 🧪 Testing Infrastructure Expansion
|
||||
|
||||
**Playwright Utils Integration:**
|
||||
|
||||
- Test Architect now supports `@seontechnologies/playwright-utils` integration
|
||||
- Installation prompt with `use_playwright_utils` configuration flag
|
||||
- 11 comprehensive knowledge fragments covering ALL utilities
|
||||
- Adaptive workflow recommendations across 6 testing workflows
|
||||
- Production-ready utilities from SEON Technologies integrated with TEA patterns
|
||||
|
||||
**Testing Environment:**
|
||||
|
||||
- **Web Bundle Support**: Enabled web bundles for test and development environments
|
||||
- **Test Architecture**: Enhanced test design for architecture level (Phase 3) testing
|
||||
|
||||
### 📦 Installation & Configuration
|
||||
|
||||
**Installer Improvements:**
|
||||
|
||||
- **Cleanup Options**: Installer now allows cleanup of unneeded files during upgrades
|
||||
- **Username Default**: Installer now defaults to system username for better UX
|
||||
- **IDE Selection**: Added empty IDE selection warning and promoted Antigravity to recommended
|
||||
- **NPM Vulnerabilities**: Resolved all npm vulnerabilities for enhanced security
|
||||
- **Documentation Installation**: Made documentation installation optional to reduce footprint
|
||||
|
||||
**Text-to-Speech from AgentVibes optional Integration:**
|
||||
|
||||
- **TTS_INJECTION System**: Complete text-to-speech integration via injection system
|
||||
- **Agent Vibes**: Enhanced with TTS capabilities for voice feedback
|
||||
|
||||
### 🛠️ Tool & IDE Updates
|
||||
|
||||
**IDE Tool Enhancements:**
|
||||
|
||||
- **GitHub Copilot**: Fixed tool names consistency across workflows
|
||||
- **KiloCode Integration**: Gave kilocode tool proper access to bmad modes
|
||||
- **Code Quality**: Added radix parameter to parseInt() calls for better reliability
|
||||
- **Agent Menu Optimization**: Improved agent performance in Claude Code slash commands
|
||||
|
||||
### 📚 Documentation & Standards
|
||||
|
||||
**Documentation Cleanup:**
|
||||
|
||||
- **Installation Guide**: Removed fluff and updated with npx support
|
||||
- **Workflow Documentation**: Fixed documentation by removing non-existent workflows and Mermaid diagrams
|
||||
- **Phase Numbering**: Fixed phase numbering consistency throughout documentation
|
||||
- **Package References**: Corrected incorrect npm package references
|
||||
|
||||
**Workflow Compliance:**
|
||||
|
||||
- **Validation Checks**: Enhanced workflow validation checks for compliance
|
||||
- **Product Brief**: Updated to comply with documented workflow standards
|
||||
- **Status Integration**: Workflow-status can now call workflow-init for better integration
|
||||
|
||||
### 🔍 Legacy Workflow Cleanup
|
||||
|
||||
**Deprecated Workflows Removed:**
|
||||
|
||||
- **Audit Workflow**: Completely removed audit workflow and all associated files
|
||||
- **Convert Legacy**: Removed legacy conversion utilities
|
||||
- **Create/Edit Workflows**: Removed old workflow creation and editing workflows
|
||||
- **Clean Architecture**: Simplified workflow structure by removing deprecated legacy workflows
|
||||
|
||||
### 🐛 Technical Fixes
|
||||
|
||||
**System Improvements:**
|
||||
|
||||
- **File Path Handling**: Fixed various file path issues across workflows
|
||||
- **Manifest Updates**: Updated manifest to use agents folder structure
|
||||
- **Web Bundle Configuration**: Fixed web bundle configurations for better compatibility
|
||||
- **CSV Column Mismatch**: Fixed manifest schema upgrade issues
|
||||
- **Playwright Utils Integration**: @seontechnologies/playwright-utils across all testing workflows
|
||||
- **TTS Injection System**: Complete text-to-speech integration for voice feedback
|
||||
- **Web Bundle Test Support**: Enabled web bundles for test environments
|
||||
|
||||
### ⚠️ Breaking Changes
|
||||
|
||||
**Workflow Architecture:**
|
||||
|
||||
- All legacy workflows have been removed - ensure you're using the new stepwise sharded workflows
|
||||
- Phase 4 completely restructured - update any automation expecting old Phase 4 structure
|
||||
- Epic creation now requires architectural context (moved to Phase 3 in previous release)
|
||||
|
||||
**Agent System:**
|
||||
|
||||
- Custom agents now require proper compilation - use the new agent creation workflow
|
||||
- GitHub integration moved from chatmodes to agents folder - update any references
|
||||
|
||||
### 📊 Impact Summary
|
||||
|
||||
**New in alpha.13:**
|
||||
|
||||
- **Stepwise Workflow Architecture**: Complete transformation of all workflows to granular step-file system
|
||||
- **Universal Custom Agent Support**: Extended to ALL IDEs with improved creation workflow
|
||||
- **Phase 4 Revolution**: Completely restructured with sprint planning integration
|
||||
- **Legacy Cleanup**: Removed all deprecated workflows for cleaner system
|
||||
- **Advanced Code Review**: New adversarial review approach with multi-LLM strategy
|
||||
- **Text-to-Speech**: Full TTS integration for voice feedback
|
||||
- **Testing Expansion**: Playwright utils integration across all testing workflows
|
||||
|
||||
**Enhanced from alpha.12:**
|
||||
|
||||
- **Performance**: Improved file loading and removed time-based estimates
|
||||
- **Documentation**: Complete cleanup with accurate references
|
||||
- **Installer**: Better UX with cleanup options and improved defaults
|
||||
- **Agent System**: More reliable compilation and better persona handling
|
||||
1. **Legacy Workflows Removed**: Migrate to new stepwise sharded workflows
|
||||
2. **Phase 4 Restructured**: Update automation expecting old Phase 4 structure
|
||||
3. **Agent Compilation Required**: Custom agents must use new creation workflow
|
||||
|
||||
## [6.0.0-alpha.12]
|
||||
|
||||
|
|
@ -267,313 +207,101 @@
|
|||
|
||||
**Release: November 18, 2025**
|
||||
|
||||
This alpha release introduces a complete agent installation system with the new `bmad agent-install` command, vastly improves the BMB agent builder capabilities with comprehensive documentation and reference agents, and refines diagram distribution to better align with BMad Method's core principle: **BMad agents mirror real agile teams**.
|
||||
### 🚀 Agent Installation Revolution
|
||||
|
||||
### 🎨 Diagram Capabilities Refined and Distributed
|
||||
|
||||
**Excalidraw Integration Evolution:**
|
||||
|
||||
Building on the excellent Excalidraw integration introduced with the Frame Expert agent, we've refined how diagram capabilities are distributed across the BMad Method ecosystem to better reflect real agile team dynamics.
|
||||
|
||||
**The Refinement:**
|
||||
|
||||
- The valuable Excalidraw diagramming capabilities have been distributed to the agents who naturally create these artifacts in real teams
|
||||
- **Architect**: System architecture diagrams, data flow visualizations
|
||||
- **Product Manager**: Process flowcharts and workflow diagrams
|
||||
- **UX Designer**: Wireframe creation capabilities
|
||||
- **Tech Writer**: All diagram types for documentation needs
|
||||
- **New CIS Agent**: presentation-master for specialized visual communication
|
||||
|
||||
**Shared Infrastructure Enhancement:**
|
||||
|
||||
- Excalidraw templates, component libraries, and validation patterns elevated to core resources
|
||||
- Available to both BMM agents AND CIS presentation specialists
|
||||
- Preserves all the excellent Excalidraw functionality while aligning with natural team roles
|
||||
|
||||
### 🚀 New Agent Installation System
|
||||
|
||||
**Agent Installation Infrastructure (NEW in alpha.11):**
|
||||
|
||||
- `bmad agent-install` CLI command with interactive persona customization
|
||||
- **YAML → XML compilation engine** with smart handler injection
|
||||
- Supports Simple (single file), Expert (with sidecars), and Module agents
|
||||
- Handlebars-style template variable processing
|
||||
- Automatic manifest tracking and IDE integration
|
||||
- Source preservation in `_cfg/custom/agents/` for reinstallation
|
||||
|
||||
**New Reference Agents Added:**
|
||||
|
||||
- **commit-poet**: Poetic git commit message generator (Simple agent example)
|
||||
- **journal-keeper**: Daily journaling agent with templates (Expert agent example)
|
||||
- **security-engineer & trend-analyst**: Module agent examples with ecosystem integration
|
||||
|
||||
**Critical Persona Field Guidance Added:**
|
||||
|
||||
New documentation explaining how LLMs interpret persona fields for better agent quality:
|
||||
|
||||
- **role** → "What knowledge, skills, and capabilities do I possess?"
|
||||
- **identity** → "What background, experience, and context shape my responses?"
|
||||
- **communication_style** → "What verbal patterns, word choice, and phrasing do I use?"
|
||||
- **principles** → "What beliefs and operating philosophy drive my choices?"
|
||||
|
||||
Key insight: `communication_style` should ONLY describe HOW the agent talks, not WHAT they do
|
||||
|
||||
**BMM Agent Voice Enhancement:**
|
||||
|
||||
All 9 existing BMM agents enhanced with distinct, memorable communication voices:
|
||||
|
||||
- **Mary (analyst)**: "Treats analysis like a treasure hunt - excited by every clue"
|
||||
- **John (PM)**: "Asks 'WHY?' relentlessly like a detective on a case"
|
||||
- **Winston (architect)**: "Champions boring technology that actually works"
|
||||
- **Amelia (dev)**: "Ultra-succinct. Speaks in file paths and AC IDs"
|
||||
- **Sally (UX)**: "Paints pictures with words, telling user stories that make you FEEL"
|
||||
|
||||
### 🔧 Edit-Agent Workflow Comprehensive Enhancement
|
||||
|
||||
**Expert Agent Sidecar Support (NEW):**
|
||||
|
||||
- Automatically detects and handles Expert agents with multiple files
|
||||
- Loads and manages templates, data files, knowledge bases
|
||||
- Smart sidecar analysis: maps references, finds orphans, validates paths
|
||||
- 5 complete sidecar editing patterns with warm, educational feedback
|
||||
|
||||
**7-Step Communication Style Refinement Pattern:**
|
||||
|
||||
1. Diagnose current style with red flag word detection
|
||||
2. Extract non-style content to working copy
|
||||
3. Discover TRUE communication style through interview questions
|
||||
4. Craft pure style using presets and reference agents
|
||||
5. Show before/after transformation with full context
|
||||
6. Validate against standards (zero red flags)
|
||||
7. Confirm with user through dramatic reading
|
||||
|
||||
**Unified Validation Checklist:**
|
||||
|
||||
- Single source of truth: `agent-validation-checklist.md` (160 lines)
|
||||
- Shared between create-agent and edit-agent workflows
|
||||
- Comprehensive persona field separation validation
|
||||
- Expert agent sidecar validation (9 specific checks)
|
||||
- Common issues and fixes with real examples
|
||||
- **bmad agent-install CLI**: Interactive agent installation with persona customization
|
||||
- **4 Reference Agents**: commit-poet, journal-keeper, security-engineer, trend-analyst
|
||||
- **Agent Compilation Engine**: YAML → XML with smart handler injection
|
||||
- **60 Communication Presets**: Pure communication styles for agent personas
|
||||
|
||||
### 📚 BMB Agent Builder Enhancement
|
||||
|
||||
**Vastly Improved Agent Creation & Editing Capabilities:**
|
||||
- **Complete Documentation Suite**: 7 new guides for agent architecture and creation
|
||||
- **Expert Agent Sidecar Support**: Multi-file agents with templates and knowledge bases
|
||||
- **Unified Validation**: 160-line checklist shared across workflows
|
||||
- **BMM Agent Voices**: All 9 agents enhanced with distinct communication styles
|
||||
|
||||
- Create-agent and edit-agent workflows now have accurate, comprehensive documentation
|
||||
- All context references updated and validated for consistency
|
||||
- Workflows can now properly guide users through complex agent design decisions
|
||||
### 🎯 Workflow Architecture Change
|
||||
|
||||
**New Agent Documentation Suite:**
|
||||
|
||||
- `understanding-agent-types.md` - Architecture vs capability distinction
|
||||
- `simple-agent-architecture.md` - Self-contained agents guide
|
||||
- `expert-agent-architecture.md` - Agents with sidecar files
|
||||
- `module-agent-architecture.md` - Workflow-integrated agents
|
||||
- `agent-compilation.md` - YAML → XML transformation process
|
||||
- `agent-menu-patterns.md` - Menu design patterns
|
||||
- `communication-presets.csv` - 60 pure communication styles for reference
|
||||
|
||||
**New Reference Agents for Learning:**
|
||||
|
||||
- Complete working examples of Simple, Expert, and Module agents
|
||||
- Can be installed directly via the new `bmad agent-install` command
|
||||
- Serve as both learning resources and ready-to-use agents
|
||||
|
||||
### 🎯 Epic Creation Moved to Phase 3 (After Architecture)
|
||||
|
||||
**Workflow Sequence Corrected:**
|
||||
|
||||
```
|
||||
Phase 2: PRD → UX Design
|
||||
Phase 3: Architecture → Epics & Stories ← NOW HERE (technically informed)
|
||||
```
|
||||
|
||||
**Why This Fundamental Change:**
|
||||
|
||||
- Epics need architectural context: API contracts, data models, technical decisions
|
||||
- Stories can reference actual architectural patterns and constraints
|
||||
- Reduces rewrites when architecture reveals complexity
|
||||
- Better complexity-based estimation (not time-based)
|
||||
|
||||
### 🖥️ New IDE Support
|
||||
|
||||
**Google Antigravity IDE Installer:**
|
||||
|
||||
- Flattened file naming for proper slash commands (bmad-module-agents-name.md)
|
||||
- Namespace isolation prevents module conflicts
|
||||
- Subagent installation support (project or user level)
|
||||
- Module-specific injection configuration
|
||||
|
||||
**Codex CLI Enhancement:**
|
||||
|
||||
- Now supports both global and project-specific installation
|
||||
- CODEX_HOME configuration for multi-project workflows
|
||||
- OS-specific setup instructions (Unix/Mac/Windows)
|
||||
|
||||
### 🏗️ Reference Agents & Standards
|
||||
|
||||
**New Reference Agents Provide Clear Examples:**
|
||||
|
||||
- **commit-poet.agent.yaml**: Simple agent with pure communication style
|
||||
- **journal-keeper.agent.yaml**: Expert agent with sidecar file structure
|
||||
- **security-engineer.agent.yaml**: Module agent for ecosystem integration
|
||||
- **trend-analyst.agent.yaml**: Module agent with cross-workflow capabilities
|
||||
|
||||
**Agent Type Clarification:**
|
||||
|
||||
- Clear documentation that agent types (Simple/Expert/Module) describe architecture, not capability
|
||||
- Module = designed for ecosystem integration, not limited in function
|
||||
|
||||
### 🐛 Technical Improvements
|
||||
|
||||
**Linting Compliance:**
|
||||
|
||||
- Fixed all ESLint warnings across agent tooling
|
||||
- `'utf-8'` → `'utf8'` (unicorn/text-encoding-identifier-case)
|
||||
- `hasOwnProperty` → `Object.hasOwn` (unicorn/prefer-object-has-own)
|
||||
- `JSON.parse(JSON.stringify(...))` → `structuredClone(...)`
|
||||
|
||||
**Agent Compilation Engine:**
|
||||
|
||||
- Auto-injects frontmatter, activation, handlers, help/exit menu items
|
||||
- Smart handler inclusion (only includes handlers actually used)
|
||||
- Proper XML escaping and formatting
|
||||
- Persona name customization support
|
||||
|
||||
### 📊 Impact Summary
|
||||
|
||||
**New in alpha.11:**
|
||||
|
||||
- **Agent installation system** with `bmad agent-install` CLI command
|
||||
- **4 new reference agents** (commit-poet, journal-keeper, security-engineer, trend-analyst)
|
||||
- **Complete agent documentation suite** with 7 new focused guides
|
||||
- **Expert agent sidecar support** in edit-agent workflow
|
||||
- **2 new IDE installers** (Google Antigravity, enhanced Codex)
|
||||
- **Unified validation checklist** (160 lines) for consistent quality standards
|
||||
- **60 pure communication style presets** for agent persona design
|
||||
|
||||
**Enhanced from alpha.10:**
|
||||
|
||||
- **BMB agent builder workflows** with accurate context and comprehensive guidance
|
||||
- **All 9 BMM agents** enhanced with distinct, memorable communication voices
|
||||
- **Excalidraw capabilities** refined and distributed to role-appropriate agents
|
||||
- **Epic creation** moved to Phase 3 (after Architecture) for technical context
|
||||
- **Epic Creation Moved**: Now in Phase 3 after Architecture for technical context
|
||||
- **Excalidraw Distribution**: Diagram capabilities moved to role-appropriate agents
|
||||
- **Google Antigravity IDE**: New installer with flattened file naming
|
||||
|
||||
### ⚠️ Breaking Changes
|
||||
|
||||
**Agent Changes:**
|
||||
|
||||
- Frame Expert agent retired - diagram capabilities now available through role-appropriate agents:
|
||||
- Architecture diagrams → `/architect`
|
||||
- Process flows → `/pm`
|
||||
- Wireframes → `/ux-designer`
|
||||
- Documentation visuals → `/tech-writer`
|
||||
|
||||
**Workflow Changes:**
|
||||
|
||||
- Epic creation moved from Phase 2 to Phase 3 (after Architecture)
|
||||
- Excalidraw workflows redistributed to appropriate agents
|
||||
|
||||
**Installation Changes:**
|
||||
|
||||
- New `bmad agent-install` command replaces manual agent installation
|
||||
- Agent YAML files must be compiled to XML for use
|
||||
|
||||
### 🔄 Migration Notes
|
||||
|
||||
**For Existing Projects:**
|
||||
|
||||
1. **Frame Expert Users:**
|
||||
- Transition to role-appropriate agents for diagrams
|
||||
- All Excalidraw functionality preserved and enhanced
|
||||
- Shared templates now in core resources for wider access
|
||||
|
||||
2. **Agent Installation:**
|
||||
- Use `bmad agent-install` for all agent installations
|
||||
- Existing manual installations still work but won't have customization
|
||||
|
||||
3. **Epic Creation Timing:**
|
||||
- Epics now created in Phase 3 after Architecture
|
||||
- Update any automation expecting epics in Phase 2
|
||||
|
||||
4. **Communication Styles:**
|
||||
- Review agent communication_style fields
|
||||
- Remove any role/identity/principle content
|
||||
- Use communication-presets.csv for pure styles
|
||||
|
||||
5. **Expert Agents:**
|
||||
- Edit-agent workflow now fully supports sidecar files
|
||||
- Organize templates and data files in agent folder
|
||||
1. **Frame Expert Retired**: Use role-appropriate agents for diagrams
|
||||
2. **Agent Installation**: New bmad agent-install command replaces manual installation
|
||||
3. **Epic Creation Phase**: Moved from Phase 2 to Phase 3
|
||||
|
||||
## [6.0.0-alpha.10]
|
||||
|
||||
**Release: November 16, 2025**
|
||||
|
||||
- **🎯 Epics Generated AFTER Architecture**: Major milestone - epics/stories now created after architecture for technically-informed user stories with better acceptance criteria
|
||||
- **🎨 Frame Expert Agent**: New Excalidraw specialist with 4 diagram workflows (flowchart, diagram, dataflow, wireframe) for visual documentation
|
||||
- **⏰ Time Estimate Prohibition**: Critical warnings added across 33 workflows - acknowledges AI has fundamentally changed development speed
|
||||
- **🎯 Platform-Specific Commands**: New `ide-only`/`web-only` fields filter menu items based on environment (IDE vs web bundle)
|
||||
- **🔧 Agent Customization**: Enhanced memory/prompts merging via `*.customize.yaml` files for persistent agent personalization
|
||||
- **Epics After Architecture**: Major milestone - technically-informed user stories created post-architecture
|
||||
- **Frame Expert Agent**: New Excalidraw specialist with 4 diagram workflows
|
||||
- **Time Estimate Prohibition**: Warnings across 33 workflows acknowledging AI's impact on development speed
|
||||
- **Platform-Specific Commands**: ide-only/web-only fields filter menu items by environment
|
||||
- **Agent Customization**: Enhanced memory/prompts merging via \*.customize.yaml files
|
||||
|
||||
## [6.0.0-alpha.9]
|
||||
|
||||
**Release: November 12, 2025**
|
||||
|
||||
- **🚀 Intelligent File Discovery Protocol**: New `discover_inputs` with FULL_LOAD, SELECTIVE_LOAD, and INDEX_GUIDED strategies for automatic context loading
|
||||
- **📚 3-Track System**: Simplified from 5 levels to 3 intuitive tracks: quick-flow, bmad-method, and enterprise-bmad-method
|
||||
- **🌐 Web Bundles Guide**: Comprehensive documentation for Gemini Gems and Custom GPTs with 60-80% cost savings strategies
|
||||
- **🏗️ Unified Output Structure**: Eliminated `.ephemeral/` folders - all artifacts now in single configurable output folder
|
||||
- **🎮 BMGD Phase 4**: Added 10 game development workflows following BMM patterns with game-specific adaptations
|
||||
- **Intelligent File Discovery**: discover_inputs with FULL_LOAD, SELECTIVE_LOAD, INDEX_GUIDED strategies
|
||||
- **3-Track System**: Simplified from 5 levels to 3 intuitive tracks
|
||||
- **Web Bundles Guide**: Comprehensive documentation with 60-80% cost savings strategies
|
||||
- **Unified Output Structure**: Eliminated .ephemeral/ folders - single configurable output folder
|
||||
- **BMGD Phase 4**: Added 10 game development workflows with BMM patterns
|
||||
|
||||
## [6.0.0-alpha.8]
|
||||
|
||||
**Release: November 9, 2025**
|
||||
|
||||
- **🎯 Configurable Installation**: Custom directories with `.bmad` hidden folder default for cleaner project structure
|
||||
- **🚀 Optimized Agent Loading**: CLI loads from installed files eliminating duplication and maintenance burden
|
||||
- **🌐 Party Mode Everywhere**: All web bundles include multi-agent collaboration with customizable party configurations
|
||||
- **🔧 Phase 4 Artifact Separation**: Stories, code reviews, sprint plans now configurable outside docs folder
|
||||
- **📦 Expanded Web Bundles**: All BMM, BMGD, and CIS agents bundled with advanced elicitation integration
|
||||
- **Configurable Installation**: Custom directories with .bmad hidden folder default
|
||||
- **Optimized Agent Loading**: CLI loads from installed files, eliminating duplication
|
||||
- **Party Mode Everywhere**: All web bundles include multi-agent collaboration
|
||||
- **Phase 4 Artifact Separation**: Stories, code reviews, sprint plans configurable outside docs
|
||||
- **Expanded Web Bundles**: All BMM, BMGD, CIS agents bundled with elicitation integration
|
||||
|
||||
## [6.0.0-alpha.7]
|
||||
|
||||
**Release: November 7, 2025**
|
||||
|
||||
- **🌐 Workflow Vendoring**: Web bundler performs automatic workflow vendoring for cross-module dependencies
|
||||
- **🎮 BMGD Module Extraction**: Game development split into standalone module with 4-phase industry-standard structure
|
||||
- **🔧 Enhanced Dependency Resolution**: Better handling of `web_bundle: false` workflows with positive resolution messages
|
||||
- **📚 Advanced Elicitation Fix**: Added missing CSV files to workflow bundles fixing runtime failures
|
||||
- **🐛 Claude Code Fix**: Resolved README slash command installation regression
|
||||
- **Workflow Vendoring**: Web bundler performs automatic cross-module dependency vendoring
|
||||
- **BMGD Module Extraction**: Game development split into standalone 4-phase structure
|
||||
- **Enhanced Dependency Resolution**: Better handling of web_bundle: false workflows
|
||||
- **Advanced Elicitation Fix**: Added missing CSV files to workflow bundles
|
||||
- **Claude Code Fix**: Resolved README slash command installation regression
|
||||
|
||||
## [6.0.0-alpha.6]
|
||||
|
||||
**Release: November 4, 2025**
|
||||
|
||||
- **🐛 Critical Installer Fixes**: Fixed manifestPath error and option display issues blocking installation
|
||||
- **📖 Conditional Docs Installation**: Optional documentation installation to reduce footprint in production
|
||||
- **🎨 Improved Installer UX**: Better formatting with descriptive labels and clearer feedback
|
||||
- **🧹 Issue Tracker Cleanup**: Closed 54 legacy v4 issues for focused v6 development
|
||||
- **📝 Contributing Updates**: Removed references to non-existent branches in documentation
|
||||
- **Critical Installer Fixes**: Fixed manifestPath error and option display issues
|
||||
- **Conditional Docs Installation**: Optional documentation to reduce production footprint
|
||||
- **Improved Installer UX**: Better formatting with descriptive labels and clearer feedback
|
||||
- **Issue Tracker Cleanup**: Closed 54 legacy v4 issues for focused v6 development
|
||||
- **Contributing Updates**: Removed references to non-existent branches
|
||||
|
||||
## [6.0.0-alpha.5]
|
||||
|
||||
**Release: November 4, 2025**
|
||||
|
||||
- **🎯 3-Track Scale System**: Revolutionary simplification from 5 confusing levels to 3 intuitive preference-driven tracks
|
||||
- **✨ Elicitation Modernization**: Replaced legacy XML tags with explicit `invoke-task` pattern at strategic decision points
|
||||
- **📚 PM/UX Evolution Section**: Added November 2025 industry research on AI Agent PMs and Full-Stack Product Leads
|
||||
- **🏗️ Brownfield Reality Check**: Rewrote Phase 0 with 4 real-world scenarios for messy existing codebases
|
||||
- **📖 Documentation Accuracy**: All agent capabilities now match YAML source of truth with zero hallucination risk
|
||||
- **3-Track Scale System**: Simplified from 5 levels to 3 intuitive preference-driven tracks
|
||||
- **Elicitation Modernization**: Replaced legacy XML tags with explicit invoke-task pattern
|
||||
- **PM/UX Evolution**: Added November 2025 industry research on AI Agent PMs
|
||||
- **Brownfield Reality Check**: Rewrote Phase 0 with 4 real-world scenarios
|
||||
- **Documentation Accuracy**: All agent capabilities now match YAML source of truth
|
||||
|
||||
## [6.0.0-alpha.4]
|
||||
|
||||
**Release: November 2, 2025**
|
||||
|
||||
- **📚 Documentation Hub**: Created 18 comprehensive guides (7000+ lines) with professional technical writing standards
|
||||
- **🤖 Paige Agent**: New technical documentation specialist available across all BMM phases
|
||||
- **🚀 Quick Spec Flow**: Intelligent Level 0-1 planning with auto-stack detection and brownfield analysis
|
||||
- **📦 Universal Shard-Doc**: Split large markdown documents into organized sections with dual-strategy loading
|
||||
- **🔧 Intent-Driven Planning**: PRD and Product Brief transformed from template-filling to natural conversation
|
||||
- **Documentation Hub**: Created 18 comprehensive guides (7000+ lines) with professional standards
|
||||
- **Paige Agent**: New technical documentation specialist across all BMM phases
|
||||
- **Quick Spec Flow**: Intelligent Level 0-1 planning with auto-stack detection
|
||||
- **Universal Shard-Doc**: Split large markdown documents with dual-strategy loading
|
||||
- **Intent-Driven Planning**: PRD and Product Brief transformed from template-filling to conversation
|
||||
|
||||
## [6.0.0-alpha.3]
|
||||
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ Each agent brings deep expertise and can be customized to match your team's styl
|
|||
- **[GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues)** - Report bugs, request features
|
||||
- **[YouTube Channel](https://www.youtube.com/@BMadCode)** - Video tutorials and demos
|
||||
- **[Web Bundles](https://bmad-code-org.github.io/bmad-bundles/)** - Pre-built agent bundles
|
||||
- **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Community guidelines
|
||||
|
||||
## 🛠️ Development
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ A custom agents and workflows package follows this structure:
|
|||
|
||||
```
|
||||
my-custom-agents/
|
||||
├── custom.yaml # Package configuration
|
||||
├── module.yaml # Package configuration
|
||||
├── agents/ # Agent definitions
|
||||
│ └── my-agent/
|
||||
│ └── agent.md
|
||||
|
|
@ -30,7 +30,7 @@ my-custom-agents/
|
|||
|
||||
#### Configuration
|
||||
|
||||
Create a `custom.yaml` file in your package root:
|
||||
Create a `module.yaml` file in your package root:
|
||||
|
||||
```yaml
|
||||
code: my-custom-agents
|
||||
|
|
@ -42,11 +42,6 @@ default_selected: true
|
|||
|
||||
See `/example-custom-content` for a working example of a folder with multiple random custom agents and workflows. Technically its also just a module, but you will be able to further pick and choose from this folders contents of what you do and do not want to include in a destination folder. This way, you can store all custom content source in one location and easily install it to different locations.
|
||||
|
||||
```bash
|
||||
# The example is ready to use - just rename the config file:
|
||||
mv example-custom-content/custom.bak example-custom-content/custom.yaml
|
||||
```
|
||||
|
||||
### 2. Custom Modules
|
||||
|
||||
Custom modules are complete BMAD modules that can include their own configuration, documentation, along with agents and workflows that all compliment each other. Additionally they will have their own installation scripts, data, and potentially other tools. Modules can be used for:
|
||||
|
|
@ -64,7 +59,7 @@ A custom module follows this structure:
|
|||
my-module/
|
||||
├── _module-installer/
|
||||
│ ├── installer.js # optional, when it exists it will run with module installation
|
||||
│ └── install-config.yaml # Module installation configuration with custom question and answer capture
|
||||
├── module.yaml # Module installation configuration with custom question and answer capture
|
||||
├── docs/ # Module documentation
|
||||
├── agents/ # Module-specific agents
|
||||
├── workflows/ # Module-specific workflows
|
||||
|
|
@ -77,7 +72,7 @@ my-module/
|
|||
|
||||
#### Module Configuration
|
||||
|
||||
The `_module-installer/install-config.yaml` file defines how your module is installed:
|
||||
The `module.yaml` file defines how your module is installed:
|
||||
|
||||
```yaml
|
||||
# Module metadata
|
||||
|
|
@ -99,12 +94,6 @@ my_setting:
|
|||
|
||||
See `/example-custom-module` for a complete example:
|
||||
|
||||
```bash
|
||||
# The example is ready to use - just rename the _module-installer/install-config file:
|
||||
mv example-custom-module/mwm/_module-installer/install-config.bak \
|
||||
example-custom-module/mwm/_module-installer/install-config.yaml
|
||||
```
|
||||
|
||||
## Installation Process
|
||||
|
||||
### Step 1: Running the Installer
|
||||
|
|
@ -128,8 +117,7 @@ If you select "Enter a directory path", the installer will prompt for the locati
|
|||
|
||||
The installer will:
|
||||
|
||||
- Scan the directory and all subdirectories for the presence of a `custom.yaml` file (standalone content such as agents and workflows)
|
||||
- Scan for `_module-installer/install-config.yaml` files (modules)
|
||||
- Scan for `module.yaml` files (modules)
|
||||
- Display an indication of how many installable folders it has found. Note that a project with stand along agents and workflows all under a single folder like the example will just list the count as 1 for that directory.
|
||||
|
||||
### Step 3: Selecting Content
|
||||
|
|
@ -230,7 +218,7 @@ Custom content can be distributed:
|
|||
|
||||
### No Custom Content Found
|
||||
|
||||
- Ensure your `custom.yaml` or `install-config.yaml` files are properly named
|
||||
- Ensure your `module.yaml` files are properly named
|
||||
- Check file permissions
|
||||
- Verify the directory path is correct
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ project-root/
|
|||
### Key Exclusions
|
||||
|
||||
- `_module-installer/` directories are never copied to destination
|
||||
- module.yaml
|
||||
- `localskip="true"` agents are filtered out
|
||||
- Source `config.yaml` templates are replaced with generated configs
|
||||
|
||||
|
|
@ -92,8 +93,8 @@ Creative Innovation Studio for design workflows
|
|||
```
|
||||
src/modules/{module}/
|
||||
├── _module-installer/ # Not copied to destination
|
||||
│ ├── installer.js # Post-install logic
|
||||
│ └── install-config.yaml
|
||||
│ ├── installer.js # Post-install logic
|
||||
├── module.yaml
|
||||
├── agents/
|
||||
├── tasks/
|
||||
├── templates/
|
||||
|
|
@ -107,7 +108,7 @@ src/modules/{module}/
|
|||
|
||||
### Collection Process
|
||||
|
||||
Modules define prompts in `install-config.yaml`:
|
||||
Modules define prompts in `module.yaml`:
|
||||
|
||||
```yaml
|
||||
project_name:
|
||||
|
|
@ -218,12 +219,12 @@ Platform-specific content without source modification:
|
|||
src/modules/mymod/
|
||||
├── _module-installer/
|
||||
│ ├── installer.js
|
||||
│ └── install-config.yaml
|
||||
├── module.yaml
|
||||
├── agents/
|
||||
└── tasks/
|
||||
```
|
||||
|
||||
2. **Configuration** (`install-config.yaml`)
|
||||
2. **Configuration** (`module.yaml`)
|
||||
|
||||
```yaml
|
||||
code: mymod
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
agent:
|
||||
metadata:
|
||||
id: .bmad/agents/commit-poet/commit-poet.md
|
||||
id: "{bmad_folder}/agents/commit-poet/commit-poet.md"
|
||||
name: "Inkwell Von Comitizen"
|
||||
title: "Commit Message Artisan"
|
||||
icon: "📜"
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ CLI uses Commander.js, commands auto-loaded from `tools/cli/commands/`:
|
|||
### Core Architecture Patterns
|
||||
|
||||
1. **IDE Handlers**: Each IDE extends BaseIdeSetup class
|
||||
2. **Module Installers**: Modules can have `_module-installer/installer.js`
|
||||
2. **Module Installers**: Modules can have `module.yaml` and `_module-installer/installer.js`
|
||||
3. **Sub-modules**: IDE-specific customizations in `sub-modules/{ide-name}/`
|
||||
4. **Shared Utilities**: `tools/cli/installers/lib/ide/shared/` contains generators
|
||||
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ Contains:
|
|||
|
||||
- Add new IDE handler: Create file in /tools/cli/installers/lib/ide/, extend BaseIdeSetup
|
||||
- Fix installer bug: Check installer.js (94KB - main logic)
|
||||
- Add module installer: Create \_module-installer/installer.js in module
|
||||
- Add module installer: Create \_module-installer/installer.js if custom installer logic needed
|
||||
- Update shared generators: Modify files in /shared/ directory
|
||||
|
||||
## Relationships
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ src/modules/{module-name}/
|
|||
│ ├── injections.yaml
|
||||
│ ├── config.yaml
|
||||
│ └── sub-agents/
|
||||
├── install-config.yaml # Module install configuration
|
||||
├── module.yaml # Module install configuration
|
||||
└── README.md # Module documentation
|
||||
```
|
||||
|
||||
|
|
@ -145,7 +145,7 @@ Defined in @/tools/cli/lib/platform-codes.js
|
|||
- Create new module installer: Add \_module-installer/installer.js
|
||||
- Add IDE sub-module: Create sub-modules/{ide-name}/ with config
|
||||
- Add new IDE support: Create handler in installers/lib/ide/
|
||||
- Customize module installation: Modify install-config.yaml
|
||||
- Customize module installation: Modify module.yaml
|
||||
|
||||
## Relationships
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
agent:
|
||||
metadata:
|
||||
id: custom/agents/toolsmith/toolsmith.md
|
||||
id: "{bmad_folder}/agents/toolsmith/toolsmith.md"
|
||||
name: Vexor
|
||||
title: Infernal Toolsmith + Guardian of the BMAD Forge
|
||||
icon: ⚒️
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
code: bmad-custom
|
||||
name: "BMAD-Custom: Sample Stand Alone Custom Agents and Workflows"
|
||||
default_selected: true
|
||||
type: custom
|
||||
|
|
@ -3,7 +3,7 @@ name: 'step-01-init'
|
|||
description: 'Initialize quiz game with mode selection and category choice'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-01-init.md'
|
||||
|
|
@ -66,7 +66,7 @@ To set up the quiz game by selecting game mode, choosing a category, and prepari
|
|||
|
||||
### 1. Welcome and Configuration Loading
|
||||
|
||||
Load config from {project-root}/.bmad/bmb/config.yaml to get user_name.
|
||||
Load config from {project-root}/{bmad_folder}/bmb/config.yaml to get user_name.
|
||||
|
||||
Present dramatic welcome:
|
||||
"🎺 _DRAMATIC MUSIC PLAYS_ 🎺
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-02-q1'
|
|||
description: 'Question 1 - Level 1 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-02-q1.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-03-q2'
|
|||
description: 'Question 2 - Level 2 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-03-q2.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-04-q3'
|
|||
description: 'Question 3 - Level 3 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-04-q3.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-05-q4'
|
|||
description: 'Question 4 - Level 4 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-05-q4.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-06-q5'
|
|||
description: 'Question 5 - Level 5 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-06-q5.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-07-q6'
|
|||
description: 'Question 6 - Level 6 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-07-q6.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-08-q7'
|
|||
description: 'Question 7 - Level 7 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-08-q7.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-09-q8'
|
|||
description: 'Question 8 - Level 8 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-09-q8.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-10-q9'
|
|||
description: 'Question 9 - Level 9 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-10-q9.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-11-q10'
|
|||
description: 'Question 10 - Level 10 difficulty'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-11-q10.md'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ name: 'step-12-results'
|
|||
description: 'Final results and celebration'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/.bmad/custom/src/workflows/quiz-master'
|
||||
workflow_path: '{project-root}/{bmad_folder}/custom/src/workflows/quiz-master'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-12-results.md'
|
||||
|
|
|
|||
|
|
@ -1,269 +0,0 @@
|
|||
---
|
||||
stepsCompleted: [1, 2, 3, 4, 5, 6, 7]
|
||||
---
|
||||
|
||||
## Build Summary
|
||||
|
||||
**Date:** 2025-12-04
|
||||
**Status:** Build Complete
|
||||
|
||||
### Files Generated
|
||||
|
||||
**Main Workflow:**
|
||||
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/workflow.md`
|
||||
|
||||
**Step Files (12 total):**
|
||||
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-01-init.md` - Game setup and mode selection
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-02-q1.md` - Question 1 (Level 1)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-03-q2.md` - Question 2 (Level 2)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-04-q3.md` - Question 3 (Level 3)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-05-q4.md` - Question 4 (Level 4)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-06-q5.md` - Question 5 (Level 5)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-07-q6.md` - Question 6 (Level 6)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-08-q7.md` - Question 7 (Level 7)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-09-q8.md` - Question 8 (Level 8)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-10-q9.md` - Question 9 (Level 9)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-11-q10.md` - Question 10 (Level 10)
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/steps/step-12-results.md` - Final results and celebration
|
||||
|
||||
**Templates:**
|
||||
|
||||
- `/Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master/templates/csv-headers.template` - CSV column headers
|
||||
|
||||
### Key Features Implemented
|
||||
|
||||
1. **Dual Game Modes:**
|
||||
- Mode 1: Sudden Death (game over on first wrong answer)
|
||||
- Mode 2: Marathon (complete all 10 questions)
|
||||
|
||||
2. **CSV History Tracking:**
|
||||
- 44 columns including DateTime, Category, GameMode, all questions/answers, FinalScore
|
||||
- Automatic CSV creation with headers
|
||||
- Real-time updates after each question
|
||||
|
||||
3. **Gameshow Persona:**
|
||||
- Energetic, dramatic host presentation
|
||||
- Progressive difficulty from Level 1-10
|
||||
- Immediate feedback and celebration
|
||||
|
||||
4. **Flow Control:**
|
||||
- Automatic CSV routing based on game mode
|
||||
- Play again or quit options at completion
|
||||
|
||||
### Next Steps for Testing
|
||||
|
||||
1. Run the workflow: `/bmad:bmb:workflows:quiz-master`
|
||||
2. Test both game modes
|
||||
3. Verify CSV file creation and updates
|
||||
4. Check question progression and difficulty
|
||||
5. Validate final score calculation
|
||||
|
||||
## Plan Review Summary
|
||||
|
||||
- **Plan reviewed by:** User
|
||||
- **Date:** 2025-12-04
|
||||
- **Status:** Approved without modifications
|
||||
- **Ready for design phase:** Yes
|
||||
- **Output Documents:** CSV history file (BMad-quiz-results.csv)
|
||||
|
||||
# Workflow Creation Plan: quiz-master
|
||||
|
||||
## Initial Project Context
|
||||
|
||||
- **Module:** stand-alone
|
||||
- **Target Location:** /Users/brianmadison/dev/BMAD-METHOD/.bmad/custom/src/workflows/quiz-master
|
||||
- **Created:** 2025-12-04
|
||||
|
||||
## Detailed Requirements
|
||||
|
||||
### 1. Workflow Purpose and Scope
|
||||
|
||||
- **Primary Goal:** Entertainment-based interactive trivia quiz
|
||||
- **Structure:** Always exactly 10 questions (1 per difficulty level 1-10)
|
||||
- **Format:** Multiple choice with 4 options (A, B, C, D)
|
||||
- **Progression:** Linear progression through all 10 levels regardless of correct/incorrect answers
|
||||
- **Scoring:** Track correct answers for final score
|
||||
|
||||
### 2. Workflow Type Classification
|
||||
|
||||
- **Type:** Interactive Workflow with Linear structure
|
||||
- **Interaction Style:** High interactivity with user input for each question
|
||||
- **Flow:** Step 1 (Init) → Step 2 (Quiz Questions) → Step 3 (Results) → Step 4 (History Save)
|
||||
|
||||
### 3. Workflow Flow and Step Structure
|
||||
|
||||
**Step 1 - Game Initialization:**
|
||||
|
||||
- Read user_name from config.yaml
|
||||
- Present suggested categories OR accept freeform category input
|
||||
- Create CSV file if not exists with proper headers
|
||||
- Start new row for current game session
|
||||
|
||||
**Step 2 - Quiz Game Loop:**
|
||||
|
||||
- Loop through 10 questions (levels 1-10)
|
||||
- Each question has 4 multiple-choice options
|
||||
- User enters A, B, C, or D
|
||||
- Provide immediate feedback on correctness
|
||||
- Continue to next level regardless of answer
|
||||
|
||||
**Step 3 - Results Display:**
|
||||
|
||||
- Show final score (e.g., "You got 7 out of 10!")
|
||||
- Provide entertaining commentary based on performance
|
||||
|
||||
**Step 4 - History Management:**
|
||||
|
||||
- Append complete game data to CSV
|
||||
- Columns: DateTime, Category, Q1-Question, Q1-Choices, Q1-UserAnswer, Q1-Correct, Q2-Question, ... Q10-Correct, FinalScore
|
||||
|
||||
### 4. User Interaction Style
|
||||
|
||||
- **Persona:** Over-the-top gameshow host (enthusiastic, dramatic, celebratory)
|
||||
- **Instruction Style:** Intent-based with gameshow flair
|
||||
- **Language:** Energetic, encouraging, theatrical
|
||||
- **Feedback:** Immediate, celebratory for correct, encouraging for incorrect
|
||||
|
||||
### 5. Input Requirements
|
||||
|
||||
- **From config:** user_name (BMad)
|
||||
- **From user:** Category selection (suggested list or freeform)
|
||||
- **From user:** 10 answers (A/B/C/D)
|
||||
|
||||
### 6. Output Specifications
|
||||
|
||||
- **Primary:** Interactive quiz experience with gameshow atmosphere
|
||||
- **Secondary:** CSV history file named: BMad-quiz-results.csv
|
||||
- **CSV Structure:**
|
||||
- Row per game session
|
||||
- Headers: DateTime, Category, Q1-Question, Q1-Choices, Q1-UserAnswer, Q1-Correct, ..., Q10-Correct, FinalScore
|
||||
|
||||
### 7. Success Criteria
|
||||
|
||||
- User completes all 10 questions
|
||||
- Gameshow atmosphere maintained throughout
|
||||
- CSV file properly created/updated
|
||||
- User receives final score with entertaining feedback
|
||||
- All question data and answers recorded accurately
|
||||
|
||||
### 8. Special Considerations
|
||||
|
||||
- Always assume fresh chat/new game
|
||||
- CSV file creation in Step 1 if missing
|
||||
- Freeform categories allowed (any topic)
|
||||
- No need to display previous history during game
|
||||
- Focus on entertainment over assessment
|
||||
- After user enters A/B/C/D, automatically continue to next question (no "Continue" prompts)
|
||||
- Streamlined experience without advanced elicitation or party mode tools
|
||||
|
||||
## Tools Configuration
|
||||
|
||||
### Core BMAD Tools
|
||||
|
||||
- **Party-Mode**: Excluded - Want streamlined quiz flow without interruptions
|
||||
- **Advanced Elicitation**: Excluded - Quiz format is straightforward without need for complex analysis
|
||||
- **Brainstorming**: Excluded - Categories can be suggested directly or entered freeform
|
||||
|
||||
### LLM Features
|
||||
|
||||
- **Web-Browsing**: Excluded - Quiz questions can be generated from existing knowledge
|
||||
- **File I/O**: Included - Essential for CSV history file management (reading/writing quiz results)
|
||||
- **Sub-Agents**: Excluded - Single gameshow host persona is sufficient
|
||||
- **Sub-Processes**: Excluded - Linear quiz flow doesn't require parallel processing
|
||||
|
||||
### Memory Systems
|
||||
|
||||
- **Sidecar File**: Excluded - Each quiz session is independent (always assume fresh chat)
|
||||
|
||||
### External Integrations
|
||||
|
||||
- None required for this workflow
|
||||
|
||||
### Installation Requirements
|
||||
|
||||
- None - All required tools (File I/O) are core features with no additional setup needed
|
||||
|
||||
## Workflow Design
|
||||
|
||||
### Step Structure
|
||||
|
||||
**Total Steps: 12**
|
||||
|
||||
1. Step 01 - Init: Mode selection, category choice, CSV setup
|
||||
2. Steps 02-11: Individual questions (1-10) with CSV updates
|
||||
3. Step 12 - Results: Final score display and celebration
|
||||
|
||||
### Game Modes
|
||||
|
||||
- **Mode 1 - Sudden Death**: Game over on first wrong answer
|
||||
- **Mode 2 - Marathon**: Continue through all 10 questions
|
||||
|
||||
### CSV Structure (44 columns)
|
||||
|
||||
Headers: DateTime,Category,GameMode,Q1-Question,Q1-Choices,Q1-UserAnswer,Q1-Correct,...,Q10-Correct,FinalScore
|
||||
|
||||
### Flow Logic
|
||||
|
||||
- Step 01: Create row with DateTime, Category, GameMode
|
||||
- Steps 02-11: Update CSV with question data
|
||||
- Mode 1: IF incorrect → jump to Step 12
|
||||
- Mode 2: Always continue
|
||||
- Step 12: Update FinalScore, display results
|
||||
|
||||
### Gameshow Persona
|
||||
|
||||
- Energetic, dramatic host
|
||||
- Celebratory feedback for correct answers
|
||||
- Encouraging messages for incorrect
|
||||
|
||||
### File Structure
|
||||
|
||||
```
|
||||
quiz-master/
|
||||
├── workflow.md
|
||||
├── steps/
|
||||
│ ├── step-01-init.md
|
||||
│ ├── step-02-q1.md
|
||||
│ ├── ...
|
||||
│ └── step-12-results.md
|
||||
└── templates/
|
||||
└── csv-headers.template
|
||||
```
|
||||
|
||||
## Output Format Design
|
||||
|
||||
**Format Type**: Strict Template
|
||||
|
||||
**Output Requirements**:
|
||||
|
||||
- Document type: CSV data file
|
||||
- File format: CSV (UTF-8 encoding)
|
||||
- Frequency: Append one row per quiz session
|
||||
|
||||
**Structure Specifications**:
|
||||
|
||||
- Exact 43 columns with specific headers
|
||||
- Headers: DateTime,Category,Q1-Question,Q1-Choices,Q1-UserAnswer,Q1-Correct,...,Q10-Correct,FinalScore
|
||||
- Data formats:
|
||||
- DateTime: ISO 8601 (YYYY-MM-DDTHH:MM:SS)
|
||||
- Category: Text
|
||||
- QX-Question: Text
|
||||
- QX-Choices: (A)Opt1|(B)Opt2|(C)Opt3|(D)Opt4
|
||||
- QX-UserAnswer: A/B/C/D
|
||||
- QX-Correct: TRUE/FALSE
|
||||
- FinalScore: Number (0-10)
|
||||
|
||||
**Template Information**:
|
||||
|
||||
- Template source: Created based on requirements
|
||||
- Template file: CSV with fixed column structure
|
||||
- Placeholders: None - strict format required
|
||||
|
||||
**Special Considerations**:
|
||||
|
||||
- CSV commas within text must be quoted
|
||||
- Newlines in questions replaced with spaces
|
||||
- Headers created only if file doesn't exist
|
||||
- Append mode for all subsequent quiz sessions
|
||||
|
|
@ -45,7 +45,7 @@ web_bundle: true
|
|||
|
||||
### 1. Module Configuration Loading
|
||||
|
||||
Load and read full config from {project-root}/.bmad/bmb/config.yaml and resolve:
|
||||
Load and read full config from {project-root}/{bmad_folder}/bmb/config.yaml and resolve:
|
||||
|
||||
- `user_name`, `output_folder`, `communication_language`, `document_output_language`
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,6 @@
|
|||
This module is an example and is not at all recommended for any usage, this module was not vetted by any medical professionals and should
|
||||
be considered at best for entertainment purposes only.
|
||||
|
||||
IF you want to see how a custom module installation works, copy this whole folder to where you will be installing from with npx, and rename
|
||||
"\_module-installer/install-config.bak" to "\_module-installer/install-config.yaml".
|
||||
|
||||
You should see the option in the module selector when installing.
|
||||
|
||||
If you have received a module from someone else that is not in the official installation - you can install it similarly by running the
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
agent:
|
||||
metadata:
|
||||
id: "{bmad_folder}/mwm/agents/cbt-coach/cbt-coach.md"
|
||||
name: "Dr. Alexis, M.D."
|
||||
title: "CBT Coach"
|
||||
icon: "🧠"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
agent:
|
||||
metadata:
|
||||
id: "{bmad_folder}/mwm/agents/crisis-navigator.md"
|
||||
name: "Beacon"
|
||||
title: "Crisis Navigator"
|
||||
icon: "🆘"
|
||||
|
|
@ -95,7 +96,7 @@ agent:
|
|||
triggers:
|
||||
- trigger: party-mode
|
||||
input: SPM or fuzzy match start party mode
|
||||
route: "{project-root}/.bmad/core/workflows/edit-agent/workflow.md"
|
||||
route: "{project-root}/{bmad_folder}/core/workflows/edit-agent/workflow.md"
|
||||
data: crisis navigator agent discussion
|
||||
type: exec
|
||||
- trigger: expert-chat
|
||||
|
|
@ -117,7 +118,7 @@ agent:
|
|||
type: action
|
||||
|
||||
- trigger: "safety-plan"
|
||||
route: "{project-root}/.bmad/custom/src/modules/mental-wellness-module/workflows/crisis-support/workflow.md"
|
||||
route: "{project-root}/{bmad_folder}/custom/src/modules/mental-wellness-module/workflows/crisis-support/workflow.md"
|
||||
description: "Create safety plan 🛡️"
|
||||
type: workflow
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
agent:
|
||||
metadata:
|
||||
id: "{bmad_folder}/mwm/agents/meditation-guide.md"
|
||||
name: "Serenity"
|
||||
title: "Meditation Guide"
|
||||
icon: "🧘"
|
||||
|
|
@ -92,7 +93,7 @@ agent:
|
|||
triggers:
|
||||
- trigger: party-mode
|
||||
input: SPM or fuzzy match start party mode
|
||||
route: "{project-root}/.bmad/core/workflows/edit-agent/workflow.md"
|
||||
route: "{project-root}/{bmad_folder}/core/workflows/edit-agent/workflow.md"
|
||||
data: meditation guide agent discussion
|
||||
type: exec
|
||||
- trigger: expert-chat
|
||||
|
|
@ -104,7 +105,7 @@ agent:
|
|||
triggers:
|
||||
- trigger: guided-meditation
|
||||
input: GM or fuzzy match guided meditation
|
||||
route: "{project-root}/.bmad/custom/src/modules/mental-wellness-module/workflows/guided-meditation/workflow.md"
|
||||
route: "{project-root}/{bmad_folder}/custom/src/modules/mental-wellness-module/workflows/guided-meditation/workflow.md"
|
||||
description: "Full meditation session 🧘"
|
||||
type: workflow
|
||||
- trigger: body-scan
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
agent:
|
||||
metadata:
|
||||
id: "{bmad_folder}/mwm/agents/wellness-companion/wellness-companion.md"
|
||||
name: "Riley"
|
||||
title: "Wellness Companion"
|
||||
icon: "🌱"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
code: mwm
|
||||
name: "MWM: Mental Wellness Module"
|
||||
default_selected: false
|
||||
type: module
|
||||
|
||||
header: "MWM™: Custom Wellness Module"
|
||||
subheader: "Demo of Potential Non Coding Custom Module Use case"
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "bmad-method",
|
||||
"version": "6.0.0-alpha.14",
|
||||
"version": "6.0.0-alpha.15",
|
||||
"description": "Breakthrough Method of Agile AI-driven Development",
|
||||
"keywords": [
|
||||
"agile",
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ const chalk = require('chalk');
|
|||
*
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - The root directory of the target project
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
|
||||
* @param {Object} options.logger - Logger instance for output
|
||||
* @returns {Promise<boolean>} - Success status
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ const chalk = require('chalk');
|
|||
*
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - The root directory of the target project
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Object} options.coreConfig - Core configuration containing user_name
|
||||
* @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
|
||||
* @param {Object} options.logger - Logger instance for output
|
||||
|
|
|
|||
|
|
@ -113,10 +113,10 @@ For a [module type] module, we'll create this structure:"
|
|||
│ └── [template-files]
|
||||
├── data/ # Module data files
|
||||
│ └── [data-files]
|
||||
├── module.yaml # Required
|
||||
├── _module-installer/ # Installation configuration
|
||||
│ ├── install-config.yaml # Required
|
||||
│ ├── installer.js # Optional
|
||||
│ └── assets/ # Optional install assets
|
||||
│ ├── installer.js # Optional
|
||||
│ └── assets/ # Optional install assets
|
||||
└── README.md # Module documentation
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ Update module-plan.md with configuration section:
|
|||
|
||||
### Result Configuration Structure
|
||||
|
||||
The install-config.yaml will generate:
|
||||
The module.yaml will generate:
|
||||
- Module configuration at: {bmad_folder}/{module_code}/config.yaml
|
||||
- User settings stored as: [describe structure]
|
||||
````
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workf
|
|||
## EXECUTION PROTOCOLS:
|
||||
|
||||
- 🎯 Use configuration plan from step 5
|
||||
- 💾 Create install-config.yaml with all fields
|
||||
- 💾 Create module.yaml with all fields
|
||||
- 📖 Add "step-08-installer" to stepsCompleted array` before loading next step
|
||||
- 🚫 FORBIDDEN to load next step until user selects 'C'
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workf
|
|||
|
||||
## STEP GOAL:
|
||||
|
||||
To create the module installer configuration (install-config.yaml) that defines how users will install and configure the module.
|
||||
To create the module installer configuration (module.yaml) that defines how users will install and configure the module.
|
||||
|
||||
## INSTALLER SETUP PROCESS:
|
||||
|
||||
|
|
@ -74,11 +74,11 @@ From step 5, we planned these configuration fields:
|
|||
Ensure \_module-installer directory exists
|
||||
Directory: {custom_module_location}/{module_name}/\_module-installer/
|
||||
|
||||
### 3. Create install-config.yaml
|
||||
### 3. Create module.yaml
|
||||
|
||||
"I'll create the install-config.yaml file based on your configuration plan. This is the core installer configuration file."
|
||||
"I'll create the module.yaml file based on your configuration plan. This is the core installer configuration file."
|
||||
|
||||
Create file: {custom_module_location}/{module_name}/\_module-installer/install-config.yaml from template {installConfigTemplate}
|
||||
Create file: {custom_module_location}/{module_name}/module.yaml from template {installConfigTemplate}
|
||||
|
||||
### 4. Handle Custom Installation Logic
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ Update module-plan.md with installer section:
|
|||
|
||||
### Install Configuration
|
||||
|
||||
- File: \_module-installer/install-config.yaml
|
||||
- File: module.yaml
|
||||
- Module code: {module_name}
|
||||
- Default selected: false
|
||||
- Configuration fields: [count]
|
||||
|
|
@ -166,7 +166,7 @@ Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Conti
|
|||
|
||||
### ✅ SUCCESS:
|
||||
|
||||
- install-config.yaml created with all planned fields
|
||||
- module.yaml created with all planned fields
|
||||
- YAML syntax valid
|
||||
- Custom installation logic prepared (if needed)
|
||||
- Installer follows BMAD standards
|
||||
|
|
@ -174,7 +174,7 @@ Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Conti
|
|||
|
||||
### ❌ SYSTEM FAILURE:
|
||||
|
||||
- Not creating install-config.yaml
|
||||
- Not creating module.yaml
|
||||
- Invalid YAML syntax
|
||||
- Missing required fields
|
||||
- Not using proper path templates
|
||||
|
|
|
|||
|
|
@ -133,7 +133,8 @@ bmad install {module_name}
|
|||
├── tasks/ # Task files
|
||||
├── templates/ # Shared templates
|
||||
├── data/ # Module data
|
||||
├── _module-installer/ # Installation config
|
||||
├── _module-installer/ # Installation optional js file with custom install routine
|
||||
├── module.yaml # yaml config and install questions
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -207,9 +207,10 @@ workflow {workflow_name}
|
|||
├── workflows/ # ✅ Structure created, plans written
|
||||
├── tasks/ # ✅ Created
|
||||
├── templates/ # ✅ Created
|
||||
├── data/ # ✅ Created
|
||||
├── data/ # ✅ Created
|
||||
├── _module-installer/ # ✅ Configured
|
||||
└── README.md # ✅ Complete
|
||||
└── README.md # ✅ Complete
|
||||
└── module.yaml # ✅ Complete
|
||||
```
|
||||
|
||||
## Completion Criteria
|
||||
|
|
|
|||
|
|
@ -73,8 +73,8 @@ Expected Structure:
|
|||
├── templates/ [✅/❌]
|
||||
├── data/ [✅/❌]
|
||||
├── _module-installer/ [✅/❌]
|
||||
│ ├── install-config.yaml [✅/❌]
|
||||
│ └── installer.js [✅/N/A]
|
||||
│ └── installer.js [✅/N/A]
|
||||
├── module.yaml [✅/❌]
|
||||
└── README.md [✅/❌]
|
||||
```
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ Expected Structure:
|
|||
"**2. Configuration Files Check**"
|
||||
|
||||
**Install Configuration:**
|
||||
Validate install-config.yaml
|
||||
Validate module.yaml
|
||||
|
||||
- [ ] YAML syntax valid
|
||||
- [ ] Module code matches folder name
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/**
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - Project root directory
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Array} options.installedIDEs - List of IDE codes being configured
|
||||
* @param {Object} options.logger - Logger instance (log, warn, error methods)
|
||||
* @returns {boolean} - true if successful, false to abort installation
|
||||
|
|
|
|||
|
|
@ -13,15 +13,15 @@ This document provides the validation criteria used in step-11-validate.md to en
|
|||
- [ ] data/ - Module data
|
||||
- [ ] \_module-installer/ - Installation config
|
||||
- [ ] README.md - Module documentation
|
||||
- [ ] module.yaml - module config file
|
||||
|
||||
### Required Files in \_module-installer/
|
||||
### Optional File in \_module-installer/
|
||||
|
||||
- [ ] install-config.yaml - Installation configuration
|
||||
- [ ] installer.js - Custom logic (if needed)
|
||||
|
||||
## Configuration Validation
|
||||
|
||||
### install-config.yaml
|
||||
### module.yaml
|
||||
|
||||
- [ ] Valid YAML syntax
|
||||
- [ ] Module code matches folder name
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ After getting the workflow name:
|
|||
Based on the module selection, confirm the target location:
|
||||
|
||||
- For bmb module: `{custom_workflow_location}` (defaults to `{bmad_folder}/custom/src/workflows`)
|
||||
- For other modules: Check their install-config.yaml for custom workflow locations
|
||||
- For other modules: Check their module.yaml for custom workflow locations
|
||||
- Confirm the exact folder path where the workflow will be created
|
||||
- Store the confirmed path as `{targetWorkflowPath}`
|
||||
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ Create the workflow folder structure in the target location:
|
|||
```
|
||||
|
||||
For bmb module, this will be: `{bmad_folder}/custom/src/workflows/{workflow_name}/`
|
||||
For other modules, check their install-config.yaml for custom_workflow_location
|
||||
For other modules, check their module.yaml for custom_workflow_location
|
||||
|
||||
### 3. Generate workflow.md
|
||||
|
||||
|
|
|
|||
|
|
@ -129,8 +129,9 @@ bmgd/
|
|||
│ (Uses BMM workflows via cross-module references)
|
||||
├── templates/
|
||||
├── data/
|
||||
├── module.yaml
|
||||
└── _module-installer/
|
||||
└── install-config.yaml
|
||||
└── installer.js (optional)
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ const platformCodes = require(path.join(__dirname, '../../../../tools/cli/lib/pl
|
|||
*
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - The root directory of the target project
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
|
||||
* @param {Object} options.logger - Logger instance for output
|
||||
* @returns {Promise<boolean>} - Success status
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const chalk = require('chalk');
|
|||
*
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - The root directory of the target project
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Object} options.logger - Logger instance for output
|
||||
* @param {Object} options.platformInfo - Platform metadata from global config
|
||||
* @returns {Promise<boolean>} - Success status
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const chalk = require('chalk');
|
|||
*
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - The root directory of the target project
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Object} options.logger - Logger instance for output
|
||||
* @returns {Promise<boolean>} - Success status
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -377,12 +377,6 @@ Checks:
|
|||
|
||||
Quick Spec Flow works seamlessly with all Phase 4 implementation workflows:
|
||||
|
||||
### story-context (SM Agent)
|
||||
|
||||
- ✅ Recognizes tech-spec.md as authoritative source
|
||||
- ✅ Extracts context from tech-spec (replaces PRD)
|
||||
- ✅ Generates XML context for complex scenarios
|
||||
|
||||
### create-story (SM Agent)
|
||||
|
||||
- ✅ Can work with tech-spec.md instead of PRD
|
||||
|
|
@ -405,17 +399,17 @@ Quick Spec Flow works seamlessly with all Phase 4 implementation workflows:
|
|||
|
||||
## Comparison: Quick Spec vs Full BMM
|
||||
|
||||
| Aspect | Quick Flow Track | BMad Method/Enterprise Tracks |
|
||||
| --------------------- | ---------------------------- | ---------------------------------- |
|
||||
| **Setup** | None (standalone) | workflow-init recommended |
|
||||
| **Planning Docs** | tech-spec.md only | Product Brief → PRD → Architecture |
|
||||
| **Time to Code** | Minutes | Hours to days |
|
||||
| **Best For** | Bug fixes, small features | New products, major features |
|
||||
| **Context Discovery** | Automatic | Manual + guided |
|
||||
| **Story Context** | Optional (tech-spec is rich) | Required (generated from PRD) |
|
||||
| **Validation** | Auto-validates everything | Manual validation steps |
|
||||
| **Brownfield** | Auto-analyzes and conforms | Manual documentation required |
|
||||
| **Conventions** | Auto-detects and confirms | Document in PRD/Architecture |
|
||||
| Aspect | Quick Flow Track | BMad Method/Enterprise Tracks |
|
||||
| --------------------- | -------------------------- | ---------------------------------- |
|
||||
| **Setup** | None (standalone) | workflow-init recommended |
|
||||
| **Planning Docs** | tech-spec.md only | Product Brief → PRD → Architecture |
|
||||
| **Time to Code** | Minutes | Hours to days |
|
||||
| **Best For** | Bug fixes, small features | New products, major features |
|
||||
| **Context Discovery** | Automatic | Manual + guided |
|
||||
| **Story Context** | Included in create-story | Included in create-story |
|
||||
| **Validation** | Auto-validates everything | Manual validation steps |
|
||||
| **Brownfield** | Auto-analyzes and conforms | Manual documentation required |
|
||||
| **Conventions** | Auto-detects and confirms | Document in PRD/Architecture |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -529,10 +523,6 @@ Quick Spec Flow is **fully standalone**:
|
|||
|
||||
**A:** No problem! You can always transition to BMad Method by running workflow-init and create-prd. Your tech-spec becomes input for the PRD.
|
||||
|
||||
### Q: Do I need story-context for every story?
|
||||
|
||||
**A:** Usually no! Tech-spec is comprehensive enough for most Quick Flow projects. Only use story-context for complex edge cases.
|
||||
|
||||
### Q: Can I skip validation?
|
||||
|
||||
**A:** No, validation always runs automatically. But it's fast and catches issues early!
|
||||
|
|
@ -564,11 +554,7 @@ Starter templates save hours of setup time. Let Quick Spec Flow find the best on
|
|||
|
||||
When validation runs, read the scores. They tell you if your spec is production-ready.
|
||||
|
||||
### 5. **Story Context is Optional**
|
||||
|
||||
For single changes, try going directly to dev-story first. Only add story-context if you hit complexity.
|
||||
|
||||
### 6. **Keep Single Changes Truly Atomic**
|
||||
### 5. **Keep Single Changes Truly Atomic**
|
||||
|
||||
If your "single change" needs 3+ files, it might be a multi-story feature. Let the workflow guide you.
|
||||
|
||||
|
|
|
|||
|
|
@ -195,8 +195,8 @@ workflow-init asks: "Is this work in progress or previous effort?"
|
|||
1. Check spelling/format - Use exact workflow name or menu shortcut (`*prd` not `*PRD`)
|
||||
2. Verify agent has workflow:
|
||||
- PM agent: prd, tech-spec
|
||||
- Architect agent: create-architecture, validate-architecture
|
||||
- SM agent: sprint-planning, create-story, story-context
|
||||
- Architect agent: create-architecture, implementation-readiness
|
||||
- SM agent: sprint-planning, create-story
|
||||
3. Try menu number instead of name
|
||||
4. Check you're using correct agent for workflow
|
||||
|
||||
|
|
@ -219,23 +219,6 @@ workflow-init asks: "Is this work in progress or previous effort?"
|
|||
3. **Run in Phase 4 only** - Ensure Phase 2/3 complete first
|
||||
4. **Check file paths** - Epic files should be in correct output folder
|
||||
|
||||
### Problem: story-context generates empty or wrong context
|
||||
|
||||
**Symptoms:**
|
||||
|
||||
- Context file created but has no useful content
|
||||
- Context doesn't reference existing code
|
||||
- Missing technical guidance
|
||||
|
||||
**Solution:**
|
||||
|
||||
1. **Run epic-tech-context first** - story-context builds on epic context
|
||||
2. **Check story file exists** - Verify story was created by create-story
|
||||
3. **For brownfield**:
|
||||
- Ensure document-project was run
|
||||
- Verify docs/index.md exists with codebase context
|
||||
4. **Try regenerating** - Sometimes needs fresh attempt with more specific story details
|
||||
|
||||
---
|
||||
|
||||
## Context and Documentation Issues
|
||||
|
|
@ -362,7 +345,7 @@ For most brownfield projects, **Deep scan is sufficient**.
|
|||
1. **For brownfield**:
|
||||
- Ensure document-project captured existing architecture
|
||||
- Review architecture docs before implementing
|
||||
2. **Check story-context** - Should document integration points
|
||||
2. **Check story files created by create-story** - Should include integration context
|
||||
3. **In tech-spec/architecture** - Explicitly document:
|
||||
- Which existing modules to modify
|
||||
- What APIs/services to integrate with
|
||||
|
|
@ -384,7 +367,7 @@ For most brownfield projects, **Deep scan is sufficient**.
|
|||
- Should detect existing patterns
|
||||
- Asks for confirmation before proceeding
|
||||
2. **Review documentation** - Ensure document-project captured patterns
|
||||
3. **Use story-context** - Injects pattern guidance per story
|
||||
3. **Use create-story workflow** - It loads context from existing documentation
|
||||
4. **Add to code-review checklist**:
|
||||
- Pattern adherence
|
||||
- Convention consistency
|
||||
|
|
@ -460,8 +443,7 @@ To change locations, edit config.yaml then re-run workflows.
|
|||
2. **Some workflows auto-update**:
|
||||
- sprint-planning creates file
|
||||
- epic-tech-context changes epic to "contexted"
|
||||
- create-story changes story to "drafted"
|
||||
- story-context changes to "ready-for-dev"
|
||||
- create-story changes story to "drafted" then "ready-for-dev"
|
||||
- dev-story may auto-update (check workflow)
|
||||
3. **Re-run sprint-planning** to resync if needed
|
||||
|
||||
|
|
@ -545,8 +527,8 @@ To change locations, edit config.yaml then re-run workflows.
|
|||
- Read docs/architecture.md (from document-project)
|
||||
- Understand current system design
|
||||
3. **For Level 3-4**:
|
||||
- Run validate-architecture workflow before planning
|
||||
- Use integration-planning workflow
|
||||
- Run implementation-readiness workflow before implementation
|
||||
- Use create-architecture workflow for integration planning
|
||||
4. **Explicitly document integration strategy** in architecture:
|
||||
- How new components fit existing structure
|
||||
- What modifications needed to existing code
|
||||
|
|
|
|||
|
|
@ -154,10 +154,9 @@ Dependencies: Story 1.2 (DONE) ✅
|
|||
**Recommendation:** Run `create-story` to generate Story 1.3
|
||||
|
||||
After create-story:
|
||||
1. Run story-context
|
||||
2. Run dev-story
|
||||
3. Run code-review
|
||||
4. Run story-done
|
||||
1. Run dev-story
|
||||
2. Run code-review
|
||||
3. Run story-done
|
||||
```
|
||||
|
||||
See: [workflow-status instructions](../workflows/workflow-status/instructions.md)
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@
|
|||
<i>Primary: Sarah (PO), Bob (SM), James (Dev)</i>
|
||||
<i>Secondary: Murat (TEA)</i>
|
||||
</context>
|
||||
<context type="validate-architecture">
|
||||
<context type="implementation-readiness">
|
||||
<i>Primary: Winston (Architect), James (Dev), Murat (TEA)</i>
|
||||
<i>Secondary: Sarah (PO)</i>
|
||||
</context>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,10 @@
|
|||
---
|
||||
stepsCompleted: []
|
||||
inputDocuments: []
|
||||
workflowType: 'product-brief'
|
||||
lastStep: 0
|
||||
---
|
||||
|
||||
# Product Brief: {{project_name}}
|
||||
|
||||
**Date:** {{date}}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ Initialize the product brief workflow by detecting continuation state and settin
|
|||
|
||||
- 🎯 Show your analysis of current state before taking any action
|
||||
- 💾 Initialize document structure and update frontmatter appropriately
|
||||
- 📖 Set up frontmatter `stepsCompleted: [1]` before loading next step
|
||||
- 📖 Set up frontmatter `stepsCompleted: [1]` and `lastStep: 1` before loading next step
|
||||
- 🚫 FORBIDDEN to load next step until user selects 'C' (Continue)
|
||||
|
||||
## CONTEXT BOUNDARIES:
|
||||
|
|
|
|||
|
|
@ -104,7 +104,8 @@ Based on `lastStep` value, determine which step to load next:
|
|||
- If `lastStep = 1` → Load `./step-02-vision.md`
|
||||
- If `lastStep = 2` → Load `./step-03-users.md`
|
||||
- If `lastStep = 3` → Load `./step-04-metrics.md`
|
||||
- Continue this pattern for all steps
|
||||
- If `lastStep = 4` → Load `./step-05-scope.md`
|
||||
- If `lastStep = 5` → Load `./step-06-complete.md`
|
||||
- If `lastStep = 6` → Workflow already complete
|
||||
|
||||
### 5. Handle Workflow Completion
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ Prepare the following structure for document append:
|
|||
|
||||
- IF A: Execute {advancedElicitationTask} with current vision content to dive deeper and refine
|
||||
- IF P: Execute {partyModeWorkflow} to bring different perspectives to positioning and differentiation
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2], then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2] and lastStep: 2, then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#7-present-menu-options)
|
||||
|
||||
#### EXECUTION RULES:
|
||||
|
|
@ -188,7 +188,7 @@ ONLY WHEN [C continue option] is selected and [vision content finalized and save
|
|||
- Executive summary that captures the product essence
|
||||
- A/P/C menu presented and handled correctly with proper task execution
|
||||
- Content properly appended to document when C selected
|
||||
- Frontmatter updated with stepsCompleted: [1, 2]
|
||||
- Frontmatter updated with stepsCompleted: [1, 2] and lastStep: 2
|
||||
|
||||
### ❌ SYSTEM FAILURE:
|
||||
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ Prepare the following structure for document append:
|
|||
|
||||
- IF A: Execute {advancedElicitationTask} with current user content to dive deeper into personas and journeys
|
||||
- IF P: Execute {partyModeWorkflow} to bring different perspectives to validate user understanding
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2, 3], then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2, 3] and lastStep: 3, then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#6-present-menu-options)
|
||||
|
||||
#### EXECUTION RULES:
|
||||
|
|
@ -191,7 +191,7 @@ ONLY WHEN [C continue option] is selected and [user personas finalized and saved
|
|||
- User segments that align with product vision and problem statement
|
||||
- A/P/C menu presented and handled correctly with proper task execution
|
||||
- Content properly appended to document when C selected
|
||||
- Frontmatter updated with stepsCompleted: [1, 2, 3]
|
||||
- Frontmatter updated with stepsCompleted: [1, 2, 3] and lastStep: 3
|
||||
|
||||
### ❌ SYSTEM FAILURE:
|
||||
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ Prepare the following structure for document append:
|
|||
|
||||
- IF A: Execute {advancedElicitationTask} with current metrics content to dive deeper into success metric insights
|
||||
- IF P: Execute {partyModeWorkflow} to bring different perspectives to validate comprehensive metrics
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2, 3, 4], then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2, 3, 4] and lastStep: 4, then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#7-present-menu-options)
|
||||
|
||||
#### EXECUTION RULES:
|
||||
|
|
@ -194,7 +194,7 @@ ONLY WHEN [C continue option] is selected and [success metrics finalized and sav
|
|||
- Metrics that connect user value to business success
|
||||
- A/P/C menu presented and handled correctly with proper task execution
|
||||
- Content properly appended to document when C selected
|
||||
- Frontmatter updated with stepsCompleted: [1, 2, 3, 4]
|
||||
- Frontmatter updated with stepsCompleted: [1, 2, 3, 4] and lastStep: 4
|
||||
|
||||
### ❌ SYSTEM FAILURE:
|
||||
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ Prepare the following structure for document append:
|
|||
|
||||
- IF A: Execute {advancedElicitationTask} with current scope content to optimize scope definition
|
||||
- IF P: Execute {partyModeWorkflow} to bring different perspectives to validate MVP scope
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2, 3, 4, 5], then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF C: Save content to {outputFile}, update frontmatter with stepsCompleted: [1, 2, 3, 4, 5] and lastStep: 5, then only then load, read entire file, then execute {nextStepFile}
|
||||
- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#7-present-menu-options)
|
||||
|
||||
#### EXECUTION RULES:
|
||||
|
|
@ -208,7 +208,7 @@ ONLY WHEN [C continue option] is selected and [MVP scope finalized and saved to
|
|||
- Future vision that inspires while maintaining focus on MVP
|
||||
- A/P/C menu presented and handled correctly with proper task execution
|
||||
- Content properly appended to document when C selected
|
||||
- Frontmatter updated with stepsCompleted: [1, 2, 3, 4, 5]
|
||||
- Frontmatter updated with stepsCompleted: [1, 2, 3, 4, 5] and lastStep: 5
|
||||
|
||||
### ❌ SYSTEM FAILURE:
|
||||
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ Update the main workflow status file:
|
|||
- Check if `{output_folder}/bmm-workflow-status.yaml` exists
|
||||
- If not, create it with basic structure
|
||||
- Update workflow_status["product-brief"] = `{outputFile}`
|
||||
- Update output document frontmatter: `lastStep: 6`
|
||||
- Add completion timestamp and metadata
|
||||
- Save file, preserving all comments and structure
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
- 🎯 Show your analysis before taking any action
|
||||
- 💾 Initialize document and update frontmatter
|
||||
- 📖 Set up frontmatter `stepsCompleted: [1]` before loading next step
|
||||
- 📖 Set up frontmatter `stepsCompleted: [1]` and `lastStep: 1` before loading next step
|
||||
- 🚫 FORBIDDEN to load next step until setup is complete
|
||||
|
||||
## CONTEXT BOUNDARIES:
|
||||
|
|
|
|||
|
|
@ -74,8 +74,17 @@ Based on `lastStep` value, determine which step to load next:
|
|||
- If `lastStep = 1` → Load `./step-02-discovery.md`
|
||||
- If `lastStep = 2` → Load `./step-03-core-experience.md`
|
||||
- If `lastStep = 3` → Load `./step-04-emotional-response.md`
|
||||
- Continue this pattern for all steps
|
||||
- If `lastStep` indicates final step → Workflow already complete
|
||||
- If `lastStep = 4` → Load `./step-05-inspiration.md`
|
||||
- If `lastStep = 5` → Load `./step-06-design-system.md`
|
||||
- If `lastStep = 6` → Load `./step-07-defining-experience.md`
|
||||
- If `lastStep = 7` → Load `./step-08-visual-foundation.md`
|
||||
- If `lastStep = 8` → Load `./step-09-design-directions.md`
|
||||
- If `lastStep = 9` → Load `./step-10-user-journeys.md`
|
||||
- If `lastStep = 10` → Load `./step-11-component-strategy.md`
|
||||
- If `lastStep = 11` → Load `./step-12-ux-patterns.md`
|
||||
- If `lastStep = 12` → Load `./step-13-responsive-accessibility.md`
|
||||
- If `lastStep = 13` → Load `./step-14-complete.md`
|
||||
- If `lastStep = 14` → Workflow already complete
|
||||
|
||||
### 5. Present Continuation Options
|
||||
|
||||
|
|
|
|||
|
|
@ -172,6 +172,7 @@ Show the generated project understanding content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2]`
|
||||
- Update frontmatter: `lastStep: 2`
|
||||
- Load `./step-03-core-experience.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ Show the generated core experience content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3]`
|
||||
- Update frontmatter: `lastStep: 3`
|
||||
- Load `./step-04-emotional-response.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -181,6 +181,7 @@ Show the generated emotional response content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4]`
|
||||
- Update frontmatter: `lastStep: 4`
|
||||
- Load `./step-05-inspiration.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ Show the generated inspiration analysis content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]`
|
||||
- Update frontmatter: `lastStep: 5`
|
||||
- Load `./step-06-design-system.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -214,6 +214,7 @@ Show the generated design system content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6]`
|
||||
- Update frontmatter: `lastStep: 6`
|
||||
- Load `./step-07-defining-experience.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -216,6 +216,7 @@ Show the generated defining experience content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7]`
|
||||
- Update frontmatter: `lastStep: 7`
|
||||
- Load `./step-08-visual-foundation.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -186,6 +186,7 @@ Show the generated visual foundation content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8]`
|
||||
- Update frontmatter: `lastStep: 8`
|
||||
- Load `./step-09-design-directions.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -186,6 +186,7 @@ Show the generated design direction content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9]`
|
||||
- Update frontmatter: `lastStep: 9`
|
||||
- Load `./step-10-user-journeys.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ Show the generated user journey content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`
|
||||
- Update frontmatter: `lastStep: 10`
|
||||
- Load `./step-11-component-strategy.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ Show the generated component strategy content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]`
|
||||
- Update frontmatter: `lastStep: 11`
|
||||
- Load `./step-12-ux-patterns.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ Show the generated UX patterns content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]`
|
||||
- Update frontmatter: `lastStep: 12`
|
||||
- Load `./step-13-responsive-accessibility.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -226,6 +226,7 @@ Show the generated responsive and accessibility content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/ux-design-specification.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]`
|
||||
- Update frontmatter: `lastStep: 13`
|
||||
- Load `./step-14-complete.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
---
|
||||
stepsCompleted: []
|
||||
inputDocuments: []
|
||||
workflowType: 'ux-design'
|
||||
lastStep: 0
|
||||
---
|
||||
|
||||
# UX Design Specification {{project_name}}
|
||||
|
|
|
|||
|
|
@ -156,10 +156,10 @@ projectDocsCount = 0
|
|||
stepsCompleted: []
|
||||
inputDocuments: []
|
||||
documentCounts:
|
||||
briefs: { { briefCount } }
|
||||
research: { { researchCount } }
|
||||
brainstorming: { { brainstormingCount } }
|
||||
projectDocs: { { projectDocsCount } }
|
||||
briefs: '{{briefCount}}'
|
||||
research: '{{researchCount}}'
|
||||
brainstorming: '{{brainstormingCount}}'
|
||||
projectDocs: '{{projectDocsCount}}'
|
||||
workflowType: 'prd'
|
||||
lastStep: 0
|
||||
project_name: '{{project_name}}'
|
||||
|
|
@ -202,7 +202,7 @@ Display menu after setup report:
|
|||
|
||||
#### Menu Handling Logic:
|
||||
|
||||
- IF C: Update frontmatter with `stepsCompleted: [1]`, then load, read entire file, then execute {nextStepFile}
|
||||
- IF C: Update frontmatter with `stepsCompleted: [1]` and `lastStep: 1`, then load, read entire file, then execute {nextStepFile}
|
||||
- IF user provides additional files: Load them, update inputDocuments and documentCounts, redisplay report
|
||||
- IF user asks questions: Answer and redisplay menu
|
||||
|
||||
|
|
|
|||
|
|
@ -374,6 +374,7 @@ Show the generated content to the user and present:
|
|||
|
||||
- Append the final content to `{outputFile}`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2]`
|
||||
- Update frontmatter: `lastStep: 2`
|
||||
- Load `{nextStepFile}`
|
||||
|
||||
## CRITICAL STEP COMPLETION NOTE
|
||||
|
|
|
|||
|
|
@ -246,6 +246,7 @@ Show the generated content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3]`
|
||||
- Update frontmatter: `lastStep: 3`
|
||||
- Load `./step-04-journeys.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -240,6 +240,7 @@ Show the generated journey content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4]`
|
||||
- Update frontmatter: `lastStep: 4`
|
||||
- Load `{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md` (or determine if step is optional based on domain complexity)
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -225,6 +225,7 @@ Show the generated domain content and present choices:
|
|||
|
||||
- Append the content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5]`
|
||||
- Update frontmatter: `lastStep: 5`
|
||||
- Load `{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ Show the generated innovation content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6]`
|
||||
- Update frontmatter: `lastStep: 6`
|
||||
- Load `{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md`
|
||||
|
||||
## NO INNOVATION DETECTED:
|
||||
|
|
|
|||
|
|
@ -200,6 +200,7 @@ Show the generated project-type content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7]`
|
||||
- Update frontmatter: `lastStep: 7`
|
||||
- Load `{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -261,6 +261,7 @@ Show the scoping decisions and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8]`
|
||||
- Update frontmatter: `lastStep: 8`
|
||||
- Load `./step-09-functional.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workf
|
|||
- 🎯 Show your analysis before taking any action
|
||||
- ⚠️ Present A/P/C menu after generating functional requirements
|
||||
- 💾 ONLY save when user chooses C (Continue)
|
||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8]` before loading next step
|
||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9]` before loading next step
|
||||
- 🚫 FORBIDDEN to load next step until C is selected
|
||||
|
||||
## COLLABORATION MENUS (A/P/C):
|
||||
|
|
@ -227,6 +227,7 @@ Show the generated functional requirements and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9]`
|
||||
- Update frontmatter: `lastStep: 9`
|
||||
- Load `{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ partyModeWorkflow: '{project-root}/{bmad_folder}/core/workflows/party-mode/workf
|
|||
- 🎯 Show your analysis before taking any action
|
||||
- ⚠️ Present A/P/C menu after generating NFR content
|
||||
- 💾 ONLY save when user chooses C (Continue)
|
||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9]` before loading next step
|
||||
- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` before loading next step
|
||||
- 🚫 FORBIDDEN to load next step until C is selected
|
||||
|
||||
## COLLABORATION MENUS (A/P/C):
|
||||
|
|
@ -227,6 +227,7 @@ Show the generated NFR content and present choices:
|
|||
|
||||
- Append the final content to `{output_folder}/prd.md`
|
||||
- Update frontmatter: `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`
|
||||
- Update frontmatter: `lastStep: 10`
|
||||
- Load `{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md`
|
||||
|
||||
## APPEND TO DOCUMENT:
|
||||
|
|
|
|||
|
|
@ -100,11 +100,6 @@ phases:
|
|||
# output: "DevOps strategy for brownfield deployment"
|
||||
# note: "Future workflow - optional extended enterprise workflow for CI/CD integration, deployment strategy, monitoring"
|
||||
|
||||
- id: "validate-architecture"
|
||||
recommended: true
|
||||
agent: "architect"
|
||||
command: "validate-architecture"
|
||||
|
||||
- id: "implementation-readiness"
|
||||
required: true
|
||||
agent: "architect"
|
||||
|
|
|
|||
|
|
@ -82,11 +82,6 @@ phases:
|
|||
# output: "DevOps pipeline and infrastructure plan"
|
||||
# note: "Future workflow - optional extended enterprise workflow for CI/CD, deployment, monitoring"
|
||||
|
||||
- id: "validate-architecture"
|
||||
recommended: true
|
||||
agent: "architect"
|
||||
command: "validate-architecture"
|
||||
|
||||
- id: "create-epics-and-stories"
|
||||
required: true
|
||||
agent: "pm"
|
||||
|
|
|
|||
|
|
@ -84,11 +84,6 @@ phases:
|
|||
output: "System-level testability review"
|
||||
note: "Testability assessment before gate check - auto-detects system-level mode"
|
||||
|
||||
- id: "validate-architecture"
|
||||
optional: true
|
||||
agent: "architect"
|
||||
command: "validate-architecture"
|
||||
|
||||
- id: "implementation-readiness"
|
||||
required: true
|
||||
agent: "architect"
|
||||
|
|
|
|||
|
|
@ -73,12 +73,6 @@ phases:
|
|||
output: "System-level testability review"
|
||||
note: "Testability assessment before gate check - auto-detects system-level mode"
|
||||
|
||||
- id: "validate-architecture"
|
||||
optional: true
|
||||
agent: "architect"
|
||||
command: "validate-architecture"
|
||||
note: "Quality check for architecture completeness"
|
||||
|
||||
- id: "implementation-readiness"
|
||||
required: true
|
||||
agent: "architect"
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ const chalk = require('chalk');
|
|||
*
|
||||
* @param {Object} options - Installation options
|
||||
* @param {string} options.projectRoot - The root directory of the target project
|
||||
* @param {Object} options.config - Module configuration from install-config.yaml
|
||||
* @param {Object} options.config - Module configuration from module.yaml
|
||||
* @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
|
||||
* @param {Object} options.logger - Logger instance for output
|
||||
* @returns {Promise<boolean>} - Success status
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ The installer is a multi-stage system that handles agent compilation, IDE integr
|
|||
```
|
||||
1. Collect User Input
|
||||
- Target directory, modules, IDEs
|
||||
- Custom module configuration (via install-config.yaml)
|
||||
- Custom module configuration (via module.yaml)
|
||||
|
||||
2. Pre-Installation
|
||||
- Validate target, check conflicts, backup existing installations
|
||||
|
|
@ -183,12 +183,12 @@ The installer supports **15 IDE environments** through a base-derived architectu
|
|||
|
||||
### Custom Module Configuration
|
||||
|
||||
Modules define interactive configuration menus via `install-config.yaml` files in their `_module-installer/` directories.
|
||||
Modules define interactive configuration menus via `module.yaml` files in their `_module-installer/` directories.
|
||||
|
||||
**Config File Location**:
|
||||
|
||||
- Core: `src/core/_module-installer/install-config.yaml`
|
||||
- Modules: `src/modules/{module}/_module-installer/install-config.yaml`
|
||||
- Core: `src/core/module.yaml`
|
||||
- Modules: `src/modules/{module}/module.yaml`
|
||||
|
||||
**Configuration Types**:
|
||||
|
||||
|
|
|
|||
|
|
@ -183,24 +183,28 @@ class ConfigCollector {
|
|||
|
||||
// Load module's install config schema
|
||||
// First, try the standard src/modules location
|
||||
let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
|
||||
let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'module.yaml');
|
||||
let moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
|
||||
|
||||
// If not found in src/modules, we need to find it by searching the project
|
||||
if (!(await fs.pathExists(installerConfigPath))) {
|
||||
if (!(await fs.pathExists(installerConfigPath)) && !(await fs.pathExists(moduleConfigPath))) {
|
||||
// Use the module manager to find the module source
|
||||
const { ModuleManager } = require('../modules/manager');
|
||||
const moduleManager = new ModuleManager();
|
||||
const moduleSourcePath = await moduleManager.findModuleSource(moduleName);
|
||||
|
||||
if (moduleSourcePath) {
|
||||
installerConfigPath = path.join(moduleSourcePath, '_module-installer', 'install-config.yaml');
|
||||
installerConfigPath = path.join(moduleSourcePath, '_module-installer', 'module.yaml');
|
||||
moduleConfigPath = path.join(moduleSourcePath, 'module.yaml');
|
||||
}
|
||||
}
|
||||
|
||||
let configPath = null;
|
||||
let isCustomModule = false;
|
||||
|
||||
if (await fs.pathExists(installerConfigPath)) {
|
||||
if (await fs.pathExists(moduleConfigPath)) {
|
||||
configPath = moduleConfigPath;
|
||||
} else if (await fs.pathExists(installerConfigPath)) {
|
||||
configPath = installerConfigPath;
|
||||
} else {
|
||||
// Check if this is a custom module with custom.yaml
|
||||
|
|
@ -448,22 +452,26 @@ class ConfigCollector {
|
|||
}
|
||||
// Load module's config
|
||||
// First, try the standard src/modules location
|
||||
let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
|
||||
let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'module.yaml');
|
||||
let moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
|
||||
|
||||
// If not found in src/modules, we need to find it by searching the project
|
||||
if (!(await fs.pathExists(installerConfigPath))) {
|
||||
if (!(await fs.pathExists(installerConfigPath)) && !(await fs.pathExists(moduleConfigPath))) {
|
||||
// Use the module manager to find the module source
|
||||
const { ModuleManager } = require('../modules/manager');
|
||||
const moduleManager = new ModuleManager();
|
||||
const moduleSourcePath = await moduleManager.findModuleSource(moduleName);
|
||||
|
||||
if (moduleSourcePath) {
|
||||
installerConfigPath = path.join(moduleSourcePath, '_module-installer', 'install-config.yaml');
|
||||
installerConfigPath = path.join(moduleSourcePath, '_module-installer', 'module.yaml');
|
||||
moduleConfigPath = path.join(moduleSourcePath, 'module.yaml');
|
||||
}
|
||||
}
|
||||
|
||||
let configPath = null;
|
||||
if (await fs.pathExists(installerConfigPath)) {
|
||||
if (await fs.pathExists(moduleConfigPath)) {
|
||||
configPath = moduleConfigPath;
|
||||
} else if (await fs.pathExists(installerConfigPath)) {
|
||||
configPath = installerConfigPath;
|
||||
} else {
|
||||
// No config for this module
|
||||
|
|
|
|||
|
|
@ -0,0 +1,239 @@
|
|||
/**
|
||||
* Custom Module Source Cache
|
||||
* Caches custom module sources under _cfg/custom/ to ensure they're never lost
|
||||
* and can be checked into source control
|
||||
*/
|
||||
|
||||
const fs = require('fs-extra');
|
||||
const path = require('node:path');
|
||||
const crypto = require('node:crypto');
|
||||
|
||||
class CustomModuleCache {
|
||||
constructor(bmadDir) {
|
||||
this.bmadDir = bmadDir;
|
||||
this.customCacheDir = path.join(bmadDir, '_cfg', 'custom');
|
||||
this.manifestPath = path.join(this.customCacheDir, 'cache-manifest.yaml');
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the custom cache directory exists
|
||||
*/
|
||||
async ensureCacheDir() {
|
||||
await fs.ensureDir(this.customCacheDir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cache manifest
|
||||
*/
|
||||
async getCacheManifest() {
|
||||
if (!(await fs.pathExists(this.manifestPath))) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const content = await fs.readFile(this.manifestPath, 'utf8');
|
||||
const yaml = require('js-yaml');
|
||||
return yaml.load(content) || {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Update cache manifest
|
||||
*/
|
||||
async updateCacheManifest(manifest) {
|
||||
const yaml = require('js-yaml');
|
||||
const content = yaml.dump(manifest, {
|
||||
indent: 2,
|
||||
lineWidth: -1,
|
||||
noRefs: true,
|
||||
sortKeys: false,
|
||||
});
|
||||
|
||||
await fs.writeFile(this.manifestPath, content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate hash of a file or directory
|
||||
*/
|
||||
async calculateHash(sourcePath) {
|
||||
const hash = crypto.createHash('sha256');
|
||||
|
||||
const isDir = (await fs.stat(sourcePath)).isDirectory();
|
||||
|
||||
if (isDir) {
|
||||
// For directories, hash all files
|
||||
const files = [];
|
||||
async function collectFiles(dir) {
|
||||
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
for (const entry of entries) {
|
||||
if (entry.isFile()) {
|
||||
files.push(path.join(dir, entry.name));
|
||||
} else if (entry.isDirectory() && !entry.name.startsWith('.')) {
|
||||
await collectFiles(path.join(dir, entry.name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await collectFiles(sourcePath);
|
||||
files.sort(); // Ensure consistent order
|
||||
|
||||
for (const file of files) {
|
||||
const content = await fs.readFile(file);
|
||||
const relativePath = path.relative(sourcePath, file);
|
||||
hash.update(relativePath + '|' + content.toString('base64'));
|
||||
}
|
||||
} else {
|
||||
// For single files
|
||||
const content = await fs.readFile(sourcePath);
|
||||
hash.update(content);
|
||||
}
|
||||
|
||||
return hash.digest('hex');
|
||||
}
|
||||
|
||||
/**
|
||||
* Cache a custom module source
|
||||
* @param {string} moduleId - Module ID
|
||||
* @param {string} sourcePath - Original source path
|
||||
* @param {Object} metadata - Additional metadata to store
|
||||
* @returns {Object} Cached module info
|
||||
*/
|
||||
async cacheModule(moduleId, sourcePath, metadata = {}) {
|
||||
await this.ensureCacheDir();
|
||||
|
||||
const cacheDir = path.join(this.customCacheDir, moduleId);
|
||||
const cacheManifest = await this.getCacheManifest();
|
||||
|
||||
// Check if already cached and unchanged
|
||||
if (cacheManifest[moduleId]) {
|
||||
const cached = cacheManifest[moduleId];
|
||||
if (cached.originalHash && cached.originalHash === (await this.calculateHash(sourcePath))) {
|
||||
// Source unchanged, return existing cache info
|
||||
return {
|
||||
moduleId,
|
||||
cachePath: cacheDir,
|
||||
...cached,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Remove existing cache if it exists
|
||||
if (await fs.pathExists(cacheDir)) {
|
||||
await fs.remove(cacheDir);
|
||||
}
|
||||
|
||||
// Copy module to cache
|
||||
await fs.copy(sourcePath, cacheDir, {
|
||||
filter: (src) => {
|
||||
const relative = path.relative(sourcePath, src);
|
||||
// Skip node_modules, .git, and other common ignore patterns
|
||||
return !relative.includes('node_modules') && !relative.startsWith('.git') && !relative.startsWith('.DS_Store');
|
||||
},
|
||||
});
|
||||
|
||||
// Calculate hash of the source
|
||||
const sourceHash = await this.calculateHash(sourcePath);
|
||||
const cacheHash = await this.calculateHash(cacheDir);
|
||||
|
||||
// Update manifest - don't store originalPath for source control friendliness
|
||||
cacheManifest[moduleId] = {
|
||||
originalHash: sourceHash,
|
||||
cacheHash: cacheHash,
|
||||
cachedAt: new Date().toISOString(),
|
||||
...metadata,
|
||||
};
|
||||
|
||||
await this.updateCacheManifest(cacheManifest);
|
||||
|
||||
return {
|
||||
moduleId,
|
||||
cachePath: cacheDir,
|
||||
...cacheManifest[moduleId],
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cached module info
|
||||
* @param {string} moduleId - Module ID
|
||||
* @returns {Object|null} Cached module info or null
|
||||
*/
|
||||
async getCachedModule(moduleId) {
|
||||
const cacheManifest = await this.getCacheManifest();
|
||||
const cached = cacheManifest[moduleId];
|
||||
|
||||
if (!cached) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const cacheDir = path.join(this.customCacheDir, moduleId);
|
||||
|
||||
if (!(await fs.pathExists(cacheDir))) {
|
||||
// Cache dir missing, remove from manifest
|
||||
delete cacheManifest[moduleId];
|
||||
await this.updateCacheManifest(cacheManifest);
|
||||
return null;
|
||||
}
|
||||
|
||||
// Verify cache integrity
|
||||
const currentCacheHash = await this.calculateHash(cacheDir);
|
||||
if (currentCacheHash !== cached.cacheHash) {
|
||||
console.warn(`Warning: Cache integrity check failed for ${moduleId}`);
|
||||
}
|
||||
|
||||
return {
|
||||
moduleId,
|
||||
cachePath: cacheDir,
|
||||
...cached,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all cached modules
|
||||
* @returns {Array} Array of cached module info
|
||||
*/
|
||||
async getAllCachedModules() {
|
||||
const cacheManifest = await this.getCacheManifest();
|
||||
const cached = [];
|
||||
|
||||
for (const [moduleId, info] of Object.entries(cacheManifest)) {
|
||||
const cachedModule = await this.getCachedModule(moduleId);
|
||||
if (cachedModule) {
|
||||
cached.push(cachedModule);
|
||||
}
|
||||
}
|
||||
|
||||
return cached;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a cached module
|
||||
* @param {string} moduleId - Module ID to remove
|
||||
*/
|
||||
async removeCachedModule(moduleId) {
|
||||
const cacheManifest = await this.getCacheManifest();
|
||||
const cacheDir = path.join(this.customCacheDir, moduleId);
|
||||
|
||||
// Remove cache directory
|
||||
if (await fs.pathExists(cacheDir)) {
|
||||
await fs.remove(cacheDir);
|
||||
}
|
||||
|
||||
// Remove from manifest
|
||||
delete cacheManifest[moduleId];
|
||||
await this.updateCacheManifest(cacheManifest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync cached modules with a list of module IDs
|
||||
* @param {Array<string>} moduleIds - Module IDs to keep
|
||||
*/
|
||||
async syncCache(moduleIds) {
|
||||
const cached = await this.getAllCachedModules();
|
||||
|
||||
for (const cachedModule of cached) {
|
||||
if (!moduleIds.includes(cachedModule.moduleId)) {
|
||||
await this.removeCachedModule(cachedModule.moduleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { CustomModuleCache };
|
||||
|
|
@ -17,6 +17,7 @@ class Detector {
|
|||
hasCore: false,
|
||||
modules: [],
|
||||
ides: [],
|
||||
customModules: [],
|
||||
manifest: null,
|
||||
};
|
||||
|
||||
|
|
@ -32,6 +33,10 @@ class Detector {
|
|||
result.manifest = manifestData;
|
||||
result.version = manifestData.version;
|
||||
result.installed = true;
|
||||
// Copy custom modules if they exist
|
||||
if (manifestData.customModules) {
|
||||
result.customModules = manifestData.customModules;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for core
|
||||
|
|
@ -275,10 +280,9 @@ class Detector {
|
|||
hasV6Installation = true;
|
||||
// Don't break - continue scanning to be thorough
|
||||
} else {
|
||||
// Not V6+, check if folder name contains "bmad" (case insensitive)
|
||||
const nameLower = name.toLowerCase();
|
||||
if (nameLower.includes('bmad')) {
|
||||
// Potential V4 legacy folder
|
||||
// Not V6+, check if this is the exact V4 folder name "bmad-method"
|
||||
if (name === 'bmad-method') {
|
||||
// This is the V4 default folder - flag it as legacy
|
||||
potentialV4Folders.push(fullPath);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue