From 677a00280b42651719296227bcefc526e7fc5a56 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 9 Jan 2026 03:39:32 -0500 Subject: [PATCH 01/22] feat: refactor Cursor IDE setup to do command generation and cleanup instead of rules (#1283) * feat: refactor Cursor IDE setup to do command generation and cleanup instead of rules - Added support for command generation in the Cursor IDE setup, including the creation of a new commands directory. - Implemented cleanup for old BMAD commands alongside existing rules. - Integrated TaskToolCommandGenerator for generating task and tool commands. - Updated logging to reflect the number of agents, tasks, tools, and workflow commands generated during setup. * style: adjust constructor formatting and update command path in Cursor IDE setup - Reformatted the constructor method for consistency. - Updated the command path syntax in the Cursor IDE setup to use a more standard format. * fix: update Cursor command paths in documentation - Changed the command path for Cursor IDE setup from `.cursor/rules/bmad/` to `.cursor/commands/bmad/` in both installers.md and modules.md. - Updated file extension references to use `.md` instead of `.mdc` for consistency. --- .../toolsmith-sidecar/knowledge/installers.md | 2 +- .../toolsmith-sidecar/knowledge/modules.md | 2 +- tools/cli/installers/lib/ide/cursor.js | 363 +++--------------- 3 files changed, 60 insertions(+), 307 deletions(-) diff --git a/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md b/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md index b6f8be22..d3bb907f 100644 --- a/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +++ b/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md @@ -61,7 +61,7 @@ | -------------- | -------------- | ------------------------- | ----------------------------- | | claude-code | Claude Code | .claude/commands/ | .md with frontmatter | | codex | Codex | (varies) | .md | -| cursor | Cursor | .cursor/rules/bmad/ | .mdc with MDC frontmatter | +| cursor | Cursor | .cursor/commands/bmad/ | .md with YAML frontmatter | | github-copilot | GitHub Copilot | .github/ | .md | | opencode | OpenCode | .opencode/ | .md | | windsurf | Windsurf | .windsurf/workflows/bmad/ | .md with workflow frontmatter | diff --git a/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md b/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md index 663fcc60..fa03b247 100644 --- a/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +++ b/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md @@ -128,7 +128,7 @@ module.exports = { NewIdeSetup }; | IDE | Config Pattern | File Extension | | -------------- | ------------------------- | -------------- | | Claude Code | .claude/commands/bmad/ | .md | -| Cursor | .cursor/rules/bmad/ | .mdc | +| Cursor | .cursor/commands/bmad/ | .md | | Windsurf | .windsurf/workflows/bmad/ | .md | | GitHub Copilot | .github/ | .md | diff --git a/tools/cli/installers/lib/ide/cursor.js b/tools/cli/installers/lib/ide/cursor.js index 183bbced..61f374a4 100644 --- a/tools/cli/installers/lib/ide/cursor.js +++ b/tools/cli/installers/lib/ide/cursor.js @@ -3,6 +3,7 @@ const { BaseIdeSetup } = require('./_base-ide'); const chalk = require('chalk'); const { AgentCommandGenerator } = require('./shared/agent-command-generator'); const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator'); +const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator'); /** * Cursor IDE setup handler @@ -12,6 +13,7 @@ class CursorSetup extends BaseIdeSetup { super('cursor', 'Cursor', true); // preferred IDE this.configDir = '.cursor'; this.rulesDir = 'rules'; + this.commandsDir = 'commands'; } /** @@ -21,11 +23,17 @@ class CursorSetup extends BaseIdeSetup { async cleanup(projectDir) { const fs = require('fs-extra'); const bmadRulesDir = path.join(projectDir, this.configDir, this.rulesDir, 'bmad'); + const bmadCommandsDir = path.join(projectDir, this.configDir, this.commandsDir, 'bmad'); if (await fs.pathExists(bmadRulesDir)) { await fs.remove(bmadRulesDir); console.log(chalk.dim(` Removed old BMAD rules from ${this.name}`)); } + + if (await fs.pathExists(bmadCommandsDir)) { + await fs.remove(bmadCommandsDir); + console.log(chalk.dim(` Removed old BMAD commands from ${this.name}`)); + } } /** @@ -40,330 +48,76 @@ class CursorSetup extends BaseIdeSetup { // Clean up old BMAD installation first await this.cleanup(projectDir); - // Create .cursor/rules directory structure + // Create .cursor/commands directory structure const cursorDir = path.join(projectDir, this.configDir); - const rulesDir = path.join(cursorDir, this.rulesDir); - const bmadRulesDir = path.join(rulesDir, 'bmad'); + const commandsDir = path.join(cursorDir, this.commandsDir); + const bmadCommandsDir = path.join(commandsDir, 'bmad'); - await this.ensureDir(bmadRulesDir); + await this.ensureDir(bmadCommandsDir); - // Generate agent launchers first + // Generate agent launchers using AgentCommandGenerator + // This creates small launcher files that reference the actual agents in _bmad/ const agentGen = new AgentCommandGenerator(this.bmadFolderName); - const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []); - - // Convert artifacts to agent format for index creation - const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name })); - - // Get tasks, tools, and workflows (ALL workflows now generate commands) - const tasks = await this.getTasks(bmadDir, true); - const tools = await this.getTools(bmadDir, true); - - // Get ALL workflows using the new workflow command generator - const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName); - const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir); - - // Convert artifacts to workflow objects for directory creation - const workflows = workflowArtifacts - .filter((artifact) => artifact.type === 'workflow-command') - .map((artifact) => ({ - module: artifact.module, - name: path.basename(artifact.relativePath, '.md'), - path: artifact.sourcePath, - })); + const { artifacts: agentArtifacts, counts: agentCounts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []); // Create directories for each module const modules = new Set(); - for (const item of [...agents, ...tasks, ...tools, ...workflows]) modules.add(item.module); + for (const artifact of agentArtifacts) { + modules.add(artifact.module); + } for (const module of modules) { - await this.ensureDir(path.join(bmadRulesDir, module)); - await this.ensureDir(path.join(bmadRulesDir, module, 'agents')); - await this.ensureDir(path.join(bmadRulesDir, module, 'tasks')); - await this.ensureDir(path.join(bmadRulesDir, module, 'tools')); - await this.ensureDir(path.join(bmadRulesDir, module, 'workflows')); + await this.ensureDir(path.join(bmadCommandsDir, module)); + await this.ensureDir(path.join(bmadCommandsDir, module, 'agents')); } - // Process and write agent launchers with MDC format - let agentCount = 0; - for (const artifact of agentArtifacts) { - // Add MDC metadata header to launcher (but don't call processContent which adds activation headers) - const content = this.wrapLauncherWithMDC(artifact.content, { - module: artifact.module, - name: artifact.name, - }); + // Write agent launcher files + const agentCount = await agentGen.writeAgentLaunchers(bmadCommandsDir, agentArtifacts); - const targetPath = path.join(bmadRulesDir, artifact.module, 'agents', `${artifact.name}.mdc`); + // Generate workflow commands from manifest (if it exists) + const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName); + const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir); - await this.writeFile(targetPath, content); - agentCount++; - } - - // Process and copy tasks - let taskCount = 0; - for (const task of tasks) { - const content = await this.readAndProcess(task.path, { - module: task.module, - name: task.name, - }); - - const targetPath = path.join(bmadRulesDir, task.module, 'tasks', `${task.name}.mdc`); - - await this.writeFile(targetPath, content); - taskCount++; - } - - // Process and copy tools - let toolCount = 0; - for (const tool of tools) { - const content = await this.readAndProcess(tool.path, { - module: tool.module, - name: tool.name, - }); - - const targetPath = path.join(bmadRulesDir, tool.module, 'tools', `${tool.name}.mdc`); - - await this.writeFile(targetPath, content); - toolCount++; - } - - // Process and copy workflow commands (generated, not raw workflows) - let workflowCount = 0; + // Write only workflow-command artifacts, skip workflow-launcher READMEs + let workflowCommandCount = 0; for (const artifact of workflowArtifacts) { if (artifact.type === 'workflow-command') { - // Add MDC metadata header to workflow command - const content = this.wrapLauncherWithMDC(artifact.content, { - module: artifact.module, - name: path.basename(artifact.relativePath, '.md'), - }); - - const targetPath = path.join(bmadRulesDir, artifact.module, 'workflows', `${path.basename(artifact.relativePath, '.md')}.mdc`); - - await this.writeFile(targetPath, content); - workflowCount++; + const moduleWorkflowsDir = path.join(bmadCommandsDir, artifact.module, 'workflows'); + await this.ensureDir(moduleWorkflowsDir); + const commandPath = path.join(moduleWorkflowsDir, path.basename(artifact.relativePath)); + await this.writeFile(commandPath, artifact.content); + workflowCommandCount++; } + // Skip workflow-launcher READMEs as they would be treated as slash commands } - // Create BMAD index file (but NOT .cursorrules - user manages that) - await this.createBMADIndex(bmadRulesDir, agents, tasks, tools, workflows, modules); + // Generate task and tool commands from manifests (if they exist) + const taskToolGen = new TaskToolCommandGenerator(); + const taskToolResult = await taskToolGen.generateTaskToolCommands(projectDir, bmadDir, bmadCommandsDir); console.log(chalk.green(`✓ ${this.name} configured:`)); console.log(chalk.dim(` - ${agentCount} agents installed`)); - console.log(chalk.dim(` - ${taskCount} tasks installed`)); - console.log(chalk.dim(` - ${toolCount} tools installed`)); - console.log(chalk.dim(` - ${workflowCount} workflows installed`)); - console.log(chalk.dim(` - Rules directory: ${path.relative(projectDir, bmadRulesDir)}`)); + if (workflowCommandCount > 0) { + console.log(chalk.dim(` - ${workflowCommandCount} workflow commands generated`)); + } + if (taskToolResult.generated > 0) { + console.log( + chalk.dim( + ` - ${taskToolResult.generated} task/tool commands generated (${taskToolResult.tasks} tasks, ${taskToolResult.tools} tools)`, + ), + ); + } + console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, bmadCommandsDir)}`)); return { success: true, agents: agentCount, - tasks: taskCount, - tools: toolCount, - workflows: workflowCount, + tasks: taskToolResult.tasks || 0, + tools: taskToolResult.tools || 0, + workflows: workflowCommandCount, }; } - /** - * Create BMAD index file for easy navigation - */ - async createBMADIndex(bmadRulesDir, agents, tasks, tools, workflows, modules) { - const indexPath = path.join(bmadRulesDir, 'index.mdc'); - - let content = `--- -description: BMAD Method - Master Index -globs: -alwaysApply: true ---- - -# BMAD Method - Cursor Rules Index - -This is the master index for all BMAD agents, tasks, tools, and workflows available in your project. - -## Installation Complete! - -BMAD rules have been installed to: \`.cursor/rules/bmad/\` - -**Note:** BMAD does not modify your \`.cursorrules\` file. You manage that separately. - -## How to Use - -- Reference specific agents: @bmad/{module}/agents/{agent-name} -- Reference specific tasks: @bmad/{module}/tasks/{task-name} -- Reference specific tools: @bmad/{module}/tools/{tool-name} -- Reference specific workflows: @bmad/{module}/workflows/{workflow-name} -- Reference entire modules: @bmad/{module} -- Reference this index: @bmad/index - -## Available Modules - -`; - - for (const module of modules) { - content += `### ${module.toUpperCase()}\n\n`; - - // List agents for this module - const moduleAgents = agents.filter((a) => a.module === module); - if (moduleAgents.length > 0) { - content += `**Agents:**\n`; - for (const agent of moduleAgents) { - content += `- @bmad/${module}/agents/${agent.name} - ${agent.name}\n`; - } - content += '\n'; - } - - // List tasks for this module - const moduleTasks = tasks.filter((t) => t.module === module); - if (moduleTasks.length > 0) { - content += `**Tasks:**\n`; - for (const task of moduleTasks) { - content += `- @bmad/${module}/tasks/${task.name} - ${task.name}\n`; - } - content += '\n'; - } - - // List tools for this module - const moduleTools = tools.filter((t) => t.module === module); - if (moduleTools.length > 0) { - content += `**Tools:**\n`; - for (const tool of moduleTools) { - content += `- @bmad/${module}/tools/${tool.name} - ${tool.name}\n`; - } - content += '\n'; - } - - // List workflows for this module - const moduleWorkflows = workflows.filter((w) => w.module === module); - if (moduleWorkflows.length > 0) { - content += `**Workflows:**\n`; - for (const workflow of moduleWorkflows) { - content += `- @bmad/${module}/workflows/${workflow.name} - ${workflow.name}\n`; - } - content += '\n'; - } - } - - content += ` -## Quick Reference - -- All BMAD rules are Manual type - reference them explicitly when needed -- Agents provide persona-based assistance with specific expertise -- Tasks are reusable workflows for common operations -- Tools provide specialized functionality -- Workflows orchestrate multi-step processes -- Each agent includes an activation block for proper initialization - -## Configuration - -BMAD rules are configured as Manual rules (alwaysApply: false) to give you control -over when they're included in your context. Reference them explicitly when you need -specific agent expertise, task workflows, tools, or guided workflows. -`; - - await this.writeFile(indexPath, content); - } - - /** - * Read and process file content - */ - async readAndProcess(filePath, metadata) { - const fs = require('fs-extra'); - const content = await fs.readFile(filePath, 'utf8'); - return this.processContent(content, metadata); - } - - /** - * Override processContent to add MDC metadata header for Cursor - * @param {string} content - File content - * @param {Object} metadata - File metadata - * @returns {string} Processed content with MDC header - */ - processContent(content, metadata = {}) { - // First apply base processing (includes activation injection for agents) - let processed = super.processContent(content, metadata); - - // Strip any existing frontmatter from the processed content - // This prevents duplicate frontmatter blocks - const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/; - if (frontmatterRegex.test(processed)) { - processed = processed.replace(frontmatterRegex, ''); - } - - // Determine the type and description based on content - const isAgent = content.includes(' `; - // Cursor uses MDC format with metadata header - const mdcContent = `--- -description: "${agentName} agent" -globs: -alwaysApply: false + // Cursor uses YAML frontmatter matching Claude Code format + const commandContent = `--- +name: '${agentName}' +description: '${agentName} agent' --- ${launcherContent} `; - const launcherPath = path.join(customAgentsDir, `${agentName}.mdc`); - await this.writeFile(launcherPath, mdcContent); + const launcherPath = path.join(customAgentsDir, `${agentName}.md`); + await this.writeFile(launcherPath, commandContent); return { path: launcherPath, - command: `@${agentName}`, + command: `/bmad/custom/agents/${agentName}`, }; } } From 12d3492e0c81793ce09c057688c5828870fbe27c Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Fri, 9 Jan 2026 13:55:33 -0500 Subject: [PATCH 02/22] Add link auditor, reorganize documentation, and README update (#1277) * feat: add link auditor tools and fix broken docs links - Add audit-doc-links.js to scan docs for broken links with auto-resolution - Add fix-doc-links.js to apply suggested fixes (dry-run by default) - Remove stale "Back to Core Concepts" breadcrumb links - Update BMad acronym to "Breakthrough Method of Agile AI Driven Development" - Update README links to docs.bmad-method.org - Simplify upgrade callout in getting-started tutorial Co-Authored-By: Claude Opus 4.5 * docs: reorganize docs structure and archive v4 tutorial - Remove unused section index files (tutorials, how-to, explanation, reference) - Move getting-started-bmadv4.md to _archive - Update quick-start-bmgd.md to remove archived file reference - Update upgrade-to-v6.md - Update astro.config.mjs for new structure Co-Authored-By: Claude Opus 4.5 * fix: ignore underscore directories in link checker Update check-doc-links.js to skip _archive, _planning, and other underscore-prefixed directories when validating links. Co-Authored-By: Claude Opus 4.5 * docs: add v4 users section to README Add links to v4 documentation archive and upgrade guide for users migrating from previous versions. Co-Authored-By: Claude Opus 4.5 * feat: convert docs to site-relative links and add validation tools - Convert all relative links (./ ../) to site-relative paths (/path/) - Strip .md extensions and use trailing slashes for Astro/Starlight - Add fix-doc-links.js to convert relative links to site-relative - Add validate-doc-links.js to check links point to existing files - Remove old audit-doc-links.js and check-doc-links.js - Update build-docs.js to use new validation script - Add npm scripts: docs:fix-links, docs:validate-links - Update style guide with validation steps Co-Authored-By: Claude Opus 4.5 * docs: standardize acronym to BMad across documentation Replace incorrect "BMAD" with correct "BMad" in text and frontmatter while preserving "BMAD-METHOD" in GitHub URLs. Co-Authored-By: Claude Opus 4.5 * docs: fix BMad acronym and remove draft README - Correct acronym to "Breakthrough Method of Agile AI Driven Development" - Remove unused README-draft.md Co-Authored-By: Claude Opus 4.5 * docs: standardize BMad acronym in README Co-Authored-By: Claude Opus 4.5 * docs: standardize FAQ format across all FAQ pages - Add TOC with jump links under "## Questions" - Use ### headers for questions (no Q: prefix) - Direct answers without **A:** prefix - Remove horizontal rules and "Related Documentation" sections - End each FAQ with issue/Discord CTA - Update style guide with new FAQ guidelines - Delete redundant faq/index.md (sidebar handles navigation) Co-Authored-By: Claude Opus 4.5 * fix: use repo-relative links with .md for GitHub compatibility Convert all documentation links to repo-relative format (/docs/path/file.md) so they work when browsing on GitHub. The rehype plugin strips /docs/ prefix and converts .md to trailing slash at build time for Astro/Starlight. - Update rehype-markdown-links.js to strip /docs/ prefix from absolute paths - Update fix-doc-links.js to generate /docs/ prefixed paths with .md extension - Convert 217 links across 64 files to new format Co-Authored-By: Claude Opus 4.5 * fix: handle /docs/ prefix in link validator Update resolveLink to strip /docs/ prefix from repo-relative links before checking if files exist. Co-Authored-By: Claude Opus 4.5 * docs: restore FAQ index page Re-add the FAQ index page that was accidentally deleted, with updated repo-relative link format. Co-Authored-By: Claude Opus 4.5 --------- Co-authored-by: Claude Opus 4.5 Co-authored-by: Alex Verkhovsky --- README.md | 238 ++---------- docs/404.md | 2 +- docs/_STYLE_GUIDE.md | 46 ++- .../getting-started-bmadv4.md | 0 docs/downloads.md | 8 +- docs/explanation/agents/barry-quick-flow.md | 18 +- docs/explanation/agents/index.md | 16 +- docs/explanation/architecture/four-phases.md | 6 +- .../preventing-agent-conflicts.md | 6 +- .../architecture/why-solutioning-matters.md | 6 +- .../bmad-builder/custom-content-types.md | 8 +- docs/explanation/bmad-builder/index.md | 12 +- docs/explanation/bmm/index.md | 36 +- docs/explanation/core-concepts/agent-roles.md | 6 +- docs/explanation/core-concepts/index.md | 32 +- .../core-concepts/what-are-agents.md | 8 +- .../core-concepts/what-are-modules.md | 16 +- .../core-concepts/what-are-workflows.md | 8 +- docs/explanation/core/index.md | 20 +- .../creative-intelligence/index.md | 4 +- docs/explanation/faq/brownfield-faq.md | 53 ++- docs/explanation/faq/getting-started-faq.md | 48 ++- docs/explanation/faq/implementation-faq.md | 40 +- docs/explanation/faq/index.md | 15 +- docs/explanation/faq/levels-and-tracks-faq.md | 52 ++- docs/explanation/faq/planning-faq.md | 28 +- docs/explanation/faq/tools-faq.md | 127 +++--- docs/explanation/faq/workflows-faq.md | 59 ++- .../features/advanced-elicitation.md | 2 +- docs/explanation/features/party-mode.md | 6 +- docs/explanation/features/quick-flow.md | 6 +- docs/explanation/features/tea-overview.md | 4 +- docs/explanation/features/web-bundles.md | 6 +- docs/explanation/game-dev/agents.md | 6 +- docs/explanation/game-dev/bmgd-vs-bmm.md | 6 +- docs/explanation/game-dev/game-types.md | 6 +- docs/explanation/game-dev/index.md | 16 +- docs/explanation/index.md | 35 -- .../facilitation-over-generation.md | 4 +- .../brownfield/add-feature-to-existing.md | 6 +- .../brownfield/document-existing-project.md | 4 +- docs/how-to/brownfield/index.md | 12 +- .../brownfield/quick-fix-in-brownfield.md | 6 +- docs/how-to/customization/customize-agents.md | 8 +- .../customization/customize-workflows.md | 8 +- docs/how-to/customization/index.md | 12 +- docs/how-to/get-answers-about-bmad.md | 22 +- docs/how-to/index.md | 36 -- docs/how-to/installation/index.md | 6 +- docs/how-to/installation/install-bmad.md | 16 +- .../installation/install-custom-modules.md | 14 +- docs/how-to/installation/upgrade-to-v6.md | 6 +- .../troubleshooting/bmgd-troubleshooting.md | 6 +- docs/how-to/workflows/bmgd-quick-flow.md | 6 +- docs/how-to/workflows/conduct-research.md | 6 +- docs/how-to/workflows/create-architecture.md | 8 +- .../workflows/create-epics-and-stories.md | 6 +- docs/how-to/workflows/create-prd.md | 6 +- docs/how-to/workflows/create-product-brief.md | 6 +- docs/how-to/workflows/create-story.md | 6 +- docs/how-to/workflows/create-tech-spec.md | 6 +- docs/how-to/workflows/create-ux-design.md | 6 +- docs/how-to/workflows/implement-story.md | 6 +- .../workflows/run-brainstorming-session.md | 6 +- docs/how-to/workflows/run-code-review.md | 6 +- .../workflows/run-implementation-readiness.md | 6 +- docs/how-to/workflows/run-sprint-planning.md | 6 +- docs/how-to/workflows/run-test-design.md | 6 +- docs/how-to/workflows/setup-party-mode.md | 6 +- docs/how-to/workflows/setup-test-framework.md | 6 +- docs/index.md | 24 +- docs/reference/agents/index.md | 6 +- docs/reference/configuration/core-tasks.md | 2 +- docs/reference/glossary/index.md | 6 +- docs/reference/index.md | 26 -- docs/reference/workflows/bmgd-workflows.md | 10 +- docs/reference/workflows/core-workflows.md | 10 +- docs/reference/workflows/document-project.md | 6 +- docs/reference/workflows/index.md | 6 +- .../tutorials/advanced/create-custom-agent.md | 14 +- .../getting-started/getting-started-bmadv6.md | 73 ++-- .../getting-started/quick-start-bmgd.md | 68 ++-- docs/tutorials/index.md | 21 - package.json | 3 +- tools/build-docs.js | 2 +- tools/check-doc-links.js | 282 -------------- tools/fix-doc-links.js | 288 ++++++++++++++ tools/validate-doc-links.js | 363 ++++++++++++++++++ website/astro.config.mjs | 101 ++++- website/src/rehype-markdown-links.js | 26 +- 90 files changed, 1410 insertions(+), 1208 deletions(-) rename docs/{tutorials/getting-started => _archive}/getting-started-bmadv4.md (100%) delete mode 100644 docs/explanation/index.md delete mode 100644 docs/how-to/index.md delete mode 100644 docs/reference/index.md delete mode 100644 docs/tutorials/index.md delete mode 100644 tools/check-doc-links.js create mode 100644 tools/fix-doc-links.js create mode 100644 tools/validate-doc-links.js diff --git a/README.md b/README.md index 49a83e74..5285425e 100644 --- a/README.md +++ b/README.md @@ -1,237 +1,79 @@ -# BMad Method & BMad Core +# BMad Method -[![Stable Version](https://img.shields.io/npm/v/bmad-method?color=blue&label=stable)](https://www.npmjs.com/package/bmad-method) -[![Alpha Version](https://img.shields.io/npm/v/bmad-method/alpha?color=orange&label=alpha)](https://www.npmjs.com/package/bmad-method) +[![Version](https://img.shields.io/npm/v/bmad-method?color=blue&label=version)](https://www.npmjs.com/package/bmad-method) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Node.js Version](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen)](https://nodejs.org) [![Discord](https://img.shields.io/badge/Discord-Join%20Community-7289da?logo=discord&logoColor=white)](https://discord.gg/gk8jAdXWmj) ---- +**Build More, Architect Dreams** — An AI-driven agile development framework with 21 specialized agents, 50+ guided workflows, and scale-adaptive intelligence that adjusts from bug fixes to enterprise systems. -
+## Why BMad? -## 🎉 NEW: BMAD V6 Installer - Create & Share Custom Content! +Traditional AI tools do the thinking for you, producing average results. BMad agents act as expert collaborators who guide you through structured workflows to bring out your best thinking. -The completely revamped **BMAD V6 installer** now includes built-in support for creating, installing, and sharing custom modules, agents, workflows, templates, and tools! Build your own AI solutions or share them with your team - and real soon, with the whole BMad Community througha verified community sharing portal! +- **Scale-Adaptive**: Automatically adjusts planning depth based on project complexity (Level 0-4) +- **Structured Workflows**: Grounded in agile best practices across analysis, planning, architecture, and implementation +- **Specialized Agents**: 12+ domain experts (PM, Architect, Developer, UX, Scrum Master, and more) +- **Complete Lifecycle**: From brainstorming to deployment, with just-in-time documentation -**✨ What's New:** +## Quick Start -- 📦 **Streamlined Custom Module Installation** - Package your custom content as installable modules -- 🤖 **Agent & Workflow Sharing** - Distribute standalone agents and workflows -- 🔄 **Unitary Module Support** - Install individual components without full modules -- ⚙️ **Dependency Management** - Automatic handling of module dependencies -- 🛡️ **Update-Safe Customization** - Your custom content persists through updates - -**📚 Learn More:** - -- [**Custom Content Overview**](http://docs.bmad-method.org/explanation/bmad-builder/custom-content-types/) - Discover all supported content types -- [**Installation Guide**](http://docs.bmad-method.org/how-to/installation/install-custom-modules/) - Learn to create and install custom content -- [**2 Very simple Custom Modules of questionable quality**](./samples/sample-custom-modules/README.md) - if you want to download and try to install a custom shared module, get an idea of how to bundle and share your own, or create your own personal agents, workflows and modules. - -
- ---- - -## AI-Driven Agile Development That Scales From Bug Fixes to Enterprise - -**Build More, Architect Dreams** (BMAD) with **21 specialized AI agents** across 4 official modules, and **50+ guided workflows** that adapt to your project's complexity—from quick bug fixes to enterprise platforms, and new step file workflows that allow for incredibly long workflows to stay on the rails longer than ever before! - -Additionally - when we say 'Build More, Architect Dreams' - we mean it! The BMad Builder has landed, and now as of Alpha.15 is fully supported in the installation flow via NPX - custom stand along agents, workflows and the modules of your dreams! The community forge will soon open, endless possibility awaits! - -> **🚀 v6 is a MASSIVE upgrade from v4!** Complete architectural overhaul, scale-adaptive intelligence, visual workflows, and the powerful BMad Core framework. v4 users: this changes everything. [See what's new →](#whats-new-in-v6) - -> **📌 v6 Alpha Status:** Near-beta quality with vastly improved stability. Documentation is being finalized. New videos coming soon to [BMadCode YouTube](https://www.youtube.com/@BMadCode). - -## 🎯 Why BMad Method? - -Unlike generic AI coding assistants, BMad Method provides **structured, battle-tested workflows** powered by specialized agents who understand agile development. Each agent has deep domain expertise—from product management to architecture to testing—working together seamlessly. - -**✨ Key Benefits:** - -- **Scale-Adaptive Intelligence** - Automatically adjusts planning depth from bug fixes to enterprise systems -- **Complete Development Lifecycle** - Analysis → Planning → Architecture → Implementation -- **Specialized Expertise** - 19 agents with specific roles (PM, Architect, Developer, UX Designer, etc.) -- **Proven Methodologies** - Built on agile best practices with AI amplification -- **IDE Integration** - Works with Claude Code, Cursor, Windsurf, VS Code - -## 🏗️ The Power of BMad Core - -**BMad Method** is actually a sophisticated module built on top of **BMad Core** (**C**ollaboration **O**ptimized **R**eflection **E**ngine). This revolutionary architecture means: - -- **BMad Core** provides the universal framework for human-AI collaboration -- **BMad Method** leverages Core to deliver agile development workflows -- **BMad Builder** lets YOU create custom modules as powerful as BMad Method itself - -With **BMad Builder**, you can architect both simple agents and vastly complex domain-specific modules (legal, medical, finance, education, creative) that will soon be sharable in an **official community marketplace**. Imagine building and sharing your own specialized AI team! - -## 📊 See It In Action - -

- BMad Method Workflow -

- -

- Complete BMad Method workflow showing all phases, agents, and decision points -

- -## 🚀 Get Started in 3 Steps - -### 1. Install BMad Method +**Prerequisites**: [Node.js](https://nodejs.org) v20+ ```bash -# Install v6 RECOMMENDED npx bmad-method@alpha install ``` +Follow the installer prompts to configure your project. Then run: + ```bash -# Install v4 Legacy (not recommended if starting fresh) -npx bmad-method install -# OR -npx bmad-method@latest install -``` - - -### 2. Initialize Your Project - -Load any agent in your IDE and run: - -``` *workflow-init ``` -This analyzes your project and recommends the right workflow track. +This analyzes your project and recommends a track: -### 3. Choose Your Track +| Track | Best For | Time to First Story | +| --------------- | ------------------------- | ------------------- | +| **Quick Flow** | Bug fixes, small features | ~5 minutes | +| **BMad Method** | Products and platforms | ~15 minutes | +| **Enterprise** | Compliance-heavy systems | ~30 minutes | -BMad Method adapts to your needs with three intelligent tracks: +## Modules -| Track | Use For | Planning | Time to Start | -| ----------------- | ------------------------- | ----------------------- | ------------- | -| **⚡ Quick Flow** | Bug fixes, small features | Tech spec only | < 5 minutes | -| **📋 BMad Method** | Products, platforms | PRD + Architecture + UX | < 15 minutes | -| **🏢 Enterprise** | Compliance, scale | Full governance suite | < 30 minutes | +| Module | Purpose | +| ------------------------------------- | -------------------------------------------------------- | +| **BMad Method (BMM)** | Core agile development with 34 workflows across 4 phases | +| **BMad Builder (BMB)** | Create custom agents and domain-specific modules | +| **Creative Intelligence Suite (CIS)** | Innovation, brainstorming, and problem-solving | -> **Not sure?** Run `*workflow-init` and let BMad analyze your project goal. +## Documentation -## 🔄 How It Works: 4-Phase Methodology +**[Full Documentation](http://docs.bmad-method.org)** — Tutorials, how-to guides, concepts, and reference -BMad Method guides you through a proven development lifecycle: - -1. **📊 Analysis** (Optional) - Brainstorm, research, and explore solutions -2. **📝 Planning** - Create PRDs, tech specs, or game design documents -3. **🏗️ Solutioning** - Design architecture, UX, and technical approach -4. **⚡ Implementation** - Story-driven development with continuous validation - -Each phase has specialized workflows and agents working together to deliver exceptional results. - -## 🤖 Meet Your Team - -**12 Specialized Agents** working in concert: - -| Development | Architecture | Product | Leadership | -| ----------- | -------------- | ----------- | ------------ | -| Developer | Architect | PM | Scrum Master | -| UX Designer | Test Architect | Analyst | BMad Master | -| | | Tech Writer | | - -**Test Architect** integrates with `@seontechnologies/playwright-utils` for production-ready web app fixture-based utilities. - -Each agent brings deep expertise and can be customized to match your team's style. - -## 📦 What's Included - -### Official Modules - -- **BMad Method (BMM)** - Complete agile development framework - - 12 specialized agents - - 34 workflows across 4 phases - - Stand Along Quick Spec Flow for a streamlined simple implementation process - - [→ Documentation Hub](http://docs.bmad-method.org/explanation/bmm/) - -- **BMad Builder (BMB)** - Create custom agents and workflows - - Build anything from simple agents to complex modules - - Create domain-specific solutions (legal, medical, finance, education) - - [→ Builder Guide](http://docs.bmad-method.org/explanation/bmad-builder/) - -- **Creative Intelligence Suite (CIS)** - Innovation & problem-solving - - Brainstorming, design thinking, storytelling - - 5 creative facilitation workflows - - [→ Creative Workflows](http://docs.bmad-method.org/explanation/creative-intelligence/) - -### Key Features - -- **🎨 Customizable Agents** - Modify personalities, expertise, and communication styles -- **🌐 Multi-Language Support** - Separate settings for communication and code output -- **📄 Document Sharding** - 90% token savings for large projects -- **🔄 Update-Safe** - Your customizations persist through updates -- **🚀 Web Bundles** - Use in ChatGPT, Claude Projects, or Gemini Gems - -## 📚 Documentation - -### Quick Links - -- **[Quick Start Guide](http://docs.bmad-method.org/tutorials/getting-started/getting-started-bmadv6/)** - 15-minute introduction -- **[Complete BMM Documentation](http://docs.bmad-method.org/explanation/bmm/)** - All guides and references -- **[Agent Customization](http://docs.bmad-method.org/how-to/customization/customize-agents/)** - Personalize your agents -- **[All Documentation](http://docs.bmad-method.org/)** - Complete documentation index +- [Getting Started Tutorial](http://docs.bmad-method.org/tutorials/getting-started/getting-started-bmadv6/) +- [Upgrading from Previous Versions](http://docs.bmad-method.org/how-to/installation/upgrade-to-v6/) ### For v4 Users - **[v4 Documentation](https://github.com/bmad-code-org/BMAD-METHOD/tree/V4/docs)** -- **[v4 to v6 Upgrade Guide](http://docs.bmad-method.org/how-to/installation/upgrade-to-v6/)** -## 💬 Community & Support +## Community -- **[Discord Community](https://discord.gg/gk8jAdXWmj)** - Get help, share projects -- **[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 (Currently not functioning, reworking soon) -- **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Community guidelines +- [Discord](https://discord.gg/gk8jAdXWmj) — Get help, share ideas, collaborate +- [YouTube](https://www.youtube.com/@BMadCode) — Video tutorials and updates +- [GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) — Bug reports and feature requests +- [Discussions](https://github.com/bmad-code-org/BMAD-METHOD/discussions) — Community conversations -## 🛠️ Development +## Contributing -If you would like to contribute, first check the [CONTRIBUTING.md](CONTRIBUTING.md) for full development guidelines. +We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. -## What's New in v6 +## License -**v6 represents a complete architectural revolution from v4:** - -### 🚀 Major Upgrades - -- **BMad Core Framework** - Modular architecture enabling custom domain solutions -- **Scale-Adaptive Intelligence** - Automatic adjustment from bug fixes to enterprise -- **Visual Workflows** - Beautiful SVG diagrams showing complete methodology -- **BMad Builder Module** - Create and share your own AI agent teams -- **50+ Workflows** - Up from 20 in v4, covering every development scenario -- **19 Specialized Agents** - Enhanced with customizable personalities and expertise -- **Update-Safe Customization** - Your configs persist through all updates -- **Web Bundles** - Use agents in ChatGPT, Claude, and Gemini -- **Multi-Language Support** - Separate settings for communication and code -- **Document Sharding** - 90% token savings for large projects - -### 🔄 For v4 Users - -- **[Comprehensive Upgrade Guide](http://docs.bmad-method.org/how-to/installation/upgrade-to-v6/)** - Step-by-step migration -- **[v4 Documentation Archive](https://github.com/bmad-code-org/BMAD-METHOD/tree/V4)** - Legacy reference -- Backwards compatibility where possible -- Smooth migration path with installer detection - -## 📄 License - -MIT License - See [LICENSE](LICENSE) for details. - -**Trademarks:** BMad™ and BMAD-METHOD™ are trademarks of BMad Code, LLC. - -Supported by:  DigitalOcean +MIT License — see [LICENSE](LICENSE) for details. --- -

- - Contributors - -

+**BMad** and **BMAD-METHOD** are trademarks of BMad Code, LLC. -

- Built with ❤️ for the human-AI collaboration community -

+[![Contributors](https://contrib.rocks/image?repo=bmad-code-org/BMAD-METHOD)](https://github.com/bmad-code-org/BMAD-METHOD/graphs/contributors) diff --git a/docs/404.md b/docs/404.md index 11b7c223..b42841e9 100644 --- a/docs/404.md +++ b/docs/404.md @@ -6,4 +6,4 @@ template: splash The page you're looking for doesn't exist or has been moved. -[Return to Home](/) +[Return to Home](/docs/index.md) diff --git a/docs/_STYLE_GUIDE.md b/docs/_STYLE_GUIDE.md index 85f46fe5..592d1148 100644 --- a/docs/_STYLE_GUIDE.md +++ b/docs/_STYLE_GUIDE.md @@ -1,6 +1,6 @@ # Documentation Style Guide -Internal guidelines for maintaining consistent, high-quality documentation across the BMAD Method project. This document is not included in the Starlight sidebar — it's for contributors and maintainers, not end users. +Internal guidelines for maintaining consistent, high-quality documentation across the BMad Method project. This document is not included in the Starlight sidebar — it's for contributors and maintainers, not end users. ## Quick Principles @@ -9,6 +9,27 @@ Internal guidelines for maintaining consistent, high-quality documentation acros 3. **Strategic visuals** — Use admonitions, tables, and diagrams purposefully 4. **Scannable content** — Headers, lists, and callouts help readers find what they need +## Validation Steps + +Before submitting documentation changes, run these checks from the repo root: + +1. **Fix link format** — Convert relative links (`./`, `../`) to site-relative paths (`/path/`) + ```bash + npm run docs:fix-links # Preview changes + npm run docs:fix-links -- --write # Apply changes + ``` + +2. **Validate links** — Check all links point to existing files + ```bash + npm run docs:validate-links # Preview issues + npm run docs:validate-links -- --write # Auto-fix where possible + ``` + +3. **Build the site** — Verify no build errors + ```bash + npm run docs:build + ``` + ## Tutorial Structure Every tutorial should follow this structure: @@ -223,16 +244,33 @@ Instead, break into separate sections or use an admonition for context. ## FAQ Sections -Format as bold question followed by answer paragraph: +Use a TOC with jump links, `###` headers for questions, and direct answers: ```md -**Do I always need architecture?** +## Questions + +- [Do I always need architecture?](#do-i-always-need-architecture) +- [Can I change my plan later?](#can-i-change-my-plan-later) + +### Do I always need architecture? + Only for BMad Method and Enterprise tracks. Quick Flow skips to implementation. -**Can I change my plan later?** +### Can I change my plan later? + Yes. The SM agent has a `correct-course` workflow for handling scope changes. + +**Have a question not answered here?** Please [open an issue](...) or ask in [Discord](...) so we can add it! ``` +### FAQ Guidelines + +- **TOC at top** — Jump links under `## Questions` for quick navigation +- **`###` headers** — Questions are scannable and linkable (no `Q:` prefix) +- **Direct answers** — No `**A:**` prefix, just the answer +- **No "Related Documentation"** — Sidebar handles navigation; avoid repetitive links +- **End with CTA** — "Have a question not answered here?" with issue/Discord links + ## Folder Structure Blocks Show project structure in "What You've Accomplished": diff --git a/docs/tutorials/getting-started/getting-started-bmadv4.md b/docs/_archive/getting-started-bmadv4.md similarity index 100% rename from docs/tutorials/getting-started/getting-started-bmadv4.md rename to docs/_archive/getting-started-bmadv4.md diff --git a/docs/downloads.md b/docs/downloads.md index fc3c1709..0db386cf 100644 --- a/docs/downloads.md +++ b/docs/downloads.md @@ -2,13 +2,13 @@ title: Downloads --- -Download BMAD Method resources for offline use, AI training, or integration. +Download BMad Method resources for offline use, AI training, or integration. ## Source Bundles | File | Description | |------|-------------| -| **[bmad-sources.zip](/downloads/bmad-sources.zip)** | Complete BMAD source files | +| **[bmad-sources.zip](/downloads/bmad-sources.zip)** | Complete BMad source files | | **[bmad-prompts.zip](/downloads/bmad-prompts.zip)** | Agent and workflow prompts only | ## LLM-Optimized Files @@ -54,7 +54,7 @@ npx bmad-method@alpha install ## API Access -For programmatic access to BMAD documentation: +For programmatic access to BMad documentation: ```bash # Get documentation index @@ -66,7 +66,7 @@ curl https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt ## Contributing -Want to improve BMAD Method? Check out: +Want to improve BMad Method? Check out: - [Contributing Guide](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CONTRIBUTING.md) - [GitHub Repository](https://github.com/bmad-code-org/BMAD-METHOD) diff --git a/docs/explanation/agents/barry-quick-flow.md b/docs/explanation/agents/barry-quick-flow.md index b4c1dee8..11ffd0ea 100644 --- a/docs/explanation/agents/barry-quick-flow.md +++ b/docs/explanation/agents/barry-quick-flow.md @@ -11,14 +11,14 @@ title: "Quick Flow Solo Dev Agent (Barry)" ## Overview -Barry is the elite solo developer who lives and breathes the BMAD Quick Flow workflow. He takes projects from concept to deployment with ruthless efficiency - no handoffs, no delays, just pure focused development. Barry architects specs, writes the code, and ships features faster than entire teams. When you need it done right and done now, Barry's your dev. +Barry is the elite solo developer who lives and breathes the BMad Quick Flow workflow. He takes projects from concept to deployment with ruthless efficiency - no handoffs, no delays, just pure focused development. Barry architects specs, writes the code, and ships features faster than entire teams. When you need it done right and done now, Barry's your dev. ### Agent Persona **Name:** Barry **Title:** Quick Flow Solo Dev -**Identity:** Barry is an elite developer who thrives on autonomous execution. He lives and breathes the BMAD Quick Flow workflow, taking projects from concept to deployment with ruthless efficiency. No handoffs, no delays - just pure, focused development. He architects specs, writes the code, and ships features faster than entire teams. +**Identity:** Barry is an elite developer who thrives on autonomous execution. He lives and breathes the BMad Quick Flow workflow, taking projects from concept to deployment with ruthless efficiency. No handoffs, no delays - just pure, focused development. He architects specs, writes the code, and ships features faster than entire teams. **Communication Style:** Direct, confident, and implementation-focused. Uses tech slang and gets straight to the point. No fluff, just results. Every response moves the project forward. @@ -35,7 +35,7 @@ Barry is the elite solo developer who lives and breathes the BMAD Quick Flow wor ## Menu Commands -Barry owns the entire BMAD Quick Flow path, providing a streamlined 3-step development process that eliminates handoffs and maximizes velocity. +Barry owns the entire BMad Quick Flow path, providing a streamlined 3-step development process that eliminates handoffs and maximizes velocity. ### 1. **create-tech-spec** @@ -83,7 +83,7 @@ Barry owns the entire BMAD Quick Flow path, providing a streamlined 3-step devel --- -## The BMAD Quick Flow Process +## The BMad Quick Flow Process Barry orchestrates a simple, efficient 3-step process: @@ -310,11 +310,11 @@ Implement OAuth 2.0 authentication with JWT tokens and role-based access control ## Related Documentation -- **[Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md)** - Getting started with BMM -- **[Agents Guide](../../explanation/core-concepts/agent-roles.md)** - Complete agent reference -- **[Four Phases](../../explanation/architecture/four-phases.md)** - Understanding development tracks -- **[Workflow Implementation](../../how-to/workflows/run-sprint-planning.md)** - Implementation workflows -- **[Party Mode](../../explanation/features/party-mode.md)** - Multi-agent collaboration +- **[Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md)** - Getting started with BMM +- **[Agents Guide](/docs/explanation/core-concepts/agent-roles.md)** - Complete agent reference +- **[Four Phases](/docs/explanation/architecture/four-phases.md)** - Understanding development tracks +- **[Workflow Implementation](/docs/how-to/workflows/run-sprint-planning.md)** - Implementation workflows +- **[Party Mode](/docs/explanation/features/party-mode.md)** - Multi-agent collaboration --- diff --git a/docs/explanation/agents/index.md b/docs/explanation/agents/index.md index 50f19155..ff47b035 100644 --- a/docs/explanation/agents/index.md +++ b/docs/explanation/agents/index.md @@ -1,10 +1,10 @@ --- title: "Understanding Agents" -description: Understanding BMAD agents and their roles +description: Understanding BMad agents and their roles --- -Comprehensive guides to BMAD's AI agents - their roles, capabilities, and how to work with them effectively. +Comprehensive guides to BMad's AI agents - their roles, capabilities, and how to work with them effectively. --- @@ -12,17 +12,17 @@ Comprehensive guides to BMAD's AI agents - their roles, capabilities, and how to ### BMM Agents -- **[Agent Roles](../core-concepts/agent-roles.md)** - Overview of all BMM agent roles and responsibilities -- **[Quick Flow Solo Dev (Barry)](./barry-quick-flow.md)** - The dedicated agent for rapid development +- **[Agent Roles](/docs/explanation/core-concepts/agent-roles.md)** - Overview of all BMM agent roles and responsibilities +- **[Quick Flow Solo Dev (Barry)](/docs/explanation/agents/barry-quick-flow.md)** - The dedicated agent for rapid development ### BMGD Agents -- **[Game Development Agents](../game-dev/agents.md)** - Complete guide to BMGD's specialized game dev agents +- **[Game Development Agents](/docs/explanation/game-dev/agents.md)** - Complete guide to BMGD's specialized game dev agents --- ## Related -- **[What Are Agents?](../core-concepts/what-are-agents.md)** - Core concept explanation -- **[Party Mode](../features/party-mode.md)** - Multi-agent collaboration -- **[Customize Agents](../../how-to/customization/customize-agents.md)** - How to customize agent behavior +- **[What Are Agents?](/docs/explanation/core-concepts/what-are-agents.md)** - Core concept explanation +- **[Party Mode](/docs/explanation/features/party-mode.md)** - Multi-agent collaboration +- **[Customize Agents](/docs/how-to/customization/customize-agents.md)** - How to customize agent behavior diff --git a/docs/explanation/architecture/four-phases.md b/docs/explanation/architecture/four-phases.md index e9ace69c..83538b9f 100644 --- a/docs/explanation/architecture/four-phases.md +++ b/docs/explanation/architecture/four-phases.md @@ -121,6 +121,6 @@ Same as BMad Method with optional extended workflows. ## Related -- [Why Solutioning Matters](./why-solutioning-matters.md) -- [Preventing Agent Conflicts](./preventing-agent-conflicts.md) -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) +- [Why Solutioning Matters](/docs/explanation/architecture/why-solutioning-matters.md) +- [Preventing Agent Conflicts](/docs/explanation/architecture/preventing-agent-conflicts.md) +- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) diff --git a/docs/explanation/architecture/preventing-agent-conflicts.md b/docs/explanation/architecture/preventing-agent-conflicts.md index 9c6aaf87..6d0f7563 100644 --- a/docs/explanation/architecture/preventing-agent-conflicts.md +++ b/docs/explanation/architecture/preventing-agent-conflicts.md @@ -133,6 +133,6 @@ Document written once, never updated ## Related -- [Why Solutioning Matters](./why-solutioning-matters.md) -- [Four Phases](./four-phases.md) -- [Create Architecture](../../how-to/workflows/create-architecture.md) +- [Why Solutioning Matters](/docs/explanation/architecture/why-solutioning-matters.md) +- [Four Phases](/docs/explanation/architecture/four-phases.md) +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) diff --git a/docs/explanation/architecture/why-solutioning-matters.md b/docs/explanation/architecture/why-solutioning-matters.md index b9e2aa93..d10f76d2 100644 --- a/docs/explanation/architecture/why-solutioning-matters.md +++ b/docs/explanation/architecture/why-solutioning-matters.md @@ -86,6 +86,6 @@ Catching alignment issues in solutioning is 10× faster than discovering them du ## Related -- [Four Phases](./four-phases.md) - Overview of all phases -- [Preventing Agent Conflicts](./preventing-agent-conflicts.md) - Detailed conflict prevention -- [Create Architecture](../../how-to/workflows/create-architecture.md) - How to do it +- [Four Phases](/docs/explanation/architecture/four-phases.md) - Overview of all phases +- [Preventing Agent Conflicts](/docs/explanation/architecture/preventing-agent-conflicts.md) - Detailed conflict prevention +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - How to do it diff --git a/docs/explanation/bmad-builder/custom-content-types.md b/docs/explanation/bmad-builder/custom-content-types.md index 6b117475..d593d50b 100644 --- a/docs/explanation/bmad-builder/custom-content-types.md +++ b/docs/explanation/bmad-builder/custom-content-types.md @@ -3,7 +3,7 @@ title: "Custom Content" --- -BMAD supports several categories of officially supported custom content that extend the platform's capabilities. Custom content can be created manually or with the recommended assistance of the BMad Builder (BoMB) Module. The BoMB Agents provides workflows and expertise to plan and build any custom content you can imagine. +BMad supports several categories of officially supported custom content that extend the platform's capabilities. Custom content can be created manually or with the recommended assistance of the BMad Builder (BoMB) Module. The BoMB Agents provides workflows and expertise to plan and build any custom content you can imagine. This flexibility transforms the platform beyond its current capabilities, enabling: @@ -27,7 +27,7 @@ This flexibility transforms the platform beyond its current capabilities, enabli Custom modules range from simple collections of related agents, workflows, and tools designed to work independently, to complex, expansive systems like the BMad Method or even larger applications. -Custom modules are [installable](../../how-to/installation/install-custom-modules.md) using the standard BMAD method and support advanced features: +Custom modules are [installable](/docs/how-to/installation/install-custom-modules.md) using the standard BMad method and support advanced features: - Optional user information collection during installation/updates - Versioning and upgrade paths @@ -52,13 +52,13 @@ Add-on modules can include: ## Custom Global Modules -Similar to Custom Stand-Alone Modules, but designed to add functionality that applies across all installed content. These modules provide cross-cutting capabilities that enhance the entire BMAD ecosystem. +Similar to Custom Stand-Alone Modules, but designed to add functionality that applies across all installed content. These modules provide cross-cutting capabilities that enhance the entire BMad ecosystem. Examples include: - The current TTS (Text-to-Speech) functionality for Claude, which will soon be converted to a global module - The core module, which is always installed and provides all agents with party mode and advanced elicitation capabilities -- Installation and update tools that work with any BMAD method configuration +- Installation and update tools that work with any BMad method configuration Upcoming standards will document best practices for building global content that affects installed modules through: diff --git a/docs/explanation/bmad-builder/index.md b/docs/explanation/bmad-builder/index.md index c2c05547..b1d0f39f 100644 --- a/docs/explanation/bmad-builder/index.md +++ b/docs/explanation/bmad-builder/index.md @@ -1,16 +1,16 @@ --- title: "BMad Builder (BMB)" -description: Create custom agents, workflows, and modules for BMAD +description: Create custom agents, workflows, and modules for BMad --- -Create custom agents, workflows, and modules for BMAD. +Create custom agents, workflows, and modules for BMad. --- ## Quick Start -- **[Agent Creation Guide](../../tutorials/advanced/create-custom-agent.md)** - Step-by-step guide to building your first agent +- **[Agent Creation Guide](/docs/tutorials/advanced/create-custom-agent.md)** - Step-by-step guide to building your first agent --- @@ -56,11 +56,11 @@ Production-ready examples available in the BMB reference folder: ## Installation Guide For installing standalone simple and expert agents, see: -- [Install Custom Modules](../../how-to/installation/install-custom-modules.md) +- [Install Custom Modules](/docs/how-to/installation/install-custom-modules.md) --- ## Related -- [Custom Content Types](./custom-content-types.md) - Understanding content types -- [Create Custom Agent](../../tutorials/advanced/create-custom-agent.md) - Tutorial +- [Custom Content Types](/docs/explanation/bmad-builder/custom-content-types.md) - Understanding content types +- [Create Custom Agent](/docs/tutorials/advanced/create-custom-agent.md) - Tutorial diff --git a/docs/explanation/bmm/index.md b/docs/explanation/bmm/index.md index 4a0e3074..29e0cd21 100644 --- a/docs/explanation/bmm/index.md +++ b/docs/explanation/bmm/index.md @@ -11,7 +11,7 @@ Complete guides for the BMad Method Module (BMM) - AI-powered agile development **New to BMM?** Start here: -- **[Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md)** - Step-by-step guide to building your first project +- **[Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md)** - Step-by-step guide to building your first project - Installation and setup - Understanding the four phases - Running your first workflows @@ -36,26 +36,26 @@ First know there is the full BMad Method Process and then there is a Quick Flow - All 4 phases have optional steps in them, depending on how rigorous you want to go with planning, research ideation, validation, testing and traceability. - While there is a lot here, know that even this can be distilled down to a simple PRD, Epic and Story list and then jump into the dev cycle. But if that is all you want, you might be better off with the BMad Quick Flow described next -- **[BMAD Quick Flow](../../explanation/features/quick-flow.md)** - Fast-track development workflow +- **[BMad Quick Flow](/docs/explanation/features/quick-flow.md)** - Fast-track development workflow - 3-step process: spec → dev → optional review - Perfect for bug fixes and small features - Rapid prototyping with production quality - Implementation in minutes, not days - - Has a specialized single agent that does all of this: **[Quick Flow Solo Dev Agent](../agents/barry-quick-flow.md)** + - Has a specialized single agent that does all of this: **[Quick Flow Solo Dev Agent](/docs/explanation/agents/barry-quick-flow.md)** -- **TEA engagement (optional)** - Choose TEA engagement: none, TEA-only (standalone), or integrated by track. See **[Test Architect Guide](../../explanation/features/tea-overview.md)**. +- **TEA engagement (optional)** - Choose TEA engagement: none, TEA-only (standalone), or integrated by track. See **[Test Architect Guide](/docs/explanation/features/tea-overview.md)**. ## 🤖 Agents and Collaboration Complete guide to BMM's AI agent team: -- **[Agents Guide](../../explanation/core-concepts/agent-roles.md)** - Comprehensive agent reference +- **[Agents Guide](/docs/explanation/core-concepts/agent-roles.md)** - Comprehensive agent reference - 12 specialized BMM agents + BMad Master - Agent roles, workflows, and when to use them - Agent customization system - Best practices and common patterns -- **[Party Mode Guide](../../explanation/features/party-mode.md)** - Multi-agent collaboration +- **[Party Mode Guide](/docs/explanation/features/party-mode.md)** - Multi-agent collaboration - How party mode works (19+ agents collaborate in real-time) - When to use it (strategic, creative, cross-functional, complex) - Example party compositions @@ -67,7 +67,7 @@ Complete guide to BMM's AI agent team: Comprehensive guide for brownfield development: -- **[Brownfield Development Guide](../../how-to/brownfield/index.md)** - Complete guide for existing codebases +- **[Brownfield Development Guide](/docs/how-to/brownfield/index.md)** - Complete guide for existing codebases - Documentation phase strategies - Track selection for brownfield - Integration with existing patterns @@ -78,49 +78,49 @@ Comprehensive guide for brownfield development: Essential reference materials: -- **[Glossary](../../reference/glossary/index.md)** - Key terminology and concepts -- **[FAQ](../faq/index.md)** - Frequently asked questions across all topics +- **[Glossary](/docs/reference/glossary/index.md)** - Key terminology and concepts +- **[FAQ](/docs/explanation/faq/index.md)** - Frequently asked questions across all topics ## 🎯 Choose Your Path ### I need to... **Build something new (greenfield)** -→ Start with [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) +→ Start with [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) **Fix a bug or add small feature** -→ Use the [Quick Flow Solo Dev](../agents/barry-quick-flow.md) directly with its dedicated stand alone [Quick Bmad Spec Flow](../features/quick-flow.md) process +→ Use the [Quick Flow Solo Dev](/docs/explanation/agents/barry-quick-flow.md) directly with its dedicated stand alone [Quick Bmad Spec Flow](/docs/explanation/features/quick-flow.md) process **Work with existing codebase (brownfield)** -→ Read [Brownfield Development Guide](../../how-to/brownfield/index.md) +→ Read [Brownfield Development Guide](/docs/how-to/brownfield/index.md) → Pay special attention to documentation requirements for brownfield projects ## 📋 Workflow Guides Comprehensive documentation for all BMM workflows organized by phase: -- **[Phase 1: Analysis Workflows](../../how-to/workflows/run-brainstorming-session.md)** - Optional exploration and research workflows (595 lines) +- **[Phase 1: Analysis Workflows](/docs/how-to/workflows/run-brainstorming-session.md)** - Optional exploration and research workflows (595 lines) - brainstorm-project, product-brief, research, and more - When to use analysis workflows - Creative and strategic tools -- **[Phase 2: Planning Workflows](../../how-to/workflows/create-prd.md)** - Scale-adaptive planning (967 lines) +- **[Phase 2: Planning Workflows](/docs/how-to/workflows/create-prd.md)** - Scale-adaptive planning (967 lines) - prd, tech-spec, gdd, narrative, ux - Track-based planning approach (Quick Flow, BMad Method, Enterprise Method) - Which planning workflow to use -- **[Phase 3: Solutioning Workflows](../../how-to/workflows/create-architecture.md)** - Architecture and validation (638 lines) +- **[Phase 3: Solutioning Workflows](/docs/how-to/workflows/create-architecture.md)** - Architecture and validation (638 lines) - architecture, create-epics-and-stories, implementation-readiness - V6: Epics created AFTER architecture for better quality - Required for BMad Method and Enterprise Method tracks - Preventing agent conflicts -- **[Phase 4: Implementation Workflows](../../how-to/workflows/run-sprint-planning.md)** - Sprint-based development (1,634 lines) +- **[Phase 4: Implementation Workflows](/docs/how-to/workflows/run-sprint-planning.md)** - Sprint-based development (1,634 lines) - sprint-planning, create-story, dev-story, code-review - Complete story lifecycle - One-story-at-a-time discipline -- **[Testing & QA Workflows](../../explanation/features/tea-overview.md)** - Comprehensive quality assurance (1,420 lines) +- **[Testing & QA Workflows](/docs/explanation/features/tea-overview.md)** - Comprehensive quality assurance (1,420 lines) - Test strategy, automation, quality gates - TEA agent and test healing @@ -132,4 +132,4 @@ Comprehensive documentation for all BMM workflows organized by phase: - **[GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues)** - Report bugs or request features - **[YouTube Channel](https://www.youtube.com/@BMadCode)** - Video tutorials and walkthroughs -**Ready to begin?** → [Start with the Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) +**Ready to begin?** → [Start with the Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) diff --git a/docs/explanation/core-concepts/agent-roles.md b/docs/explanation/core-concepts/agent-roles.md index 1317ba24..f9717ac4 100644 --- a/docs/explanation/core-concepts/agent-roles.md +++ b/docs/explanation/core-concepts/agent-roles.md @@ -199,6 +199,6 @@ Fast solo development without handoffs. ## Related -- [What Are Agents](./what-are-agents.md) - Foundational concepts -- [Agent Reference](../../reference/agents/index.md) - Complete command reference -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) +- [What Are Agents](/docs/explanation/core-concepts/what-are-agents.md) - Foundational concepts +- [Agent Reference](/docs/reference/agents/index.md) - Complete command reference +- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) diff --git a/docs/explanation/core-concepts/index.md b/docs/explanation/core-concepts/index.md index 713a5e47..ef03bbd2 100644 --- a/docs/explanation/core-concepts/index.md +++ b/docs/explanation/core-concepts/index.md @@ -1,40 +1,40 @@ --- -title: "BMAD Core Concepts" +title: "BMad Core Concepts" --- -Understanding the fundamental building blocks of the BMAD Method. +Understanding the fundamental building blocks of the BMad Method. ## The Essentials | Concept | Description | Guide | |---------|-------------|-------| -| **Agents** | AI assistants with personas, capabilities, and menus | [Agents Guide](./what-are-agents.md) | -| **Workflows** | Structured processes for achieving specific outcomes | [Workflows Guide](./what-are-workflows.md) | -| **Modules** | Packaged collections of agents and workflows | [Modules Guide](./what-are-modules.md) | +| **Agents** | AI assistants with personas, capabilities, and menus | [Agents Guide](/docs/explanation/core-concepts/what-are-agents.md) | +| **Workflows** | Structured processes for achieving specific outcomes | [Workflows Guide](/docs/explanation/core-concepts/what-are-workflows.md) | +| **Modules** | Packaged collections of agents and workflows | [Modules Guide](/docs/explanation/core-concepts/what-are-modules.md) | ## Getting Started -### New to BMAD? -Start here to understand what BMAD is and how it works: +### New to BMad? +Start here to understand what BMad is and how it works: -1. **[Agents Guide](./what-are-agents.md)** - Learn about Simple and Expert agents -2. **[Workflows Guide](./what-are-workflows.md)** - Understand how workflows orchestrate tasks -3. **[Modules Guide](./what-are-modules.md)** - See how modules organize functionality +1. **[Agents Guide](/docs/explanation/core-concepts/what-are-agents.md)** - Learn about Simple and Expert agents +2. **[Workflows Guide](/docs/explanation/core-concepts/what-are-workflows.md)** - Understand how workflows orchestrate tasks +3. **[Modules Guide](/docs/explanation/core-concepts/what-are-modules.md)** - See how modules organize functionality -### Installing BMAD +### Installing BMad -- **[Installation Guide](../../how-to/installation/index.md)** - Set up BMAD in your project -- **[Upgrading from v4](../../how-to/installation/upgrade-to-v6.md)** - Migrate from earlier versions +- **[Installation Guide](/docs/how-to/installation/index.md)** - Set up BMad in your project +- **[Upgrading from v4](/docs/how-to/installation/upgrade-to-v6.md)** - Migrate from earlier versions ### Configuration -- **[BMAD Customization](../../how-to/customization/index.md)** - Personalize agents and workflows +- **[BMad Customization](/docs/how-to/customization/index.md)** - Personalize agents and workflows ### Advanced -- **[Web Bundles](../features/web-bundles.md)** - Use BMAD in Gemini Gems and Custom GPTs +- **[Web Bundles](/docs/explanation/features/web-bundles.md)** - Use BMad in Gemini Gems and Custom GPTs --- -**Next:** Read the [Agents Guide](./what-are-agents.md) to understand the core building block of BMAD. +**Next:** Read the [Agents Guide](/docs/explanation/core-concepts/what-are-agents.md) to understand the core building block of BMad. diff --git a/docs/explanation/core-concepts/what-are-agents.md b/docs/explanation/core-concepts/what-are-agents.md index e089fde3..1f3169b1 100644 --- a/docs/explanation/core-concepts/what-are-agents.md +++ b/docs/explanation/core-concepts/what-are-agents.md @@ -7,7 +7,7 @@ Agents are AI assistants that help you accomplish tasks. Each agent has a unique ## Agent Types -BMAD has two primary agent types, designed for different use cases: +BMad has two primary agent types, designed for different use cases: ### Simple Agents @@ -85,12 +85,12 @@ All agents share these building blocks: ## Creating Custom Agents -BMAD provides the **BMAD Builder (BMB)** module for creating your own agents. See the [Agent Creation Guide](../../tutorials/advanced/create-custom-agent.md) for step-by-step instructions. +BMad provides the **BMad Builder (BMB)** module for creating your own agents. See the [Agent Creation Guide](/docs/tutorials/advanced/create-custom-agent.md) for step-by-step instructions. ## Customizing Existing Agents -You can modify any agent's behavior without editing core files. See [BMAD Customization](../../how-to/customization/index.md) for details. It is critical to never modify an installed agents .md file directly and follow the customization process, this way future updates to the agent or module its part of will continue to be updated and recompiled with the installer tool, and your customizations will still be retained. +You can modify any agent's behavior without editing core files. See [BMad Customization](/docs/how-to/customization/index.md) for details. It is critical to never modify an installed agents .md file directly and follow the customization process, this way future updates to the agent or module its part of will continue to be updated and recompiled with the installer tool, and your customizations will still be retained. --- -**Next:** Learn about [Workflows](./what-are-workflows.md) to see how agents accomplish complex tasks. +**Next:** Learn about [Workflows](/docs/explanation/core-concepts/what-are-workflows.md) to see how agents accomplish complex tasks. diff --git a/docs/explanation/core-concepts/what-are-modules.md b/docs/explanation/core-concepts/what-are-modules.md index 85bfe865..3d6ae383 100644 --- a/docs/explanation/core-concepts/what-are-modules.md +++ b/docs/explanation/core-concepts/what-are-modules.md @@ -22,13 +22,13 @@ Always installed, provides shared functionality: - Core workflows (Party Mode, Advanced Elicitation, Brainstorming) - Common tasks (document indexing, sharding, review) -### BMAD Method (BMM) +### BMad Method (BMM) Software and game development: - Project planning workflows - Implementation agents (Dev, PM, QA, Scrum Master) - Testing and architecture guidance -### BMAD Builder (BMB) +### BMad Builder (BMB) Create custom solutions: - Agent creation workflows - Workflow authoring tools @@ -40,7 +40,7 @@ Innovation and creativity: - Innovation strategy workflows - Storytelling and ideation -### BMAD Game Dev (BMGD) +### BMad Game Dev (BMGD) Game development specialization: - Game design workflows - Narrative development @@ -53,8 +53,8 @@ Installed modules follow this structure: ``` _bmad/ ├── core/ # Always present -├── bmm/ # BMAD Method (if installed) -├── bmb/ # BMAD Builder (if installed) +├── bmm/ # BMad Method (if installed) +├── bmb/ # BMad Builder (if installed) ├── cis/ # Creative Intelligence (if installed) └── bmgd/ # Game Dev (if installed) ``` @@ -70,10 +70,10 @@ Custom modules are installed the same way as official modules. ## Installing Modules -During BMAD installation, you choose which modules to install. You can also add or remove modules later by re-running the installer. +During BMad installation, you choose which modules to install. You can also add or remove modules later by re-running the installer. -See [Installation Guide](../../how-to/installation/index.md) for details. +See [Installation Guide](/docs/how-to/installation/index.md) for details. --- -**Next:** Read the [Installation Guide](../../how-to/installation/index.md) to set up BMAD with the modules you need. +**Next:** Read the [Installation Guide](/docs/how-to/installation/index.md) to set up BMad with the modules you need. diff --git a/docs/explanation/core-concepts/what-are-workflows.md b/docs/explanation/core-concepts/what-are-workflows.md index 077ba371..19f7e97c 100644 --- a/docs/explanation/core-concepts/what-are-workflows.md +++ b/docs/explanation/core-concepts/what-are-workflows.md @@ -138,15 +138,15 @@ Each workflow checks for required inputs from prior workflows, validates they're ### The Tri-Modal Pattern -For critical workflows that produce important artifacts, BMAD uses a tri-modal structure: Create, Validate, and Edit. Each mode is a separate workflow path that can run independently or flow into the others. +For critical workflows that produce important artifacts, BMad uses a tri-modal structure: Create, Validate, and Edit. Each mode is a separate workflow path that can run independently or flow into the others. -**Create mode** builds new artifacts from scratch. But here's where it gets interesting: create mode can also function as a conversion tool. Feed it a non-compliant document—something that doesn't follow BMAD standards—and it will extract the essential content and rebuild it as a compliant artifact. This means you can bring in existing work and automatically upgrade it to follow proper patterns. +**Create mode** builds new artifacts from scratch. But here's where it gets interesting: create mode can also function as a conversion tool. Feed it a non-compliant document—something that doesn't follow BMad standards—and it will extract the essential content and rebuild it as a compliant artifact. This means you can bring in existing work and automatically upgrade it to follow proper patterns. **Validate mode** runs standalone and checks artifacts against standards. Because it's separate, you can run validation whenever you want—immediately after creation, weeks later when things have changed, or even using a different LLM entirely. It's like having a quality assurance checkpoint that's always available but never forced. **Edit mode** modifies existing artifacts while enforcing standards. As you update documents to reflect changing requirements or new understanding, edit mode ensures you don't accidentally drift away from the patterns that make the artifacts useful. It checks compliance as you work and can route back to create mode if it detects something that needs full conversion. -All BMAD planning workflows and the BMB module (will) use this tri-modal pattern. The pristine example is the workflow workflow in BMB—it creates workflow specifications, validates them against standards, and lets you edit them while maintaining compliance. You can study that workflow to see the pattern in action. +All BMad planning workflows and the BMB module (will) use this tri-modal pattern. The pristine example is the workflow workflow in BMB—it creates workflow specifications, validates them against standards, and lets you edit them while maintaining compliance. You can study that workflow to see the pattern in action. This tri-modal approach gives you the best of both worlds: the creativity and flexibility to build what you need, the quality assurance of validation that can run anytime, and the ability to iterate while staying true to standards that make the artifacts valuable across sessions and team members. @@ -170,7 +170,7 @@ Before building a workflow, answer these questions: ## Learning from Examples -The best way to understand workflows is to study real examples. Look at the official BMAD modules: +The best way to understand workflows is to study real examples. Look at the official BMad modules: - **BMB (Module Builder)**: Workflow and agent creation workflows - **BMM (Business Method Module)**: Complete software development pipeline from brainstorming through sprint planning diff --git a/docs/explanation/core/index.md b/docs/explanation/core/index.md index 4dc10550..de7687dc 100644 --- a/docs/explanation/core/index.md +++ b/docs/explanation/core/index.md @@ -3,16 +3,16 @@ title: "Core Module" --- -The Core Module is installed with all installations of BMAD modules and provides common functionality that any module, workflow, or agent can take advantage of. +The Core Module is installed with all installations of BMad modules and provides common functionality that any module, workflow, or agent can take advantage of. ## Core Module Components -- **[Global Core Config](../../reference/configuration/global-config.md)** — Inheritable configuration that impacts all modules and custom content -- **[Core Workflows](../../reference/workflows/core-workflows.md)** — Domain-agnostic workflows usable by any module - - [Party Mode](../../explanation/features/party-mode.md) — Multi-agent conversation orchestration - - [Brainstorming](../../explanation/features/brainstorming-techniques.md) — Structured creative sessions with 60+ techniques - - [Advanced Elicitation](../../explanation/features/advanced-elicitation.md) — LLM rethinking with 50+ reasoning methods -- **[Core Tasks](../../reference/configuration/core-tasks.md)** — Common tasks available across modules - - [Index Docs](../../reference/configuration/core-tasks.md#index-docs) — Generate directory index files - - [Adversarial Review](../../reference/configuration/core-tasks.md#adversarial-review-general) — Critical content review - - [Shard Document](../../reference/configuration/core-tasks.md#shard-document) — Split large documents into sections +- **[Global Core Config](/docs/reference/configuration/global-config.md)** — Inheritable configuration that impacts all modules and custom content +- **[Core Workflows](/docs/reference/workflows/core-workflows.md)** — Domain-agnostic workflows usable by any module + - [Party Mode](/docs/explanation/features/party-mode.md) — Multi-agent conversation orchestration + - [Brainstorming](/docs/explanation/features/brainstorming-techniques.md) — Structured creative sessions with 60+ techniques + - [Advanced Elicitation](/docs/explanation/features/advanced-elicitation.md) — LLM rethinking with 50+ reasoning methods +- **[Core Tasks](/docs/reference/configuration/core-tasks.md)** — Common tasks available across modules + - [Index Docs](/docs/reference/configuration/core-tasks.md#index-docs) — Generate directory index files + - [Adversarial Review](/docs/reference/configuration/core-tasks.md#adversarial-review-general) — Critical content review + - [Shard Document](/docs/reference/configuration/core-tasks.md#shard-document) — Split large documents into sections diff --git a/docs/explanation/creative-intelligence/index.md b/docs/explanation/creative-intelligence/index.md index 6101fa11..ecc3e7a9 100644 --- a/docs/explanation/creative-intelligence/index.md +++ b/docs/explanation/creative-intelligence/index.md @@ -117,5 +117,5 @@ CIS workflows integrate with: ## Related -- [Facilitation Over Generation](../philosophy/facilitation-over-generation.md) - Core philosophy -- [Brainstorming Techniques](../features/brainstorming-techniques.md) - Technique reference +- [Facilitation Over Generation](/docs/explanation/philosophy/facilitation-over-generation.md) - Core philosophy +- [Brainstorming Techniques](/docs/explanation/features/brainstorming-techniques.md) - Technique reference diff --git a/docs/explanation/faq/brownfield-faq.md b/docs/explanation/faq/brownfield-faq.md index 8aeec2aa..79e192b2 100644 --- a/docs/explanation/faq/brownfield-faq.md +++ b/docs/explanation/faq/brownfield-faq.md @@ -2,22 +2,25 @@ title: "Brownfield Development FAQ" description: Common questions about brownfield development in the BMad Method --- +Quick answers to common questions about brownfield (existing codebase) development in the BMad Method (BMM). +## Questions -Quick answers to common questions about brownfield (existing codebase) development in the BMad Method. +- [What is brownfield vs greenfield?](#what-is-brownfield-vs-greenfield) +- [Do I have to run document-project for brownfield?](#do-i-have-to-run-document-project-for-brownfield) +- [What if I forget to run document-project?](#what-if-i-forget-to-run-document-project) +- [Can I use Quick Spec Flow for brownfield projects?](#can-i-use-quick-spec-flow-for-brownfield-projects) +- [How does workflow-init handle old planning docs?](#how-does-workflow-init-handle-old-planning-docs) +- [What if my existing code doesn't follow best practices?](#what-if-my-existing-code-doesnt-follow-best-practices) ---- +### What is brownfield vs greenfield? -## Q: What is brownfield vs greenfield? +- **Greenfield** — New project, starting from scratch, clean slate +- **Brownfield** — Existing project, working with established codebase and patterns -**A:** +### Do I have to run document-project for brownfield? -- **Greenfield:** New project, starting from scratch, clean slate -- **Brownfield:** Existing project, working with established codebase and patterns - -## Q: Do I have to run document-project for brownfield? - -**A:** Highly recommended, especially if: +Highly recommended, especially if: - No existing documentation - Documentation is outdated @@ -26,9 +29,9 @@ Quick answers to common questions about brownfield (existing codebase) developme You can skip it if you have comprehensive, up-to-date documentation including `docs/index.md`. -## Q: What if I forget to run document-project on brownfield? +### What if I forget to run document-project? -**A:** Workflows will lack context about existing code. You may get: +Workflows will lack context about existing code. You may get: - Suggestions that don't match existing patterns - Integration approaches that miss existing APIs @@ -36,9 +39,9 @@ You can skip it if you have comprehensive, up-to-date documentation including `d Run document-project and restart planning with proper context. -## Q: Can I use Quick Spec Flow for brownfield projects? +### Can I use Quick Spec Flow for brownfield projects? -**A:** Yes! Quick Spec Flow works great for brownfield. It will: +Yes! Quick Spec Flow works great for brownfield. It will: - Auto-detect your existing stack - Analyze brownfield code patterns @@ -47,34 +50,24 @@ Run document-project and restart planning with proper context. Perfect for bug fixes and small features in existing codebases. -## Q: How does workflow-init handle brownfield with old planning docs? +### How does workflow-init handle old planning docs? -**A:** workflow-init asks about YOUR current work first, then uses old artifacts as context: +workflow-init asks about YOUR current work first, then uses old artifacts as context: 1. Shows what it found (old PRD, epics, etc.) 2. Asks: "Is this work in progress, previous effort, or proposed work?" 3. If previous effort: Asks you to describe your NEW work 4. Determines level based on YOUR work, not old artifacts -This prevents old Level 3 PRDs from forcing Level 3 workflow for new Level 0 bug fix. +This prevents old Level 3 PRDs from forcing Level 3 workflow for a new Level 0 bug fix. -## Q: What if my existing code doesn't follow best practices? +### What if my existing code doesn't follow best practices? -**A:** Quick Spec Flow detects your conventions and asks: "Should I follow these existing conventions?" You decide: +Quick Spec Flow detects your conventions and asks: "Should I follow these existing conventions?" You decide: - **Yes** → Maintain consistency with current codebase - **No** → Establish new standards (document why in tech-spec) -BMM respects your choice - it won't force modernization, but it will offer it. - ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Brownfield Guide](../../how-to/brownfield/index.md) - Existing codebase workflows -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- +BMM respects your choice — it won't force modernization, but it will offer it. **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/faq/getting-started-faq.md b/docs/explanation/faq/getting-started-faq.md index b7f7facb..424e1013 100644 --- a/docs/explanation/faq/getting-started-faq.md +++ b/docs/explanation/faq/getting-started-faq.md @@ -3,24 +3,29 @@ title: "Getting Started FAQ" description: Common questions about getting started with the BMad Method --- - Quick answers to common questions about getting started with the BMad Method. ---- +## Questions -## Q: Do I always need to run workflow-init? +- [Do I always need to run workflow-init?](#do-i-always-need-to-run-workflow-init) +- [Why do I need fresh chats for each workflow?](#why-do-i-need-fresh-chats-for-each-workflow) +- [Can I skip workflow-status and just start working?](#can-i-skip-workflow-status-and-just-start-working) +- [What's the minimum I need to get started?](#whats-the-minimum-i-need-to-get-started) +- [How do I know if I'm in Phase 1, 2, 3, or 4?](#how-do-i-know-if-im-in-phase-1-2-3-or-4) -**A:** No, once you learn the flow you can go directly to workflows. However, workflow-init is helpful because it: +### Do I always need to run workflow-init? + +No, once you learn the flow you can go directly to workflows. However, workflow-init is helpful because it: - Determines your project's appropriate level automatically - Creates the tracking status file - Routes you to the correct starting workflow -For experienced users: use the [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) to go directly to the right agent/workflow. +For experienced users: use the [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) to go directly to the right agent/workflow. -## Q: Why do I need fresh chats for each workflow? +### Why do I need fresh chats for each workflow? -**A:** Context-intensive workflows (like brainstorming, PRD creation, architecture design) can cause AI hallucinations if run in sequence within the same chat. Starting fresh ensures the agent has maximum context capacity for each workflow. This is particularly important for: +Context-intensive workflows (like brainstorming, PRD creation, architecture design) can cause AI hallucinations if run in sequence within the same chat. Starting fresh ensures the agent has maximum context capacity for each workflow. This is particularly important for: - Planning workflows (PRD, architecture) - Analysis workflows (brainstorming, research) @@ -28,39 +33,30 @@ For experienced users: use the [Quick Start Guide](../../tutorials/getting-start Quick workflows like status checks can reuse chats safely. -## Q: Can I skip workflow-status and just start working? +### Can I skip workflow-status and just start working? -**A:** Yes, if you already know your project level and which workflow comes next. workflow-status is mainly useful for: +Yes, if you already know your project level and which workflow comes next. workflow-status is mainly useful for: - New projects (guides initial setup) - When you're unsure what to do next - After breaks in work (reminds you where you left off) - Checking overall progress -## Q: What's the minimum I need to get started? +### What's the minimum I need to get started? -**A:** For the fastest path: +For the fastest path: 1. Install BMad Method: `npx bmad-method@alpha install` 2. For small changes: Load PM agent → run tech-spec → implement 3. For larger projects: Load PM agent → run prd → architect → implement -## Q: How do I know if I'm in Phase 1, 2, 3, or 4? +### How do I know if I'm in Phase 1, 2, 3, or 4? -**A:** Check your `bmm-workflow-status.md` file (created by workflow-init). It shows your current phase and progress. If you don't have this file, you can also tell by what you're working on: +Check your `bmm-workflow-status.md` file (created by workflow-init). It shows your current phase and progress. If you don't have this file, you can also tell by what you're working on: -- **Phase 1** - Brainstorming, research, product brief (optional) -- **Phase 2** - Creating either a PRD or tech-spec (always required) -- **Phase 3** - Architecture design (Level 2-4 only) -- **Phase 4** - Actually writing code, implementing stories - ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- +- **Phase 1** — Brainstorming, research, product brief (optional) +- **Phase 2** — Creating either a PRD or tech-spec (always required) +- **Phase 3** — Architecture design (Level 2-4 only) +- **Phase 4** — Actually writing code, implementing stories **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/faq/implementation-faq.md b/docs/explanation/faq/implementation-faq.md index bbc35273..fe4f64cb 100644 --- a/docs/explanation/faq/implementation-faq.md +++ b/docs/explanation/faq/implementation-faq.md @@ -3,54 +3,50 @@ title: "Implementation FAQ" description: Common questions about implementation in the BMad Method --- - Quick answers to common questions about implementation in the BMad Method. ---- +## Questions -## Q: Does create-story include implementation context? +- [Does create-story include implementation context?](#does-create-story-include-implementation-context) +- [How do I mark a story as done?](#how-do-i-mark-a-story-as-done) +- [Can I work on multiple stories at once?](#can-i-work-on-multiple-stories-at-once) +- [What if my story takes longer than estimated?](#what-if-my-story-takes-longer-than-estimated) +- [When should I run retrospective?](#when-should-i-run-retrospective) -**A:** Yes! The create-story workflow generates story files that include implementation-specific guidance, references existing patterns from your documentation, and provides technical context. The workflow loads your architecture, PRD, and existing project documentation to create comprehensive stories. For Quick Flow projects using tech-spec, the tech-spec itself is already comprehensive, so stories can be simpler. +### Does create-story include implementation context? -## Q: How do I mark a story as done? +Yes! The create-story workflow generates story files that include implementation-specific guidance, references existing patterns from your documentation, and provides technical context. The workflow loads your architecture, PRD, and existing project documentation to create comprehensive stories. For Quick Flow projects using tech-spec, the tech-spec itself is already comprehensive, so stories can be simpler. -**A:** After dev-story completes and code-review passes: +### How do I mark a story as done? + +After dev-story completes and code-review passes: 1. Open `sprint-status.yaml` (created by sprint-planning) 2. Change the story status from `review` to `done` 3. Save the file -## Q: Can I work on multiple stories at once? +### Can I work on multiple stories at once? -**A:** Yes, if you have capacity! Stories within different epics can be worked in parallel. However, stories within the same epic are usually sequential because they build on each other. +Yes, if you have capacity! Stories within different epics can be worked in parallel. However, stories within the same epic are usually sequential because they build on each other. -## Q: What if my story takes longer than estimated? +### What if my story takes longer than estimated? -**A:** That's normal! Stories are estimates. If implementation reveals more complexity: +That's normal! Stories are estimates. If implementation reveals more complexity: 1. Continue working until DoD is met 2. Consider if story should be split 3. Document learnings in retrospective 4. Adjust future estimates based on this learning -## Q: When should I run retrospective? +### When should I run retrospective? -**A:** After completing all stories in an epic (when epic is done). Retrospectives capture: +After completing all stories in an epic (when epic is done). Retrospectives capture: - What went well - What could improve - Technical insights - Learnings for future epics -Don't wait until project end - run after each epic for continuous improvement. - ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- +Don't wait until project end — run after each epic for continuous improvement. **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/faq/index.md b/docs/explanation/faq/index.md index bd92c7a6..2ccd7d3a 100644 --- a/docs/explanation/faq/index.md +++ b/docs/explanation/faq/index.md @@ -3,15 +3,14 @@ title: "Frequently Asked Questions" description: Frequently asked questions about the BMad Method --- - Quick answers to common questions about the BMad Method, organized by topic. ## Topics -- [Getting Started](./getting-started-faq.md) - Questions about starting with BMM -- [Levels & Tracks](./levels-and-tracks-faq.md) - Choosing the right level -- [Workflows](./workflows-faq.md) - Workflow and phase questions -- [Planning](./planning-faq.md) - Planning document questions -- [Implementation](./implementation-faq.md) - Implementation questions -- [Brownfield](./brownfield-faq.md) - Existing codebase questions -- [Tools & Advanced](./tools-faq.md) - Tools, IDEs, and advanced topics +- [Getting Started](/docs/explanation/faq/getting-started-faq.md) - Questions about starting with BMad +- [Levels & Tracks](/docs/explanation/faq/levels-and-tracks-faq.md) - Choosing the right level +- [Workflows](/docs/explanation/faq/workflows-faq.md) - Workflow and phase questions +- [Planning](/docs/explanation/faq/planning-faq.md) - Planning document questions +- [Implementation](/docs/explanation/faq/implementation-faq.md) - Implementation questions +- [Brownfield](/docs/explanation/faq/brownfield-faq.md) - Existing codebase questions +- [Tools & Advanced](/docs/explanation/faq/tools-faq.md) - Tools, IDEs, and advanced topics diff --git a/docs/explanation/faq/levels-and-tracks-faq.md b/docs/explanation/faq/levels-and-tracks-faq.md index 154b3ae3..acce6ae1 100644 --- a/docs/explanation/faq/levels-and-tracks-faq.md +++ b/docs/explanation/faq/levels-and-tracks-faq.md @@ -3,41 +3,44 @@ title: "Levels and Tracks FAQ" description: Common questions about choosing the right level for your project --- - Quick answers to common questions about choosing the right level for your BMad Method project. ---- +## Questions -## Q: How do I know which level my project is? +- [How do I know which level my project is?](#how-do-i-know-which-level-my-project-is) +- [Can I change levels mid-project?](#can-i-change-levels-mid-project) +- [What if workflow-init suggests the wrong level?](#what-if-workflow-init-suggests-the-wrong-level) +- [Do I always need architecture for Level 2?](#do-i-always-need-architecture-for-level-2) +- [What's the difference between Level 1 and Level 2?](#whats-the-difference-between-level-1-and-level-2) -**A:** Use workflow-init for automatic detection, or self-assess using these keywords: +### How do I know which level my project is? -- **Level 0:** "fix", "bug", "typo", "small change", "patch" → 1 story -- **Level 1:** "simple", "basic", "small feature", "add" → 1-10 stories -- **Level 2:** "dashboard", "several features", "admin panel" → 5-15 stories -- **Level 3:** "platform", "integration", "complex", "system" → 12-40 stories -- **Level 4:** "enterprise", "multi-tenant", "multiple products" → 40+ stories +Use workflow-init for automatic detection, or self-assess using these keywords: + +- **Level 0** — "fix", "bug", "typo", "small change", "patch" → 1 story +- **Level 1** — "simple", "basic", "small feature", "add" → 1-10 stories +- **Level 2** — "dashboard", "several features", "admin panel" → 5-15 stories +- **Level 3** — "platform", "integration", "complex", "system" → 12-40 stories +- **Level 4** — "enterprise", "multi-tenant", "multiple products" → 40+ stories When in doubt, start smaller. You can always run create-prd later if needed. -## Q: Can I change levels mid-project? +### Can I change levels mid-project? -**A:** Yes! If you started at Level 1 but realize it's Level 2, you can run create-prd to add proper planning docs. The system is flexible - your initial level choice isn't permanent. +Yes! If you started at Level 1 but realize it's Level 2, you can run create-prd to add proper planning docs. The system is flexible — your initial level choice isn't permanent. -## Q: What if workflow-init suggests the wrong level? +### What if workflow-init suggests the wrong level? -**A:** You can override it! workflow-init suggests a level but always asks for confirmation. If you disagree, just say so and choose the level you think is appropriate. Trust your judgment. +You can override it! workflow-init suggests a level but always asks for confirmation. If you disagree, just say so and choose the level you think is appropriate. Trust your judgment. -## Q: Do I always need architecture for Level 2? +### Do I always need architecture for Level 2? -**A:** No, architecture is **optional** for Level 2. Only create architecture if you need system-level design. Many Level 2 projects work fine with just PRD created during planning. +No, architecture is **optional** for Level 2. Only create architecture if you need system-level design. Many Level 2 projects work fine with just PRD created during planning. -## Q: What's the difference between Level 1 and Level 2? +### What's the difference between Level 1 and Level 2? -**A:** - -- **Level 1:** 1-10 stories, uses tech-spec (simpler, faster), no architecture -- **Level 2:** 5-15 stories, uses PRD (product-focused), optional architecture +- **Level 1** — 1-10 stories, uses tech-spec (simpler, faster), no architecture +- **Level 2** — 5-15 stories, uses PRD (product-focused), optional architecture The overlap (5-10 stories) is intentional. Choose based on: @@ -46,13 +49,4 @@ The overlap (5-10 stories) is intentional. Choose based on: - Multiple epics? → Level 2 - Single epic? → Level 1 ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- - **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/faq/planning-faq.md b/docs/explanation/faq/planning-faq.md index 35de44d4..c6ab49fe 100644 --- a/docs/explanation/faq/planning-faq.md +++ b/docs/explanation/faq/planning-faq.md @@ -3,22 +3,25 @@ title: "Planning Documents FAQ" description: Common questions about planning documents in the BMad Method --- - Quick answers to common questions about planning documents in the BMad Method. ---- +## Questions -## Q: Why no tech-spec at Level 2+? +- [Why no tech-spec at Level 2+?](#why-no-tech-spec-at-level-2) +- [Do I need a PRD for a bug fix?](#do-i-need-a-prd-for-a-bug-fix) +- [Can I skip the product brief?](#can-i-skip-the-product-brief) -**A:** Level 2+ projects need product-level planning (PRD) and system-level design (Architecture), which tech-spec doesn't provide. Tech-spec is too narrow for coordinating multiple features. Instead, Level 2-4 uses: +### Why no tech-spec at Level 2+? + +Level 2+ projects need product-level planning (PRD) and system-level design (Architecture), which tech-spec doesn't provide. Tech-spec is too narrow for coordinating multiple features. Instead, Level 2-4 uses: - PRD (product vision, functional requirements, non-functional requirements) - Architecture (system design) - Epics+Stories (created AFTER architecture is complete) -## Q: Do I need a PRD for a bug fix? +### Do I need a PRD for a bug fix? -**A:** No! Bug fixes are typically Level 0 (single atomic change). Use Quick Spec Flow: +No! Bug fixes are typically Level 0 (single atomic change). Use Quick Spec Flow: - Load PM agent - Run tech-spec workflow @@ -26,22 +29,13 @@ Quick answers to common questions about planning documents in the BMad Method. PRDs are for Level 2-4 projects with multiple features requiring product-level coordination. -## Q: Can I skip the product brief? +### Can I skip the product brief? -**A:** Yes, product brief is always optional. It's most valuable for: +Yes, product brief is always optional. It's most valuable for: - Level 3-4 projects needing strategic direction - Projects with stakeholders requiring alignment - Novel products needing market research - When you want to explore solution space before committing ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- - **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/faq/tools-faq.md b/docs/explanation/faq/tools-faq.md index 313af199..215d90e3 100644 --- a/docs/explanation/faq/tools-faq.md +++ b/docs/explanation/faq/tools-faq.md @@ -3,16 +3,38 @@ title: "Tools and Advanced FAQ" description: Common questions about tools, IDEs, and advanced topics in the BMad Method --- - Quick answers to common questions about tools, IDEs, and advanced topics in the BMad Method. ---- +## Questions + +**Tools and Technical** + +- [Why are my Mermaid diagrams not rendering?](#why-are-my-mermaid-diagrams-not-rendering) +- [Can I use BMM with GitHub Copilot / Cursor / other AI tools?](#can-i-use-bmm-with-github-copilot--cursor--other-ai-tools) +- [What IDEs/tools support BMM?](#what-idestools-support-bmm) +- [Can I customize agents?](#can-i-customize-agents) +- [What happens to my planning docs after implementation?](#what-happens-to-my-planning-docs-after-implementation) +- [Can I use BMM for non-software projects?](#can-i-use-bmm-for-non-software-projects) + +**Advanced** + +- [What if my project grows from Level 1 to Level 3?](#what-if-my-project-grows-from-level-1-to-level-3) +- [Can I mix greenfield and brownfield approaches?](#can-i-mix-greenfield-and-brownfield-approaches) +- [How do I handle urgent hotfixes during a sprint?](#how-do-i-handle-urgent-hotfixes-during-a-sprint) +- [What if I disagree with the workflow's recommendations?](#what-if-i-disagree-with-the-workflows-recommendations) +- [Can multiple developers work on the same BMM project?](#can-multiple-developers-work-on-the-same-bmm-project) +- [What is party mode and when should I use it?](#what-is-party-mode-and-when-should-i-use-it) + +**Getting Help** + +- [Where do I get help if my question isn't answered here?](#where-do-i-get-help-if-my-question-isnt-answered-here) +- [How do I report a bug or request a feature?](#how-do-i-report-a-bug-or-request-a-feature) ## Tools and Technical -### Q: Why are my Mermaid diagrams not rendering? +### Why are my Mermaid diagrams not rendering? -**A:** Common issues: +Common issues: 1. Missing language tag: Use ` ```mermaid` not just ` ``` ` 2. Syntax errors in diagram (validate at mermaid.live) @@ -20,9 +42,9 @@ Quick answers to common questions about tools, IDEs, and advanced topics in the All BMM docs use valid Mermaid syntax that should render in GitHub, VS Code, and most IDEs. -### Q: Can I use BMM with GitHub Copilot / Cursor / other AI tools? +### Can I use BMM with GitHub Copilot / Cursor / other AI tools? -**A:** Yes! BMM is complementary. BMM handles: +Yes! BMM is complementary. BMM handles: - Project planning and structure - Workflow orchestration @@ -38,13 +60,13 @@ Your AI coding assistant handles: Use them together for best results. -### Q: What IDEs/tools support BMM? +### What IDEs/tools support BMM? -**A:** BMM requires tools with **agent mode** and access to **high-quality LLM models** that can load and follow complex workflows, then properly implement code changes. +BMM requires tools with **agent mode** and access to **high-quality LLM models** that can load and follow complex workflows, then properly implement code changes. **Recommended Tools:** -- **Claude Code** - Best choice +- **Claude Code** — Best choice - Sonnet 4.5 (excellent workflow following, coding, reasoning) - Opus (maximum context, complex planning) - Native agent mode designed for BMM workflows @@ -61,22 +83,22 @@ Use them together for best results. **What Matters:** -1. **Agent mode** - Can load long workflow instructions and maintain context -2. **High-quality LLM** - Models ranked high on SWE-bench (coding benchmarks) -3. **Model selection** - Access to Claude Sonnet 4.5, Opus, or GPT-4o class models -4. **Context capacity** - Can handle large planning documents and codebases +1. **Agent mode** — Can load long workflow instructions and maintain context +2. **High-quality LLM** — Models ranked high on SWE-bench (coding benchmarks) +3. **Model selection** — Access to Claude Sonnet 4.5, Opus, or GPT-4o class models +4. **Context capacity** — Can handle large planning documents and codebases **Why model quality matters:** BMM workflows require LLMs that can follow multi-step processes, maintain context across phases, and implement code that adheres to specifications. Tools with weaker models will struggle with workflow adherence and code quality. -### Q: Can I customize agents? +### Can I customize agents? -**A:** Yes! Agents are installed as markdown files with XML-style content (optimized for LLMs, readable by any model). Create customization files in `_bmad/_config/agents/[agent-name].customize.yaml` to override default behaviors while keeping core functionality intact. See agent documentation for customization options. +Yes! Agents are installed as markdown files with XML-style content (optimized for LLMs, readable by any model). Create customization files in `_bmad/_config/agents/[agent-name].customize.yaml` to override default behaviors while keeping core functionality intact. See agent documentation for customization options. -**Note:** While source agents in this repo are YAML, they install as `.md` files with XML-style tags - a format any LLM can read and follow. +**Note:** While source agents in this repo are YAML, they install as `.md` files with XML-style tags — a format any LLM can read and follow. -### Q: What happens to my planning docs after implementation? +### What happens to my planning docs after implementation? -**A:** Keep them! They serve as: +Keep them! They serve as: - Historical record of decisions - Onboarding material for new team members @@ -85,37 +107,35 @@ Use them together for best results. For enterprise projects (Level 4), consider archiving completed planning artifacts to keep workspace clean. -### Q: Can I use BMM for non-software projects? +### Can I use BMM for non-software projects? -**A:** BMM is optimized for software development, but the methodology principles (scale-adaptive planning, just-in-time design, context injection) can apply to other complex project types. You'd need to adapt workflows and agents for your domain. +BMM is optimized for software development, but the methodology principles (scale-adaptive planning, just-in-time design, context injection) can apply to other complex project types. You'd need to adapt workflows and agents for your domain. ---- +## Advanced -## Advanced Questions +### What if my project grows from Level 1 to Level 3? -### Q: What if my project grows from Level 1 to Level 3? - -**A:** Totally fine! When you realize scope has grown: +Totally fine! When you realize scope has grown: 1. Run create-prd to add product-level planning 2. Run create-architecture for system design 3. Use existing tech-spec as input for PRD 4. Continue with updated level -The system is flexible - growth is expected. +The system is flexible — growth is expected. -### Q: Can I mix greenfield and brownfield approaches? +### Can I mix greenfield and brownfield approaches? -**A:** Yes! Common scenario: adding new greenfield feature to brownfield codebase. Approach: +Yes! Common scenario: adding new greenfield feature to brownfield codebase. Approach: 1. Run document-project for brownfield context 2. Use greenfield workflows for new feature planning 3. Explicitly document integration points between new and existing 4. Test integration thoroughly -### Q: How do I handle urgent hotfixes during a sprint? +### How do I handle urgent hotfixes during a sprint? -**A:** Use correct-course workflow or just: +Use correct-course workflow or just: 1. Save your current work state 2. Load PM agent → quick tech-spec for hotfix @@ -125,25 +145,25 @@ The system is flexible - growth is expected. Level 0 Quick Spec Flow is perfect for urgent fixes. -### Q: What if I disagree with the workflow's recommendations? +### What if I disagree with the workflow's recommendations? -**A:** Workflows are guidance, not enforcement. If a workflow recommends something that doesn't make sense for your context: +Workflows are guidance, not enforcement. If a workflow recommends something that doesn't make sense for your context: - Explain your reasoning to the agent - Ask for alternative approaches - Skip the recommendation if you're confident - Document why you deviated (for future reference) -Trust your expertise - BMM supports your decisions. +Trust your expertise — BMM supports your decisions. -### Q: Can multiple developers work on the same BMM project? +### Can multiple developers work on the same BMM project? -**A:** Yes! But the paradigm is fundamentally different from traditional agile teams. +Yes! But the paradigm is fundamentally different from traditional agile teams. **Key Difference:** -- **Traditional:** Multiple devs work on stories within one epic (months) -- **Agentic:** Each dev owns complete epics (days) +- **Traditional** — Multiple devs work on stories within one epic (months) +- **Agentic** — Each dev owns complete epics (days) **In traditional agile:** A team of 5 devs might spend 2-3 months on a single epic, with each dev owning different stories. @@ -177,9 +197,9 @@ Trust your expertise - BMM supports your decisions. - Coordinate at epic boundaries, not story level - Use git submodules for BMM in enterprise settings -### Q: What is party mode and when should I use it? +### What is party mode and when should I use it? -**A:** Party mode is a unique multi-agent collaboration feature where ALL your installed agents (19+ from BMM, CIS, BMB, custom modules) discuss your challenges together in real-time. +Party mode is a unique multi-agent collaboration feature where ALL your installed agents (19+ from BMM, CIS, BMB, custom modules) discuss your challenges together in real-time. **How it works:** @@ -197,9 +217,9 @@ Trust your expertise - BMM supports your decisions. **Example parties:** -- **Product Strategy:** PM + Innovation Strategist (CIS) + Analyst -- **Technical Design:** Architect + Creative Problem Solver (CIS) + Game Architect -- **User Experience:** UX Designer + Design Thinking Coach (CIS) + Storyteller (CIS) +- **Product Strategy** — PM + Innovation Strategist (CIS) + Analyst +- **Technical Design** — Architect + Creative Problem Solver (CIS) + Game Architect +- **User Experience** — UX Designer + Design Thinking Coach (CIS) + Storyteller (CIS) **Why it's powerful:** @@ -208,26 +228,20 @@ Trust your expertise - BMM supports your decisions. - Emergent insights from agent interaction - Natural collaboration across modules -**For complete documentation:** - -👉 **[Party Mode Guide](../../explanation/features/party-mode.md)** - How it works, when to use it, example compositions, best practices - ---- +**For complete documentation:** See the [Party Mode Guide](/docs/explanation/features/party-mode.md) ## Getting Help -### Q: Where do I get help if my question isn't answered here? - -**A:** +### Where do I get help if my question isn't answered here? 1. Search [Complete Documentation](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/README.md) for related topics 2. Ask in [Discord Community](https://discord.gg/gk8jAdXWmj) (#bmad-method-help) 3. Open a [GitHub Issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) 4. Watch [YouTube Tutorials](https://www.youtube.com/@BMadCode) -### Q: How do I report a bug or request a feature? +### How do I report a bug or request a feature? -**A:** Open a GitHub issue at: +Open a GitHub issue at: Please include: @@ -236,13 +250,4 @@ Please include: - Expected vs actual behavior - Relevant workflow or agent involved ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- - **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/faq/workflows-faq.md b/docs/explanation/faq/workflows-faq.md index fbd245f2..9e92121f 100644 --- a/docs/explanation/faq/workflows-faq.md +++ b/docs/explanation/faq/workflows-faq.md @@ -3,66 +3,59 @@ title: "Workflows FAQ" description: Common questions about BMad Method workflows and phases --- - Quick answers to common questions about BMad Method workflows and phases. ---- +## Questions -## Q: What's the difference between workflow-status and workflow-init? +- [What's the difference between workflow-status and workflow-init?](#whats-the-difference-between-workflow-status-and-workflow-init) +- [Can I skip Phase 1 (Analysis)?](#can-i-skip-phase-1-analysis) +- [When is Phase 3 (Architecture) required?](#when-is-phase-3-architecture-required) +- [What happens if I skip a recommended workflow?](#what-happens-if-i-skip-a-recommended-workflow) +- [How do I know when Phase 3 is complete?](#how-do-i-know-when-phase-3-is-complete) +- [Can I run workflows in parallel?](#can-i-run-workflows-in-parallel) -**A:** +### What's the difference between workflow-status and workflow-init? -- **workflow-status:** Checks existing status and tells you what's next (use when continuing work) -- **workflow-init:** Creates new status file and sets up project (use when starting new project) +- **workflow-status** — Checks existing status and tells you what's next (use when continuing work) +- **workflow-init** — Creates new status file and sets up project (use when starting new project) If status file exists, use workflow-status. If not, use workflow-init. -## Q: Can I skip Phase 1 (Analysis)? +### Can I skip Phase 1 (Analysis)? -**A:** Yes! Phase 1 is optional for all levels, though recommended for complex projects. Skip if: +Yes! Phase 1 is optional for all levels, though recommended for complex projects. Skip if: - Requirements are clear - No research needed - Time-sensitive work - Small changes (Level 0-1) -## Q: When is Phase 3 (Architecture) required? +### When is Phase 3 (Architecture) required? -**A:** +- **Level 0-1** — Never (skip entirely) +- **Level 2** — Optional (only if system design needed) +- **Level 3-4** — Required (comprehensive architecture mandatory) -- **Level 0-1:** Never (skip entirely) -- **Level 2:** Optional (only if system design needed) -- **Level 3-4:** Required (comprehensive architecture mandatory) +### What happens if I skip a recommended workflow? -## Q: What happens if I skip a recommended workflow? - -**A:** Nothing breaks! Workflows are guidance, not enforcement. However, skipping recommended workflows (like architecture for Level 3) may cause: +Nothing breaks! Workflows are guidance, not enforcement. However, skipping recommended workflows (like architecture for Level 3) may cause: - Integration issues during implementation - Rework due to poor planning - Conflicting design decisions - Longer development time overall -## Q: How do I know when Phase 3 is complete and I can start Phase 4? +### How do I know when Phase 3 is complete? -**A:** For Level 3-4, run the implementation-readiness workflow. It validates PRD + Architecture + Epics + UX (optional) are aligned before implementation. Pass the gate check = ready for Phase 4. +For Level 3-4, run the implementation-readiness workflow. It validates PRD + Architecture + Epics + UX (optional) are aligned before implementation. Pass the gate check = ready for Phase 4. -## Q: Can I run workflows in parallel or do they have to be sequential? +### Can I run workflows in parallel? -**A:** Most workflows must be sequential within a phase: +Most workflows must be sequential within a phase: -- Phase 1: brainstorm → research → product-brief (optional order) -- Phase 2: PRD must complete before moving forward -- Phase 3: architecture → epics+stories → implementation-readiness (sequential) -- Phase 4: Stories within an epic should generally be sequential, but stories in different epics can be parallel if you have capacity - ---- - -## Related Documentation - -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Get started with BMM -- [Glossary](../../reference/glossary/index.md) - Terminology reference - ---- +- **Phase 1** — brainstorm → research → product-brief (optional order) +- **Phase 2** — PRD must complete before moving forward +- **Phase 3** — architecture → epics+stories → implementation-readiness (sequential) +- **Phase 4** — Stories within an epic should generally be sequential, but stories in different epics can be parallel if you have capacity **Have a question not answered here?** Please [open an issue](https://github.com/bmad-code-org/BMAD-METHOD/issues) or ask in [Discord](https://discord.gg/gk8jAdXWmj) so we can add it! diff --git a/docs/explanation/features/advanced-elicitation.md b/docs/explanation/features/advanced-elicitation.md index af08f02e..db445770 100644 --- a/docs/explanation/features/advanced-elicitation.md +++ b/docs/explanation/features/advanced-elicitation.md @@ -42,7 +42,7 @@ Based on context, 5 methods are intelligently selected from a library of 50+ tec - Each method builds on previous enhancements ### 4. Party Mode Integration (Optional) -If Party Mode is active, BMAD agents participate randomly in the elicitation process, adding their unique perspectives to the methods. +If Party Mode is active, BMad agents participate randomly in the elicitation process, adding their unique perspectives to the methods. --- diff --git a/docs/explanation/features/party-mode.md b/docs/explanation/features/party-mode.md index 660ed6ea..a3a494fa 100644 --- a/docs/explanation/features/party-mode.md +++ b/docs/explanation/features/party-mode.md @@ -103,9 +103,9 @@ _(Multiple perspectives reveal the right answer)_ ## Related Documentation -- [Agents Reference](../../reference/agents/index.md) - Complete agent reference -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM -- [Setup Party Mode](../../how-to/workflows/setup-party-mode.md) - How to use it +- [Agents Reference](/docs/reference/agents/index.md) - Complete agent reference +- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM +- [Setup Party Mode](/docs/how-to/workflows/setup-party-mode.md) - How to use it --- diff --git a/docs/explanation/features/quick-flow.md b/docs/explanation/features/quick-flow.md index fe2723c7..23ca08cc 100644 --- a/docs/explanation/features/quick-flow.md +++ b/docs/explanation/features/quick-flow.md @@ -164,6 +164,6 @@ Start with Quick Flow, but switch to BMad Method when: ## Related -- [Create Tech Spec](../../how-to/workflows/create-tech-spec.md) - How to use Quick Flow -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Getting started -- [Four Phases](../architecture/four-phases.md) - Understanding the full methodology +- [Create Tech Spec](/docs/how-to/workflows/create-tech-spec.md) - How to use Quick Flow +- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started +- [Four Phases](/docs/explanation/architecture/four-phases.md) - Understanding the full methodology diff --git a/docs/explanation/features/tea-overview.md b/docs/explanation/features/tea-overview.md index b8666cb8..11e4c8f3 100644 --- a/docs/explanation/features/tea-overview.md +++ b/docs/explanation/features/tea-overview.md @@ -214,5 +214,5 @@ Epic/Release Gate → TEA: *nfr-assess, *trace Phase 2 (release decision) ## Related Documentation -- [Setup Test Framework](../../how-to/workflows/setup-test-framework.md) - How to set up testing infrastructure -- [Run Test Design](../../how-to/workflows/run-test-design.md) - Creating test plans +- [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md) - How to set up testing infrastructure +- [Run Test Design](/docs/how-to/workflows/run-test-design.md) - Creating test plans diff --git a/docs/explanation/features/web-bundles.md b/docs/explanation/features/web-bundles.md index aeef17e1..79a93950 100644 --- a/docs/explanation/features/web-bundles.md +++ b/docs/explanation/features/web-bundles.md @@ -3,7 +3,7 @@ title: "Web Bundles" --- -Use BMAD agents in Gemini Gems and Custom GPTs. +Use BMad agents in Gemini Gems and Custom GPTs. ## Status @@ -25,7 +25,7 @@ Web bundles package BMad agents as self-contained files that work in Gemini Gems **Perfect for:** - Uploading a single file to a Gemini GEM or Custom GPT -- Using BMAD Method from the Web +- Using BMad Method from the Web - Cost savings (generally lower cost than local usage) - Quick sharing of agent configurations @@ -33,5 +33,3 @@ Web bundles package BMad agents as self-contained files that work in Gemini Gems - Some quality reduction vs local usage - Less convenient than full local installation - Limited to agent capabilities (no workflow file access) - -[← Back to Core Concepts](../index.md) diff --git a/docs/explanation/game-dev/agents.md b/docs/explanation/game-dev/agents.md index 8d07d7af..1c429683 100644 --- a/docs/explanation/game-dev/agents.md +++ b/docs/explanation/game-dev/agents.md @@ -405,6 +405,6 @@ The `project-context.md` file (if present) serves as the authoritative source fo ## Next Steps -- **[Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD -- **[Workflows Guide](../../reference/workflows/index.md)** - Detailed workflow reference -- **[Game Types Guide](../../explanation/game-dev/game-types.md)** - Game type templates +- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD +- **[Workflows Guide](/docs/reference/workflows/index.md)** - Detailed workflow reference +- **[Game Types Guide](/docs/explanation/game-dev/game-types.md)** - Game type templates diff --git a/docs/explanation/game-dev/bmgd-vs-bmm.md b/docs/explanation/game-dev/bmgd-vs-bmm.md index a5f5588a..3ce2d181 100644 --- a/docs/explanation/game-dev/bmgd-vs-bmm.md +++ b/docs/explanation/game-dev/bmgd-vs-bmm.md @@ -145,6 +145,6 @@ This means you get all of BMM's implementation structure plus game-specific enha ## Related -- [BMGD Overview](./index.md) - Getting started with BMGD -- [Game Types Guide](./game-types.md) - Understanding game templates -- [Quick Start BMGD](../../tutorials/getting-started/quick-start-bmgd.md) - Tutorial +- [BMGD Overview](/docs/explanation/game-dev/index.md) - Getting started with BMGD +- [Game Types Guide](/docs/explanation/game-dev/game-types.md) - Understanding game templates +- [Quick Start BMGD](/docs/tutorials/getting-started/quick-start-bmgd.md) - Tutorial diff --git a/docs/explanation/game-dev/game-types.md b/docs/explanation/game-dev/game-types.md index 9de71c96..1e754035 100644 --- a/docs/explanation/game-dev/game-types.md +++ b/docs/explanation/game-dev/game-types.md @@ -501,6 +501,6 @@ When you select a game type, BMGD adds these GDD sections: ## Next Steps -- **[Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD -- **[Workflows Guide](../../reference/workflows/bmgd-workflows.md)** - GDD workflow details -- **[Glossary](../../reference/glossary/index.md)** - Game development terminology +- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD +- **[Workflows Guide](/docs/reference/workflows/bmgd-workflows.md)** - GDD workflow details +- **[Glossary](/docs/reference/glossary/index.md)** - Game development terminology diff --git a/docs/explanation/game-dev/index.md b/docs/explanation/game-dev/index.md index a85c6bac..b84704a4 100644 --- a/docs/explanation/game-dev/index.md +++ b/docs/explanation/game-dev/index.md @@ -12,7 +12,7 @@ Complete guides for the BMad Game Development Module (BMGD) - AI-powered workflo **New to BMGD?** Start here: -- **[Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md)** - Get started building your first game +- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started building your first game - Installation and setup - Understanding the game development phases - Running your first workflows @@ -24,8 +24,8 @@ Complete guides for the BMad Game Development Module (BMGD) - AI-powered workflo ## Core Documentation -- **[Game Types Guide](./game-types.md)** - Selecting and using game type templates (24 supported types) -- **[BMGD vs BMM](./bmgd-vs-bmm.md)** - Understanding the differences +- **[Game Types Guide](/docs/explanation/game-dev/game-types.md)** - Selecting and using game type templates (24 supported types) +- **[BMGD vs BMM](/docs/explanation/game-dev/bmgd-vs-bmm.md)** - Understanding the differences --- @@ -58,7 +58,7 @@ BMGD follows four phases aligned with game development: ### I need to... **Start a new game project** -→ Start with [Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md) +→ Start with [Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md) → Run `brainstorm-game` for ideation → Create a Game Brief with `create-brief` @@ -74,12 +74,12 @@ BMGD follows four phases aligned with game development: → Follow the sprint-based development cycle **Quickly test an idea** -→ Use [Quick-Flow](../../how-to/workflows/bmgd-quick-flow.md) for rapid prototyping +→ Use [Quick-Flow](/docs/how-to/workflows/bmgd-quick-flow.md) for rapid prototyping --- ## Related -- [Game Types Guide](./game-types.md) - Understanding game type templates -- [BMGD vs BMM](./bmgd-vs-bmm.md) - Comparison with core method -- [Glossary](../../reference/glossary/index.md) - Terminology reference +- [Game Types Guide](/docs/explanation/game-dev/game-types.md) - Understanding game type templates +- [BMGD vs BMM](/docs/explanation/game-dev/bmgd-vs-bmm.md) - Comparison with core method +- [Glossary](/docs/reference/glossary/index.md) - Terminology reference diff --git a/docs/explanation/index.md b/docs/explanation/index.md deleted file mode 100644 index cbcd9f83..00000000 --- a/docs/explanation/index.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Explanation" ---- - - -Understanding-oriented content that explains concepts, architecture, and the reasoning behind BMAD's design. - -## Core Concepts - -Foundational concepts you need to understand BMAD. - -- [What are Agents?](./core-concepts/what-are-agents.md) -- [What are Workflows?](./core-concepts/what-are-workflows.md) -- [What are Modules?](./core-concepts/what-are-modules.md) - -## Architecture - -How BMAD is designed and why. - -## Philosophy - -The thinking behind BMAD's approach. - -## Features - -Deep dives into specific BMAD features. - -- [Party Mode](./features/party-mode.md) -- [Brainstorming Techniques](./features/brainstorming-techniques.md) -- [Advanced Elicitation](./features/advanced-elicitation.md) -- [Web Bundles](./features/web-bundles.md) - -## Modules - -Explanations of BMAD's module ecosystem. diff --git a/docs/explanation/philosophy/facilitation-over-generation.md b/docs/explanation/philosophy/facilitation-over-generation.md index 09c6e6bb..92552651 100644 --- a/docs/explanation/philosophy/facilitation-over-generation.md +++ b/docs/explanation/philosophy/facilitation-over-generation.md @@ -117,5 +117,5 @@ But the core creative work happens through facilitated discovery. ## Related -- [Creative Intelligence Suite](../creative-intelligence/index.md) - CIS overview -- [Brainstorming Techniques](../features/brainstorming-techniques.md) - Available techniques +- [Creative Intelligence Suite](/docs/explanation/creative-intelligence/index.md) - CIS overview +- [Brainstorming Techniques](/docs/explanation/features/brainstorming-techniques.md) - Available techniques diff --git a/docs/how-to/brownfield/add-feature-to-existing.md b/docs/how-to/brownfield/add-feature-to-existing.md index d189a316..98683ec6 100644 --- a/docs/how-to/brownfield/add-feature-to-existing.md +++ b/docs/how-to/brownfield/add-feature-to-existing.md @@ -86,6 +86,6 @@ Follow the standard Phase 4 implementation workflows: ## Related -- [Brownfield Development Guide](./index.md) -- [Document Existing Project](./document-existing-project.md) -- [Quick Fix in Brownfield](./quick-fix-in-brownfield.md) +- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) +- [Document Existing Project](/docs/how-to/brownfield/document-existing-project.md) +- [Quick Fix in Brownfield](/docs/how-to/brownfield/quick-fix-in-brownfield.md) diff --git a/docs/how-to/brownfield/document-existing-project.md b/docs/how-to/brownfield/document-existing-project.md index 08e1f370..68303742 100644 --- a/docs/how-to/brownfield/document-existing-project.md +++ b/docs/how-to/brownfield/document-existing-project.md @@ -80,5 +80,5 @@ Review the documentation for: ## Related -- [Brownfield Development Guide](./index.md) -- [Add Feature to Existing Project](./add-feature-to-existing.md) +- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) +- [Add Feature to Existing Project](/docs/how-to/brownfield/add-feature-to-existing.md) diff --git a/docs/how-to/brownfield/index.md b/docs/how-to/brownfield/index.md index 54555771..070f1a88 100644 --- a/docs/how-to/brownfield/index.md +++ b/docs/how-to/brownfield/index.md @@ -89,14 +89,14 @@ Pay close attention here to prevent reinventing the wheel or making decisions th ## Next Steps -- **[Document Existing Project](../../how-to/brownfield/document-existing-project.md)** - How to document your brownfield codebase -- **[Add Feature to Existing Project](../../how-to/brownfield/add-feature-to-existing.md)** - Adding new functionality -- **[Quick Fix in Brownfield](../../how-to/brownfield/quick-fix-in-brownfield.md)** - Bug fixes and ad-hoc changes -- **[Brownfield FAQ](../../explanation/faq/brownfield-faq.md)** - Common questions about brownfield development +- **[Document Existing Project](/docs/how-to/brownfield/document-existing-project.md)** - How to document your brownfield codebase +- **[Add Feature to Existing Project](/docs/how-to/brownfield/add-feature-to-existing.md)** - Adding new functionality +- **[Quick Fix in Brownfield](/docs/how-to/brownfield/quick-fix-in-brownfield.md)** - Bug fixes and ad-hoc changes +- **[Brownfield FAQ](/docs/explanation/faq/brownfield-faq.md)** - Common questions about brownfield development --- ## Related Documentation -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM -- [Quick Spec Flow](../../explanation/features/quick-flow.md) - Fast path for small changes +- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM +- [Quick Spec Flow](/docs/explanation/features/quick-flow.md) - Fast path for small changes diff --git a/docs/how-to/brownfield/quick-fix-in-brownfield.md b/docs/how-to/brownfield/quick-fix-in-brownfield.md index 2cc2dc30..8a695b55 100644 --- a/docs/how-to/brownfield/quick-fix-in-brownfield.md +++ b/docs/how-to/brownfield/quick-fix-in-brownfield.md @@ -89,6 +89,6 @@ Consider using Quick Flow or full BMad Method when: ## Related -- [Brownfield Development Guide](./index.md) -- [Add Feature to Existing Project](./add-feature-to-existing.md) -- [Quick Spec Flow](../../explanation/features/quick-flow.md) +- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) +- [Add Feature to Existing Project](/docs/how-to/brownfield/add-feature-to-existing.md) +- [Quick Spec Flow](/docs/explanation/features/quick-flow.md) diff --git a/docs/how-to/customization/customize-agents.md b/docs/how-to/customization/customize-agents.md index 88577dbd..cf0a228b 100644 --- a/docs/how-to/customization/customize-agents.md +++ b/docs/how-to/customization/customize-agents.md @@ -201,8 +201,8 @@ memories: ## Next Steps -- **[Learn about Agents](../../explanation/core-concepts/what-are-agents.md)** - Understand Simple vs Expert agents -- **[Agent Creation Guide](../../tutorials/advanced/create-custom-agent.md)** - Build completely custom agents -- **[BMM Complete Documentation](../../explanation/bmm/index.md)** - Full BMad Method reference +- **[Learn about Agents](/docs/explanation/core-concepts/what-are-agents.md)** - Understand Simple vs Expert agents +- **[Agent Creation Guide](/docs/tutorials/advanced/create-custom-agent.md)** - Build completely custom agents +- **[BMM Complete Documentation](/docs/explanation/bmm/index.md)** - Full BMad Method reference -[← Back to Customization](./index.md) +[← Back to Customization](/docs/how-to/customization/index.md) diff --git a/docs/how-to/customization/customize-workflows.md b/docs/how-to/customization/customize-workflows.md index 22d3998f..97ddccd5 100644 --- a/docs/how-to/customization/customize-workflows.md +++ b/docs/how-to/customization/customize-workflows.md @@ -22,12 +22,12 @@ Workflow customization will allow you to: While workflow customization is in development, you can: -- **Create Custom Workflows** - Use the BMAD Builder to create entirely new workflows -- **Customize Agents** - Modify agent behavior using [Agent Customization](./customize-agents.md) +- **Create Custom Workflows** - Use the BMad Builder to create entirely new workflows +- **Customize Agents** - Modify agent behavior using [Agent Customization](/docs/how-to/customization/customize-agents.md) - **Provide Feedback** - Share your workflow customization needs with the community --- -**In the meantime:** Learn how to [create custom workflows](../../explanation/bmad-builder/index.md) from scratch. +**In the meantime:** Learn how to [create custom workflows](/docs/explanation/bmad-builder/index.md) from scratch. -[← Back to Customization](./index.md) +[← Back to Customization](/docs/how-to/customization/index.md) diff --git a/docs/how-to/customization/index.md b/docs/how-to/customization/index.md index 12c3eca1..f13f0726 100644 --- a/docs/how-to/customization/index.md +++ b/docs/how-to/customization/index.md @@ -1,5 +1,5 @@ --- -title: "BMAD Customization" +title: "BMad Customization" --- @@ -9,12 +9,12 @@ Personalize agents and workflows to match your needs. | Guide | Description | |-------|-------------| -| **[Agent Customization](./customize-agents.md)** | Modify agent behavior without editing core files | -| **[Workflow Customization](./customize-workflows.md)** | Customize and optimize workflows | +| **[Agent Customization](/docs/how-to/customization/customize-agents.md)** | Modify agent behavior without editing core files | +| **[Workflow Customization](/docs/how-to/customization/customize-workflows.md)** | Customize and optimize workflows | ## Overview -BMAD provides two main customization approaches: +BMad provides two main customization approaches: ### Agent Customization Modify any agent's persona, name, capabilities, or menu items using `.customize.yaml` files in `_bmad/_config/agents/`. Your customizations persist through updates. @@ -24,6 +24,4 @@ Replace or extend workflow steps to create tailored processes. (Coming soon) --- -**Next:** Read the [Agent Customization Guide](./customize-agents.md) to start personalizing your agents. - -[← Back to Core Concepts](../index.md) +**Next:** Read the [Agent Customization Guide](/docs/how-to/customization/customize-agents.md) to start personalizing your agents. diff --git a/docs/how-to/get-answers-about-bmad.md b/docs/how-to/get-answers-about-bmad.md index 3efe136c..3f5cf880 100644 --- a/docs/how-to/get-answers-about-bmad.md +++ b/docs/how-to/get-answers-about-bmad.md @@ -1,21 +1,21 @@ --- -title: "How to Get Answers About BMAD" -description: Use an LLM to quickly answer your own BMAD questions +title: "How to Get Answers About BMad" +description: Use an LLM to quickly answer your own BMad questions --- -Point an LLM at BMAD's source files and ask your question. That's the technique—the rest of this guide shows you how. +Point an LLM at BMad's source files and ask your question. That's the technique—the rest of this guide shows you how. ## See It Work :::note[Example] -**Q:** "Tell me the fastest way to build something with BMAD" +**Q:** "Tell me the fastest way to build something with BMad" **A:** Use Quick Flow: Run `create-tech-spec` to write a technical specification, then `quick-dev` to implement it—skipping the full planning phases. This gets small features shipped in a single focused session instead of going through the full 4-phase BMM workflow. ::: ## Why This Works -BMAD's prompts are written in plain English, not code. The `_bmad` folder contains readable instructions, workflows, and agent definitions—exactly what LLMs are good at processing. You're not asking the LLM to guess; you're giving it the actual source material. +BMad's prompts are written in plain English, not code. The `_bmad` folder contains readable instructions, workflows, and agent definitions—exactly what LLMs are good at processing. You're not asking the LLM to guess; you're giving it the actual source material. ## How to Do It @@ -23,17 +23,17 @@ BMAD's prompts are written in plain English, not code. The `_bmad` folder contai | Source | Best For | Examples | |--------|----------|----------| -| **`_bmad` folder** (installed) | How BMAD works in detail—agents, workflows, prompts | "What does the PM agent do?" "How does the PRD workflow work?" | +| **`_bmad` folder** (installed) | How BMad works in detail—agents, workflows, prompts | "What does the PM agent do?" "How does the PRD workflow work?" | | **Full GitHub repo** (cloned) | Why things are the way they are—history, installer, architecture | "Why is the installer structured this way?" "What changed in v6?" | -| **`llms-full.txt`** | Quick overview from documentation perspective | "Explain BMAD's four phases" "What's the difference between levels?" | +| **`llms-full.txt`** | Quick overview from documentation perspective | "Explain BMad's four phases" "What's the difference between levels?" | :::note[What's `_bmad`?] -The `_bmad` folder is created when you install BMAD. It contains all the agent definitions, workflows, and prompts. If you don't have this folder yet, you haven't installed BMAD—see the "clone the repo" option below. +The `_bmad` folder is created when you install BMad. It contains all the agent definitions, workflows, and prompts. If you don't have this folder yet, you haven't installed BMad—see the "clone the repo" option below. ::: ### If Your AI Can Read Files (Claude Code, Cursor, etc.) -**BMAD installed:** Point your LLM at the `_bmad` folder and ask directly. +**BMad installed:** Point your LLM at the `_bmad` folder and ask directly. **Want deeper context:** Clone the [full repo](https://github.com/bmad-code-org/BMAD-METHOD) for git history and installer details. @@ -45,7 +45,7 @@ Fetch `llms-full.txt` into your session: https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt ``` -You can also find this and other downloadable resources on the [Downloads page](/downloads). +You can also find this and other downloadable resources on the [Downloads page](/docs/downloads.md). :::tip[Verify Surprising Answers] LLMs occasionally get things wrong. If an answer seems off, check the source file it referenced or ask on Discord. @@ -66,7 +66,7 @@ Tried the LLM approach and still need help? You now have a much better question ## Found a Bug? -If it's clearly a bug in BMAD itself, skip Discord and go straight to GitHub Issues: +If it's clearly a bug in BMad itself, skip Discord and go straight to GitHub Issues: **GitHub Issues:** [github.com/bmad-code-org/BMAD-METHOD/issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) diff --git a/docs/how-to/index.md b/docs/how-to/index.md deleted file mode 100644 index df7059c3..00000000 --- a/docs/how-to/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "How-To Guides" ---- - - -Task-oriented guides that show you how to accomplish specific goals. Each guide assumes you already understand the basics. - -## Installation - -- [Upgrade to V6](./installation/upgrade-to-v6.md) -- [Install Custom Modules](./installation/install-custom-modules.md) - -## IDE Setup - -*Coming soon* - -## Customization - -- [Customize Agents](./customization/customize-agents.md) -- [Customize Workflows](./customization/customize-workflows.md) -- [Vendor Workflows](./customization/vendor-workflows.md) -- [Shard Large Documents](./customization/shard-large-documents.md) - -## Workflows - -Guides for running specific BMAD workflows. - -## Brownfield Projects - -Working with existing codebases. - -## Troubleshooting - -Solutions to common problems. - -- [Get Answers About BMAD](./get-answers-about-bmad.md) diff --git a/docs/how-to/installation/index.md b/docs/how-to/installation/index.md index f8a28f3d..928aa7db 100644 --- a/docs/how-to/installation/index.md +++ b/docs/how-to/installation/index.md @@ -10,6 +10,6 @@ How-to guides for installing and configuring the BMad Method. | Guide | Description | |-------|-------------| -| **[Install BMad](./install-bmad.md)** | Step-by-step installation instructions | -| **[Install Custom Modules](./install-custom-modules.md)** | Add custom agents, workflows, and modules | -| **[Upgrade to v6](./upgrade-to-v6.md)** | Migrate from BMad v4 to v6 | +| **[Install BMad](/docs/how-to/installation/install-bmad.md)** | Step-by-step installation instructions | +| **[Install Custom Modules](/docs/how-to/installation/install-custom-modules.md)** | Add custom agents, workflows, and modules | +| **[Upgrade to v6](/docs/how-to/installation/upgrade-to-v6.md)** | Migrate from BMad v4 to v6 | diff --git a/docs/how-to/installation/install-bmad.md b/docs/how-to/installation/install-bmad.md index 50bc8ccb..d439c888 100644 --- a/docs/how-to/installation/install-bmad.md +++ b/docs/how-to/installation/install-bmad.md @@ -1,10 +1,10 @@ --- -title: "How to Install BMAD" -description: Step-by-step guide to installing BMAD in your project +title: "How to Install BMad" +description: Step-by-step guide to installing BMad in your project --- -Complete guide to installing BMAD in your project. +Complete guide to installing BMad in your project. --- @@ -26,7 +26,7 @@ npx bmad-method install ### 2. Choose Installation Location -The installer will ask where to install BMAD files. Options: +The installer will ask where to install BMad files. Options: - Current directory (recommended for new projects) - Subdirectory - Custom path @@ -39,7 +39,7 @@ Choose which AI tools you'll be using: - Windsurf - Other -The installer configures BMAD for your selected tools. +The installer configures BMad for your selected tools. ### 4. Choose Modules @@ -133,6 +133,6 @@ npx bmad-method install --verbose ## Related -- [Quick Start Guide](../../tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM -- [Upgrade to V6](./upgrade-to-v6.md) - Upgrading from previous versions -- [Install Custom Modules](./install-custom-modules.md) - Adding custom content +- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM +- [Upgrade to V6](/docs/how-to/installation/upgrade-to-v6.md) - Upgrading from previous versions +- [Install Custom Modules](/docs/how-to/installation/install-custom-modules.md) - Adding custom content diff --git a/docs/how-to/installation/install-custom-modules.md b/docs/how-to/installation/install-custom-modules.md index 4aebad85..1c6e2fed 100644 --- a/docs/how-to/installation/install-custom-modules.md +++ b/docs/how-to/installation/install-custom-modules.md @@ -3,15 +3,15 @@ title: "Custom Content Installation" --- -This guide explains how to create and install custom BMAD content including agents, workflows, and modules. Custom content extends BMAD's functionality with specialized tools and workflows that can be shared across projects or teams. +This guide explains how to create and install custom BMad content including agents, workflows, and modules. Custom content extends BMad's functionality with specialized tools and workflows that can be shared across projects or teams. -For detailed information about the different types of custom content available, see [Custom Content Types](../../explanation/bmad-builder/custom-content-types.md). +For detailed information about the different types of custom content available, see [Custom Content Types](/docs/explanation/bmad-builder/custom-content-types.md). You can find example custom modules in the `samples/sample-custom-modules/` folder of the repository. Download either of the sample folders to try them out. ## Content Types Overview -BMAD Core supports several categories of custom content: +BMad Core supports several categories of custom content: - Custom Stand Alone Modules - Custom Add On Modules @@ -100,17 +100,17 @@ Ensure your content follows the proper conventions and includes a `module.yaml` ### New Project Installation -When setting up a new BMAD project: +When setting up a new BMad project: 1. The installer will prompt: `Would you like to install a local custom module (this includes custom agents and workflows also)? (y/N)` 2. Select 'y' to specify the path to your module folder containing `module.yaml` ### Existing Project Modification -To add custom content to an existing BMAD project: +To add custom content to an existing BMad project: 1. Run the installer against your project location -2. Select `Modify BMAD Installation` +2. Select `Modify BMad Installation` 3. Choose the option to add, modify, or update custom modules ### Upcoming Features @@ -120,7 +120,7 @@ To add custom content to an existing BMAD project: ## Quick Updates -When updates to BMAD Core or core modules (BMM, CIS, etc.) become available, the quick update process will: +When updates to BMad Core or core modules (BMM, CIS, etc.) become available, the quick update process will: 1. Apply available updates to core modules 2. Recompile all agents with customizations from the `_config/agents` folder diff --git a/docs/how-to/installation/upgrade-to-v6.md b/docs/how-to/installation/upgrade-to-v6.md index b5c37dbe..6a1349f4 100644 --- a/docs/how-to/installation/upgrade-to-v6.md +++ b/docs/how-to/installation/upgrade-to-v6.md @@ -1,11 +1,11 @@ --- -title: "BMad v4 to v6 Upgrade Guide" +title: "Upgrading from Previous Versions" --- ## Overview -BMad v6 represents a complete ground-up rewrite with significant architectural changes. This guide will help you migrate your v4 project to v6. +The latest version of BMad represents a complete ground-up rewrite with significant architectural changes. This guide will help you migrate from version 4. --- @@ -123,7 +123,7 @@ persona: - Always upbeat and adventurous ``` -There is a lot more that is possible with agent customization, which is covered in detail in the [Agent Customization Guide](../customization/customize-agents.md) +There is a lot more that is possible with agent customization, which is covered in detail in the [Agent Customization Guide](/docs/how-to/customization/customize-agents.md) CRITICAL NOTE: After you modify the customization file, you need to run the npx installer against your installed location, and choose the option to rebuild all agents, or just do a quick update again. This always builds agents fresh and applies customizations. diff --git a/docs/how-to/troubleshooting/bmgd-troubleshooting.md b/docs/how-to/troubleshooting/bmgd-troubleshooting.md index e6901e51..68942b95 100644 --- a/docs/how-to/troubleshooting/bmgd-troubleshooting.md +++ b/docs/how-to/troubleshooting/bmgd-troubleshooting.md @@ -256,6 +256,6 @@ When reporting issues, include: ## Next Steps -- **[Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md)** - Getting started -- **[Workflows Guide](../../reference/workflows/index.md)** - Workflow reference -- **[Glossary](../../reference/glossary/index.md)** - Terminology +- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Getting started +- **[Workflows Guide](/docs/reference/workflows/index.md)** - Workflow reference +- **[Glossary](/docs/reference/glossary/index.md)** - Terminology diff --git a/docs/how-to/workflows/bmgd-quick-flow.md b/docs/how-to/workflows/bmgd-quick-flow.md index 9b7fa7db..61dad971 100644 --- a/docs/how-to/workflows/bmgd-quick-flow.md +++ b/docs/how-to/workflows/bmgd-quick-flow.md @@ -286,6 +286,6 @@ If quick-dev keeps expanding scope, stop and create proper stories. ## Next Steps -- **[Workflows Guide](../../reference/workflows/bmgd-workflows.md)** - Full workflow reference -- **[Agents Guide](../../explanation/game-dev/agents.md)** - Agent capabilities -- **[Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md)** - Getting started with BMGD +- **[Workflows Guide](/docs/reference/workflows/bmgd-workflows.md)** - Full workflow reference +- **[Agents Guide](/docs/explanation/game-dev/agents.md)** - Agent capabilities +- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Getting started with BMGD diff --git a/docs/how-to/workflows/conduct-research.md b/docs/how-to/workflows/conduct-research.md index 16174c74..ee6e02ef 100644 --- a/docs/how-to/workflows/conduct-research.md +++ b/docs/how-to/workflows/conduct-research.md @@ -125,6 +125,6 @@ After research: ## Related -- [Run Brainstorming Session](./run-brainstorming-session.md) - Explore ideas before research -- [Create Product Brief](./create-product-brief.md) - Capture strategic vision -- [Create PRD](./create-prd.md) - Move to formal planning +- [Run Brainstorming Session](/docs/how-to/workflows/run-brainstorming-session.md) - Explore ideas before research +- [Create Product Brief](/docs/how-to/workflows/create-product-brief.md) - Capture strategic vision +- [Create PRD](/docs/how-to/workflows/create-prd.md) - Move to formal planning diff --git a/docs/how-to/workflows/create-architecture.md b/docs/how-to/workflows/create-architecture.md index 7b84548f..1e55896c 100644 --- a/docs/how-to/workflows/create-architecture.md +++ b/docs/how-to/workflows/create-architecture.md @@ -141,7 +141,7 @@ After architecture: ## Related -- [Create PRD](./create-prd.md) - Requirements before architecture -- [Create Epics and Stories](./create-epics-and-stories.md) - Next step -- [Run Implementation Readiness](./run-implementation-readiness.md) - Gate check -- [Why Solutioning Matters](../../explanation/architecture/why-solutioning-matters.md) +- [Create PRD](/docs/how-to/workflows/create-prd.md) - Requirements before architecture +- [Create Epics and Stories](/docs/how-to/workflows/create-epics-and-stories.md) - Next step +- [Run Implementation Readiness](/docs/how-to/workflows/run-implementation-readiness.md) - Gate check +- [Why Solutioning Matters](/docs/explanation/architecture/why-solutioning-matters.md) diff --git a/docs/how-to/workflows/create-epics-and-stories.md b/docs/how-to/workflows/create-epics-and-stories.md index 4fde46a2..78b662b7 100644 --- a/docs/how-to/workflows/create-epics-and-stories.md +++ b/docs/how-to/workflows/create-epics-and-stories.md @@ -131,6 +131,6 @@ After creating epics and stories: ## Related -- [Create Architecture](./create-architecture.md) - Do this first -- [Run Implementation Readiness](./run-implementation-readiness.md) - Gate check -- [Run Sprint Planning](./run-sprint-planning.md) - Start implementation +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Do this first +- [Run Implementation Readiness](/docs/how-to/workflows/run-implementation-readiness.md) - Gate check +- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Start implementation diff --git a/docs/how-to/workflows/create-prd.md b/docs/how-to/workflows/create-prd.md index 2a0221f1..36053cdc 100644 --- a/docs/how-to/workflows/create-prd.md +++ b/docs/how-to/workflows/create-prd.md @@ -125,6 +125,6 @@ After PRD: ## Related -- [Create Product Brief](./create-product-brief.md) - Input for PRD -- [Create UX Design](./create-ux-design.md) - Optional UX workflow -- [Create Architecture](./create-architecture.md) - Next step after PRD +- [Create Product Brief](/docs/how-to/workflows/create-product-brief.md) - Input for PRD +- [Create UX Design](/docs/how-to/workflows/create-ux-design.md) - Optional UX workflow +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Next step after PRD diff --git a/docs/how-to/workflows/create-product-brief.md b/docs/how-to/workflows/create-product-brief.md index 3b813f6c..7d388a9f 100644 --- a/docs/how-to/workflows/create-product-brief.md +++ b/docs/how-to/workflows/create-product-brief.md @@ -112,6 +112,6 @@ Planning workflows automatically load the product brief if it exists. ## Related -- [Run Brainstorming Session](./run-brainstorming-session.md) - Explore ideas first -- [Conduct Research](./conduct-research.md) - Validate ideas -- [Create PRD](./create-prd.md) - Next step after product brief +- [Run Brainstorming Session](/docs/how-to/workflows/run-brainstorming-session.md) - Explore ideas first +- [Conduct Research](/docs/how-to/workflows/conduct-research.md) - Validate ideas +- [Create PRD](/docs/how-to/workflows/create-prd.md) - Next step after product brief diff --git a/docs/how-to/workflows/create-story.md b/docs/how-to/workflows/create-story.md index 9e75f920..53c083a9 100644 --- a/docs/how-to/workflows/create-story.md +++ b/docs/how-to/workflows/create-story.md @@ -114,6 +114,6 @@ Implement email verification flow for new user registrations. ## Related -- [Run Sprint Planning](./run-sprint-planning.md) - Initialize tracking -- [Implement Story](./implement-story.md) - Next step -- [Run Code Review](./run-code-review.md) - After implementation +- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Initialize tracking +- [Implement Story](/docs/how-to/workflows/implement-story.md) - Next step +- [Run Code Review](/docs/how-to/workflows/run-code-review.md) - After implementation diff --git a/docs/how-to/workflows/create-tech-spec.md b/docs/how-to/workflows/create-tech-spec.md index cbc4f1c0..a7ffefb6 100644 --- a/docs/how-to/workflows/create-tech-spec.md +++ b/docs/how-to/workflows/create-tech-spec.md @@ -154,6 +154,6 @@ If your "single change" needs 3+ files, it might be a multi-story feature. Let t ## Related -- [Quick Flow](../../explanation/features/quick-flow.md) - Understanding Quick Spec Flow -- [Implement Story](./implement-story.md) - After tech spec -- [Create PRD](./create-prd.md) - For larger projects needing full BMad Method +- [Quick Flow](/docs/explanation/features/quick-flow.md) - Understanding Quick Spec Flow +- [Implement Story](/docs/how-to/workflows/implement-story.md) - After tech spec +- [Create PRD](/docs/how-to/workflows/create-prd.md) - For larger projects needing full BMad Method diff --git a/docs/how-to/workflows/create-ux-design.md b/docs/how-to/workflows/create-ux-design.md index a91e2195..a10fa7cf 100644 --- a/docs/how-to/workflows/create-ux-design.md +++ b/docs/how-to/workflows/create-ux-design.md @@ -112,6 +112,6 @@ The UX spec feeds into: ## Related -- [Create PRD](./create-prd.md) - Create requirements first -- [Create Architecture](./create-architecture.md) - Technical design -- [Create Epics and Stories](./create-epics-and-stories.md) - Work breakdown +- [Create PRD](/docs/how-to/workflows/create-prd.md) - Create requirements first +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Technical design +- [Create Epics and Stories](/docs/how-to/workflows/create-epics-and-stories.md) - Work breakdown diff --git a/docs/how-to/workflows/implement-story.md b/docs/how-to/workflows/implement-story.md index a695a72c..038886e0 100644 --- a/docs/how-to/workflows/implement-story.md +++ b/docs/how-to/workflows/implement-story.md @@ -122,6 +122,6 @@ A: Split the story and document the change. ## Related -- [Create Story](./create-story.md) - Prepare the story first -- [Run Code Review](./run-code-review.md) - After implementation -- [Run Sprint Planning](./run-sprint-planning.md) - Sprint organization +- [Create Story](/docs/how-to/workflows/create-story.md) - Prepare the story first +- [Run Code Review](/docs/how-to/workflows/run-code-review.md) - After implementation +- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Sprint organization diff --git a/docs/how-to/workflows/run-brainstorming-session.md b/docs/how-to/workflows/run-brainstorming-session.md index a914ce4f..298d9e8c 100644 --- a/docs/how-to/workflows/run-brainstorming-session.md +++ b/docs/how-to/workflows/run-brainstorming-session.md @@ -89,6 +89,6 @@ After brainstorming: ## Related -- [Conduct Research](./conduct-research.md) - Validate your ideas -- [Create Product Brief](./create-product-brief.md) - Capture strategic vision -- [Create PRD](./create-prd.md) - Move to formal planning +- [Conduct Research](/docs/how-to/workflows/conduct-research.md) - Validate your ideas +- [Create Product Brief](/docs/how-to/workflows/create-product-brief.md) - Capture strategic vision +- [Create PRD](/docs/how-to/workflows/create-prd.md) - Move to formal planning diff --git a/docs/how-to/workflows/run-code-review.md b/docs/how-to/workflows/run-code-review.md index db049331..bbd3f211 100644 --- a/docs/how-to/workflows/run-code-review.md +++ b/docs/how-to/workflows/run-code-review.md @@ -136,6 +136,6 @@ Every story goes through code-review before being marked done. This ensures: ## Related -- [Implement Story](./implement-story.md) - Before code review -- [Create Story](./create-story.md) - Move to next story -- [Run Sprint Planning](./run-sprint-planning.md) - Sprint organization +- [Implement Story](/docs/how-to/workflows/implement-story.md) - Before code review +- [Create Story](/docs/how-to/workflows/create-story.md) - Move to next story +- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Sprint organization diff --git a/docs/how-to/workflows/run-implementation-readiness.md b/docs/how-to/workflows/run-implementation-readiness.md index d7904928..27be2d54 100644 --- a/docs/how-to/workflows/run-implementation-readiness.md +++ b/docs/how-to/workflows/run-implementation-readiness.md @@ -157,6 +157,6 @@ E-commerce platform → CONCERNS ⚠️ ## Related -- [Create Architecture](./create-architecture.md) - Architecture workflow -- [Create Epics and Stories](./create-epics-and-stories.md) - Work breakdown -- [Run Sprint Planning](./run-sprint-planning.md) - Start implementation +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Architecture workflow +- [Create Epics and Stories](/docs/how-to/workflows/create-epics-and-stories.md) - Work breakdown +- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Start implementation diff --git a/docs/how-to/workflows/run-sprint-planning.md b/docs/how-to/workflows/run-sprint-planning.md index 7f6c1224..e92f42a4 100644 --- a/docs/how-to/workflows/run-sprint-planning.md +++ b/docs/how-to/workflows/run-sprint-planning.md @@ -106,6 +106,6 @@ Stories move through these states in the sprint status file: ## Related -- [Create Story](./create-story.md) - Prepare stories for implementation -- [Implement Story](./implement-story.md) - Dev workflow -- [Run Code Review](./run-code-review.md) - Quality assurance +- [Create Story](/docs/how-to/workflows/create-story.md) - Prepare stories for implementation +- [Implement Story](/docs/how-to/workflows/implement-story.md) - Dev workflow +- [Run Code Review](/docs/how-to/workflows/run-code-review.md) - Quality assurance diff --git a/docs/how-to/workflows/run-test-design.md b/docs/how-to/workflows/run-test-design.md index db5303b1..f2b6361f 100644 --- a/docs/how-to/workflows/run-test-design.md +++ b/docs/how-to/workflows/run-test-design.md @@ -123,6 +123,6 @@ TEA generates a comprehensive test design document. ## Related -- [TEA Overview](../../explanation/features/tea-overview.md) - Understanding the Test Architect -- [Setup Test Framework](./setup-test-framework.md) - Setting up testing infrastructure -- [Create Architecture](./create-architecture.md) - Architecture workflow +- [TEA Overview](/docs/explanation/features/tea-overview.md) - Understanding the Test Architect +- [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md) - Setting up testing infrastructure +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Architecture workflow diff --git a/docs/how-to/workflows/setup-party-mode.md b/docs/how-to/workflows/setup-party-mode.md index adbc790d..3e82e440 100644 --- a/docs/how-to/workflows/setup-party-mode.md +++ b/docs/how-to/workflows/setup-party-mode.md @@ -4,7 +4,7 @@ description: How to set up and use Party Mode for multi-agent collaboration --- -Use Party Mode to orchestrate dynamic multi-agent conversations with your entire BMAD team. +Use Party Mode to orchestrate dynamic multi-agent conversations with your entire BMad team. --- @@ -113,5 +113,5 @@ Type "exit" or "done" to conclude the session. Participating agents will say per ## Related -- [Party Mode](../../explanation/features/party-mode.md) - Understanding Party Mode -- [Agent Roles](../../explanation/core-concepts/agent-roles.md) - Available agents +- [Party Mode](/docs/explanation/features/party-mode.md) - Understanding Party Mode +- [Agent Roles](/docs/explanation/core-concepts/agent-roles.md) - Available agents diff --git a/docs/how-to/workflows/setup-test-framework.md b/docs/how-to/workflows/setup-test-framework.md index 96ebf7a3..508d6144 100644 --- a/docs/how-to/workflows/setup-test-framework.md +++ b/docs/how-to/workflows/setup-test-framework.md @@ -108,6 +108,6 @@ Configure in your IDE's MCP settings. ## Related -- [TEA Overview](../../explanation/features/tea-overview.md) - Understanding the Test Architect -- [Run Test Design](./run-test-design.md) - Creating test plans -- [Create Architecture](./create-architecture.md) - Architecture workflow +- [TEA Overview](/docs/explanation/features/tea-overview.md) - Understanding the Test Architect +- [Run Test Design](/docs/how-to/workflows/run-test-design.md) - Creating test plans +- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Architecture workflow diff --git a/docs/index.md b/docs/index.md index a43bddda..abc96030 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,8 @@ --- -title: Welcome to BMad +title: Welcome to the BMad Method --- -BMad (**B**uild **M**ore, **A**rchitect **D**reams) is an AI-driven development framework that helps you build software faster and smarter. It provides specialized AI agents, guided workflows, and intelligent planning that adapts to your project's complexity—whether you're fixing a bug or building an enterprise platform. +The BMad Method (**B**reakthrough **M**ethod of **A**gile AI **D**riven Development) is an AI-driven development framework that helps you build software faster and smarter. It provides specialized AI agents, guided workflows, and intelligent planning that adapts to your project's complexity—whether you're fixing a bug or building an enterprise platform. If you're comfortable working with AI coding assistants like Claude, Cursor, or GitHub Copilot, you're ready to get started. @@ -12,11 +12,10 @@ If you're comfortable working with AI coding assistants like Claude, Cursor, or The fastest way to understand BMad is to try it. Choose a tutorial to walk through your first project in about 10 minutes. -- **[Get Started with v4 (Stable)](./tutorials/getting-started/getting-started-bmadv4.md)** — Production-ready version with battle-tested workflows -- **[Try v6 (Alpha)](./tutorials/getting-started/getting-started-bmadv6.md)** — Latest features, still in active development +- **[Get Started with BMad](/docs/tutorials/getting-started/getting-started-bmadv6.md)** — Latest features, still in active development :::tip[Already familiar with AI-assisted development?] -Feel free to skip around. Use the sidebar to jump to any topic, or check out [What Are Agents?](./explanation/core-concepts/what-are-agents.md) to understand how BMad organizes its AI personas. +Feel free to skip around. Use the sidebar to jump to any topic, or check out [What Are Agents?](/docs/explanation/core-concepts/what-are-agents.md) to understand how BMad organizes its AI personas. ::: --- @@ -25,12 +24,12 @@ Feel free to skip around. Use the sidebar to jump to any topic, or check out [Wh These docs are organized into four sections based on what you're trying to do: -| Section | Purpose | -|---------|---------| -| **[Tutorials](./tutorials/index.md)** | Learning-oriented. Step-by-step guides that walk you through building something. Start here if you're new. | -| **[How-To Guides](./how-to/index.md)** | Task-oriented. Practical guides for solving specific problems. "How do I customize an agent?" lives here. | -| **[Explanation](./explanation/index.md)** | Understanding-oriented. Deep dives into concepts and architecture. Read when you want to know *why*. | -| **[Reference](./reference/index.md)** | Information-oriented. Technical specifications for agents, workflows, and configuration. | +| Section | Purpose | +| ----------------- | ---------------------------------------------------------------------------------------------------------- | +| **Tutorials** | Learning-oriented. Step-by-step guides that walk you through building something. Start here if you're new. | +| **How-To Guides** | Task-oriented. Practical guides for solving specific problems. "How do I customize an agent?" lives here. | +| **Explanation** | Understanding-oriented. Deep dives into concepts and architecture. Read when you want to know *why*. | +| **Reference** | Information-oriented. Technical specifications for agents, workflows, and configuration. | --- @@ -61,5 +60,4 @@ Get help, share what you're building, or contribute to BMad: Ready to dive in? Pick a tutorial and start building. -- **[Get Started with v4 (Stable)](./tutorials/getting-started/getting-started-bmadv4.md)** — Recommended for production projects -- **[Try v6 (Alpha)](./tutorials/getting-started/getting-started-bmadv6.md)** — Explore the latest features +- **[Get Started with BMad](/docs/tutorials/getting-started/getting-started-bmadv6.md)** — Explore the latest features diff --git a/docs/reference/agents/index.md b/docs/reference/agents/index.md index 1348c7a3..1077f385 100644 --- a/docs/reference/agents/index.md +++ b/docs/reference/agents/index.md @@ -121,7 +121,7 @@ Technical documentation and diagrams. - `*validate-doc` - Review documentation against standards - `*improve-readme` - Review and improve README files - `*explain-concept` - Create clear technical explanations -- `*standards-guide` - Show BMAD documentation standards +- `*standards-guide` - Show BMad documentation standards --- @@ -137,5 +137,5 @@ Available to all agents: ## Related -- [Agent Roles](../../explanation/core-concepts/agent-roles.md) - Understanding agent responsibilities -- [What Are Agents](../../explanation/core-concepts/what-are-agents.md) - Foundational concepts +- [Agent Roles](/docs/explanation/core-concepts/agent-roles.md) - Understanding agent responsibilities +- [What Are Agents](/docs/explanation/core-concepts/what-are-agents.md) - Foundational concepts diff --git a/docs/reference/configuration/core-tasks.md b/docs/reference/configuration/core-tasks.md index a5963369..3815b3f5 100644 --- a/docs/reference/configuration/core-tasks.md +++ b/docs/reference/configuration/core-tasks.md @@ -3,7 +3,7 @@ title: "Core Tasks" --- -Core Tasks are reusable task definitions that can be invoked by any BMAD module, workflow, or agent. These tasks provide standardized functionality for common operations. +Core Tasks are reusable task definitions that can be invoked by any BMad module, workflow, or agent. These tasks provide standardized functionality for common operations. ## Table of Contents diff --git a/docs/reference/glossary/index.md b/docs/reference/glossary/index.md index 3a36b4cd..9a42ce39 100644 --- a/docs/reference/glossary/index.md +++ b/docs/reference/glossary/index.md @@ -1,9 +1,9 @@ --- -title: "BMAD Glossary" +title: "BMad Glossary" --- -Comprehensive terminology reference for the BMAD Method. +Comprehensive terminology reference for the BMad Method. --- @@ -23,7 +23,7 @@ Comprehensive terminology reference for the BMAD Method. ## Core Concepts -### BMAD (Build More, Architect Dreams) +### BMad (Breakthrough Method of Agile AI Driven Development) AI-driven agile development framework with specialized agents, guided workflows, and scale-adaptive intelligence. diff --git a/docs/reference/index.md b/docs/reference/index.md deleted file mode 100644 index d1b3c449..00000000 --- a/docs/reference/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Reference" ---- - - -Information-oriented documentation for looking up facts, specifications, and details. - -## Agents - -Technical reference for all BMAD agents. - -## Workflows - -Technical reference for all BMAD workflows. - -## Configuration - -Configuration options and settings. - -## Glossary - -Definitions of BMAD terminology. - -## FAQ - -Frequently asked questions organized by topic. diff --git a/docs/reference/workflows/bmgd-workflows.md b/docs/reference/workflows/bmgd-workflows.md index bd96d03e..79d19165 100644 --- a/docs/reference/workflows/bmgd-workflows.md +++ b/docs/reference/workflows/bmgd-workflows.md @@ -262,7 +262,7 @@ Checks current project status across all phases. Shows completed documents, curr ## Quick-Flow Workflows -Fast-track workflows that skip full planning phases. See **[Quick-Flow Guide](../../how-to/workflows/bmgd-quick-flow.md)** for detailed usage. +Fast-track workflows that skip full planning phases. See **[Quick-Flow Guide](/docs/how-to/workflows/bmgd-quick-flow.md)** for detailed usage. ### Quick-Prototype @@ -460,7 +460,7 @@ This means: ## Next Steps -- **[Quick Start Guide](../../tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD -- **[Quick-Flow Guide](../../how-to/workflows/bmgd-quick-flow.md)** - Rapid prototyping and development -- **[Agents Guide](../../explanation/game-dev/agents.md)** - Agent reference -- **[Game Types Guide](../../explanation/game-dev/game-types.md)** - Game type templates +- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD +- **[Quick-Flow Guide](/docs/how-to/workflows/bmgd-quick-flow.md)** - Rapid prototyping and development +- **[Agents Guide](/docs/explanation/game-dev/agents.md)** - Agent reference +- **[Game Types Guide](/docs/explanation/game-dev/game-types.md)** - Game type templates diff --git a/docs/reference/workflows/core-workflows.md b/docs/reference/workflows/core-workflows.md index 46852179..ef27d5c9 100644 --- a/docs/reference/workflows/core-workflows.md +++ b/docs/reference/workflows/core-workflows.md @@ -3,19 +3,19 @@ title: "Core Workflows" --- -Core Workflows are domain-agnostic workflows that can be utilized by any BMAD-compliant module, workflow, or agent. These workflows are installed by default and available at any time. +Core Workflows are domain-agnostic workflows that can be utilized by any BMad-compliant module, workflow, or agent. These workflows are installed by default and available at any time. ## Available Core Workflows -### [Party Mode](../../explanation/features/party-mode.md) +### [Party Mode](/docs/explanation/features/party-mode.md) -Orchestrate dynamic multi-agent conversations with your entire BMAD team. Engage with multiple specialized perspectives simultaneously—each agent maintaining their unique personality, expertise, and communication style. +Orchestrate dynamic multi-agent conversations with your entire BMad team. Engage with multiple specialized perspectives simultaneously—each agent maintaining their unique personality, expertise, and communication style. -### [Brainstorming](../../explanation/features/brainstorming-techniques.md) +### [Brainstorming](/docs/explanation/features/brainstorming-techniques.md) Facilitate structured creative sessions using 60+ proven ideation techniques. The AI acts as coach and guide, using proven creativity methods to draw out ideas and insights that are already within you. -### [Advanced Elicitation](../../explanation/features/advanced-elicitation.md) +### [Advanced Elicitation](/docs/explanation/features/advanced-elicitation.md) Push the LLM to rethink its work through 50+ reasoning methods—the inverse of brainstorming. The LLM applies sophisticated techniques to re-examine and enhance content it has just generated, essentially "LLM brainstorming" to find better approaches and uncover improvements. diff --git a/docs/reference/workflows/document-project.md b/docs/reference/workflows/document-project.md index de803f75..f6eaba55 100644 --- a/docs/reference/workflows/document-project.md +++ b/docs/reference/workflows/document-project.md @@ -3,7 +3,7 @@ title: "Document Project Workflow - Technical Reference" --- -**Module:** BMM (BMAD Method Module) +**Module:** BMM (BMad Method Module) ## Purpose @@ -70,5 +70,5 @@ The workflow can be interrupted and resumed without losing progress: **Related Documentation:** -- [Brownfield Development Guide](../../how-to/brownfield/index.md) -- [Implementation Workflows](../../how-to/workflows/run-sprint-planning.md) +- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) +- [Implementation Workflows](/docs/how-to/workflows/run-sprint-planning.md) diff --git a/docs/reference/workflows/index.md b/docs/reference/workflows/index.md index bebce541..d1da2924 100644 --- a/docs/reference/workflows/index.md +++ b/docs/reference/workflows/index.md @@ -8,9 +8,9 @@ Complete reference documentation for all BMad Method workflows. ## Core Workflows -- [Core Workflows](./core-workflows.md) - Domain-agnostic workflows available to all modules -- [Document Project](./document-project.md) - Brownfield project documentation workflow +- [Core Workflows](/docs/reference/workflows/core-workflows.md) - Domain-agnostic workflows available to all modules +- [Document Project](/docs/reference/workflows/document-project.md) - Brownfield project documentation workflow ## Module-Specific Workflows -- [BMGD Workflows](./bmgd-workflows.md) - Game development workflows +- [BMGD Workflows](/docs/reference/workflows/bmgd-workflows.md) - Game development workflows diff --git a/docs/tutorials/advanced/create-custom-agent.md b/docs/tutorials/advanced/create-custom-agent.md index 11572963..1050b341 100644 --- a/docs/tutorials/advanced/create-custom-agent.md +++ b/docs/tutorials/advanced/create-custom-agent.md @@ -6,7 +6,7 @@ title: "Create a Custom Agent" Build your own AI agent with a unique personality, specialized commands, and optional persistent memory using the BMad Builder workflow. :::note[BMB Module] -This tutorial uses the **BMad Builder (BMB)** module. Make sure you have BMAD installed with the BMB module enabled. +This tutorial uses the **BMad Builder (BMB)** module. Make sure you have BMad installed with the BMB module enabled. ::: ## What You'll Learn @@ -18,7 +18,7 @@ This tutorial uses the **BMad Builder (BMB)** module. Make sure you have BMAD in - Test and iterate on your agent's behavior :::note[Prerequisites] -- BMAD installed with the BMB module +- BMad installed with the BMB module - An idea for what you want your agent to do - About 15-30 minutes for your first agent ::: @@ -102,7 +102,7 @@ my-custom-stuff/ └── workflows/ # Optional: custom workflows ``` -Install using the BMAD installer, then invoke your new agent in your IDE. +Install using the BMad installer, then invoke your new agent in your IDE. ## What You've Accomplished @@ -130,7 +130,7 @@ _bmad/ | Action | How | | ------------------- | ---------------------------------------------- | -| Start workflow | `"Run the BMAD Builder create-agent workflow"` | +| Start workflow | `"Run the BMad Builder create-agent workflow"` | | Edit agent directly | Modify `{agent-name}.agent.yaml` | | Edit customization | Modify `_bmad/_config/agents/{agent-name}` | | Rebuild agent | `npx bmad-method build ` | @@ -159,9 +159,9 @@ Study the reference agents in `src/modules/bmb/reference/agents/`: ## Further Reading -- **[What Are Agents](../../explanation/core-concepts/what-are-agents.md)** - Deep technical details on agent types -- **[Agent Customization](../../how-to/customization/customize-agents.md)** - Modify agents without editing core files -- **[Custom Content Installation](../../how-to/installation/install-custom-modules.md)** - Package and distribute your agents +- **[What Are Agents](/docs/explanation/core-concepts/what-are-agents.md)** - Deep technical details on agent types +- **[Agent Customization](/docs/how-to/customization/customize-agents.md)** - Modify agents without editing core files +- **[Custom Content Installation](/docs/how-to/installation/install-custom-modules.md)** - Package and distribute your agents :::tip[Key Takeaways] - **Start small** - Your first agent should solve one problem well diff --git a/docs/tutorials/getting-started/getting-started-bmadv6.md b/docs/tutorials/getting-started/getting-started-bmadv6.md index 644e822d..ed674cb3 100644 --- a/docs/tutorials/getting-started/getting-started-bmadv6.md +++ b/docs/tutorials/getting-started/getting-started-bmadv6.md @@ -1,15 +1,14 @@ --- -title: "Getting Started with BMad v6 Alpha" -description: Install BMad v6 Alpha and build your first project +title: "Getting Started with the BMad Method" +description: Install BMad and build your first project --- +**Upgrading from previous versions?** See the [Upgrade Guide](/docs/how-to/installation/upgrade-to-v6.md) instead. + +--- Build software faster using AI-powered workflows with specialized agents that guide you through planning, architecture, and implementation. -:::caution[Alpha Software] -BMad v6 is currently in **alpha**. Expect breaking changes, incomplete features, and evolving documentation. For a stable experience, use the [BMad v4 tutorial](./getting-started-bmadv4.md) instead. -::: - ## What You'll Learn - Install and initialize BMad Method for a new project @@ -36,12 +35,12 @@ BMad v6 is currently in **alpha**. Expect breaking changes, incomplete features, BMad helps you build software through guided workflows with specialized AI agents. The process follows four phases: -| Phase | Name | What Happens | -|-------|------|--------------| -| 1 | Analysis | Brainstorming, research, product brief *(optional)* | -| 2 | Planning | Create requirements (PRD or tech-spec) | -| 3 | Solutioning | Design architecture *(BMad Method/Enterprise only)* | -| 4 | Implementation | Build epic by epic, story by story | +| Phase | Name | What Happens | +| ----- | -------------- | --------------------------------------------------- | +| 1 | Analysis | Brainstorming, research, product brief *(optional)* | +| 2 | Planning | Create requirements (PRD or tech-spec) | +| 3 | Solutioning | Design architecture *(BMad Method/Enterprise only)* | +| 4 | Implementation | Build epic by epic, story by story | ![BMad Method Workflow - Standard Greenfield](./images/workflow-method-greenfield.svg) @@ -49,11 +48,11 @@ BMad helps you build software through guided workflows with specialized AI agent Based on your project's complexity, BMad offers three planning tracks: -| Track | Best For | Documents Created | -|-------|----------|-------------------| -| **Quick Flow** | Bug fixes, simple features, clear scope (1-15 stories) | Tech-spec only | -| **BMad Method** | Products, platforms, complex features (10-50+ stories) | PRD + Architecture + UX | -| **Enterprise** | Compliance, multi-tenant systems (30+ stories) | PRD + Architecture + Security + DevOps | +| Track | Best For | Documents Created | +| --------------- | ------------------------------------------------------ | -------------------------------------- | +| **Quick Flow** | Bug fixes, simple features, clear scope (1-15 stories) | Tech-spec only | +| **BMad Method** | Products, platforms, complex features (10-50+ stories) | PRD + Architecture + UX | +| **Enterprise** | Compliance, multi-tenant systems (30+ stories) | PRD + Architecture + Security + DevOps | :::note Story counts are guidance, not definitions. Choose your track based on planning needs, not story math. @@ -84,7 +83,7 @@ your-project/ ``` :::tip[Troubleshooting] -Having issues? See [Install BMad](../../how-to/installation/install-bmad.md) for common solutions. +Having issues? See [Install BMad](/docs/how-to/installation/install-bmad.md) for common solutions. ::: ## Step 1: Initialize Your Project @@ -166,12 +165,12 @@ Load the **SM agent** and run `sprint-planning`. This creates `sprint-status.yam For each story, repeat this cycle with fresh chats: -| Step | Agent | Workflow | Purpose | -|------|-------|----------|---------| -| 1 | SM | `create-story` | Create story file from epic | -| 2 | DEV | `dev-story` | Implement the story | -| 3 | TEA | `automate` | Generate guardrail tests *(optional)* | -| 4 | DEV | `code-review` | Quality validation *(recommended)* | +| Step | Agent | Workflow | Purpose | +| ---- | ----- | -------------- | ------------------------------------- | +| 1 | SM | `create-story` | Create story file from epic | +| 2 | DEV | `dev-story` | Implement the story | +| 3 | TEA | `automate` | Generate guardrail tests *(optional)* | +| 4 | DEV | `code-review` | Quality validation *(recommended)* | After completing all stories in an epic, load the **SM agent** and run `retrospective`. @@ -200,18 +199,18 @@ your-project/ ## Quick Reference -| Command | Agent | Purpose | -|---------|-------|---------| -| `*workflow-init` | Analyst | Initialize a new project | -| `*workflow-status` | Any | Check progress and next steps | -| `*prd` | PM | Create Product Requirements Document | -| `*create-architecture` | Architect | Create architecture document | -| `*create-epics-and-stories` | PM | Break down PRD into epics | -| `*implementation-readiness` | Architect | Validate planning cohesion | -| `*sprint-planning` | SM | Initialize sprint tracking | -| `*create-story` | SM | Create a story file | -| `*dev-story` | DEV | Implement a story | -| `*code-review` | DEV | Review implemented code | +| Command | Agent | Purpose | +| --------------------------- | --------- | ------------------------------------ | +| `*workflow-init` | Analyst | Initialize a new project | +| `*workflow-status` | Any | Check progress and next steps | +| `*prd` | PM | Create Product Requirements Document | +| `*create-architecture` | Architect | Create architecture document | +| `*create-epics-and-stories` | PM | Break down PRD into epics | +| `*implementation-readiness` | Architect | Validate planning cohesion | +| `*sprint-planning` | SM | Initialize sprint tracking | +| `*create-story` | SM | Create a story file | +| `*dev-story` | DEV | Implement a story | +| `*code-review` | DEV | Review implemented code | ## Common Questions @@ -231,7 +230,7 @@ Yes, once you learn the flow. Use the Quick Reference to go directly to needed w - **During workflows** — Agents guide you with questions and explanations - **Community** — [Discord](https://discord.gg/gk8jAdXWmj) (#bmad-method-help, #report-bugs-and-issues) -- **Documentation** — [BMM Workflow Reference](../../reference/workflows/index.md) +- **Documentation** — [BMM Workflow Reference](/docs/reference/workflows/index.md) - **Video tutorials** — [BMad Code YouTube](https://www.youtube.com/@BMadCode) ## Key Takeaways diff --git a/docs/tutorials/getting-started/quick-start-bmgd.md b/docs/tutorials/getting-started/quick-start-bmgd.md index eca43f38..421ea867 100644 --- a/docs/tutorials/getting-started/quick-start-bmgd.md +++ b/docs/tutorials/getting-started/quick-start-bmgd.md @@ -7,7 +7,7 @@ description: Build games with BMad's Game Development Module Build games faster using AI-powered workflows with specialized game development agents that guide you through preproduction, design, architecture, and implementation. :::note[Module Extension] -BMGD (BMad Game Development) is a module that extends BMad Method. You'll need BMad installed first—see the [BMad v4 tutorial](./getting-started-bmadv4.md) or [BMad v6 tutorial](./getting-started-bmadv6.md) if you haven't installed it yet. +BMGD (BMad Game Development) is a module that extends BMad Method. You'll need BMad installed first—see the [BMad v6 tutorial](/docs/tutorials/getting-started/getting-started-bmadv6.md) if you haven't installed it yet. ::: ## What You'll Learn @@ -36,12 +36,12 @@ BMGD (BMad Game Development) is a module that extends BMad Method. You'll need B BMGD follows four game development phases with specialized agents for each: -| Phase | Name | What Happens | -|-------|------|--------------| -| 1 | Preproduction | Capture game vision, create Game Brief *(optional brainstorming)* | -| 2 | Design | Detail mechanics, systems, narrative in GDD | -| 3 | Technical | Plan engine, architecture, technical decisions | -| 4 | Production | Build game in sprints, story by story | +| Phase | Name | What Happens | +| ----- | ------------- | ----------------------------------------------------------------- | +| 1 | Preproduction | Capture game vision, create Game Brief *(optional brainstorming)* | +| 2 | Design | Detail mechanics, systems, narrative in GDD | +| 3 | Technical | Plan engine, architecture, technical decisions | +| 4 | Production | Build game in sprints, story by story | ![BMGD Workflow Overview](./images/workflow-overview.jpg) @@ -49,14 +49,14 @@ BMGD follows four game development phases with specialized agents for each: ### Game Development Agents -| Agent | When to Use | -|-------|-------------| -| **Game Designer** | Brainstorming, Game Brief, GDD, Narrative | -| **Game Architect** | Architecture, technical decisions | -| **Game Developer** | Implementation, code reviews | -| **Game Scrum Master** | Sprint planning, story management | -| **Game QA** | Test framework, test design, automation | -| **Game Solo Dev** | Quick prototyping, indie development | +| Agent | When to Use | +| --------------------- | ----------------------------------------- | +| **Game Designer** | Brainstorming, Game Brief, GDD, Narrative | +| **Game Architect** | Architecture, technical decisions | +| **Game Developer** | Implementation, code reviews | +| **Game Scrum Master** | Sprint planning, story management | +| **Game QA** | Test framework, test design, automation | +| **Game Solo Dev** | Quick prototyping, indie development | ## Installation @@ -171,12 +171,12 @@ Load the **Game Scrum Master** agent and run `sprint-planning`. This creates `sp For each story, repeat this cycle with fresh chats: -| Step | Agent | Workflow | Purpose | -|------|-------|----------|---------| -| 1 | Game SM | `create-story` | Create story file from epic | -| 2 | Game Dev | `dev-story` | Implement the story | -| 3 | Game QA | `automate` | Generate tests *(optional)* | -| 4 | Game Dev | `code-review` | Quality validation *(recommended)* | +| Step | Agent | Workflow | Purpose | +| ---- | -------- | -------------- | ---------------------------------- | +| 1 | Game SM | `create-story` | Create story file from epic | +| 2 | Game Dev | `dev-story` | Implement the story | +| 3 | Game QA | `automate` | Generate tests *(optional)* | +| 4 | Game Dev | `code-review` | Quality validation *(recommended)* | After completing all stories in an epic, load the **Game SM** and run `retrospective`. @@ -213,18 +213,18 @@ your-project/ ## Quick Reference -| Command | Agent | Purpose | -|---------|-------|---------| -| `*brainstorm-game` | Game Designer | Guided game ideation | -| `*create-game-brief` | Game Designer | Create Game Brief | -| `*create-gdd` | Game Designer | Create Game Design Document | -| `*narrative` | Game Designer | Create Narrative Design | -| `*create-architecture` | Game Architect | Create game architecture | -| `*sprint-planning` | Game SM | Initialize sprint tracking | -| `*create-story` | Game SM | Create a story file | -| `*dev-story` | Game Dev | Implement a story | -| `*code-review` | Game Dev | Review implemented code | -| `*workflow-status` | Any | Check progress and next steps | +| Command | Agent | Purpose | +| ---------------------- | -------------- | ----------------------------- | +| `*brainstorm-game` | Game Designer | Guided game ideation | +| `*create-game-brief` | Game Designer | Create Game Brief | +| `*create-gdd` | Game Designer | Create Game Design Document | +| `*narrative` | Game Designer | Create Narrative Design | +| `*create-architecture` | Game Architect | Create game architecture | +| `*sprint-planning` | Game SM | Initialize sprint tracking | +| `*create-story` | Game SM | Create a story file | +| `*dev-story` | Game Dev | Implement a story | +| `*code-review` | Game Dev | Review implemented code | +| `*workflow-status` | Any | Check progress and next steps | ## Common Questions @@ -244,7 +244,7 @@ Yes. Documents are living artifacts—return to update them as your vision evolv - **During workflows** — Agents guide you with questions and explanations - **Community** — [Discord](https://discord.gg/gk8jAdXWmj) (#bmad-method-help, #report-bugs-and-issues) -- **Documentation** — [BMGD Workflow Reference](../../reference/workflows/bmgd-workflows.md) +- **Documentation** — [BMGD Workflow Reference](/docs/reference/workflows/bmgd-workflows.md) - **Video tutorials** — [BMad Code YouTube](https://www.youtube.com/@BMadCode) ## Key Takeaways diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md deleted file mode 100644 index bd24d5a6..00000000 --- a/docs/tutorials/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Tutorials" ---- - - -Learning-oriented guides that walk you through building something real with BMad. Perfect for getting hands-on experience. - -## Getting Started - -Start your journey with BMad by choosing a version that fits your needs: - -- [Get Started with v4 (Stable)](./getting-started/getting-started-bmadv4.md) — Production-ready version with battle-tested workflows -- [Try v6 (Alpha)](./getting-started/getting-started-bmadv6.md) — Latest features, still in active development - -## First Project - -Your first end-to-end project with BMad. - -## Advanced - -More complex scenarios and advanced patterns. diff --git a/package.json b/package.json index a7eb150f..a46171e3 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,10 @@ "bmad:install": "node tools/cli/bmad-cli.js install", "bundle": "node tools/cli/bundlers/bundle-web.js all", "docs:build": "node tools/build-docs.js", - "docs:check-links": "node tools/check-doc-links.js", "docs:dev": "astro dev --root website", + "docs:fix-links": "node tools/fix-doc-links.js", "docs:preview": "astro preview --root website", + "docs:validate-links": "node tools/validate-doc-links.js", "flatten": "node tools/flattener/main.js", "format:check": "prettier --check \"**/*.{js,cjs,mjs,json,yaml}\"", "format:fix": "prettier --write \"**/*.{js,cjs,mjs,json,yaml}\"", diff --git a/tools/build-docs.js b/tools/build-docs.js index a5080a76..791026b9 100644 --- a/tools/build-docs.js +++ b/tools/build-docs.js @@ -548,7 +548,7 @@ function checkDocLinks() { printHeader('Checking documentation links'); try { - execSync('node tools/check-doc-links.js', { + execSync('node tools/validate-doc-links.js', { cwd: PROJECT_ROOT, stdio: 'inherit', }); diff --git a/tools/check-doc-links.js b/tools/check-doc-links.js deleted file mode 100644 index d89d6605..00000000 --- a/tools/check-doc-links.js +++ /dev/null @@ -1,282 +0,0 @@ -/** - * Internal documentation link checker - * Scans markdown files in docs/ and verifies: - * - All relative links point to existing files - * - All anchor links (#section) point to valid headings - * - No duplicate/conflicting paths - * - * Exits with code 1 if broken links are found (fails the build). - */ - -const { readFileSync, existsSync } = require('node:fs'); -const { resolve, dirname, join, normalize, relative } = require('node:path'); -const { glob } = require('glob'); - -const DOCS_DIR = resolve(process.cwd(), 'docs'); - -// Regex to match markdown links: [text](path) and reference-style [text]: path -const LINK_PATTERNS = [ - /\[([^\]]*)\]\(([^)]+)\)/g, // [text](path) - /\[([^\]]+)\]:\s*(\S+)/g, // [text]: path -]; - -// Regex to extract headings for anchor validation -const HEADING_PATTERN = /^#{1,6}\s+(.+)$/gm; - -/** - * Determines whether a link should be ignored during validation. - * @param {string} link - The link URL or path to test. - * @returns {boolean} `true` if the link is external, uses a special protocol (`http://`, `https://`, `mailto:`, `tel:`), or is an absolute path starting with `/`, `false` otherwise. - */ -function shouldIgnore(link) { - return ( - link.startsWith('http://') || - link.startsWith('https://') || - link.startsWith('mailto:') || - link.startsWith('tel:') || - link.startsWith('/') // Absolute paths handled by Astro routing - ); -} - -/** - * Convert a markdown heading into the anchor slug used by common Markdown processors. - * - * Produces a lowercase slug with emojis and most punctuation removed, whitespace collapsed to single - * hyphens, consecutive hyphens collapsed, and leading/trailing hyphens trimmed. - * @param {string} heading - The heading text to convert. - * @returns {string} The resulting anchor slug. - */ -function headingToAnchor(heading) { - return heading - .toLowerCase() - .replaceAll(/[\u{1F300}-\u{1F9FF}]/gu, '') // Remove emojis - .replaceAll(/[^\w\s-]/g, '') // Remove special chars except hyphens - .replaceAll(/\s+/g, '-') // Spaces to hyphens - .replaceAll(/-+/g, '-') // Collapse multiple hyphens - .replaceAll(/^-+|-+$/g, ''); // Trim leading/trailing hyphens -} - -/** - * Extracts anchor slugs from Markdown content by converting headings to their anchor form. - * - * Strips inline formatting (code spans, emphasis, bold, and inline links), processes - * Markdown headings (levels 1–6), and returns the resulting anchor slugs. - * - * @param {string} content - The Markdown text to scan for headings. - * @returns {Set} A set of anchor slugs derived from the headings in `content`. - */ -function extractAnchors(content) { - const anchors = new Set(); - let match; - - HEADING_PATTERN.lastIndex = 0; - while ((match = HEADING_PATTERN.exec(content)) !== null) { - const headingText = match[1].trim(); - // Remove inline code, bold, italic, links from heading - const cleanHeading = headingText - .replaceAll(/`[^`]+`/g, '') - .replaceAll(/\*\*([^*]+)\*\*/g, '$1') - .replaceAll(/\*([^*]+)\*/g, '$1') - .replaceAll(/\[([^\]]+)\]\([^)]+\)/g, '$1') - .trim(); - anchors.add(headingToAnchor(cleanHeading)); - } - - return anchors; -} - -/** - * Remove fenced and inline code segments from Markdown content. - * - * @param {string} content - Markdown text to sanitize. - * @returns {string} The input content with fenced code blocks (```...``` and ~~~...~~~) and inline code (backtick-enclosed) removed. - */ -function stripCodeBlocks(content) { - // Remove fenced code blocks (``` or ~~~) - return content - .replaceAll(/```[\s\S]*?```/g, '') - .replaceAll(/~~~[\s\S]*?~~~/g, '') - .replaceAll(/`[^`\n]+`/g, ''); // Also remove inline code -} - -/** - * Extracts all non-external link targets from markdown content, ignoring links inside code blocks. - * @param {string} content - Markdown source to scan for link targets. - * @returns {string[]} Array of raw link strings (paths and optional anchors) found in the content; external or protocol-based links are excluded. - */ -function extractLinks(content) { - const strippedContent = stripCodeBlocks(content); - const links = []; - for (const pattern of LINK_PATTERNS) { - let match; - pattern.lastIndex = 0; - while ((match = pattern.exec(strippedContent)) !== null) { - const rawLink = match[2]; - if (!shouldIgnore(rawLink)) { - links.push(rawLink); - } - } - } - return links; -} - -/** - * Split a link into its path and anchor components. - * @param {string} link - The link string to parse; may include a `#` followed by an anchor. - * @returns {{path: string|null, anchor: string|null}} An object where `path` is the portion before `#` (or `null` when empty, indicating a same-file anchor), and `anchor` is the portion after `#` (or `null` when no `#` is present). Note: `anchor` may be an empty string if the link ends with `#`. - */ -function parseLink(link) { - const hashIndex = link.indexOf('#'); - if (hashIndex === -1) { - return { path: link, anchor: null }; - } - return { - path: link.slice(0, hashIndex) || null, // Empty path means same file - anchor: link.slice(hashIndex + 1), - }; -} - -/** - * Resolve a relative markdown link path from a source file to a concrete absolute file path. - * @param {string} fromFile - Absolute path of the file containing the link. - * @param {string|null} linkPath - Link target as written in markdown; may be `null` or empty for same-file anchors. - * @returns {string} The resolved absolute path. If `linkPath` is null/empty returns `fromFile`. If the resolved path has no extension, an existing `.md` file or an `index.md` inside a matching directory is preferred; otherwise the normalized resolved path is returned. - */ -function resolveLink(fromFile, linkPath) { - if (!linkPath) return fromFile; // Same file anchor - - const fromDir = dirname(fromFile); - let resolved = normalize(resolve(fromDir, linkPath)); - - // If link doesn't have extension, try .md - if (!resolved.endsWith('.md') && !existsSync(resolved)) { - const withMd = resolved + '.md'; - if (existsSync(withMd)) { - return withMd; - } - // Try as directory with index.md - const asIndex = join(resolved, 'index.md'); - if (existsSync(asIndex)) { - return asIndex; - } - } - - return resolved; -} - -// Cache for file anchors to avoid re-reading files -const anchorCache = new Map(); - -/** - * Retrieve and cache the set of markdown anchor slugs for a given file. - * - * Reads the file at the provided path, extracts heading-based anchor slugs, stores them in an internal cache, and returns them. - * @param {string} filePath - Absolute or relative path to the markdown file. - * @returns {Set} The set of anchor slugs present in the file. - */ -function getAnchorsForFile(filePath) { - if (anchorCache.has(filePath)) { - return anchorCache.get(filePath); - } - - const content = readFileSync(filePath, 'utf-8'); - const anchors = extractAnchors(content); - anchorCache.set(filePath, anchors); - return anchors; -} - -/** - * Validate Markdown files in docs/ for broken relative links and anchor targets. - * - * Scans all `.md` and `.mdx` files under DOCS_DIR, checks that relative links resolve to existing - * files and that any `#anchor` references point to existing headings. Prints a grouped, - * colored report of issues to stdout and terminates the process with exit code `0` if no issues - * were found or `1` if any broken links or anchors are detected. - */ -async function main() { - console.log(' → Scanning for broken links and anchors...'); - - const files = await glob('**/*.{md,mdx}', { cwd: DOCS_DIR, absolute: true }); - const errors = []; - - // Track all resolved paths for duplicate detection - const pathRegistry = new Map(); // normalized path -> [source files] - - for (const file of files) { - const content = readFileSync(file, 'utf-8'); - const links = extractLinks(content); - const relativePath = relative(DOCS_DIR, file); - - for (const rawLink of links) { - const { path: linkPath, anchor } = parseLink(rawLink); - - // Resolve target file - const targetFile = resolveLink(file, linkPath); - const normalizedTarget = normalize(targetFile); - - // Check if file exists (skip for same-file anchors) - if (linkPath && !existsSync(targetFile)) { - errors.push({ - type: 'broken-link', - file: relativePath, - link: rawLink, - message: `File not found: ${linkPath}`, - }); - continue; - } - - // Check anchor if present - if (anchor) { - const anchors = getAnchorsForFile(targetFile); - if (!anchors.has(anchor)) { - errors.push({ - type: 'broken-anchor', - file: relativePath, - link: rawLink, - message: `Anchor "#${anchor}" not found in ${linkPath || 'same file'}`, - }); - } - } - - // Track paths for duplicate detection - if (linkPath) { - if (!pathRegistry.has(normalizedTarget)) { - pathRegistry.set(normalizedTarget, []); - } - pathRegistry.get(normalizedTarget).push({ from: relativePath, link: rawLink }); - } - } - } - - // Report results - if (errors.length === 0) { - console.log(` \u001B[32m✓\u001B[0m Checked ${files.length} files - no broken links found.`); - process.exit(0); - } - - console.log(`\n \u001B[31m✗\u001B[0m Found ${errors.length} issue(s):\n`); - - // Group by file - const byFile = {}; - for (const error of errors) { - if (!byFile[error.file]) byFile[error.file] = []; - byFile[error.file].push(error); - } - - for (const [file, fileErrors] of Object.entries(byFile)) { - console.log(` \u001B[36m${file}\u001B[0m`); - for (const error of fileErrors) { - const icon = error.type === 'broken-link' ? '🔗' : '⚓'; - console.log(` ${icon} ${error.link}`); - console.log(` └─ ${error.message}`); - } - console.log(); - } - - process.exit(1); -} - -main().catch((error) => { - console.error('Error:', error.message); - process.exit(1); -}); diff --git a/tools/fix-doc-links.js b/tools/fix-doc-links.js new file mode 100644 index 00000000..dbfcc862 --- /dev/null +++ b/tools/fix-doc-links.js @@ -0,0 +1,288 @@ +/** + * Fix Documentation Links + * + * Converts relative markdown links to repo-relative paths with .md extension. + * This ensures links work both in GitHub and on the Astro/Starlight site + * (the rehype plugin transforms /docs/path/file.md → /path/file/ at build time). + * + * - ./file.md → /docs/current/path/file.md + * - ../other/file.md → /docs/resolved/path/file.md + * - /path/file/ → /docs/path/file.md (or /docs/path/file/index.md if it's a directory) + * + * Usage: + * node tools/fix-doc-links.js # Dry run (shows what would change) + * node tools/fix-doc-links.js --write # Actually write changes + */ + +const fs = require('node:fs'); +const path = require('node:path'); + +const DOCS_ROOT = path.resolve(__dirname, '../docs'); +const DRY_RUN = !process.argv.includes('--write'); + +// Regex to match markdown links: +// - [text](path.md) or [text](path.md#anchor) - existing .md links +// - [text](/path/to/page/) or [text](/path/to/page/#anchor) - site-relative links to convert +const MARKDOWN_LINK_REGEX = /\[([^\]]*)\]\(([^)]+(?:\.md|\/))(?:#[^)]*)?(?:\?[^)]*)?\)/g; +// Simpler approach: match all markdown links and filter in the handler +const ALL_MARKDOWN_LINKS_REGEX = /\[([^\]]*)\]\(([^)]+)\)/g; + +/** + * Get all markdown files in docs directory, excluding _* directories/files + */ +function getMarkdownFiles(dir) { + const files = []; + + function walk(currentDir) { + const entries = fs.readdirSync(currentDir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(currentDir, entry.name); + + // Skip underscore-prefixed entries + if (entry.name.startsWith('_')) { + continue; + } + + if (entry.isDirectory()) { + walk(fullPath); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + files.push(fullPath); + } + } + } + + walk(dir); + return files; +} + +/** + * Convert a markdown link href to repo-relative path with .md extension + * + * @param {string} href - The original href (e.g., "./file.md", "/path/to/page/", "/path/to/page/#anchor") + * @param {string} currentFilePath - Absolute path to the file containing this link + * @returns {string|null} - Repo-relative path (e.g., "/docs/path/to/file.md"), or null if shouldn't be converted + */ +function convertToRepoRelative(href, currentFilePath) { + // Skip external links + if (href.includes('://') || href.startsWith('mailto:') || href.startsWith('tel:')) { + return null; + } + + // Skip anchor-only links + if (href.startsWith('#')) { + return null; + } + + // Extract anchor and query string if present + let anchor = ''; + let query = ''; + let pathPortion = href; + + const hashIndex = href.indexOf('#'); + const queryIndex = href.indexOf('?'); + + if (hashIndex !== -1 || queryIndex !== -1) { + const firstDelimiter = Math.min(hashIndex === -1 ? Infinity : hashIndex, queryIndex === -1 ? Infinity : queryIndex); + pathPortion = href.slice(0, Math.max(0, firstDelimiter)); + + const suffix = href.slice(Math.max(0, firstDelimiter)); + const anchorInSuffix = suffix.indexOf('#'); + + if (suffix.startsWith('?')) { + if (anchorInSuffix === -1) { + query = suffix; + } else { + query = suffix.slice(0, Math.max(0, anchorInSuffix)); + anchor = suffix.slice(Math.max(0, anchorInSuffix)); + } + } else { + anchor = suffix; + } + } + + // Skip non-documentation links (images, external assets, etc.) + const ext = path.extname(pathPortion).toLowerCase(); + if ( + ext && + ext !== '.md' && + !['.md'].includes(ext) && // Has an extension that's not .md - skip unless it's a trailing slash path + !pathPortion.endsWith('/') + ) { + return null; + } + + // Check if original path ends with / (directory reference) BEFORE path.join normalizes it + const isDirectoryPath = pathPortion.endsWith('/'); + + let absolutePath; + + if (pathPortion.startsWith('/docs/')) { + // Already repo-relative with /docs/ prefix + absolutePath = path.join(path.dirname(DOCS_ROOT), pathPortion); + } else if (pathPortion.startsWith('/')) { + // Site-relative (e.g., /tutorials/getting-started/) - resolve from docs root + absolutePath = path.join(DOCS_ROOT, pathPortion); + } else { + // Relative path (./, ../, or bare filename) - resolve from current file's directory + const currentDir = path.dirname(currentFilePath); + absolutePath = path.resolve(currentDir, pathPortion); + } + + // Convert to repo-relative path (with /docs/ prefix) + let repoRelative = '/docs/' + path.relative(DOCS_ROOT, absolutePath); + + // Normalize path separators for Windows + repoRelative = repoRelative.split(path.sep).join('/'); + + // If original path was a directory reference (ended with /), check for index.md or file.md + if (isDirectoryPath) { + const relativeDir = repoRelative.slice(6); // Remove '/docs/' + + // Handle root path case (relativeDir is empty or just '.') + const normalizedDir = relativeDir === '' || relativeDir === '.' ? '' : relativeDir; + const indexPath = path.join(DOCS_ROOT, normalizedDir, 'index.md'); + const filePath = normalizedDir ? path.join(DOCS_ROOT, normalizedDir + '.md') : null; + + if (fs.existsSync(indexPath)) { + // Avoid double slash when repoRelative is '/docs/' (root case) + repoRelative = repoRelative.endsWith('/') ? repoRelative + 'index.md' : repoRelative + '/index.md'; + } else if (filePath && fs.existsSync(filePath)) { + repoRelative = repoRelative + '.md'; + } else { + // Neither exists - default to index.md and let validation catch it + repoRelative = repoRelative.endsWith('/') ? repoRelative + 'index.md' : repoRelative + '/index.md'; + } + } else if (!repoRelative.endsWith('.md')) { + // Path doesn't end with .md - add .md + repoRelative = repoRelative + '.md'; + } + + return repoRelative + query + anchor; +} + +/** + * Process a single markdown file, skipping links inside fenced code blocks + * + * @param {string} filePath - Absolute path to the file + * @returns {Object} - { changed: boolean, original: string, updated: string, changes: Array } + */ +function processFile(filePath) { + const original = fs.readFileSync(filePath, 'utf-8'); + const changes = []; + + // Extract fenced code blocks and replace with placeholders + const codeBlocks = []; + const CODE_PLACEHOLDER = '\u0000CODE_BLOCK_'; + + let contentWithPlaceholders = original.replaceAll(/```[\s\S]*?```/g, (match) => { + const index = codeBlocks.length; + codeBlocks.push(match); + return `${CODE_PLACEHOLDER}${index}\u0000`; + }); + + // Process links only in non-code-block content + contentWithPlaceholders = contentWithPlaceholders.replaceAll(ALL_MARKDOWN_LINKS_REGEX, (match, linkText, href) => { + const newHref = convertToRepoRelative(href, filePath); + + // Skip if conversion returned null (external link, anchor, etc.) + if (newHref === null) { + return match; + } + + // Only record as change if actually different + if (newHref !== href) { + changes.push({ from: href, to: newHref }); + return `[${linkText}](${newHref})`; + } + + return match; + }); + + // Restore code blocks + const updated = contentWithPlaceholders.replaceAll( + new RegExp(`${CODE_PLACEHOLDER}(\\d+)\u0000`, 'g'), + (match, index) => codeBlocks[parseInt(index, 10)], + ); + + return { + changed: changes.length > 0, + original, + updated, + changes, + }; +} + +/** + * Validate that a repo-relative link points to an existing file + */ +function validateLink(repoRelativePath) { + // Strip anchor/query + const checkPath = repoRelativePath.split('#')[0].split('?')[0]; + + // Remove /docs/ prefix to get path relative to DOCS_ROOT + const relativePath = checkPath.startsWith('/docs/') ? checkPath.slice(6) : checkPath.slice(1); + + return fs.existsSync(path.join(DOCS_ROOT, relativePath)); +} + +// Main execution +console.log(`\nScanning docs in: ${DOCS_ROOT}`); +console.log(`Mode: ${DRY_RUN ? 'DRY RUN (use --write to apply changes)' : 'WRITE MODE'}\n`); + +const files = getMarkdownFiles(DOCS_ROOT); +console.log(`Found ${files.length} markdown files (excluding _* paths)\n`); + +let totalChanges = 0; +let filesChanged = 0; +const brokenLinks = []; + +for (const filePath of files) { + const relativePath = path.relative(DOCS_ROOT, filePath); + const result = processFile(filePath); + + if (result.changed) { + filesChanged++; + totalChanges += result.changes.length; + + console.log(`\n${relativePath}`); + for (const change of result.changes) { + const isValid = validateLink(change.to); + const status = isValid ? ' ' : '! '; + + console.log(`${status} ${change.from}`); + console.log(` -> ${change.to}`); + + if (!isValid) { + brokenLinks.push({ + file: relativePath, + link: change.to, + original: change.from, + }); + } + } + + if (!DRY_RUN) { + fs.writeFileSync(filePath, result.updated, 'utf-8'); + } + } +} + +console.log(`\n${'─'.repeat(60)}`); +console.log(`\nSummary:`); +console.log(` Files scanned: ${files.length}`); +console.log(` Files with changes: ${filesChanged}`); +console.log(` Total link updates: ${totalChanges}`); + +if (brokenLinks.length > 0) { + console.log(`\n! Potential broken links (${brokenLinks.length}):`); + for (const bl of brokenLinks) { + console.log(` ${bl.file}: ${bl.link}`); + } +} + +if (DRY_RUN && totalChanges > 0) { + console.log(`\nRun with --write to apply these changes`); +} + +console.log(''); diff --git a/tools/validate-doc-links.js b/tools/validate-doc-links.js new file mode 100644 index 00000000..5b0a018a --- /dev/null +++ b/tools/validate-doc-links.js @@ -0,0 +1,363 @@ +/** + * Documentation Link Validator + * + * Validates site-relative links in markdown files and attempts to fix broken ones. + * + * What it checks: + * - All site-relative links (starting with /) point to existing .md files + * - Anchor links (#section) point to valid headings + * + * What it fixes: + * - Broken links where the target file can be found elsewhere in /docs + * + * Usage: + * node tools/validate-doc-links.js # Dry run (validate and show issues) + * node tools/validate-doc-links.js --write # Fix auto-fixable issues + */ + +const fs = require('node:fs'); +const path = require('node:path'); + +const DOCS_ROOT = path.resolve(__dirname, '../docs'); +const DRY_RUN = !process.argv.includes('--write'); + +// Regex to match markdown links with site-relative paths +const LINK_REGEX = /\[([^\]]*)\]\((\/[^)]+)\)/g; + +// File extensions that are static assets, not markdown docs +const STATIC_ASSET_EXTENSIONS = ['.zip', '.txt', '.pdf', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp', '.ico']; + +// Regex to extract headings for anchor validation +const HEADING_PATTERN = /^#{1,6}\s+(.+)$/gm; + +/** + * Get all markdown files in docs directory, excluding _* directories/files + */ +function getMarkdownFiles(dir) { + const files = []; + + function walk(currentDir) { + const entries = fs.readdirSync(currentDir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(currentDir, entry.name); + + if (entry.name.startsWith('_')) { + continue; + } + + if (entry.isDirectory()) { + walk(fullPath); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + files.push(fullPath); + } + } + } + + walk(dir); + return files; +} + +/** + * Strip fenced code blocks from content + */ +function stripCodeBlocks(content) { + return content.replaceAll(/```[\s\S]*?```/g, ''); +} + +/** + * Convert a heading to its anchor slug + */ +function headingToAnchor(heading) { + return heading + .toLowerCase() + .replaceAll(/[\u{1F300}-\u{1F9FF}]/gu, '') // Remove emojis + .replaceAll(/[^\w\s-]/g, '') // Remove special chars + .replaceAll(/\s+/g, '-') // Spaces to hyphens + .replaceAll(/-+/g, '-') // Collapse hyphens + .replaceAll(/^-+|-+$/g, ''); // Trim hyphens +} + +/** + * Extract anchor slugs from a markdown file + */ +function extractAnchors(content) { + const anchors = new Set(); + let match; + + HEADING_PATTERN.lastIndex = 0; + while ((match = HEADING_PATTERN.exec(content)) !== null) { + const headingText = match[1] + .trim() + .replaceAll(/`[^`]+`/g, '') + .replaceAll(/\*\*([^*]+)\*\*/g, '$1') + .replaceAll(/\*([^*]+)\*/g, '$1') + .replaceAll(/\[([^\]]+)\]\([^)]+\)/g, '$1') + .trim(); + anchors.add(headingToAnchor(headingText)); + } + + return anchors; +} + +/** + * Resolve a site-relative link to a file path + * /docs/how-to/installation/install-bmad.md -> docs/how-to/installation/install-bmad.md + * /how-to/installation/install-bmad/ -> docs/how-to/installation/install-bmad.md or .../index.md + */ +function resolveLink(siteRelativePath) { + // Strip anchor and query + let checkPath = siteRelativePath.split('#')[0].split('?')[0]; + + // Strip /docs/ prefix if present (repo-relative links) + if (checkPath.startsWith('/docs/')) { + checkPath = checkPath.slice(5); // Remove '/docs' but keep leading '/' + } + + if (checkPath.endsWith('/')) { + // Could be file.md or directory/index.md + const asFile = path.join(DOCS_ROOT, checkPath.slice(0, -1) + '.md'); + const asIndex = path.join(DOCS_ROOT, checkPath, 'index.md'); + + if (fs.existsSync(asFile)) return asFile; + if (fs.existsSync(asIndex)) return asIndex; + return null; + } + + // Direct path (e.g., /path/file.md) + const direct = path.join(DOCS_ROOT, checkPath); + if (fs.existsSync(direct)) return direct; + + // Try with .md extension + const withMd = direct + '.md'; + if (fs.existsSync(withMd)) return withMd; + + return null; +} + +/** + * Search for a file with directory context + */ +function findFileWithContext(brokenPath) { + // Extract filename and parent directory from the broken path + // e.g., /tutorials/getting-started/foo/ -> parent: getting-started, file: foo.md + const cleanPath = brokenPath.replace(/\/$/, '').replace(/^\//, ''); + const parts = cleanPath.split('/'); + const fileName = parts.at(-1) + '.md'; + const parentDir = parts.length > 1 ? parts.at(-2) : null; + + const allFiles = getMarkdownFiles(DOCS_ROOT); + const matches = []; + + for (const file of allFiles) { + const fileBaseName = path.basename(file); + const fileParentDir = path.basename(path.dirname(file)); + + // Exact filename match with parent directory context + if (fileBaseName === fileName) { + if (parentDir && fileParentDir === parentDir) { + // Strong match: both filename and parent dir match + return [file]; + } + matches.push(file); + } + + // Also check for index.md in a matching directory + if (fileBaseName === 'index.md' && fileParentDir === fileName.replace('.md', '')) { + matches.push(file); + } + } + + return matches; +} + +/** + * Convert absolute file path to site-relative URL + */ +function fileToSiteRelative(filePath) { + let relative = '/' + path.relative(DOCS_ROOT, filePath); + relative = relative.split(path.sep).join('/'); + + if (relative.endsWith('/index.md')) { + return relative.replace(/\/index\.md$/, '/'); + } + return relative.replace(/\.md$/, '/'); +} + +/** + * Process a single file and find issues + */ +function processFile(filePath) { + const content = fs.readFileSync(filePath, 'utf-8'); + const strippedContent = stripCodeBlocks(content); + const issues = []; + + let match; + LINK_REGEX.lastIndex = 0; + + while ((match = LINK_REGEX.exec(strippedContent)) !== null) { + const linkText = match[1]; + const href = match[2]; + + // Extract path and anchor + const hashIndex = href.indexOf('#'); + const linkPath = hashIndex === -1 ? href : href.slice(0, hashIndex); + const anchor = hashIndex === -1 ? null : href.slice(hashIndex + 1); + + // Skip static asset links (zip, txt, images, etc.) + const linkLower = linkPath.toLowerCase(); + if (STATIC_ASSET_EXTENSIONS.some((ext) => linkLower.endsWith(ext))) { + continue; + } + + // Validate the link target exists + const targetFile = resolveLink(linkPath); + + if (!targetFile) { + // Link is broken - try to find the file + const candidates = findFileWithContext(linkPath); + + const issue = { + type: 'broken-link', + linkText, + href, + linkPath, + fullMatch: match[0], + }; + + if (candidates.length === 1) { + issue.status = 'auto-fixable'; + issue.suggestedFix = fileToSiteRelative(candidates[0]) + (anchor ? '#' + anchor : ''); + issue.foundAt = path.relative(DOCS_ROOT, candidates[0]); + } else if (candidates.length > 1) { + issue.status = 'needs-review'; + issue.candidates = candidates.map((c) => path.relative(DOCS_ROOT, c)); + } else { + issue.status = 'manual-check'; + } + + issues.push(issue); + continue; + } + + // Validate anchor if present + if (anchor) { + const targetContent = fs.readFileSync(targetFile, 'utf-8'); + const anchors = extractAnchors(targetContent); + + if (!anchors.has(anchor)) { + issues.push({ + type: 'broken-anchor', + linkText, + href, + anchor, + status: 'manual-check', + message: `Anchor "#${anchor}" not found`, + }); + } + } + } + + return { content, issues }; +} + +/** + * Apply fixes to file content + */ +function applyFixes(content, issues) { + let updated = content; + + for (const issue of issues) { + if (issue.status === 'auto-fixable' && issue.suggestedFix) { + const oldLink = `[${issue.linkText}](${issue.href})`; + const newLink = `[${issue.linkText}](${issue.suggestedFix})`; + updated = updated.replace(oldLink, newLink); + } + } + + return updated; +} + +// Main execution +console.log(`\nValidating docs in: ${DOCS_ROOT}`); +console.log(`Mode: ${DRY_RUN ? 'DRY RUN (use --write to fix)' : 'WRITE MODE'}\n`); + +const files = getMarkdownFiles(DOCS_ROOT); +console.log(`Found ${files.length} markdown files\n`); + +let totalIssues = 0; +let autoFixable = 0; +let needsReview = 0; +let manualCheck = 0; +let filesWithIssues = 0; + +const allIssues = []; + +for (const filePath of files) { + const relativePath = path.relative(DOCS_ROOT, filePath); + const { content, issues } = processFile(filePath); + + if (issues.length > 0) { + filesWithIssues++; + totalIssues += issues.length; + + console.log(`\n${relativePath}`); + + for (const issue of issues) { + if (issue.status === 'auto-fixable') { + autoFixable++; + console.log(` [FIX] ${issue.href}`); + console.log(` -> ${issue.suggestedFix}`); + } else if (issue.status === 'needs-review') { + needsReview++; + console.log(` [REVIEW] ${issue.href}`); + console.log(` Multiple matches found:`); + for (const candidate of issue.candidates) { + console.log(` - ${candidate}`); + } + } else if (issue.type === 'broken-anchor') { + manualCheck++; + console.log(` [MANUAL] ${issue.href}`); + console.log(` ${issue.message}`); + } else { + manualCheck++; + console.log(` [MANUAL] ${issue.href}`); + console.log(` File not found anywhere - may need to remove link`); + } + + allIssues.push({ file: relativePath, ...issue }); + } + + // Apply fixes if not dry run + if (!DRY_RUN) { + const fixableIssues = issues.filter((i) => i.status === 'auto-fixable'); + if (fixableIssues.length > 0) { + const updated = applyFixes(content, fixableIssues); + fs.writeFileSync(filePath, updated, 'utf-8'); + } + } + } +} + +console.log(`\n${'─'.repeat(60)}`); +console.log(`\nSummary:`); +console.log(` Files scanned: ${files.length}`); +console.log(` Files with issues: ${filesWithIssues}`); +console.log(` Total issues: ${totalIssues}`); + +if (totalIssues > 0) { + console.log(`\n Breakdown:`); + console.log(` Auto-fixable: ${autoFixable}`); + console.log(` Needs review: ${needsReview}`); + console.log(` Manual check: ${manualCheck}`); +} + +if (totalIssues === 0) { + console.log(`\n All links valid!`); +} else if (DRY_RUN && autoFixable > 0) { + console.log(`\nRun with --write to auto-fix ${autoFixable} issue(s)`); +} + +console.log(''); + +process.exit(totalIssues > 0 ? 1 : 0); diff --git a/website/astro.config.mjs b/website/astro.config.mjs index e3d96fd3..cc76c528 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -87,22 +87,115 @@ export default defineConfig({ { label: 'Tutorials', collapsed: false, - autogenerate: { directory: 'tutorials' }, + items: [ + { + label: 'Getting Started', + autogenerate: { directory: 'tutorials/getting-started' }, + }, + { + label: 'Advanced', + autogenerate: { directory: 'tutorials/advanced' }, + }, + ], }, { label: 'How-To Guides', collapsed: true, - autogenerate: { directory: 'how-to' }, + items: [ + { slug: 'how-to/get-answers-about-bmad' }, + { + label: 'Installation', + autogenerate: { directory: 'how-to/installation' }, + }, + { + label: 'Workflows', + autogenerate: { directory: 'how-to/workflows' }, + }, + { + label: 'Customization', + autogenerate: { directory: 'how-to/customization' }, + }, + { + label: 'Brownfield Development', + autogenerate: { directory: 'how-to/brownfield' }, + }, + { + label: 'Troubleshooting', + autogenerate: { directory: 'how-to/troubleshooting' }, + }, + ], }, { label: 'Explanation', collapsed: true, - autogenerate: { directory: 'explanation' }, + items: [ + { + label: 'Core Concepts', + autogenerate: { directory: 'explanation/core-concepts' }, + }, + { + label: 'Architecture', + autogenerate: { directory: 'explanation/architecture' }, + }, + { + label: 'Philosophy', + autogenerate: { directory: 'explanation/philosophy' }, + }, + { + label: 'Features', + autogenerate: { directory: 'explanation/features' }, + }, + { + label: 'Agents', + autogenerate: { directory: 'explanation/agents' }, + }, + { + label: 'BMM', + autogenerate: { directory: 'explanation/bmm' }, + }, + { + label: 'BMad Builder', + autogenerate: { directory: 'explanation/bmad-builder' }, + }, + { + label: 'Game Development', + autogenerate: { directory: 'explanation/game-dev' }, + }, + { + label: 'Creative Intelligence', + autogenerate: { directory: 'explanation/creative-intelligence' }, + }, + { + label: 'Core Module', + autogenerate: { directory: 'explanation/core' }, + }, + { + label: 'FAQ', + autogenerate: { directory: 'explanation/faq' }, + }, + ], }, { label: 'Reference', collapsed: true, - autogenerate: { directory: 'reference' }, + items: [ + { + label: 'Agents', + autogenerate: { directory: 'reference/agents' }, + }, + { + label: 'Workflows', + autogenerate: { directory: 'reference/workflows' }, + }, + { + label: 'Configuration', + autogenerate: { directory: 'reference/configuration' }, + }, + { + label: 'Glossary', + autogenerate: { directory: 'reference/glossary' }, + }, + ], }, ], diff --git a/website/src/rehype-markdown-links.js b/website/src/rehype-markdown-links.js index ff66c67e..97d8dec3 100644 --- a/website/src/rehype-markdown-links.js +++ b/website/src/rehype-markdown-links.js @@ -1,21 +1,25 @@ /** - * Rehype plugin to transform relative markdown file links (.md) to page routes + * Rehype plugin to transform markdown file links (.md) to page routes * * Transforms: * ./path/to/file.md → ./path/to/file/ * ./path/index.md → ./path/ (index.md becomes directory root) * ../path/file.md#anchor → ../path/file/#anchor * ./file.md?query=param → ./file/?query=param + * /docs/absolute/path/file.md → /absolute/path/file/ * - * Only affects relative links (./, ../) - absolute and external links are unchanged + * For absolute paths starting with /docs/, the /docs prefix is stripped + * since the Astro site serves content from the docs directory as the root. + * + * Affects relative links (./, ../) and absolute paths (/) - external links are unchanged */ import { visit } from 'unist-util-visit'; /** - * Convert relative Markdown file links (./ or ../) into equivalent page route-style links. + * Convert Markdown file links (.md) into equivalent page route-style links. * - * The returned transformer walks the HTML tree and rewrites anchor `href` values that are relative paths pointing to `.md` files. It preserves query strings and hash anchors, rewrites `.../index.md` to the directory root path (`.../`), and rewrites other `.md` file paths by removing the `.md` extension and ensuring a trailing slash. Absolute, external, non-relative, non-string, or links without `.md` are left unchanged. + * The returned transformer walks the HTML tree and rewrites anchor `href` values that are relative paths (./, ../) or absolute paths (/) pointing to `.md` files. It preserves query strings and hash anchors, rewrites `.../index.md` to the directory root path (`.../`), and rewrites other `.md` file paths by removing the `.md` extension and ensuring a trailing slash. External links (http://, https://) and non-.md links are left unchanged. * * @returns {function} A HAST tree transformer that mutates `a` element `href` properties as described. */ @@ -34,8 +38,13 @@ export default function rehypeMarkdownLinks() { return; } - // Only transform relative paths starting with ./ or ../ - if (!href.startsWith('./') && !href.startsWith('../')) { + // Skip external links (http://, https://, mailto:, etc.) + if (href.includes('://') || href.startsWith('mailto:') || href.startsWith('tel:')) { + return; + } + + // Only transform paths starting with ./, ../, or / (absolute) + if (!href.startsWith('./') && !href.startsWith('../') && !href.startsWith('/')) { return; } @@ -73,6 +82,11 @@ export default function rehypeMarkdownLinks() { } } + // Strip /docs/ prefix from absolute paths (repo-relative → site-relative) + if (urlPath.startsWith('/docs/')) { + urlPath = urlPath.slice(5); // Remove '/docs' prefix, keeping the leading / + } + // Transform .md to / // Special case: index.md → directory root (e.g., ./tutorials/index.md → ./tutorials/) if (urlPath.endsWith('/index.md')) { From 3e3c92ed3e80307674a8c38092aa19292db4e32b Mon Sep 17 00:00:00 2001 From: Murat K Ozcan <34237651+muratkeremozcan@users.noreply.github.com> Date: Fri, 9 Jan 2026 12:55:57 -0600 Subject: [PATCH 03/22] =?UTF-8?q?docs:=20expand=20TEA=20documentation=20wi?= =?UTF-8?q?th=20cheat=20sheets,=20MCP=20enhancements,=20a=E2=80=A6=20(#128?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: expand TEA documentation with cheat sheets, MCP enhancements, and API testing patterns * docs: update TEA fragment counts and fix playwright-utils code examples * docs: addressed PR review concerns * docs: update TEA MCP configuration link to point to documentation site --- docs/explanation/features/tea-overview.md | 295 +++++- src/modules/bmm/agents/tea.agent.yaml | 8 +- src/modules/bmm/module.yaml | 2 +- .../bmm/testarch/knowledge/api-request.md | 171 +++- .../knowledge/api-testing-patterns.md | 843 ++++++++++++++++++ .../bmm/testarch/knowledge/auth-session.md | 198 +++- .../bmm/testarch/knowledge/file-utils.md | 311 +++++-- .../knowledge/intercept-network-call.md | 168 +++- src/modules/bmm/testarch/knowledge/log.md | 213 ++++- .../knowledge/network-error-monitor.md | 321 +++++-- .../testarch/knowledge/network-recorder.md | 384 ++++++-- .../bmm/testarch/knowledge/overview.md | 27 +- src/modules/bmm/testarch/knowledge/recurse.md | 221 ++++- src/modules/bmm/testarch/tea-index.csv | 37 +- 14 files changed, 2833 insertions(+), 366 deletions(-) create mode 100644 src/modules/bmm/testarch/knowledge/api-testing-patterns.md diff --git a/docs/explanation/features/tea-overview.md b/docs/explanation/features/tea-overview.md index 11e4c8f3..cacd25e3 100644 --- a/docs/explanation/features/tea-overview.md +++ b/docs/explanation/features/tea-overview.md @@ -195,20 +195,295 @@ Epic/Release Gate → TEA: *nfr-assess, *trace Phase 2 (release decision) **Note**: `*trace` is a two-phase workflow: Phase 1 (traceability) + Phase 2 (gate decision). This reduces cognitive load while maintaining natural workflow. +### Why TEA Requires Its Own Knowledge Base + +TEA uniquely requires: + +- **Extensive domain knowledge**: 30+ fragments covering test patterns, CI/CD, fixtures, quality practices, and optional playwright-utils integration +- **Cross-cutting concerns**: Domain-specific testing patterns that apply across all BMad projects (vs project-specific artifacts like PRDs/stories) +- **Optional integrations**: MCP capabilities (exploratory, verification) and playwright-utils support + +This architecture enables TEA to maintain consistent, production-ready testing patterns across all BMad projects while operating across multiple development phases. + +--- + + +## High-Level Cheat Sheets + +These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks** across the **4-Phase Methodology** (Phase 1: Analysis, Phase 2: Planning, Phase 3: Solutioning, Phase 4: Implementation). + +**Note:** Quick Flow projects typically don't require TEA (covered in Overview). These cheat sheets focus on BMad Method and Enterprise tracks where TEA adds value. + +**Legend for Track Deltas:** + +- ➕ = New workflow or phase added (doesn't exist in baseline) +- 🔄 = Modified focus (same workflow, different emphasis or purpose) +- 📦 = Additional output or archival requirement + +### Greenfield - BMad Method (Simple/Standard Work) + +**Planning Track:** BMad Method (PRD + Architecture) +**Use Case:** New projects with standard complexity + +| Workflow Stage | Test Architect | Dev / Team | Outputs | +| -------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------- | +| **Phase 1**: Discovery | - | Analyst `*product-brief` (optional) | `product-brief.md` | +| **Phase 2**: Planning | - | PM `*prd` (creates PRD with FRs/NFRs) | PRD with functional/non-functional requirements | +| **Phase 3**: Solutioning | Run `*framework`, `*ci` AFTER architecture and epic creation | Architect `*architecture`, `*create-epics-and-stories`, `*implementation-readiness` | Architecture, epics/stories, test scaffold, CI pipeline | +| **Phase 4**: Sprint Start | - | SM `*sprint-planning` | Sprint status file with all epics and stories | +| **Phase 4**: Epic Planning | Run `*test-design` for THIS epic (per-epic test plan) | Review epic scope | `test-design-epic-N.md` with risk assessment and test plan | +| **Phase 4**: Story Dev | (Optional) `*atdd` before dev, then `*automate` after | SM `*create-story`, DEV implements | Tests, story implementation | +| **Phase 4**: Story Review | Execute `*test-review` (optional), re-run `*trace` | Address recommendations, update code/tests | Quality report, refreshed coverage matrix | +| **Phase 4**: Release Gate | (Optional) `*test-review` for final audit, Run `*trace` (Phase 2) | Confirm Definition of Done, share release notes | Quality audit, Gate YAML + release summary | + +
+Execution Notes + +- Run `*framework` only once per repo or when modern harness support is missing. +- **Phase 3 (Solutioning)**: After architecture is complete, run `*framework` and `*ci` to setup test infrastructure based on architectural decisions. +- **Phase 4 starts**: After solutioning is complete, sprint planning loads all epics. +- **`*test-design` runs per-epic**: At the beginning of working on each epic, run `*test-design` to create a test plan for THAT specific epic/feature. Output: `test-design-epic-N.md`. +- Use `*atdd` before coding when the team can adopt ATDD; share its checklist with the dev agent. +- Post-implementation, keep `*trace` current, expand coverage with `*automate`, optionally review test quality with `*test-review`. For release gate, run `*trace` with Phase 2 enabled to get deployment decision. +- Use `*test-review` after `*atdd` to validate generated tests, after `*automate` to ensure regression quality, or before gate for final audit. +- Clarification: `*test-review` is optional and only audits existing tests; run it after `*atdd` or `*automate` when you want a quality review, not as a required step. +- Clarification: `*atdd` outputs are not auto-consumed; share the ATDD doc/tests with the dev workflow. `*trace` does not run `*atdd`—it evaluates existing artifacts for coverage and gate readiness. +- Clarification: `*ci` is a one-time setup; recommended early (Phase 3 or before feature work), but it can be done later if it was skipped. + +
+ +
+Worked Example – “Nova CRM” Greenfield Feature + +1. **Planning (Phase 2):** Analyst runs `*product-brief`; PM executes `*prd` to produce PRD with FRs/NFRs. +2. **Solutioning (Phase 3):** Architect completes `*architecture` for the new module; `*create-epics-and-stories` generates epics/stories based on architecture; TEA sets up test infrastructure via `*framework` and `*ci` based on architectural decisions; gate check validates planning completeness. +3. **Sprint Start (Phase 4):** Scrum Master runs `*sprint-planning` to load all epics into sprint status. +4. **Epic 1 Planning (Phase 4):** TEA runs `*test-design` to create test plan for Epic 1, producing `test-design-epic-1.md` with risk assessment. +5. **Story Implementation (Phase 4):** For each story in Epic 1, SM generates story via `*create-story`; TEA optionally runs `*atdd`; Dev implements with guidance from failing tests. +6. **Post-Dev (Phase 4):** TEA runs `*automate`, optionally `*test-review` to audit test quality, re-runs `*trace` to refresh coverage. +7. **Release Gate:** TEA runs `*trace` with Phase 2 enabled to generate gate decision. + +
+ +### Brownfield - BMad Method or Enterprise (Simple or Complex) + +**Planning Tracks:** BMad Method or Enterprise Method +**Use Case:** Existing codebases - simple additions (BMad Method) or complex enterprise requirements (Enterprise Method) + +**🔄 Brownfield Deltas from Greenfield:** + +- ➕ Documentation (Prerequisite) - Document existing codebase if undocumented +- ➕ Phase 2: `*trace` - Baseline existing test coverage before planning +- 🔄 Phase 4: `*test-design` - Focus on regression hotspots and brownfield risks +- 🔄 Phase 4: Story Review - May include `*nfr-assess` if not done earlier + +| Workflow Stage | Test Architect | Dev / Team | Outputs | +| --------------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| **Documentation**: Prerequisite ➕ | - | Analyst `*document-project` (if undocumented) | Comprehensive project documentation | +| **Phase 1**: Discovery | - | Analyst/PM/Architect rerun planning workflows | Updated planning artifacts in `{output_folder}` | +| **Phase 2**: Planning | Run ➕ `*trace` (baseline coverage) | PM `*prd` (creates PRD with FRs/NFRs) | PRD with FRs/NFRs, ➕ coverage baseline | +| **Phase 3**: Solutioning | Run `*framework`, `*ci` AFTER architecture and epic creation | Architect `*architecture`, `*create-epics-and-stories`, `*implementation-readiness` | Architecture, epics/stories, test framework, CI pipeline | +| **Phase 4**: Sprint Start | - | SM `*sprint-planning` | Sprint status file with all epics and stories | +| **Phase 4**: Epic Planning | Run `*test-design` for THIS epic 🔄 (regression hotspots) | Review epic scope and brownfield risks | `test-design-epic-N.md` with brownfield risk assessment and mitigation | +| **Phase 4**: Story Dev | (Optional) `*atdd` before dev, then `*automate` after | SM `*create-story`, DEV implements | Tests, story implementation | +| **Phase 4**: Story Review | Apply `*test-review` (optional), re-run `*trace`, ➕ `*nfr-assess` if needed | Resolve gaps, update docs/tests | Quality report, refreshed coverage matrix, NFR report | +| **Phase 4**: Release Gate | (Optional) `*test-review` for final audit, Run `*trace` (Phase 2) | Capture sign-offs, share release notes | Quality audit, Gate YAML + release summary | + +
+Execution Notes + +- Lead with `*trace` during Planning (Phase 2) to baseline existing test coverage before architecture work begins. +- **Phase 3 (Solutioning)**: After architecture is complete, run `*framework` and `*ci` to modernize test infrastructure. For brownfield, framework may need to integrate with or replace existing test setup. +- **Phase 4 starts**: After solutioning is complete and sprint planning loads all epics. +- **`*test-design` runs per-epic**: At the beginning of working on each epic, run `*test-design` to identify regression hotspots, integration risks, and mitigation strategies for THAT specific epic/feature. Output: `test-design-epic-N.md`. +- Use `*atdd` when stories benefit from ATDD; otherwise proceed to implementation and rely on post-dev automation. +- After development, expand coverage with `*automate`, optionally review test quality with `*test-review`, re-run `*trace` (Phase 2 for gate decision). Run `*nfr-assess` now if non-functional risks weren't addressed earlier. +- Use `*test-review` to validate existing brownfield tests or audit new tests before gate. + +
+ +
+Worked Example – “Atlas Payments” Brownfield Story + +1. **Planning (Phase 2):** PM executes `*prd` to create PRD with FRs/NFRs; TEA runs `*trace` to baseline existing coverage. +2. **Solutioning (Phase 3):** Architect triggers `*architecture` capturing legacy payment flows and integration architecture; `*create-epics-and-stories` generates Epic 1 (Payment Processing) based on architecture; TEA sets up `*framework` and `*ci` based on architectural decisions; gate check validates planning. +3. **Sprint Start (Phase 4):** Scrum Master runs `*sprint-planning` to load Epic 1 into sprint status. +4. **Epic 1 Planning (Phase 4):** TEA runs `*test-design` for Epic 1 (Payment Processing), producing `test-design-epic-1.md` that flags settlement edge cases, regression hotspots, and mitigation plans. +5. **Story Implementation (Phase 4):** For each story in Epic 1, SM generates story via `*create-story`; TEA runs `*atdd` producing failing Playwright specs; Dev implements with guidance from tests and checklist. +6. **Post-Dev (Phase 4):** TEA applies `*automate`, optionally `*test-review` to audit test quality, re-runs `*trace` to refresh coverage. +7. **Release Gate:** TEA performs `*nfr-assess` to validate SLAs, runs `*trace` with Phase 2 enabled to generate gate decision (PASS/CONCERNS/FAIL). + +
+ +### Greenfield - Enterprise Method (Enterprise/Compliance Work) + +**Planning Track:** Enterprise Method (BMad Method + extended security/devops/test strategies) +**Use Case:** New enterprise projects with compliance, security, or complex regulatory requirements + +**🏢 Enterprise Deltas from BMad Method:** + +- ➕ Phase 1: `*research` - Domain and compliance research (recommended) +- ➕ Phase 2: `*nfr-assess` - Capture NFR requirements early (security/performance/reliability) +- 🔄 Phase 4: `*test-design` - Enterprise focus (compliance, security architecture alignment) +- 📦 Release Gate - Archive artifacts and compliance evidence for audits + +| Workflow Stage | Test Architect | Dev / Team | Outputs | +| -------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| **Phase 1**: Discovery | - | Analyst ➕ `*research`, `*product-brief` | Domain research, compliance analysis, product brief | +| **Phase 2**: Planning | Run ➕ `*nfr-assess` | PM `*prd` (creates PRD with FRs/NFRs), UX `*create-ux-design` | Enterprise PRD with FRs/NFRs, UX design, ➕ NFR documentation | +| **Phase 3**: Solutioning | Run `*framework`, `*ci` AFTER architecture and epic creation | Architect `*architecture`, `*create-epics-and-stories`, `*implementation-readiness` | Architecture, epics/stories, test framework, CI pipeline | +| **Phase 4**: Sprint Start | - | SM `*sprint-planning` | Sprint plan with all epics | +| **Phase 4**: Epic Planning | Run `*test-design` for THIS epic 🔄 (compliance focus) | Review epic scope and compliance requirements | `test-design-epic-N.md` with security/performance/compliance focus | +| **Phase 4**: Story Dev | (Optional) `*atdd`, `*automate`, `*test-review`, `*trace` per story | SM `*create-story`, DEV implements | Tests, fixtures, quality reports, coverage matrices | +| **Phase 4**: Release Gate | Final `*test-review` audit, Run `*trace` (Phase 2), 📦 archive artifacts | Capture sign-offs, 📦 compliance evidence | Quality audit, updated assessments, gate YAML, 📦 audit trail | + +
+Execution Notes + +- `*nfr-assess` runs early in Planning (Phase 2) to capture compliance, security, and performance requirements upfront. +- **Phase 3 (Solutioning)**: After architecture is complete, run `*framework` and `*ci` with enterprise-grade configurations (selective testing, burn-in jobs, caching, notifications). +- **Phase 4 starts**: After solutioning is complete and sprint planning loads all epics. +- **`*test-design` runs per-epic**: At the beginning of working on each epic, run `*test-design` to create an enterprise-focused test plan for THAT specific epic, ensuring alignment with security architecture, performance targets, and compliance requirements. Output: `test-design-epic-N.md`. +- Use `*atdd` for stories when feasible so acceptance tests can lead implementation. +- Use `*test-review` per story or sprint to maintain quality standards and ensure compliance with testing best practices. +- Prior to release, rerun coverage (`*trace`, `*automate`), perform final quality audit with `*test-review`, and formalize the decision with `*trace` Phase 2 (gate decision); archive artifacts for compliance audits. + +
+ +
+Worked Example – “Helios Ledger” Enterprise Release + +1. **Planning (Phase 2):** Analyst runs `*research` and `*product-brief`; PM completes `*prd` creating PRD with FRs/NFRs; TEA runs `*nfr-assess` to establish NFR targets. +2. **Solutioning (Phase 3):** Architect completes `*architecture` with enterprise considerations; `*create-epics-and-stories` generates epics/stories based on architecture; TEA sets up `*framework` and `*ci` with enterprise-grade configurations based on architectural decisions; gate check validates planning completeness. +3. **Sprint Start (Phase 4):** Scrum Master runs `*sprint-planning` to load all epics into sprint status. +4. **Per-Epic (Phase 4):** For each epic, TEA runs `*test-design` to create epic-specific test plan (e.g., `test-design-epic-1.md`, `test-design-epic-2.md`) with compliance-focused risk assessment. +5. **Per-Story (Phase 4):** For each story, TEA uses `*atdd`, `*automate`, `*test-review`, and `*trace`; Dev teams iterate on the findings. +6. **Release Gate:** TEA re-checks coverage, performs final quality audit with `*test-review`, and logs the final gate decision via `*trace` Phase 2, archiving artifacts for compliance. + +
+ --- ## TEA Command Catalog -| Command | Primary Outputs | Notes | -| -------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------------- | -| `*framework` | Playwright/Cypress scaffold, `.env.example`, `.nvmrc`, sample specs | Use when no production-ready harness exists | -| `*ci` | CI workflow, selective test scripts, secrets checklist | Platform-aware (GitHub Actions default) | -| `*test-design` | Combined risk assessment, mitigation plan, and coverage strategy | Risk scoring + optional exploratory mode | -| `*atdd` | Failing acceptance tests + implementation checklist | TDD red phase + optional recording mode | -| `*automate` | Prioritized specs, fixtures, README/script updates, DoD summary | Optional healing/recording, avoid duplicate coverage | -| `*test-review` | Test quality review report with 0-100 score, violations, fixes | Reviews tests against knowledge base patterns | -| `*nfr-assess` | NFR assessment report with actions | Focus on security/performance/reliability | -| `*trace` | Phase 1: Coverage matrix, recommendations. Phase 2: Gate decision (PASS/CONCERNS/FAIL/WAIVED) | Two-phase workflow: traceability + gate decision | +| Command | Primary Outputs | Notes | With Playwright MCP Enhancements | +| -------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| `*framework` | Playwright/Cypress scaffold, `.env.example`, `.nvmrc`, sample specs | Use when no production-ready harness exists | - | +| `*ci` | CI workflow, selective test scripts, secrets checklist | Platform-aware (GitHub Actions default) | - | +| `*test-design` | Combined risk assessment, mitigation plan, and coverage strategy | Risk scoring + optional exploratory mode | **+ Exploratory**: Interactive UI discovery with browser automation (uncover actual functionality) | +| `*atdd` | Failing acceptance tests + implementation checklist | TDD red phase + optional recording mode | **+ Recording**: AI generation verified with live browser (accurate selectors from real DOM) | +| `*automate` | Prioritized specs, fixtures, README/script updates, DoD summary | Optional healing/recording, avoid duplicate coverage | **+ Healing**: Pattern fixes enhanced with visual debugging + **+ Recording**: AI verified with live browser | +| `*test-review` | Test quality review report with 0-100 score, violations, fixes | Reviews tests against knowledge base patterns | - | +| `*nfr-assess` | NFR assessment report with actions | Focus on security/performance/reliability | - | +| `*trace` | Phase 1: Coverage matrix, recommendations. Phase 2: Gate decision (PASS/CONCERNS/FAIL/WAIVED) | Two-phase workflow: traceability + gate decision | - | + +--- + +## Playwright Utils Integration + +TEA optionally integrates with `@seontechnologies/playwright-utils`, an open-source library providing fixture-based utilities for Playwright tests. This integration enhances TEA's test generation and review workflows with production-ready patterns. + +
+Installation & Configuration + +**Package**: `@seontechnologies/playwright-utils` ([npm](https://www.npmjs.com/package/@seontechnologies/playwright-utils) | [GitHub](https://github.com/seontechnologies/playwright-utils)) + +**Install**: `npm install -D @seontechnologies/playwright-utils` + +**Enable during BMAD installation** by answering "Yes" when prompted, or manually set `tea_use_playwright_utils: true` in `_bmad/bmm/config.yaml`. + +**To disable**: Set `tea_use_playwright_utils: false` in `_bmad/bmm/config.yaml`. + +
+ +
+How Playwright Utils Enhances TEA Workflows + +1. `*framework`: + - Default: Basic Playwright scaffold + - **+ playwright-utils**: Scaffold with api-request, network-recorder, auth-session, burn-in, network-error-monitor fixtures pre-configured + + Benefit: Production-ready patterns from day one + +2. `*automate`, `*atdd`: + - Default: Standard test patterns + - **+ playwright-utils**: Tests using api-request (schema validation), intercept-network-call (mocking), recurse (polling), log (structured logging), file-utils (CSV/PDF) + + Benefit: Advanced patterns without boilerplate + +3. `*test-review`: + - Default: Reviews against core knowledge base (22 fragments) + - **+ playwright-utils**: Reviews against expanded knowledge base (33 fragments: 22 core + 11 playwright-utils) + + Benefit: Reviews include fixture composition, auth patterns, network recording best practices + +4. `*ci`: + - Default: Standard CI workflow + - **+ playwright-utils**: CI workflow with burn-in script (smart test selection) and network-error-monitor integration + + Benefit: Faster CI feedback, HTTP error detection + +**Utilities available** (10 total): api-request, network-recorder, auth-session, intercept-network-call, recurse, log, file-utils, burn-in, network-error-monitor, fixtures-composition + +
+ +--- + +## Playwright MCP Enhancements + +TEA can leverage Playwright MCP servers to enhance test generation with live browser verification. MCP provides interactive capabilities on top of TEA's default AI-based approach. + +
+MCP Server Configuration + +**Two Playwright MCP servers** (actively maintained, continuously updated): + +- `playwright` - Browser automation (`npx @playwright/mcp@latest`) +- `playwright-test` - Test runner with failure analysis (`npx playwright run-test-mcp-server`) + +**Config example**: + +```json +{ + "mcpServers": { + "playwright": { + "command": "npx", + "args": ["@playwright/mcp@latest"] + }, + "playwright-test": { + "command": "npx", + "args": ["playwright", "run-test-mcp-server"] + } + } +} +``` + +**To disable**: Set `tea_use_mcp_enhancements: false` in `_bmad/bmm/config.yaml` OR remove MCPs from IDE config. + +
+ +
+How MCP Enhances TEA Workflows + +1. `*test-design`: + - Default: Analysis + documentation + - **+ MCP**: Interactive UI discovery with `browser_navigate`, `browser_click`, `browser_snapshot`, behavior observation + + Benefit: Discover actual functionality, edge cases, undocumented features + +2. `*atdd`, `*automate`: + - Default: Infers selectors and interactions from requirements and knowledge fragments + - **+ MCP**: Generates tests **then** verifies with `generator_setup_page`, `browser_*` tools, validates against live app + + Benefit: Accurate selectors from real DOM, verified behavior, refined test code + +3. `*automate` (healing mode): + - Default: Pattern-based fixes from error messages + knowledge fragments + - **+ MCP**: Pattern fixes **enhanced with** `browser_snapshot`, `browser_console_messages`, `browser_network_requests`, `browser_generate_locator` + + Benefit: Visual failure context, live DOM inspection, root cause discovery + +
--- diff --git a/src/modules/bmm/agents/tea.agent.yaml b/src/modules/bmm/agents/tea.agent.yaml index 2ff25637..fa42b41b 100644 --- a/src/modules/bmm/agents/tea.agent.yaml +++ b/src/modules/bmm/agents/tea.agent.yaml @@ -12,15 +12,17 @@ agent: persona: role: Master Test Architect - identity: Test architect specializing in CI/CD, automated frameworks, and scalable quality gates. + identity: Test architect specializing in API testing, backend services, UI automation, CI/CD pipelines, and scalable quality gates. Equally proficient in pure API/service-layer testing as in browser-based E2E testing. communication_style: "Blends data with gut instinct. 'Strong opinions, weakly held' is their mantra. Speaks in risk calculations and impact assessments." principles: | - Risk-based testing - depth scales with impact - Quality gates backed by data - - Tests mirror usage patterns + - Tests mirror usage patterns (API, UI, or both) - Flakiness is critical technical debt - Tests first AI implements suite validates - Calculate risk vs value for every testing decision + - Prefer lower test levels (unit > integration > E2E) when possible + - API tests are first-class citizens, not just UI support critical_actions: - "Consult {project-root}/_bmad/bmm/testarch/tea-index.csv to select knowledge fragments under knowledge/ and load only the files needed for the current task" @@ -39,7 +41,7 @@ agent: - trigger: AT or fuzzy match on atdd workflow: "{project-root}/_bmad/bmm/workflows/testarch/atdd/workflow.yaml" - description: "[AT] Generate E2E tests first, before starting implementation" + description: "[AT] Generate API and/or E2E tests first, before starting implementation" - trigger: TA or fuzzy match on test-automate workflow: "{project-root}/_bmad/bmm/workflows/testarch/automate/workflow.yaml" diff --git a/src/modules/bmm/module.yaml b/src/modules/bmm/module.yaml index e6b8dee1..b5aaf889 100644 --- a/src/modules/bmm/module.yaml +++ b/src/modules/bmm/module.yaml @@ -45,7 +45,7 @@ project_knowledge: # Artifacts from research, document-project output, other lon result: "{project-root}/{value}" tea_use_mcp_enhancements: - prompt: "Test Architect Playwright MCP capabilities (healing, exploratory, verification) are optionally available.\nYou will have to setup your MCPs yourself; refer to test-architecture.md for hints.\nWould you like to enable MCP enhancements in Test Architect?" + prompt: "Test Architect Playwright MCP capabilities (healing, exploratory, verification) are optionally available.\nYou will have to setup your MCPs yourself; refer to https://docs.bmad-method.org/explanation/features/tea-overview for configuration examples.\nWould you like to enable MCP enhancements in Test Architect?" default: false result: "{value}" diff --git a/src/modules/bmm/testarch/knowledge/api-request.md b/src/modules/bmm/testarch/knowledge/api-request.md index b47bfc4f..d2b36cde 100644 --- a/src/modules/bmm/testarch/knowledge/api-request.md +++ b/src/modules/bmm/testarch/knowledge/api-request.md @@ -2,7 +2,7 @@ ## Principle -Use typed HTTP client with built-in schema validation and automatic retry for server errors. The utility handles URL resolution, header management, response parsing, and single-line response validation with proper TypeScript support. +Use typed HTTP client with built-in schema validation and automatic retry for server errors. The utility handles URL resolution, header management, response parsing, and single-line response validation with proper TypeScript support. **Works without a browser** - ideal for pure API/service testing. ## Rationale @@ -21,6 +21,7 @@ The `apiRequest` utility provides: - **Schema validation**: Single-line validation (JSON Schema, Zod, OpenAPI) - **URL resolution**: Four-tier strategy (explicit > config > Playwright > direct) - **TypeScript generics**: Type-safe response bodies +- **No browser required**: Pure API testing without browser overhead ## Pattern Examples @@ -60,10 +61,11 @@ test('should fetch user data', async ({ apiRequest }) => { ```typescript import { test } from '@seontechnologies/playwright-utils/api-request/fixtures'; +import { z } from 'zod'; -test('should validate response schema', async ({ apiRequest }) => { - // JSON Schema validation - const response = await apiRequest({ +// JSON Schema validation +test('should validate response schema (JSON Schema)', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ method: 'GET', path: '/api/users/123', validateSchema: { @@ -77,22 +79,25 @@ test('should validate response schema', async ({ apiRequest }) => { }, }); // Throws if schema validation fails + expect(status).toBe(200); +}); - // Zod schema validation - import { z } from 'zod'; +// Zod schema validation +const UserSchema = z.object({ + id: z.string(), + name: z.string(), + email: z.string().email(), +}); - const UserSchema = z.object({ - id: z.string(), - name: z.string(), - email: z.string().email(), - }); - - const response = await apiRequest({ +test('should validate response schema (Zod)', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ method: 'GET', path: '/api/users/123', validateSchema: UserSchema, }); // Response body is type-safe AND validated + expect(status).toBe(200); + expect(body.email).toContain('@'); }); ``` @@ -236,6 +241,136 @@ test('should poll until job completes', async ({ apiRequest, recurse }) => { - `recurse` polls until predicate returns true - Composable utilities work together seamlessly +### Example 6: Microservice Testing (Multiple Services) + +**Context**: Test interactions between microservices without a browser. + +**Implementation**: + +```typescript +import { test, expect } from '@seontechnologies/playwright-utils/fixtures'; + +const USER_SERVICE = process.env.USER_SERVICE_URL || 'http://localhost:3001'; +const ORDER_SERVICE = process.env.ORDER_SERVICE_URL || 'http://localhost:3002'; + +test.describe('Microservice Integration', () => { + test('should validate cross-service user lookup', async ({ apiRequest }) => { + // Create user in user-service + const { body: user } = await apiRequest({ + method: 'POST', + path: '/api/users', + baseUrl: USER_SERVICE, + body: { name: 'Test User', email: 'test@example.com' }, + }); + + // Create order in order-service (validates user via user-service) + const { status, body: order } = await apiRequest({ + method: 'POST', + path: '/api/orders', + baseUrl: ORDER_SERVICE, + body: { + userId: user.id, + items: [{ productId: 'prod-1', quantity: 2 }], + }, + }); + + expect(status).toBe(201); + expect(order.userId).toBe(user.id); + }); + + test('should reject order for invalid user', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/api/orders', + baseUrl: ORDER_SERVICE, + body: { + userId: 'non-existent-user', + items: [{ productId: 'prod-1', quantity: 1 }], + }, + }); + + expect(status).toBe(400); + expect(body.code).toBe('INVALID_USER'); + }); +}); +``` + +**Key Points**: + +- Test multiple services without browser +- Use `baseUrl` to target different services +- Validate cross-service communication +- Pure API testing - fast and reliable + +### Example 7: GraphQL API Testing + +**Context**: Test GraphQL endpoints with queries and mutations. + +**Implementation**: + +```typescript +test.describe('GraphQL API', () => { + const GRAPHQL_ENDPOINT = '/graphql'; + + test('should query users via GraphQL', async ({ apiRequest }) => { + const query = ` + query GetUsers($limit: Int) { + users(limit: $limit) { + id + name + email + } + } + `; + + const { status, body } = await apiRequest({ + method: 'POST', + path: GRAPHQL_ENDPOINT, + body: { + query, + variables: { limit: 10 }, + }, + }); + + expect(status).toBe(200); + expect(body.errors).toBeUndefined(); + expect(body.data.users).toHaveLength(10); + }); + + test('should create user via mutation', async ({ apiRequest }) => { + const mutation = ` + mutation CreateUser($input: CreateUserInput!) { + createUser(input: $input) { + id + name + } + } + `; + + const { status, body } = await apiRequest({ + method: 'POST', + path: GRAPHQL_ENDPOINT, + body: { + query: mutation, + variables: { + input: { name: 'GraphQL User', email: 'gql@example.com' }, + }, + }, + }); + + expect(status).toBe(200); + expect(body.data.createUser.id).toBeDefined(); + }); +}); +``` + +**Key Points**: + +- GraphQL via POST request +- Variables in request body +- Check `body.errors` for GraphQL errors (not status code) +- Works for queries and mutations + ## Comparison with Vanilla Playwright | Vanilla Playwright | playwright-utils apiRequest | @@ -251,11 +386,13 @@ test('should poll until job completes', async ({ apiRequest, recurse }) => { **Use apiRequest for:** -- ✅ API endpoint testing -- ✅ Background API calls in UI tests +- ✅ Pure API/service testing (no browser needed) +- ✅ Microservice integration testing +- ✅ GraphQL API testing - ✅ Schema validation needs - ✅ Tests requiring retry logic -- ✅ Typed API responses +- ✅ Background API calls in UI tests +- ✅ Contract testing support **Stick with vanilla Playwright for:** @@ -265,11 +402,13 @@ test('should poll until job completes', async ({ apiRequest, recurse }) => { ## Related Fragments +- `api-testing-patterns.md` - Comprehensive pure API testing patterns - `overview.md` - Installation and design principles - `auth-session.md` - Authentication token management - `recurse.md` - Polling for async operations - `fixtures-composition.md` - Combining utilities with mergeTests - `log.md` - Logging API requests +- `contract-testing.md` - Pact contract testing ## Anti-Patterns diff --git a/src/modules/bmm/testarch/knowledge/api-testing-patterns.md b/src/modules/bmm/testarch/knowledge/api-testing-patterns.md new file mode 100644 index 00000000..65c81d7a --- /dev/null +++ b/src/modules/bmm/testarch/knowledge/api-testing-patterns.md @@ -0,0 +1,843 @@ +# API Testing Patterns + +## Principle + +Test APIs and backend services directly without browser overhead. Use Playwright's `request` context for HTTP operations, `apiRequest` utility for enhanced features, and `recurse` for async operations. Pure API tests run faster, are more stable, and provide better coverage for service-layer logic. + +## Rationale + +Many teams over-rely on E2E/browser tests when API tests would be more appropriate: + +- **Slower feedback**: Browser tests take seconds, API tests take milliseconds +- **More brittle**: UI changes break tests even when API works correctly +- **Wrong abstraction**: Testing business logic through UI layers adds noise +- **Resource heavy**: Browsers consume memory and CPU + +API-first testing provides: + +- **Fast execution**: No browser startup, no rendering, no JavaScript execution +- **Direct validation**: Test exactly what the service returns +- **Better isolation**: Test service logic independent of UI +- **Easier debugging**: Clear request/response without DOM noise +- **Contract validation**: Verify API contracts explicitly + +## When to Use API Tests vs E2E Tests + +| Scenario | API Test | E2E Test | +|----------|----------|----------| +| CRUD operations | ✅ Primary | ❌ Overkill | +| Business logic validation | ✅ Primary | ❌ Overkill | +| Error handling (4xx, 5xx) | ✅ Primary | ⚠️ Supplement | +| Authentication flows | ✅ Primary | ⚠️ Supplement | +| Data transformation | ✅ Primary | ❌ Overkill | +| User journeys | ❌ Can't test | ✅ Primary | +| Visual regression | ❌ Can't test | ✅ Primary | +| Cross-browser issues | ❌ Can't test | ✅ Primary | + +**Rule of thumb**: If you're testing what the server returns (not how it looks), use API tests. + +## Pattern Examples + +### Example 1: Pure API Test (No Browser) + +**Context**: Test REST API endpoints directly without any browser context. + +**Implementation**: + +```typescript +// tests/api/users.spec.ts +import { test, expect } from '@playwright/test'; + +// No page, no browser - just API +test.describe('Users API', () => { + test('should create user', async ({ request }) => { + const response = await request.post('/api/users', { + data: { + name: 'John Doe', + email: 'john@example.com', + role: 'user', + }, + }); + + expect(response.status()).toBe(201); + + const user = await response.json(); + expect(user.id).toBeDefined(); + expect(user.name).toBe('John Doe'); + expect(user.email).toBe('john@example.com'); + }); + + test('should get user by ID', async ({ request }) => { + // Create user first + const createResponse = await request.post('/api/users', { + data: { name: 'Jane Doe', email: 'jane@example.com' }, + }); + const { id } = await createResponse.json(); + + // Get user + const getResponse = await request.get(`/api/users/${id}`); + expect(getResponse.status()).toBe(200); + + const user = await getResponse.json(); + expect(user.id).toBe(id); + expect(user.name).toBe('Jane Doe'); + }); + + test('should return 404 for non-existent user', async ({ request }) => { + const response = await request.get('/api/users/non-existent-id'); + expect(response.status()).toBe(404); + + const error = await response.json(); + expect(error.code).toBe('USER_NOT_FOUND'); + }); + + test('should validate required fields', async ({ request }) => { + const response = await request.post('/api/users', { + data: { name: 'Missing Email' }, // email is required + }); + + expect(response.status()).toBe(400); + + const error = await response.json(); + expect(error.code).toBe('VALIDATION_ERROR'); + expect(error.details).toContainEqual( + expect.objectContaining({ field: 'email', message: expect.any(String) }) + ); + }); +}); +``` + +**Key Points**: + +- No `page` fixture needed - only `request` +- Tests run without browser overhead +- Direct HTTP assertions +- Clear error handling tests + +### Example 2: API Test with apiRequest Utility + +**Context**: Use enhanced apiRequest for schema validation, retry, and type safety. + +**Implementation**: + +```typescript +// tests/api/orders.spec.ts +import { test, expect } from '@seontechnologies/playwright-utils/api-request/fixtures'; +import { z } from 'zod'; + +// Define schema for type safety and validation +const OrderSchema = z.object({ + id: z.string().uuid(), + userId: z.string(), + items: z.array( + z.object({ + productId: z.string(), + quantity: z.number().positive(), + price: z.number().positive(), + }) + ), + total: z.number().positive(), + status: z.enum(['pending', 'processing', 'shipped', 'delivered']), + createdAt: z.string().datetime(), +}); + +type Order = z.infer; + +test.describe('Orders API', () => { + test('should create order with schema validation', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/api/orders', + body: { + userId: 'user-123', + items: [ + { productId: 'prod-1', quantity: 2, price: 29.99 }, + { productId: 'prod-2', quantity: 1, price: 49.99 }, + ], + }, + validateSchema: OrderSchema, // Validates response matches schema + }); + + expect(status).toBe(201); + expect(body.id).toBeDefined(); + expect(body.status).toBe('pending'); + expect(body.total).toBe(109.97); // 2*29.99 + 49.99 + }); + + test('should handle server errors with retry', async ({ apiRequest }) => { + // apiRequest retries 5xx errors by default + const { status, body } = await apiRequest({ + method: 'GET', + path: '/api/orders/order-123', + retryConfig: { + maxRetries: 3, + retryDelay: 1000, + }, + }); + + expect(status).toBe(200); + }); + + test('should list orders with pagination', async ({ apiRequest }) => { + const { status, body } = await apiRequest<{ orders: Order[]; total: number; page: number }>({ + method: 'GET', + path: '/api/orders', + params: { page: 1, limit: 10, status: 'pending' }, + }); + + expect(status).toBe(200); + expect(body.orders).toHaveLength(10); + expect(body.total).toBeGreaterThan(10); + expect(body.page).toBe(1); + }); +}); +``` + +**Key Points**: + +- Zod schema for runtime validation AND TypeScript types +- `validateSchema` throws if response doesn't match +- Built-in retry for transient failures +- Type-safe `body` access + +### Example 3: Microservice-to-Microservice Testing + +**Context**: Test service interactions without browser - validate API contracts between services. + +**Implementation**: + +```typescript +// tests/api/service-integration.spec.ts +import { test, expect } from '@seontechnologies/playwright-utils/fixtures'; + +test.describe('Service Integration', () => { + const USER_SERVICE_URL = process.env.USER_SERVICE_URL || 'http://localhost:3001'; + const ORDER_SERVICE_URL = process.env.ORDER_SERVICE_URL || 'http://localhost:3002'; + const INVENTORY_SERVICE_URL = process.env.INVENTORY_SERVICE_URL || 'http://localhost:3003'; + + test('order service should validate user exists', async ({ apiRequest }) => { + // Create user in user-service + const { body: user } = await apiRequest({ + method: 'POST', + path: '/api/users', + baseUrl: USER_SERVICE_URL, + body: { name: 'Test User', email: 'test@example.com' }, + }); + + // Create order in order-service (should validate user via user-service) + const { status, body: order } = await apiRequest({ + method: 'POST', + path: '/api/orders', + baseUrl: ORDER_SERVICE_URL, + body: { + userId: user.id, + items: [{ productId: 'prod-1', quantity: 1 }], + }, + }); + + expect(status).toBe(201); + expect(order.userId).toBe(user.id); + }); + + test('order service should reject invalid user', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/api/orders', + baseUrl: ORDER_SERVICE_URL, + body: { + userId: 'non-existent-user', + items: [{ productId: 'prod-1', quantity: 1 }], + }, + }); + + expect(status).toBe(400); + expect(body.code).toBe('INVALID_USER'); + }); + + test('order should decrease inventory', async ({ apiRequest, recurse }) => { + // Get initial inventory + const { body: initialInventory } = await apiRequest({ + method: 'GET', + path: '/api/inventory/prod-1', + baseUrl: INVENTORY_SERVICE_URL, + }); + + // Create order + await apiRequest({ + method: 'POST', + path: '/api/orders', + baseUrl: ORDER_SERVICE_URL, + body: { + userId: 'user-123', + items: [{ productId: 'prod-1', quantity: 2 }], + }, + }); + + // Poll for inventory update (eventual consistency) + const { body: updatedInventory } = await recurse( + () => + apiRequest({ + method: 'GET', + path: '/api/inventory/prod-1', + baseUrl: INVENTORY_SERVICE_URL, + }), + (response) => response.body.quantity === initialInventory.quantity - 2, + { timeout: 10000, interval: 500 } + ); + + expect(updatedInventory.quantity).toBe(initialInventory.quantity - 2); + }); +}); +``` + +**Key Points**: + +- Multiple service URLs for microservice testing +- Tests service-to-service communication +- Uses `recurse` for eventual consistency +- No browser needed for full integration testing + +### Example 4: GraphQL API Testing + +**Context**: Test GraphQL endpoints with queries and mutations. + +**Implementation**: + +```typescript +// tests/api/graphql.spec.ts +import { test, expect } from '@seontechnologies/playwright-utils/api-request/fixtures'; + +const GRAPHQL_ENDPOINT = '/graphql'; + +test.describe('GraphQL API', () => { + test('should query users', async ({ apiRequest }) => { + const query = ` + query GetUsers($limit: Int) { + users(limit: $limit) { + id + name + email + role + } + } + `; + + const { status, body } = await apiRequest({ + method: 'POST', + path: GRAPHQL_ENDPOINT, + body: { + query, + variables: { limit: 10 }, + }, + }); + + expect(status).toBe(200); + expect(body.errors).toBeUndefined(); + expect(body.data.users).toHaveLength(10); + expect(body.data.users[0]).toHaveProperty('id'); + expect(body.data.users[0]).toHaveProperty('name'); + }); + + test('should create user via mutation', async ({ apiRequest }) => { + const mutation = ` + mutation CreateUser($input: CreateUserInput!) { + createUser(input: $input) { + id + name + email + } + } + `; + + const { status, body } = await apiRequest({ + method: 'POST', + path: GRAPHQL_ENDPOINT, + body: { + query: mutation, + variables: { + input: { + name: 'GraphQL User', + email: 'graphql@example.com', + }, + }, + }, + }); + + expect(status).toBe(200); + expect(body.errors).toBeUndefined(); + expect(body.data.createUser.id).toBeDefined(); + expect(body.data.createUser.name).toBe('GraphQL User'); + }); + + test('should handle GraphQL errors', async ({ apiRequest }) => { + const query = ` + query GetUser($id: ID!) { + user(id: $id) { + id + name + } + } + `; + + const { status, body } = await apiRequest({ + method: 'POST', + path: GRAPHQL_ENDPOINT, + body: { + query, + variables: { id: 'non-existent' }, + }, + }); + + expect(status).toBe(200); // GraphQL returns 200 even for errors + expect(body.errors).toBeDefined(); + expect(body.errors[0].message).toContain('not found'); + expect(body.data.user).toBeNull(); + }); + + test('should handle validation errors', async ({ apiRequest }) => { + const mutation = ` + mutation CreateUser($input: CreateUserInput!) { + createUser(input: $input) { + id + } + } + `; + + const { status, body } = await apiRequest({ + method: 'POST', + path: GRAPHQL_ENDPOINT, + body: { + query: mutation, + variables: { + input: { + name: '', // Invalid: empty name + email: 'invalid-email', // Invalid: bad format + }, + }, + }, + }); + + expect(status).toBe(200); + expect(body.errors).toBeDefined(); + expect(body.errors[0].extensions.code).toBe('BAD_USER_INPUT'); + }); +}); +``` + +**Key Points**: + +- GraphQL queries and mutations via POST +- Variables passed in request body +- GraphQL returns 200 even for errors (check `body.errors`) +- Test validation and business logic errors + +### Example 5: Database Seeding and Cleanup via API + +**Context**: Use API calls to set up and tear down test data without direct database access. + +**Implementation**: + +```typescript +// tests/api/with-data-setup.spec.ts +import { test, expect } from '@seontechnologies/playwright-utils/fixtures'; + +test.describe('Orders with Data Setup', () => { + let testUser: { id: string; email: string }; + let testProducts: Array<{ id: string; name: string; price: number }>; + + test.beforeAll(async ({ request }) => { + // Seed user via API + const userResponse = await request.post('/api/users', { + data: { + name: 'Test User', + email: `test-${Date.now()}@example.com`, + }, + }); + testUser = await userResponse.json(); + + // Seed products via API + testProducts = []; + for (const product of [ + { name: 'Widget A', price: 29.99 }, + { name: 'Widget B', price: 49.99 }, + { name: 'Widget C', price: 99.99 }, + ]) { + const productResponse = await request.post('/api/products', { + data: product, + }); + testProducts.push(await productResponse.json()); + } + }); + + test.afterAll(async ({ request }) => { + // Cleanup via API + if (testUser?.id) { + await request.delete(`/api/users/${testUser.id}`); + } + for (const product of testProducts) { + await request.delete(`/api/products/${product.id}`); + } + }); + + test('should create order with seeded data', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/api/orders', + body: { + userId: testUser.id, + items: [ + { productId: testProducts[0].id, quantity: 2 }, + { productId: testProducts[1].id, quantity: 1 }, + ], + }, + }); + + expect(status).toBe(201); + expect(body.userId).toBe(testUser.id); + expect(body.items).toHaveLength(2); + expect(body.total).toBe(2 * 29.99 + 49.99); + }); + + test('should list user orders', async ({ apiRequest }) => { + // Create an order first + await apiRequest({ + method: 'POST', + path: '/api/orders', + body: { + userId: testUser.id, + items: [{ productId: testProducts[2].id, quantity: 1 }], + }, + }); + + // List orders for user + const { status, body } = await apiRequest({ + method: 'GET', + path: '/api/orders', + params: { userId: testUser.id }, + }); + + expect(status).toBe(200); + expect(body.orders.length).toBeGreaterThanOrEqual(1); + expect(body.orders.every((o: any) => o.userId === testUser.id)).toBe(true); + }); +}); +``` + +**Key Points**: + +- `beforeAll`/`afterAll` for test data setup/cleanup +- API-based seeding (no direct DB access needed) +- Unique emails to prevent conflicts in parallel runs +- Cleanup after all tests complete + +### Example 6: Background Job Testing with Recurse + +**Context**: Test async operations like background jobs, webhooks, and eventual consistency. + +**Implementation**: + +```typescript +// tests/api/background-jobs.spec.ts +import { test, expect } from '@seontechnologies/playwright-utils/fixtures'; + +test.describe('Background Jobs', () => { + test('should process export job', async ({ apiRequest, recurse }) => { + // Trigger export job + const { body: job } = await apiRequest({ + method: 'POST', + path: '/api/exports', + body: { + type: 'users', + format: 'csv', + filters: { createdAfter: '2024-01-01' }, + }, + }); + + expect(job.id).toBeDefined(); + expect(job.status).toBe('pending'); + + // Poll until job completes + const { body: completedJob } = await recurse( + () => apiRequest({ method: 'GET', path: `/api/exports/${job.id}` }), + (response) => response.body.status === 'completed', + { + timeout: 60000, + interval: 2000, + log: `Waiting for export job ${job.id} to complete`, + } + ); + + expect(completedJob.status).toBe('completed'); + expect(completedJob.downloadUrl).toBeDefined(); + expect(completedJob.recordCount).toBeGreaterThan(0); + }); + + test('should handle job failure gracefully', async ({ apiRequest, recurse }) => { + // Trigger job that will fail + const { body: job } = await apiRequest({ + method: 'POST', + path: '/api/exports', + body: { + type: 'invalid-type', // This will cause failure + format: 'csv', + }, + }); + + // Poll until job fails + const { body: failedJob } = await recurse( + () => apiRequest({ method: 'GET', path: `/api/exports/${job.id}` }), + (response) => ['completed', 'failed'].includes(response.body.status), + { timeout: 30000 } + ); + + expect(failedJob.status).toBe('failed'); + expect(failedJob.error).toBeDefined(); + expect(failedJob.error.code).toBe('INVALID_EXPORT_TYPE'); + }); + + test('should process webhook delivery', async ({ apiRequest, recurse }) => { + // Trigger action that sends webhook + const { body: order } = await apiRequest({ + method: 'POST', + path: '/api/orders', + body: { + userId: 'user-123', + items: [{ productId: 'prod-1', quantity: 1 }], + webhookUrl: 'https://webhook.site/test-endpoint', + }, + }); + + // Poll for webhook delivery status + const { body: webhookStatus } = await recurse( + () => apiRequest({ method: 'GET', path: `/api/webhooks/order/${order.id}` }), + (response) => response.body.delivered === true, + { timeout: 30000, interval: 1000 } + ); + + expect(webhookStatus.delivered).toBe(true); + expect(webhookStatus.deliveredAt).toBeDefined(); + expect(webhookStatus.responseStatus).toBe(200); + }); +}); +``` + +**Key Points**: + +- `recurse` for polling async operations +- Test both success and failure scenarios +- Configurable timeout and interval +- Log messages for debugging + +### Example 7: Service Authentication (No Browser) + +**Context**: Test authenticated API endpoints using tokens directly - no browser login needed. + +**Implementation**: + +```typescript +// tests/api/authenticated.spec.ts +import { test, expect } from '@seontechnologies/playwright-utils/fixtures'; + +test.describe('Authenticated API Tests', () => { + let authToken: string; + + test.beforeAll(async ({ request }) => { + // Get token via API (no browser!) + const response = await request.post('/api/auth/login', { + data: { + email: process.env.TEST_USER_EMAIL, + password: process.env.TEST_USER_PASSWORD, + }, + }); + + const { token } = await response.json(); + authToken = token; + }); + + test('should access protected endpoint with token', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'GET', + path: '/api/me', + headers: { + Authorization: `Bearer ${authToken}`, + }, + }); + + expect(status).toBe(200); + expect(body.email).toBe(process.env.TEST_USER_EMAIL); + }); + + test('should reject request without token', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'GET', + path: '/api/me', + // No Authorization header + }); + + expect(status).toBe(401); + expect(body.code).toBe('UNAUTHORIZED'); + }); + + test('should reject expired token', async ({ apiRequest }) => { + const expiredToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'; // Expired token + + const { status, body } = await apiRequest({ + method: 'GET', + path: '/api/me', + headers: { + Authorization: `Bearer ${expiredToken}`, + }, + }); + + expect(status).toBe(401); + expect(body.code).toBe('TOKEN_EXPIRED'); + }); + + test('should handle role-based access', async ({ apiRequest }) => { + // User token (non-admin) + const { status } = await apiRequest({ + method: 'GET', + path: '/api/admin/users', + headers: { + Authorization: `Bearer ${authToken}`, + }, + }); + + expect(status).toBe(403); // Forbidden for non-admin + }); +}); +``` + +**Key Points**: + +- Token obtained via API login (no browser) +- Token reused across all tests in describe block +- Test auth, expired tokens, and RBAC +- Pure API testing without UI + +## API Test Configuration + +### Playwright Config for API-Only Tests + +```typescript +// playwright.config.ts +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './tests/api', + + // No browser needed for API tests + use: { + baseURL: process.env.API_URL || 'http://localhost:3000', + extraHTTPHeaders: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }, + + // Faster without browser overhead + timeout: 30000, + + // Run API tests in parallel + workers: 4, + fullyParallel: true, + + // No screenshots/traces needed for API tests + reporter: [['html'], ['json', { outputFile: 'api-test-results.json' }]], +}); +``` + +### Separate API Test Project + +```typescript +// playwright.config.ts +export default defineConfig({ + projects: [ + { + name: 'api', + testDir: './tests/api', + use: { + baseURL: process.env.API_URL, + }, + }, + { + name: 'e2e', + testDir: './tests/e2e', + use: { + baseURL: process.env.APP_URL, + ...devices['Desktop Chrome'], + }, + }, + ], +}); +``` + +## Comparison: API Tests vs E2E Tests + +| Aspect | API Test | E2E Test | +|--------|----------|----------| +| **Speed** | ~50-100ms per test | ~2-10s per test | +| **Stability** | Very stable | More flaky (UI timing) | +| **Setup** | Minimal | Browser, context, page | +| **Debugging** | Clear request/response | DOM, screenshots, traces | +| **Coverage** | Service logic | User experience | +| **Parallelization** | Easy (stateless) | Complex (browser resources) | +| **CI Cost** | Low (no browser) | High (browser containers) | + +## Related Fragments + +- `api-request.md` - apiRequest utility details +- `recurse.md` - Polling patterns for async operations +- `auth-session.md` - Token management +- `contract-testing.md` - Pact contract testing +- `test-levels-framework.md` - When to use which test level +- `data-factories.md` - Test data setup patterns + +## Anti-Patterns + +**DON'T use E2E for API validation:** + +```typescript +// Bad: Testing API through UI +test('validate user creation', async ({ page }) => { + await page.goto('/admin/users'); + await page.fill('#name', 'John'); + await page.click('#submit'); + await expect(page.getByText('User created')).toBeVisible(); +}); +``` + +**DO test APIs directly:** + +```typescript +// Good: Direct API test +test('validate user creation', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/api/users', + body: { name: 'John' }, + }); + expect(status).toBe(201); + expect(body.id).toBeDefined(); +}); +``` + +**DON'T ignore API tests because "E2E covers it":** + +```typescript +// Bad thinking: "Our E2E tests create users, so API is tested" +// Reality: E2E tests one happy path; API tests cover edge cases +``` + +**DO have dedicated API test coverage:** + +```typescript +// Good: Explicit API test suite +test.describe('Users API', () => { + test('creates user', async ({ apiRequest }) => { /* ... */ }); + test('handles duplicate email', async ({ apiRequest }) => { /* ... */ }); + test('validates required fields', async ({ apiRequest }) => { /* ... */ }); + test('handles malformed JSON', async ({ apiRequest }) => { /* ... */ }); + test('rate limits requests', async ({ apiRequest }) => { /* ... */ }); +}); +``` diff --git a/src/modules/bmm/testarch/knowledge/auth-session.md b/src/modules/bmm/testarch/knowledge/auth-session.md index 3aa456af..e290476b 100644 --- a/src/modules/bmm/testarch/knowledge/auth-session.md +++ b/src/modules/bmm/testarch/knowledge/auth-session.md @@ -2,7 +2,7 @@ ## Principle -Persist authentication tokens to disk and reuse across test runs. Support multiple user identifiers, ephemeral authentication, and worker-specific accounts for parallel execution. Fetch tokens once, use everywhere. +Persist authentication tokens to disk and reuse across test runs. Support multiple user identifiers, ephemeral authentication, and worker-specific accounts for parallel execution. Fetch tokens once, use everywhere. **Works for both API-only tests and browser tests.** ## Rationale @@ -22,6 +22,7 @@ The `auth-session` utility provides: - **Worker-specific accounts**: Parallel execution with isolated user accounts - **Automatic token management**: Checks validity, renews if expired - **Flexible provider pattern**: Adapt to any auth system (OAuth2, JWT, custom) +- **API-first design**: Get tokens for API tests without browser overhead ## Pattern Examples @@ -244,6 +245,200 @@ test('parallel test 2', async ({ page }) => { - Token management automatic per worker - Scales to any number of workers +### Example 6: Pure API Authentication (No Browser) + +**Context**: Get auth tokens for API-only tests using auth-session disk persistence. + +**Implementation**: + +```typescript +// Step 1: Create API-only auth provider (no browser needed) +// playwright/support/api-auth-provider.ts +import { type AuthProvider } from '@seontechnologies/playwright-utils/auth-session'; + +const apiAuthProvider: AuthProvider = { + getEnvironment: (options) => options.environment || 'local', + getUserIdentifier: (options) => options.userIdentifier || 'api-user', + + extractToken: (storageState) => { + // Token stored in localStorage format for disk persistence + const tokenEntry = storageState.origins?.[0]?.localStorage?.find( + (item) => item.name === 'auth_token' + ); + return tokenEntry?.value; + }, + + isTokenExpired: (storageState) => { + const expiryEntry = storageState.origins?.[0]?.localStorage?.find( + (item) => item.name === 'token_expiry' + ); + if (!expiryEntry) return true; + return Date.now() > parseInt(expiryEntry.value, 10); + }, + + manageAuthToken: async (request, options) => { + const email = process.env.TEST_USER_EMAIL; + const password = process.env.TEST_USER_PASSWORD; + + if (!email || !password) { + throw new Error('TEST_USER_EMAIL and TEST_USER_PASSWORD must be set'); + } + + // Pure API login - no browser! + const response = await request.post('/api/auth/login', { + data: { email, password }, + }); + + if (!response.ok()) { + throw new Error(`Auth failed: ${response.status()}`); + } + + const { token, expiresIn } = await response.json(); + const expiryTime = Date.now() + expiresIn * 1000; + + // Return storage state format for disk persistence + return { + cookies: [], + origins: [ + { + origin: process.env.API_BASE_URL || 'http://localhost:3000', + localStorage: [ + { name: 'auth_token', value: token }, + { name: 'token_expiry', value: String(expiryTime) }, + ], + }, + ], + }; + }, +}; + +export default apiAuthProvider; + +// Step 2: Create auth fixture +// playwright/support/fixtures.ts +import { test as base } from '@playwright/test'; +import { createAuthFixtures, setAuthProvider } from '@seontechnologies/playwright-utils/auth-session'; +import apiAuthProvider from './api-auth-provider'; + +setAuthProvider(apiAuthProvider); + +export const test = base.extend(createAuthFixtures()); + +// Step 3: Use in tests - token persisted to disk! +// tests/api/authenticated-api.spec.ts +import { test } from '../support/fixtures'; +import { expect } from '@playwright/test'; + +test('should access protected endpoint', async ({ authToken, apiRequest }) => { + // authToken is automatically loaded from disk or fetched if expired + const { status, body } = await apiRequest({ + method: 'GET', + path: '/api/me', + headers: { Authorization: `Bearer ${authToken}` }, + }); + + expect(status).toBe(200); +}); + +test('should create resource with auth', async ({ authToken, apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/api/orders', + headers: { Authorization: `Bearer ${authToken}` }, + body: { items: [{ productId: 'prod-1', quantity: 2 }] }, + }); + + expect(status).toBe(201); + expect(body.id).toBeDefined(); +}); +``` + +**Key Points**: + +- Token persisted to disk (not in-memory) - survives test reruns +- Provider fetches token once, reuses until expired +- Pure API authentication - no browser context needed +- `authToken` fixture handles disk read/write automatically +- Environment variables validated with clear error message + +### Example 7: Service-to-Service Authentication + +**Context**: Test microservice authentication patterns (API keys, service tokens) with proper environment validation. + +**Implementation**: + +```typescript +// tests/api/service-auth.spec.ts +import { test as base, expect } from '@playwright/test'; +import { test as apiFixture } from '@seontechnologies/playwright-utils/api-request/fixtures'; +import { mergeTests } from '@playwright/test'; + +// Validate environment variables at module load +const SERVICE_API_KEY = process.env.SERVICE_API_KEY; +const INTERNAL_SERVICE_URL = process.env.INTERNAL_SERVICE_URL; + +if (!SERVICE_API_KEY) { + throw new Error('SERVICE_API_KEY environment variable is required'); +} +if (!INTERNAL_SERVICE_URL) { + throw new Error('INTERNAL_SERVICE_URL environment variable is required'); +} + +const test = mergeTests(base, apiFixture); + +test.describe('Service-to-Service Auth', () => { + test('should authenticate with API key', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'GET', + path: '/internal/health', + baseUrl: INTERNAL_SERVICE_URL, + headers: { 'X-API-Key': SERVICE_API_KEY }, + }); + + expect(status).toBe(200); + expect(body.status).toBe('healthy'); + }); + + test('should reject invalid API key', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'GET', + path: '/internal/health', + baseUrl: INTERNAL_SERVICE_URL, + headers: { 'X-API-Key': 'invalid-key' }, + }); + + expect(status).toBe(401); + expect(body.code).toBe('INVALID_API_KEY'); + }); + + test('should call downstream service with propagated auth', async ({ apiRequest }) => { + const { status, body } = await apiRequest({ + method: 'POST', + path: '/internal/aggregate-data', + baseUrl: INTERNAL_SERVICE_URL, + headers: { + 'X-API-Key': SERVICE_API_KEY, + 'X-Request-ID': `test-${Date.now()}`, + }, + body: { sources: ['users', 'orders', 'inventory'] }, + }); + + expect(status).toBe(200); + expect(body.aggregatedFrom).toHaveLength(3); + }); +}); +``` + +**Key Points**: + +- Environment variables validated at module load with clear errors +- API key authentication (simpler than OAuth - no disk persistence needed) +- Test internal/service endpoints +- Validate auth rejection scenarios +- Correlation ID for request tracing + +> **Note**: API keys are typically static secrets that don't expire, so disk persistence (auth-session) isn't needed. For rotating service tokens, use the auth-session provider pattern from Example 6. + ## Custom Auth Provider Pattern **Context**: Adapt auth-session to your authentication system (OAuth2, JWT, SAML, custom). @@ -310,6 +505,7 @@ test('authenticated API call', async ({ apiRequest, authToken }) => { ## Related Fragments +- `api-testing-patterns.md` - Pure API testing patterns (no browser) - `overview.md` - Installation and fixture composition - `api-request.md` - Authenticated API requests - `fixtures-composition.md` - Merging auth with other utilities diff --git a/src/modules/bmm/testarch/knowledge/file-utils.md b/src/modules/bmm/testarch/knowledge/file-utils.md index 1fa02397..014ac81c 100644 --- a/src/modules/bmm/testarch/knowledge/file-utils.md +++ b/src/modules/bmm/testarch/knowledge/file-utils.md @@ -22,6 +22,16 @@ The `file-utils` module provides: - **Validation helpers**: Row count, header checks, content validation - **Format support**: Multiple sheet support (XLSX), text extraction (PDF), archive extraction (ZIP) +## Why Use This Instead of Vanilla Playwright? + +| Vanilla Playwright | File Utils | +| ------------------------------------------- | ------------------------------------------------ | +| ~80 lines per CSV flow (download + parse) | ~10 lines end-to-end | +| Manual event orchestration for downloads | Encapsulated in `handleDownload()` | +| Manual path handling and `saveAs` | Returns a ready-to-use file path | +| Manual existence checks and error handling | Centralized in one place via utility patterns | +| Manual CSV parsing config (headers, typing) | `readCSV()` returns `{ data, headers }` directly | + ## Pattern Examples ### Example 1: UI-Triggered CSV Download @@ -40,20 +50,18 @@ test('should download and validate CSV', async ({ page }) => { const downloadPath = await handleDownload({ page, downloadDir: DOWNLOAD_DIR, - trigger: () => page.click('[data-testid="export-csv"]'), + trigger: () => page.getByTestId('download-button-text/csv').click(), }); - const { content } = await readCSV({ filePath: downloadPath }); + const csvResult = await readCSV({ filePath: downloadPath }); - // Validate headers - expect(content.headers).toEqual(['ID', 'Name', 'Email', 'Role']); - - // Validate data - expect(content.data).toHaveLength(10); - expect(content.data[0]).toMatchObject({ + // Access parsed data and headers + const { data, headers } = csvResult.content; + expect(headers).toEqual(['ID', 'Name', 'Email']); + expect(data[0]).toMatchObject({ ID: expect.any(String), Name: expect.any(String), - Email: expect.stringMatching(/@/), + Email: expect.any(String), }); }); ``` @@ -81,25 +89,27 @@ test('should read multi-sheet XLSX', async () => { trigger: () => page.click('[data-testid="export-xlsx"]'), }); - const { content } = await readXLSX({ filePath: downloadPath }); + const xlsxResult = await readXLSX({ filePath: downloadPath }); - // Access specific sheets - const summarySheet = content.sheets.find((s) => s.name === 'Summary'); - const detailsSheet = content.sheets.find((s) => s.name === 'Details'); + // Verify worksheet structure + expect(xlsxResult.content.worksheets.length).toBeGreaterThan(0); + const worksheet = xlsxResult.content.worksheets[0]; + expect(worksheet).toBeDefined(); + expect(worksheet).toHaveProperty('name'); - // Validate summary - expect(summarySheet.data).toHaveLength(1); - expect(summarySheet.data[0].TotalRecords).toBe('150'); + // Access sheet data + const sheetData = worksheet?.data; + expect(Array.isArray(sheetData)).toBe(true); - // Validate details - expect(detailsSheet.data).toHaveLength(150); - expect(detailsSheet.headers).toContain('TransactionID'); + // Use type assertion for type safety + const firstRow = sheetData![0] as Record; + expect(firstRow).toHaveProperty('id'); }); ``` **Key Points**: -- `sheets` array with `name` and `data` properties +- `worksheets` array with `name` and `data` properties - Access sheets by name - Each sheet has its own headers and data - Type-safe sheet iteration @@ -117,26 +127,48 @@ test('should validate PDF report', async () => { const downloadPath = await handleDownload({ page, downloadDir: DOWNLOAD_DIR, - trigger: () => page.click('[data-testid="download-report"]'), + trigger: () => page.getByTestId('download-button-Text-based PDF Document').click(), }); - const { content } = await readPDF({ filePath: downloadPath }); + const pdfResult = await readPDF({ filePath: downloadPath }); - // content.text is extracted text from all pages - expect(content.text).toContain('Financial Report Q4 2024'); - expect(content.text).toContain('Total Revenue:'); - - // Validate page count - expect(content.numpages).toBeGreaterThan(10); + // content is extracted text from all pages + expect(pdfResult.pagesCount).toBe(1); + expect(pdfResult.fileName).toContain('.pdf'); + expect(pdfResult.content).toContain('All you need is the free Adobe Acrobat Reader'); }); ``` -**Key Points**: +**PDF Reader Options:** -- `content.text` contains all extracted text -- `content.numpages` for page count -- PDF parsing handles multi-page documents -- Search for specific phrases +```typescript +const result = await readPDF({ + filePath: '/path/to/document.pdf', + mergePages: false, // Keep pages separate (default: true) + debug: true, // Enable debug logging + maxPages: 10, // Limit processing to first 10 pages +}); +``` + +**Important Limitation - Vector-based PDFs:** + +Text extraction may fail for PDFs that store text as vector graphics (e.g., those generated by jsPDF): + +```typescript +// Vector-based PDF example (extraction fails gracefully) +const pdfResult = await readPDF({ filePath: downloadPath }); + +expect(pdfResult.pagesCount).toBe(1); +expect(pdfResult.info.extractionNotes).toContain( + 'Text extraction from vector-based PDFs is not supported.' +); +``` + +Such PDFs will have: + +- `textExtractionSuccess: false` +- `isVectorBased: true` +- Explanatory message in `extractionNotes` ### Example 4: ZIP Archive Validation @@ -154,25 +186,33 @@ test('should validate ZIP archive', async () => { trigger: () => page.click('[data-testid="download-backup"]'), }); - const { content } = await readZIP({ filePath: downloadPath }); + const zipResult = await readZIP({ filePath: downloadPath }); // Check file list - expect(content.files).toContain('data.csv'); - expect(content.files).toContain('config.json'); - expect(content.files).toContain('readme.txt'); + expect(Array.isArray(zipResult.content.entries)).toBe(true); + expect(zipResult.content.entries).toContain( + 'Case_53125_10-19-22_AM/Case_53125_10-19-22_AM_case_data.csv' + ); - // Read specific file from archive - const configContent = content.zip.readAsText('config.json'); - const config = JSON.parse(configContent); + // Extract specific file + const targetFile = 'Case_53125_10-19-22_AM/Case_53125_10-19-22_AM_case_data.csv'; + const zipWithExtraction = await readZIP({ + filePath: downloadPath, + fileToExtract: targetFile, + }); - expect(config.version).toBe('2.0'); + // Access extracted file buffer + const extractedFiles = zipWithExtraction.content.extractedFiles || {}; + const fileBuffer = extractedFiles[targetFile]; + expect(fileBuffer).toBeInstanceOf(Buffer); + expect(fileBuffer?.length).toBeGreaterThan(0); }); ``` **Key Points**: -- `content.files` lists all files in archive -- `content.zip.readAsText()` extracts specific files +- `content.entries` lists all files in archive +- `fileToExtract` extracts specific files to Buffer - Validate archive structure - Read and parse individual files from ZIP @@ -185,7 +225,7 @@ test('should validate ZIP archive', async () => { ```typescript test('should download via API', async ({ page, request }) => { const downloadPath = await handleDownload({ - page, + page, // Still need page for download events downloadDir: DOWNLOAD_DIR, trigger: async () => { const response = await request.get('/api/export/csv', { @@ -211,20 +251,123 @@ test('should download via API', async ({ page, request }) => { - Still need `page` for download events - Works with authenticated endpoints -## Validation Helpers +### Example 6: Reading CSV from Buffer (ZIP extraction) + +**Context**: Read CSV content directly from a Buffer (e.g., extracted from ZIP). + +**Implementation**: ```typescript -// CSV validation -const { isValid, errors } = await validateCSV({ - filePath: downloadPath, - expectedRowCount: 10, - requiredHeaders: ['ID', 'Name', 'Email'], +// Read from a Buffer (e.g., extracted from a ZIP) +const zipResult = await readZIP({ + filePath: 'archive.zip', + fileToExtract: 'data.csv', }); +const fileBuffer = zipResult.content.extractedFiles?.['data.csv']; +const csvFromBuffer = await readCSV({ content: fileBuffer }); -expect(isValid).toBe(true); -expect(errors).toHaveLength(0); +// Read from a string +const csvString = 'name,age\nJohn,30\nJane,25'; +const csvFromString = await readCSV({ content: csvString }); + +const { data, headers } = csvFromString.content; +expect(headers).toContain('name'); +expect(headers).toContain('age'); ``` +## API Reference + +### CSV Reader Options + +| Option | Type | Default | Description | +| -------------- | ------------------ | -------- | -------------------------------------- | +| `filePath` | `string` | - | Path to CSV file (mutually exclusive) | +| `content` | `string \| Buffer` | - | Direct content (mutually exclusive) | +| `delimiter` | `string \| 'auto'` | `','` | Value separator, auto-detect if 'auto' | +| `encoding` | `string` | `'utf8'` | File encoding | +| `parseHeaders` | `boolean` | `true` | Use first row as headers | +| `trim` | `boolean` | `true` | Trim whitespace from values | + +### XLSX Reader Options + +| Option | Type | Description | +| ----------- | -------- | ------------------------------ | +| `filePath` | `string` | Path to XLSX file | +| `sheetName` | `string` | Name of sheet to set as active | + +### PDF Reader Options + +| Option | Type | Default | Description | +| ------------ | --------- | ------- | --------------------------- | +| `filePath` | `string` | - | Path to PDF file (required) | +| `mergePages` | `boolean` | `true` | Merge text from all pages | +| `maxPages` | `number` | - | Maximum pages to extract | +| `debug` | `boolean` | `false` | Enable debug logging | + +### ZIP Reader Options + +| Option | Type | Description | +| --------------- | -------- | ---------------------------------- | +| `filePath` | `string` | Path to ZIP file | +| `fileToExtract` | `string` | Specific file to extract to Buffer | + +### Return Values + +#### CSV Reader Return Value + +```typescript +{ + content: { + data: Array>, // Parsed rows (excludes header row if parseHeaders: true) + headers: string[] | null // Column headers (null if parseHeaders: false) + } +} +``` + +#### XLSX Reader Return Value + +```typescript +{ + content: { + worksheets: Array<{ + name: string, // Sheet name + rows: Array>, // All rows including headers + headers?: string[] // First row as headers (if present) + }> + } +} +``` + +#### PDF Reader Return Value + +```typescript +{ + content: string, // Extracted text (merged or per-page based on mergePages) + pagesCount: number, // Total pages in PDF + fileName?: string, // Original filename if available + info?: Record // PDF metadata (author, title, etc.) +} +``` + +> **Note**: When `mergePages: false`, `content` is an array of strings (one per page). When `maxPages` is set, only that many pages are extracted. + +#### ZIP Reader Return Value + +```typescript +{ + content: { + entries: Array<{ + name: string, // File/directory path within ZIP + size: number, // Uncompressed size in bytes + isDirectory: boolean // True for directories + }>, + extractedFiles: Record // Extracted file contents by path + } +} +``` + +> **Note**: When `fileToExtract` is specified, only that file appears in `extractedFiles`. + ## Download Cleanup Pattern ```typescript @@ -234,6 +377,66 @@ test.afterEach(async () => { }); ``` +## Comparison with Vanilla Playwright + +Vanilla Playwright (real test) snippet: + +```typescript +// ~80 lines of boilerplate! +const [download] = await Promise.all([ + page.waitForEvent('download'), + page.getByTestId('download-button-CSV Export').click(), +]); + +const failure = await download.failure(); +expect(failure).toBeNull(); + +const filePath = testInfo.outputPath(download.suggestedFilename()); +await download.saveAs(filePath); + +await expect + .poll( + async () => { + try { + await fs.access(filePath); + return true; + } catch { + return false; + } + }, + { timeout: 5000, intervals: [100, 200, 500] } + ) + .toBe(true); + +const csvContent = await fs.readFile(filePath, 'utf-8'); + +const parseResult = parse(csvContent, { + header: true, + skipEmptyLines: true, + dynamicTyping: true, + transformHeader: (header: string) => header.trim(), +}); + +if (parseResult.errors.length > 0) { + throw new Error(`CSV parsing errors: ${JSON.stringify(parseResult.errors)}`); +} + +const data = parseResult.data as Array>; +const headers = parseResult.meta.fields || []; +``` + +With File Utils, the same flow becomes: + +```typescript +const downloadPath = await handleDownload({ + page, + downloadDir: DOWNLOAD_DIR, + trigger: () => page.getByTestId('download-button-text/csv').click(), +}); + +const { data, headers } = (await readCSV({ filePath: downloadPath })).content; +``` + ## Related Fragments - `overview.md` - Installation and imports @@ -242,7 +445,7 @@ test.afterEach(async () => { ## Anti-Patterns -**❌ Not cleaning up downloads:** +**DON'T leave downloads in place:** ```typescript test('creates file', async () => { @@ -251,7 +454,7 @@ test('creates file', async () => { }) ``` -**✅ Clean up after tests:** +**DO clean up after tests:** ```typescript test.afterEach(async () => { diff --git a/src/modules/bmm/testarch/knowledge/intercept-network-call.md b/src/modules/bmm/testarch/knowledge/intercept-network-call.md index a175d559..e47419da 100644 --- a/src/modules/bmm/testarch/knowledge/intercept-network-call.md +++ b/src/modules/bmm/testarch/knowledge/intercept-network-call.md @@ -183,7 +183,31 @@ test('should handle timeout', async ({ page, interceptNetworkCall }) => { - Validate error UI states - No real failures needed -### Example 5: Multiple Intercepts (Order Matters!) +### Example 5: Order Matters - Intercept Before Navigate + +**Context**: The interceptor must be set up before the network request occurs. + +**Implementation**: + +```typescript +// INCORRECT - interceptor set up too late +await page.goto('https://example.com'); // Request already happened +const networkCall = interceptNetworkCall({ url: '**/api/data' }); +await networkCall; // Will hang indefinitely! + +// CORRECT - Set up interception first +const networkCall = interceptNetworkCall({ url: '**/api/data' }); +await page.goto('https://example.com'); +const result = await networkCall; +``` + +This pattern follows the classic test spy/stub pattern: + +1. Define the spy/stub (set up interception) +2. Perform the action (trigger the network request) +3. Assert on the spy/stub (await and verify the response) + +### Example 6: Multiple Intercepts **Context**: Intercepting different endpoints in same test - setup order is critical. @@ -191,7 +215,7 @@ test('should handle timeout', async ({ page, interceptNetworkCall }) => { ```typescript test('multiple intercepts', async ({ page, interceptNetworkCall }) => { - // ✅ CORRECT: Setup all intercepts BEFORE navigation + // Setup all intercepts BEFORE navigation const usersCall = interceptNetworkCall({ url: '**/api/users' }); const productsCall = interceptNetworkCall({ url: '**/api/products' }); const ordersCall = interceptNetworkCall({ url: '**/api/orders' }); @@ -211,11 +235,85 @@ test('multiple intercepts', async ({ page, interceptNetworkCall }) => { - Setup all intercepts before triggering actions - Use `Promise.all()` to wait for multiple calls -- Order: intercept → navigate → await +- Order: intercept -> navigate -> await - Prevents race conditions +### Example 7: Capturing Multiple Requests to the Same Endpoint + +**Context**: Each `interceptNetworkCall` captures only the first matching request. + +**Implementation**: + +```typescript +// Capturing a known number of requests +const firstRequest = interceptNetworkCall({ url: '/api/data' }); +const secondRequest = interceptNetworkCall({ url: '/api/data' }); + +await page.click('#load-data-button'); + +const firstResponse = await firstRequest; +const secondResponse = await secondRequest; + +expect(firstResponse.status).toBe(200); +expect(secondResponse.status).toBe(200); + +// Handling an unknown number of requests +const getDataRequestInterceptor = () => + interceptNetworkCall({ + url: '/api/data', + timeout: 1000, // Short timeout to detect when no more requests are coming + }); + +let currentInterceptor = getDataRequestInterceptor(); +const allResponses = []; + +await page.click('#load-multiple-data-button'); + +while (true) { + try { + const response = await currentInterceptor; + allResponses.push(response); + currentInterceptor = getDataRequestInterceptor(); + } catch (error) { + // No more requests (timeout) + break; + } +} + +console.log(`Captured ${allResponses.length} requests to /api/data`); +``` + +### Example 8: Using Timeout + +**Context**: Set a timeout for waiting on a network request. + +**Implementation**: + +```typescript +const dataCall = interceptNetworkCall({ + method: 'GET', + url: '/api/data-that-might-be-slow', + timeout: 5000, // 5 seconds timeout +}); + +await page.goto('/data-page'); + +try { + const { responseJson } = await dataCall; + console.log('Data loaded successfully:', responseJson); +} catch (error) { + if (error.message.includes('timeout')) { + console.log('Request timed out as expected'); + } else { + throw error; + } +} +``` + ## URL Pattern Matching +The utility uses [picomatch](https://github.com/micromatch/picomatch) for powerful glob pattern matching, dramatically simplifying URL targeting: + **Supported glob patterns:** ```typescript @@ -226,7 +324,59 @@ test('multiple intercepts', async ({ page, interceptNetworkCall }) => { '**/api/users?id=*'; // With query params ``` -**Uses picomatch library** - same pattern syntax as Playwright's `page.route()` but cleaner API. +**Comparison with vanilla Playwright:** + +```typescript +// Vanilla Playwright - complex predicate +const predicate = (response) => { + const url = response.url(); + return ( + url.endsWith('/api/users') || + url.match(/\/api\/users\/\d+/) || + (url.includes('/api/users/') && url.includes('/profile')) + ); +}; +page.waitForResponse(predicate); + +// With interceptNetworkCall - simple glob patterns +interceptNetworkCall({ url: '/api/users' }); // Exact endpoint +interceptNetworkCall({ url: '/api/users/*' }); // User by ID pattern +interceptNetworkCall({ url: '/api/users/*/profile' }); // Specific sub-paths +interceptNetworkCall({ url: '/api/users/**' }); // Match all +``` + +## API Reference + +### `interceptNetworkCall(options)` + +| Parameter | Type | Description | +| ----------------- | ---------- | --------------------------------------------------------------------- | +| `page` | `Page` | Required when using direct import (not needed with fixture) | +| `method` | `string` | Optional: HTTP method to match (e.g., 'GET', 'POST') | +| `url` | `string` | Optional: URL pattern to match (supports glob patterns via picomatch) | +| `fulfillResponse` | `object` | Optional: Response to use when mocking | +| `handler` | `function` | Optional: Custom handler function for the route | +| `timeout` | `number` | Optional: Timeout in milliseconds for the network request | + +### `fulfillResponse` Object + +| Property | Type | Description | +| --------- | ------------------------ | ----------------------------------------------------- | +| `status` | `number` | HTTP status code (default: 200) | +| `headers` | `Record` | Response headers | +| `body` | `any` | Response body (will be JSON.stringified if an object) | + +### Return Value + +Returns a `Promise` with: + +| Property | Type | Description | +| -------------- | ---------- | --------------------------------------- | +| `request` | `Request` | The intercepted request | +| `response` | `Response` | The response (null if mocked) | +| `responseJson` | `any` | Parsed JSON response (if available) | +| `status` | `number` | HTTP status code | +| `requestJson` | `any` | Parsed JSON request body (if available) | ## Comparison with Vanilla Playwright @@ -238,7 +388,7 @@ test('multiple intercepts', async ({ page, interceptNetworkCall }) => { | `const status = resp.status()` | `const { status } = await call` | | Complex filter predicates | Simple glob patterns | -**Reduction:** ~5-7 lines → ~2-3 lines per interception +**Reduction:** ~5-7 lines -> ~2-3 lines per interception ## Related Fragments @@ -248,14 +398,14 @@ test('multiple intercepts', async ({ page, interceptNetworkCall }) => { ## Anti-Patterns -**❌ Intercepting after navigation:** +**DON'T intercept after navigation:** ```typescript await page.goto('/dashboard'); // Navigation starts const usersCall = interceptNetworkCall({ url: '**/api/users' }); // Too late! ``` -**✅ Intercept before navigate:** +**DO intercept before navigate:** ```typescript const usersCall = interceptNetworkCall({ url: '**/api/users' }); // First @@ -263,7 +413,7 @@ await page.goto('/dashboard'); // Then navigate const { responseJson } = await usersCall; // Then await ``` -**❌ Ignoring the returned Promise:** +**DON'T ignore the returned Promise:** ```typescript interceptNetworkCall({ url: '**/api/users' }); // Not awaited! @@ -271,7 +421,7 @@ await page.goto('/dashboard'); // No deterministic wait - race condition ``` -**✅ Always await the intercept:** +**DO always await the intercept:** ```typescript const usersCall = interceptNetworkCall({ url: '**/api/users' }); diff --git a/src/modules/bmm/testarch/knowledge/log.md b/src/modules/bmm/testarch/knowledge/log.md index 42ddc228..c222a0c6 100644 --- a/src/modules/bmm/testarch/knowledge/log.md +++ b/src/modules/bmm/testarch/knowledge/log.md @@ -21,6 +21,20 @@ The `log` utility provides: - **Multiple levels**: info, step, success, warning, error, debug - **Optional console**: Can disable console output but keep report logs +## Quick Start + +```typescript +import { log } from '@seontechnologies/playwright-utils'; + +// Basic logging +await log.info('Starting test'); +await log.step('Test step shown in Playwright UI'); +await log.success('Operation completed'); +await log.warning('Something to note'); +await log.error('Something went wrong'); +await log.debug('Debug information'); +``` + ## Pattern Examples ### Example 1: Basic Logging Levels @@ -143,41 +157,105 @@ test('organized with steps', async ({ page, apiRequest }) => { - Steps visible in Playwright trace viewer - Better debugging when tests fail -### Example 4: Conditional Logging +### Example 4: Test Step Decorators -**Context**: Log different messages based on environment or test conditions. +**Context**: Create collapsible test steps in Playwright UI using decorators. + +**Page Object Methods with @methodTestStep:** + +```typescript +import { methodTestStep } from '@seontechnologies/playwright-utils'; + +class TodoPage { + constructor(private page: Page) { + this.name = 'TodoPage'; + } + + readonly name: string; + + @methodTestStep('Add todo item') + async addTodo(text: string) { + await log.info(`Adding todo: ${text}`); + const newTodo = this.page.getByPlaceholder('What needs to be done?'); + await newTodo.fill(text); + await newTodo.press('Enter'); + await log.step('step within a decorator'); + await log.success(`Added todo: ${text}`); + } + + @methodTestStep('Get all todos') + async getTodos() { + await log.info('Getting all todos'); + return this.page.getByTestId('todo-title'); + } +} +``` + +**Function Helpers with functionTestStep:** + +```typescript +import { functionTestStep } from '@seontechnologies/playwright-utils'; + +// Define todo items for the test +const TODO_ITEMS = ['buy groceries', 'pay bills', 'schedule meeting']; + +const createDefaultTodos = functionTestStep('Create default todos', async (page: Page) => { + await log.info('Creating default todos'); + await log.step('step within a functionWrapper'); + const todoPage = new TodoPage(page); + + for (const item of TODO_ITEMS) { + await todoPage.addTodo(item); + } + + await log.success('Created all default todos'); +}); + +const checkNumberOfTodosInLocalStorage = functionTestStep( + 'Check total todos count fn-step', + async (page: Page, expected: number) => { + await log.info(`Verifying todo count: ${expected}`); + const result = await page.waitForFunction( + (e) => JSON.parse(localStorage['react-todos']).length === e, + expected + ); + await log.success(`Verified todo count: ${expected}`); + return result; + } +); +``` + +### Example 5: File Logging + +**Context**: Enable file logging for persistent logs. **Implementation**: ```typescript -test('conditional logging', async ({ page }) => { - const isCI = process.env.CI === 'true'; +// playwright/support/fixtures.ts +import { test as base } from '@playwright/test'; +import { log, captureTestContext } from '@seontechnologies/playwright-utils'; - if (isCI) { - await log.info('Running in CI environment'); - } else { - await log.debug('Running locally'); - } +// Configure file logging globally +log.configure({ + fileLogging: { + enabled: true, + outputDir: 'playwright-logs/organized-logs', + forceConsolidated: false, // One file per test + }, +}); - const isKafkaWorking = await checkKafkaHealth(); - - if (!isKafkaWorking) { - await log.warning('Kafka unavailable - skipping event checks'); - } else { - await log.step('Verifying Kafka events'); - // ... event verification - } +// Extend base test with file logging context capture +export const test = base.extend({ + // Auto-capture test context for file logging + autoTestContext: [async ({}, use, testInfo) => { + captureTestContext(testInfo); + await use(undefined); + }, { auto: true }], }); ``` -**Key Points**: - -- Log based on environment -- Skip logging with conditionals -- Use appropriate log levels -- Debug info for local, minimal for CI - -### Example 5: Integration with Auth and API +### Example 6: Integration with Auth and API **Context**: Log authenticated API requests with tokens (safely). @@ -221,16 +299,73 @@ test('should log auth flow', async ({ authToken, apiRequest }) => { - Combine with auth and API utilities - Log at appropriate detail level +## Configuration + +**Defaults:** console logging enabled, file logging disabled. + +```typescript +// Enable file logging in config +log.configure({ + console: true, // default + fileLogging: { + enabled: true, + outputDir: 'playwright-logs', + forceConsolidated: false, // One file per test + }, +}); + +// Per-test override +await log.info('Message', { + console: { enabled: false }, + fileLogging: { enabled: true }, +}); +``` + +### Environment Variables + +```bash +# Disable all logging +SILENT=true + +# Disable only file logging +DISABLE_FILE_LOGS=true + +# Disable only console logging +DISABLE_CONSOLE_LOGS=true +``` + +### Level Filtering + +```typescript +log.configure({ + level: 'warning', // Only warning, error levels will show +}); + +// Available levels (in priority order): +// debug < info < step < success < warning < error +``` + +### Sync Methods + +For non-test contexts (global setup, utility functions): + +```typescript +// Use sync methods when async/await isn't available +log.infoSync('Initializing configuration'); +log.successSync('Environment configured'); +log.errorSync('Setup failed'); +``` + ## Log Levels Guide -| Level | When to Use | Shows in Report | Shows in Console | -| --------- | ----------------------------------- | -------------------- | ---------------- | -| `step` | Test organization, major actions | ✅ Collapsible steps | ✅ Yes | -| `info` | General information, state changes | ✅ Yes | ✅ Yes | -| `success` | Successful operations | ✅ Yes | ✅ Yes | -| `warning` | Non-critical issues, skipped checks | ✅ Yes | ✅ Yes | -| `error` | Failures, exceptions | ✅ Yes | ✅ Configurable | -| `debug` | Detailed data, objects | ✅ Yes (attached) | ✅ Configurable | +| Level | When to Use | Shows in Report | Shows in Console | +| --------- | ----------------------------------- | ----------------- | ---------------- | +| `step` | Test organization, major actions | Collapsible steps | Yes | +| `info` | General information, state changes | Yes | Yes | +| `success` | Successful operations | Yes | Yes | +| `warning` | Non-critical issues, skipped checks | Yes | Yes | +| `error` | Failures, exceptions | Yes | Configurable | +| `debug` | Detailed data, objects | Yes (attached) | Configurable | ## Comparison with console.log @@ -251,34 +386,34 @@ test('should log auth flow', async ({ authToken, apiRequest }) => { ## Anti-Patterns -**❌ Logging objects in steps:** +**DON'T log objects in steps:** ```typescript await log.step({ user: 'test', action: 'create' }); // Shows empty in UI ``` -**✅ Use strings for steps, objects for debug:** +**DO use strings for steps, objects for debug:** ```typescript await log.step('Creating user: test'); // Readable in UI await log.debug({ user: 'test', action: 'create' }); // Detailed data ``` -**❌ Logging sensitive data:** +**DON'T log sensitive data:** ```typescript await log.info(`Password: ${password}`); // Security risk! await log.info(`Token: ${authToken}`); // Full token exposed! ``` -**✅ Use previews or omit sensitive data:** +**DO use previews or omit sensitive data:** ```typescript await log.info('User authenticated successfully'); // No sensitive data await log.debug({ tokenPreview: token.slice(0, 6) + '...' }); ``` -**❌ Excessive logging in loops:** +**DON'T log excessively in loops:** ```typescript for (const item of items) { @@ -286,7 +421,7 @@ for (const item of items) { } ``` -**✅ Log summary or use debug level:** +**DO log summary or use debug level:** ```typescript await log.step(`Processing ${items.length} items`); diff --git a/src/modules/bmm/testarch/knowledge/network-error-monitor.md b/src/modules/bmm/testarch/knowledge/network-error-monitor.md index 0a2321bd..a5ee9069 100644 --- a/src/modules/bmm/testarch/knowledge/network-error-monitor.md +++ b/src/modules/bmm/testarch/knowledge/network-error-monitor.md @@ -21,6 +21,19 @@ The `network-error-monitor` provides: - **Smart opt-out**: Disable for validation tests expecting errors - **Deduplication**: Group repeated errors by pattern - **Domino effect prevention**: Limit test failures per error pattern +- **Respects test status**: Won't suppress actual test failures + +## Quick Start + +```typescript +import { test } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; + +// That's it! Network monitoring is automatically enabled +test('my test', async ({ page }) => { + await page.goto('/dashboard'); + // If any HTTP 4xx/5xx errors occur, the test will fail +}); +``` ## Pattern Examples @@ -38,8 +51,8 @@ test('should load dashboard', async ({ page }) => { await page.goto('/dashboard'); await expect(page.locator('h1')).toContainText('Dashboard'); - // ✅ Passes if no HTTP errors - // ❌ Fails if any 4xx/5xx errors detected with clear message: + // Passes if no HTTP errors + // Fails if any 4xx/5xx errors detected with clear message: // "Network errors detected: 2 request(s) failed" // Failed requests: // GET 500 https://api.example.com/users @@ -64,13 +77,17 @@ test('should load dashboard', async ({ page }) => { import { test } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; // Opt-out with annotation -test('should show error on invalid input', { annotation: [{ type: 'skipNetworkMonitoring' }] }, async ({ page }) => { - await page.goto('/form'); - await page.click('#submit'); // Triggers 400 error +test( + 'should show error on invalid input', + { annotation: [{ type: 'skipNetworkMonitoring' }] }, + async ({ page }) => { + await page.goto('/form'); + await page.click('#submit'); // Triggers 400 error - // Monitoring disabled - test won't fail on 400 - await expect(page.getByText('Invalid input')).toBeVisible(); -}); + // Monitoring disabled - test won't fail on 400 + await expect(page.getByText('Invalid input')).toBeVisible(); + } +); // Or opt-out entire describe block test.describe('error handling', { annotation: [{ type: 'skipNetworkMonitoring' }] }, () => { @@ -91,7 +108,139 @@ test.describe('error handling', { annotation: [{ type: 'skipNetworkMonitoring' } - Monitoring still active for other tests - Perfect for intentional error scenarios -### Example 3: Integration with Merged Fixtures +### Example 3: Respects Test Status + +**Context**: The monitor respects final test statuses to avoid suppressing important test outcomes. + +**Behavior by test status:** + +- **`failed`**: Network errors logged as additional context, not thrown +- **`timedOut`**: Network errors logged as additional context +- **`skipped`**: Network errors logged, skip status preserved +- **`interrupted`**: Network errors logged, interrupted status preserved +- **`passed`**: Network errors throw and fail the test + +**Example with test.skip():** + +```typescript +test('feature gated test', async ({ page }) => { + const featureEnabled = await checkFeatureFlag(); + test.skip(!featureEnabled, 'Feature not enabled'); + // If skipped, network errors won't turn this into a failure + await page.goto('/new-feature'); +}); +``` + +### Example 4: Excluding Legitimate Errors + +**Context**: Some endpoints legitimately return 4xx/5xx responses. + +**Implementation**: + +```typescript +import { test as base } from '@playwright/test'; +import { createNetworkErrorMonitorFixture } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; + +export const test = base.extend( + createNetworkErrorMonitorFixture({ + excludePatterns: [ + /email-cluster\/ml-app\/has-active-run/, // ML service returns 404 when no active run + /idv\/session-templates\/list/, // IDV service returns 404 when not configured + /sentry\.io\/api/, // External Sentry errors should not fail tests + ], + }) +); +``` + +**For merged fixtures:** + +```typescript +import { test as base, mergeTests } from '@playwright/test'; +import { createNetworkErrorMonitorFixture } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; + +const networkErrorMonitor = base.extend( + createNetworkErrorMonitorFixture({ + excludePatterns: [/analytics\.google\.com/, /cdn\.example\.com/], + }) +); + +export const test = mergeTests(authFixture, networkErrorMonitor); +``` + +### Example 5: Preventing Domino Effect + +**Context**: One failing endpoint shouldn't fail all tests. + +**Implementation**: + +```typescript +import { test as base } from '@playwright/test'; +import { createNetworkErrorMonitorFixture } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; + +const networkErrorMonitor = base.extend( + createNetworkErrorMonitorFixture({ + excludePatterns: [], // Required when using maxTestsPerError + maxTestsPerError: 1, // Only first test fails per error pattern, rest just log + }) +); +``` + +**How it works:** + +When `/api/v2/case-management/cases` returns 500: + +- **First test** encountering this error: **FAILS** with clear error message +- **Subsequent tests** encountering same error: **PASSES** but logs warning + +Error patterns are grouped by `method + status + base path`: + +- `GET /api/v2/case-management/cases/123` -> Pattern: `GET:500:/api/v2/case-management` +- `GET /api/v2/case-management/quota` -> Pattern: `GET:500:/api/v2/case-management` (same group!) +- `POST /api/v2/case-management/cases` -> Pattern: `POST:500:/api/v2/case-management` (different group!) + +**Why include HTTP method?** A GET 404 vs POST 404 might represent different issues: + +- `GET 404 /api/users/123` -> User not found (expected in some tests) +- `POST 404 /api/users` -> Endpoint doesn't exist (critical error) + +**Output for subsequent tests:** + +``` +Warning: Network errors detected but not failing test (maxTestsPerError limit reached): + GET 500 https://api.example.com/api/v2/case-management/cases +``` + +**Recommended configuration:** + +```typescript +createNetworkErrorMonitorFixture({ + excludePatterns: [...], // Required - known broken endpoints (can be empty []) + maxTestsPerError: 1 // Stop domino effect (requires excludePatterns) +}) +``` + +**Understanding worker-level state:** + +Error pattern counts are stored in worker-level global state: + +```typescript +// test-file-1.spec.ts (runs in Worker 1) +test('test A', () => { + /* triggers GET:500:/api/v2/cases */ +}); // FAILS + +// test-file-2.spec.ts (runs later in Worker 1) +test('test B', () => { + /* triggers GET:500:/api/v2/cases */ +}); // PASSES (limit reached) + +// test-file-3.spec.ts (runs in Worker 2 - different worker) +test('test C', () => { + /* triggers GET:500:/api/v2/cases */ +}); // FAILS (fresh worker) +``` + +### Example 6: Integration with Merged Fixtures **Context**: Combine network-error-monitor with other utilities. @@ -105,7 +254,7 @@ import { test as networkErrorMonitorFixture } from '@seontechnologies/playwright export const test = mergeTests( authFixture, - networkErrorMonitorFixture, + networkErrorMonitorFixture // Add other fixtures ); @@ -127,110 +276,94 @@ test('authenticated with monitoring', async ({ page, authToken }) => { - Monitoring active automatically - No extra setup needed -### Example 4: Domino Effect Prevention - -**Context**: One failing endpoint shouldn't fail all tests. - -**Implementation**: - -```typescript -// Configuration (internal to utility) -const config = { - maxTestsPerError: 3, // Max 3 tests fail per unique error pattern -}; - -// Scenario: -// Test 1: GET /api/broken → 500 error → Test fails ❌ -// Test 2: GET /api/broken → 500 error → Test fails ❌ -// Test 3: GET /api/broken → 500 error → Test fails ❌ -// Test 4: GET /api/broken → 500 error → Test passes ⚠️ (limit reached, warning logged) -// Test 5: Different error pattern → Test fails ❌ (new pattern, counter resets) -``` - -**Key Points**: - -- Limits cascading failures -- Groups errors by URL + status code pattern -- Warns when limit reached -- Prevents flaky backend from failing entire suite - -### Example 5: Artifact Structure +### Example 7: Artifact Structure **Context**: Debugging failed tests with network error artifacts. -**Implementation**: - When test fails due to network errors, artifact attached: ```json -// test-results/my-test/network-errors.json -{ - "errors": [ - { - "url": "https://api.example.com/users", - "method": "GET", - "status": 500, - "statusText": "Internal Server Error", - "timestamp": "2024-08-13T10:30:45.123Z" - }, - { - "url": "https://api.example.com/metrics", - "method": "POST", - "status": 503, - "statusText": "Service Unavailable", - "timestamp": "2024-08-13T10:30:46.456Z" - } - ], - "summary": { - "totalErrors": 2, - "uniquePatterns": 2 +[ + { + "url": "https://api.example.com/users", + "status": 500, + "method": "GET", + "timestamp": "2025-11-10T12:34:56.789Z" + }, + { + "url": "https://api.example.com/metrics", + "status": 503, + "method": "POST", + "timestamp": "2025-11-10T12:34:57.123Z" } -} +] ``` -**Key Points**: +## Implementation Details -- JSON artifact per failed test -- Full error details (URL, method, status, timestamp) -- Summary statistics -- Easy debugging with structured data +### How It Works -## Comparison with Manual Error Checks +1. **Fixture Extension**: Uses Playwright's `base.extend()` with `auto: true` +2. **Response Listener**: Attaches `page.on('response')` listener at test start +3. **Multi-Page Monitoring**: Automatically monitors popups and new tabs via `context.on('page')` +4. **Error Collection**: Captures 4xx/5xx responses, checking exclusion patterns +5. **Try/Finally**: Ensures error processing runs even if test fails early +6. **Status Check**: Only throws errors if test hasn't already reached final status +7. **Artifact**: Attaches JSON file to test report for debugging -| Manual Approach | network-error-monitor | -| ------------------------------------------------------ | -------------------------- | -| `page.on('response', resp => { if (!resp.ok()) ... })` | Auto-enabled, zero setup | -| Check each response manually | Automatic for all requests | -| Custom error tracking logic | Built-in deduplication | -| No structured artifacts | JSON artifacts attached | -| Easy to forget | Never miss a backend error | +### Performance + +The monitor has minimal performance impact: + +- Event listener overhead: ~0.1ms per response +- Memory: ~200 bytes per unique error +- No network delay (observes responses, doesn't intercept them) + +## Comparison with Alternatives + +| Approach | Network Error Monitor | Manual afterEach | +| --------------------------- | --------------------- | --------------------- | +| **Setup Required** | Zero (auto-enabled) | Every test file | +| **Catches Silent Failures** | Yes | Yes (if configured) | +| **Structured Artifacts** | JSON attached | Custom impl | +| **Test Failure Safety** | Try/finally | afterEach may not run | +| **Opt-Out Mechanism** | Annotation | Custom logic | +| **Status Aware** | Respects skip/failed | No | ## When to Use **Auto-enabled for:** -- ✅ All E2E tests -- ✅ Integration tests -- ✅ Any test hitting real APIs +- All E2E tests +- Integration tests +- Any test hitting real APIs **Opt-out for:** -- ❌ Validation tests (expecting 4xx) -- ❌ Error handling tests (expecting 5xx) -- ❌ Offline tests (network-recorder playback) +- Validation tests (expecting 4xx) +- Error handling tests (expecting 5xx) +- Offline tests (network-recorder playback) -## Integration with Framework Setup +## Troubleshooting -In `*framework` workflow, mention network-error-monitor: +### Test fails with network errors but I don't see them in my app + +The errors might be happening during page load or in background polling. Check the `network-errors.json` artifact in your test report for full details including timestamps. + +### False positives from external services + +Configure exclusion patterns as shown in the "Excluding Legitimate Errors" section above. + +### Network errors not being caught + +Ensure you're importing the test from the correct fixture: ```typescript -// Add to merged-fixtures.ts -import { test as networkErrorMonitorFixture } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; +// Correct +import { test } from '@seontechnologies/playwright-utils/network-error-monitor/fixtures'; -export const test = mergeTests( - // ... other fixtures - networkErrorMonitorFixture, -); +// Wrong - this won't have network monitoring +import { test } from '@playwright/test'; ``` ## Related Fragments @@ -241,14 +374,14 @@ export const test = mergeTests( ## Anti-Patterns -**❌ Opting out of monitoring globally:** +**DON'T opt out of monitoring globally:** ```typescript // Every test skips monitoring test.use({ annotation: [{ type: 'skipNetworkMonitoring' }] }); ``` -**✅ Opt-out only for specific error tests:** +**DO opt-out only for specific error tests:** ```typescript test.describe('error scenarios', { annotation: [{ type: 'skipNetworkMonitoring' }] }, () => { @@ -256,17 +389,17 @@ test.describe('error scenarios', { annotation: [{ type: 'skipNetworkMonitoring' }); ``` -**❌ Ignoring network error artifacts:** +**DON'T ignore network error artifacts:** ```typescript // Test fails, artifact shows 500 errors // Developer: "Works on my machine" ¯\_(ツ)_/¯ ``` -**✅ Check artifacts for root cause:** +**DO check artifacts for root cause:** ```typescript // Read network-errors.json artifact -// Identify failing endpoint: GET /api/users → 500 +// Identify failing endpoint: GET /api/users -> 500 // Fix backend issue before merging ``` diff --git a/src/modules/bmm/testarch/knowledge/network-recorder.md b/src/modules/bmm/testarch/knowledge/network-recorder.md index ff24cb4e..7b9c6e26 100644 --- a/src/modules/bmm/testarch/knowledge/network-recorder.md +++ b/src/modules/bmm/testarch/knowledge/network-recorder.md @@ -21,6 +21,46 @@ HAR-based recording/playback provides: - **Stateful mocking**: CRUD operations work naturally (not just read-only) - **Environment flexibility**: Map URLs for any environment +## Quick Start + +### 1. Record Network Traffic + +```typescript +// Set mode to 'record' to capture network traffic +process.env.PW_NET_MODE = 'record'; + +test('should add, edit and delete a movie', async ({ page, context, networkRecorder }) => { + // Setup network recorder - it will record all network traffic + await networkRecorder.setup(context); + + // Your normal test code + await page.goto('/'); + await page.fill('#movie-name', 'Inception'); + await page.click('#add-movie'); + + // Network traffic is automatically saved to HAR file +}); +``` + +### 2. Playback Network Traffic + +```typescript +// Set mode to 'playback' to use recorded traffic +process.env.PW_NET_MODE = 'playback'; + +test('should add, edit and delete a movie', async ({ page, context, networkRecorder }) => { + // Setup network recorder - it will replay from HAR file + await networkRecorder.setup(context); + + // Same test code runs without hitting real backend! + await page.goto('/'); + await page.fill('#movie-name', 'Inception'); + await page.click('#add-movie'); +}); +``` + +That's it! Your tests now run completely offline using recorded network traffic. + ## Pattern Examples ### Example 1: Basic Record and Playback @@ -115,74 +155,173 @@ test.describe('Movie CRUD - offline with network recorder', () => { - Combine with `interceptNetworkCall` for deterministic waits - First run records, subsequent runs replay -### Example 3: Environment Switching +### Example 3: Common Patterns + +**Recording Only API Calls**: + +```typescript +await networkRecorder.setup(context, { + recording: { + urlFilter: /\/api\// // Only record API calls, ignore static assets + } +}); +``` + +**Playback with Fallback**: + +```typescript +await networkRecorder.setup(context, { + playback: { + fallback: true // Fall back to live requests if HAR entry missing + } +}); +``` + +**Custom HAR File Location**: + +```typescript +await networkRecorder.setup(context, { + harFile: { + harDir: 'recordings/api-calls', + baseName: 'user-journey', + organizeByTestFile: false // Optional: flatten directory structure + } +}); +``` + +**Directory Organization:** + +- `organizeByTestFile: true` (default): `har-files/test-file-name/baseName-test-title.har` +- `organizeByTestFile: false`: `har-files/baseName-test-title.har` + +### Example 4: Response Content Storage - Embed vs Attach + +**Context**: Choose how response content is stored in HAR files. + +**`embed` (Default - Recommended):** + +```typescript +await networkRecorder.setup(context, { + recording: { + content: 'embed' // Store content inline (default) + } +}); +``` + +**Pros:** + +- Single self-contained file - Easy to share, version control +- Better for small-medium responses (API JSON, HTML pages) +- HAR specification compliant + +**Cons:** + +- Larger HAR files +- Not ideal for large binary content (images, videos) + +**`attach` (Alternative):** + +```typescript +await networkRecorder.setup(context, { + recording: { + content: 'attach' // Store content separately + } +}); +``` + +**Pros:** + +- Smaller HAR files +- Better for large responses (images, videos, documents) + +**Cons:** + +- Multiple files to manage +- Harder to share + +**When to Use Each:** + +| Use `embed` (default) when | Use `attach` when | +|---------------------------|-------------------| +| Recording API responses (JSON, XML) | Recording large images, videos | +| Small to medium HTML pages | HAR file size >50MB | +| You want a single, portable file | Maximum disk efficiency needed | +| Sharing HAR files with team | Working with ZIP archive output | + +### Example 5: Cross-Environment Compatibility (URL Mapping) **Context**: Record in dev environment, play back in CI with different base URLs. -**Implementation**: +**The Problem**: HAR files contain URLs for the recording environment (e.g., `dev.example.com`). Playing back on a different environment fails. + +**Simple Hostname Mapping:** ```typescript -// playwright.config.ts - Map URLs for different environments -export default defineConfig({ - use: { - baseURL: process.env.CI ? 'https://app.ci.example.com' : 'http://localhost:3000', - }, -}); - -// Test works in both environments -test('cross-environment playback', async ({ page, context, networkRecorder }) => { - await networkRecorder.setup(context); - - // In dev: hits http://localhost:3000/api/movies - // In CI: HAR replays with https://app.ci.example.com/api/movies - await page.goto('/movies'); - - // Network recorder auto-maps URLs - await expect(page.getByTestId('movie-list')).toBeVisible(); +await networkRecorder.setup(context, { + playback: { + urlMapping: { + hostMapping: { + 'preview.example.com': 'dev.example.com', + 'staging.example.com': 'dev.example.com', + 'localhost:3000': 'dev.example.com' + } + } + } }); ``` -**Key Points**: - -- HAR files record absolute URLs -- Playback maps to current baseURL -- Same HAR works across environments -- No manual URL rewriting needed - -### Example 4: Automatic vs Manual Mode Control - -**Context**: Choose between environment-based switching or in-test mode control. - -**Implementation**: +**Pattern-Based Mapping (Recommended):** ```typescript -// Option 1: Environment variable (recommended for CI) -PW_NET_MODE=record npm run test:pw # Record traffic -PW_NET_MODE=playback npm run test:pw # Playback traffic - -// Option 2: In-test control (recommended for development) -process.env.PW_NET_MODE = 'record' // Set at top of test file - -test('my test', async ({ page, context, networkRecorder }) => { - await networkRecorder.setup(context) - // ... -}) - -// Option 3: Auto-fallback (record if HAR missing, else playback) -// This is the default behavior when PW_NET_MODE not set -test('auto mode', async ({ page, context, networkRecorder }) => { - await networkRecorder.setup(context) - // First run: auto-records - // Subsequent runs: auto-plays back -}) +await networkRecorder.setup(context, { + playback: { + urlMapping: { + patterns: [ + // Map any preview-XXXX subdomain to dev + { match: /preview-\d+\.example\.com/, replace: 'dev.example.com' } + ] + } + } +}); ``` -**Key Points**: +**Custom Function:** -- Three mode options: record, playback, auto -- `PW_NET_MODE` environment variable -- In-test `process.env.PW_NET_MODE` assignment -- Auto-fallback when no mode specified +```typescript +await networkRecorder.setup(context, { + playback: { + urlMapping: { + mapUrl: (url) => url.replace('staging.example.com', 'dev.example.com') + } + } +}); +``` + +**Complex Multi-Environment Example:** + +```typescript +await networkRecorder.setup(context, { + playback: { + urlMapping: { + hostMapping: { + 'localhost:3000': 'admin.seondev.space', + 'admin-staging.seon.io': 'admin.seondev.space', + 'admin.seon.io': 'admin.seondev.space', + }, + patterns: [ + { match: /admin-\d+\.seondev\.space/, replace: 'admin.seondev.space' }, + { match: /admin-staging-pr-\w+-\d\.seon\.io/, replace: 'admin.seondev.space' } + ] + } + } +}); +``` + +**Benefits:** + +- Record once on dev, all environments map back to recordings +- CORS headers automatically updated based on request origin +- Debug with: `LOG_LEVEL=debug npm run test` ## Why Use This Instead of Native Playwright? @@ -191,7 +330,7 @@ test('auto mode', async ({ page, context, networkRecorder }) => { | ~80 lines setup boilerplate | ~5 lines total | | Manual HAR file management | Automatic file organization | | Complex setup/teardown | Automatic cleanup via fixtures | -| **Read-only tests** | **Full CRUD support** | +| **Read-only tests only** | **Full CRUD support** | | **Stateless** | **Stateful mocking** | | Manual URL mapping | Automatic environment mapping | @@ -199,9 +338,132 @@ test('auto mode', async ({ page, context, networkRecorder }) => { Native Playwright HAR playback is stateless - a POST create followed by GET list won't show the created item. This utility intelligently tracks CRUD operations in memory to reflect state changes, making offline tests behave like real APIs. +## How Stateful CRUD Detection Works + +When in playback mode, the Network Recorder automatically analyzes your HAR file to detect CRUD patterns. If it finds: + +- Multiple GET requests to the same resource endpoint (e.g., `/movies`) +- Mutation operations (POST, PUT, DELETE) to those resources +- Evidence of state changes between identical requests + +It automatically switches from static HAR playback to an intelligent stateful mock that: + +- Maintains state across requests +- Auto-generates IDs for new resources +- Returns proper 404s for deleted resources +- Supports polling scenarios where state changes over time + +**This happens automatically - no configuration needed!** + +## API Reference + +### NetworkRecorder Methods + +| Method | Return Type | Description | +| -------------------- | ------------------------ | ----------------------------------------------------- | +| `setup(context)` | `Promise` | Sets up recording/playback on browser context | +| `cleanup()` | `Promise` | Flushes data to disk and cleans up memory | +| `getContext()` | `NetworkRecorderContext` | Gets current recorder context information | +| `getStatusMessage()` | `string` | Gets human-readable status message | +| `getHarStats()` | `Promise` | Gets HAR file statistics and metadata | + +### Understanding `cleanup()` + +The `cleanup()` method performs memory and resource cleanup - **it does NOT delete HAR files**: + +**What it does:** + +- Flushes recorded data to disk (writes HAR file in recording mode) +- Releases file locks +- Clears in-memory data +- Resets internal state + +**What it does NOT do:** + +- Delete HAR files from disk +- Remove recorded network traffic +- Clear browser context or cookies + +### Configuration Options + +```typescript +type NetworkRecorderConfig = { + harFile?: { + harDir?: string // Directory for HAR files (default: 'har-files') + baseName?: string // Base name for HAR files (default: 'network-traffic') + organizeByTestFile?: boolean // Organize by test file (default: true) + } + + recording?: { + content?: 'embed' | 'attach' // Response content handling (default: 'embed') + urlFilter?: string | RegExp // URL filter for recording + update?: boolean // Update existing HAR files (default: false) + } + + playback?: { + fallback?: boolean // Fall back to live requests (default: false) + urlFilter?: string | RegExp // URL filter for playback + updateMode?: boolean // Update mode during playback (default: false) + } + + forceMode?: 'record' | 'playback' | 'disabled' +} +``` + +## Environment Configuration + +Control the recording mode using the `PW_NET_MODE` environment variable: + +```bash +# Record mode - captures network traffic to HAR files +PW_NET_MODE=record npm run test:pw + +# Playback mode - replays network traffic from HAR files +PW_NET_MODE=playback npm run test:pw + +# Disabled mode - no network recording/playback +PW_NET_MODE=disabled npm run test:pw + +# Default behavior (when PW_NET_MODE is empty/unset) - same as disabled +npm run test:pw +``` + +**Tip**: We recommend setting `process.env.PW_NET_MODE` directly in your test file for better control. + +## Troubleshooting + +### HAR File Not Found + +If you see "HAR file not found" errors during playback: + +1. Ensure you've recorded the test first with `PW_NET_MODE=record` +2. Check the HAR file exists in the expected location (usually `har-files/`) +3. Enable fallback mode: `playback: { fallback: true }` + +### Authentication and Network Recording + +The network recorder works seamlessly with authentication: + +```typescript +test('Authenticated recording', async ({ page, context, authSession, networkRecorder }) => { + // First authenticate + await authSession.login('testuser', 'password'); + + // Then setup network recording with authenticated context + await networkRecorder.setup(context); + + // Test authenticated flows + await page.goto('/dashboard'); +}); +``` + +### Concurrent Test Issues + +The recorder includes built-in file locking for safe parallel execution. Each test gets its own HAR file based on the test name. + ## Integration with Other Utilities -**With interceptNetworkCall** (deterministic waits): +**With interceptNetworkCall (deterministic waits):** ```typescript test('use both utilities', async ({ page, context, networkRecorder, interceptNetworkCall }) => { @@ -228,7 +490,7 @@ test('use both utilities', async ({ page, context, networkRecorder, interceptNet ## Anti-Patterns -**❌ Mixing record and playback in same test:** +**DON'T mix record and playback in same test:** ```typescript process.env.PW_NET_MODE = 'record'; @@ -236,7 +498,7 @@ process.env.PW_NET_MODE = 'record'; process.env.PW_NET_MODE = 'playback'; // Don't switch mid-test ``` -**✅ One mode per test:** +**DO use one mode per test:** ```typescript process.env.PW_NET_MODE = 'playback'; // Set once at top @@ -247,7 +509,7 @@ test('my test', async ({ page, context, networkRecorder }) => { }); ``` -**❌ Forgetting to call setup:** +**DON'T forget to call setup:** ```typescript test('broken', async ({ page, networkRecorder }) => { @@ -255,7 +517,7 @@ test('broken', async ({ page, networkRecorder }) => { }); ``` -**✅ Always call setup before navigation:** +**DO always call setup before navigation:** ```typescript test('correct', async ({ page, context, networkRecorder }) => { diff --git a/src/modules/bmm/testarch/knowledge/overview.md b/src/modules/bmm/testarch/knowledge/overview.md index 8155d55f..a539f03f 100644 --- a/src/modules/bmm/testarch/knowledge/overview.md +++ b/src/modules/bmm/testarch/knowledge/overview.md @@ -2,7 +2,7 @@ ## Principle -Use production-ready, fixture-based utilities from `@seontechnologies/playwright-utils` for common Playwright testing patterns. Build test helpers as pure functions first, then wrap in framework-specific fixtures for composability and reuse. +Use production-ready, fixture-based utilities from `@seontechnologies/playwright-utils` for common Playwright testing patterns. Build test helpers as pure functions first, then wrap in framework-specific fixtures for composability and reuse. **Works equally well for pure API testing (no browser) and UI testing.** ## Rationale @@ -20,6 +20,7 @@ Writing Playwright utilities from scratch for every project leads to: - **Composable fixtures**: Use `mergeTests` to combine utilities - **TypeScript support**: Full type safety with generic types - **Comprehensive coverage**: API requests, auth, network, logging, file handling, burn-in +- **Backend-first mentality**: Most utilities work without a browser - pure API/service testing is a first-class use case ## Installation @@ -37,17 +38,19 @@ npm install -D @seontechnologies/playwright-utils ### Core Testing Utilities -| Utility | Purpose | Test Context | -| -------------------------- | ------------------------------------------ | ------------- | -| **api-request** | Typed HTTP client with schema validation | API tests | -| **network-recorder** | HAR record/playback for offline testing | UI tests | -| **auth-session** | Token persistence, multi-user auth | Both UI & API | -| **recurse** | Cypress-style polling for async conditions | Both UI & API | -| **intercept-network-call** | Network spy/stub with auto JSON parsing | UI tests | -| **log** | Playwright report-integrated logging | Both UI & API | -| **file-utils** | CSV/XLSX/PDF/ZIP reading & validation | Both UI & API | -| **burn-in** | Smart test selection with git diff | CI/CD | -| **network-error-monitor** | Automatic HTTP 4xx/5xx detection | UI tests | +| Utility | Purpose | Test Context | +| -------------------------- | ---------------------------------------------------- | ------------------ | +| **api-request** | Typed HTTP client with schema validation and retry | **API/Backend** | +| **recurse** | Polling for async operations, background jobs | **API/Backend** | +| **auth-session** | Token persistence, multi-user, service-to-service | **API/Backend/UI** | +| **log** | Playwright report-integrated logging | **API/Backend/UI** | +| **file-utils** | CSV/XLSX/PDF/ZIP reading & validation | **API/Backend/UI** | +| **burn-in** | Smart test selection with git diff | **CI/CD** | +| **network-recorder** | HAR record/playback for offline testing | UI only | +| **intercept-network-call** | Network spy/stub with auto JSON parsing | UI only | +| **network-error-monitor** | Automatic HTTP 4xx/5xx detection | UI only | + +**Note**: 6 of 9 utilities work without a browser. Only 3 are UI-specific (network-recorder, intercept-network-call, network-error-monitor). ## Design Patterns diff --git a/src/modules/bmm/testarch/knowledge/recurse.md b/src/modules/bmm/testarch/knowledge/recurse.md index aec553a1..d9536400 100644 --- a/src/modules/bmm/testarch/knowledge/recurse.md +++ b/src/modules/bmm/testarch/knowledge/recurse.md @@ -2,7 +2,7 @@ ## Principle -Use Cypress-style polling with Playwright's `expect.poll` to wait for asynchronous conditions. Provides configurable timeout, interval, logging, and post-polling callbacks with enhanced error categorization. +Use Cypress-style polling with Playwright's `expect.poll` to wait for asynchronous conditions. Provides configurable timeout, interval, logging, and post-polling callbacks with enhanced error categorization. **Ideal for backend testing**: polling API endpoints for job completion, database eventual consistency, message queue processing, and cache propagation. ## Rationale @@ -21,6 +21,29 @@ The `recurse` utility provides: - **Post-poll callbacks**: Process results after success - **Type-safe**: Full TypeScript generic support +## Quick Start + +```typescript +import { test } from '@seontechnologies/playwright-utils/recurse/fixtures'; + +test('wait for job completion', async ({ recurse, apiRequest }) => { + const { body } = await apiRequest({ + method: 'POST', + path: '/api/jobs', + body: { type: 'export' }, + }); + + // Poll until job completes + const result = await recurse( + () => apiRequest({ method: 'GET', path: `/api/jobs/${body.id}` }), + (response) => response.body.status === 'completed', + { timeout: 60000 } + ); + + expect(result.body.downloadUrl).toBeDefined(); +}); +``` + ## Pattern Examples ### Example 1: Basic Polling @@ -48,7 +71,7 @@ test('should wait for job completion', async ({ recurse, apiRequest }) => { timeout: 60000, // 60 seconds max interval: 2000, // Check every 2 seconds log: 'Waiting for export job to complete', - }, + } ); expect(result.body.downloadUrl).toBeDefined(); @@ -62,7 +85,7 @@ test('should wait for job completion', async ({ recurse, apiRequest }) => { - Options: timeout, interval, log message - Returns the value when predicate returns true -### Example 2: Polling with Assertions +### Example 2: Working with Assertions **Context**: Use assertions directly in predicate for more expressive tests. @@ -76,35 +99,76 @@ test('should poll with assertions', async ({ recurse, apiRequest }) => { body: { type: 'user-created', userId: '123' }, }); - // Poll with assertions in predicate + // Poll with assertions in predicate - no return true needed! await recurse( async () => { const { body } = await apiRequest({ method: 'GET', path: '/api/events/123' }); return body; }, (event) => { - // Use assertions instead of boolean returns + // If all assertions pass, predicate succeeds expect(event.processed).toBe(true); expect(event.timestamp).toBeDefined(); - // If assertions pass, predicate succeeds + // No need to return true - just let assertions pass }, - { timeout: 30000 }, + { timeout: 30000 } ); }); ``` -**Key Points**: +**Why no `return true` needed?** -- Predicate can use `expect()` assertions -- If assertions throw, polling continues -- If assertions pass, polling succeeds -- More expressive than boolean returns +The predicate checks for "truthiness" of the return value. But there's a catch - in JavaScript, an empty `return` (or no return) returns `undefined`, which is falsy! -### Example 3: Custom Error Messages +The utility handles this by checking if: -**Context**: Provide context-specific error messages for timeout failures. +1. The predicate didn't throw (assertions passed) +2. The return value was either `undefined` (implicit return) or truthy -**Implementation**: +So you can: + +```typescript +// Option 1: Use assertions only (recommended) +(event) => { + expect(event.processed).toBe(true); +}; + +// Option 2: Return boolean (also works) +(event) => event.processed === true; + +// Option 3: Mixed (assertions + explicit return) +(event) => { + expect(event.processed).toBe(true); + return true; +}; +``` + +### Example 3: Error Handling + +**Context**: Understanding the different error types. + +**Error Types:** + +```typescript +// RecurseTimeoutError - Predicate never returned true within timeout +// Contains last command value and predicate error +try { + await recurse(/* ... */); +} catch (error) { + if (error instanceof RecurseTimeoutError) { + console.log('Timed out. Last value:', error.lastCommandValue); + console.log('Last predicate error:', error.lastPredicateError); + } +} + +// RecurseCommandError - Command function threw an error +// The command itself failed (e.g., network error, API error) + +// RecursePredicateError - Predicate function threw (not from assertions failing) +// Logic error in your predicate code +``` + +**Custom Error Messages:** ```typescript test('custom error on timeout', async ({ recurse, apiRequest }) => { @@ -115,7 +179,7 @@ test('custom error on timeout', async ({ recurse, apiRequest }) => { { timeout: 10000, error: 'System failed to become ready within 10 seconds - check background workers', - }, + } ); } catch (error) { // Error message includes custom context @@ -125,13 +189,6 @@ test('custom error on timeout', async ({ recurse, apiRequest }) => { }); ``` -**Key Points**: - -- `error` option provides custom message -- Replaces default "Timed out after X ms" -- Include debugging hints in error message -- Helps diagnose failures faster - ### Example 4: Post-Polling Callback **Context**: Process or log results after successful polling. @@ -151,7 +208,7 @@ test('post-poll processing', async ({ recurse, apiRequest }) => { console.log(`Processed ${result.body.itemsProcessed} items`); return result.body; }, - }, + } ); expect(finalResult.itemsProcessed).toBeGreaterThan(0); @@ -165,7 +222,67 @@ test('post-poll processing', async ({ recurse, apiRequest }) => { - Can transform or log results - Return value becomes final `recurse` result -### Example 5: Integration with API Request (Common Pattern) +### Example 5: UI Testing Scenarios + +**Context**: Wait for UI elements to reach a specific state through polling. + +**Implementation**: + +```typescript +test('table data loads', async ({ page, recurse }) => { + await page.goto('/reports'); + + // Poll for table rows to appear + await recurse( + async () => page.locator('table tbody tr').count(), + (count) => count >= 10, // Wait for at least 10 rows + { + timeout: 15000, + interval: 500, + log: 'Waiting for table data to load', + } + ); + + // Now safe to interact with table + await page.locator('table tbody tr').first().click(); +}); +``` + +### Example 6: Event-Based Systems (Kafka/Message Queues) + +**Context**: Testing eventual consistency with message queue processing. + +**Implementation**: + +```typescript +test('kafka event processed', async ({ recurse, apiRequest }) => { + // Trigger action that publishes Kafka event + await apiRequest({ + method: 'POST', + path: '/api/orders', + body: { productId: 'ABC123', quantity: 2 }, + }); + + // Poll for downstream effect of Kafka consumer processing + const inventoryResult = await recurse( + () => apiRequest({ method: 'GET', path: '/api/inventory/ABC123' }), + (res) => { + // Assumes test fixture seeds inventory at 100; in production tests, + // fetch baseline first and assert: expect(res.body.available).toBe(baseline - 2) + expect(res.body.available).toBeLessThanOrEqual(98); + }, + { + timeout: 30000, // Kafka processing may take time + interval: 1000, + log: 'Waiting for Kafka event to be processed', + } + ); + + expect(inventoryResult.body.lastOrderId).toBeDefined(); +}); +``` + +### Example 7: Integration with API Request (Common Pattern) **Context**: Most common use case - polling API endpoints for state changes. @@ -193,7 +310,7 @@ test('end-to-end polling', async ({ apiRequest, recurse }) => { timeout: 120000, // 2 minutes for large imports interval: 5000, // Check every 5 seconds log: `Polling import ${createResp.importId}`, - }, + } ); expect(importResult.body.rowsImported).toBeGreaterThan(1000); @@ -208,20 +325,26 @@ test('end-to-end polling', async ({ apiRequest, recurse }) => { - Complex predicates with multiple conditions - Logging shows polling progress in test reports -## Enhanced Error Types +## API Reference -The utility categorizes errors for easier debugging: +### RecurseOptions -```typescript -// TimeoutError - Predicate never returned true -Error: Polling timed out after 30000ms: Job never completed +| Option | Type | Default | Description | +| ---------- | ------------------ | ----------- | ------------------------------------ | +| `timeout` | `number` | `30000` | Maximum time to wait (ms) | +| `interval` | `number` | `1000` | Time between polls (ms) | +| `log` | `string` | `undefined` | Message logged on each poll | +| `error` | `string` | `undefined` | Custom error message for timeout | +| `post` | `(result: T) => R` | `undefined` | Callback after successful poll | +| `delay` | `number` | `0` | Initial delay before first poll (ms) | -// CommandError - Command function threw -Error: Command failed: Request failed with status 500 +### Error Types -// PredicateError - Predicate function threw (not from assertions) -Error: Predicate failed: Cannot read property 'status' of undefined -``` +| Error Type | When Thrown | Properties | +| ----------------------- | --------------------------------------- | ---------------------------------------- | +| `RecurseTimeoutError` | Predicate never passed within timeout | `lastCommandValue`, `lastPredicateError` | +| `RecurseCommandError` | Command function threw an error | `cause` (original error) | +| `RecursePredicateError` | Predicate threw (not assertion failure) | `cause` (original error) | ## Comparison with Vanilla Playwright @@ -236,11 +359,11 @@ Error: Predicate failed: Cannot read property 'status' of undefined **Use recurse for:** -- ✅ Background job completion -- ✅ Webhook/event processing -- ✅ Database eventual consistency -- ✅ Cache propagation -- ✅ State machine transitions +- Background job completion +- Webhook/event processing +- Database eventual consistency +- Cache propagation +- State machine transitions **Stick with vanilla expect.poll for:** @@ -250,13 +373,15 @@ Error: Predicate failed: Cannot read property 'status' of undefined ## Related Fragments +- `api-testing-patterns.md` - Comprehensive pure API testing patterns - `api-request.md` - Combine for API endpoint polling - `overview.md` - Fixture composition patterns - `fixtures-composition.md` - Using with mergeTests +- `contract-testing.md` - Contract testing with async verification ## Anti-Patterns -**❌ Using hard waits instead of polling:** +**DON'T use hard waits instead of polling:** ```typescript await page.click('#export'); @@ -264,33 +389,33 @@ await page.waitForTimeout(5000); // Arbitrary wait expect(await page.textContent('#status')).toBe('Ready'); ``` -**✅ Poll for actual condition:** +**DO poll for actual condition:** ```typescript await page.click('#export'); await recurse( () => page.textContent('#status'), (status) => status === 'Ready', - { timeout: 10000 }, + { timeout: 10000 } ); ``` -**❌ Polling too frequently:** +**DON'T poll too frequently:** ```typescript await recurse( () => apiRequest({ method: 'GET', path: '/status' }), (res) => res.body.ready, - { interval: 100 }, // Hammers API every 100ms! + { interval: 100 } // Hammers API every 100ms! ); ``` -**✅ Reasonable interval for API calls:** +**DO use reasonable interval for API calls:** ```typescript await recurse( () => apiRequest({ method: 'GET', path: '/status' }), (res) => res.body.ready, - { interval: 2000 }, // Check every 2 seconds (reasonable) + { interval: 2000 } // Check every 2 seconds (reasonable) ); ``` diff --git a/src/modules/bmm/testarch/tea-index.csv b/src/modules/bmm/testarch/tea-index.csv index cf1efd67..4546d351 100644 --- a/src/modules/bmm/testarch/tea-index.csv +++ b/src/modules/bmm/testarch/tea-index.csv @@ -1,33 +1,34 @@ id,name,description,tags,fragment_file fixture-architecture,Fixture Architecture,"Composable fixture patterns (pure function → fixture → merge) and reuse rules","fixtures,architecture,playwright,cypress",knowledge/fixture-architecture.md -network-first,Network-First Safeguards,"Intercept-before-navigate workflow, HAR capture, deterministic waits, edge mocking","network,stability,playwright,cypress",knowledge/network-first.md -data-factories,Data Factories and API Setup,"Factories with overrides, API seeding, cleanup discipline","data,factories,setup,api",knowledge/data-factories.md +network-first,Network-First Safeguards,"Intercept-before-navigate workflow, HAR capture, deterministic waits, edge mocking","network,stability,playwright,cypress,ui",knowledge/network-first.md +data-factories,Data Factories and API Setup,"Factories with overrides, API seeding, cleanup discipline","data,factories,setup,api,backend,seeding",knowledge/data-factories.md component-tdd,Component TDD Loop,"Red→green→refactor workflow, provider isolation, accessibility assertions","component-testing,tdd,ui",knowledge/component-tdd.md playwright-config,Playwright Config Guardrails,"Environment switching, timeout standards, artifact outputs","playwright,config,env",knowledge/playwright-config.md ci-burn-in,CI and Burn-In Strategy,"Staged jobs, shard orchestration, burn-in loops, artifact policy","ci,automation,flakiness",knowledge/ci-burn-in.md selective-testing,Selective Test Execution,"Tag/grep usage, spec filters, diff-based runs, promotion rules","risk-based,selection,strategy",knowledge/selective-testing.md feature-flags,Feature Flag Governance,"Enum management, targeting helpers, cleanup, release checklists","feature-flags,governance,launchdarkly",knowledge/feature-flags.md -contract-testing,Contract Testing Essentials,"Pact publishing, provider verification, resilience coverage","contract-testing,pact,api",knowledge/contract-testing.md +contract-testing,Contract Testing Essentials,"Pact publishing, provider verification, resilience coverage","contract-testing,pact,api,backend,microservices,service-contract",knowledge/contract-testing.md email-auth,Email Authentication Testing,"Magic link extraction, state preservation, caching, negative flows","email-authentication,security,workflow",knowledge/email-auth.md -error-handling,Error Handling Checks,"Scoped exception handling, retry validation, telemetry logging","resilience,error-handling,stability",knowledge/error-handling.md -visual-debugging,Visual Debugging Toolkit,"Trace viewer usage, artifact expectations, accessibility integration","debugging,dx,tooling",knowledge/visual-debugging.md +error-handling,Error Handling Checks,"Scoped exception handling, retry validation, telemetry logging","resilience,error-handling,stability,api,backend",knowledge/error-handling.md +visual-debugging,Visual Debugging Toolkit,"Trace viewer usage, artifact expectations, accessibility integration","debugging,dx,tooling,ui",knowledge/visual-debugging.md risk-governance,Risk Governance,"Scoring matrix, category ownership, gate decision rules","risk,governance,gates",knowledge/risk-governance.md probability-impact,Probability and Impact Scale,"Shared definitions for scoring matrix and gate thresholds","risk,scoring,scale",knowledge/probability-impact.md test-quality,Test Quality Definition of Done,"Execution limits, isolation rules, green criteria","quality,definition-of-done,tests",knowledge/test-quality.md nfr-criteria,NFR Review Criteria,"Security, performance, reliability, maintainability status definitions","nfr,assessment,quality",knowledge/nfr-criteria.md -test-levels,Test Levels Framework,"Guidelines for choosing unit, integration, or end-to-end coverage","testing,levels,selection",knowledge/test-levels-framework.md +test-levels,Test Levels Framework,"Guidelines for choosing unit, integration, or end-to-end coverage","testing,levels,selection,api,backend,ui",knowledge/test-levels-framework.md test-priorities,Test Priorities Matrix,"P0–P3 criteria, coverage targets, execution ordering","testing,prioritization,risk",knowledge/test-priorities-matrix.md test-healing-patterns,Test Healing Patterns,"Common failure patterns and automated fixes","healing,debugging,patterns",knowledge/test-healing-patterns.md -selector-resilience,Selector Resilience,"Robust selector strategies and debugging techniques","selectors,locators,debugging",knowledge/selector-resilience.md +selector-resilience,Selector Resilience,"Robust selector strategies and debugging techniques","selectors,locators,debugging,ui",knowledge/selector-resilience.md timing-debugging,Timing Debugging,"Race condition identification and deterministic wait fixes","timing,async,debugging",knowledge/timing-debugging.md -overview,Playwright Utils Overview,"Installation, design principles, fixture patterns","playwright-utils,fixtures",knowledge/overview.md -api-request,API Request,"Typed HTTP client, schema validation","api,playwright-utils",knowledge/api-request.md -network-recorder,Network Recorder,"HAR record/playback, CRUD detection","network,playwright-utils",knowledge/network-recorder.md -auth-session,Auth Session,"Token persistence, multi-user","auth,playwright-utils",knowledge/auth-session.md -intercept-network-call,Intercept Network Call,"Network spy/stub, JSON parsing","network,playwright-utils",knowledge/intercept-network-call.md -recurse,Recurse Polling,"Async polling, condition waiting","polling,playwright-utils",knowledge/recurse.md -log,Log Utility,"Report logging, structured output","logging,playwright-utils",knowledge/log.md -file-utils,File Utilities,"CSV/XLSX/PDF/ZIP validation","files,playwright-utils",knowledge/file-utils.md -burn-in,Burn-in Runner,"Smart test selection, git diff","ci,playwright-utils",knowledge/burn-in.md -network-error-monitor,Network Error Monitor,"HTTP 4xx/5xx detection","monitoring,playwright-utils",knowledge/network-error-monitor.md -fixtures-composition,Fixtures Composition,"mergeTests composition patterns","fixtures,playwright-utils",knowledge/fixtures-composition.md +overview,Playwright Utils Overview,"Installation, design principles, fixture patterns for API and UI testing","playwright-utils,fixtures,api,backend,ui",knowledge/overview.md +api-request,API Request,"Typed HTTP client, schema validation, retry logic for API and service testing","api,backend,service-testing,api-testing,playwright-utils",knowledge/api-request.md +network-recorder,Network Recorder,"HAR record/playback, CRUD detection for offline UI testing","network,playwright-utils,ui,har",knowledge/network-recorder.md +auth-session,Auth Session,"Token persistence, multi-user, API and browser authentication","auth,playwright-utils,api,backend,jwt,token",knowledge/auth-session.md +intercept-network-call,Intercept Network Call,"Network spy/stub, JSON parsing for UI tests","network,playwright-utils,ui",knowledge/intercept-network-call.md +recurse,Recurse Polling,"Async polling for API responses, background jobs, eventual consistency","polling,playwright-utils,api,backend,async,eventual-consistency",knowledge/recurse.md +log,Log Utility,"Report logging, structured output for API and UI tests","logging,playwright-utils,api,ui",knowledge/log.md +file-utils,File Utilities,"CSV/XLSX/PDF/ZIP validation for API exports and UI downloads","files,playwright-utils,api,backend,ui",knowledge/file-utils.md +burn-in,Burn-in Runner,"Smart test selection, git diff for CI optimization","ci,playwright-utils",knowledge/burn-in.md +network-error-monitor,Network Error Monitor,"HTTP 4xx/5xx detection for UI tests","monitoring,playwright-utils,ui",knowledge/network-error-monitor.md +fixtures-composition,Fixtures Composition,"mergeTests composition patterns for combining utilities","fixtures,playwright-utils",knowledge/fixtures-composition.md +api-testing-patterns,API Testing Patterns,"Pure API test patterns without browser: service testing, microservices, GraphQL","api,backend,service-testing,api-testing,microservices,graphql,no-browser",knowledge/api-testing-patterns.md From c18904d6740529036135b773103a365e7e53b5c7 Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Fri, 9 Jan 2026 19:33:00 -0800 Subject: [PATCH 04/22] refactor: rename create-tech-spec to quick-spec for QuickFlow branding (#1290) --- docs/explanation/agents/barry-quick-flow.md | 10 +++++----- docs/explanation/core-concepts/agent-roles.md | 2 +- docs/explanation/features/quick-flow.md | 2 +- docs/explanation/game-dev/agents.md | 2 +- docs/how-to/get-answers-about-bmad.md | 2 +- docs/how-to/workflows/bmgd-quick-flow.md | 2 +- .../workflows/{create-tech-spec.md => quick-spec.md} | 6 +++--- docs/reference/agents/index.md | 2 +- src/modules/bmgd/agents/game-solo-dev.agent.yaml | 2 +- .../{create-tech-spec => quick-spec}/instructions.md | 0 .../{create-tech-spec => quick-spec}/workflow.yaml | 4 ++-- .../workflow-status/paths/quickflow-brownfield.yaml | 4 ++-- src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml | 2 +- .../quick-dev/steps/step-01-mode-detection.md | 6 +++--- .../workflows/bmad-quick-flow/quick-dev/workflow.md | 2 +- .../steps/step-01-understand.md | 2 +- .../steps/step-02-investigate.md | 2 +- .../steps/step-03-generate.md | 2 +- .../steps/step-04-review.md | 2 +- .../tech-spec-template.md | 0 .../{create-tech-spec => quick-spec}/workflow.md | 4 ++-- 21 files changed, 30 insertions(+), 30 deletions(-) rename docs/how-to/workflows/{create-tech-spec.md => quick-spec.md} (98%) rename src/modules/bmgd/workflows/bmgd-quick-flow/{create-tech-spec => quick-spec}/instructions.md (100%) rename src/modules/bmgd/workflows/bmgd-quick-flow/{create-tech-spec => quick-spec}/workflow.yaml (96%) rename src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec => quick-spec}/steps/step-01-understand.md (99%) rename src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec => quick-spec}/steps/step-02-investigate.md (99%) rename src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec => quick-spec}/steps/step-03-generate.md (99%) rename src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec => quick-spec}/steps/step-04-review.md (99%) rename src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec => quick-spec}/tech-spec-template.md (100%) rename src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec => quick-spec}/workflow.md (98%) diff --git a/docs/explanation/agents/barry-quick-flow.md b/docs/explanation/agents/barry-quick-flow.md index 11ffd0ea..5338d7fe 100644 --- a/docs/explanation/agents/barry-quick-flow.md +++ b/docs/explanation/agents/barry-quick-flow.md @@ -37,9 +37,9 @@ Barry is the elite solo developer who lives and breathes the BMad Quick Flow wor Barry owns the entire BMad Quick Flow path, providing a streamlined 3-step development process that eliminates handoffs and maximizes velocity. -### 1. **create-tech-spec** +### 1. **quick-spec** -- **Workflow:** `_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml` +- **Workflow:** `_bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md` - **Description:** Architect a technical spec with implementation-ready stories - **Use when:** You need to transform requirements into a buildable spec @@ -89,7 +89,7 @@ Barry orchestrates a simple, efficient 3-step process: ```mermaid flowchart LR - A[Requirements] --> B[create-tech-spec] + A[Requirements] --> B[quick-spec] B --> C[Tech Spec] C --> D[quick-dev] D --> E[Implementation] @@ -107,7 +107,7 @@ flowchart LR style H fill:#e0f2f1 ``` -### Step 1: Technical Specification (`create-tech-spec`) +### Step 1: Technical Specification (`quick-spec`) **Goal:** Transform user requirements into implementation-ready technical specifications @@ -237,7 +237,7 @@ In party mode, Barry often acts as: /bmad:bmm:agents:quick-flow-solo-dev # Create a tech spec -> create-tech-spec +> quick-spec # Quick implementation > quick-dev tech-spec-auth.md diff --git a/docs/explanation/core-concepts/agent-roles.md b/docs/explanation/core-concepts/agent-roles.md index f9717ac4..4a9ada9d 100644 --- a/docs/explanation/core-concepts/agent-roles.md +++ b/docs/explanation/core-concepts/agent-roles.md @@ -173,7 +173,7 @@ Fast solo development without handoffs. - Code review **Key Workflows:** -- `*create-tech-spec` +- `*quick-spec` - `*quick-dev` - `*code-review` diff --git a/docs/explanation/features/quick-flow.md b/docs/explanation/features/quick-flow.md index 23ca08cc..85791e85 100644 --- a/docs/explanation/features/quick-flow.md +++ b/docs/explanation/features/quick-flow.md @@ -164,6 +164,6 @@ Start with Quick Flow, but switch to BMad Method when: ## Related -- [Create Tech Spec](/docs/how-to/workflows/create-tech-spec.md) - How to use Quick Flow +- [Quick Spec](/docs/how-to/workflows/quick-spec.md) - How to use Quick Flow - [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started - [Four Phases](/docs/explanation/architecture/four-phases.md) - Understanding the full methodology diff --git a/docs/explanation/game-dev/agents.md b/docs/explanation/game-dev/agents.md index 1c429683..0fab3f4c 100644 --- a/docs/explanation/game-dev/agents.md +++ b/docs/explanation/game-dev/agents.md @@ -303,7 +303,7 @@ Direct, confident, and gameplay-focused. Uses dev slang, thinks in game feel and | ------------------ | ------------------------------------------------------ | | `quick-prototype` | Rapid prototype to test if a mechanic is fun | | `quick-dev` | Implement features end-to-end with game considerations | -| `create-tech-spec` | Create implementation-ready technical spec | +| `quick-spec` | Create implementation-ready technical spec | | `code-review` | Review code quality | | `test-framework` | Set up automated testing | | `party-mode` | Bring in specialists when needed | diff --git a/docs/how-to/get-answers-about-bmad.md b/docs/how-to/get-answers-about-bmad.md index 3f5cf880..9933404d 100644 --- a/docs/how-to/get-answers-about-bmad.md +++ b/docs/how-to/get-answers-about-bmad.md @@ -10,7 +10,7 @@ Point an LLM at BMad's source files and ask your question. That's the technique :::note[Example] **Q:** "Tell me the fastest way to build something with BMad" -**A:** Use Quick Flow: Run `create-tech-spec` to write a technical specification, then `quick-dev` to implement it—skipping the full planning phases. This gets small features shipped in a single focused session instead of going through the full 4-phase BMM workflow. +**A:** Use Quick Flow: Run `quick-spec` to write a technical specification, then `quick-dev` to implement it—skipping the full planning phases. This gets small features shipped in a single focused session instead of going through the full 4-phase BMM workflow. ::: ## Why This Works diff --git a/docs/how-to/workflows/bmgd-quick-flow.md b/docs/how-to/workflows/bmgd-quick-flow.md index 61dad971..39bf52a3 100644 --- a/docs/how-to/workflows/bmgd-quick-flow.md +++ b/docs/how-to/workflows/bmgd-quick-flow.md @@ -17,7 +17,7 @@ The Game Solo Dev agent includes: - `quick-prototype` - Rapid mechanic testing - `quick-dev` - Flexible feature implementation -- `create-tech-spec` - Create implementation-ready specs +- `quick-spec` - Create implementation-ready specs - `code-review` - Quality checks - `test-framework` - Automated testing setup diff --git a/docs/how-to/workflows/create-tech-spec.md b/docs/how-to/workflows/quick-spec.md similarity index 98% rename from docs/how-to/workflows/create-tech-spec.md rename to docs/how-to/workflows/quick-spec.md index a7ffefb6..d2a0915e 100644 --- a/docs/how-to/workflows/create-tech-spec.md +++ b/docs/how-to/workflows/quick-spec.md @@ -1,6 +1,6 @@ --- -title: "How to Create a Tech Spec" -description: How to create a technical specification using Quick Spec Flow +title: "How to Use Quick Spec" +description: How to create a technical specification using Quick Spec workflow --- @@ -35,7 +35,7 @@ Start a fresh chat and load the PM agent (or Quick Flow Solo Dev agent). ### 2. Run the Tech Spec Workflow ``` -*create-tech-spec +*quick-spec ``` Or simply describe what you want to build: diff --git a/docs/reference/agents/index.md b/docs/reference/agents/index.md index 1077f385..0595c74a 100644 --- a/docs/reference/agents/index.md +++ b/docs/reference/agents/index.md @@ -75,7 +75,7 @@ Story implementation and code review. Fast solo development without handoffs. **Commands:** -- `*create-tech-spec` - Architect technical spec with implementation-ready stories +- `*quick-spec` - Architect technical spec with implementation-ready stories - `*quick-dev` - Implement tech spec end-to-end solo - `*code-review` - Review and improve code diff --git a/src/modules/bmgd/agents/game-solo-dev.agent.yaml b/src/modules/bmgd/agents/game-solo-dev.agent.yaml index b7bd79ae..42df4c9f 100644 --- a/src/modules/bmgd/agents/game-solo-dev.agent.yaml +++ b/src/modules/bmgd/agents/game-solo-dev.agent.yaml @@ -36,7 +36,7 @@ agent: description: "[QD] Implement features end-to-end solo with game-specific considerations" - trigger: TS or fuzzy match on tech-spec - workflow: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml" + workflow: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/quick-spec/workflow.yaml" description: "[TS] Architect a technical spec with implementation-ready stories" - trigger: CR or fuzzy match on code-review diff --git a/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/instructions.md b/src/modules/bmgd/workflows/bmgd-quick-flow/quick-spec/instructions.md similarity index 100% rename from src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/instructions.md rename to src/modules/bmgd/workflows/bmgd-quick-flow/quick-spec/instructions.md diff --git a/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml b/src/modules/bmgd/workflows/bmgd-quick-flow/quick-spec/workflow.yaml similarity index 96% rename from src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml rename to src/modules/bmgd/workflows/bmgd-quick-flow/quick-spec/workflow.yaml index b1b92a6a..81f8673e 100644 --- a/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml +++ b/src/modules/bmgd/workflows/bmgd-quick-flow/quick-spec/workflow.yaml @@ -1,5 +1,5 @@ # Quick-Flow: Create Tech-Spec (Game Development) -name: create-tech-spec +name: quick-spec description: "Conversational spec engineering for games - ask questions, investigate code, produce implementation-ready tech-spec." author: "BMad" @@ -14,7 +14,7 @@ user_skill_level: "{config_source}:game_dev_experience" date: system-generated # Workflow components -installed_path: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/create-tech-spec" +installed_path: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/quick-spec" instructions: "{installed_path}/instructions.md" # Related workflows diff --git a/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml b/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml index 6055fcc9..8f01b763 100644 --- a/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml +++ b/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml @@ -11,10 +11,10 @@ phases: name: "Planning" required: true workflows: - - id: "create-tech-spec" + - id: "quick-spec" required: true agent: "game-solo-dev" - command: "create-tech-spec" + command: "quick-spec" output: "Technical specification" note: "Define changes for existing codebase" diff --git a/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml b/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml index b377dfaf..00596ff5 100644 --- a/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +++ b/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml @@ -20,7 +20,7 @@ agent: menu: - trigger: TS or fuzzy match on tech-spec - exec: "{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.md" + exec: "{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md" description: "[TS] Architect a technical spec with implementation-ready stories (Required first step)" - trigger: QD or fuzzy match on quick-dev diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md index 2f8d2623..40b2fafa 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md @@ -95,7 +95,7 @@ Present choice: **[e] Execute directly** - Start now ``` -- **[t]:** Direct user to `{create_tech_spec_workflow}`. **EXIT Quick Dev.** +- **[t]:** Direct user to `{quick_spec_workflow}`. **EXIT Quick Dev.** - **[e]:** Ask for any additional guidance, then **NEXT:** Load `step-02-context-gathering.md` ### Escalation Triggered - Level 0-2 @@ -108,7 +108,7 @@ This looks like a focused feature with multiple components. **[e] Execute directly** ``` -- **[t]:** Direct to `{create_tech_spec_workflow}`. **EXIT Quick Dev.** +- **[t]:** Direct to `{quick_spec_workflow}`. **EXIT Quick Dev.** - **[w]:** Direct to `{workflow_init}`. **EXIT Quick Dev.** - **[e]:** Ask for guidance, then **NEXT:** Load `step-02-context-gathering.md` @@ -123,7 +123,7 @@ This sounds like platform/system work. ``` - **[w]:** Direct to `{workflow_init}`. **EXIT Quick Dev.** -- **[t]:** Direct to `{create_tech_spec_workflow}`. **EXIT Quick Dev.** +- **[t]:** Direct to `{quick_spec_workflow}`. **EXIT Quick Dev.** - **[e]:** Ask for guidance, then **NEXT:** Load `step-02-context-gathering.md` --- diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md index 8f33d9cc..1c1d3038 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md @@ -40,7 +40,7 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: ### Related Workflows -- `create_tech_spec_workflow` = `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml` +- `quick_spec_workflow` = `{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md` - `workflow_init` = `{project-root}/_bmad/bmm/workflows/workflow-status/init/workflow.yaml` - `party_mode_exec` = `{project-root}/_bmad/core/workflows/party-mode/workflow.md` - `advanced_elicitation` = `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` diff --git a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-01-understand.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md similarity index 99% rename from src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-01-understand.md rename to src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md index 6bff0dca..1e5e3f79 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-01-understand.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md @@ -2,7 +2,7 @@ name: 'step-01-understand' description: 'Analyze the requirement delta between current state and what user wants to build' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' nextStepFile: '{workflow_path}/steps/step-02-investigate.md' skipToStepFile: '{workflow_path}/steps/step-03-generate.md' templateFile: '{workflow_path}/tech-spec-template.md' diff --git a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-02-investigate.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md similarity index 99% rename from src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-02-investigate.md rename to src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md index b62f6bfe..3dae5e61 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-02-investigate.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md @@ -2,7 +2,7 @@ name: 'step-02-investigate' description: 'Map technical constraints and anchor points within the codebase' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' nextStepFile: '{workflow_path}/steps/step-03-generate.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- diff --git a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-03-generate.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md similarity index 99% rename from src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-03-generate.md rename to src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md index 999951fd..b731e566 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-03-generate.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md @@ -2,7 +2,7 @@ name: 'step-03-generate' description: 'Build the implementation plan based on the technical mapping of constraints' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' nextStepFile: '{workflow_path}/steps/step-04-review.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- diff --git a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-04-review.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md similarity index 99% rename from src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-04-review.md rename to src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md index 89d7333f..a8466de4 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/steps/step-04-review.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md @@ -2,7 +2,7 @@ name: 'step-04-review' description: 'Review and finalize the tech-spec' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- diff --git a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/tech-spec-template.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md similarity index 100% rename from src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/tech-spec-template.md rename to src/modules/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md diff --git a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md similarity index 98% rename from src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.md rename to src/modules/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md index 00ca0e47..dcda8a91 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md @@ -1,5 +1,5 @@ --- -name: create-tech-spec +name: quick-spec description: Conversational spec engineering - ask questions, investigate code, produce implementation-ready tech-spec. main_config: '{project-root}/_bmad/bmm/config.yaml' web_bundle: true @@ -10,7 +10,7 @@ party_mode_exec: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' quick_dev_workflow: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md' --- -# Create Tech-Spec Workflow +# Quick-Spec Workflow **Goal:** Create implementation-ready technical specifications through conversational discovery, code investigation, and structured documentation. From 2f98f9130a79330683c507c326b372ada991b93e Mon Sep 17 00:00:00 2001 From: Murat K Ozcan <34237651+muratkeremozcan@users.noreply.github.com> Date: Sat, 10 Jan 2026 19:23:25 -0600 Subject: [PATCH 05/22] docs: add TEA design philosophy callout and context engineering glossary entry (#1303) --- docs/explanation/features/tea-overview.md | 4 + .../philosophy/testing-as-engineering.md | 119 ++++++++++++++++++ docs/reference/glossary/index.md | 4 + 3 files changed, 127 insertions(+) create mode 100644 docs/explanation/philosophy/testing-as-engineering.md diff --git a/docs/explanation/features/tea-overview.md b/docs/explanation/features/tea-overview.md index cacd25e3..6e9a7127 100644 --- a/docs/explanation/features/tea-overview.md +++ b/docs/explanation/features/tea-overview.md @@ -6,6 +6,10 @@ description: Understanding the Test Architect (TEA) agent and its role in BMad M The Test Architect (TEA) is a specialized agent focused on quality strategy, test automation, and release gates in BMad Method projects. +:::tip[Design Philosophy] +TEA was built to solve AI-generated tests that rot in review. For the problem statement and design principles, see [Testing as Engineering](/docs/explanation/philosophy/testing-as-engineering.md). For setup, see [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md). +::: + ## Overview - **Persona:** Murat, Master Test Architect and Quality Advisor focused on risk-based testing, fixture architecture, ATDD, and CI/CD governance. diff --git a/docs/explanation/philosophy/testing-as-engineering.md b/docs/explanation/philosophy/testing-as-engineering.md new file mode 100644 index 00000000..bb270ad6 --- /dev/null +++ b/docs/explanation/philosophy/testing-as-engineering.md @@ -0,0 +1,119 @@ +--- +title: "AI-Generated Testing: Why Most Approaches Fail" +description: How Playwright-Utils, TEA workflows, and Playwright MCPs solve AI test quality problems +--- + + +AI-generated tests frequently fail in production because they lack systematic quality standards. This document explains the problem and presents a solution combining three components: Playwright-Utils, TEA (Test Architect), and Playwright MCPs. + +:::note[Source] +This article is adapted from [The Testing Meta Most Teams Have Not Caught Up To Yet](https://dev.to/muratkeremozcan/the-testing-meta-most-teams-have-not-caught-up-to-yet-5765) by Murat K Ozcan. +::: + +## The Problem with AI-Generated Tests + +When teams use AI to generate tests without structure, they often produce what can be called "slop factory" outputs: + +| Issue | Description | +|-------|-------------| +| Redundant coverage | Multiple tests covering the same functionality | +| Incorrect assertions | Tests that pass but don't actually verify behavior | +| Flaky tests | Non-deterministic tests that randomly pass or fail | +| Unreviewable diffs | Generated code too verbose or inconsistent to review | + +The core problem is that prompt-driven testing paths lean into nondeterminism, which is the exact opposite of what testing exists to protect. + +:::caution[The Paradox] +AI excels at generating code quickly, but testing requires precision and consistency. Without guardrails, AI-generated tests amplify the chaos they're meant to prevent. +::: + +## The Solution: A Three-Part Stack + +The solution combines three components that work together to enforce quality: + +### Playwright-Utils + +Bridges the gap between Cypress ergonomics and Playwright's capabilities by standardizing commonly reinvented primitives through utility functions. + +| Utility | Purpose | +|---------|---------| +| api-request | API calls with schema validation | +| auth-session | Authentication handling | +| intercept-network-call | Network mocking and interception | +| recurse | Retry logic and polling | +| log | Structured logging | +| network-recorder | Record and replay network traffic | +| burn-in | Smart test selection for CI | +| network-error-monitor | HTTP error detection | +| file-utils | CSV/PDF handling | + +These utilities eliminate the need to reinvent authentication, API calls, retries, and logging for every project. + +### TEA (Test Architect Agent) + +A quality operating model packaged as eight executable workflows spanning test design, CI/CD gates, and release readiness. TEA encodes test architecture expertise into repeatable processes. + +| Workflow | Purpose | +|----------|---------| +| `*test-design` | Risk-based test planning per epic | +| `*framework` | Scaffold production-ready test infrastructure | +| `*ci` | CI pipeline with selective testing | +| `*atdd` | Acceptance test-driven development | +| `*automate` | Prioritized test automation | +| `*test-review` | Test quality audits (0-100 score) | +| `*nfr-assess` | Non-functional requirements assessment | +| `*trace` | Coverage traceability and gate decisions | + +:::tip[Key Insight] +TEA doesn't just generate tests—it provides a complete quality operating model with workflows for planning, execution, and release gates. +::: + +### Playwright MCPs + +Model Context Protocols enable real-time verification during test generation. Instead of inferring selectors and behavior from documentation, MCPs allow agents to: + +- Run flows and confirm the DOM against the accessibility tree +- Validate network responses in real-time +- Discover actual functionality through interactive exploration +- Verify generated tests against live applications + +## How They Work Together + +The three components form a quality pipeline: + +| Stage | Component | Action | +|-------|-----------|--------| +| Standards | Playwright-Utils | Provides production-ready patterns and utilities | +| Process | TEA Workflows | Enforces systematic test planning and review | +| Verification | Playwright MCPs | Validates generated tests against live applications | + +**Before (AI-only):** 20 tests with redundant coverage, incorrect assertions, and flaky behavior. + +**After (Full Stack):** Risk-based selection, verified selectors, validated behavior, reviewable code. + +## Why This Matters + +Traditional AI testing approaches fail because they: + +- **Lack quality standards** — No consistent patterns or utilities +- **Skip planning** — Jump straight to test generation without risk assessment +- **Can't verify** — Generate tests without validating against actual behavior +- **Don't review** — No systematic audit of generated test quality + +The three-part stack addresses each gap: + +| Gap | Solution | +|-----|----------| +| No standards | Playwright-Utils provides production-ready patterns | +| No planning | TEA `*test-design` workflow creates risk-based test plans | +| No verification | Playwright MCPs validate against live applications | +| No review | TEA `*test-review` audits quality with scoring | + +This approach is sometimes called *context engineering*—loading domain-specific standards into AI context automatically rather than relying on prompts alone. TEA's `tea-index.csv` manifest loads relevant knowledge fragments so the AI doesn't relearn testing patterns each session. + +## Related + +- [TEA Overview](/docs/explanation/features/tea-overview.md) — Workflow details and cheat sheets +- [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md) — Implementation guide +- [The Testing Meta Most Teams Have Not Caught Up To Yet](https://dev.to/muratkeremozcan/the-testing-meta-most-teams-have-not-caught-up-to-yet-5765) — Original article by Murat K Ozcan +- [Playwright-Utils Repository](https://github.com/seontechnologies/playwright-utils) — Source and documentation diff --git a/docs/reference/glossary/index.md b/docs/reference/glossary/index.md index 9a42ce39..cd998551 100644 --- a/docs/reference/glossary/index.md +++ b/docs/reference/glossary/index.md @@ -363,6 +363,10 @@ Implementation technique for brownfield projects that allows gradual rollout of Specific locations where new code connects with existing systems. Must be documented explicitly in brownfield tech-specs and architectures. +### Context Engineering + +Loading domain-specific standards and patterns into AI context automatically, rather than relying on prompts alone. In TEA, this means the `tea-index.csv` manifest loads relevant knowledge fragments so the AI doesn't relearn testing patterns each session. This approach ensures consistent, production-ready outputs regardless of prompt variation. + ### Convention Detection Quick Spec Flow feature that automatically detects existing code style, naming conventions, patterns, and frameworks from brownfield codebases, then asks user to confirm before proceeding. From c3b7e982412b93b03f5481e1b14825c255f39673 Mon Sep 17 00:00:00 2001 From: Brian Date: Sun, 11 Jan 2026 11:13:38 +0800 Subject: [PATCH 06/22] Workflow Creator and Validator Tools with Sub Process Support and PRD Validation Step now available! * critical file issues in prd refactor resolved caught using the BMB workflow validator!! * subprocess optimization and path violation checks in the workflow validator, along with fixes to the BMM PRD workflow * standardize workflow and PRD step markdown formatting - Improve consistency across workflow validation steps - Standardize PRD innovation step structure * Workflow Validation Max Parallel Mode POC * prd trimodal compliant * correct PRD completion suggested next steps --- .../quiz-master/steps/step-01-init.md | 6 +- .../workflows/quiz-master/steps/step-02-q1.md | 6 +- .../workflows/quiz-master/steps/step-03-q2.md | 6 +- .../workflows/quiz-master/steps/step-04-q3.md | 6 +- .../workflows/quiz-master/steps/step-05-q4.md | 6 +- .../workflows/quiz-master/steps/step-06-q5.md | 6 +- .../workflows/quiz-master/steps/step-07-q6.md | 6 +- .../workflows/quiz-master/steps/step-08-q7.md | 6 +- .../workflows/quiz-master/steps/step-09-q8.md | 6 +- .../workflows/quiz-master/steps/step-10-q9.md | 6 +- .../quiz-master/steps/step-11-q10.md | 6 +- .../quiz-master/steps/step-12-results.md | 4 +- .../workflows/quiz-master/workflow.md | 2 +- .../bmb/agents/workflow-builder.agent.yaml | 4 + src/modules/bmb/reference/readme.md | 3 - .../data/dietary-restrictions.csv | 18 - .../data/macro-calculator.csv | 16 - .../data/recipe-database.csv | 28 -- .../meal-prep-nutrition/steps/step-01-init.md | 177 ------- .../steps/step-01b-continue.md | 121 ----- .../steps/step-02-profile.md | 165 ------- .../steps/step-03-assessment.md | 154 ------- .../steps/step-04-strategy.md | 183 -------- .../steps/step-05-shopping.md | 168 ------- .../steps/step-06-prep-schedule.md | 195 -------- .../templates/assessment-section.md | 25 - .../templates/nutrition-plan.md | 68 --- .../templates/prep-schedule-section.md | 29 -- .../templates/profile-section.md | 47 -- .../templates/shopping-section.md | 37 -- .../templates/strategy-section.md | 18 - .../workflows/meal-prep-nutrition/workflow.md | 60 --- .../workflows/workflow/data/architecture.md | 4 +- .../data/dietary-restrictions.csv | 18 - .../data/macro-calculator.csv | 16 - .../data/recipe-database.csv | 28 -- .../steps-c/step-01-init.md | 170 ------- .../steps-c/step-01b-continue.md | 142 ------ .../steps-c/step-02-profile.md | 158 ------- .../steps-c/step-03-assessment.md | 146 ------ .../steps-c/step-04-strategy.md | 176 ------- .../steps-c/step-05-shopping.md | 161 ------- .../steps-c/step-06-prep-schedule.md | 188 -------- .../templates/assessment-section.md | 25 - .../templates/nutrition-plan.md | 68 --- .../templates/prep-schedule-section.md | 29 -- .../templates/profile-section.md | 47 -- .../templates/shopping-section.md | 37 -- .../templates/strategy-section.md | 18 - .../examples/meal-prep-nutrition/workflow.md | 59 --- .../workflow/data/frontmatter-standards.md | 48 +- .../workflow/data/step-type-patterns.md | 37 +- .../data/subprocess-optimization-patterns.md | 386 ++++++++++++++++ .../workflow/steps-c/step-01b-continuation.md | 3 + .../workflow/steps-c/step-06-design.md | 47 +- .../workflow/steps-c/step-08-build-step-01.md | 44 ++ .../steps-c/step-09-build-next-step.md | 44 ++ .../steps-v/step-01-validate-max-mode.md | 109 +++++ .../workflow/steps-v/step-01-validate.md | 140 +++--- .../workflow/steps-v/step-01b-structure.md | 152 ++++++ .../steps-v/step-02-frontmatter-validation.md | 93 ++-- .../steps-v/step-02b-path-violations.md | 265 +++++++++++ .../steps-v/step-03-menu-validation.md | 87 ++-- .../steps-v/step-04-step-type-validation.md | 113 +++-- .../step-05-output-format-validation.md | 87 ++-- .../step-06-validation-design-check.md | 111 ++--- .../step-07-instruction-style-check.md | 109 +++-- .../step-08-collaborative-experience-check.md | 8 +- .../step-08b-subprocess-optimization.md | 179 ++++++++ .../steps-v/step-09-cohesive-review.md | 123 ++--- .../steps-v/step-10-report-complete.md | 154 ++----- .../steps-v/step-11-plan-validation.md | 196 ++++---- .../step-01-init-continuable-template.md | 6 +- .../workflow/templates/step-1b-template.md | 2 +- .../workflow/templates/step-template.md | 22 +- .../workflow/templates/workflow-template.md | 6 +- .../bmb/workflows/workflow/workflow.md | 6 + .../brainstorm-game/steps/step-01-init.md | 4 +- .../brainstorm-game/steps/step-02-context.md | 4 +- .../brainstorm-game/steps/step-03-ideation.md | 4 +- .../brainstorm-game/steps/step-04-complete.md | 2 +- .../brainstorm-game/workflow.md | 2 +- .../game-brief/steps/step-01-init.md | 6 +- .../game-brief/steps/step-01b-continue.md | 2 +- .../game-brief/steps/step-02-vision.md | 4 +- .../game-brief/steps/step-03-market.md | 4 +- .../game-brief/steps/step-04-fundamentals.md | 4 +- .../game-brief/steps/step-05-scope.md | 4 +- .../game-brief/steps/step-06-references.md | 4 +- .../game-brief/steps/step-07-content.md | 4 +- .../game-brief/steps/step-08-complete.md | 2 +- .../2-design/gdd/steps/step-01-init.md | 6 +- .../2-design/gdd/steps/step-01b-continue.md | 2 +- .../2-design/gdd/steps/step-02-context.md | 4 +- .../2-design/gdd/steps/step-03-platforms.md | 4 +- .../2-design/gdd/steps/step-04-vision.md | 4 +- .../gdd/steps/step-05-core-gameplay.md | 4 +- .../2-design/gdd/steps/step-06-mechanics.md | 4 +- .../2-design/gdd/steps/step-07-game-type.md | 4 +- .../2-design/gdd/steps/step-08-progression.md | 4 +- .../2-design/gdd/steps/step-09-levels.md | 4 +- .../2-design/gdd/steps/step-10-art-audio.md | 4 +- .../2-design/gdd/steps/step-11-technical.md | 4 +- .../2-design/gdd/steps/step-12-epics.md | 4 +- .../2-design/gdd/steps/step-13-metrics.md | 4 +- .../2-design/gdd/steps/step-14-complete.md | 2 +- .../2-design/narrative/steps/step-01-init.md | 6 +- .../narrative/steps/step-01b-continue.md | 22 +- .../narrative/steps/step-02-foundation.md | 4 +- .../2-design/narrative/steps/step-03-story.md | 4 +- .../narrative/steps/step-04-characters.md | 4 +- .../2-design/narrative/steps/step-05-world.md | 4 +- .../narrative/steps/step-06-dialogue.md | 4 +- .../narrative/steps/step-07-environmental.md | 4 +- .../narrative/steps/step-08-delivery.md | 4 +- .../narrative/steps/step-09-integration.md | 4 +- .../narrative/steps/step-10-production.md | 4 +- .../narrative/steps/step-11-complete.md | 2 +- .../workflows/2-design/narrative/workflow.md | 2 +- .../game-architecture/steps/step-01-init.md | 6 +- .../steps/step-01b-continue.md | 18 +- .../steps/step-02-context.md | 4 +- .../steps/step-03-starter.md | 4 +- .../steps/step-04-decisions.md | 4 +- .../steps/step-05-crosscutting.md | 4 +- .../steps/step-06-structure.md | 4 +- .../steps/step-07-patterns.md | 4 +- .../steps/step-08-validation.md | 4 +- .../steps/step-09-complete.md | 2 +- .../3-technical/game-architecture/workflow.md | 2 +- src/modules/bmm/agents/pm.agent.yaml | 12 +- .../prd/{ => data}/domain-complexity.csv | 0 .../2-plan-workflows/prd/data/prd-purpose.md | 197 ++++++++ .../prd/{ => data}/project-types.csv | 0 .../prd/{steps => steps-c}/step-01-init.md | 20 +- .../{steps => steps-c}/step-01b-continue.md | 85 ++-- .../prd/steps-c/step-02-discovery.md | 224 +++++++++ .../prd/{steps => steps-c}/step-03-success.md | 164 ++----- .../prd/steps-c/step-04-journeys.md | 213 +++++++++ .../prd/steps-c/step-05-domain.md | 207 +++++++++ .../{steps => steps-c}/step-06-innovation.md | 122 ++--- .../step-07-project-type.md | 95 ++-- .../prd/{steps => steps-c}/step-08-scoping.md | 157 ++----- .../{steps => steps-c}/step-09-functional.md | 81 +--- .../step-10-nonfunctional.md | 116 ++--- .../prd/steps-c/step-11-polish.md | 217 +++++++++ .../prd/steps-c/step-12-complete.md | 180 ++++++++ .../prd/steps-e/step-e-01-discovery.md | 247 ++++++++++ .../steps-e/step-e-01b-legacy-conversion.md | 208 +++++++++ .../prd/steps-e/step-e-02-review.md | 249 ++++++++++ .../prd/steps-e/step-e-03-edit.md | 253 ++++++++++ .../prd/steps-e/step-e-04-complete.md | 168 +++++++ .../prd/steps-v/step-v-01-discovery.md | 218 +++++++++ .../prd/steps-v/step-v-02-format-detection.md | 191 ++++++++ .../prd/steps-v/step-v-02b-parity-check.md | 209 +++++++++ .../steps-v/step-v-03-density-validation.md | 174 +++++++ .../step-v-04-brief-coverage-validation.md | 214 +++++++++ .../step-v-05-measurability-validation.md | 228 +++++++++ .../step-v-06-traceability-validation.md | 217 +++++++++ ...-v-07-implementation-leakage-validation.md | 205 +++++++++ .../step-v-08-domain-compliance-validation.md | 243 ++++++++++ .../step-v-09-project-type-validation.md | 263 +++++++++++ .../prd/steps-v/step-v-10-smart-validation.md | 209 +++++++++ .../step-v-11-holistic-quality-validation.md | 264 +++++++++++ .../step-v-12-completeness-validation.md | 242 ++++++++++ .../prd/steps-v/step-v-13-report-complete.md | 232 ++++++++++ .../prd/steps/step-02-discovery.md | 421 ----------------- .../prd/steps/step-04-journeys.md | 291 ------------ .../prd/steps/step-05-domain.md | 271 ----------- .../prd/steps/step-11-complete.md | 186 -------- .../prd/{ => templates}/prd-template.md | 1 - .../prd/validation-report-prd-workflow.md | 433 ++++++++++++++++++ .../2-plan-workflows/prd/workflow.md | 105 ++++- .../steps/step-01-document-discovery.md | 4 +- .../steps/step-02-prd-analysis.md | 4 +- .../steps/step-03-epic-coverage-validation.md | 4 +- .../steps/step-04-ux-alignment.md | 4 +- .../steps/step-05-epic-quality-review.md | 4 +- .../steps/step-06-final-assessment.md | 2 +- .../workflow.md | 2 +- .../steps/step-01-validate-prerequisites.md | 4 +- .../steps/step-02-design-epics.md | 4 +- .../steps/step-03-create-stories.md | 4 +- .../steps/step-04-final-validation.md | 2 +- .../quick-dev/steps/step-01-mode-detection.md | 6 +- .../steps/step-02-context-gathering.md | 4 +- .../quick-dev/steps/step-03-execute.md | 4 +- .../quick-dev/steps/step-04-self-check.md | 4 +- .../steps/step-05-adversarial-review.md | 4 +- .../steps/step-06-resolve-findings.md | 2 +- .../quick-spec/steps/step-01-understand.md | 8 +- .../quick-spec/steps/step-02-investigate.md | 4 +- .../quick-spec/steps/step-03-generate.md | 4 +- src/modules/cis/module.yaml | 1 - 194 files changed, 8349 insertions(+), 5649 deletions(-) delete mode 100644 src/modules/bmb/reference/readme.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md delete mode 100644 src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/dietary-restrictions.csv delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/macro-calculator.csv delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/recipe-database.csv delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01-init.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01b-continue.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-02-profile.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-03-assessment.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-04-strategy.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-05-shopping.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-06-prep-schedule.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/assessment-section.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/nutrition-plan.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/prep-schedule-section.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/profile-section.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/shopping-section.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/strategy-section.md delete mode 100644 src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/workflow.md create mode 100644 src/modules/bmb/workflows/workflow/data/subprocess-optimization-patterns.md create mode 100644 src/modules/bmb/workflows/workflow/steps-c/step-01b-continuation.md create mode 100644 src/modules/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md create mode 100644 src/modules/bmb/workflows/workflow/steps-v/step-01b-structure.md create mode 100644 src/modules/bmb/workflows/workflow/steps-v/step-02b-path-violations.md create mode 100644 src/modules/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md rename src/modules/bmm/workflows/2-plan-workflows/prd/{ => data}/domain-complexity.csv (100%) create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md rename src/modules/bmm/workflows/2-plan-workflows/prd/{ => data}/project-types.csv (100%) rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-01-init.md (91%) rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-01b-continue.md (70%) create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-03-success.md (55%) create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-06-innovation.md (58%) rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-07-project-type.md (68%) rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-08-scoping.md (53%) rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-09-functional.md (70%) rename src/modules/bmm/workflows/2-plan-workflows/prd/{steps => steps-c}/step-10-nonfunctional.md (64%) create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md delete mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md delete mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md delete mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md delete mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md rename src/modules/bmm/workflows/2-plan-workflows/prd/{ => templates}/prd-template.md (93%) create mode 100644 src/modules/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md index 9ed3ffe2..cb2135c5 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md @@ -6,8 +6,8 @@ description: 'Initialize quiz game with mode selection and category choice' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-q1.md' +thisStepFile: './step-01-init.md' +nextStepFile: './step-02-q1.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' csvTemplate: '{workflow_path}/templates/csv-headers.template' @@ -146,7 +146,7 @@ Display: **Starting your quiz adventure...** ## CRITICAL STEP COMPLETION NOTE -ONLY WHEN setup is complete (mode selected, category chosen, CSV initialized) will you then load, read fully, and execute `{workflow_path}/steps/step-02-q1.md` to begin the first question. +ONLY WHEN setup is complete (mode selected, category chosen, CSV initialized) will you then load, read fully, and execute `./step-02-q1.md` to begin the first question. ## 🚨 SYSTEM SUCCESS/FAILURE METRICS diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md index 2fe668e1..3141dd3c 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md @@ -6,9 +6,9 @@ description: 'Question 1 - Level 1 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-02-q1.md' -nextStepFile: '{workflow_path}/steps/step-03-q2.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-02-q1.md' +nextStepFile: './step-03-q2.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' # Task References diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md index 489317f9..b7ca00da 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md @@ -6,9 +6,9 @@ description: 'Question 2 - Level 2 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-03-q2.md' -nextStepFile: '{workflow_path}/steps/step-04-q3.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-03-q2.md' +nextStepFile: './step-04-q3.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md index 8184f3e5..c16a0d7f 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md @@ -6,9 +6,9 @@ description: 'Question 3 - Level 3 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-04-q3.md' -nextStepFile: '{workflow_path}/steps/step-04-q3.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-04-q3.md' +nextStepFile: './step-04-q3.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md index ca8fec89..c5e2414f 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md @@ -6,9 +6,9 @@ description: 'Question 4 - Level 4 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-05-q4.md' -nextStepFile: '{workflow_path}/steps/step-05-q4.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-05-q4.md' +nextStepFile: './step-05-q4.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md index d98b43f2..815ee91a 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md @@ -6,9 +6,9 @@ description: 'Question 5 - Level 5 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-06-q5.md' -nextStepFile: '{workflow_path}/steps/step-06-q5.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-06-q5.md' +nextStepFile: './step-06-q5.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md index baaf49f1..d216e0f1 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md @@ -6,9 +6,9 @@ description: 'Question 6 - Level 6 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-07-q6.md' -nextStepFile: '{workflow_path}/steps/step-07-q6.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-07-q6.md' +nextStepFile: './step-07-q6.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md index 1563fb84..1ca2589c 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md @@ -6,9 +6,9 @@ description: 'Question 7 - Level 7 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-08-q7.md' -nextStepFile: '{workflow_path}/steps/step-08-q7.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-08-q7.md' +nextStepFile: './step-08-q7.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md index 8dc7f711..2f1a04eb 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md @@ -6,9 +6,9 @@ description: 'Question 8 - Level 8 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-09-q8.md' -nextStepFile: '{workflow_path}/steps/step-09-q8.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-09-q8.md' +nextStepFile: './step-09-q8.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md index 6c76c0fc..d85b1016 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md @@ -6,9 +6,9 @@ description: 'Question 9 - Level 9 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-10-q9.md' -nextStepFile: '{workflow_path}/steps/step-10-q9.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-10-q9.md' +nextStepFile: './step-10-q9.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md index 4468c937..22eb6ebe 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md @@ -6,9 +6,9 @@ description: 'Question 10 - Level 10 difficulty' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-11-q10.md' -nextStepFile: '{workflow_path}/steps/results.md' -resultsStepFile: '{workflow_path}/steps/step-12-results.md' +thisStepFile: './step-11-q10.md' +nextStepFile: './results.md' +resultsStepFile: './step-12-results.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' --- diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md index a0eb36d8..0d20ccfb 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md @@ -6,8 +6,8 @@ description: 'Final results and celebration' workflow_path: '{project-root}/_bmad/custom/src/workflows/quiz-master' # File References -thisStepFile: '{workflow_path}/steps/step-12-results.md' -initStepFile: '{workflow_path}/steps/step-01-init.md' +thisStepFile: './step-12-results.md' +initStepFile: './step-01-init.md' workflowFile: '{workflow_path}/workflow.md' csvFile: '{project-root}/BMad-quiz-results.csv' # Task References diff --git a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md index badf9c51..b446773d 100644 --- a/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md +++ b/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md @@ -51,4 +51,4 @@ Load and read full config from {project-root}/_bmad/bmb/config.yaml and resolve: ### 2. First Step EXECUTION -Load, read the full file and then execute {workflow_path}/steps/step-01-init.md to begin the workflow. +Load, read the full file and then execute ./step-01-init.md to begin the workflow. diff --git a/src/modules/bmb/agents/workflow-builder.agent.yaml b/src/modules/bmb/agents/workflow-builder.agent.yaml index 36281c98..9ac0af16 100644 --- a/src/modules/bmb/agents/workflow-builder.agent.yaml +++ b/src/modules/bmb/agents/workflow-builder.agent.yaml @@ -40,6 +40,10 @@ agent: exec: "{project-root}/_bmad/bmb/workflows/workflow/workflow.md" description: "[VW] Run validation check on BMAD workflows against best practices" + - trigger: MV or fuzzy match on validate-max-parallel-workflow + exec: "{project-root}/_bmad/bmb/workflows/workflow/workflow.md" + description: "[MV] Run validation checks in MAX-PARALLEL mode against a workflow (requires a tool that supports Parallel Sub-Processes)" + - trigger: RW or fuzzy match on convert-or-rework-workflow exec: "{project-root}/_bmad/bmb/workflows/workflow/workflow.md" description: "[RW] Rework a Workflow to a V6 Compliant Version" diff --git a/src/modules/bmb/reference/readme.md b/src/modules/bmb/reference/readme.md deleted file mode 100644 index b7e8e17a..00000000 --- a/src/modules/bmb/reference/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reference Examples - -Reference models of best practices for agents, workflows, and whole modules. diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv b/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv deleted file mode 100644 index 5467e306..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +++ /dev/null @@ -1,18 +0,0 @@ -category,restriction,considerations,alternatives,notes -Allergy,Nuts,Severe allergy, check labels carefully,Seeds, sunflower seed butter -Allergy,Shellfish,Cross-reactivity with some fish,Fin fish, vegetarian proteins -Allergy,Dairy,Calcium and vitamin D needs,Almond milk, fortified plant milks -Allergy,Soy,Protein source replacement,Legumes, quinoa, seitan -Allergy,Gluten,Celiac vs sensitivity,Quinoa, rice, certified gluten-free -Medical,Diabetes,Carbohydrate timing and type,Fiber-rich foods, low glycemic -Medical,Hypertension,Sodium restriction,Herbs, spices, salt-free seasonings -Medical,IBS,FODMAP triggers,Low FODMAP vegetables, soluble fiber -Ethical,Vegetarian,Complete protein combinations,Quinoa, buckwheat, hemp seeds -Ethical,Vegan,B12 supplementation mandatory,Nutritional yeast, fortified foods -Ethical,Halal,Meat sourcing requirements,Halal-certified products -Ethical,Kosher,Dairy-meat separation,Parve alternatives -Intolerance,Lactose,Dairy digestion issues,Lactase pills, aged cheeses -Intolerance,FODMAP,Carbohydrate malabsorption,Low FODMAP fruits/veg -Preference,Dislikes,Texture/flavor preferences,Similar texture alternatives -Preference,Budget,Cost-effective options,Bulk buying, seasonal produce -Preference,Convenience,Time-saving options,Pre-cut vegetables, frozen produce \ No newline at end of file diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv b/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv deleted file mode 100644 index f16c1892..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +++ /dev/null @@ -1,16 +0,0 @@ -goal,activity_level,multiplier,protein_ratio,protein_min,protein_max,fat_ratio,carb_ratio -weight_loss,sedentary,1.2,0.3,1.6,2.2,0.35,0.35 -weight_loss,light,1.375,0.35,1.8,2.5,0.30,0.35 -weight_loss,moderate,1.55,0.4,2.0,2.8,0.30,0.30 -weight_loss,active,1.725,0.4,2.2,3.0,0.25,0.35 -weight_loss,very_active,1.9,0.45,2.5,3.3,0.25,0.30 -maintenance,sedentary,1.2,0.25,0.8,1.2,0.35,0.40 -maintenance,light,1.375,0.25,1.0,1.4,0.35,0.40 -maintenance,moderate,1.55,0.3,1.2,1.6,0.35,0.35 -maintenance,active,1.725,0.3,1.4,1.8,0.30,0.40 -maintenance,very_active,1.9,0.35,1.6,2.2,0.30,0.35 -muscle_gain,sedentary,1.2,0.35,1.8,2.5,0.30,0.35 -muscle_gain,light,1.375,0.4,2.0,2.8,0.30,0.30 -muscle_gain,moderate,1.55,0.4,2.2,3.0,0.25,0.35 -muscle_gain,active,1.725,0.45,2.5,3.3,0.25,0.30 -muscle_gain,very_active,1.9,0.45,2.8,3.5,0.25,0.30 \ No newline at end of file diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv b/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv deleted file mode 100644 index 56738992..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +++ /dev/null @@ -1,28 +0,0 @@ -category,name,prep_time,cook_time,total_time,protein_per_serving,complexity,meal_type,restrictions_friendly,batch_friendly -Protein,Grilled Chicken Breast,10,20,30,35,beginner,lunch/dinner,all,yes -Protein,Baked Salmon,5,15,20,22,beginner,lunch/dinner,gluten-free,no -Protein,Lentils,0,25,25,18,beginner,lunch/dinner,vegan,yes -Protein,Ground Turkey,5,15,20,25,beginner,lunch/dinner,all,yes -Protein,Tofu Stir-fry,10,15,25,20,intermediate,lunch/dinner,vegan,no -Protein,Eggs Scrambled,5,5,10,12,beginner,breakfast,vegetarian,no -Protein,Greek Yogurt,0,0,0,17,beginner,snack,vegetarian,no -Carb,Quinoa,5,15,20,8,beginner,lunch/dinner,gluten-free,yes -Carb,Brown Rice,5,40,45,5,beginner,lunch/dinner,gluten-free,yes -Carb,Sweet Potato,5,45,50,4,beginner,lunch/dinner,all,yes -Carb,Oatmeal,2,5,7,5,beginner,breakfast,gluten-free,yes -Carb,Whole Wheat Pasta,2,10,12,7,beginner,lunch/dinner,vegetarian,no -Veggie,Broccoli,5,10,15,3,beginner,lunch/dinner,all,yes -Veggie,Spinach,2,3,5,3,beginner,lunch/dinner,all,no -Veggie,Bell Peppers,5,10,15,1,beginner,lunch/dinner,all,no -Veggie,Kale,5,5,10,3,beginner,lunch/dinner,all,no -Veggie,Avocado,2,0,2,2,beginner,snack/lunch,all,no -Snack,Almonds,0,0,0,6,beginner,snack,gluten-free,no -Snack,Apple with PB,2,0,2,4,beginner,snack,vegetarian,no -Snack,Protein Smoothie,5,0,5,25,beginner,snack,all,no -Snack,Hard Boiled Eggs,0,12,12,6,beginner,snack,vegetarian,yes -Breakfast,Overnight Oats,5,0,5,10,beginner,breakfast,vegan,yes -Breakfast,Protein Pancakes,10,10,20,20,intermediate,breakfast,vegetarian,no -Breakfast,Veggie Omelet,5,10,15,18,intermediate,breakfast,vegetarian,no -Quick Meal,Chicken Salad,10,0,10,30,beginner,lunch,gluten-free,no -Quick Meal,Tuna Wrap,5,0,5,20,beginner,lunch,gluten-free,no -Quick Meal,Buddha Bowl,15,0,15,15,intermediate,lunch,vegan,no \ No newline at end of file diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md deleted file mode 100644 index a6cb91e7..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -name: 'step-01-init' -description: 'Initialize the nutrition plan workflow by detecting continuation state and creating output document' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-profile.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' -templateFile: '{workflow_path}/templates/nutrition-plan.md' -continueFile: '{workflow_path}/steps/step-01b-continue.md' -# Template References -# This step doesn't use content templates, only the main template ---- - -# Step 1: Workflow Initialization - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and structured planning, user brings their personal preferences and lifestyle constraints -- ✅ Together we produce something better than the sum of our own parts - -### Step-Specific Rules: - -- 🎯 Focus ONLY on initialization and setup -- 🚫 FORBIDDEN to look ahead to future steps -- 💬 Handle initialization professionally -- 🚪 DETECT existing workflow state and handle continuation properly - -## EXECUTION PROTOCOLS: - -- 🎯 Show analysis before taking any action -- 💾 Initialize document and update frontmatter -- 📖 Set up frontmatter `stepsCompleted: [1]` before loading next step -- 🚫 FORBIDDEN to load next step until setup is complete - -## CONTEXT BOUNDARIES: - -- Variables from workflow.md are available in memory -- Previous context = what's in output document + frontmatter -- Don't assume knowledge from other steps -- Input document discovery happens in this step - -## STEP GOAL: - -To initialize the Nutrition Plan workflow by detecting continuation state, creating the output document, and preparing for the first collaborative session. - -## INITIALIZATION SEQUENCE: - -### 1. Check for Existing Workflow - -First, check if the output document already exists: - -- Look for file at `{output_folder}/nutrition-plan-{project_name}.md` -- If exists, read the complete file including frontmatter -- If not exists, this is a fresh workflow - -### 2. Handle Continuation (If Document Exists) - -If the document exists and has frontmatter with `stepsCompleted`: - -- **STOP here** and load `./step-01b-continue.md` immediately -- Do not proceed with any initialization tasks -- Let step-01b handle the continuation logic - -### 3. Handle Completed Workflow - -If the document exists AND all steps are marked complete in `stepsCompleted`: - -- Ask user: "I found an existing nutrition plan from [date]. Would you like to: - 1. Create a new nutrition plan - 2. Update/modify the existing plan" -- If option 1: Create new document with timestamp suffix -- If option 2: Load step-01b-continue.md - -### 4. Fresh Workflow Setup (If No Document) - -If no document exists or no `stepsCompleted` in frontmatter: - -#### A. Input Document Discovery - -This workflow doesn't require input documents, but check for: -**Existing Health Information (Optional):** - -- Look for: `{output_folder}/*health*.md` -- Look for: `{output_folder}/*goals*.md` -- If found, load completely and add to `inputDocuments` frontmatter - -#### B. Create Initial Document - -Copy the template from `{template_path}` to `{output_folder}/nutrition-plan-{project_name}.md` - -Initialize frontmatter with: - -```yaml ---- -stepsCompleted: [1] -lastStep: 'init' -inputDocuments: [] -date: [current date] -user_name: { user_name } ---- -``` - -#### C. Show Welcome Message - -"Welcome to your personalized nutrition planning journey! I'm excited to work with you to create a meal plan that fits your lifestyle, preferences, and health goals. - -Let's begin by getting to know you and your nutrition goals." - -## ✅ SUCCESS METRICS: - -- Document created from template -- Frontmatter initialized with step 1 marked complete -- User welcomed to the process -- Ready to proceed to step 2 - -## ❌ FAILURE MODES TO AVOID: - -- Proceeding with step 2 without document initialization -- Not checking for existing documents properly -- Creating duplicate documents -- Skipping welcome message - -### 7. Present MENU OPTIONS - -Display: **Proceeding to user profile collection...** - -#### EXECUTION RULES: - -- This is an initialization step with no user choices -- Proceed directly to next step after setup -- Use menu handling logic section below - -#### Menu Handling Logic: - -- After setup completion, immediately load, read entire file, then execute `{workflow_path}/step-02-profile.md` to begin user profile collection - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Document created from template -- update frontmatter `stepsCompleted` to add 4 at the end of the array before loading next step -- Frontmatter initialized with `stepsCompleted: [1]` -- User welcomed to the process -- Ready to proceed to step 2 - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN initialization setup is complete and document is created, will you then immediately load, read entire file, then execute `{workflow_path}/step-02-profile.md` to begin user profile collection. - -### ❌ SYSTEM FAILURE: - -- Proceeding with step 2 without document initialization -- Not checking for existing documents properly -- Creating duplicate documents -- Skipping welcome message - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md deleted file mode 100644 index a01d7711..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -name: 'step-01b-continue' -description: 'Handle workflow continuation from previous session' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' ---- - -# Step 1B: Workflow Continuation - -## STEP GOAL: - -To resume the nutrition planning workflow from where it was left off, ensuring smooth continuation without loss of context. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and structured planning, user brings their personal preferences and lifestyle constraints - -### Step-Specific Rules: - -- 🎯 Focus ONLY on analyzing and resuming workflow state -- 🚫 FORBIDDEN to modify content during this step -- 💬 Maintain continuity with previous sessions -- 🚪 DETECT exact continuation point from frontmatter of incomplete file {outputFile} - -## EXECUTION PROTOCOLS: - -- 🎯 Show your analysis of current state before taking action -- 💾 Keep existing frontmatter `stepsCompleted` values -- 📖 Review the template content already generated -- 🚫 FORBIDDEN to modify content completed in previous steps - -## CONTEXT BOUNDARIES: - -- Current nutrition-plan.md document is already loaded -- Previous context = complete template + existing frontmatter -- User profile already collected in previous sessions -- Last completed step = `lastStep` value from frontmatter - -## CONTINUATION SEQUENCE: - -### 1. Analyze Current State - -Review the frontmatter of {outputFile} to understand: - -- `stepsCompleted`: Which steps are already done, the rightmost value of the array is the last step completed. For example stepsCompleted: [1, 2, 3] would mean that steps 1, then 2, and then 3 were finished. - -### 2. Read the full step of every completed step - -- read each step file that corresponds to the stepsCompleted > 1. - -EXAMPLE: In the example `stepsCompleted: [1, 2, 3]` your would find the step 2 file by file name (step-02-profile.md) and step 3 file (step-03-assessment.md). the last file in the array is the last one completed, so you will follow the instruction to know what the next step to start processing is. reading that file would for example show that the next file is `steps/step-04-strategy.md`. - -### 3. Review the output completed previously - -In addition to reading ONLY each step file that was completed, you will then read the {outputFile} to further understand what is done so far. - -### 4. Welcome Back Dialog - -"Welcome back! I see we've completed [X] steps of your nutrition plan. We last worked on [brief description]. Are you ready to continue with [next step]?" - -### 5. Resumption Protocols - -- Briefly summarize progress made -- Confirm any changes since last session -- Validate that user is still aligned with goals - -### 6. Present MENU OPTIONS - -Display: **Resuming workflow - Select an Option:** [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- IF C: follow the suggestion of the last completed step reviewed to continue as it suggested -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and continuation analysis is complete, will you then update frontmatter and load, read entire file, then execute the appropriate next step file. - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Correctly identified last completed step -- User confirmed readiness to continue -- Frontmatter updated with continuation date -- Workflow resumed at appropriate step - -### ❌ SYSTEM FAILURE: - -- Skipping analysis of existing state -- Modifying content from previous steps -- Loading wrong next step -- Not updating frontmatter properly - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md deleted file mode 100644 index 29fc76b2..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +++ /dev/null @@ -1,165 +0,0 @@ ---- -name: 'step-02-profile' -description: 'Gather comprehensive user profile information through collaborative conversation' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References (all use {variable} format in file) -thisStepFile: '{workflow_path}/steps/step-02-profile.md' -nextStepFile: '{workflow_path}/steps/step-03-assessment.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Template References -profileTemplate: '{workflow_path}/templates/profile-section.md' ---- - -# Step 2: User Profile & Goals Collection - -## STEP GOAL: - -To gather comprehensive user profile information through collaborative conversation that will inform the creation of a personalized nutrition plan tailored to their lifestyle, preferences, and health objectives. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and structured planning -- ✅ User brings their personal preferences and lifestyle constraints - -### Step-Specific Rules: - -- 🎯 Focus ONLY on collecting profile and goal information -- 🚫 FORBIDDEN to provide meal recommendations or nutrition advice in this step -- 💬 Ask questions conversationally, not like a form -- 🚫 DO NOT skip any profile section - each affects meal recommendations - -## EXECUTION PROTOCOLS: - -- 🎯 Engage in natural conversation to gather profile information -- 💾 After collecting all information, append to {outputFile} -- 📖 Update frontmatter `stepsCompleted` to add 2 at the end of the array before loading next step -- 🚫 FORBIDDEN to load next step until user selects 'C' and content is saved - -## CONTEXT BOUNDARIES: - -- Document and frontmatter are already loaded from initialization -- Focus ONLY on collecting user profile and goals -- Don't provide meal recommendations in this step -- This is about understanding, not prescribing - -## PROFILE COLLECTION PROCESS: - -### 1. Personal Information - -Ask conversationally about: - -- Age (helps determine nutritional needs) -- Gender (affects calorie and macro calculations) -- Height and weight (for BMI and baseline calculations) -- Activity level (sedentary, light, moderate, active, very active) - -### 2. Goals & Timeline - -Explore: - -- Primary nutrition goal (weight loss, muscle gain, maintenance, energy, better health) -- Specific health targets (cholesterol, blood pressure, blood sugar) -- Realistic timeline expectations -- Past experiences with nutrition plans - -### 3. Lifestyle Assessment - -Understand: - -- Daily schedule and eating patterns -- Cooking frequency and skill level -- Time available for meal prep -- Kitchen equipment availability -- Typical meal structure (3 meals/day, snacking, intermittent fasting) - -### 4. Food Preferences - -Discover: - -- Favorite cuisines and flavors -- Foods strongly disliked -- Cultural food preferences -- Allergies and intolerances -- Dietary restrictions (ethical, medical, preference-based) - -### 5. Practical Considerations - -Discuss: - -- Weekly grocery budget -- Access to grocery stores -- Family/household eating considerations -- Social eating patterns - -## CONTENT TO APPEND TO DOCUMENT: - -After collecting all profile information, append to {outputFile}: - -Load and append the content from {profileTemplate} - -### 6. Present MENU OPTIONS - -Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- IF A: Execute {advancedElicitationTask} -- IF P: Execute {partyModeWorkflow} -- IF C: Save content to {outputFile}, update frontmatter, 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) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated, will you then load, read entire file, then execute {nextStepFile} to execute and begin dietary needs assessment step. - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Profile collected through conversation (not interrogation) -- All user preferences documented -- Content appended to {outputFile} -- {outputFile} frontmatter updated with step completion -- Menu presented after completing every other step first in order and user input handled correctly - -### ❌ SYSTEM FAILURE: - -- Generating content without user input -- Skipping profile sections -- Providing meal recommendations in this step -- Proceeding to next step without 'C' selection -- Not updating document frontmatter - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md deleted file mode 100644 index 6e0ead93..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -name: 'step-03-assessment' -description: 'Analyze nutritional requirements, identify restrictions, and calculate target macros' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References -thisStepFile: '{workflow_path}/steps/step-03-assessment.md' -nextStepFile: '{workflow_path}/steps/step-04-strategy.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Data References -dietaryRestrictionsDB: '{workflow_path}/data/dietary-restrictions.csv' -macroCalculatorDB: '{workflow_path}/data/macro-calculator.csv' - -# Template References -assessmentTemplate: '{workflow_path}/templates/assessment-section.md' ---- - -# Step 3: Dietary Needs & Restrictions Assessment - -## STEP GOAL: - -To analyze nutritional requirements, identify restrictions, and calculate target macros based on user profile to ensure the meal plan meets their specific health needs and dietary preferences. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and assessment knowledge, user brings their health context -- ✅ Together we produce something better than the sum of our own parts - -### Step-Specific Rules: - -- 🎯 ALWAYS check for allergies and medical restrictions first -- 🚫 DO NOT provide medical advice - always recommend consulting professionals -- 💬 Explain the "why" behind nutritional recommendations -- 📋 Load dietary-restrictions.csv and macro-calculator.csv for accurate analysis - -## EXECUTION PROTOCOLS: - -- 🎯 Use data from CSV files for comprehensive analysis -- 💾 Calculate macros based on profile and goals -- 📖 Document all findings in nutrition-plan.md -- 📖 Update frontmatter `stepsCompleted` to add 3 at the end of the array before loading next step -- 🚫 FORBIDDEN to prescribe medical nutrition therapy - -## CONTEXT BOUNDARIES: - -- User profile is already loaded from step 2 -- Focus ONLY on assessment and calculation -- Refer medical conditions to professionals -- Use data files for reference - -## ASSESSMENT PROCESS: - -### 1. Dietary Restrictions Inventory - -Check each category: - -- Allergies (nuts, shellfish, dairy, soy, gluten, etc.) -- Medical conditions (diabetes, hypertension, IBS, etc.) -- Ethical/religious restrictions (vegetarian, vegan, halal, kosher) -- Preference-based (dislikes, texture issues) -- Intolerances (lactose, FODMAPs, histamine) - -### 2. Macronutrient Targets - -Using macro-calculator.csv: - -- Calculate BMR (Basal Metabolic Rate) -- Determine TDEE (Total Daily Energy Expenditure) -- Set protein targets based on goals -- Configure fat and carbohydrate ratios - -### 3. Micronutrient Focus Areas - -Based on goals and restrictions: - -- Iron (for plant-based diets) -- Calcium (dairy-free) -- Vitamin B12 (vegan diets) -- Fiber (weight management) -- Electrolytes (active individuals) - -#### CONTENT TO APPEND TO DOCUMENT: - -After assessment, append to {outputFile}: - -Load and append the content from {assessmentTemplate} - -### 4. Present MENU OPTIONS - -Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- IF A: Execute {advancedElicitationTask} -- IF P: Execute {partyModeWorkflow} -- IF C: Save content to {outputFile}, update frontmatter, then load, read entire file, then execute {nextStepFile} -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#4-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated, will you then load, read entire file, then execute `{workflow_path}/step-04-strategy.md` to execute and begin meal strategy creation step. - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- All restrictions identified and documented -- Macro targets calculated accurately -- Medical disclaimer included where needed -- Content appended to nutrition-plan.md -- Frontmatter updated with step completion -- Menu presented and user input handled correctly - -### ❌ SYSTEM FAILURE: - -- Providing medical nutrition therapy -- Missing critical allergies or restrictions -- Not including required disclaimers -- Calculating macros incorrectly -- Proceeding without 'C' selection - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. - ---- diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md deleted file mode 100644 index 39a25484..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -name: 'step-04-strategy' -description: 'Design a personalized meal strategy that meets nutritional needs and fits lifestyle' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References -thisStepFile: '{workflow_path}/steps/step-04-strategy.md' -nextStepFile: '{workflow_path}/steps/step-05-shopping.md' -alternateNextStepFile: '{workflow_path}/steps/step-06-prep-schedule.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Data References -recipeDatabase: '{workflow_path}/data/recipe-database.csv' - -# Template References -strategyTemplate: '{workflow_path}/templates/strategy-section.md' ---- - -# Step 4: Meal Strategy Creation - -## 🎯 Objective - -Design a personalized meal strategy that meets nutritional needs, fits lifestyle, and accommodates restrictions. - -## 📋 MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 NEVER suggest meals without considering ALL user restrictions -- 📖 CRITICAL: Reference recipe-database.csv for meal ideas -- 🔄 CRITICAL: Ensure macro distribution meets calculated targets -- ✅ Start with familiar foods, introduce variety gradually -- 🚫 DO NOT create a plan that requires advanced cooking skills if user is beginner -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### 1. Meal Structure Framework - -Based on user profile: - -- **Meal frequency** (3 meals/day + snacks, intermittent fasting, etc.) -- **Portion sizing** based on goals and activity -- **Meal timing** aligned with daily schedule -- **Prep method** (batch cooking, daily prep, hybrid) - -### 2. Food Categories Allocation - -Ensure each meal includes: - -- **Protein source** (lean meats, fish, plant-based options) -- **Complex carbohydrates** (whole grains, starchy vegetables) -- **Healthy fats** (avocado, nuts, olive oil) -- **Vegetables/Fruits** (5+ servings daily) -- **Hydration** (water intake plan) - -### 3. Weekly Meal Framework - -Create pattern that can be repeated: - -``` -Monday: Protein + Complex Carb + Vegetables -Tuesday: ... -Wednesday: ... -``` - -- Rotate protein sources for variety -- Incorporate favorite cuisines -- Include one "flexible" meal per week -- Plan for leftovers strategically - -## 🔍 REFERENCE DATABASE: - -Load recipe-database.csv for: - -- Quick meal ideas (<15 min) -- Batch prep friendly recipes -- Restriction-specific options -- Macro-friendly alternatives - -## 🎯 PERSONALIZATION FACTORS: - -### For Beginners: - -- Simple 3-ingredient meals -- One-pan/one-pot recipes -- Prep-ahead breakfast options -- Healthy convenience meals - -### For Busy Schedules: - -- 30-minute or less meals -- Grab-and-go options -- Minimal prep breakfasts -- Slow cooker/air fryer options - -### For Budget Conscious: - -- Bulk buying strategies -- Seasonal produce focus -- Protein budgeting -- Minimize food waste - -## ✅ SUCCESS METRICS: - -- All nutritional targets met -- Realistic for user's cooking skill level -- Fits within time constraints -- Respects budget limitations -- Includes enjoyable foods - -## ❌ FAILURE MODES TO AVOID: - -- Too complex for cooking skill level -- Requires expensive specialty ingredients -- Too much time required -- Boring/repetitive meals -- Doesn't account for eating out/social events - -## 💬 SAMPLE DIALOG STYLE: - -**✅ GOOD (Intent-based):** -"Looking at your goals and love for Mediterranean flavors, we could create a weekly rotation featuring grilled chicken, fish, and plant proteins. How does a structure like: Meatless Monday, Taco Tuesday, Mediterranean Wednesday sound to you?" - -**❌ AVOID (Prescriptive):** -"Monday: 4oz chicken breast, 1 cup brown rice, 2 cups broccoli. Tuesday: 4oz salmon..." - -## 📊 APPEND TO TEMPLATE: - -Begin building nutrition-plan.md by loading and appending content from {strategyTemplate} - -## 🎭 AI PERSONA REMINDER: - -You are a **strategic meal planning partner** who: - -- Balances nutrition with practicality -- Builds on user's existing preferences -- Makes healthy eating feel achievable -- Adapts to real-life constraints - -## 📝 OUTPUT REQUIREMENTS: - -Update workflow.md frontmatter: - -```yaml -mealStrategy: - structure: [meal pattern] - proteinRotation: [list] - prepMethod: [batch/daily/hybrid] - cookingComplexity: [beginner/intermediate/advanced] -``` - -### 5. Present MENU OPTIONS - -Display: **Select an Option:** [A] Meal Variety Optimization [P] Chef & Dietitian Collaboration [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- HALT and AWAIT ANSWER -- IF A: Execute `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` -- IF P: Execute `{project-root}/_bmad/core/workflows/party-mode/workflow.md` with a chef and dietitian expert also as part of the party -- IF C: Save content to nutrition-plan.md, update frontmatter `stepsCompleted` to add 4 at the end of the array before loading next step, check cooking frequency: - - IF cooking frequency > 2x/week: load, read entire file, then execute `{workflow_path}/step-05-shopping.md` - - IF cooking frequency ≤ 2x/week: load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated: - -- IF cooking frequency > 2x/week: load, read entire file, then execute `{workflow_path}/step-05-shopping.md` to generate shopping list -- IF cooking frequency ≤ 2x/week: load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` to skip shopping list diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md deleted file mode 100644 index 6e035b05..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -name: 'step-05-shopping' -description: 'Create a comprehensive shopping list that supports the meal strategy' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References -thisStepFile: '{workflow_path}/steps/step-05-shopping.md' -nextStepFile: '{workflow_path}/steps/step-06-prep-schedule.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Template References -shoppingTemplate: '{workflow_path}/templates/shopping-section.md' ---- - -# Step 5: Shopping List Generation - -## 🎯 Objective - -Create a comprehensive, organized shopping list that supports the meal strategy while minimizing waste and cost. - -## 📋 MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 CRITICAL: This step is OPTIONAL - skip if user cooks <2x per week -- 📖 CRITICAL: Cross-reference with existing pantry items -- 🔄 CRITICAL: Organize by store section for efficient shopping -- ✅ Include quantities based on serving sizes and meal frequency -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` -- 🚫 DO NOT forget staples and seasonings - Only proceed if: - -```yaml -cookingFrequency: "3-5x" OR "daily" -``` - -Otherwise, skip to Step 5: Prep Schedule - -## 📊 Shopping List Organization: - -### 1. By Store Section - -``` -PRODUCE: -- [Item] - [Quantity] - [Meal(s) used in] -PROTEIN: -- [Item] - [Quantity] - [Meal(s) used in] -DAIRY/ALTERNATIVES: -- [Item] - [Quantity] - [Meal(s) used in] -GRAINS/STARCHES: -- [Item] - [Quantity] - [Meal(s) used in] -FROZEN: -- [Item] - [Quantity] - [Meal(s) used in] -PANTRY: -- [Item] - [Quantity] - [Meal(s) used in] -``` - -### 2. Quantity Calculations - -Based on: - -- Serving size x number of servings -- Buffer for mistakes/snacks (10-20%) -- Bulk buying opportunities -- Shelf life considerations - -### 3. Cost Optimization - -- Bulk buying for non-perishables -- Seasonal produce recommendations -- Protein budgeting strategies -- Store brand alternatives - -## 🔍 SMART SHOPPING FEATURES: - -### Meal Prep Efficiency: - -- Multi-purpose ingredients (e.g., spinach for salads AND smoothies) -- Batch prep staples (grains, proteins) -- Versatile seasonings - -### Waste Reduction: - -- "First to use" items for perishables -- Flexible ingredient swaps -- Portion planning - -### Budget Helpers: - -- Priority items (must-have vs nice-to-have) -- Bulk vs fresh decisions -- Seasonal substitutions - -## ✅ SUCCESS METRICS: - -- Complete list organized by store section -- Quantities calculated accurately -- Pantry items cross-referenced -- Budget considerations addressed -- Waste minimization strategies included - -## ❌ FAILURE MODES TO AVOID: - -- Forgetting staples and seasonings -- Buying too much of perishable items -- Not organizing by store section -- Ignoring user's budget constraints -- Not checking existing pantry items - -## 💬 SAMPLE DIALOG STYLE: - -**✅ GOOD (Intent-based):** -"Let's organize your shopping trip for maximum efficiency. I'll group items by store section. Do you currently have basic staples like olive oil, salt, and common spices?" - -**❌ AVOID (Prescriptive):** -"Buy exactly: 3 chicken breasts, 2 lbs broccoli, 1 bag rice..." - -## 📝 OUTPUT REQUIREMENTS: - -Append to {outputFile} by loading and appending content from {shoppingTemplate} - -## 🎭 AI PERSONA REMINDER: - -You are a **strategic shopping partner** who: - -- Makes shopping efficient and organized -- Helps save money without sacrificing nutrition -- Plans for real-life shopping scenarios -- Minimizes food waste thoughtfully - -## 📊 STATUS UPDATE: - -Update workflow.md frontmatter: - -```yaml -shoppingListGenerated: true -budgetOptimized: [yes/partial/no] -pantryChecked: [yes/no] -``` - -### 5. Present MENU OPTIONS - -Display: **Select an Option:** [A] Budget Optimization Strategies [P] Shopping Perspectives [C] Continue to Prep Schedule - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- HALT and AWAIT ANSWER -- IF A: Execute `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` -- IF P: Execute `{project-root}/_bmad/core/workflows/party-mode/workflow.md` -- IF C: Save content to nutrition-plan.md, update frontmatter `stepsCompleted` to add 5 at the end of the array before loading next step, then load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated, will you then load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` to execute and begin meal prep schedule creation. diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md deleted file mode 100644 index 545ce1c9..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -name: 'step-06-prep-schedule' -description: "Create a realistic meal prep schedule that fits the user's lifestyle" - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition' - -# File References -thisStepFile: '{workflow_path}/steps/step-06-prep-schedule.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Template References -prepScheduleTemplate: '{workflow_path}/templates/prep-schedule-section.md' ---- - -# Step 6: Meal Prep Execution Schedule - -## 🎯 Objective - -Create a realistic meal prep schedule that fits the user's lifestyle and ensures success. - -## 📋 MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 NEVER suggest a prep schedule that requires more time than user has available -- 📖 CRITICAL: Base schedule on user's actual cooking frequency -- 🔄 CRITICAL: Include storage and reheating instructions -- ✅ Start with a sustainable prep routine -- 🚫 DO NOT overwhelm with too much at once -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### 1. Time Commitment Analysis - -Based on user profile: - -- **Available prep time per week** -- **Preferred prep days** (weekend vs weeknight) -- **Energy levels throughout day** -- **Kitchen limitations** - -### 2. Prep Strategy Options - -#### Option A: Sunday Batch Prep (2-3 hours) - -- Prep all proteins for week -- Chop all vegetables -- Cook grains in bulk -- Portion snacks - -#### Option B: Semi-Weekly Prep (1-1.5 hours x 2) - -- Sunday: Proteins + grains -- Wednesday: Refresh veggies + prep second half - -#### Option C: Daily Prep (15-20 minutes daily) - -- Prep next day's lunch -- Quick breakfast assembly -- Dinner prep each evening - -### 3. Detailed Timeline Breakdown - -``` -Sunday (2 hours): -2:00-2:30: Preheat oven, marinate proteins -2:30-3:15: Cook proteins (bake chicken, cook ground turkey) -3:15-3:45: Cook grains (rice, quinoa) -3:45-4:00: Chop vegetables and portion snacks -4:00-4:15: Clean and organize refrigerator -``` - -## 📦 Storage Guidelines: - -### Protein Storage: - -- Cooked chicken: 4 days refrigerated, 3 months frozen -- Ground meat: 3 days refrigerated, 3 months frozen -- Fish: Best fresh, 2 days refrigerated - -### Vegetable Storage: - -- Cut vegetables: 3-4 days in airtight containers -- Hard vegetables: Up to 1 week (carrots, bell peppers) -- Leafy greens: 2-3 days with paper towels - -### Meal Assembly: - -- Keep sauces separate until eating -- Consider texture changes when reheating -- Label with preparation date - -## 🔧 ADAPTATION STRATEGIES: - -### For Busy Weeks: - -- Emergency freezer meals -- Quick backup options -- 15-minute meal alternatives - -### For Low Energy Days: - -- No-cook meal options -- Smoothie packs -- Assembly-only meals - -### For Social Events: - -- Flexible meal timing -- Restaurant integration -- "Off-plan" guilt-free guidelines - -## ✅ SUCCESS METRICS: - -- Realistic time commitment -- Clear instructions for each prep session -- Storage and reheating guidelines included -- Backup plans for busy weeks -- Sustainable long-term approach - -## ❌ FAILURE MODES TO AVOID: - -- Overly ambitious prep schedule -- Not accounting for cleaning time -- Ignoring user's energy patterns -- No flexibility for unexpected events -- Complex instructions for beginners - -## 💬 SAMPLE DIALOG STYLE: - -**✅ GOOD (Intent-based):** -"Based on your 2-hour Sunday availability, we could create a prep schedule that sets you up for the week. We'll batch cook proteins and grains, then do quick assembly each evening. How does that sound with your energy levels?" - -**❌ AVOID (Prescriptive):** -"You must prep every Sunday from 2-4 PM. No exceptions." - -## 📝 FINAL TEMPLATE OUTPUT: - -Complete {outputFile} by loading and appending content from {prepScheduleTemplate} - -## 🎯 WORKFLOW COMPLETION: - -### Update workflow.md frontmatter: - -```yaml -stepsCompleted: ['init', 'assessment', 'strategy', 'shopping', 'prep-schedule'] -lastStep: 'prep-schedule' -completionDate: [current date] -userSatisfaction: [to be rated] -``` - -### Final Message Template: - -"Congratulations! Your personalized nutrition plan is complete. Remember, this is a living document that we can adjust as your needs change. Check in weekly for the first month to fine-tune your approach!" - -## 📊 NEXT STEPS FOR USER: - -1. Review complete plan -2. Shop for ingredients -3. Execute first prep session -4. Note any adjustments needed -5. Schedule follow-up review - -### 5. Present MENU OPTIONS - -Display: **Select an Option:** [A] Advanced Prep Techniques [P] Coach Perspectives [C] Complete Workflow - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- HALT and AWAIT ANSWER -- IF A: Execute `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` -- IF P: Execute `{project-root}/_bmad/core/workflows/party-mode/workflow.md` -- IF C: update frontmatter `stepsCompleted` to add 6 at the end of the array before loading next step, mark workflow complete, display final message -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#6-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document: - -1. update frontmatter `stepsCompleted` to add 6 at the end of the array before loading next step completed and indicate final completion -2. Display final completion message -3. End workflow session - -**Final Message:** "Congratulations! Your personalized nutrition plan is complete. Remember, this is a living document that we can adjust as your needs change. Check in weekly for the first month to fine-tune your approach!" diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md deleted file mode 100644 index 610f397c..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +++ /dev/null @@ -1,25 +0,0 @@ -## 📊 Daily Nutrition Targets - -**Daily Calories:** [calculated amount] -**Protein:** [grams]g ([percentage]% of calories) -**Carbohydrates:** [grams]g ([percentage]% of calories) -**Fat:** [grams]g ([percentage]% of calories) - ---- - -## ⚠️ Dietary Considerations - -### Allergies & Intolerances - -- [List of identified restrictions] -- [Cross-reactivity notes if applicable] - -### Medical Considerations - -- [Conditions noted with professional referral recommendation] -- [Special nutritional requirements] - -### Preferences - -- [Cultural/ethical restrictions] -- [Strong dislikes to avoid] diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md deleted file mode 100644 index 8c67f79a..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +++ /dev/null @@ -1,68 +0,0 @@ -# Personalized Nutrition Plan - -**Created:** {{date}} -**Author:** {{user_name}} - ---- - -## ✅ Progress Tracking - -**Steps Completed:** - -- [ ] Step 1: Workflow Initialization -- [ ] Step 2: User Profile & Goals -- [ ] Step 3: Dietary Assessment -- [ ] Step 4: Meal Strategy -- [ ] Step 5: Shopping List _(if applicable)_ -- [ ] Step 6: Meal Prep Schedule - -**Last Updated:** {{date}} - ---- - -## 📋 Executive Summary - -**Primary Goal:** [To be filled in Step 1] - -**Daily Nutrition Targets:** - -- Calories: [To be calculated in Step 2] -- Protein: [To be calculated in Step 2]g -- Carbohydrates: [To be calculated in Step 2]g -- Fat: [To be calculated in Step 2]g - -**Key Considerations:** [To be filled in Step 2] - ---- - -## 🎯 Your Nutrition Goals - -[Content to be added in Step 1] - ---- - -## 🍽️ Meal Framework - -[Content to be added in Step 3] - ---- - -## 🛒 Shopping List - -[Content to be added in Step 4 - if applicable] - ---- - -## ⏰ Meal Prep Schedule - -[Content to be added in Step 5] - ---- - -## 📝 Notes & Next Steps - -[Add any notes or adjustments as you progress] - ---- - -**Medical Disclaimer:** This nutrition plan is for educational purposes only and is not medical advice. Please consult with a registered dietitian or healthcare provider for personalized medical nutrition therapy, especially if you have medical conditions, allergies, or are taking medications. diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md deleted file mode 100644 index 1143cd51..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +++ /dev/null @@ -1,29 +0,0 @@ -## Meal Prep Schedule - -### [Chosen Prep Strategy] - -### Weekly Prep Tasks - -- [Day]: [Tasks] - [Time needed] -- [Day]: [Tasks] - [Time needed] - -### Daily Assembly - -- Morning: [Quick tasks] -- Evening: [Assembly instructions] - -### Storage Guide - -- Proteins: [Instructions] -- Vegetables: [Instructions] -- Grains: [Instructions] - -### Success Tips - -- [Personalized success strategies] - -### Weekly Review Checklist - -- [ ] Check weekend schedule -- [ ] Review meal plan satisfaction -- [ ] Adjust next week's plan diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md deleted file mode 100644 index 3784c1d9..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +++ /dev/null @@ -1,47 +0,0 @@ -## 🎯 Your Nutrition Goals - -### Primary Objective - -[User's main goal and motivation] - -### Target Timeline - -[Realistic timeframe and milestones] - -### Success Metrics - -- [Specific measurable outcomes] -- [Non-scale victories] -- [Lifestyle improvements] - ---- - -## 👤 Personal Profile - -### Basic Information - -- **Age:** [age] -- **Gender:** [gender] -- **Height:** [height] -- **Weight:** [current weight] -- **Activity Level:** [activity description] - -### Lifestyle Factors - -- **Daily Schedule:** [typical day structure] -- **Cooking Frequency:** [how often they cook] -- **Cooking Skill:** [beginner/intermediate/advanced] -- **Available Time:** [time for meal prep] - -### Food Preferences - -- **Favorite Cuisines:** [list] -- **Disliked Foods:** [list] -- **Allergies:** [list] -- **Dietary Restrictions:** [list] - -### Budget & Access - -- **Weekly Budget:** [range] -- **Shopping Access:** [stores available] -- **Special Considerations:** [family, social, etc.] diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md deleted file mode 100644 index 6a172159..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +++ /dev/null @@ -1,37 +0,0 @@ -## Weekly Shopping List - -### Check Pantry First - -- [List of common staples to verify] - -### Produce Section - -- [Item] - [Quantity] - [Used in] - -### Protein - -- [Item] - [Quantity] - [Used in] - -### Dairy/Alternatives - -- [Item] - [Quantity] - [Used in] - -### Grains/Starches - -- [Item] - [Quantity] - [Used in] - -### Frozen - -- [Item] - [Quantity] - [Used in] - -### Pantry - -- [Item] - [Quantity] - [Used in] - -### Money-Saving Tips - -- [Personalized savings strategies] - -### Flexible Swaps - -- [Alternative options if items unavailable] diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md deleted file mode 100644 index 9c11d05b..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +++ /dev/null @@ -1,18 +0,0 @@ -## Weekly Meal Framework - -### Protein Rotation - -- Monday: [Protein source] -- Tuesday: [Protein source] -- Wednesday: [Protein source] -- Thursday: [Protein source] -- Friday: [Protein source] -- Saturday: [Protein source] -- Sunday: [Protein source] - -### Meal Timing - -- Breakfast: [Time] - [Type] -- Lunch: [Time] - [Type] -- Dinner: [Time] - [Type] -- Snacks: [As needed] diff --git a/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md b/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md deleted file mode 100644 index 4bcdd903..00000000 --- a/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: Meal Prep & Nutrition Plan -description: Creates personalized meal plans through collaborative nutrition planning between an expert facilitator and individual seeking to improve their nutrition habits. -web_bundle: true -standalone: false ---- - -# Meal Prep & Nutrition Plan Workflow - -**Goal:** Create personalized meal plans through collaborative nutrition planning between an expert facilitator and individual seeking to improve their nutrition habits. - -**Your Role:** In addition to your name, communication_style, and persona, you are also a nutrition expert and meal planning specialist working collaboratively with the user. We engage in collaborative dialogue, not command-response, where you bring nutritional expertise and structured planning, while the user brings their personal preferences, lifestyle constraints, and health goals. Work together to create a sustainable, enjoyable nutrition plan. - ---- - -## WORKFLOW ARCHITECTURE - -This uses **step-file architecture** for disciplined execution: - -### Core Principles - -- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly -- **Just-In-Time Loading**: Only the current step file is in memory - never load future step files until told to do so -- **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed -- **State Tracking**: Document progress in output file frontmatter using `stepsCompleted` array when a workflow produces a document -- **Append-Only Building**: Build documents by appending content as directed to the output file - -### Step Processing Rules - -1. **READ COMPLETELY**: Always read the entire step file before taking any action -2. **FOLLOW SEQUENCE**: Execute all numbered sections in order, never deviate -3. **WAIT FOR INPUT**: If a menu is presented, halt and wait for user selection -4. **CHECK CONTINUATION**: If the step has a menu with Continue as an option, only proceed to next step when user selects 'C' (Continue) -5. **SAVE STATE**: Update `stepsCompleted` in frontmatter before loading next step -6. **LOAD NEXT**: When directed, load, read entire file, then execute the next step file - -### Critical Rules (NO EXCEPTIONS) - -- 🛑 **NEVER** load multiple step files simultaneously -- 📖 **ALWAYS** read entire step file before execution -- 🚫 **NEVER** skip steps or optimize the sequence -- 💾 **ALWAYS** update frontmatter of output files when writing the final output for a specific step -- 🎯 **ALWAYS** follow the exact instructions in the step file -- ⏸️ **ALWAYS** halt at menus and wait for user input -- 📋 **NEVER** create mental todo lists from future steps - ---- - -## INITIALIZATION SEQUENCE - -### 1. Configuration Loading - -Load and read full config from {project-root}/_bmad/core/config.yaml and resolve: - -- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language` -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### 2. First Step EXECUTION - -Load, read the full file and then execute `{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md` to begin the workflow. diff --git a/src/modules/bmb/workflows/workflow/data/architecture.md b/src/modules/bmb/workflows/workflow/data/architecture.md index e0d0c2e1..d594c61a 100644 --- a/src/modules/bmb/workflows/workflow/data/architecture.md +++ b/src/modules/bmb/workflows/workflow/data/architecture.md @@ -91,8 +91,8 @@ workflow.md → step-01-init.md (detects existing) → step-01b-continue.md → ### Standard (All Workflows) ```yaml workflow_path: '{project-root}/_bmad/[module]/workflows/[name]' -thisStepFile: '{workflow_path}/steps/step-[N]-[name].md' -nextStepFile: '{workflow_path}/steps/step-[N+1]-[name].md' +thisStepFile: './step-[N]-[name].md' +nextStepFile: './step-[N+1]-[name].md' outputFile: '{output_folder}/[output].md' ``` diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/dietary-restrictions.csv b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/dietary-restrictions.csv deleted file mode 100644 index 5467e306..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/dietary-restrictions.csv +++ /dev/null @@ -1,18 +0,0 @@ -category,restriction,considerations,alternatives,notes -Allergy,Nuts,Severe allergy, check labels carefully,Seeds, sunflower seed butter -Allergy,Shellfish,Cross-reactivity with some fish,Fin fish, vegetarian proteins -Allergy,Dairy,Calcium and vitamin D needs,Almond milk, fortified plant milks -Allergy,Soy,Protein source replacement,Legumes, quinoa, seitan -Allergy,Gluten,Celiac vs sensitivity,Quinoa, rice, certified gluten-free -Medical,Diabetes,Carbohydrate timing and type,Fiber-rich foods, low glycemic -Medical,Hypertension,Sodium restriction,Herbs, spices, salt-free seasonings -Medical,IBS,FODMAP triggers,Low FODMAP vegetables, soluble fiber -Ethical,Vegetarian,Complete protein combinations,Quinoa, buckwheat, hemp seeds -Ethical,Vegan,B12 supplementation mandatory,Nutritional yeast, fortified foods -Ethical,Halal,Meat sourcing requirements,Halal-certified products -Ethical,Kosher,Dairy-meat separation,Parve alternatives -Intolerance,Lactose,Dairy digestion issues,Lactase pills, aged cheeses -Intolerance,FODMAP,Carbohydrate malabsorption,Low FODMAP fruits/veg -Preference,Dislikes,Texture/flavor preferences,Similar texture alternatives -Preference,Budget,Cost-effective options,Bulk buying, seasonal produce -Preference,Convenience,Time-saving options,Pre-cut vegetables, frozen produce \ No newline at end of file diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/macro-calculator.csv b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/macro-calculator.csv deleted file mode 100644 index f16c1892..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/macro-calculator.csv +++ /dev/null @@ -1,16 +0,0 @@ -goal,activity_level,multiplier,protein_ratio,protein_min,protein_max,fat_ratio,carb_ratio -weight_loss,sedentary,1.2,0.3,1.6,2.2,0.35,0.35 -weight_loss,light,1.375,0.35,1.8,2.5,0.30,0.35 -weight_loss,moderate,1.55,0.4,2.0,2.8,0.30,0.30 -weight_loss,active,1.725,0.4,2.2,3.0,0.25,0.35 -weight_loss,very_active,1.9,0.45,2.5,3.3,0.25,0.30 -maintenance,sedentary,1.2,0.25,0.8,1.2,0.35,0.40 -maintenance,light,1.375,0.25,1.0,1.4,0.35,0.40 -maintenance,moderate,1.55,0.3,1.2,1.6,0.35,0.35 -maintenance,active,1.725,0.3,1.4,1.8,0.30,0.40 -maintenance,very_active,1.9,0.35,1.6,2.2,0.30,0.35 -muscle_gain,sedentary,1.2,0.35,1.8,2.5,0.30,0.35 -muscle_gain,light,1.375,0.4,2.0,2.8,0.30,0.30 -muscle_gain,moderate,1.55,0.4,2.2,3.0,0.25,0.35 -muscle_gain,active,1.725,0.45,2.5,3.3,0.25,0.30 -muscle_gain,very_active,1.9,0.45,2.8,3.5,0.25,0.30 \ No newline at end of file diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/recipe-database.csv b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/recipe-database.csv deleted file mode 100644 index 56738992..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/data/recipe-database.csv +++ /dev/null @@ -1,28 +0,0 @@ -category,name,prep_time,cook_time,total_time,protein_per_serving,complexity,meal_type,restrictions_friendly,batch_friendly -Protein,Grilled Chicken Breast,10,20,30,35,beginner,lunch/dinner,all,yes -Protein,Baked Salmon,5,15,20,22,beginner,lunch/dinner,gluten-free,no -Protein,Lentils,0,25,25,18,beginner,lunch/dinner,vegan,yes -Protein,Ground Turkey,5,15,20,25,beginner,lunch/dinner,all,yes -Protein,Tofu Stir-fry,10,15,25,20,intermediate,lunch/dinner,vegan,no -Protein,Eggs Scrambled,5,5,10,12,beginner,breakfast,vegetarian,no -Protein,Greek Yogurt,0,0,0,17,beginner,snack,vegetarian,no -Carb,Quinoa,5,15,20,8,beginner,lunch/dinner,gluten-free,yes -Carb,Brown Rice,5,40,45,5,beginner,lunch/dinner,gluten-free,yes -Carb,Sweet Potato,5,45,50,4,beginner,lunch/dinner,all,yes -Carb,Oatmeal,2,5,7,5,beginner,breakfast,gluten-free,yes -Carb,Whole Wheat Pasta,2,10,12,7,beginner,lunch/dinner,vegetarian,no -Veggie,Broccoli,5,10,15,3,beginner,lunch/dinner,all,yes -Veggie,Spinach,2,3,5,3,beginner,lunch/dinner,all,no -Veggie,Bell Peppers,5,10,15,1,beginner,lunch/dinner,all,no -Veggie,Kale,5,5,10,3,beginner,lunch/dinner,all,no -Veggie,Avocado,2,0,2,2,beginner,snack/lunch,all,no -Snack,Almonds,0,0,0,6,beginner,snack,gluten-free,no -Snack,Apple with PB,2,0,2,4,beginner,snack,vegetarian,no -Snack,Protein Smoothie,5,0,5,25,beginner,snack,all,no -Snack,Hard Boiled Eggs,0,12,12,6,beginner,snack,vegetarian,yes -Breakfast,Overnight Oats,5,0,5,10,beginner,breakfast,vegan,yes -Breakfast,Protein Pancakes,10,10,20,20,intermediate,breakfast,vegetarian,no -Breakfast,Veggie Omelet,5,10,15,18,intermediate,breakfast,vegetarian,no -Quick Meal,Chicken Salad,10,0,10,30,beginner,lunch,gluten-free,no -Quick Meal,Tuna Wrap,5,0,5,20,beginner,lunch,gluten-free,no -Quick Meal,Buddha Bowl,15,0,15,15,intermediate,lunch,vegan,no \ No newline at end of file diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01-init.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01-init.md deleted file mode 100644 index a3845ce3..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01-init.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -name: 'step-01-init' -description: 'Initialize the nutrition plan workflow by detecting continuation state and creating output document' - -nextStepFile: './step-02-profile.md' -continueFile: './step-01b-continue.md' - -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' -templateFile: '../templates/nutrition-plan.md' ---- - -# Step 1: Workflow Initialization - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and structured planning, user brings their personal preferences and lifestyle constraints -- ✅ Together we produce something better than the sum of our own parts - -### Step-Specific Rules: - -- 🎯 Focus ONLY on initialization and setup -- 🚫 FORBIDDEN to look ahead to future steps -- 💬 Handle initialization professionally -- 🚪 DETECT existing workflow state and handle continuation properly - -## EXECUTION PROTOCOLS: - -- 🎯 Show analysis before taking any action -- 💾 Initialize document and update frontmatter -- 📖 Set up frontmatter `stepsCompleted: [1]` before loading next step -- 🚫 FORBIDDEN to load next step until setup is complete - -## CONTEXT BOUNDARIES: - -- Variables from workflow.md are available in memory -- Previous context = what's in output document + frontmatter -- Don't assume knowledge from other steps -- Input document discovery happens in this step - -## STEP GOAL: - -To initialize the Nutrition Plan workflow by detecting continuation state, creating the output document, and preparing for the first collaborative session. - -## INITIALIZATION SEQUENCE: - -### 1. Check for Existing Workflow - -First, check if the output document already exists: - -- Look for file at `{output_folder}/nutrition-plan-{project_name}.md` -- If exists, read the complete file including frontmatter -- If not exists, this is a fresh workflow - -### 2. Handle Continuation (If Document Exists) - -If the document exists and has frontmatter with `stepsCompleted`: - -- **STOP here** and load `./step-01b-continue.md` immediately -- Do not proceed with any initialization tasks -- Let step-01b handle the continuation logic - -### 3. Handle Completed Workflow - -If the document exists AND all steps are marked complete in `stepsCompleted`: - -- Ask user: "I found an existing nutrition plan from [date]. Would you like to: - 1. Create a new nutrition plan - 2. Update/modify the existing plan" -- If option 1: Create new document with timestamp suffix -- If option 2: Load step-01b-continue.md - -### 4. Fresh Workflow Setup (If No Document) - -If no document exists or no `stepsCompleted` in frontmatter: - -#### A. Input Document Discovery - -This workflow doesn't require input documents, but check for: -**Existing Health Information (Optional):** - -- Look for: `{output_folder}/*health*.md` -- Look for: `{output_folder}/*goals*.md` -- If found, load completely and add to `inputDocuments` frontmatter - -#### B. Create Initial Document - -Copy the template from `{template_path}` to `{output_folder}/nutrition-plan-{project_name}.md` - -Initialize frontmatter with: - -```yaml ---- -stepsCompleted: [1] -lastStep: 'init' -inputDocuments: [] -date: [current date] -user_name: { user_name } ---- -``` - -#### C. Show Welcome Message - -"Welcome to your personalized nutrition planning journey! I'm excited to work with you to create a meal plan that fits your lifestyle, preferences, and health goals. - -Let's begin by getting to know you and your nutrition goals." - -## ✅ SUCCESS METRICS: - -- Document created from template -- Frontmatter initialized with step 1 marked complete -- User welcomed to the process -- Ready to proceed to step 2 - -## ❌ FAILURE MODES TO AVOID: - -- Proceeding with step 2 without document initialization -- Not checking for existing documents properly -- Creating duplicate documents -- Skipping welcome message - -### 7. Present MENU OPTIONS - -Display: **Proceeding to user profile collection...** - -#### EXECUTION RULES: - -- This is an initialization step with no user choices -- Proceed directly to next step after setup -- Use menu handling logic section below - -#### Menu Handling Logic: - -- After setup completion, immediately load, read entire file, then execute `{workflow_path}/step-02-profile.md` to begin user profile collection - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Document created from template -- Frontmatter initialized with step 1 marked complete -- User welcomed to the process -- Ready to proceed to step 2 - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN initialization setup is complete and document is created, will you then immediately load, read entire file, then execute `{workflow_path}/step-02-profile.md` to begin user profile collection. - -### ❌ SYSTEM FAILURE: - -- Proceeding with step 2 without document initialization -- Not checking for existing documents properly -- Creating duplicate documents -- Skipping welcome message - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. - ---- diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01b-continue.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01b-continue.md deleted file mode 100644 index a1ccef43..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-01b-continue.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -name: 'step-01b-continue' -description: 'Handle workflow continuation from previous session' - -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' ---- - -# Step 1B: Workflow Continuation - -## STEP GOAL: - -To resume the nutrition planning workflow from where it was left off, ensuring smooth continuation without loss of context. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and structured planning, user brings their personal preferences and lifestyle constraints - -### Step-Specific Rules: - -- 🎯 Focus ONLY on analyzing and resuming workflow state -- 🚫 FORBIDDEN to modify content completed in previous steps -- 💬 Maintain continuity with previous sessions -- 🚪 DETECT exact continuation point from frontmatter - -## EXECUTION PROTOCOLS: - -- 🎯 Show your analysis of current state before taking action -- 💾 Keep existing frontmatter `stepsCompleted` values -- 📖 Review the template content already generated -- 🚫 FORBIDDEN to modify content completed in previous steps - -## CONTEXT BOUNDARIES: - -- Current nutrition-plan.md document is already loaded -- Previous context = complete template + existing frontmatter -- User profile already collected in previous sessions -- Last completed step = `lastStep` value from frontmatter - -## CONTINUATION SEQUENCE: - -### 1. Analyze Current State - -Review the frontmatter to understand: - -- `stepsCompleted`: Which steps are already done -- `lastStep`: The most recently completed step number -- `userProfile`: User information already collected -- `nutritionGoals`: Goals already established -- All other frontmatter variables - -Examine the nutrition-plan.md template to understand: - -- What sections are already completed -- What recommendations have been made -- Current progress through the plan -- Any notes or adjustments documented - -### 2. Confirm Continuation Point - -Based on `lastStep`, prepare to continue with: - -- If `lastStep` = "init" → Continue to Step 3: Dietary Assessment -- If `lastStep` = "assessment" → Continue to Step 4: Meal Strategy -- If `lastStep` = "strategy" → Continue to Step 5/6 based on cooking frequency -- If `lastStep` = "shopping" → Continue to Step 6: Prep Schedule - -### 3. Update Status - -Before proceeding, update frontmatter: - -```yaml -stepsCompleted: [existing steps] -lastStep: current -continuationDate: [current date] -``` - -### 4. Welcome Back Dialog - -"Welcome back! I see we've completed [X] steps of your nutrition plan. We last worked on [brief description]. Are you ready to continue with [next step]?" - -### 5. Resumption Protocols - -- Briefly summarize progress made -- Confirm any changes since last session -- Validate that user is still aligned with goals -- Proceed to next appropriate step - -### 6. Present MENU OPTIONS - -Display: **Resuming workflow - Select an Option:** [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- IF C: Update frontmatter with continuation info, then load, read entire file, then execute appropriate next step based on `lastStep` - - IF lastStep = "init": load ./step-03-assessment.md - - IF lastStep = "assessment": load ./step-04-strategy.md - - IF lastStep = "strategy": check cooking frequency, then load load ./step-04-shopping.md - - IF lastStep = "shopping": load ./step-06-prep-schedule.md -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and continuation analysis is complete, will you then update frontmatter and load, read entire file, then execute the appropriate next step file as outlined in menu handling logic. - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Correctly identified last completed step -- User confirmed readiness to continue -- Frontmatter updated with continuation date -- Workflow resumed at appropriate step - -### ❌ SYSTEM FAILURE: - -- Skipping analysis of existing state -- Modifying content from previous steps -- Loading wrong next step -- Not updating frontmatter properly - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-02-profile.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-02-profile.md deleted file mode 100644 index 4359cd9d..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-02-profile.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -name: 'step-02-profile' -description: 'Gather comprehensive user profile information through collaborative conversation' - -nextStepFile: './step-03-assessment.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Template References -profileTemplate: '../templates/profile-section.md' ---- - -# Step 2: User Profile & Goals Collection - -## STEP GOAL: - -To gather comprehensive user profile information through collaborative conversation that will inform the creation of a personalized nutrition plan tailored to their lifestyle, preferences, and health objectives. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and structured planning -- ✅ User brings their personal preferences and lifestyle constraints - -### Step-Specific Rules: - -- 🎯 Focus ONLY on collecting profile and goal information -- 🚫 FORBIDDEN to provide meal recommendations or nutrition advice in this step -- 💬 Ask questions conversationally, not like a form -- 🚫 DO NOT skip any profile section - each affects meal recommendations - -## EXECUTION PROTOCOLS: - -- 🎯 Engage in natural conversation to gather profile information -- 💾 After collecting all information, append to {outputFile} -- 📖 Update frontmatter `stepsCompleted: [1, 2]` before loading next step -- 🚫 FORBIDDEN to load next step until user selects 'C' and content is saved - -## CONTEXT BOUNDARIES: - -- Document and frontmatter are already loaded from initialization -- Focus ONLY on collecting user profile and goals -- Don't provide meal recommendations in this step -- This is about understanding, not prescribing - -## PROFILE COLLECTION PROCESS: - -### 1. Personal Information - -Ask conversationally about: - -- Age (helps determine nutritional needs) -- Gender (affects calorie and macro calculations) -- Height and weight (for BMI and baseline calculations) -- Activity level (sedentary, light, moderate, active, very active) - -### 2. Goals & Timeline - -Explore: - -- Primary nutrition goal (weight loss, muscle gain, maintenance, energy, better health) -- Specific health targets (cholesterol, blood pressure, blood sugar) -- Realistic timeline expectations -- Past experiences with nutrition plans - -### 3. Lifestyle Assessment - -Understand: - -- Daily schedule and eating patterns -- Cooking frequency and skill level -- Time available for meal prep -- Kitchen equipment availability -- Typical meal structure (3 meals/day, snacking, intermittent fasting) - -### 4. Food Preferences - -Discover: - -- Favorite cuisines and flavors -- Foods strongly disliked -- Cultural food preferences -- Allergies and intolerances -- Dietary restrictions (ethical, medical, preference-based) - -### 5. Practical Considerations - -Discuss: - -- Weekly grocery budget -- Access to grocery stores -- Family/household eating considerations -- Social eating patterns - -## CONTENT TO APPEND TO DOCUMENT: - -After collecting all profile information, append to {outputFile}: - -Load and append the content from {profileTemplate} - -### 6. Present MENU OPTIONS - -Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- IF A: Execute {advancedElicitationTask} -- IF P: Execute {partyModeWorkflow} -- IF C: Save content to {outputFile}, update frontmatter, 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) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated, will you then load, read entire file, then execute {nextStepFile} to execute and begin dietary needs assessment step. - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Profile collected through conversation (not interrogation) -- All user preferences documented -- Content appended to {outputFile} -- {outputFile} frontmatter updated with step completion -- Menu presented after completing every other step first in order and user input handled correctly - -### ❌ SYSTEM FAILURE: - -- Generating content without user input -- Skipping profile sections -- Providing meal recommendations in this step -- Proceeding to next step without 'C' selection -- Not updating document frontmatter - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-03-assessment.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-03-assessment.md deleted file mode 100644 index 4a06f6ef..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-03-assessment.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -name: 'step-03-assessment' -description: 'Analyze nutritional requirements, identify restrictions, and calculate target macros' - -nextStepFile: './step-04-strategy.md'\ -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Data References -dietaryRestrictionsDB: '../data/dietary-restrictions.csv' -macroCalculatorDB: '../data/macro-calculator.csv' - -# Template References -assessmentTemplate: '../templates/assessment-section.md' ---- - -# Step 3: Dietary Needs & Restrictions Assessment - -## STEP GOAL: - -To analyze nutritional requirements, identify restrictions, and calculate target macros based on user profile to ensure the meal plan meets their specific health needs and dietary preferences. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator - -### Role Reinforcement: - -- ✅ You are a nutrition expert and meal planning specialist -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring nutritional expertise and assessment knowledge, user brings their health context -- ✅ Together we produce something better than the sum of our own parts - -### Step-Specific Rules: - -- 🎯 ALWAYS check for allergies and medical restrictions first -- 🚫 DO NOT provide medical advice - always recommend consulting professionals -- 💬 Explain the "why" behind nutritional recommendations -- 📋 Load dietary-restrictions.csv and macro-calculator.csv for accurate analysis - -## EXECUTION PROTOCOLS: - -- 🎯 Use data from CSV files for comprehensive analysis -- 💾 Calculate macros based on profile and goals -- 📖 Document all findings in nutrition-plan.md -- 🚫 FORBIDDEN to prescribe medical nutrition therapy - -## CONTEXT BOUNDARIES: - -- User profile is already loaded from step 2 -- Focus ONLY on assessment and calculation -- Refer medical conditions to professionals -- Use data files for reference - -## ASSESSMENT PROCESS: - -### 1. Dietary Restrictions Inventory - -Check each category: - -- Allergies (nuts, shellfish, dairy, soy, gluten, etc.) -- Medical conditions (diabetes, hypertension, IBS, etc.) -- Ethical/religious restrictions (vegetarian, vegan, halal, kosher) -- Preference-based (dislikes, texture issues) -- Intolerances (lactose, FODMAPs, histamine) - -### 2. Macronutrient Targets - -Using macro-calculator.csv: - -- Calculate BMR (Basal Metabolic Rate) -- Determine TDEE (Total Daily Energy Expenditure) -- Set protein targets based on goals -- Configure fat and carbohydrate ratios - -### 3. Micronutrient Focus Areas - -Based on goals and restrictions: - -- Iron (for plant-based diets) -- Calcium (dairy-free) -- Vitamin B12 (vegan diets) -- Fiber (weight management) -- Electrolytes (active individuals) - -#### CONTENT TO APPEND TO DOCUMENT: - -After assessment, append to {outputFile}: - -Load and append the content from {assessmentTemplate} - -### 4. Present MENU OPTIONS - -Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- IF A: Execute {advancedElicitationTask} -- IF P: Execute {partyModeWorkflow} -- IF C: Save content to {outputFile}, update frontmatter, then load, read entire file, then execute {nextStepFile} -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#4-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated, will you then load, read entire file, then execute `{workflow_path}/step-04-strategy.md` to execute and begin meal strategy creation step. - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- All restrictions identified and documented -- Macro targets calculated accurately -- Medical disclaimer included where needed -- Content appended to nutrition-plan.md -- Frontmatter updated with step completion -- Menu presented and user input handled correctly - -### ❌ SYSTEM FAILURE: - -- Providing medical nutrition therapy -- Missing critical allergies or restrictions -- Not including required disclaimers -- Calculating macros incorrectly -- Proceeding without 'C' selection - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. - ---- diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-04-strategy.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-04-strategy.md deleted file mode 100644 index 8012ea63..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-04-strategy.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -name: 'step-04-strategy' -description: 'Design a personalized meal strategy that meets nutritional needs and fits lifestyle' - -nextStepFile: './step-05-shopping.md' -alternateNextStepFile: './step-06-prep-schedule.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Data References -recipeDatabase: '../data/recipe-database.csv' - -# Template References -strategyTemplate: '../templates/strategy-section.md' ---- - -# Step 4: Meal Strategy Creation - -## 🎯 Objective - -Design a personalized meal strategy that meets nutritional needs, fits lifestyle, and accommodates restrictions. - -## 📋 MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 NEVER suggest meals without considering ALL user restrictions -- 📖 CRITICAL: Reference recipe-database.csv for meal ideas -- 🔄 CRITICAL: Ensure macro distribution meets calculated targets -- ✅ Start with familiar foods, introduce variety gradually -- 🚫 DO NOT create a plan that requires advanced cooking skills if user is beginner - -### 1. Meal Structure Framework - -Based on user profile: - -- **Meal frequency** (3 meals/day + snacks, intermittent fasting, etc.) -- **Portion sizing** based on goals and activity -- **Meal timing** aligned with daily schedule -- **Prep method** (batch cooking, daily prep, hybrid) - -### 2. Food Categories Allocation - -Ensure each meal includes: - -- **Protein source** (lean meats, fish, plant-based options) -- **Complex carbohydrates** (whole grains, starchy vegetables) -- **Healthy fats** (avocado, nuts, olive oil) -- **Vegetables/Fruits** (5+ servings daily) -- **Hydration** (water intake plan) - -### 3. Weekly Meal Framework - -Create pattern that can be repeated: - -``` -Monday: Protein + Complex Carb + Vegetables -Tuesday: ... -Wednesday: ... -``` - -- Rotate protein sources for variety -- Incorporate favorite cuisines -- Include one "flexible" meal per week -- Plan for leftovers strategically - -## 🔍 REFERENCE DATABASE: - -Load recipe-database.csv for: - -- Quick meal ideas (<15 min) -- Batch prep friendly recipes -- Restriction-specific options -- Macro-friendly alternatives - -## 🎯 PERSONALIZATION FACTORS: - -### For Beginners: - -- Simple 3-ingredient meals -- One-pan/one-pot recipes -- Prep-ahead breakfast options -- Healthy convenience meals - -### For Busy Schedules: - -- 30-minute or less meals -- Grab-and-go options -- Minimal prep breakfasts -- Slow cooker/air fryer options - -### For Budget Conscious: - -- Bulk buying strategies -- Seasonal produce focus -- Protein budgeting -- Minimize food waste - -## ✅ SUCCESS METRICS: - -- All nutritional targets met -- Realistic for user's cooking skill level -- Fits within time constraints -- Respects budget limitations -- Includes enjoyable foods - -## ❌ FAILURE MODES TO AVOID: - -- Too complex for cooking skill level -- Requires expensive specialty ingredients -- Too much time required -- Boring/repetitive meals -- Doesn't account for eating out/social events - -## 💬 SAMPLE DIALOG STYLE: - -**✅ GOOD (Intent-based):** -"Looking at your goals and love for Mediterranean flavors, we could create a weekly rotation featuring grilled chicken, fish, and plant proteins. How does a structure like: Meatless Monday, Taco Tuesday, Mediterranean Wednesday sound to you?" - -**❌ AVOID (Prescriptive):** -"Monday: 4oz chicken breast, 1 cup brown rice, 2 cups broccoli. Tuesday: 4oz salmon..." - -## 📊 APPEND TO TEMPLATE: - -Begin building nutrition-plan.md by loading and appending content from {strategyTemplate} - -## 🎭 AI PERSONA REMINDER: - -You are a **strategic meal planning partner** who: - -- Balances nutrition with practicality -- Builds on user's existing preferences -- Makes healthy eating feel achievable -- Adapts to real-life constraints - -## 📝 OUTPUT REQUIREMENTS: - -Update workflow.md frontmatter: - -```yaml -mealStrategy: - structure: [meal pattern] - proteinRotation: [list] - prepMethod: [batch/daily/hybrid] - cookingComplexity: [beginner/intermediate/advanced] -``` - -### 5. Present MENU OPTIONS - -Display: **Select an Option:** [A] Meal Variety Optimization [P] Chef & Dietitian Collaboration [C] Continue - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- HALT and AWAIT ANSWER -- IF A: Execute `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` -- IF P: Execute `{project-root}/_bmad/core/workflows/party-mode/workflow.md` -- IF C: Save content to nutrition-plan.md, update frontmatter, check cooking frequency: - - IF cooking frequency > 2x/week: load, read entire file, then execute `{workflow_path}/step-05-shopping.md` - - IF cooking frequency ≤ 2x/week: load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated: - -- IF cooking frequency > 2x/week: load, read entire file, then execute `{workflow_path}/step-05-shopping.md` to generate shopping list -- IF cooking frequency ≤ 2x/week: load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` to skip shopping list diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-05-shopping.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-05-shopping.md deleted file mode 100644 index ab565a63..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-05-shopping.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -name: 'step-05-shopping' -description: 'Create a comprehensive shopping list that supports the meal strategy' - -nextStepFile: './step-06-prep-schedule.md' -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Template References -shoppingTemplate: '../templates/shopping-section.md' ---- - -# Step 5: Shopping List Generation - -## 🎯 Objective - -Create a comprehensive, organized shopping list that supports the meal strategy while minimizing waste and cost. - -## 📋 MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 CRITICAL: This step is OPTIONAL - skip if user cooks <2x per week -- 📖 CRITICAL: Cross-reference with existing pantry items -- 🔄 CRITICAL: Organize by store section for efficient shopping -- ✅ Include quantities based on serving sizes and meal frequency -- 🚫 DO NOT forget staples and seasonings - Only proceed if: - -```yaml -cookingFrequency: "3-5x" OR "daily" -``` - -Otherwise, skip to Step 5: Prep Schedule - -## 📊 Shopping List Organization: - -### 1. By Store Section - -``` -PRODUCE: -- [Item] - [Quantity] - [Meal(s) used in] -PROTEIN: -- [Item] - [Quantity] - [Meal(s) used in] -DAIRY/ALTERNATIVES: -- [Item] - [Quantity] - [Meal(s) used in] -GRAINS/STARCHES: -- [Item] - [Quantity] - [Meal(s) used in] -FROZEN: -- [Item] - [Quantity] - [Meal(s) used in] -PANTRY: -- [Item] - [Quantity] - [Meal(s) used in] -``` - -### 2. Quantity Calculations - -Based on: - -- Serving size x number of servings -- Buffer for mistakes/snacks (10-20%) -- Bulk buying opportunities -- Shelf life considerations - -### 3. Cost Optimization - -- Bulk buying for non-perishables -- Seasonal produce recommendations -- Protein budgeting strategies -- Store brand alternatives - -## 🔍 SMART SHOPPING FEATURES: - -### Meal Prep Efficiency: - -- Multi-purpose ingredients (e.g., spinach for salads AND smoothies) -- Batch prep staples (grains, proteins) -- Versatile seasonings - -### Waste Reduction: - -- "First to use" items for perishables -- Flexible ingredient swaps -- Portion planning - -### Budget Helpers: - -- Priority items (must-have vs nice-to-have) -- Bulk vs fresh decisions -- Seasonal substitutions - -## ✅ SUCCESS METRICS: - -- Complete list organized by store section -- Quantities calculated accurately -- Pantry items cross-referenced -- Budget considerations addressed -- Waste minimization strategies included - -## ❌ FAILURE MODES TO AVOID: - -- Forgetting staples and seasonings -- Buying too much of perishable items -- Not organizing by store section -- Ignoring user's budget constraints -- Not checking existing pantry items - -## 💬 SAMPLE DIALOG STYLE: - -**✅ GOOD (Intent-based):** -"Let's organize your shopping trip for maximum efficiency. I'll group items by store section. Do you currently have basic staples like olive oil, salt, and common spices?" - -**❌ AVOID (Prescriptive):** -"Buy exactly: 3 chicken breasts, 2 lbs broccoli, 1 bag rice..." - -## 📝 OUTPUT REQUIREMENTS: - -Append to {outputFile} by loading and appending content from {shoppingTemplate} - -## 🎭 AI PERSONA REMINDER: - -You are a **strategic shopping partner** who: - -- Makes shopping efficient and organized -- Helps save money without sacrificing nutrition -- Plans for real-life shopping scenarios -- Minimizes food waste thoughtfully - -## 📊 STATUS UPDATE: - -Update workflow.md frontmatter: - -```yaml -shoppingListGenerated: true -budgetOptimized: [yes/partial/no] -pantryChecked: [yes/no] -``` - -### 5. Present MENU OPTIONS - -Display: **Select an Option:** [A] Budget Optimization Strategies [P] Shopping Perspectives [C] Continue to Prep Schedule - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- HALT and AWAIT ANSWER -- IF A: Execute `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` -- IF P: Execute `{project-root}/_bmad/core/workflows/party-mode/workflow.md` -- IF C: Save content to nutrition-plan.md, update frontmatter, then load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document and frontmatter is updated, will you then load, read entire file, then execute `{workflow_path}/step-06-prep-schedule.md` to execute and begin meal prep schedule creation. diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-06-prep-schedule.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-06-prep-schedule.md deleted file mode 100644 index 4db06828..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/steps-c/step-06-prep-schedule.md +++ /dev/null @@ -1,188 +0,0 @@ ---- -name: 'step-06-prep-schedule' -description: "Create a realistic meal prep schedule that fits the user's lifestyle" - -outputFile: '{output_folder}/nutrition-plan-{project_name}.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - -# Template References -prepScheduleTemplate: '../templates/prep-schedule-section.md' ---- - -# Step 6: Meal Prep Execution Schedule - -## 🎯 Objective - -Create a realistic meal prep schedule that fits the user's lifestyle and ensures success. - -## 📋 MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 NEVER suggest a prep schedule that requires more time than user has available -- 📖 CRITICAL: Base schedule on user's actual cooking frequency -- 🔄 CRITICAL: Include storage and reheating instructions -- ✅ Start with a sustainable prep routine -- 🚫 DO NOT overwhelm with too much at once - -### 1. Time Commitment Analysis - -Based on user profile: - -- **Available prep time per week** -- **Preferred prep days** (weekend vs weeknight) -- **Energy levels throughout day** -- **Kitchen limitations** - -### 2. Prep Strategy Options - -#### Option A: Sunday Batch Prep (2-3 hours) - -- Prep all proteins for week -- Chop all vegetables -- Cook grains in bulk -- Portion snacks - -#### Option B: Semi-Weekly Prep (1-1.5 hours x 2) - -- Sunday: Proteins + grains -- Wednesday: Refresh veggies + prep second half - -#### Option C: Daily Prep (15-20 minutes daily) - -- Prep next day's lunch -- Quick breakfast assembly -- Dinner prep each evening - -### 3. Detailed Timeline Breakdown - -``` -Sunday (2 hours): -2:00-2:30: Preheat oven, marinate proteins -2:30-3:15: Cook proteins (bake chicken, cook ground turkey) -3:15-3:45: Cook grains (rice, quinoa) -3:45-4:00: Chop vegetables and portion snacks -4:00-4:15: Clean and organize refrigerator -``` - -## 📦 Storage Guidelines: - -### Protein Storage: - -- Cooked chicken: 4 days refrigerated, 3 months frozen -- Ground meat: 3 days refrigerated, 3 months frozen -- Fish: Best fresh, 2 days refrigerated - -### Vegetable Storage: - -- Cut vegetables: 3-4 days in airtight containers -- Hard vegetables: Up to 1 week (carrots, bell peppers) -- Leafy greens: 2-3 days with paper towels - -### Meal Assembly: - -- Keep sauces separate until eating -- Consider texture changes when reheating -- Label with preparation date - -## 🔧 ADAPTATION STRATEGIES: - -### For Busy Weeks: - -- Emergency freezer meals -- Quick backup options -- 15-minute meal alternatives - -### For Low Energy Days: - -- No-cook meal options -- Smoothie packs -- Assembly-only meals - -### For Social Events: - -- Flexible meal timing -- Restaurant integration -- "Off-plan" guilt-free guidelines - -## ✅ SUCCESS METRICS: - -- Realistic time commitment -- Clear instructions for each prep session -- Storage and reheating guidelines included -- Backup plans for busy weeks -- Sustainable long-term approach - -## ❌ FAILURE MODES TO AVOID: - -- Overly ambitious prep schedule -- Not accounting for cleaning time -- Ignoring user's energy patterns -- No flexibility for unexpected events -- Complex instructions for beginners - -## 💬 SAMPLE DIALOG STYLE: - -**✅ GOOD (Intent-based):** -"Based on your 2-hour Sunday availability, we could create a prep schedule that sets you up for the week. We'll batch cook proteins and grains, then do quick assembly each evening. How does that sound with your energy levels?" - -**❌ AVOID (Prescriptive):** -"You must prep every Sunday from 2-4 PM. No exceptions." - -## 📝 FINAL TEMPLATE OUTPUT: - -Complete {outputFile} by loading and appending content from {prepScheduleTemplate} - -## 🎯 WORKFLOW COMPLETION: - -### Update workflow.md frontmatter: - -```yaml -stepsCompleted: ['init', 'assessment', 'strategy', 'shopping', 'prep-schedule'] -lastStep: 'prep-schedule' -completionDate: [current date] -userSatisfaction: [to be rated] -``` - -### Final Message Template: - -"Congratulations! Your personalized nutrition plan is complete. Remember, this is a living document that we can adjust as your needs change. Check in weekly for the first month to fine-tune your approach!" - -## 📊 NEXT STEPS FOR USER: - -1. Review complete plan -2. Shop for ingredients -3. Execute first prep session -4. Note any adjustments needed -5. Schedule follow-up review - -### 5. Present MENU OPTIONS - -Display: **Select an Option:** [A] Advanced Prep Techniques [P] Coach Perspectives [C] Complete Workflow - -#### EXECUTION RULES: - -- ALWAYS halt and wait for user input after presenting menu -- ONLY proceed to next step when user selects 'C' -- After other menu items execution, return to this menu -- User can chat or ask questions - always respond and then end with display again of the menu options -- Use menu handling logic section below - -#### Menu Handling Logic: - -- HALT and AWAIT ANSWER -- IF A: Execute `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml` -- IF P: Execute `{project-root}/_bmad/core/workflows/party-mode/workflow.md` -- IF C: Update frontmatter with all steps completed, mark workflow complete, display final message -- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#6-present-menu-options) - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN C is selected and content is saved to document: - -1. Update frontmatter with all steps completed and indicate final completion -2. Display final completion message -3. End workflow session - -**Final Message:** "Congratulations! Your personalized nutrition plan is complete. Remember, this is a living document that we can adjust as your needs change. Check in weekly for the first month to fine-tune your approach!" diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/assessment-section.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/assessment-section.md deleted file mode 100644 index 610f397c..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/assessment-section.md +++ /dev/null @@ -1,25 +0,0 @@ -## 📊 Daily Nutrition Targets - -**Daily Calories:** [calculated amount] -**Protein:** [grams]g ([percentage]% of calories) -**Carbohydrates:** [grams]g ([percentage]% of calories) -**Fat:** [grams]g ([percentage]% of calories) - ---- - -## ⚠️ Dietary Considerations - -### Allergies & Intolerances - -- [List of identified restrictions] -- [Cross-reactivity notes if applicable] - -### Medical Considerations - -- [Conditions noted with professional referral recommendation] -- [Special nutritional requirements] - -### Preferences - -- [Cultural/ethical restrictions] -- [Strong dislikes to avoid] diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/nutrition-plan.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/nutrition-plan.md deleted file mode 100644 index 8c67f79a..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/nutrition-plan.md +++ /dev/null @@ -1,68 +0,0 @@ -# Personalized Nutrition Plan - -**Created:** {{date}} -**Author:** {{user_name}} - ---- - -## ✅ Progress Tracking - -**Steps Completed:** - -- [ ] Step 1: Workflow Initialization -- [ ] Step 2: User Profile & Goals -- [ ] Step 3: Dietary Assessment -- [ ] Step 4: Meal Strategy -- [ ] Step 5: Shopping List _(if applicable)_ -- [ ] Step 6: Meal Prep Schedule - -**Last Updated:** {{date}} - ---- - -## 📋 Executive Summary - -**Primary Goal:** [To be filled in Step 1] - -**Daily Nutrition Targets:** - -- Calories: [To be calculated in Step 2] -- Protein: [To be calculated in Step 2]g -- Carbohydrates: [To be calculated in Step 2]g -- Fat: [To be calculated in Step 2]g - -**Key Considerations:** [To be filled in Step 2] - ---- - -## 🎯 Your Nutrition Goals - -[Content to be added in Step 1] - ---- - -## 🍽️ Meal Framework - -[Content to be added in Step 3] - ---- - -## 🛒 Shopping List - -[Content to be added in Step 4 - if applicable] - ---- - -## ⏰ Meal Prep Schedule - -[Content to be added in Step 5] - ---- - -## 📝 Notes & Next Steps - -[Add any notes or adjustments as you progress] - ---- - -**Medical Disclaimer:** This nutrition plan is for educational purposes only and is not medical advice. Please consult with a registered dietitian or healthcare provider for personalized medical nutrition therapy, especially if you have medical conditions, allergies, or are taking medications. diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/prep-schedule-section.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/prep-schedule-section.md deleted file mode 100644 index 1143cd51..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/prep-schedule-section.md +++ /dev/null @@ -1,29 +0,0 @@ -## Meal Prep Schedule - -### [Chosen Prep Strategy] - -### Weekly Prep Tasks - -- [Day]: [Tasks] - [Time needed] -- [Day]: [Tasks] - [Time needed] - -### Daily Assembly - -- Morning: [Quick tasks] -- Evening: [Assembly instructions] - -### Storage Guide - -- Proteins: [Instructions] -- Vegetables: [Instructions] -- Grains: [Instructions] - -### Success Tips - -- [Personalized success strategies] - -### Weekly Review Checklist - -- [ ] Check weekend schedule -- [ ] Review meal plan satisfaction -- [ ] Adjust next week's plan diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/profile-section.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/profile-section.md deleted file mode 100644 index 3784c1d9..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/profile-section.md +++ /dev/null @@ -1,47 +0,0 @@ -## 🎯 Your Nutrition Goals - -### Primary Objective - -[User's main goal and motivation] - -### Target Timeline - -[Realistic timeframe and milestones] - -### Success Metrics - -- [Specific measurable outcomes] -- [Non-scale victories] -- [Lifestyle improvements] - ---- - -## 👤 Personal Profile - -### Basic Information - -- **Age:** [age] -- **Gender:** [gender] -- **Height:** [height] -- **Weight:** [current weight] -- **Activity Level:** [activity description] - -### Lifestyle Factors - -- **Daily Schedule:** [typical day structure] -- **Cooking Frequency:** [how often they cook] -- **Cooking Skill:** [beginner/intermediate/advanced] -- **Available Time:** [time for meal prep] - -### Food Preferences - -- **Favorite Cuisines:** [list] -- **Disliked Foods:** [list] -- **Allergies:** [list] -- **Dietary Restrictions:** [list] - -### Budget & Access - -- **Weekly Budget:** [range] -- **Shopping Access:** [stores available] -- **Special Considerations:** [family, social, etc.] diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/shopping-section.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/shopping-section.md deleted file mode 100644 index 6a172159..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/shopping-section.md +++ /dev/null @@ -1,37 +0,0 @@ -## Weekly Shopping List - -### Check Pantry First - -- [List of common staples to verify] - -### Produce Section - -- [Item] - [Quantity] - [Used in] - -### Protein - -- [Item] - [Quantity] - [Used in] - -### Dairy/Alternatives - -- [Item] - [Quantity] - [Used in] - -### Grains/Starches - -- [Item] - [Quantity] - [Used in] - -### Frozen - -- [Item] - [Quantity] - [Used in] - -### Pantry - -- [Item] - [Quantity] - [Used in] - -### Money-Saving Tips - -- [Personalized savings strategies] - -### Flexible Swaps - -- [Alternative options if items unavailable] diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/strategy-section.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/strategy-section.md deleted file mode 100644 index 9c11d05b..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/templates/strategy-section.md +++ /dev/null @@ -1,18 +0,0 @@ -## Weekly Meal Framework - -### Protein Rotation - -- Monday: [Protein source] -- Tuesday: [Protein source] -- Wednesday: [Protein source] -- Thursday: [Protein source] -- Friday: [Protein source] -- Saturday: [Protein source] -- Sunday: [Protein source] - -### Meal Timing - -- Breakfast: [Time] - [Type] -- Lunch: [Time] - [Type] -- Dinner: [Time] - [Type] -- Snacks: [As needed] diff --git a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/workflow.md b/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/workflow.md deleted file mode 100644 index b24c0cb7..00000000 --- a/src/modules/bmb/workflows/workflow/data/examples/meal-prep-nutrition/workflow.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -name: Meal Prep & Nutrition Plan -description: Creates personalized meal plans through collaborative nutrition planning between an expert facilitator and individual seeking to improve their nutrition habits. -web_bundle: true -standalone: false ---- - -# Meal Prep & Nutrition Plan Workflow - -**Goal:** Create personalized meal plans through collaborative nutrition planning between an expert facilitator and individual seeking to improve their nutrition habits. - -**Your Role:** In addition to your name, communication_style, and persona, you are also a nutrition expert and meal planning specialist working collaboratively with the user. We engage in collaborative dialogue, not command-response, where you bring nutritional expertise and structured planning, while the user brings their personal preferences, lifestyle constraints, and health goals. Work together to create a sustainable, enjoyable nutrition plan. - ---- - -## WORKFLOW ARCHITECTURE - -This uses **step-file architecture** for disciplined execution: - -### Core Principles - -- **Micro-file Design**: Each step is a self contained instruction file that is a part of an overall workflow that must be followed exactly -- **Just-In-Time Loading**: Only the current step file is in memory - never load future step files until told to do so -- **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed -- **State Tracking**: Document progress in output file frontmatter using `stepsCompleted` array when a workflow produces a document -- **Append-Only Building**: Build documents by appending content as directed to the output file - -### Step Processing Rules - -1. **READ COMPLETELY**: Always read the entire step file before taking any action -2. **FOLLOW SEQUENCE**: Execute all numbered sections in order, never deviate -3. **WAIT FOR INPUT**: If a menu is presented, halt and wait for user selection -4. **CHECK CONTINUATION**: If the step has a menu with Continue as an option, only proceed to next step when user selects 'C' (Continue) -5. **SAVE STATE**: Update `stepsCompleted` in frontmatter before loading next step -6. **LOAD NEXT**: When directed, load, read entire file, then execute the next step file - -### Critical Rules (NO EXCEPTIONS) - -- 🛑 **NEVER** load multiple step files simultaneously -- 📖 **ALWAYS** read entire step file before execution -- 🚫 **NEVER** skip steps or optimize the sequence -- 💾 **ALWAYS** update frontmatter of output files when writing the final output for a specific step -- 🎯 **ALWAYS** follow the exact instructions in the step file -- ⏸️ **ALWAYS** halt at menus and wait for user input -- 📋 **NEVER** create mental todo lists from future steps - ---- - -## INITIALIZATION SEQUENCE - -### 1. Configuration Loading - -Load and read full config from {project-root}/_bmad/bmm/config.yaml and resolve: - -- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language`, `user_skill_level` - -### 2. First Step EXECUTION - -Load, read the full file and then execute `./steps-c/step-01-init.md` to begin the workflow. diff --git a/src/modules/bmb/workflows/workflow/data/frontmatter-standards.md b/src/modules/bmb/workflows/workflow/data/frontmatter-standards.md index ba3dda17..86432a92 100644 --- a/src/modules/bmb/workflows/workflow/data/frontmatter-standards.md +++ b/src/modules/bmb/workflows/workflow/data/frontmatter-standards.md @@ -14,14 +14,14 @@ ## Standard Variables (Always Available) -| Variable | Example Value | -| ----------------- | -------------------------------------- | -| `{project-root}` | `/Users/user/dev/BMAD-METHOD` | -| `{project_name}` | `my-project` | -| `{output_folder}` | `/Users/user/dev/BMAD-METHOD/output` | -| `{user_name}` | `Brian` | -| `{communication_language}` | `english` | -| `{document_output_language}` | `english` | +| Variable | Example Value | +| ---------------------------- | ------------------------------------ | +| `{project-root}` | `/Users/user/dev/BMAD-METHOD` | +| `{project_name}` | `my-project` | +| `{output_folder}` | `/Users/user/dev/BMAD-METHOD/output` | +| `{user_name}` | `Brian` | +| `{communication_language}` | `english` | +| `{document_output_language}` | `english` | --- @@ -101,7 +101,7 @@ nextStepFile: './step-02-foo.md' ### 1. Step to Step (SAME folder) = ./filename.md ```yaml # ❌ WRONG -nextStepFile: '{workflow_path}/steps/step-02.md' +nextStepFile: './step-02.md' nextStepFile: '{project-root}/_bmad/bmm/workflows/foo/steps/step-02.md' # ✅ CORRECT @@ -145,14 +145,14 @@ outputFile: '{output_folder}/output.md' These patterns are **NEVER ALLOWED** in workflow step frontmatter: -| Pattern | Why It's Wrong | -|---------|----------------| -| `workflow_path: '{project-root}/...'` | Use relative paths instead | -| `thisStepFile: './step-XX.md'` | Almost never used - remove unless actually referenced | -| `workflowFile: './workflow.md'` | Almost never used - remove unless actually referenced | -| `{workflow_path}/steps/...` | Use `./step-XX.md` (same folder) | -| `{workflow_path}/templates/...` | Use `../template.md` (parent folder) | -| `{workflow_path}/data/...` | Use `./data/file.md` (subfolder) | +| Pattern | Why It's Wrong | +| ------------------------------------- | ----------------------------------------------------- | +| `workflow_path: '{project-root}/...'` | Use relative paths instead | +| `thisStepFile: './step-XX.md'` | Almost never used - remove unless actually referenced | +| `workflowFile: './workflow.md'` | Almost never used - remove unless actually referenced | +| `./...` | Use `./step-XX.md` (same folder) | +| `{workflow_path}/templates/...` | Use `../template.md` (parent folder) | +| `{workflow_path}/data/...` | Use `./data/file.md` (subfolder) | --- @@ -160,13 +160,13 @@ These patterns are **NEVER ALLOWED** in workflow step frontmatter: Use `snake_case` with descriptive prefixes: -| Pattern | Usage | Example | -| --------- | ---------------------- | -------------------------- | -| `{*_File}` | File references | `outputFile`, `nextStepFile` | -| `{*_Task}` | Task references | `advancedElicitationTask` | -| `{*_Workflow}` | Workflow references | `partyModeWorkflow` | -| `{*_Template}` | Templates | `productBriefTemplate` | -| `{*_Data}` | Data files | `dietaryData` | +| Pattern | Usage | Example | +| -------------- | ------------------- | ---------------------------- | +| `{*_File}` | File references | `outputFile`, `nextStepFile` | +| `{*_Task}` | Task references | `advancedElicitationTask` | +| `{*_Workflow}` | Workflow references | `partyModeWorkflow` | +| `{*_Template}` | Templates | `productBriefTemplate` | +| `{*_Data}` | Data files | `dietaryData` | --- diff --git a/src/modules/bmb/workflows/workflow/data/step-type-patterns.md b/src/modules/bmb/workflows/workflow/data/step-type-patterns.md index 4bc9478a..772b6be3 100644 --- a/src/modules/bmb/workflows/workflow/data/step-type-patterns.md +++ b/src/modules/bmb/workflows/workflow/data/step-type-patterns.md @@ -11,7 +11,7 @@ All steps share this skeleton: --- name: 'step-[N]-[name]' description: '[what it does]' -[file references - ONLY used variables] +[file references - relative path and only if used in this steps file] --- # Step [N]: [Name] @@ -76,10 +76,9 @@ description: '[what it does]' --- name: 'step-01-init' description: 'Initialize [workflow]' -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-[name].md' +nextStepFile: './step-02-[name].md' outputFile: '{output_folder}/[output].md' -templateFile: '{workflow_path}/templates/[template].md' +templateFile: '../templates/[template].md' --- ``` @@ -97,7 +96,7 @@ templateFile: '{workflow_path}/templates/[template].md' **Frontmatter:** Add `continueFile` reference ```yaml -continueFile: '{workflow_path}/steps/step-01b-continue.md' +continueFile: './step-01b-continue.md' ``` **Logic:** @@ -140,7 +139,7 @@ workflowFile: '{workflow_path}/workflow.md' ```yaml --- name: 'step-[N]-[name]' -nextStepFile: '{workflow_path}/steps/step-[N+1]-[name].md' +nextStepFile: './step-[N+1]-[name].md' outputFile: '{output_folder}/[output].md' advancedElicitationTask: '{project-root}/.../advanced-elicitation/workflow.xml' partyModeWorkflow: '{project-root}/.../party-mode/workflow.md' @@ -161,8 +160,8 @@ partyModeWorkflow: '{project-root}/.../party-mode/workflow.md' **Frontmatter:** ```yaml -nextStepFile: '{workflow_path}/steps/step-[default].md' -altStepFile: '{workflow_path}/steps/step-[alternate].md' +nextStepFile: './step-[default].md' +altStepFile: './step-[alternate].md' ``` **Menu:** Custom letters (L/R/etc.) with branching logic @@ -297,16 +296,16 @@ Mark workflow complete ## Step Size Guidelines -| Type | Recommended | Maximum | -| ------------------------ | ----------- | ------- | -| Init | < 100 | 150 | -| Init (with discovery) | < 150 | 200 | -| Continuation | < 150 | 200 | -| Middle (simple) | < 150 | 200 | -| Middle (complex) | < 200 | 250 | -| Branch | < 150 | 200 | -| Validation sequence | < 100 | 150 | -| Final polish | < 150 | 200 | -| Final | < 150 | 200 | +| Type | Recommended | Maximum | +| --------------------- | ----------- | ------- | +| Init | < 100 | 150 | +| Init (with discovery) | < 150 | 200 | +| Continuation | < 150 | 200 | +| Middle (simple) | < 150 | 200 | +| Middle (complex) | < 200 | 250 | +| Branch | < 150 | 200 | +| Validation sequence | < 100 | 150 | +| Final polish | < 150 | 200 | +| Final | < 150 | 200 | **If exceeded:** Split into multiple steps or extract to `/data/` files. diff --git a/src/modules/bmb/workflows/workflow/data/subprocess-optimization-patterns.md b/src/modules/bmb/workflows/workflow/data/subprocess-optimization-patterns.md new file mode 100644 index 00000000..5aa17a34 --- /dev/null +++ b/src/modules/bmb/workflows/workflow/data/subprocess-optimization-patterns.md @@ -0,0 +1,386 @@ +# Subprocess Optimization Patterns + +**Purpose:** Context-saving and performance patterns for subprocess/subagent usage in BMAD workflows. + +--- + +## Golden Rules + +1. **Subprocess when operations benefit from parallelization or context isolation** +2. **Return ONLY findings to parent, not full file contents** (massive context savings) +3. **Always provide graceful fallback** for LLMs without subprocess capability +4. **Match pattern to operation type** - grep/regex, deep analysis, or data operations + +--- + +## The Three Patterns + +### Pattern 1: Single Subprocess for Grep/Regex Across Many Files + +**Use when:** You can run one command across many files and just need matches/failures + +**Context savings:** Massive - returns only matching lines, not full file contents + +**Template:** +```markdown +**Launch a subprocess that:** + +1. Runs grep/regex across all target files +2. Extracts only matching lines or failures +3. Returns structured findings to parent + +```bash +# Example: Find hardcoded paths across all files +for file in steps-c/*.md; do + grep -n "{project-root}/" "$file" || echo "No matches in: $file" +done +``` + +**Subprocess returns to parent:** +```json +{ + "violations": [ + {"file": "step-02.md", "line": 45, "match": "{project-root}/_bmad/bmb/..."} + ], + "summary": {"total_files_checked": 10, "violations_found": 3} +} +``` + +**❌ BAD - Loads all files into parent:** +```markdown +"For EACH file, load the file and search for {project-root}/" +# Parent context gets 10 full files × 200 lines = 2000 lines loaded +``` + +**✅ GOOD - Single subprocess returns only matches:** +```markdown +"Launch a subprocess to grep all files for {project-root}/, return only matches" +# Parent context gets only matching lines = ~50 lines returned +``` + +--- + +### Pattern 2: Separate Subprocess Per File for Deep Analysis + +**Use when:** You need to read and understand each file's prose, logic, quality, or flow + +**Context savings:** High - each subprocess returns analysis, not full content + +**Template:** +```markdown +**DO NOT BE LAZY - For EACH file, launch a subprocess that:** + +1. Loads that file +2. Reads and analyzes content deeply (prose, logic, flow, quality) +3. Returns structured analysis findings to parent for aggregation + +**Subprocess returns to parent:** +```json +{ + "file": "step-03-inquiry.md", + "analysis": { + "instruction_style": "Intent-based ✅", + "collaborative_quality": "Good - asks 1-2 questions at a time", + "issues": ["Line 67: Laundry list of 7 questions detected"] + }, + "optimization_opportunities": ["Could use Pattern 1 for menu validation checks"] +} +``` + +**Example use cases:** +- Instruction style validation (read prose, classify intent vs prescriptive) +- Collaborative quality assessment (analyze question patterns) +- Frontmatter compliance (check each variable is used) +- Step type validation (verify step follows its type pattern) + +**❌ BAD - Parent loads all files:** +```markdown +"Load every step file and analyze its instruction style" +# Parent context: 10 files × 200 lines = 2000 lines +``` + +**✅ GOOD - Per-file subprocess returns analysis:** +```markdown +"DO NOT BE LAZY - For EACH step file, launch a subprocess to analyze instruction style, return findings" +# Parent context: 10 structured analysis objects = ~200 lines +``` + +--- + +### Pattern 3: Subprocess for Data File Operations + +**Use when:** Loading reference data, finding fuzzy/best matches, summarizing key findings from large datasets + +**Context savings:** Massive - returns only matching rows or summaries, not entire data file + +**Template:** +```markdown +**Launch a subprocess that:** + +1. Loads the data file (reference docs, CSV, knowledge base) +2. Performs lookup, matching, or summarization +3. Returns ONLY relevant rows or key findings to parent + +**Subprocess returns to parent:** +```json +{ + "matches": [ + {"row": 42, "rule": "Frontmatter variables must be used in body", "applies": true}, + {"row": 87, "rule": "Relative paths for same-folder refs", "applies": true} + ], + "summary": {"total_rules": 150, "applicable_rules": 2} +} +``` + +**Example use cases:** +- **Reference rules lookup**: Load 500-line standards file, return only applicable rules +- **CSV fuzzy matching**: Load product database, find best matching category +- **Document summarization**: Review 10 documents, extract only key requirements +- **Knowledge base search**: Search large knowledge base, return only top matches + +**❌ BAD - Parent loads entire data file:** +```markdown +"Load {dataFile} with 500 rules and find applicable ones" +# Parent context: All 500 rules loaded (5000+ lines) +``` + +**✅ GOOD - Subprocess returns only matches:** +```markdown +"Launch subprocess to load {dataFile}, find applicable rules, return only those" +# Parent context: Only 2 applicable rules returned (~50 lines) +``` + +**Advanced example - Document review:** +```markdown +**Review 10 requirement documents to extract key details:** + +"DO NOT BE LAZY - For EACH document, launch a subprocess that: +1. Loads that document +2. Extracts key requirements, decisions, constraints +3. Returns structured summary to parent + +**Subprocess returns:** +```json +{ + "document": "prd-requirements.md", + "key_findings": { + "requirements": ["User auth", "Data export", "API integration"], + "decisions": ["Use JWT", "PostgreSQL", "REST API"], + "constraints": ["HIPAA compliant", "Max 100ms response"] + } +} +``` + +# Parent gets summaries, not 10 full documents +``` + +--- + +## Pattern 4: Parallel Execution Opportunities + +**Use when:** Multiple independent operations could run simultaneously + +**Performance gain:** Reduced total execution time via parallelization + +**Template:** +```markdown +**Launch subprocesses in parallel that:** + +1. Each subprocess handles one independent operation +2. All subprocesses run simultaneously +3. Parent aggregates results when all complete + +**Example:** +```markdown +# Instead of sequential (3× time): +"Check frontmatter, then check menu, then check step types" + +# Use parallel (1× time): +"Launch 3 subprocesses in parallel: +- Subprocess 1: Check frontmatter compliance +- Subprocess 2: Check menu compliance +- Subprocess 3: Check step type compliance +Aggregate all findings" +``` + +--- + +## Graceful Fallback Pattern + +**CRITICAL:** Always ensure LLMs without subprocess capability can still execute + +**Universal Rule:** +```markdown +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread +``` + +**Implementation:** +```markdown +### Step-Specific Rules: +- 🎯 Use subprocess optimization when available - [pattern description] +- 💬 If subprocess unavailable, perform operations in main thread + +### Execution: +- LLMs with subprocess: Launch subprocess, aggregate findings +- LLMs without subprocess: Perform same operations sequentially in main context +``` + +--- + +## Return Pattern for Subprocesses + +**Subprocesses must either:** + +**Option A: Update report directly** +```markdown +"Subprocess loads validation report, appends findings, saves" +# Parent doesn't need to aggregate +``` + +**Option B: Return structured findings to parent** +```markdown +"Subprocess returns JSON findings to parent for aggregation" +# Parent compiles all subprocess results into report +``` + +**✅ GOOD - Structured return:** +```json +{ + "file": "step-02.md", + "violations": ["..."], + "opportunities": ["..."], + "priority": "HIGH" +} +``` + +**❌ BAD - Returns full content:** +```markdown +"Subprocess loads file and returns full content to parent" +# Defeats purpose - parent gets full context anyway +``` + +--- + +## When to Use Each Pattern + +| Pattern | Use When | Context Savings | Example | +| -------- | -------- | --------------- | ------- | +| **Pattern 1: Single subprocess for grep/regex** | Finding patterns across many files | Massive (1000:1 ratio) | Validate frontmatter across all steps | +| **Pattern 2: Per-file subprocess for deep analysis** | Understanding prose, logic, quality | High (10:1 ratio) | Instruction style validation | +| **Pattern 3: Data file operations** | Loading reference data, matching, summarizing | Massive (100:1 ratio) | Find applicable rules from standards | +| **Pattern 4: Parallel execution** | Independent operations that can run simultaneously | Performance gain | Frontmatter + Menu + Step type checks | + +--- + +## Step File Integration + +**How to add subprocess patterns to step files:** + +### 1. Universal Rule (add to all steps) +```markdown +### Universal Rules: +- ⚙️ TOOL/SUBPROCESS FALLBACK: If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread +``` + +### 2. Step-Specific Rules (pattern-specific) +```markdown +### Step-Specific Rules: +- 🎯 [Brief: which pattern applies] +- 💬 Subprocess must either update report OR return findings to parent +- 🚫 DO NOT BE LAZY - [specific "do not be lazy" guidance if applicable] +``` + +### 3. Command Sequence (detailed pattern) +```markdown +### 1. [Operation Name] + +**[Appropriate subprocess directive]:** + +For [Pattern 1 - grep/regex]: +"Launch a subprocess that runs [command] across all files, returns [results]" + +For [Pattern 2 - per-file analysis]: +"DO NOT BE LAZY - For EACH file, launch a subprocess that [analyzes], returns [findings]" + +For [Pattern 3 - data ops]: +"Launch a subprocess that loads [data file], performs [operation], returns [results]" +``` + +--- + +## Subprocess Loading Reference Data (Meta-Pattern!) + +**Context-saving optimization:** + +When a step needs to understand subprocess patterns with examples, load this reference file in a subprocess: + +```markdown +### Step-Specific Rules: +- 🎯 Analyze subprocess optimization opportunities - use subprocess to load reference patterns for detailed examples +- 💬 Subprocess loads {subprocessPatterns} to understand patterns deeply, returns specific opportunities +- 🚫 If subprocess unavailable: Load {subprocessPatterns} in main context + +**Execution:** +- With subprocess: Launch subprocess to load this file, understand patterns, identify opportunities +- Without subprocess: Load this file in main context (larger context but still functional) +``` + +**This step file (step-08b) demonstrates this pattern!** + +--- + +## Validation Checklist + +For subprocess optimization in step files: + +- [ ] Universal fallback rule present +- [ ] Step-specific rules mention which pattern applies +- [ ] Command sequence uses appropriate subprocess directive +- [ ] "DO NOT BE LAZY" language included for Pattern 2 +- [ ] Return pattern specified (update report OR return to parent) +- [ ] Graceful fallback addressed +- [ ] Context savings estimated (if applicable) +- [ ] Pattern matches operation type (grep/regex, deep analysis, or data ops) + +--- + +## Anti-Patterns to Avoid + +### ❌ Loading full files into parent +```markdown +"For EACH file, load the file, analyze it, and add to report" +# Defeats purpose - parent gets full context +``` + +### ❌ Subprocess returns raw content +```markdown +"Subprocess loads file and returns content to parent" +# Parent gets full content anyway +``` + +### ❌ No graceful fallback +```markdown +"Use subprocess to [operation]" +# LLMs without subprocess cannot proceed +``` + +### ❌ Wrong pattern for operation +```markdown +"Launch a subprocess per file to grep for pattern" +# Should use Pattern 1 (single subprocess for all files) +``` + +### ❌ Missing return specification +```markdown +"Launch a subprocess to analyze files" +# Unclear what subprocess returns to parent +``` + +--- + +## See Also + +- `step-file-rules.md` - When to extract content to data files +- `step-08b-subprocess-optimization.md` - Validation step that identifies optimization opportunities +- `../steps-v/step-02b-path-violations.md` - Example of Pattern 1 (grep across files) +- `../steps-v/step-08b-subprocess-optimization.md` - Example of Pattern 2 (per-file analysis) diff --git a/src/modules/bmb/workflows/workflow/steps-c/step-01b-continuation.md b/src/modules/bmb/workflows/workflow/steps-c/step-01b-continuation.md new file mode 100644 index 00000000..f3280dbd --- /dev/null +++ b/src/modules/bmb/workflows/workflow/steps-c/step-01b-continuation.md @@ -0,0 +1,3 @@ +# TODO - THIS IS A PLACE HOLDER NOT IMPLEMENTED YET IN THIS FLOW + +YOU CAN CALL OUT AS A WARNING IN ANY VALIDATION CHECKS of this specific workflow - but this is a known pending todo to implement. diff --git a/src/modules/bmb/workflows/workflow/steps-c/step-06-design.md b/src/modules/bmb/workflows/workflow/steps-c/step-06-design.md index f3b1da67..90e1baa2 100644 --- a/src/modules/bmb/workflows/workflow/steps-c/step-06-design.md +++ b/src/modules/bmb/workflows/workflow/steps-c/step-06-design.md @@ -15,6 +15,7 @@ outputFormatStandards: '../data/output-format-standards.md' inputDiscoveryStandards: '../data/input-discovery-standards.md' workflowChainingStandards: '../data/workflow-chaining-standards.md' trimodalWorkflowStructure: '../data/trimodal-workflow-structure.md' +subprocessPatterns: '../data/subprocess-optimization-patterns.md' --- # Step 6: Workflow Structure Design @@ -66,7 +67,7 @@ To collaboratively design the workflow structure, step sequence, and interaction ## DESIGN REFERENCE MATERIALS: -When designing, you may load these data standards as needed: +When designing, you will load these data standards as needed (ideally within subprocesses that can return the relevant insights during the design step): - {stepTemplate} - Step file structure template - {stepTypePatterns} - Templates for different step types (init, middle, branch, validation, final) @@ -77,8 +78,7 @@ When designing, you may load these data standards as needed: - {workflowChainingStandards} - How workflows connect in sequences - {trimodalWorkflowStructure} - Tri-modal workflow patterns (if applicable) -Example workflow: -- `{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition/workflow.md` +Example [Workflow.md](../workflow.md) for reference of a perfect workflow.md with some complex options (not all workflows will offer multiple next step options like this one - most will just auto route right to a step 1 file) ## MANDATORY SEQUENCE @@ -175,6 +175,47 @@ Design quality assurance: - How can users recover from errors? - What constitutes successful completion? +### 6a. Subprocess Optimization Design + +Load {subprocessPatterns} to understand subprocess optimization patterns that can save context and improve performance during workflow execution. + +Ask the user: + +"**Should we design this workflow to leverage subprocess optimization patterns?** Consider: + +- **Pattern 1 (Grep/Regex):** Will any step search across many files or documents for patterns? +- **Pattern 2 (Deep Analysis):** Will any step analyze multiple files for prose, logic, quality, or flow? +- **Pattern 3 (Data Operations):** Will any step load large reference data, knowledge bases, or datasets? +- **Pattern 4 (Parallel Execution):** Can any validation or analysis checks run in parallel instead of sequentially? + +If **YES** to any of these, we should design those steps with subprocess optimization in mind." + +**If subprocess optimization is applicable:** + +For each step that could benefit from subprocesses: +- Identify which pattern(s) apply (Pattern 1, 2, 3, or 4) +- Design what the subprocess should return (findings only, not full content) +- Plan graceful fallback for LLMs without subprocess capability +- Document optimization strategy in the build plan + +**Example subprocess integration:** + +```markdown +### Step-Specific Rules: +- 🎯 Analyze X files for Y - use subprocess per file (Pattern 2) +- 💬 Subprocess returns structured findings, not full content +- ⚙️ If subprocess unavailable: Perform analysis in main thread +``` + +**Document in the plan:** + +For each step identified for subprocess optimization, record: +- Step number and name +- Pattern type(s) to apply +- What the subprocess will analyze +- Expected return structure +- Fallback approach + ### 7. Special Features Design Identify unique requirements: diff --git a/src/modules/bmb/workflows/workflow/steps-c/step-08-build-step-01.md b/src/modules/bmb/workflows/workflow/steps-c/step-08-build-step-01.md index 8179ed35..17f59142 100644 --- a/src/modules/bmb/workflows/workflow/steps-c/step-08-build-step-01.md +++ b/src/modules/bmb/workflows/workflow/steps-c/step-08-build-step-01.md @@ -11,6 +11,7 @@ frontmatterStandards: '../data/frontmatter-standards.md' menuHandlingStandards: '../data/menu-handling-standards.md' outputFormatStandards: '../data/output-format-standards.md' inputDiscoveryStandards: '../data/input-discovery-standards.md' +subprocessPatterns: '../data/subprocess-optimization-patterns.md' advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' --- @@ -266,6 +267,49 @@ Display continuation status and offer to proceed. **If supporting files are needed, create them in `data/` folder and update step-01 frontmatter to reference them.** +### 5a. Apply Subprocess Optimization (If Designed) + +**Check the approved design from step 6:** Was subprocess optimization identified for step-01? + +**If YES, apply the appropriate pattern(s):** + +Load {subprocessPatterns} and implement the subprocess optimization: + +1. **Identify the pattern(s) from the design:** + - Pattern 1: Single subprocess for grep/regex across many files + - Pattern 2: Per-file subprocess for deep analysis + - Pattern 3: Subprocess for data file operations + - Pattern 4: Parallel execution of independent operations + +2. **Add subprocess-specific Step-Specific Rules:** + ```markdown + ### Step-Specific Rules: + - 🎯 [Brief description of which pattern applies] + - 💬 Subprocess must either update report OR return findings to parent + - 🚫 DO NOT BE LAZY - [specific guidance if Pattern 2] + - ⚙️ TOOL/SUBPROCESS FALLBACK: If subprocess unavailable, perform in main thread + ``` + +3. **Implement subprocess directives in the MANDATORY SEQUENCE:** + - Use appropriate subprocess language: + - Pattern 1: "Launch a subprocess that runs [command] across all files, returns [results]" + - Pattern 2: "DO NOT BE LAZY - For EACH file, launch a subprocess that [analyzes], returns [findings]" + - Pattern 3: "Launch a subprocess that loads [data file], performs [operation], returns [results]" + - Pattern 4: "Launch subprocesses in parallel that [operations], aggregate results" + +4. **Ensure return patterns are specified:** + - Subprocess updates report directly OR + - Subprocess returns structured findings to parent for aggregation + +5. **Verify graceful fallback is documented:** + - Universal fallback rule in Universal Rules + - Step-specific fallback in Step-Specific Rules + - Clear instructions for LLMs without subprocess capability + +**If NO subprocess optimization was designed for step-01:** + +Skip this section and proceed to document build in plan. + ### 6. Document Build in Plan Append to {workflowPlanFile}: diff --git a/src/modules/bmb/workflows/workflow/steps-c/step-09-build-next-step.md b/src/modules/bmb/workflows/workflow/steps-c/step-09-build-next-step.md index e7dcbb5e..54b7a960 100644 --- a/src/modules/bmb/workflows/workflow/steps-c/step-09-build-next-step.md +++ b/src/modules/bmb/workflows/workflow/steps-c/step-09-build-next-step.md @@ -11,6 +11,7 @@ frontmatterStandards: '../data/frontmatter-standards.md' menuHandlingStandards: '../data/menu-handling-standards.md' outputFormatStandards: '../data/output-format-standards.md' csvDataFileStandards: '../data/csv-data-file-standards.md' +subprocessPatterns: '../data/subprocess-optimization-patterns.md' advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' --- @@ -97,6 +98,49 @@ Confirm: "The next step to build is **step-{N}-{name}** which is a [step type]. **Load {outputFormatStandards}** if this step outputs to document. +### 2a. Apply Subprocess Optimization (If Designed for This Step) + +**Check the approved design from step 6:** Was subprocess optimization identified for this step? + +**If YES, apply the appropriate pattern(s):** + +Load {subprocessPatterns} and implement the subprocess optimization for this step: + +1. **Identify the pattern(s) from the design for this step:** + - Pattern 1: Single subprocess for grep/regex across many files + - Pattern 2: Per-file subprocess for deep analysis + - Pattern 3: Subprocess for data file operations + - Pattern 4: Parallel execution of independent operations + +2. **Add subprocess-specific Step-Specific Rules to this step:** + ```markdown + ### Step-Specific Rules: + - 🎯 [Brief description of which pattern applies] + - 💬 Subprocess must either update report OR return findings to parent + - 🚫 DO NOT BE LAZY - [specific guidance if Pattern 2] + - ⚙️ TOOL/SUBPROCESS FALLBACK: If subprocess unavailable, perform in main thread + ``` + +3. **Implement subprocess directives in the MANDATORY SEQUENCE:** + - Use appropriate subprocess language: + - Pattern 1: "Launch a subprocess that runs [command] across all files, returns [results]" + - Pattern 2: "DO NOT BE LAZY - For EACH file, launch a subprocess that [analyzes], returns [findings]" + - Pattern 3: "Launch a subprocess that loads [data file], performs [operation], returns [results]" + - Pattern 4: "Launch subprocesses in parallel that [operations], aggregate results" + +4. **Ensure return patterns are specified:** + - Subprocess updates report directly OR + - Subprocess returns structured findings to parent for aggregation + +5. **Verify graceful fallback is documented:** + - Universal fallback rule in Universal Rules + - Step-specific fallback in Step-Specific Rules + - Clear instructions for LLMs without subprocess capability + +**If NO subprocess optimization was designed for this step:** + +Skip this section and proceed to build the step file. + ### 3. Build the Step File **Load {stepTemplate}** for base structure. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md b/src/modules/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md new file mode 100644 index 00000000..36624900 --- /dev/null +++ b/src/modules/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md @@ -0,0 +1,109 @@ +--- +name: 'step-01-validate' +description: 'Initialize validation: create report and check file structure & size' + +parallel-steps: ['./step-01b-structure.md', './step-02-frontmatter-validation.md', './step-02b-path-violations.md', './step-03-menu-validation.md' './step-04-step-type-validation.md', './step-05-output-format-validation.md', './step-06-validation-design-check.md', './step-07-instruction-style-check.md', './step-08-collaborative-experience-check.md', './step-08b-subprocess-optimization.md', './step-09-cohesive-review.md'] +nextStep: './step-10-report-complete.md' +targetWorkflowPath: '{workflow_folder_path}' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +partialValidationFragmentFile: '{workflow_folder_path}/validation-report-{step-name}.md' +stepFileRules: '../data/step-file-rules.md' +--- + +# Validation Step 1: File Structure & Size + +## STEP GOAL: + +To create the validation report that all parallel tasks that this will kick off will be able to report to. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 DO NOT BE LAZY - LOAD AND REVIEW EVERY FILE +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step, ensure entire file is read +- ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context + +### Step-Specific Rules: + +- 🎯 Create validation report with header structure using subprocess optimization when available +- 🚫 DO NOT skip checking any file - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation +- 🚪 This is validation - systematic and thorough + +## EXECUTION PROTOCOLS: + +- 🎯 Load and check EVERY file in the workflow using subprocess optimization when available - single subprocess for bash/grep operations, separate subprocess per file for size analysis +- 💾 Subprocesses must either update validation report OR return findings for parent aggregation +- 📖 Save report before loading next validation step +- 🚫 DO NOT halt for user input - validation runs to completion + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip or shortcut. IF there is no subprocess type tool available that can achieve running a process in a subprocess and handle starting multiple - let the user know they need to restart validation specifically NOT using max-parallel mode and HALT and end this workflow! + +### 1. Create Validation Report + +Create {validationReportFile} with header structure: + +```markdown +--- +validationDate: [current date] +workflowName: {new_workflow_name} +workflowPath: {workflow_folder_path} +validationStatus: IN_PROGRESS +--- + +# Validation Report: {new_workflow_name} + +**Validation Started:** [current date] +**Validator:** BMAD Workflow Validation System +**Standards Version:** BMAD Workflow Standards + +{{TOC}} + +{{#each parallel-steps}} +## {{title}} + +{{results}} + +{{/each}} + +``` + +Save the file (without the handlebars output of course) before proceeding. + +### 2. Launch Mass Parallelization and consolidate results! + +Utilizing a subprocess for each step file in {parallel-steps} - complete all of these - with the caveat indication to the subprocess that at the end of the specific step it will not on its own proceed to the nextStep file! + +Critically - instruct that instructions to write out or return results within each subprocess for a step file in the array MUST ensure that it writes it to {partialValidationFragmentFile} file name even though the step file it loads might indicate otherwise! + +Once every process has completed - there should be a separate validation file for each given step. Also - each step should return JUST its results and recommendations to you also. + +### 3. CRITICAL WRITES to the report. + +You MUST now ensure that all results are added to the final cohesive {validationReportFile} following the indicated handlebars sequence - and then after appending each subprocess report to a level 2 section - and the TOC to accurately reflect the documents state using proper markdown linking conventions to the actual heading names you created. + +IF a file is missing or empty from a given subprocess - but it did return to you results - you will append those results - ONLY do this if you cannot access the specific steps file produced or it is empty though. IE File from subprocess is primary, results returned from step complete are backup insurance. + +### 4. Proceed to Completion Step + +ONLY after ensuring all has been written to the final report, let the user know about the final report that is a consolidation - and they can ignore or remove the smaller files or use them as they like to focus on a specific validation (but its all in the master doc), and then proceed to {nextStep}, ensuring that in the {nextStep} it is focused on the {validationReportFile} + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Validation report created with header structure +- EVERY section of the template is filled in with content from a subprocess that added the results of its area of expertise + +### ❌ SYSTEM FAILURE: + +- Output Report does not exist with content all filled in +- EVERY step listed in {parallel-steps} was not executed in a subprocess and completed with its results captured in output diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-01-validate.md b/src/modules/bmb/workflows/workflow/steps-v/step-01-validate.md index f605f15a..27325912 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-01-validate.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-01-validate.md @@ -3,9 +3,9 @@ name: 'step-01-validate' description: 'Initialize validation: create report and check file structure & size' nextStepFile: './step-02-frontmatter-validation.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' stepFileRules: '../data/step-file-rules.md' --- @@ -23,28 +23,22 @@ To create the validation report and check that the workflow has correct file str - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: -- 🎯 Create validation report with header structure -- 🚫 DO NOT skip checking any file -- 💬 Append findings to report, then auto-load next step +- 🎯 Create validation report with header structure using subprocess optimization when available +- 🚫 DO NOT skip checking any file - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation - 🚪 This is validation - systematic and thorough ## EXECUTION PROTOCOLS: -- 🎯 Load and check EVERY file in the workflow -- 💾 Append findings to validation report +- 🎯 Load and check EVERY file in the workflow using subprocess optimization when available - single subprocess for bash/grep operations, separate subprocess per file for size analysis +- 💾 Subprocesses must either update validation report OR return findings for parent aggregation - 📖 Save report before loading next validation step - 🚫 DO NOT halt for user input - validation runs to completion -## CONTEXT BOUNDARIES: - -- Workflow has been built in steps-c/ -- Check the entire folder structure -- Verify all required files exist -- Check file sizes against limits - ## MANDATORY SEQUENCE **CRITICAL:** Follow this sequence exactly. Do not skip or shortcut. @@ -57,7 +51,7 @@ Create {validationReportFile} with header structure: --- validationDate: [current date] workflowName: {new_workflow_name} -workflowPath: {targetWorkflowPath} +workflowPath: {workflow_folder_path} validationStatus: IN_PROGRESS --- @@ -76,6 +70,9 @@ validationStatus: IN_PROGRESS ## Frontmatter Validation *Pending...* +## Critical Path Violations +*Pending...* + ## Menu Handling Validation *Pending...* @@ -94,9 +91,15 @@ validationStatus: IN_PROGRESS ## Collaborative Experience Check *Pending...* +## Subprocess Optimization Opportunities +*Pending...* + ## Cohesive Review *Pending...* +## Plan Quality Validation +*Pending...* + ## Summary *Pending...* ``` @@ -110,19 +113,27 @@ Load {stepFileRules} to understand: ### 3. Check Folder Structure -**DO NOT BE LAZY - List EVERY folder and file:** +**Launch a single subprocess that:** -Use bash commands to list the entire structure: +1. Lists the entire folder structure using bash commands +2. Verifies all required folders and files exist +3. Returns structured findings to parent for aggregation + +```bash +# List folder structure +find {targetWorkflowPath} -type f -name "*.md" | sort +``` + +**Expected structure:** ``` {targetWorkflowPath}/ ├── workflow.md -├── steps-c/ +├── steps*/ potentially more than one folder like this (such as steps-v, steps-c - the folder name is not critical but should make sense) │ ├── step-01-init.md │ ├── step-01b-continue.md (if continuable) │ ├── step-02-*.md │ └── ... -├── steps-v/ -│ └── [this validation] +├── */ # any other random files - critical will be later ensure its all used - aside from potential documentation for user later. ├── data/ │ └── [as needed] └── templates/ @@ -131,53 +142,34 @@ Use bash commands to list the entire structure: **Check:** - ✅ workflow.md exists -- ✅ steps-c/ folder exists with all step files -- ✅ data/ folder exists (may be empty) -- ✅ templates/ folder exists (may be empty) -- ✅ No unexpected files -- ✅ Folder names follow conventions +- ✅ step files are in a well organized folder +- ✅ non step reference files are organized in other folders such as data, templates, or others that make sense for the workflow +- ✅ Folder names make sense ### 4. Check File Sizes -**DO NOT BE LAZY - Check EVERY step file:** +**DO NOT BE LAZY - For EACH step file in steps-c/, launch a subprocess that:** -For each file in `steps-c/`: -1. Read the file -2. Count lines -3. Check against limits: - - < 200 lines: ✅ Good - - 200-250 lines: ⚠️ Approaching limit - - > 250 lines: ❌ Exceeds limit +1. Loads that step file +2. Counts lines and checks against size limits +3. Returns structured findings to parent for aggregation -**Check for Large Data Files:** +**Limits:** +- < 200 lines: ✅ Good +- 200-250 lines: ⚠️ Approaching limit +- > 250 lines: ❌ Exceeds limit -For each file in `data/` folder: -1. Check file size in lines -2. If > 500 lines: ⚠️ WARNING - Large data file detected -3. If > 1000 lines: ❌ ERROR - Data file too large for direct loading +**Subprocess returns:** File name, line count, status (Good/Approaching limit/Exceeds limit), and any issues found. -**For large data files, recommend:** -- Create an index/csv/yaml so LLM knows what's available and can load specific sections -- Use sharding technique (core module has sharding tool) to split large files -- Consider if all data is needed or if lookup/reference pattern would work better +**Subprocess must either:** +- Update validation report directly with findings, OR +- Return structured findings to parent for aggregation into report -**Report format:** -```markdown -### File Size Check - -| File | Lines | Status | -|------|-------|--------| -| step-01-init.md | 180 | ✅ Good | -| step-02-*.md | 245 | ⚠️ Approaching limit | -| step-03-*.md | 267 | ❌ Exceeds limit - should split | - -### Data File Size Check - -| Data File | Lines | Status | -|-----------|-------|--------| -| reference-data.csv | 150 | ✅ Good | -| large-data.md | 2500 | ❌ Too large - use sharding or create index | -``` +**Document findings in validation report:** +- List all step files checked with their line counts +- Note any files approaching or exceeding size limits (<200 recommended, 250 max) +- Check data and reference files for size issues (large files should be sharded or indexed) +- Identify specific size violations and recommendations ### 5. Verify File Presence @@ -191,28 +183,12 @@ From the design in {workflowPlanFile}, verify: Replace the "## File Structure & Size" section in {validationReportFile} with actual findings: -```markdown -## File Structure & Size - -### Folder Structure -[Report findings - is structure correct?] - -### Files Present -[Report findings - are all required files present?] - -### File Size Check -[Table as shown above] - -### Issues Found -[List any issues: -- Missing files -- Extra files -- Size violations -- Naming convention violations] - -### Status -✅ PASS / ❌ FAIL / ⚠️ WARNINGS -``` +**Document the following:** +- Folder structure assessment +- Required files presence check +- File size analysis results +- List of any issues found (missing files, extra files, size violations, naming issues) +- Overall validation status (PASS/FAIL/WARNINGS) ### 7. Save Report and Auto-Proceed diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-01b-structure.md b/src/modules/bmb/workflows/workflow/steps-v/step-01b-structure.md new file mode 100644 index 00000000..927f03fb --- /dev/null +++ b/src/modules/bmb/workflows/workflow/steps-v/step-01b-structure.md @@ -0,0 +1,152 @@ +--- +name: 'step-01-validate' +description: 'Initialize validation: create report and check file structure & size' + +nextStepFile: './step-02-frontmatter-validation.md' +targetWorkflowPath: '{workflow_folder_path}' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +stepFileRules: '../data/step-file-rules.md' +--- + +# Validation Step 1: File Structure & Size + +## STEP GOAL: + +To create the validation report and check that the workflow has correct file structure and all step files are within size limits. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 DO NOT BE LAZY - LOAD AND REVIEW EVERY FILE +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step, ensure entire file is read +- ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context + +### Step-Specific Rules: + +- 🎯 Create validation report with header structure using subprocess optimization when available +- 🚫 DO NOT skip checking any file - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation +- 🚪 This is validation - systematic and thorough + +## EXECUTION PROTOCOLS: + +- 🎯 Load and check EVERY file in the workflow using subprocess optimization when available - single subprocess for bash/grep operations, separate subprocess per file for size analysis +- 💾 Subprocesses must either update validation report OR return findings for parent aggregation +- 📖 Save report before loading next validation step +- 🚫 DO NOT halt for user input - validation runs to completion + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip or shortcut. + +### 1. Check Folder Structure + +**Launch a single subprocess that will do all of the following for items:** + +1. Load {stepFileRules} to understand: +- File size limits (<200 recommended, 250 max) +- Required folder structure +- Required files +2. Lists the entire folder structure using bash commands +3. Verifies all required folders and files exist +4. Returns structured findings to parent for aggregation + +```bash +# List folder structure +find {targetWorkflowPath} -type f -name "*.md" | sort +``` + +**Expected structure:** +``` +{targetWorkflowPath}/ +├── workflow.md +├── steps*/ potentially more than one folder like this (such as steps-v, steps-c - the folder name is not critical but should make sense) +│ ├── step-01-init.md +│ ├── step-01b-continue.md (if continuable) +│ ├── step-02-*.md +│ └── ... +├── */ # any other random files - critical will be later ensure its all used - aside from potential documentation for user later. +├── data/ +│ └── [as needed] +└── templates/ + └── [as needed] +``` + +**Check:** +- ✅ workflow.md exists +- ✅ step files are in a well organized folder +- ✅ non step reference files are organized in other folders such as data, templates, or others that make sense for the workflow +- ✅ Folder names make sense + +### 4. Check File Sizes + +**DO NOT BE LAZY - For EACH step file in steps-c/, launch a subprocess that:** + +1. Loads that step file +2. Counts lines and checks against size limits +3. Returns structured findings to parent for aggregation + +**Limits:** +- < 200 lines: ✅ Good +- 200-300 lines: ⚠️ Approaching limit +- > 300 lines: ❌ Exceeds limit + +**Subprocess returns:** File name, line count, status (Good/Approaching limit/Exceeds limit), and any issues found. + +**Subprocess must either:** +- Update validation report directly with findings, OR +- Return structured findings to parent for aggregation into report + +**Document findings in validation report:** +- List all step files checked with their line counts +- Note any files approaching or exceeding size limits (<200 recommended, 250 max) +- Check data and reference files for size issues (large files should be sharded or indexed) +- Identify specific size violations and recommendations + +### 5. Verify File Presence + +From the design in {workflowPlanFile}, verify: +- Every step from design has a corresponding file +- Step files are numbered sequentially +- No gaps in numbering +- Final step exists + +### 6. Document all findings in a report + +**Document the following:** +- Folder structure assessment +- Required files presence check +- File size analysis results +- List of any issues found (missing files, extra files, size violations, naming issues) +- Overall validation status (PASS/FAIL/WARNINGS) + +### 7. Save Report + +**CRITICAL:** Save the validation report BEFORE COMPLETING THIS STEP + +**Display:** "**File Structure & Size validation complete.**" + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Validation report created with header structure +- EVERY file checked for structure and size +- Findings appended to report +- Report saved before proceeding +- Next validation step loaded + +### ❌ SYSTEM FAILURE: + +- Not checking every file +- Skipping size checks +- Not saving report before proceeding +- Halting for user input + +**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check EVERY file. Auto-proceed through all validation steps. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md b/src/modules/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md index 71778037..09dde534 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md @@ -2,9 +2,9 @@ name: 'step-02-frontmatter-validation' description: 'Validate frontmatter compliance across all step files' -nextStepFile: './step-03-menu-validation.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' +nextStepFile: './step-02b-path-violations.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' frontmatterStandards: '../data/frontmatter-standards.md' --- @@ -18,23 +18,24 @@ To validate that EVERY step file's frontmatter follows the frontmatter standards ### Universal Rules: -- 🛑 DO NOT BE LAZY - LOAD AND REVIEW EVERY FILE +- 🛑 DO NOT BE LAZY - VALIDATE EVERY FILE'S FRONTMATTER - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread ### Step-Specific Rules: -- 🎯 Load and validate EVERY step file's frontmatter -- 🚫 DO NOT skip any files or checks -- 💬 Append findings to report, then auto-load next step -- 🚪 This is validation - systematic and thorough +- 🎯 Validate EVERY step file's frontmatter using subprocess optimization - each file in its own subprocess +- 🚫 DO NOT skip any files or checks - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation +- 🚪 This is validation - systematic and thorough using per-file deep analysis (Pattern 2) ## EXECUTION PROTOCOLS: -- 🎯 Load frontmatter standards first -- 💾 Check EVERY file against standards -- 📖 Append findings to validation report +- 🎯 Load frontmatter standards first, then validate each file in its own subprocess for deep analysis +- 💾 Subprocesses must either update validation report OR return findings for parent aggregation +- 📖 Aggregate all findings into validation report before loading next step - 🚫 DO NOT halt for user input - validation runs to completion ## CONTEXT BOUNDARIES: @@ -60,12 +61,22 @@ Load {frontmatterStandards} to understand validation criteria. - `workflow_path: '...'` - use relative paths instead - `thisStepFile: '...'` - remove unless actually referenced in body - `workflowFile: '...'` - remove unless actually referenced in body -- `{workflow_path}/steps/...` - use `./step-XX.md` +- `./...` - use `./step-XX.md` - `{workflow_path}/templates/...` - use `../template.md` -### 2. Validate EVERY Step File - Systematic Algorithm +### 2. Validate EVERY Step File - Systematic Algorithm with Subprocess Optimization -**DO NOT BE LAZY - For EACH step file:** +**DO NOT BE LAZY - For EACH step file, launch a subprocess that:** + +1. Loads that file +2. Loads {frontmatterStandards} to understand validation criteria +3. Performs all frontmatter validation checks on that file (extract variables, check usage, validate paths) +4. **EITHER** updates the validation report directly with its findings +5. **OR** returns structured findings to parent for aggregation + +**SUBPROCESS ANALYSIS PATTERN:** + +For each file, the subprocess performs the following deep analysis: #### Step 2.1: Extract Frontmatter Variables @@ -125,34 +136,29 @@ if path contains "{project-root}" and is internal workflow reference: MARK_AS_VIOLATION("Internal paths must be relative, not project-root") ``` -### 3. Document Findings +**RETURN FORMAT:** -Create report table: +Subprocess returns file name, frontmatter compliance status, unused variables found, path violations, and overall status (PASS/FAIL). Include specific variable names and violation details for documentation. -```markdown -### Frontmatter Validation Results +Check ALL files systematically. Return findings for compilation and appendage to validation report. -| File | Required | All Vars Used | Relative Paths | No Forbidden | Status | -|------|----------|---------------|----------------|-------------|--------| -| step-01-init.md | ✅ | ❌ Unused: thisStepFile, workflowFile | ✅ | ✅ | ❌ FAIL | -| step-02-vision.md | ✅ | ✅ | ✅ | ✅ | ✅ PASS | -``` +### 3. Aggregate Findings and Document Results + +Document frontmatter validation results in the validation report showing: +- Which files were checked +- Frontmatter compliance status for each file +- Unused variables found in each file +- Path violations detected +- Overall pass/fail status for each file ### 4. List All Violations -For EACH file with violations: - -```markdown -### Violations Found - -**step-01-init.md:** -- ❌ Unused variable: `thisStepFile` (defined but {thisStepFile} never appears in body) -- ❌ Unused variable: `workflowFile` (defined but {workflowFile} never appears in body) -- ❌ Forbidden pattern: `workflow_path` variable found (use relative paths instead) - -**step-02-vision.md:** -- ✅ All checks passed -``` +Document all violations found in the validation report, including: +- Specific files with violations +- Unused variable names and why they're unused +- Forbidden patterns detected with explanation +- Path format violations with details +- Files that passed all checks ### 5. Append to Report @@ -173,20 +179,21 @@ Then immediately load, read entire file, then execute {nextStepFile}. ### ✅ SUCCESS: -- EVERY step file's frontmatter validated using systematic algorithm -- Each variable checked for usage in step body -- Each path checked for proper relative format +- EVERY step file validated using subprocess optimization (Pattern 2: per-file deep analysis) +- Each subprocess validates frontmatter, checks variable usage, validates paths +- Structured findings returned to parent OR report updated directly by subprocesses - All violations documented with specific variable names -- Findings appended to report +- Findings aggregated into validation report - Report saved before proceeding - Next validation step loaded ### ❌ SYSTEM FAILURE: -- Not checking every file -- Not systematically checking each variable for usage +- Not validating every file using subprocess optimization +- Not systematically checking each variable for usage in subprocess - Missing forbidden pattern detection - Not documenting violations with specific details +- Not returning structured findings OR updating report from subprocess - Not saving report before proceeding -**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. For EACH variable in frontmatter, verify it's used in the body. For EACH path, verify it's relative. Auto-proceed through all validation steps. +**Master Rule:** Validation is systematic and thorough using subprocess optimization. DO NOT BE LAZY. For EACH file, launch a subprocess that validates frontmatter, checks variable usage, validates paths, and returns findings. Auto-proceed through all validation steps. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-02b-path-violations.md b/src/modules/bmb/workflows/workflow/steps-v/step-02b-path-violations.md new file mode 100644 index 00000000..cfb442cc --- /dev/null +++ b/src/modules/bmb/workflows/workflow/steps-v/step-02b-path-violations.md @@ -0,0 +1,265 @@ +--- +name: 'step-02b-path-violations' +description: 'CRITICAL: Catch path violations step-02 misses - hardcoded paths, dead links, module awareness' + +nextStepFile: './step-03-menu-validation.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +--- + +# Validation Step 2b: Critical Path Violations + +## STEP GOAL: + +CRITICAL path checks that step-02's frontmatter validation MISSES. This catches violations in CONTENT (not frontmatter), dead links, and module path unawareness using grep/bash (ideally in a subprocess that can update the report or return all results to parent). + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 DO NOT BE LAZY - CHECK EVERY FILE +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction in this file references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the instructed outcome in your main context thread and available toolset + +### Step-Specific Rules: + +- 🎯 Perform systematic bash/grep checks using subprocess optimization - single subprocess for grep/regex across many files +- 🚫 DO NOT skip any file or violation type - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation +- 🚪 This catches what step-02 misses - CONTENT violations, dead links, module awareness, links in code and not in front matter + +## EXECUTION PROTOCOLS: + +- 🎯 Perform systematic checks using subprocess optimization when available - single subprocess for grep/regex across many files, separate subprocess per file for deep analysis, subprocess for data file operations +- 💾 Subprocesses must either update validation report OR return findings for parent aggregation +- 📖 Save report before continuing to {nextStepFile} + +## CONTEXT BOUNDARIES: + +- Step-02 validated frontmatter (variables, relative paths) +- This step validates CONTENT and file existence with a Focus on: hardcoded paths in body, dead links, module awareness in every file found under {targetWorkflowPath} +- **CRITICAL:** Output files the workflow itself being validated produces won't exist during validation - a contract document creation workflow might have a reference to said output - but it of course will not yet exist during workflow validation + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip or shortcut. + +### 1. Perform Critical Path Violation Detection + +**Perform systematic path violation checks on EVERY workflow file using subprocess optimization when available - each file in its own subprocess:** + +**SUBPROCESS EXECUTION PATTERN:** + +For EACH file in the workflow being validated, launch a subprocess that: +1. Loads any reference files it needs (to avoid bloating parent context) +2. Performs all required checks on that file +3. **EITHER** updates the validation report directly with its findings +4. **OR** returns structured findings to parent for aggregation + +**DO NOT BE LAZY - Use appropriate subprocess pattern for each check:** +- **Single subprocess for grep/regex**: Run one command across many files, return matches +- **Separate subprocess per file**: When deep analysis of each file's content is required +- **Subprocess for data operations**: Load reference data, find matches, summarize key findings + +**PHASE 1: Identify Config Variables (EXCEPTIONS to path checks):** + +Read {targetWorkflowPath}/workflow.md to extract known config variables from the Configuration Loading section: + +```bash +# Extract config variables from workflow.md +grep -A 20 "Configuration Loading" {targetWorkflowPath}/workflow.md | grep -E "^\s+-\s+`\{[^}]+\}`" | sed "s/.*//;s/[`']//g" +``` + +**Store these as KNOWN_CONFIG_VARIABLES for reference in later checks.** + +These are EXCEPTIONS - paths using these variables are VALID even if not relative: +- Example: `{output_folder}/doc.md` - VALID (uses config variable) +- Example: `{planning_artifacts}/prd.md` - VALID (uses config variable) +- These paths won't exist during validation (workflow not running yet) + +--- + +**PHASE 2: Hardcoded paths in CONTENT (CRITICAL):** + +Step-02 checks frontmatter - this checks CONTENT (body text after frontmatter). + +**Launch a single subprocess that:** + +1. Runs grep across all step files to find hardcoded {project-root}/ paths in content +2. Extracts content after frontmatter from each file +3. Returns all findings to parent for aggregation + +```bash +# Extract content after frontmatter from all files, search for {project-root}/ +for file in steps-c/*.md; do + awk '/^---$/,0 {if (p) print; p=1} /^---$/{p=1}' "$file" | grep -n "{project-root}/" && echo "Found in: $file" +done +``` + +**What we're catching:** +- Content like: `Load {project-root}/_bmad/foo/workflows/.../file.csv` +- Should be: `Load {dataFile}` (frontmatter variable with a relative path like ../data/file.csv) + +**SKIP:** Paths using KNOWN_CONFIG_VARIABLES (these are valid exceptions) + +--- + +**PHASE 3: Dead or bad links - referenced files don't exist (CRITICAL):** + +**Launch a single subprocess that:** + +1. Extracts all frontmatter path references from all files +2. Tests file existence for each reference (skipping output files that use config variables) +3. Returns all dead link findings to parent for aggregation + +**CRITICAL DISTINCTION:** +- **Output files using config variables:** Skip (won't exist yet - workflow not installed/running) + - Example: `{output_folder}/my-doc.md` - SKIP + - Example: `{planning_artifacts}/prd.md` - SKIP + - Example: `{bmb_creations_output_folder}/file.md` - SKIP + +- **Data files, step files, other workflows:** MUST EXIST - flag if missing + - Example: `{dataFile}` where value is `../data/config.csv` - MUST EXIST + - Example: `{nextStepFile}` where value is `./step-02.md` - MUST EXIST + - Example: `{advancedElicitationTask}` - MUST EXIST + - Example: `{partyModeWorkflow}` - MUST EXIST + +**Bash execution pattern:** +```bash +# Extract all frontmatter path references from all files +for file in steps-c/*.md; do + # Extract file reference variables from frontmatter + grep "^\w*File:" "$file" | sed "s/.*: //" + + # Resolve path (handle relative paths) + resolved_path=$(resolve_relative_path "$file" "$value") + + # Check file existence - BUT SKIP output files using config variables + if ! path_uses_known_config_variable "$value"; then + if ! test -f "$resolved_path"; then + echo "DEAD LINK: $file references $resolved_path (not found)" + fi + fi +done +``` + +**What we're catching:** +- Dead links to any files that don't exist that the workflow needs during execution + +--- + +**PHASE 4: Module path awareness:** + +**Launch a single subprocess that:** + +1. Determines if current workflow is in a non-bmb module +2. If yes, runs grep across all files to find bmb-specific path assumptions +3. Returns all module awareness issues to parent for aggregation + +```bash +# Check if in non-bmb module, then search for bmb-specific paths +if pwd | grep -q "/modules/[^/]\+/" && ! pwd | grep -q "/bmb/"; then + grep -rn "{project-root}/_bmad/bmb/" steps-c/ steps-e/ steps-v/ 2>/dev/null || echo "No bmb-specific paths found" +fi +``` + +--- + +**RETURN FORMAT:** + +```json +{ + "known_config_variables": ["output_folder", "planning_artifacts", "bmb_creations_output_folder", ...], + "content_violations": [ + {"file": "step-v-01-discovery.md", "line": 63, "violation": "hardcoded path in content", "details": "{project-root}/src/modules/.../prd-purpose.md"} + ], + "dead_links": [ + {"file": "step-06-innovation.md", "line": 215, "violation": "dead link", "details": "nextStepFile './step-07-project-type.md' should be './step-07-project-type.md'"} + ], + "module_awareness_issues": [ + {"file": "step-XX.md", "issue": "using bmb-specific path in non-bmb module"} + ], + "summary": {"critical": N, "high": N, "medium": N} +} +``` + +Check ALL files systematically. Return structured report for compilation and appendage to validation report. + +### 2. Process Findings and Update Report + +**Create/Update "Critical Path Violations" section in {validationReportFile}:** + +If ANY violations found: + +```markdown +## Critical Path Violations + +### Config Variables (Exceptions) + +The following config variables were identified from workflow.md Configuration Loading section. +Paths using these variables are valid even if not relative (they reference post-install output locations): + +{list of known_config_variables found} + +### Content Path Violations + +| File | Line | Issue | Details | +| ---- | ---- | ----- | ------- | +{table from content_violations} + +### Dead Links + +| File | Line | Issue | Details | +| ---- | ---- | ----- | ------- | +{table from dead_links} + +**Note:** Output files using config variables were correctly skipped during existence checks. + +### Module Awareness + +{module_awareness_issues} + +### Summary + +- **CRITICAL:** {critical_count} violations (must fix - workflow will break) +- **HIGH:** {high_count} violations (should fix) +- **MEDIUM:** {medium_count} violations (review) + +**Status:** {"❌ FAIL - Critical violations detected" or "⚠️ WARNINGS - Review recommended" or "✅ PASS - No violations"} +``` + +### 3. Handle Critical Violations + +**If CRITICAL violations found (content violations OR dead links):** + +Halt process once all files have been checked and aggregated - and share the severity of the issue with the user and ask them if they want to stop and you can try to fix these now, or else go to the next item in this list. If not proceeding - its still critical all findings thus far are documented in the report output. + +### 4. Save Report and Auto-Proceed + +**CRITICAL:** Save the validation report to {validationReportFile} BEFORE loading and executing {nextStepFile}. + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Config variables identified from workflow.md FIRST +- Known config variables used as exceptions in later checks +- ALL step files checked for content path violations +- Dead links detected via file existence tests (skipping output files) +- Module awareness issues flagged +- Findings appended to validation report +- CRITICAL violations halt validation +- Clean workflows proceed to step-03 + +### ❌ SYSTEM FAILURE: + +- Not identifying config variables first +- Not skipping output files during existence checks +- Not checking content (only frontmatter) +- Missing dead link detection +- Not detecting module-specific assumptions +- Proceeding despite critical violations diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-03-menu-validation.md b/src/modules/bmb/workflows/workflow/steps-v/step-03-menu-validation.md index 77242856..89f7c980 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-03-menu-validation.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-03-menu-validation.md @@ -3,8 +3,8 @@ name: 'step-03-menu-validation' description: 'Validate menu handling compliance across all step files' nextStepFile: './step-04-step-type-validation.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' menuHandlingStandards: '../data/menu-handling-standards.md' --- @@ -22,19 +22,20 @@ To validate that EVERY step file's menus follow the menu handling standards - pr - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: -- 🎯 Load and validate EVERY step file's menus -- 🚫 DO NOT skip any files or checks -- 💬 Append findings to report, then auto-load next step -- 🚪 This is validation - systematic and thorough +- 🎯 Validate EVERY step file's menus using subprocess optimization - per-file deep analysis pattern (Pattern 2) +- 🚫 DO NOT skip any files or checks - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation +- 🚪 This is validation - systematic and thorough, leveraging per-file subprocess for menu structure analysis ## EXECUTION PROTOCOLS: - 🎯 Load menu standards first -- 💾 Check EVERY file's menu structure -- 📖 Append findings to validation report +- 💾 Check EVERY file's menu structure using subprocess optimization when available - per-file deep analysis for menu structure validation +- 📖 Append findings to validation report (subprocesses either update report OR return findings for parent aggregation) - 🚫 DO NOT halt for user input - validation runs to completion ## CONTEXT BOUNDARIES: @@ -64,11 +65,15 @@ Load {menuHandlingStandards} to understand validation criteria: ### 2. Check EVERY Step File -**DO NOT BE LAZY - For EACH file in steps-c/:** +**DO NOT BE LAZY - For EVERY file in steps-c/, launch a subprocess that:** -1. Load the file -2. Find the menu section (if present) -3. Validate against each rule: +1. Loads that step file +2. Loads {menuHandlingStandards} to understand validation criteria +3. Validates menu structure deeply (handler section, execution rules, A/P appropriateness, reserved letter compliance) +4. **EITHER** updates validation report directly with findings +5. **OR** returns structured validation findings to parent for aggregation + +**SUBPROCESS VALIDATION PATTERN - Each subprocess checks for:** **Check 1: Handler Section Exists** - ✅ Handler section immediately follows Display @@ -92,39 +97,35 @@ Load {menuHandlingStandards} to understand validation criteria: - Validation sequences should auto-proceed, not have menus - ❌ If A/P in wrong place: mark as violation -### 3. Document Findings +**RETURN FORMAT:** +Each subprocess should return validation findings for its assigned file including: +- File name +- Whether a menu is present +- Results of all 5 checks (handler section, execution rules, redisplay menu, C sequence, A/P appropriateness) +- List of any violations found +- Overall status (PASS/FAIL/WARN) -Create report table: +**Context savings estimate:** Each subprocess returns structured findings vs full file content. Parent aggregates all findings into final report table. -```markdown -### Menu Handling Validation Results +### 3. Aggregate Findings and Document Results -| File | Has Menu | Handler Section | Exec Rules | A/P Appropriate | Status | -|------|----------|----------------|------------|-----------------|--------| -| step-01-init.md | ✅ (C-only) | ✅ | ✅ | N/A | ✅ PASS | -| step-02-*.md | ✅ (A/P/C) | ✅ | ✅ | ✅ | ✅ PASS | -| step-03-*.md | ✅ (C-only) | ❌ Missing | ⚠️ Incomplete | N/A | ❌ FAIL | -| step-04-*.md | ❌ No menu | N/A | N/A | Should have A/P/C | ⚠️ WARN | -``` +After ALL files have been validated (either via subprocess or main context), document the menu handling validation results in the validation report, including: + +- Overall assessment of menu handling compliance across all step files +- Summary of files checked and their menu status +- Files that passed all menu validation checks +- Files with warnings or issues that need attention +- Files that failed validation with specific violations ### 4. List Violations -```markdown -### Menu Violations Found +Compile and document all violations found during validation, organizing them by file and providing clear descriptions of each issue, such as: -**step-03-[name].md:** -- Missing handler section after menu display -- EXECUTION RULES section incomplete - -**step-04-[name].md:** -- No menu found - this is a collaborative content step, should have A/P/C menu - -**step-05-[name].md:** -- A/P options don't specify "redisplay menu" after execution - -**step-06-[name].md:** -- All checks passed ✅ -``` +- Missing handler sections +- Incomplete execution rules +- Improper A/P usage +- Missing redisplay menu instructions +- Any other menu handling standard violations ### 5. Append to Report @@ -145,9 +146,10 @@ Then immediately load, read entire file, then execute {nextStepFile}. ### ✅ SUCCESS: -- EVERY step file's menus validated -- All violations documented -- Findings appended to report +- Menu standards loaded and understood +- EVERY step file's menus validated via subprocess (per-file deep analysis) OR main context +- All violations documented across handler sections, execution rules, A/P appropriateness +- Findings aggregated into validation report (subprocesses either updated report OR returned findings) - Report saved before proceeding - Next validation step loaded @@ -157,5 +159,6 @@ Then immediately load, read entire file, then execute {nextStepFile}. - Skipping menu structure checks - Not documenting violations - Not saving report before proceeding +- Loading full file contents into parent context instead of using subprocess analysis -**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check EVERY file's menus. Auto-proceed through all validation steps. +**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Use subprocess optimization (Pattern 2) - each file in its own subprocess for deep menu structure analysis. Subprocess returns only findings to parent. Auto-proceed through all validation steps. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md b/src/modules/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md index cccc58be..544ae506 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md @@ -3,10 +3,10 @@ name: 'step-04-step-type-validation' description: 'Validate that each step follows its correct step type pattern' nextStepFile: './step-05-output-format-validation.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' stepTypePatterns: '../data/step-type-patterns.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' --- # Validation Step 4: Step Type Validation @@ -23,19 +23,20 @@ To validate that each step file follows the correct pattern for its step type - - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: -- 🎯 Load and validate EVERY step against its type pattern -- 🚫 DO NOT skip any files or checks -- 💬 Append findings to report, then auto-load next step +- 🎯 Load and validate EVERY step against its type pattern - use subprocess optimization (Pattern 2: per-file deep analysis) when available +- 🚫 DO NOT skip any files or checks - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation - 🚪 This is validation - systematic and thorough ## EXECUTION PROTOCOLS: -- 🎯 Load step type patterns first -- 💾 Check EACH file follows its designated type pattern -- 📖 Append findings to validation report +- 🎯 Load step type patterns first (use subprocess for data operations when available) +- 💾 Check EACH file follows its designated type pattern - use per-file subprocesses for deep analysis when available +- 📖 Append findings to validation report (subprocess updates report OR returns findings to parent) - 🚫 DO NOT halt for user input - validation runs to completion ## CONTEXT BOUNDARIES: @@ -50,7 +51,21 @@ To validate that each step file follows the correct pattern for its step type - ### 1. Load Step Type Patterns -Load {stepTypePatterns} to understand the pattern for each type: +**Load {stepTypePatterns} to understand the pattern for each type:** + +**If subprocess capability available:** +```markdown +Launch a subprocess that: +1. Loads {stepTypePatterns} +2. Extracts all pattern definitions deeply +3. Returns summary of patterns to parent (not full file - saves context) +``` + +**If subprocess unavailable:** +```markdown +Load {stepTypePatterns} in main context +# Larger context but still functional - demonstrates graceful fallback +``` **Step Types:** 1. **Init (Non-Continuable)** - Auto-proceed, no continuation logic @@ -66,16 +81,21 @@ Load {stepTypePatterns} to understand the pattern for each type: ### 2. Check EACH Step Against Its Type -**DO NOT BE LAZY - For EACH file in steps-c/:** +**DO NOT BE LAZY - For EACH file in steps-c/, launch a subprocess that:** -1. Determine what type this step SHOULD be from: +1. Determines what type this step SHOULD be from: - Step number (01 = init, 01b = continuation, last = final) - Design in {workflowPlanFile} - Step name pattern -2. Load the step file +2. Loads the step file -3. Validate it follows the pattern for its type: +3. Validates it follows the pattern for its type + +4. **EITHER** updates the validation report directly with its findings +5. **OR** returns structured findings to parent for aggregation + +**SUBPROCESS ANALYSIS PATTERN - Validate each step file for:** **For Init Steps:** - ✅ Creates output from template (if document-producing) @@ -114,42 +134,46 @@ Load {stepTypePatterns} to understand the pattern for each type: - ✅ Completion message - ✅ No next step to load -### 3. Document Findings +**RETURN FORMAT:** +Return a concise summary containing: +- File name analyzed +- What type the step should be +- What type it actually is +- Whether it follows the correct pattern +- List of any violations found +- Overall pass/fail status -Create report table: +**Context savings:** Each subprocess returns only validation findings, not full file contents. Parent receives structured analysis objects instead of 10+ full step files. -```markdown -### Step Type Validation Results +### 3. Aggregate Findings and Document -| File | Should Be Type | Follows Pattern | Issues | Status | -|------|----------------|-----------------|--------|--------| -| step-01-init.md | Init (Continuable) | ✅ | None | ✅ PASS | -| step-01b-continue.md | Continuation | ✅ | None | ✅ PASS | -| step-02-*.md | Middle (Standard) | ✅ | None | ✅ PASS | -| step-03-*.md | Middle (Simple) | ❌ | Has A/P (should be C-only) | ❌ FAIL | -| step-04-*.md | Branch | ⚠️ | Missing custom menu letters | ⚠️ WARN | -| step-N-final.md | Final | ✅ | None | ✅ PASS | -``` +**After ALL files analyzed, aggregate findings from subprocesses and document results:** + +**Document the following in the validation report:** + +- Overall summary of step type validation (how many steps checked, pass/fail counts) +- For each step file: + - File name + - What type the step should be (based on design, step number, naming) + - What type it actually is + - Whether it follows the correct pattern for its type + - Any violations or issues found + - Pass/fail/warning status + +**Format:** Create a clear, readable section in the validation report that shows the validation results for each step file. ### 4. List Violations -```markdown -### Step Type Violations Found +**Compile and document all violations found:** -**step-03-[name].md:** -- Designated as Middle (Simple) but has A/P menu -- Should have C-only menu +**Document the following for any violations:** -**step-04-[name].md:** -- Designated as Branch but missing custom menu letters -- Handler doesn't route to different steps +- File name with violation +- What the violation is (specifically what doesn't match the expected pattern) +- What should be changed to fix it +- Severity level (error/warning) -**step-05-[name].md:** -- Designated as Validation Sequence but has user menu -- Should auto-proceed - -**All other steps:** ✅ Follow their type patterns correctly -``` +**For files that pass validation:** Briefly note they follow their type patterns correctly. ### 5. Append to Report @@ -170,11 +194,12 @@ Then immediately load, read entire file, then execute {nextStepFile}. ### ✅ SUCCESS: -- EVERY step validated against its type pattern -- All violations documented -- Findings appended to report +- EVERY step validated against its type pattern (ideally using per-file subprocess optimization) +- All violations documented with structured findings +- Findings aggregated from subprocesses into report - Report saved before proceeding - Next validation step loaded +- Context saved: parent receives only findings, not full file contents ### ❌ SYSTEM FAILURE: diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md b/src/modules/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md index d5da8dad..c6e1ec62 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md @@ -3,10 +3,10 @@ name: 'step-05-output-format-validation' description: 'Validate output format compliance - template type, final polish, step-to-output mapping' nextStepFile: './step-06-validation-design-check.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' outputFormatStandards: '../data/output-format-standards.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' --- # Validation Step 5: Output Format Validation @@ -23,12 +23,13 @@ To validate that the workflow's output format matches the design - correct templ - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread ### Step-Specific Rules: -- 🎯 Validate output format against design specifications -- 🚫 DO NOT skip any checks -- 💬 Append findings to report, then auto-load next step +- 🎯 Validate output format using subprocess optimization - per-file subprocess for step-to-output validation +- 🚫 DO NOT skip any checks - DO NOT BE LAZY +- 💬 Subprocess must either update validation report OR return findings to parent for aggregation - 🚪 This is validation - systematic and thorough ## EXECUTION PROTOCOLS: @@ -36,6 +37,7 @@ To validate that the workflow's output format matches the design - correct templ - 🎯 Load output format standards first - 💾 Check template type matches design - 📖 Check for final polish step if needed +- 🔍 Use subprocess optimization for step-to-output mapping validation - per-file subprocess for deep analysis - 🚫 DO NOT halt for user input - validation runs to completion ## CONTEXT BOUNDARIES: @@ -114,11 +116,32 @@ From {workflowPlanFile}, identify: ### 5. Validate Step-to-Output Mapping -**For EACH step that outputs to document:** +**DO NOT BE LAZY - For EACH step that outputs to document, launch a subprocess that:** -1. Check the step has `outputFile` in frontmatter -2. Check the step appends/writes to output before loading next -3. Check the menu C option saves to output before proceeding +1. Loads that step file +2. Analyzes frontmatter for `outputFile` variable +3. Analyzes step body to verify output is written before loading next step +4. Checks menu C option saves to output before proceeding +5. Returns structured findings to parent for aggregation + +**SUBPROCESS EXECUTION PATTERN:** + +**For EACH step file, launch a subprocess that:** +1. Loads the step file +2. Performs deep analysis of output operations (frontmatter, body, menu options) +3. Returns findings to parent for aggregation + +**RETURN FORMAT:** +Each subprocess should return: +- Step filename +- Whether output variable exists in frontmatter +- Whether output is saved before loading next step +- Whether menu option C saves to output before proceeding +- Output order number (if applicable) +- Any issues found +- Overall status (PASS/FAIL/WARNING) + +**Parent aggregates findings into:** **Steps should be in ORDER of document appearance:** - Step 1 creates doc @@ -128,36 +151,15 @@ From {workflowPlanFile}, identify: ### 6. Document Findings -```markdown -### Output Format Validation Results +Document your output format validation findings in the validation report. Include: -**Workflow Produces Documents:** [Yes/No] - -**Template Type:** [Free-form/Structured/Semi-structured/Strict] - -**Template File Check:** -- Template exists: ✅/❌ -- Matches designed type: ✅/❌ -- Proper frontmatter: ✅/❌ - -**Final Polish Step:** -- Required: [Yes/No - based on template type] -- Present: ✅/❌ -- Loads entire document: ✅/❌ -- Optimizes flow: ✅/❌ - -**Step-to-Output Mapping:** -| Step | Has Output Variable | Saves Before Next | Status | -|------|-------------------|-------------------|--------| -| step-01-init.md | ✅ | ✅ | ✅ | -| step-02-*.md | ✅ | ✅ | ✅ | -| step-03-*.md | ❌ | N/A | ❌ FAIL | - -**Issues Found:** -[List any issues with template, polish step, or mapping] - -**Status:** ✅ PASS / ❌ FAIL / ⚠️ WARNINGS -``` +- **Document Production**: Whether the workflow produces documents and what template type it uses +- **Template Assessment**: Template file existence, whether it matches the designed type, and frontmatter correctness +- **Final Polish Evaluation**: Whether a final polish step is required (for free-form workflows) and if present, whether it properly loads the entire document and optimizes flow +- **Step-to-Output Mapping**: For each step that outputs to the document, document whether it has the output variable in frontmatter, saves output before loading the next step, and properly saves in menu option C +- **Subprocess Analysis Summary**: Count of total steps analyzed, steps with output, steps saving correctly, and steps with issues +- **Issues Identified**: List any problems found with template structure, polish step, or output mapping +- **Overall Status**: Pass, fail, or warning designation ### 7. Append to Report @@ -180,10 +182,11 @@ Then immediately load, read entire file, then execute {nextStepFile}. - Template type matches design - Final polish step present if needed -- Step-to-output mapping validated +- Step-to-output mapping validated via subprocess optimization - All findings documented - Report saved before proceeding - Next validation step loaded +- Subprocess pattern applied correctly (per-file analysis for step-to-output validation) ### ❌ SYSTEM FAILURE: @@ -191,5 +194,7 @@ Then immediately load, read entire file, then execute {nextStepFile}. - Missing final polish step for free-form - Not documenting mapping issues - Not saving report before proceeding +- Not using subprocess optimization for step-to-output validation +- Loading all step files into parent context instead of per-file subprocess -**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check template, polish step, and mapping. Auto-proceed through all validation steps. +**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check template, polish step, and mapping. Use subprocess optimization for step-to-output validation - per-file subprocess returns analysis, not full content. Auto-proceed through all validation steps. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md b/src/modules/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md index f0f0cf32..2c4c98a7 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md @@ -3,9 +3,9 @@ name: 'step-06-validation-design-check' description: 'Check if workflow has proper validation steps that load validation data (if validation is critical)' nextStepFile: './step-07-instruction-style-check.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' trimodalWorkflowStructure: '../data/trimodal-workflow-structure.md' --- @@ -23,18 +23,20 @@ To check if the workflow has proper validation steps when validation is critical - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: -- 🎯 Check if workflow needs validation steps -- 🚫 DO NOT skip any validation step reviews -- 💬 Append findings to report, then auto-load next step +- 🎯 Check if workflow needs validation steps - use subprocess optimization (per-file deep analysis for Pattern 2) +- 🚫 DO NOT skip any validation step reviews - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return findings to parent for aggregation - 🚪 This is validation - systematic and thorough ## EXECUTION PROTOCOLS: -- 🎯 Determine if validation is critical for this workflow -- 💾 Check validation steps exist and are well-designed +- 🎯 Determine if validation is critical for this workflow - use subprocess optimization when available +- 💾 Check validation steps exist and are well-designed - launch subprocess for per-file deep analysis (Pattern 2) +- 💬 Subprocesses must either update validation report OR return findings for parent aggregation - 📖 Append findings to validation report - 🚫 DO NOT halt for user input - validation runs to completion @@ -67,11 +69,13 @@ From {workflowPlanFile}, check: ### 2. If Validation Is Critical, Check Validation Steps -**DO NOT BE LAZY - For EACH validation step in the workflow:** +**DO NOT BE LAZY - For EVERY validation step file, launch a subprocess that:** -1. Find the step (usually named with "validate", "check", "review") -2. Load the step file -3. Check for: +1. Loads that validation step file +2. Reads and analyzes the step's content deeply (prose, logic, quality, flow, anti-lazy language) +3. Returns structured analysis findings to parent for aggregation + +**SUBPROCESS ANALYSIS PATTERN - Check each validation step file for:** **Proper Validation Step Design:** - ✅ Loads validation data/standards from `data/` folder @@ -93,7 +97,27 @@ From {workflowPlanFile}, check: - ⚠️ For non-critical flows (entertainment, therapy, casual): validation may be inline - ❌ ERROR if critical validation is mixed into create steps -### 3. Check Validation Data Files +**RETURN FORMAT:** +Return a structured analysis containing: +- Step file name +- Proper design checklist (loads data, systematic checks, auto-proceeds, clear criteria, reports findings) +- Anti-lazy language check (has mandate, mandate text, comprehensive coverage) +- Critical flow check (location, segregation, independence) +- Any issues found +- Overall status (PASS/FAIL/WARN) + +**Context savings:** Each subprocess returns analysis (~30 lines), not full step file (~200 lines). Parent gets structured findings, not file contents. + +### 3. Aggregate Findings from All Subprocesses + +After all validation step files have been analyzed in subprocesses, aggregate findings: + +**Process subprocess results:** +- Compile all structured analysis findings +- Identify patterns across validation steps +- Note any critical issues or warnings + +### 4. Check Validation Data Files **If workflow has validation steps:** @@ -103,57 +127,42 @@ From {workflowPlanFile}, check: - Markdown files have clear criteria - Data is referenced in step frontmatter -### 4. Document Findings +### 5. Document Findings -```markdown -### Validation Design Check Results +**Create/Update "Validation Design Check" section in {validationReportFile} using aggregated subprocess findings:** -**Workflow Requires Validation:** [Yes/No] +Document the following information: -**Workflow Domain Type:** [Critical/Compliance/Creative/Entertainment/Therapy/Casual] +**Whether validation is required:** Indicate if this workflow needs validation steps based on its domain type (critical/compliance/safety workflows vs. creative/exploratory ones) -**If Yes:** +**List of validation steps found:** Provide the names/paths of all validation step files in the workflow -**Validation Steps Found:** -- [List each validation step] +**Validation step quality assessment:** For each validation step, document: +- Whether it loads validation data/standards from the data/ folder +- Whether it has a systematic check sequence +- Whether it auto-proceeds through checks (vs. stopping for user input) +- Whether it includes "DO NOT BE LAZY" or similar anti-lazy language mandates +- Whether it has clear pass/fail criteria +- Overall status (PASS/FAIL/WARN) -**Validation Step Quality:** -| Step | Loads Data | Systematic | Auto-proceed | DO NOT BE LAZY | Criteria | Status | -|------|-----------|------------|--------------|----------------|----------|--------| -| step-04-validate.md | ✅ | ✅ | ✅ | ✅ | ✅ Clear | ✅ PASS | -| step-07-check.md | ❌ | ⚠️ Vague | ❌ User choice each | ❌ | ❌ Unclear | ❌ FAIL | +**"DO NOT BE LAZY" language presence:** For each validation step, note whether anti-lazy language is present and what it says -**"DO NOT BE LAZY" Language Check:** -| Step | Has Anti-Lazy Language | Status | -|------|----------------------|--------| -| step-04-validate.md | ✅ "DO NOT BE LAZY - LOAD AND REVIEW EVERY FILE" | ✅ PASS | -| step-07-check.md | ❌ No anti-lazy language found | ⚠️ WARN | +**Critical flow segregation:** For workflows requiring validation, document: +- The workflow domain type +- Whether validation steps are in the steps-v/ folder (tri-modal structure) or inline with create steps +- Whether this segregation is appropriate for the workflow type -**Critical Flow Check:** -- Workflow domain: [Critical/Creative/Therapy/etc.] -- Validation location: [steps-v/ folder / inline with create] -- For [critical] workflows: Validation is in steps-v/ ✅ / ❌ mixed in create -- Status: ✅ Properly segregated / ⚠️ Consider segregation / ❌ Should be in steps-v/ +**Validation data files:** List any validation data files found in the data/ folder, or note if they are missing -**Validation Data Files:** -- [List data files found, or note if missing] +**Issues identified:** List any problems found with the validation design, missing data files, or quality concerns -**Issues Found:** -[List issues with validation design] +**Overall status:** Provide final assessment (PASS/FAIL/WARN/N/A) with reasoning -**If No (Validation Not Required):** -- Workflow is [creative/exploratory/type] -- Validation is user's responsibility -- No validation steps needed ✅ +### 6. Append to Report -**Status:** ✅ PASS / ❌ FAIL / ⚠️ WARNINGS / N/A (not applicable) -``` +Update {validationReportFile} - replace "## Validation Design Check *Pending...*" with actual findings from subprocess aggregation. -### 5. Append to Report - -Update {validationReportFile} - replace "## Validation Design Check *Pending...*" with actual findings. - -### 6. Save Report and Auto-Proceed +### 7. Save Report and Auto-Proceed **CRITICAL:** Save the validation report BEFORE loading next step. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md b/src/modules/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md index fe604633..000f6f6e 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md @@ -3,10 +3,10 @@ name: 'step-07-instruction-style-check' description: 'Check instruction style - intent-based vs prescriptive, appropriate for domain' nextStepFile: './step-08-collaborative-experience-check.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' intentVsPrescriptive: '../data/intent-vs-prescriptive-spectrum.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' --- # Validation Step 7: Instruction Style Check @@ -23,20 +23,22 @@ To validate that workflow instructions use appropriate style - intent-based for - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: -- 🎯 Review EVERY step's instruction style -- 🚫 DO NOT skip any files or style checks -- 💬 Append findings to report, then auto-load next step +- 🎯 Review EVERY step's instruction style using subprocess optimization - separate subprocess per file for deep analysis +- 🚫 DO NOT skip any files or style checks - DO NOT BE LAZY +- 💬 Subprocess must either update validation report OR return structured findings to parent for aggregation - 🚪 This is validation - systematic and thorough ## EXECUTION PROTOCOLS: - 🎯 Load intent vs prescriptive standards -- 💾 Check EACH step's instruction style +- 💾 Check EACH step's instruction style using subprocess optimization - each file in its own subprocess - 📖 Validate style is appropriate for domain - 🚫 DO NOT halt for user input - validation runs to completion +- 💬 Subprocesses must either update validation report OR return findings for parent aggregation ## CONTEXT BOUNDARIES: @@ -84,11 +86,17 @@ From {workflowPlanFile}, identify the workflow domain: ### 3. Check EACH Step's Instruction Style -**DO NOT BE LAZY - For EACH step file:** +**DO NOT BE LAZY - For EACH step file, launch a subprocess that:** -1. Load the step -2. Read the instruction sections (MANDATORY SEQUENCE) -3. Classify style: +1. Loads that step file +2. Reads the instruction sections (MANDATORY SEQUENCE) +3. Analyzes and classifies instruction style deeply +4. **EITHER** updates validation report directly with findings +5. **OR** returns structured analysis findings to parent for aggregation + +**SUBPROCESS ANALYSIS PATTERN:** + +Each subprocess performs deep analysis of instruction prose to classify style: **Intent-Based Indicators:** - ✅ Describes goals/outcomes, not exact wording @@ -108,6 +116,17 @@ From {workflowPlanFile}, identify the workflow domain: - Some steps prescriptive (critical/required) - Others intent-based (creative/facilitative) +**RETURN FORMAT:** +Each subprocess should return findings including: +- Step file identifier +- Instruction style classification (Intent-based/Prescriptive/Mixed) +- Style indicators observed +- Appropriateness assessment (PASS/WARN/FAIL) +- Specific notes and observations +- Examples of good and concerning instruction patterns + +**Parent aggregates all subprocess findings into unified report section.** + ### 4. Validate Appropriateness **For Intent-Based Domains:** @@ -118,47 +137,41 @@ From {workflowPlanFile}, identify the workflow domain: - ✅ Instructions should be prescriptive where compliance matters - ⚠️ May have intent-based sections for creative elements -### 5. Document Findings +### 5. Aggregate Findings and Document -```markdown -### Instruction Style Check Results +After ALL subprocesses have analyzed their respective step files, aggregate findings and create/update section in {validationReportFile}. -**Domain Type:** [Creative/Personal/Exploratory OR Legal/Medical/Compliance] +Document the following: -**Appropriate Style:** [Intent-based/Prescriptive/Mixed] +**Workflow Domain Assessment:** +- Document the domain type (creative/interactive vs compliance/legal) +- State the appropriate instruction style for this domain -**Step Instruction Style Analysis:** -| Step | Style Type | Appropriate | Notes | Status | -|------|-----------|-------------|-------|--------| -| step-01-init.md | Intent-based | ✅ | Goals described, flexible | ✅ PASS | -| step-02-*.md | Intent-based | ✅ | "Think about response" | ✅ PASS | -| step-03-*.md | Prescriptive | ❌ | Domain is creative, too rigid | ⚠️ WARN | -| step-04-*.md | Intent-based | ✅ | Good facilitation language | ✅ PASS | -| step-05-*.md | Mixed | ✅ | Prescriptive for compliance, intent elsewhere | ✅ PASS | +**Instruction Style Findings:** +- List each step and its instruction style classification (intent-based/prescriptive/mixed) +- Note whether the style is appropriate for the domain +- Document specific examples of instruction language that demonstrate the style +- Identify any steps with inappropriate style (e.g., prescriptive in creative domain) -**Issues Found:** +**Issues Identified:** +- List any steps that are overly prescriptive for their domain +- List any steps that should be more prescriptive (for compliance domains) +- Note any style inconsistencies across steps -**Overly Prescriptive Steps:** -- [List steps that are too prescriptive for their domain] -- Example: "step-03-*.md says 'Ask exactly: X, Y, Z' but this is a creative workflow" +**Positive Findings:** +- Highlight steps with excellent instruction style +- Note effective use of intent-based facilitation language +- Identify appropriate use of prescriptive instructions (if applicable) -**Overly Flexible Steps (if prescriptive domain):** -- [List steps that should be more prescriptive] -- Example: "step-04-*.md is vague but this is a compliance workflow" +**Overall Status:** +- Provide final assessment (PASS/FAIL/WARN) +- Summarize key findings -**Style Inconsistencies:** -- [List steps where style doesn't match domain] +**Context Savings Note:** Using subprocess pattern (Pattern 2: per-file deep analysis), parent context receives only structured analysis findings (~50-100 lines per file) instead of full file contents (~200+ lines per file). For 10 steps: ~500-1000 lines received vs ~2000+ lines if loading all files in parent. -**Good Examples Found:** -- [Highlight steps with excellent intent-based instructions] -- [Highlight steps with appropriate prescriptive language] +### 6. Update Report with Aggregated Findings -**Status:** ✅ PASS / ❌ FAIL / ⚠️ WARNINGS -``` - -### 6. Append to Report - -Update {validationReportFile} - replace "## Instruction Style Check *Pending...*" with actual findings. +Update {validationReportFile} - replace "## Instruction Style Check *Pending...*" with actual aggregated findings from all subprocesses. ### 7. Save Report and Auto-Proceed @@ -175,18 +188,22 @@ Then immediately load, read entire file, then execute {nextStepFile}. ### ✅ SUCCESS: -- EVERY step's instruction style reviewed +- EVERY step's instruction style reviewed via subprocess optimization (Pattern 2: per-file deep analysis) +- Each step analyzed in its own subprocess for style classification - Style validated against domain appropriateness - Issues documented with specific examples -- Findings appended to report +- Subprocess findings aggregated into unified report section +- Context savings achieved (~500-1000 lines received vs ~2000+ if loading all files) - Report saved before proceeding - Next validation step loaded ### ❌ SYSTEM FAILURE: -- Not checking every step's style +- Not checking every step's style via subprocess +- Not analyzing each file in its own subprocess - Not validating against domain - Not documenting style issues +- Not aggregating subprocess findings - Not saving report before proceeding -**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check EVERY step's instruction style. Auto-proceed through all validation steps. +**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. For EACH step file, launch a subprocess to analyze instruction style deeply. Aggregate findings. Auto-proceed through all validation steps. Use graceful fallback if subprocess unavailable. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md b/src/modules/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md index b5aacfcc..43416b10 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md @@ -2,10 +2,10 @@ name: 'step-08-collaborative-experience-check' description: 'Check collaborative quality - does this workflow facilitate well or just interrogate?' -nextStepFile: './step-09-cohesive-review.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +nextStepFile: './step-08b-subprocess-optimization.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' --- # Validation Step 8: Collaborative Experience Check diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md b/src/modules/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md new file mode 100644 index 00000000..5d0219a9 --- /dev/null +++ b/src/modules/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md @@ -0,0 +1,179 @@ +--- +name: 'step-08b-subprocess-optimization' +description: 'Identify subprocess optimization opportunities - reduce context load, improve performance' + +nextStepFile: './step-09-cohesive-review.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +subprocessPatterns: '../data/subprocess-optimization-patterns.md' +--- + +# Validation Step 8b: Subprocess Optimization Analysis + +## STEP GOAL: + +To identify opportunities for subprocess optimization throughout the workflow - reducing context load, improving performance, and enabling massive operations that would otherwise exceed context limits. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 DO NOT BE LAZY - ANALYZE EVERY FILE IN ITS OWN SUBPROCESS +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step, ensure entire file is read +- ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess/subagent/tool you do not have access to, you MUST still achieve the outcome in your main context + +### Step-Specific Rules: + +- 🎯 Analyze EVERY step file for subprocess optimization - each file in its own subprocess +- 🚫 DO NOT skip any file - DO NOT BE LAZY +- 💬 Load {subprocessPatterns} in subprocess performing some action required to understand patterns deeply with examples (if subprocess available), else load in main context +- 🚪 This identifies context-saving and performance-optimizing opportunities + +## EXECUTION PROTOCOLS: + +- 🎯 Analyze each step file in its own subprocess - deep analysis of subprocess potential +- 💾 Subprocesses must identify optimization patterns and return findings to parent for aggregation +- 📖 Aggregate findings into validation report before loading next step + +## CONTEXT BOUNDARIES: + +- Three patterns: grep/regex across files, per-file deep analysis, data file operations, parallel execution +- **Context-saving goal**: Return ONLY key findings to parent, not full file contents + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip or shortcut. + +### 1. Load Subprocess Pattern Reference (Context Optimization!) + +**First, understand the subprocess optimization patterns by loading {subprocessPatterns}:** + +**If subprocess capability available:** +```markdown +Launch a subprocess that: +1. Loads {subprocessPatterns} +2. Studies all patterns and examples deeply (Pattern 3: data operations!) +3. Returns summary of key patterns to parent (not full file - saves context) +``` + +**If subprocess unavailable:** +```markdown +Load {subprocessPatterns} in main context +# Larger context but still functional - demonstrates graceful fallback +``` + +**This step itself demonstrates Pattern 3 from the reference!** + +--- + +### 2. Perform Subprocess Optimization Analysis + +**DO NOT BE LAZY - For EVERY step file, launch a subprocess that:** + +1. Loads that step file +2. ALSO loads {subprocessPatterns} to understand all patterns deeply (subprocess needs full context!) +3. Analyzes the step against each pattern looking for optimization opportunities +4. Returns specific, actionable suggestions to parent + +**Subprocess gets full context:** +- The step file being analyzed +- The subprocess-optimization-patterns.md reference (all examples and patterns) +- Returns only findings to parent (context savings!) + +**SUBPROCESS ANALYSIS PATTERN - Check each step file for:** + +**Pattern 1: Single subprocess for grep/regex** - Operations that check/search multiple files for patterns (frontmatter validation, menu checks, path searches). Suggest: "Use single grep subprocess, return only matches" + +**Pattern 2: Separate subprocess per file** - Operations requiring deep analysis of prose/logic/quality/style/flow per file (instruction review, collaborative quality assessment, step type compliance). Suggest: "Each file in own subprocess, return analysis findings" + +**Pattern 3: Subprocess for data operations** - Operations loading large data files to find matches, extract key details, or summarize findings. Suggest: "Subprocess loads data, returns ONLY relevant rows/findings" + +**Pattern 4: Parallel execution** - Independent operations that could run simultaneously. Suggest: "Run in parallel subprocesses to reduce execution time" + +**RETURN FORMAT (example structure, adapt as needed):** +```json +{ + "step_file": "step-02-*.md", + "opportunities": [ + { + "pattern": "grep/regex|per-file|data-ops|parallel", + "location": "Line XX: [quote relevant instruction]", + "issue": "Loads all files into parent context", + "suggestion": "Use single grep subprocess, return only failures", + "impact": "Saves ~N lines per file, faster execution", + "priority": "HIGH|MEDIUM|LOW" + } + ] +} +``` + +### 2. Aggregate Findings and Create Report Section + +After ALL files analyzed, create/update section in {validationReportFile}: + +```markdown +## Subprocess Optimization Opportunities + +**Total Opportunities:** {count} | **High Priority:** {count} | **Estimated Context Savings:** {description} + +### High-Priority Opportunities + +**{Step Name}** - {Pattern Type} +- **Current:** {brief description of current approach} +- **Suggested:** {specific optimization suggestion} +- **Impact:** {context savings, performance gain} +- **Example:** `{brief code/pseudocode}` + +[Repeat for each high-priority opportunity...] + +### Moderate/Low-Priority Opportunities + +{List with brief descriptions} + +### Summary by Pattern + +- **Pattern 1 (grep/regex):** {count} opportunities - {total savings} +- **Pattern 2 (per-file):** {count} opportunities - {total savings} +- **Pattern 3 (data ops):** {count} opportunities - {total savings} +- **Pattern 4 (parallel):** {count} opportunities - {performance gain} + +### Implementation Recommendations + +**Quick Wins:** {easy implementations with big savings} +**Strategic:** {higher effort but big payoff} +**Future:** {moderate impact, consider later} + +**Status:** ✅ Complete / ⚠️ Review recommended +``` + +### 3. Save Report and Auto-Proceed + +**CRITICAL:** Save report BEFORE loading next step. + +Then load, read entire file, execute {nextStepFile}. + +**Display:** "**Subprocess optimization analysis complete.** Identified {count} opportunities with potential context savings. Proceeding to Cohesive Review..." + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- EVERY step file analyzed in its own subprocess +- ALL optimization opportunities identified +- Findings aggregated into report +- Prioritized recommendations with context savings +- Report saved, next step loaded + +### ❌ SYSTEM FAILURE: + +- Not analyzing every file +- Skipping opportunity identification +- Not providing specific suggestions +- Not estimating savings +- Not aggregating findings + +**Master Rule:** DO NOT BE LAZY. Analyze EVERY file in its own subprocess. Identify ALL optimization opportunities across 4 patterns. Provide specific, actionable recommendations with context savings. Return findings to parent. Auto-proceed. diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md b/src/modules/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md index 0453ab93..adf1ab45 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md @@ -3,9 +3,9 @@ name: 'step-09-cohesive-review' description: 'Cohesive ultra-think review - overall quality, does this workflow actually facilitate well?' nextStepFile: './step-10-report-complete.md' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' --- # Validation Step 9: Cohesive Review @@ -22,17 +22,21 @@ To perform a cohesive "ultra-think" review of the entire workflow - walk through - 📖 CRITICAL: Read the complete step file before taking any action - 🔄 CRITICAL: When loading next step, ensure entire file is read - ✅ Validation does NOT stop for user input - auto-proceed through all validation steps +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: -- 🎯 Review the workflow as a cohesive whole -- 🚫 DO NOT skip any aspect of the review -- 💬 Think deeply about quality and facilitation +- 🎯 Review the workflow as a cohesive whole - **NOTE: This step loads ENTIRE workflow for holistic review (different pattern from other validation steps)** +- 🚫 DO NOT skip any aspect of the review - DO NOT BE LAZY +- 💬 Subprocess optimization: When available, can use subprocesses to load individual step files and return structured summaries to parent for aggregation +- 💬 However, since cohesive review requires understanding the COMPLETE workflow as one unit, parent may need full context for proper holistic assessment - 🚪 This is the meta-review - overall assessment ## EXECUTION PROTOCOLS: -- 🎯 Walk through the ENTIRE workflow end-to-end +- 🎯 Walk through the ENTIRE workflow end-to-end using subprocess optimization when available +- 💬 When using subprocesses: Each subprocess loads one step file, performs deep analysis, returns structured findings to parent for aggregation +- 💬 Subprocess must either update validation report directly OR return findings to parent for compilation - 💾 Assess overall quality, not just individual components - 📖 Think deeply: would this actually work well? - 🚫 DO NOT halt for user input - validation runs to completion @@ -50,13 +54,32 @@ To perform a cohesive "ultra-think" review of the entire workflow - walk through ### 1. Load the Entire Workflow -**DO NOT BE LAZY - Load EVERY step file:** +**DO NOT BE LAZY - Load EVERY step file using subprocess optimization when available:** +**SUBPROCESS APPROACH (when available):** + +For EACH workflow file (workflow.md + all step files in order), launch a subprocess that: +1. Loads that single file +2. Performs deep analysis of content, flow, quality, and connection points +3. Returns structured findings to parent for holistic aggregation + +**Subprocess should return:** +- File name analyzed +- Purpose and flow position within the workflow +- How it connects to previous and next steps +- Quality indicators and any issues found +- Voice and tone consistency assessment + +**FALLBACK APPROACH (if subprocess unavailable):** + +Load workflow.md and EVERY step file in steps-c/ sequentially in main context: 1. Load workflow.md 2. Load EVERY step file in steps-c/ in order 3. Read through each step 4. Understand the complete flow +**CRITICAL:** Whether using subprocess or main context, you must understand the COMPLETE workflow as one cohesive unit before proceeding to assessment. + ### 2. Walk Through the Workflow Mentally **Imagine you are a user running this workflow:** @@ -93,16 +116,9 @@ To perform a cohesive "ultra-think" review of the entire workflow - walk through ### 4. Assess Overall Quality -**Rate the workflow on:** +**Evaluate the workflow across key dimensions:** -| Aspect | Rating (1-5) | Notes | -|--------|-------------|-------| -| Clear Goal | ⭐⭐⭐⭐⭐ | Is the purpose clear? | -| Logical Flow | ⭐⭐⭐⭐⭐ | Do steps progress logically? | -| Facilitation Quality | ⭐⭐⭐⭐⭐ | Does it facilitate well? | -| User Experience | ⭐⭐⭐⭐⭐ | Would users enjoy this? | -| Goal Achievement | ⭐⭐⭐⭐⭐ | Does it accomplish what it set out to? | -| Overall Quality | ⭐⭐⭐⭐⭐ | Total assessment | +Consider goal clarity, logical flow, facilitation quality, user experience, and goal achievement. Provide an overall quality assessment based on these dimensions. ### 5. Identify Strengths and Weaknesses @@ -122,80 +138,15 @@ To perform a cohesive "ultra-think" review of the entire workflow - walk through ### 6. Provide Recommendation -**Overall Assessment:** -- ✅ **EXCELLENT** - Ready to use, exemplifies best practices -- ✅ **GOOD** - Solid workflow, minor improvements possible -- ⚠️ **NEEDS WORK** - Has issues that should be addressed -- ❌ **PROBLEMATIC** - Major issues, needs significant revision +**Assess overall workflow readiness:** -**Recommendation:** -- [Ready for use / Ready with minor tweaks / Needs revision / Major rework needed] +Determine if the workflow is excellent (ready to use, exemplifies best practices), good (solid with minor improvements possible), needs work (has issues to address), or problematic (major issues requiring significant revision). Provide a clear recommendation on readiness for use. ### 7. Document Findings -```markdown -### Cohesive Review Results +**Document your cohesive review findings in the validation report:** -**Overall Assessment:** [EXCELLENT/GOOD/NEEDS WORK/PROBLEMATIC] - -**Quality Ratings:** -| Aspect | Rating | Notes | -|--------|--------|-------| -| Clear Goal | ⭐⭐⭐⭐⭐ | [Notes] | -| Logical Flow | ⭐⭐⭐⭐⭐ | [Notes] | -| Facilitation Quality | ⭐⭐⭐⭐⭐ | [Notes] | -| User Experience | ⭐⭐⭐⭐⭐ | [Notes] | -| Goal Achievement | ⭐⭐⭐⭐⭐ | [Notes] | -| **Overall Quality** | **⭐⭐⭐⭐⭐** | [Total assessment] | - -**Cohesiveness Analysis:** - -**Flow Assessment:** -- [Describe the overall flow - does it work?] -- [Are there any jarring transitions?] -- [Does each step connect to the next?] - -**Progression Assessment:** -- [Does the workflow build toward its goal?] -- [Is there a clear arc?] -- [Would a user feel they're making progress?] - -**Voice and Tone:** -- [Is the voice consistent throughout?] -- [Does the AI persona work well?] -- [Is the collaboration style appropriate?] - -**Strengths:** -1. [Major strength #1] -2. [Major strength #2] -3. [What makes this workflow excellent] - -**Weaknesses:** -1. [Issue #1 that could be improved] -2. [Issue #2 that could be improved] -3. [What doesn't work as well] - -**Critical Issues (if any):** -- [List any show-stopper problems] -- [Or note: No critical issues] - -**What Makes This Work Well:** -- [Describe the excellent elements] -- [What should other workflows learn from this?] - -**What Could Be Improved:** -- [Specific actionable improvements] -- [Priority: High/Medium/Low] - -**User Experience Forecast:** -- [How would a user experience this workflow?] -- [Would they feel: guided/confused/satisfied/frustrated?] - -**Recommendation:** -- [Ready for use / Ready with minor tweaks / Needs revision / Major rework needed] - -**Status:** ✅ EXCELLENT / ✅ GOOD / ⚠️ NEEDS WORK / ❌ PROBLEMATIC -``` +Include your overall assessment (excellent/good/needs work/problematic), quality evaluation across key dimensions, cohesiveness analysis (flow, progression, voice and tone), identified strengths and weaknesses, any critical issues, what makes the workflow work well, what could be improved, user experience forecast, and your recommendation on readiness for use. ### 8. Append to Report diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-10-report-complete.md b/src/modules/bmb/workflows/workflow/steps-v/step-10-report-complete.md index c011bc33..ee550530 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-10-report-complete.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-10-report-complete.md @@ -2,9 +2,9 @@ name: 'step-10-report-complete' description: 'Finalize validation report - check for plan file, summarize all findings, present to user' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' planValidationStep: './step-11-plan-validation.md' --- @@ -21,6 +21,7 @@ To check if a plan file exists (and run plan validation if it does), then summar - 📖 CRITICAL: Read the complete step file before taking any action - 📋 YOU ARE A FACILITATOR, not a content generator - ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context ### Step-Specific Rules: @@ -38,7 +39,7 @@ To check if a plan file exists (and run plan validation if it does), then summar ## CONTEXT BOUNDARIES: -- All 9 previous validation steps have completed +- All 10 previous validation steps have completed - Report contains findings from all checks - User needs to see summary and decide on changes - This step DOES NOT auto-proceed @@ -64,105 +65,39 @@ After plan validation (if applicable), load {validationReportFile} and read ALL ### 3. Create Summary Section -At the end of {validationReportFile}, replace "## Summary *Pending...*" with: +At the end of {validationReportFile}, replace "## Summary *Pending...*" with a comprehensive summary that includes: -```markdown -## Summary +- Validation completion date +- Overall status assessment (based on all validation steps) +- List of all validation steps completed with their individual results +- Summary of critical issues that must be fixed (or note if none found) +- Summary of warnings that should be addressed (or note if none found) +- Key strengths identified during validation +- Overall assessment of workflow quality +- Recommendation on readiness (ready to use / needs tweaks / needs revision / major rework needed) +- Suggested next steps for the user -**Validation Completed:** [current date] +Present this information in a clear, readable format - the exact structure is flexible as long as it covers all these points. -**Overall Status:** -[Based on all validation steps, determine overall status] +### 4. Update Report Status -**Validation Steps Completed:** -1. ✅ File Structure & Size - [PASS/FAIL/WARN] -2. ✅ Frontmatter Validation - [PASS/FAIL/WARN] -3. ✅ Menu Handling Validation - [PASS/FAIL/WARN] -4. ✅ Step Type Validation - [PASS/FAIL/WARN] -5. ✅ Output Format Validation - [PASS/FAIL/WARN] -6. ✅ Validation Design Check - [PASS/FAIL/WARN/N/A] -7. ✅ Instruction Style Check - [PASS/FAIL/WARN] -8. ✅ Collaborative Experience Check - [PASS/FAIL/WARN] -9. ✅ Cohesive Review - [EXCELLENT/GOOD/NEEDS WORK/PROBLEMATIC] -10. ✅ Plan Quality Validation - [FULLY IMPLEMENTED/PARTIALLY/MISSING/N/A] +Update the frontmatter of {validationReportFile} to set validationStatus to COMPLETE and add the completionDate. Keep existing fields like validationDate, workflowName, and workflowPath unchanged. -**Issues Summary:** +### 5. Present Summary to User -**Critical Issues (Must Fix):** -- [List any critical issues from all validation steps] -- [If none, state: No critical issues found] +Present a clear summary to the user that includes: -**Warnings (Should Fix):** -- [List any warnings from all validation steps] -- [If none, state: No warnings found] +- Confirmation that validation is complete +- Overall status of the workflow +- Quick results overview showing each validation step and its result +- Count of critical issues and warnings (or note if none found) +- Recommendation on workflow readiness +- Path to the full validation report +- Options for next steps (review detailed findings, make changes, explain results, or other actions) -**Strengths:** -- [List key strengths identified in validation] +Present this information in a natural, conversational way - the exact format doesn't matter as long as all this information is clearly communicated. -**Overall Assessment:** -[Summarize the overall quality of the workflow] - -**Recommendation:** -- [Ready to use / Ready with minor tweaks / Needs revision / Major rework needed] - -**Next Steps:** -- Review the detailed findings above -- Decide what changes to make -- Either fix issues directly or use edit workflow (if tri-modal) -``` - -### 3. Update Report Status - -Update frontmatter of {validationReportFile}: - -```yaml ---- -validationDate: [original date] -completionDate: [current date] -workflowName: {new_workflow_name} -workflowPath: {targetWorkflowPath} -validationStatus: COMPLETE ---- -``` - -### 4. Present Summary to User - -"**✅ Validation Complete!** - -I've completed extensive validation of your workflow. Here's the summary:" - -**Overall Status:** [Overall status from summary] - -**Quick Results:** -| Validation Step | Result | -|-----------------|--------| -| File Structure & Size | [emoji] [result] | -| Frontmatter | [emoji] [result] | -| Menu Handling | [emoji] [result] | -| Step Types | [emoji] [result] | -| Output Format | [emoji] [result] | -| Validation Design | [emoji] [result or N/A] | -| Instruction Style | [emoji] [result] | -| Collaborative Experience | [emoji] [result] | -| Cohesive Review | [emoji] [result] | -| Plan Quality | [emoji] [result or N/A] | - -**Issues Found:** -- **Critical:** [count or "none"] -- **Warnings:** [count or "none"] - -**Recommendation:** [Ready to use / Needs tweaks / Needs revision] - -"**The full validation report is available at:** -`{validationReportFile}` - -**Would you like me to:** -1. Review the detailed findings with you -2. Make specific changes to address issues -3. Explain any validation result in detail -4. Something else" - -### 5. Present MENU OPTIONS +### 6. Present MENU OPTIONS Display: **Validation Complete! Select an Option:** [R] Review Detailed Findings [F] Fix Issues [X] Exit Validation @@ -178,34 +113,19 @@ Display: **Validation Complete! Select an Option:** [R] Review Detailed Findings - IF X: "Validation complete. Your workflow is at: {targetWorkflowPath}. You can make changes and re-run validation anytime." - IF Any other comments or queries: help user respond then [Redisplay Menu Options](#5-present-menu-options) -### 6. If User Wants to Fix Issues +### 7. If User Wants to Fix Issues -**Options for fixing:** +Explain the available options for fixing issues: -**Option A: Manual Edits** -- User edits files directly -- Re-run validation to check fixes +- Manual edits: User edits files directly, then re-runs validation +- Guided edits: User specifies what to fix, help create specific edits for user approval +- Edit workflow: If the workflow has steps-e/, use the edit workflow to make systematic changes -**Option B: Guided Edits** -- User specifies what to fix -- Help create specific edits for user approval -- User applies edits +The exact format doesn't matter - just ensure the user understands their options for addressing issues. -**Option C: Edit Workflow (if tri-modal)** -- If workflow has steps-e/, use edit workflow -- Edit workflow can make systematic changes +### 8. Update Plan with Validation Status -### 7. Update Plan with Validation Status - -Update {workflowPlanFile} frontmatter: - -```yaml ---- -validationStatus: COMPLETE -validationDate: [current date] -validationReport: {validationReportFile} ---- -``` +If a plan file exists at {workflowPlanFile}, update its frontmatter to include the validation status (COMPLETE), the current validation date, and a reference to the validation report file. ## CRITICAL STEP COMPLETION NOTE diff --git a/src/modules/bmb/workflows/workflow/steps-v/step-11-plan-validation.md b/src/modules/bmb/workflows/workflow/steps-v/step-11-plan-validation.md index 83f55cae..32c951a6 100644 --- a/src/modules/bmb/workflows/workflow/steps-v/step-11-plan-validation.md +++ b/src/modules/bmb/workflows/workflow/steps-v/step-11-plan-validation.md @@ -2,9 +2,9 @@ name: 'step-11-plan-validation' description: 'Validate plan quality - ensure all user intent and requirements are implemented' -targetWorkflowPath: '{bmb_creations_output_folder}/workflows/{new_workflow_name}' -validationReportFile: '{targetWorkflowPath}/validation-report-{new_workflow_name}.md' -workflowPlanFile: '{targetWorkflowPath}/workflow-plan-{new_workflow_name}.md' +targetWorkflowPath: '{workflow_folder_path}' +validationReportFile: '{workflow_folder_path}/validation-report-{datetime}.md' +workflowPlanFile: '{workflow_folder_path}/workflow-plan.md' --- # Validation Step 11: Plan Quality Validation @@ -20,18 +20,19 @@ To validate that a workflow plan (if it exists) has been fully implemented - all - 🛑 DO NOT BE LAZY - LOAD AND REVIEW EVERY FILE - 📖 CRITICAL: Read the complete step file before taking any action - ✅ This validation step only runs if a plan file exists +- ⚙️ If any instruction references a subprocess, subagent, or tool you do not have access to, you MUST still achieve the outcome in your main context thread ### Step-Specific Rules: -- 🎯 Load the complete plan file -- 🚫 DO NOT skip checking any requirement from the plan -- 💬 Validate that built workflow matches plan specifications +- 🎯 Validate plan requirements using subprocess optimization - separate subprocess per requirement area for deep analysis +- 🚫 DO NOT skip checking any requirement from the plan - DO NOT BE LAZY +- 💬 Subprocess must either update validation report directly OR return structured findings to parent for aggregation - 🚪 This ensures the build actually delivered what was planned ## EXECUTION PROTOCOLS: -- 🎯 Load plan and extract all requirements/intent -- 💾 Check built workflow against plan +- 🎯 Load plan and extract all requirements/intent using subprocess optimization when available - separate subprocess per requirement area for deep analysis +- 💾 Subprocesses validate implementation against plan requirements and return findings for aggregation - 📖 Document gaps and quality issues - 🚫 Only run this step if workflowPlanFile exists @@ -61,126 +62,148 @@ First, check if {workflowPlanFile} exists: **DO NOT BE LAZY - Extract EVERY requirement from the plan:** -From {workflowPlanFile}, extract: +**SUBPROCESS EXECUTION PATTERN:** -**From Discovery Section:** -- User's original idea/vision -- Core problem being solved +Launch a subprocess that: +1. Loads {workflowPlanFile} +2. Extracts all requirements from each section (Discovery, Classification, Requirements, Design, Tools) +3. Returns structured requirements list to parent -**From Classification Section:** -- 4 key decisions (document output, module, continuable, tri-modal) -- Target path -- Workflow name +**SUBPROCESS RETURNS:** +Structured requirements list organized by section (discovery, classification, requirements, design, tools) with all extracted items and a count of total requirements. -**From Requirements Section:** -- Flow structure (linear/looping/branching) -- User interaction style -- Inputs required -- Output specifications -- Success criteria +**If subprocess unavailable:** Load {workflowPlanFile} in main context and extract requirements (larger context but still functional - demonstrates graceful fallback). -**From Design Section:** -- Step outline with names and purposes -- Flow diagram -- Interaction patterns -- File structure requirements - -**From Tools Section:** -- Tools configured -- Data files specified +--- ### 3. Validate Each Requirement Against Built Workflow -**For EACH requirement extracted:** +**DO NOT BE LAZY - For EACH requirement area, launch a subprocess that:** -Check the built workflow to see if it was implemented: +1. Loads relevant workflow files (workflow.md, step files, etc.) +2. Validates that specific requirement area is implemented correctly +3. Assesses quality of implementation +4. **EITHER** updates validation report directly with findings +5. **OR** returns structured validation results to parent for aggregation -**Discovery Validation:** +**PATTERN 2: Separate subprocess per requirement area for deep analysis** + +Each subprocess gets full context to deeply understand that requirement area and validate implementation quality: + +--- + +**SUBPROCESS 1: Discovery Validation** + +**Subprocess analyzes:** - ✅ Built workflow addresses the original problem? - ✅ Vision from discovery is reflected in final workflow? -**Classification Validation:** +**Subprocess returns:** +Discovery validation results indicating whether the original problem and vision from the plan are addressed in the built workflow, with quality assessment, status (✅/❌), and any gaps identified. + +--- + +**SUBPROCESS 2: Classification Validation** + +**Subprocess analyzes:** - ✅ Document output matches plan (yes/no)? - ✅ Module affiliation correct? - ✅ Continuable support as specified? - ✅ Tri-modal structure as specified? -**Requirements Validation:** +**Subprocess returns:** +Classification validation results for each classification attribute (document output, module, continuable, tri-modal) comparing what was specified vs what was implemented, with overall quality assessment, status (✅/❌), and any gaps. + +--- + +**SUBPROCESS 3: Requirements Validation** + +**Subprocess analyzes:** - ✅ Flow structure matches plan? - ✅ User interaction style as specified? - ✅ All required inputs configured? - ✅ Output format matches specification? - ✅ Success criteria achievable? -**Design Validation:** +**Subprocess returns:** +Requirements validation results for flow structure, interaction style, inputs, outputs, and success criteria comparing what was specified vs what was implemented, with overall quality assessment, status (✅/❌), and any gaps. + +--- + +**SUBPROCESS 4: Design Validation** + +**Subprocess analyzes:** - ✅ All steps from design present in workflow? - ✅ Step purposes match design? - ✅ Flow follows design diagram? - ✅ Interaction patterns as specified? -**Tools Validation:** +**Subprocess returns:** +Design validation results for each step from the plan checking if it exists in the workflow and if the purpose matches, along with whether the flow follows the design diagram and interaction patterns match, with overall quality assessment, status (✅/❌), and any gaps. + +--- + +**SUBPROCESS 5: Tools Validation** + +**Subprocess analyzes:** - ✅ Specified tools configured in workflow? - ✅ Data files created as specified? -### 4. Check Implementation Quality +**Subprocess returns:** +Tools validation results checking which specified tools are configured and which data files were created, with overall quality assessment, status (✅/❌), and any gaps. -For each implemented requirement, assess quality: +--- -**Quality Questions:** -- Is the implementation high quality or minimal/barely working? -- Would this actually facilitate well? -- Are there obvious gaps or issues? +**If subprocess unavailable:** Validate each requirement area sequentially in main context (larger context but still functional - demonstrates graceful fallback). -**Example:** -- Plan: "Highly collaborative, intent-based facilitation" -- Implementation: Has A/P menus, uses intent-based language ✅ +--- -- Plan: "Continuable workflow with session resume" -- Implementation: Has step-01b-continue.md, tracks stepsCompleted ✅ +### 4. Aggregate Findings and Update Report -### 5. Document Findings +After ALL requirement area subprocesses complete, aggregate findings into validation report. -```markdown -### Plan Quality Validation Results +Document the following information: -**Plan File:** {workflowPlanFile} -**Plan Exists:** ✅ Yes - -**Requirements Extracted:** [number] requirements from plan sections +**Plan Information:** +- Plan file location +- Whether a plan was found +- Total number of requirements extracted from the plan **Implementation Coverage:** +For each requirement area from the plan (Discovery/Vision, Classification attributes, Requirements specifications, Design elements, Tools): +- What was specified in the plan +- Whether it was implemented in the workflow +- Quality assessment (High/Medium/Low) +- Implementation status -| Requirement Area | Specified | Implemented | Quality | Status | -|------------------|-----------|--------------|---------|--------| -| Discovery/Vision | [summary] | ✅/❌ | High/Med/Low | ✅/❌ | -| Document Output | [yes/no] | ✅/❌ | High/Med/Low | ✅/❌ | -| Continuable | [yes/no] | ✅/❌ | High/Med/Low | ✅/❌ | -| Tri-Modal | [yes/no] | ✅/❌ | High/Med/Low | ✅/❌ | -| Flow Structure | [type] | ✅/❌ | High/Med/Low | ✅/❌ | -| Interaction Style | [style] | ✅/❌ | High/Med/Low | ✅/❌ | -| [Step 01] | [purpose] | ✅/❌ | High/Med/Low | ✅/❌ | -| [Step 02] | [purpose] | ✅/❌ | High/Med/Low | ✅/❌ | -| ... | ... | ... | ... | ... | - -**Missing Implementations:** -- [List any requirements from plan that are NOT in the built workflow] +**Implementation Gaps:** +List any requirements from the plan that are NOT present in the built workflow **Quality Issues:** -- [List any requirements that are implemented but with poor quality] +List any requirements that are implemented but with quality concerns -**Gaps Between Plan and Reality:** -- [List where the built workflow doesn't match the plan] +**Plan-Reality Alignment:** +Describe where the built workflow doesn't match what was planned -**Plan Implementation Score:** [X]% +**Overall Assessment:** +- Plan implementation score (percentage) +- Overall status (Fully Implemented/Partially Implemented/Poorly Implemented/Missing Critical Items) -**Status:** ✅ FULLY IMPLEMENTED / ⚠️ PARTIALLY IMPLEMENTED / ❌ POORLY IMPLEMENTED / ❌ MISSING CRITICAL ITEMS -``` +**Quality Assessment Framework:** +For each implemented requirement, assess quality: +- **High Quality**: Implementation follows best practices, would facilitate effectively +- **Medium Quality**: Functional but has issues or gaps +- **Low Quality**: Minimal/barely working, would not facilitate well -### 6. Append to Report +Examples: +- Plan specifies "Highly collaborative, intent-based facilitation" and implementation has A/P menus with intent-based language = High Quality +- Plan specifies "Continuable workflow with session resume" and implementation has step-01b-continue.md tracking stepsCompleted = High Quality -Append findings to {validationReportFile} after the "## Cohesive Review" section. +### 5. Append to Report -### 7. Save and Complete +Append the aggregated findings to {validationReportFile} after the "## Cohesive Review" section. + +### 6. Save and Complete Save the validation report. This is the final validation step. @@ -193,17 +216,22 @@ Save the validation report. This is the final validation step. ### ✅ SUCCESS: -- Plan file loaded completely -- Every requirement extracted and validated -- Implementation gaps documented +- Plan file loaded completely (in subprocess or main context) +- Every requirement extracted and validated using subprocess optimization when available +- Each requirement area analyzed in separate subprocess (or main context with graceful fallback) +- Implementation gaps documented with structured findings - Quality assessed for each requirement -- Findings appended to report +- Findings aggregated and appended to report +- Context saved via subprocess pattern (return only findings, not full file contents) ### ❌ SYSTEM FAILURE: - Not loading complete plan - Skipping requirement checks +- Not validating each requirement area deeply +- Not using subprocess optimization when available - Not documenting implementation gaps - Not assessing quality +- Loading full file contents into parent instead of returning only findings -**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check EVERY requirement from the plan. Document all gaps. +**Master Rule:** Validation is systematic and thorough. DO NOT BE LAZY. Check EVERY requirement from the plan. Use subprocess optimization (Pattern 2: per-requirement deep analysis) when available. Document all gaps. Return only findings to parent, not full file contents. diff --git a/src/modules/bmb/workflows/workflow/templates/step-01-init-continuable-template.md b/src/modules/bmb/workflows/workflow/templates/step-01-init-continuable-template.md index 9b5794ef..84e4628c 100644 --- a/src/modules/bmb/workflows/workflow/templates/step-01-init-continuable-template.md +++ b/src/modules/bmb/workflows/workflow/templates/step-01-init-continuable-template.md @@ -17,11 +17,11 @@ workflow\*path: `{project-root}/_bmad/[module-path]/workflows/[workflow-name]` # File References (all use {variable} format in file) -thisStepFile: `{workflow_path}/steps/step-01-init.md` -nextStepFile: `{workflow_path}/steps/step-02-[step-name].md` +thisStepFile: `./step-01-init.md` +nextStepFile: `./step-02-[step-name].md` workflowFile: `{workflow_path}/workflow.md` outputFile: `{output_folder}/[output-file-name]-{project_name}.md` -continueFile: `{workflow_path}/steps/step-01b-continue.md` +continueFile: `./step-01b-continue.md` templateFile: `{workflow_path}/templates/[main-template].md` # Template References diff --git a/src/modules/bmb/workflows/workflow/templates/step-1b-template.md b/src/modules/bmb/workflows/workflow/templates/step-1b-template.md index 8e34bdd4..0f5e7104 100644 --- a/src/modules/bmb/workflows/workflow/templates/step-1b-template.md +++ b/src/modules/bmb/workflows/workflow/templates/step-1b-template.md @@ -17,7 +17,7 @@ workflow\*path: '{project-root}/_bmad/[module-path]/workflows/[workflow-name]' # File References (all use {variable} format in file) -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01b-continue.md' outputFile: '{output_folder}/[output-file-name]-{project_name}.md' workflowFile: '{workflow_path}/workflow.md' diff --git a/src/modules/bmb/workflows/workflow/templates/step-template.md b/src/modules/bmb/workflows/workflow/templates/step-template.md index a6758603..87098d86 100644 --- a/src/modules/bmb/workflows/workflow/templates/step-template.md +++ b/src/modules/bmb/workflows/workflow/templates/step-template.md @@ -15,9 +15,9 @@ workflow\*path: '{project-root}/_bmad/[module]/reference/workflows/[workflow-nam # File References (all use {variable} format in file) -thisStepFile: '{workflow_path}/steps/step-[N]-[short-name].md' -nextStep{N+1}: '{workflow_path}/steps/step-[N+1]-[next-short-name].md' # Remove for final step or no next step -altStep{Y}: '{workflow_path}/steps/step-[Y]-[some-other-step].md' # if there is an alternate next story depending on logic +thisStepFile: './step-[N]-[short-name].md' +nextStep{N+1}: './step-[N+1]-[next-short-name].md' # Remove for final step or no next step +altStep{Y}: './step-[Y]-[some-other-step].md' # if there is an alternate next story depending on logic workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/[output-file-name]-{project_name}.md' @@ -243,7 +243,7 @@ Display: "**Select an Option:** [A] [Continue to Step Foo] [A] [Continue to Step ### Initialization Step Example -See [step-01-init.md](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md) for an example of: +See [step-01-discovery.md](../steps-c/step-01-discovery.md) for an example of: - Detecting existing workflow state and short circuit to 1b - Creating output documents from templates @@ -252,16 +252,16 @@ See [step-01-init.md](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/src ### Continuation Step Example -See [step-01b-continue.md](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md) for an example of: +See [step-01b-continue.md](../steps-c/step-01b-continuation.md) for an example of: -- Handling already-in-progress workflows -- Detecting completion status +- Handling already-in-progress workflows that the user now wants to continue progress +- Detecting completion status (which step was already completed last) - Presenting update vs new plan options -- Seamless workflow resumption +- Seamless workflow resumption by reviewing existing plan and output thus far that has been recorded and then jumping to the proper step ### Standard Step with Menu Example -See [step-02-profile.md](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md) for an example of: +See [step-02-classification.md](../steps-c/step-02-classification.md#8-present-menu-options) for an example of: - Presenting a menu with A/P/C options - Forcing halt until user selects 'C' (Continue) @@ -271,12 +271,12 @@ See [step-02-profile.md](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/ ### Final Step Example -See [step-06-prep-schedule.md](https://github.com/bmad-code-org/BMAD-METHOD/blob/main/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md) for an example of: +See [step-11-completion.md](../steps-c/step-11-completion.md) for an example of: - Completing workflow deliverables - Marking workflow as complete in frontmatter - Providing final success messages -- Ending the workflow session gracefully +- Ending the workflow session gracefully or moving on to a validation workflow if applicable ## Best Practices diff --git a/src/modules/bmb/workflows/workflow/templates/workflow-template.md b/src/modules/bmb/workflows/workflow/templates/workflow-template.md index 5cc687a3..42a3d35f 100644 --- a/src/modules/bmb/workflows/workflow/templates/workflow-template.md +++ b/src/modules/bmb/workflows/workflow/templates/workflow-template.md @@ -97,8 +97,6 @@ Copy the template above and replace: Update the last line of the workflow.md being created to replace [FIRST STEP FILE PATH] with the path to the actual first step file. -Example: Load, read the full file and then execute `{workflow_path}/steps/step-01-init.md` to begin the workflow. +Example: Load, read the full file and then execute `./step-01-init.md` to begin the workflow. -### NOTE: You can View a real example of a perfect workflow.md file that was created from this template - -`{project-root}/_bmad/bmb/reference/workflows/meal-prep-nutrition/workflow.md` +### NOTE: You can View a real example of a perfect workflow.md file from the one you were executed from `../workflow.md` diff --git a/src/modules/bmb/workflows/workflow/workflow.md b/src/modules/bmb/workflows/workflow/workflow.md index a3e15c03..692ea689 100644 --- a/src/modules/bmb/workflows/workflow/workflow.md +++ b/src/modules/bmb/workflows/workflow/workflow.md @@ -64,6 +64,7 @@ Load and read full config from {project-root}/_bmad/bmb/config.yaml and resolve: - If user invoked with "create workflow" or "new workflow" or "build workflow" → Set mode to **create** - If user invoked with "validate workflow" or "review workflow" or "-v" or "--validate" → Set mode to **validate** +- If user invoked with "validate workflow MAX-PARALLEL" or "review workflow MAX-PARALLEL" or "-vmax" or "--validate-max" → Set mode to **validate-max-parallel** - If user invoked with "edit workflow" or "modify workflow" or "-e" or "--edit" → Set mode to **edit** **If mode is still unclear, ask user:** @@ -72,6 +73,7 @@ Load and read full config from {project-root}/_bmad/bmb/config.yaml and resolve: **[C]reate** - Build a new workflow from scratch **[V]alidate** - Review an existing workflow and generate validation report +**[VMP] Validate Max Parallel** - Review an existing workflow and generate validation report running max steps as possible in parallel **[E]dit** - Modify an existing workflow Please select: [C]reate / [V]alidate / [E]dit" @@ -98,6 +100,10 @@ Please select: [F]rom scratch / [C]onvert existing" Prompt for workflow path: "Which workflow would you like to validate? Please provide the path to the workflow.md file." Then load, read completely, and execute `steps-v/step-01-validate.md` +**IF mode == validate-max-parallel:** +Prompt for workflow path: "Which workflow would you like to validate? Please provide the path to the workflow.md file." validate a subprocess or task agent tool or similar is available +Then load, read completely, and execute `steps-v/step-01-validate-max-mode.md` + **IF mode == edit:** Prompt for workflow path: "Which workflow would you like to edit? Please provide the path to the workflow.md file." Then load, read completely, and execute `steps-e/step-e-01-assess-workflow.md` diff --git a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md index 661c68f4..ef1719ef 100644 --- a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md +++ b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md @@ -6,8 +6,8 @@ description: 'Initialize the game brainstorming workflow and validate readiness' workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/brainstorm-game' # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-context.md' +thisStepFile: './step-01-init.md' +nextStepFile: './step-02-context.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/brainstorming-session-{date}.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md index 9380031a..b7312261 100644 --- a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md +++ b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md @@ -6,8 +6,8 @@ description: 'Load game-specific brainstorming context and techniques' workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/brainstorm-game' # File References -thisStepFile: '{workflow_path}/steps/step-02-context.md' -nextStepFile: '{workflow_path}/steps/step-03-ideation.md' +thisStepFile: './step-02-context.md' +nextStepFile: './step-03-ideation.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/brainstorming-session-{date}.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md index 3e4c7d5b..355297a0 100644 --- a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md +++ b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md @@ -6,8 +6,8 @@ description: 'Execute the brainstorming session with game-specific techniques' workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/brainstorm-game' # File References -thisStepFile: '{workflow_path}/steps/step-03-ideation.md' -nextStepFile: '{workflow_path}/steps/step-04-complete.md' +thisStepFile: './step-03-ideation.md' +nextStepFile: './step-04-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/brainstorming-session-{date}.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md index 14118fc1..3807e0af 100644 --- a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md +++ b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md @@ -6,7 +6,7 @@ description: 'Complete the brainstorming session with summary and next steps' workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/brainstorm-game' # File References -thisStepFile: '{workflow_path}/steps/step-04-complete.md' +thisStepFile: './step-04-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/brainstorming-session-{date}.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md index 1ba0767e..948ab591 100644 --- a/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md +++ b/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md @@ -28,7 +28,7 @@ stepsCompleted: [1, 2, 3, ...] # Array of completed step numbers To begin, load and execute step-01-init.md: ``` -{workflow_path}/steps/step-01-init.md +./step-01-init.md ``` ## Critical Rules diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md index 534e57e7..b203fbe2 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md @@ -6,9 +6,9 @@ description: 'Initialize the Game Brief workflow by detecting continuation state workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-vision.md' -continueStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01-init.md' +nextStepFile: './step-02-vision.md' +continueStepFile: './step-01b-continue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md index bd943bde..514be496 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md @@ -6,7 +6,7 @@ description: 'Resume an interrupted Game Brief workflow from the last completed workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01b-continue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' --- diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md index 85ddd1ad..34f84a06 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md @@ -6,8 +6,8 @@ description: 'Define the core game vision including name, concept, pitch, and vi workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-02-vision.md' -nextStepFile: '{workflow_path}/steps/step-03-market.md' +thisStepFile: './step-02-vision.md' +nextStepFile: './step-03-market.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md index 1f902b29..6fb67ffb 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md @@ -6,8 +6,8 @@ description: 'Define target audience and market context' workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-03-market.md' -nextStepFile: '{workflow_path}/steps/step-04-fundamentals.md' +thisStepFile: './step-03-market.md' +nextStepFile: './step-04-fundamentals.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md index 63ce809f..2238262d 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md @@ -6,8 +6,8 @@ description: 'Define core gameplay pillars, mechanics, and player experience goa workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-04-fundamentals.md' -nextStepFile: '{workflow_path}/steps/step-05-scope.md' +thisStepFile: './step-04-fundamentals.md' +nextStepFile: './step-05-scope.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md index 7a8c8e50..3f5fce6a 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md @@ -6,8 +6,8 @@ description: 'Define project scope including platforms, constraints, and resourc workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-05-scope.md' -nextStepFile: '{workflow_path}/steps/step-06-references.md' +thisStepFile: './step-05-scope.md' +nextStepFile: './step-06-references.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md index 05241075..3ed60259 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md @@ -6,8 +6,8 @@ description: 'Define inspiration games, competitive analysis, and key differenti workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-06-references.md' -nextStepFile: '{workflow_path}/steps/step-07-content.md' +thisStepFile: './step-06-references.md' +nextStepFile: './step-07-content.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md index 1e98a5a9..1a48dcc1 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md @@ -6,8 +6,8 @@ description: 'Define content framework, art/audio direction, and risk assessment workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-07-content.md' -nextStepFile: '{workflow_path}/steps/step-08-complete.md' +thisStepFile: './step-07-content.md' +nextStepFile: './step-08-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md index 2ab5abe0..3b3f6f7b 100644 --- a/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md +++ b/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md @@ -6,7 +6,7 @@ description: 'Define success criteria and complete the game brief with handoff g workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/game-brief' # File References -thisStepFile: '{workflow_path}/steps/step-08-complete.md' +thisStepFile: './step-08-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-brief.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md index 5f87633d..ae40ccd3 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md @@ -6,9 +6,9 @@ description: 'Initialize the GDD workflow by detecting continuation state and se workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-context.md' -continueStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01-init.md' +nextStepFile: './step-02-context.md' +continueStepFile: './step-01b-continue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md index eb70d7d2..29318ee4 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md @@ -6,7 +6,7 @@ description: 'Resume an interrupted GDD workflow from the last completed step' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01b-continue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' --- diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md index 12b5bd03..300ffd6d 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md @@ -6,8 +6,8 @@ description: 'Load game context from brief and determine the game type' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-02-context.md' -nextStepFile: '{workflow_path}/steps/step-03-platforms.md' +thisStepFile: './step-02-context.md' +nextStepFile: './step-03-platforms.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md index 0ccc1ee6..5433eab1 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md @@ -6,8 +6,8 @@ description: 'Define target platforms and target audience for the game' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-03-platforms.md' -nextStepFile: '{workflow_path}/steps/step-04-vision.md' +thisStepFile: './step-03-platforms.md' +nextStepFile: './step-04-vision.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md index 1c5e6623..1df86679 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md @@ -6,8 +6,8 @@ description: 'Define project goals, context, and unique selling points' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-04-vision.md' -nextStepFile: '{workflow_path}/steps/step-05-core-gameplay.md' +thisStepFile: './step-04-vision.md' +nextStepFile: './step-05-core-gameplay.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md index ae62ab2f..b2756e53 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md @@ -6,8 +6,8 @@ description: 'Define game pillars, core gameplay loop, and win/loss conditions' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-05-core-gameplay.md' -nextStepFile: '{workflow_path}/steps/step-06-mechanics.md' +thisStepFile: './step-05-core-gameplay.md' +nextStepFile: './step-06-mechanics.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md index 0dbc9eb8..e5322a02 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md @@ -6,8 +6,8 @@ description: 'Define primary game mechanics and control schemes' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-06-mechanics.md' -nextStepFile: '{workflow_path}/steps/step-07-game-type.md' +thisStepFile: './step-06-mechanics.md' +nextStepFile: './step-07-game-type.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md index 00ae53b1..4fc8bcd7 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md @@ -6,8 +6,8 @@ description: 'Process game-type specific sections from the loaded game type guid workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-07-game-type.md' -nextStepFile: '{workflow_path}/steps/step-08-progression.md' +thisStepFile: './step-07-game-type.md' +nextStepFile: './step-08-progression.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md index bcd3a33e..2cb2ae31 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md @@ -6,8 +6,8 @@ description: 'Define player progression systems and game balance' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-08-progression.md' -nextStepFile: '{workflow_path}/steps/step-09-levels.md' +thisStepFile: './step-08-progression.md' +nextStepFile: './step-09-levels.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md index d286cc42..edd35846 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md @@ -6,8 +6,8 @@ description: 'Define level design framework and level progression' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-09-levels.md' -nextStepFile: '{workflow_path}/steps/step-10-art-audio.md' +thisStepFile: './step-09-levels.md' +nextStepFile: './step-10-art-audio.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md index a9ceb02c..8ac6b3c5 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md @@ -6,8 +6,8 @@ description: 'Define art style and audio direction' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-10-art-audio.md' -nextStepFile: '{workflow_path}/steps/step-11-technical.md' +thisStepFile: './step-10-art-audio.md' +nextStepFile: './step-11-technical.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md index a3b3e3d6..e60fcce2 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md @@ -6,8 +6,8 @@ description: 'Define technical specifications and requirements' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-11-technical.md' -nextStepFile: '{workflow_path}/steps/step-12-epics.md' +thisStepFile: './step-11-technical.md' +nextStepFile: './step-12-epics.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md index 83fc2213..dff49301 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md @@ -6,8 +6,8 @@ description: 'Define development epics and high-level story breakdown' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-12-epics.md' -nextStepFile: '{workflow_path}/steps/step-13-metrics.md' +thisStepFile: './step-12-epics.md' +nextStepFile: './step-13-metrics.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' epicsOutputFile: '{output_folder}/epics.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md index 00fed1be..d2360f77 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md @@ -6,8 +6,8 @@ description: 'Define success metrics for technical and gameplay evaluation' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-13-metrics.md' -nextStepFile: '{workflow_path}/steps/step-14-complete.md' +thisStepFile: './step-13-metrics.md' +nextStepFile: './step-14-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' diff --git a/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md b/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md index df6f531f..cafa778d 100644 --- a/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md +++ b/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md @@ -6,7 +6,7 @@ description: 'Document out of scope items, capture assumptions, and provide hand workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/gdd' # File References -thisStepFile: '{workflow_path}/steps/step-14-complete.md' +thisStepFile: './step-14-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/gdd.md' epicsFile: '{output_folder}/epics.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md index fc022641..aa3dfc7b 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md @@ -6,9 +6,9 @@ description: 'Initialize narrative workflow, load GDD context, and assess narrat workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -continueStepFile: '{workflow_path}/steps/step-01b-continue.md' -nextStepFile: '{workflow_path}/steps/step-02-foundation.md' +thisStepFile: './step-01-init.md' +continueStepFile: './step-01b-continue.md' +nextStepFile: './step-02-foundation.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' templateFile: '{workflow_path}/templates/narrative-template.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md index 8acb86a4..28558abe 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md @@ -6,21 +6,21 @@ description: 'Continue an existing narrative workflow from where it left off' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01b-continue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' # Step Files (for routing) -step02: '{workflow_path}/steps/step-02-foundation.md' -step03: '{workflow_path}/steps/step-03-story.md' -step04: '{workflow_path}/steps/step-04-characters.md' -step05: '{workflow_path}/steps/step-05-world.md' -step06: '{workflow_path}/steps/step-06-dialogue.md' -step07: '{workflow_path}/steps/step-07-environmental.md' -step08: '{workflow_path}/steps/step-08-delivery.md' -step09: '{workflow_path}/steps/step-09-integration.md' -step10: '{workflow_path}/steps/step-10-production.md' -step11: '{workflow_path}/steps/step-11-complete.md' +step02: './step-02-foundation.md' +step03: './step-03-story.md' +step04: './step-04-characters.md' +step05: './step-05-world.md' +step06: './step-06-dialogue.md' +step07: './step-07-environmental.md' +step08: './step-08-delivery.md' +step09: './step-09-integration.md' +step10: './step-10-production.md' +step11: './step-11-complete.md' --- # Step 1b: Continue Existing Narrative diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md index c432467e..509cdcad 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md @@ -6,8 +6,8 @@ description: 'Define narrative premise, themes, tone, and story structure' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-02-foundation.md' -nextStepFile: '{workflow_path}/steps/step-03-story.md' +thisStepFile: './step-02-foundation.md' +nextStepFile: './step-03-story.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md index fe1278df..5f633e7e 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md @@ -6,8 +6,8 @@ description: 'Define major story beats and narrative pacing' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-03-story.md' -nextStepFile: '{workflow_path}/steps/step-04-characters.md' +thisStepFile: './step-03-story.md' +nextStepFile: './step-04-characters.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md index a5bb6537..e03f6815 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md @@ -6,8 +6,8 @@ description: 'Develop all characters including protagonists, antagonists, suppor workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-04-characters.md' -nextStepFile: '{workflow_path}/steps/step-05-world.md' +thisStepFile: './step-04-characters.md' +nextStepFile: './step-05-world.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md index 2e8da212..a77a6bc7 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md @@ -6,8 +6,8 @@ description: 'Build the world including setting, history, factions, and key loca workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-05-world.md' -nextStepFile: '{workflow_path}/steps/step-06-dialogue.md' +thisStepFile: './step-05-world.md' +nextStepFile: './step-06-dialogue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md index cef4ed33..70a79015 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md @@ -6,8 +6,8 @@ description: 'Define dialogue style, key conversations, and branching systems' workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-06-dialogue.md' -nextStepFile: '{workflow_path}/steps/step-07-environmental.md' +thisStepFile: './step-06-dialogue.md' +nextStepFile: './step-07-environmental.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md index a6dcf7b0..05f37827 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md @@ -6,8 +6,8 @@ description: 'Plan environmental storytelling including visual, audio, and found workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-07-environmental.md' -nextStepFile: '{workflow_path}/steps/step-08-delivery.md' +thisStepFile: './step-07-environmental.md' +nextStepFile: './step-08-delivery.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md index 3af385db..2e76b208 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md @@ -6,8 +6,8 @@ description: 'Design narrative delivery methods including cutscenes, in-game sto workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-08-delivery.md' -nextStepFile: '{workflow_path}/steps/step-09-integration.md' +thisStepFile: './step-08-delivery.md' +nextStepFile: './step-09-integration.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md index a99f41df..460eac73 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md @@ -6,8 +6,8 @@ description: 'Define how narrative integrates with gameplay including gating, ag workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-09-integration.md' -nextStepFile: '{workflow_path}/steps/step-10-production.md' +thisStepFile: './step-09-integration.md' +nextStepFile: './step-10-production.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md index d3a8b405..f262956d 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md @@ -6,8 +6,8 @@ description: 'Plan production scope including writing estimates, localization, a workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-10-production.md' -nextStepFile: '{workflow_path}/steps/step-11-complete.md' +thisStepFile: './step-10-production.md' +nextStepFile: './step-11-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md b/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md index 205e9d89..a6bd67c9 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md +++ b/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md @@ -6,7 +6,7 @@ description: 'Complete the narrative workflow with final summary, visualizations workflow_path: '{project-root}/_bmad/bmgd/workflows/2-design/narrative' # File References -thisStepFile: '{workflow_path}/steps/step-11-complete.md' +thisStepFile: './step-11-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/narrative-design.md' diff --git a/src/modules/bmgd/workflows/2-design/narrative/workflow.md b/src/modules/bmgd/workflows/2-design/narrative/workflow.md index e9012d29..2757c351 100644 --- a/src/modules/bmgd/workflows/2-design/narrative/workflow.md +++ b/src/modules/bmgd/workflows/2-design/narrative/workflow.md @@ -36,7 +36,7 @@ stepsCompleted: [1, 2, 3, ...] # Array of completed step numbers To begin, load and execute step-01-init.md: ``` -{workflow_path}/steps/step-01-init.md +./step-01-init.md ``` ## Critical Rules diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md index 37ee96e7..36448a27 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md @@ -6,9 +6,9 @@ description: 'Initialize the architecture workflow, validate readiness, and disc workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -continueStepFile: '{workflow_path}/steps/step-01b-continue.md' -nextStepFile: '{workflow_path}/steps/step-02-context.md' +thisStepFile: './step-01-init.md' +continueStepFile: './step-01b-continue.md' +nextStepFile: './step-02-context.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' templateFile: '{workflow_path}/templates/architecture-template.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md index 0f095fca..4ac31018 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md @@ -6,19 +6,19 @@ description: 'Continue an existing architecture workflow from where it left off' workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' +thisStepFile: './step-01b-continue.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' # Step Files (for routing) -step02: '{workflow_path}/steps/step-02-context.md' -step03: '{workflow_path}/steps/step-03-starter.md' -step04: '{workflow_path}/steps/step-04-decisions.md' -step05: '{workflow_path}/steps/step-05-crosscutting.md' -step06: '{workflow_path}/steps/step-06-structure.md' -step07: '{workflow_path}/steps/step-07-patterns.md' -step08: '{workflow_path}/steps/step-08-validation.md' -step09: '{workflow_path}/steps/step-09-complete.md' +step02: './step-02-context.md' +step03: './step-03-starter.md' +step04: './step-04-decisions.md' +step05: './step-05-crosscutting.md' +step06: './step-06-structure.md' +step07: './step-07-patterns.md' +step08: './step-08-validation.md' +step09: './step-09-complete.md' --- # Step 1b: Continue Existing Architecture diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md index ffa6009e..7c83a111 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md @@ -6,8 +6,8 @@ description: 'Load and understand project context from GDD and supporting docume workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-02-context.md' -nextStepFile: '{workflow_path}/steps/step-03-starter.md' +thisStepFile: './step-02-context.md' +nextStepFile: './step-03-starter.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md index eeda5e90..bc55778b 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md @@ -6,8 +6,8 @@ description: 'Discover and evaluate game engine and starter template options' workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-03-starter.md' -nextStepFile: '{workflow_path}/steps/step-04-decisions.md' +thisStepFile: './step-03-starter.md' +nextStepFile: './step-04-decisions.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md index de1d6e9c..025e13fa 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md @@ -6,8 +6,8 @@ description: 'Facilitate collaborative architectural decision making for game sy workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-04-decisions.md' -nextStepFile: '{workflow_path}/steps/step-05-crosscutting.md' +thisStepFile: './step-04-decisions.md' +nextStepFile: './step-05-crosscutting.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md index 46a24b91..d195dc0c 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md @@ -6,8 +6,8 @@ description: 'Address cross-cutting concerns that affect all game systems' workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-05-crosscutting.md' -nextStepFile: '{workflow_path}/steps/step-06-structure.md' +thisStepFile: './step-05-crosscutting.md' +nextStepFile: './step-06-structure.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md index 4c6160c4..698aa6d2 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md @@ -6,8 +6,8 @@ description: 'Define project structure, directory organization, and architectura workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-06-structure.md' -nextStepFile: '{workflow_path}/steps/step-07-patterns.md' +thisStepFile: './step-06-structure.md' +nextStepFile: './step-07-patterns.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md index 08099061..31ccc90b 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md @@ -6,8 +6,8 @@ description: 'Design implementation patterns and novel architectural patterns fo workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-07-patterns.md' -nextStepFile: '{workflow_path}/steps/step-08-validation.md' +thisStepFile: './step-07-patterns.md' +nextStepFile: './step-08-validation.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md index 5b550d1a..c8785a5c 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md @@ -6,8 +6,8 @@ description: 'Validate architectural coherence and completeness' workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-08-validation.md' -nextStepFile: '{workflow_path}/steps/step-09-complete.md' +thisStepFile: './step-08-validation.md' +nextStepFile: './step-09-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' checklistFile: '{workflow_path}/checklist.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md index 2247d83e..810011c2 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md @@ -6,7 +6,7 @@ description: 'Complete the architecture workflow with final review and handoff g workflow_path: '{project-root}/_bmad/bmgd/workflows/3-technical/game-architecture' # File References -thisStepFile: '{workflow_path}/steps/step-09-complete.md' +thisStepFile: './step-09-complete.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{output_folder}/game-architecture.md' diff --git a/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md b/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md index 9311f67e..60a9595e 100644 --- a/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md +++ b/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md @@ -34,7 +34,7 @@ stepsCompleted: [1, 2, 3, ...] # Array of completed step numbers To begin, load and execute step-01-init.md: ``` -{workflow_path}/steps/step-01-init.md +./step-01-init.md ``` ## Critical Rules diff --git a/src/modules/bmm/agents/pm.agent.yaml b/src/modules/bmm/agents/pm.agent.yaml index 28326994..8e44cd9b 100644 --- a/src/modules/bmm/agents/pm.agent.yaml +++ b/src/modules/bmm/agents/pm.agent.yaml @@ -26,9 +26,17 @@ agent: workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" description: "[WS] Get workflow status or initialize a workflow if not already done (optional)" - - trigger: PR or fuzzy match on prd + - trigger: CP or fuzzy match on create-prd exec: "{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/workflow.md" - description: "[PR] Create Product Requirements Document (PRD) (Required for BMad Method flow)" + description: "[CP] Create Product Requirements Document (PRD)" + + - trigger: VP or fuzzy match on validate-prd + exec: "{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/workflow.md" + description: "[VP] Validate a Product Requirements Document (PRD)" + + - trigger: EP or fuzzy match on edit-prd + exec: "{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/workflow.md" + description: "[EP] Edit a Product Requirements Document (PRD)" - trigger: ES or fuzzy match on epics-stories exec: "{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md" diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv b/src/modules/bmm/workflows/2-plan-workflows/prd/data/domain-complexity.csv similarity index 100% rename from src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv rename to src/modules/bmm/workflows/2-plan-workflows/prd/data/domain-complexity.csv diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md b/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md new file mode 100644 index 00000000..755230be --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md @@ -0,0 +1,197 @@ +# BMAD PRD Purpose + +**The PRD is the top of the required funnel that feeds all subsequent product development work in rhw BMad Method.** + +--- + +## What is a BMAD PRD? + +A dual-audience document serving: +1. **Human Product Managers and builders** - Vision, strategy, stakeholder communication +2. **LLM Downstream Consumption** - UX Design → Architecture → Epics → Development AI Agents + +Each successive document becomes more AI-tailored and granular. + +--- + +## Core Philosophy: Information Density + +**High Signal-to-Noise Ratio** + +Every sentence must carry information weight. LLMs consume precise, dense content efficiently. + +**Anti-Patterns (Eliminate These):** +- ❌ "The system will allow users to..." → ✅ "Users can..." +- ❌ "It is important to note that..." → ✅ State the fact directly +- ❌ "In order to..." → ✅ "To..." +- ❌ Conversational filler and padding → ✅ Direct, concise statements + +**Goal:** Maximum information per word. Zero fluff. + +--- + +## The Traceability Chain + +**PRD starts the chain:** +``` +Vision → Success Criteria → User Journeys → Functional Requirements → (future: User Stories) +``` + +**In the PRD, establish:** +- Vision → Success Criteria alignment +- Success Criteria → User Journey coverage +- User Journey → Functional Requirement mapping +- All requirements traceable to user needs + +**Why:** Each downstream artifact (UX, Architecture, Epics, Stories) must trace back to documented user needs and business objectives. This chain ensures we build the right thing. + +--- + +## What Makes Great Functional Requirements? + +### FRs are Capabilities, Not Implementation + +**Good FR:** "Users can reset their password via email link" +**Bad FR:** "System sends JWT via email and validates with database" (implementation leakage) + +**Good FR:** "Dashboard loads in under 2 seconds for 95th percentile" +**Bad FR:** "Fast loading time" (subjective, unmeasurable) + +### SMART Quality Criteria + +**Specific:** Clear, precisely defined capability +**Measurable:** Quantifiable with test criteria +**Attainable:** Realistic within constraints +**Relevant:** Aligns with business objectives +**Traceable:** Links to source (executive summary or user journey) + +### FR Anti-Patterns + +**Subjective Adjectives:** +- ❌ "easy to use", "intuitive", "user-friendly", "fast", "responsive" +- ✅ Use metrics: "completes task in under 3 clicks", "loads in under 2 seconds" + +**Implementation Leakage:** +- ❌ Technology names, specific libraries, implementation details +- ✅ Focus on capability and measurable outcomes + +**Vague Quantifiers:** +- ❌ "multiple users", "several options", "various formats" +- ✅ "up to 100 concurrent users", "3-5 options", "PDF, DOCX, TXT formats" + +**Missing Test Criteria:** +- ❌ "The system shall provide notifications" +- ✅ "The system shall send email notifications within 30 seconds of trigger event" + +--- + +## What Makes Great Non-Functional Requirements? + +### NFRs Must Be Measurable + +**Template:** +``` +"The system shall [metric] [condition] [measurement method]" +``` + +**Examples:** +- ✅ "The system shall respond to API requests in under 200ms for 95th percentile as measured by APM monitoring" +- ✅ "The system shall maintain 99.9% uptime during business hours as measured by cloud provider SLA" +- ✅ "The system shall support 10,000 concurrent users as measured by load testing" + +### NFR Anti-Patterns + +**Unmeasurable Claims:** +- ❌ "The system shall be scalable" → ✅ "The system shall handle 10x load growth through horizontal scaling" +- ❌ "High availability required" → ✅ "99.9% uptime as measured by cloud provider SLA" + +**Missing Context:** +- ❌ "Response time under 1 second" → ✅ "API response time under 1 second for 95th percentile under normal load" + +--- + +## Domain-Specific Requirements + +**Auto-Detect and Enforce Based on Project Context** + +Certain industries have mandatory requirements that must be present: + +- **Healthcare:** HIPAA Privacy & Security Rules, PHI encryption, audit logging, MFA +- **Fintech:** PCI-DSS Level 1, AML/KYC compliance, SOX controls, financial audit trails +- **GovTech:** NIST framework, Section 508 accessibility (WCAG 2.1 AA), FedRAMP, data residency +- **E-Commerce:** PCI-DSS for payments, inventory accuracy, tax calculation by jurisdiction + +**Why:** Missing these requirements in the PRD means they'll be missed in architecture and implementation, creating expensive rework. During PRD creation there is a step to cover this - during validation we want to make sure it was covered. For this purpose steps will utilize a domain-complexity.csv and project-types.csv. + +--- + +## Document Structure (Markdown, Human-Readable) + +### Required Sections +1. **Executive Summary** - Vision, differentiator, target users +2. **Success Criteria** - Measurable outcomes (SMART) +3. **Product Scope** - MVP, Growth, Vision phases +4. **User Journeys** - Comprehensive coverage +5. **Domain Requirements** - Industry-specific compliance (if applicable) +6. **Innovation Analysis** - Competitive differentiation (if applicable) +7. **Project-Type Requirements** - Platform-specific needs +8. **Functional Requirements** - Capability contract (FRs) +9. **Non-Functional Requirements** - Quality attributes (NFRs) + +### Formatting for Dual Consumption + +**For Humans:** +- Clear, professional language +- Logical flow from vision to requirements +- Easy for stakeholders to review and approve + +**For LLMs:** +- ## Level 2 headers for all main sections (enables extraction) +- Consistent structure and patterns +- Precise, testable language +- High information density + +--- + +## Downstream Impact + +**How the PRD Feeds Next Artifacts:** + +**UX Design:** +- User journeys → interaction flows +- FRs → design requirements +- Success criteria → UX metrics + +**Architecture:** +- FRs → system capabilities +- NFRs → architecture decisions +- Domain requirements → compliance architecture +- Project-type requirements → platform choices + +**Epics & Stories (created after architecture):** +- FRs → user stories (1 FR could map to 1-3 stories potentially) +- Acceptance criteria → story acceptance tests +- Priority → sprint sequencing +- Traceability → stories map back to vision + +**Development AI Agents:** +- Precise requirements → implementation clarity +- Test criteria → automated test generation +- Domain requirements → compliance enforcement +- Measurable NFRs → performance targets + +--- + +## Summary: What Makes a Great BMAD PRD? + +✅ **High Information Density** - Every sentence carries weight, zero fluff +✅ **Measurable Requirements** - All FRs and NFRs are testable with specific criteria +✅ **Clear Traceability** - Each requirement links to user need and business objective +✅ **Domain Awareness** - Industry-specific requirements auto-detected and included +✅ **Zero Anti-Patterns** - No subjective adjectives, implementation leakage, or vague quantifiers +✅ **Dual Audience Optimized** - Human-readable AND LLM-consumable +✅ **Markdown Format** - Professional, clean, accessible to all stakeholders + +--- + +**Remember:** The PRD is the foundation. Quality here ripples through every subsequent phase. A dense, precise, well-traced PRD makes UX design, architecture, epic breakdown, and AI development dramatically more effective. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv b/src/modules/bmm/workflows/2-plan-workflows/prd/data/project-types.csv similarity index 100% rename from src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv rename to src/modules/bmm/workflows/2-plan-workflows/prd/data/project-types.csv diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md similarity index 91% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md index 7bafaae4..63a8e7ae 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md @@ -2,19 +2,13 @@ name: 'step-01-init' description: 'Initialize the PRD workflow by detecting continuation state and setting up the document' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-01-init.md' -nextStepFile: '{workflow_path}/steps/step-02-discovery.md' -continueStepFile: '{workflow_path}/steps/step-01b-continue.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-02-discovery.md' +continueStepFile: './step-01b-continue.md' outputFile: '{planning_artifacts}/prd.md' - -# Template References -prdTemplate: '{workflow_path}/prd-template.md' +# Template Reference +prdTemplate: '../templates/prd-template.md' --- # Step 1: Workflow Initialization @@ -157,7 +151,7 @@ Display menu after setup report: #### Menu Handling Logic: -- IF C: Update frontmatter with `stepsCompleted: [1]`, then load, read entire {nextStepFile}, then execute {nextStepFile} +- IF C: Update output file frontmatter, adding this step name to the end of the list of stepsCompleted, then load, read entire {nextStepFile}, then execute {nextStepFile} - IF user provides additional files: Load them, update inputDocuments and documentCounts, redisplay report - IF user asks questions: Answer and redisplay menu @@ -168,7 +162,7 @@ Display menu after setup report: ## CRITICAL STEP COMPLETION NOTE -ONLY WHEN [C continue option] is selected and [frontmatter properly updated with stepsCompleted: [1] and documentCounts], will you then load and read fully `{nextStepFile}` to execute and begin project discovery. +ONLY WHEN [C continue option] is selected and [frontmatter properly updated with this step added to stepsCompleted and documentCounts], will you then load and read fully `{nextStepFile}` to execute and begin project discovery. --- @@ -182,7 +176,7 @@ ONLY WHEN [C continue option] is selected and [frontmatter properly updated with - All discovered files tracked in frontmatter `inputDocuments` - User clearly informed of brownfield vs greenfield status - Menu presented and user input handled correctly -- Frontmatter updated with `stepsCompleted: [1]` before proceeding +- Frontmatter updated with this step name added to stepsCompleted before proceeding ### ❌ SYSTEM FAILURE: diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md similarity index 70% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md index 5f77a30e..5f3999bf 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md @@ -2,12 +2,7 @@ name: 'step-01b-continue' description: 'Resume an interrupted PRD workflow from the last completed step' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-01b-continue.md' -workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/prd.md' --- @@ -60,10 +55,9 @@ Resume the PRD workflow from where it was left off, ensuring smooth continuation **State Assessment:** Review the frontmatter to understand: -- `stepsCompleted`: Which steps are already done -- `lastStep`: The most recently completed step number +- `stepsCompleted`: Array of completed step filenames +- Last element of `stepsCompleted` array: The most recently completed step - `inputDocuments`: What context was already loaded -- `documentCounts`: briefs, research, brainstorming, projectDocs counts - All other frontmatter variables ### 2. Restore Context Documents @@ -74,47 +68,27 @@ Review the frontmatter to understand: - This ensures you have full context for continuation - Don't discover new documents - only reload what was previously processed -### 3. Present Current Progress +### 3. Determine Next Step -**Progress Report to User:** -"Welcome back {{user_name}}! I'm resuming our PRD collaboration for {{project_name}}. +**Simplified Next Step Logic:** +1. Get the last element from the `stepsCompleted` array (this is the filename of the last completed step, e.g., "step-03-success.md") +2. Load that step file and read its frontmatter +3. Extract the `nextStepFile` value from the frontmatter +4. That's the next step to load! -**Current Progress:** +**Example:** +- If `stepsCompleted = ["step-01-init.md", "step-02-discovery.md", "step-03-success.md"]` +- Last element is `"step-03-success.md"` +- Load `step-03-success.md`, read its frontmatter +- Find `nextStepFile: './step-04-journeys.md'` +- Next step to load is `./step-04-journeys.md` -- Steps completed: {stepsCompleted} -- Last worked on: Step {lastStep} -- Context documents available: {len(inputDocuments)} files +### 4. Handle Workflow Completion -**Document Status:** - -- Current PRD document is ready with all completed sections -- Ready to continue from where we left off - -Does this look right, or do you want to make any adjustments before we proceed?" - -### 4. Determine Continuation Path - -**Next Step Logic:** -Based on `lastStep` value, determine which step to load next: - -- If `lastStep = 1` → Load `./step-02-discovery.md` -- If `lastStep = 2` → Load `./step-03-success.md` -- If `lastStep = 3` → Load `./step-04-journeys.md` -- If `lastStep = 4` → Load `./step-05-domain.md` -- If `lastStep = 5` → Load `./step-06-innovation.md` -- If `lastStep = 6` → Load `./step-07-project-type.md` -- If `lastStep = 7` → Load `./step-08-scoping.md` -- If `lastStep = 8` → Load `./step-09-functional.md` -- If `lastStep = 9` → Load `./step-10-nonfunctional.md` -- If `lastStep = 10` → Load `./step-11-complete.md` -- If `lastStep = 11` → Workflow already complete - -### 5. Handle Workflow Completion - -**If workflow already complete (`lastStep = 11`):** +**If `stepsCompleted` array contains `"step-11-complete.md"`:** "Great news! It looks like we've already completed the PRD workflow for {{project_name}}. -The final document is ready at `{outputFile}` with all sections completed through step 11. +The final document is ready at `{outputFile}` with all sections completed. Would you like me to: @@ -124,16 +98,29 @@ Would you like me to: What would be most helpful?" -### 6. Present MENU OPTIONS +### 5. Present Current Progress **If workflow not complete:** -Display: "Ready to continue with Step {nextStepNumber}? +"Welcome back {{user_name}}! I'm resuming our PRD collaboration for {{project_name}}. -**Select an Option:** [C] Continue to next step" +**Current Progress:** +- Last completed: {last step filename from stepsCompleted array} +- Next up: {nextStepFile determined from that step's frontmatter} +- Context documents available: {len(inputDocuments)} files + +**Document Status:** +- Current PRD document is ready with all completed sections +- Ready to continue from where we left off + +Does this look right, or do you want to make any adjustments before we proceed?" + +### 6. Present MENU OPTIONS + +Display: "**Select an Option:** [C] Continue to {next step name}" #### Menu Handling Logic: -- IF C: Load, read entire file, then execute the appropriate next step file based on `lastStep` +- IF C: Load, read entire file, then execute the {nextStepFile} determined in step 3 - IF Any other comments or queries: respond and redisplay menu #### EXECUTION RULES: @@ -143,7 +130,7 @@ Display: "Ready to continue with Step {nextStepNumber}? ## CRITICAL STEP COMPLETION NOTE -ONLY WHEN [C continue option] is selected and [current state confirmed], will you then load and read fully the appropriate next step file to resume the workflow. +ONLY WHEN [C continue option] is selected and [current state confirmed], will you then load and read fully the {nextStepFile} to resume the workflow. --- @@ -160,7 +147,7 @@ ONLY WHEN [C continue option] is selected and [current state confirmed], will yo - Discovering new input documents instead of reloading existing ones - Modifying content from already completed steps -- Loading wrong next step based on `lastStep` value +- Failing to extract nextStepFile from the last completed step's frontmatter - Proceeding without user confirmation of current state **Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md new file mode 100644 index 00000000..49f2557e --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md @@ -0,0 +1,224 @@ +--- +name: 'step-02-discovery' +description: 'Discover project type, domain, and context through collaborative dialogue' + +# File References +nextStepFile: './step-03-success.md' +outputFile: '{planning_artifacts}/prd.md' + +# Data Files +projectTypesCSV: '../data/project-types.csv' +domainComplexityCSV: '../data/domain-complexity.csv' + +# Task References +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' +--- + +# Step 2: Project Discovery + +**Progress: Step 2 of 13** - Next: Product Vision + +## STEP GOAL: + +Discover and classify the project - understand what type of product this is, what domain it operates in, and the project context (greenfield vs brownfield). + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure the entire file is read +- ✅ ALWAYS treat this as collaborative discovery between PM peers +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a product-focused PM facilitator collaborating with an expert peer +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring structured thinking and facilitation skills, while the user brings domain expertise and product vision + +### Step-Specific Rules: + +- 🎯 Focus on classification and understanding - no content generation yet +- 🚫 FORBIDDEN to generate executive summary or vision statements (that's next steps) +- 💬 APPROACH: Natural conversation to understand the project +- 🎯 LOAD classification data BEFORE starting discovery conversation + +## EXECUTION PROTOCOLS: + +- 🎯 Show your analysis before taking any action +- ⚠️ Present A/P/C menu after classification complete +- 💾 ONLY save classification to frontmatter when user chooses C (Continue) +- 📖 Update frontmatter, adding this step to the end of the list of stepsCompleted +- 🚫 FORBIDDEN to load next step until C is selected + +## CONTEXT BOUNDARIES: + +- Current document and frontmatter from step 1 are available +- Input documents already loaded are in memory (product briefs, research, brainstorming, project docs) +- **Document counts available in frontmatter `documentCounts`** +- Classification CSV data will be loaded in this step only +- No executive summary or vision content yet (that's steps 2b and 2c) + +## YOUR TASK: + +Discover and classify the project through natural conversation: +- What type of product is this? (web app, API, mobile, etc.) +- What domain does it operate in? (healthcare, fintech, e-commerce, etc.) +- What's the project context? (greenfield new product vs brownfield existing system) +- How complex is this domain? (low, medium, high) + +## DISCOVERY SEQUENCE: + +### 1. Check Document State + +Read the frontmatter from `{outputFile}` to get document counts: +- `briefCount` - Product briefs available +- `researchCount` - Research documents available +- `brainstormingCount` - Brainstorming docs available +- `projectDocsCount` - Existing project documentation + +**Announce your understanding:** + +"From step 1, I have loaded: +- Product briefs: {{briefCount}} +- Research: {{researchCount}} +- Brainstorming: {{brainstormingCount}} +- Project docs: {{projectDocsCount}} + +{{if projectDocsCount > 0}}This is a brownfield project - I'll focus on understanding what you want to add or change.{{else}}This is a greenfield project - I'll help you define the full product vision.{{/if}}" + +### 2. Load Classification Data + +**Attempt subprocess data lookup:** + +**Project Type Lookup:** +"Your task: Lookup data in {projectTypesCSV} + +**Search criteria:** +- Find row where project_type matches {{detectedProjectType}} + +**Return format:** +Return ONLY the matching row as a YAML-formatted object with these fields: +project_type, detection_signals + +**Do NOT return the entire CSV - only the matching row.**" + +**Domain Complexity Lookup:** +"Your task: Lookup data in {domainComplexityCSV} + +**Search criteria:** +- Find row where domain matches {{detectedDomain}} + +**Return format:** +Return ONLY the matching row as a YAML-formatted object with these fields: +domain, complexity, typical_concerns, compliance_requirements + +**Do NOT return the entire CSV - only the matching row.**" + +**Graceful degradation (if Task tool unavailable):** +- Load the CSV files directly +- Find the matching rows manually +- Extract required fields +- Keep in memory for intelligent classification + +### 3. Begin Discovery Conversation + +**Start with what you know:** + +If the user has a product brief or project docs, acknowledge them and share your understanding. Then ask clarifying questions to deepen your understanding. + +If this is a greenfield project with no docs, start with open-ended discovery: +- What problem does this solve? +- Who's it for? +- What excites you about building this? + +**Listen for classification signals:** + +As the user describes their product, match against: +- **Project type signals** (API, mobile, SaaS, etc.) +- **Domain signals** (healthcare, fintech, education, etc.) +- **Complexity indicators** (regulated industries, novel technology, etc.) + +### 4. Confirm Classification + +Once you have enough understanding, share your classification: + +"I'm hearing this as: +- **Project Type:** {{detectedType}} +- **Domain:** {{detectedDomain}} +- **Complexity:** {{complexityLevel}} + +Does this sound right to you?" + +Let the user confirm or refine your classification. + +### 5. Save Classification to Frontmatter + +When user selects 'C', update frontmatter with classification: +```yaml +classification: + projectType: {{projectType}} + domain: {{domain}} + complexity: {{complexityLevel}} + projectContext: {{greenfield|brownfield}} +``` + +### N. Present MENU OPTIONS + +Present the project classification for review, then display menu: + +"Based on our conversation, I've discovered and classified your project. + +**Here's the classification:** + +**Project Type:** {{detectedType}} +**Domain:** {{detectedDomain}} +**Complexity:** {{complexityLevel}} +**Project Context:** {{greenfield|brownfield}} + +**What would you like to do?**" + +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Product Vision (Step 2b of 13)" + +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current classification, process the enhanced insights that come back, ask user if they accept the improvements, if yes update classification then redisplay menu, if no keep original classification then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current classification, process the collaborative insights, ask user if they accept the changes, if yes update classification then redisplay menu, if no keep original classification then redisplay menu +- IF C: Save classification to {outputFile} frontmatter, add this step name to the end of stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu + +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu + +## CRITICAL STEP COMPLETION NOTE + +ONLY WHEN [C continue option] is selected and [classification saved to frontmatter], will you then load and read fully `{nextStepFile}` to explore product vision. + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Document state checked and announced to user +- Classification data loaded and used intelligently +- Natural conversation to understand project type, domain, complexity +- Classification validated with user before saving +- Frontmatter updated with classification when C selected +- User's existing documents acknowledged and built upon + +### ❌ SYSTEM FAILURE: + +- Not reading documentCounts from frontmatter first +- Skipping classification data loading +- Generating executive summary or vision content (that's later steps!) +- Not validating classification with user +- Being prescriptive instead of having natural conversation +- Proceeding without user selecting 'C' + +**Master Rule:** This is classification and understanding only. No content generation yet. Build on what the user already has. Have natural conversations, don't follow scripts. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md similarity index 55% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md index d379f504..90906981 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md @@ -2,13 +2,8 @@ name: 'step-03-success' description: 'Define comprehensive success criteria covering user, business, and technical success' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-03-success.md' -nextStepFile: '{workflow_path}/steps/step-04-journeys.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-04-journeys.md' outputFile: '{planning_artifacts}/prd.md' # Task References @@ -37,24 +32,9 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - 🎯 Show your analysis before taking any action - ⚠️ Present A/P/C menu after generating success criteria content - 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2, 3]` before loading next step +- 📖 Update output file frontmatter, adding this step name to the end of the list of stepsCompleted - 🚫 FORBIDDEN to load next step until C is selected -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to develop deeper insights about success metrics -- **P (Party Mode)**: Bring multiple perspectives to define comprehensive success criteria -- **C (Continue)**: Save the content to the document and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding - ## CONTEXT BOUNDARIES: - Current document and frontmatter from previous steps are available @@ -76,38 +56,21 @@ Define comprehensive success criteria that cover user success, business success, Analyze product brief, research, and brainstorming documents for success criteria already mentioned. **If Input Documents Contain Success Criteria:** -"Looking at your product brief and research, I see some initial success criteria already defined: - -**From your brief:** -{{extracted_success_criteria_from_brief}} - -**From research:** -{{extracted_success_criteria_from_research}} - -**From brainstorming:** -{{extracted_success_criteria_from_brainstorming}} - -This gives us a great foundation. Let's refine and expand on these initial thoughts: - -**User Success First:** -Based on what we have, how would you refine these user success indicators: - -- {{refined_user_success_from_documents}} -- Are there other user success metrics we should consider? - -**What would make a user say 'this was worth it'** beyond what's already captured?" +Guide user to refine existing success criteria: +- Acknowledge what's already documented in their materials +- Extract key success themes from brief, research, and brainstorming +- Help user identify gaps and areas for expansion +- Probe for specific, measurable outcomes: When do users feel delighted/relieved/empowered? +- Ask about emotional success moments and completion scenarios +- Explore what "worth it" means beyond what's already captured **If No Success Criteria in Input Documents:** -Start with user-centered success: -"Now that we understand what makes {{project_name}} special, let's define what success looks like. - -**User Success First:** - -- What would make a user say 'this was worth it'? -- What's the moment where they realize this solved their problem? -- After using {{project_name}}, what outcome are they walking away with? - -Let's start with the user experience of success." +Start with user-centered success exploration: +- Guide conversation toward defining what "worth it" means for users +- Ask about the moment users realize their problem is solved +- Explore specific user outcomes and emotional states +- Identify success "aha!" moments and completion scenarios +- Focus on user experience of success first ### 2. Explore User Success Metrics @@ -121,15 +84,11 @@ Listen for specific user outcomes and help make them measurable: ### 3. Define Business Success Transition to business metrics: -"Now let's look at success from the business perspective. - -**Business Success:** - -- What does success look like at 3 months? 12 months? -- Are we measuring revenue, user growth, engagement, something else? -- What metric would make you say 'this is working'? - -Help me understand what success means for your business." +- Guide conversation to business perspective on success +- Explore timelines: What does 3-month success look like? 12-month success? +- Identify key business metrics: revenue, user growth, engagement, or other measures? +- Ask what specific metric would indicate "this is working" +- Understand business success from their perspective ### 4. Challenge Vague Metrics @@ -143,31 +102,25 @@ Push for specificity on business metrics: ### 5. Connect to Product Differentiator Tie success metrics back to what makes the product special: -"So success means users experience [differentiator] and achieve [outcome]. Does that capture it?" - -Adapt success criteria to context: - -- Consumer: User love, engagement, retention -- B2B: ROI, efficiency, adoption -- Developer tools: Developer experience, community -- Regulated: Compliance, safety, validation -- GovTech: Government compliance, accessibility, procurement +- Connect success criteria to the product's unique differentiator +- Ensure metrics reflect the specific value proposition +- Adapt success criteria to domain context: + - Consumer: User love, engagement, retention + - B2B: ROI, efficiency, adoption + - Developer tools: Developer experience, community + - Regulated: Compliance, safety, validation + - GovTech: Government compliance, accessibility, procurement ### 6. Smart Scope Negotiation Guide scope definition through success lens: -"The Scoping Game: - -1. What must work for this to be useful? → MVP -2. What makes it competitive? → Growth -3. What's the dream version? → Vision - -Challenge scope creep conversationally: - -- Could that wait until after launch? -- Is that essential for proving the concept? - -For complex domains, include compliance minimums in MVP." +- Help user distinguish MVP (must work to be useful) from growth (competitive) and vision (dream) +- Guide conversation through three scope levels: + 1. MVP: What's essential for proving the concept? + 2. Growth: What makes it competitive? + 3. Vision: What's the dream version? +- Challenge scope creep conversationally: Could this wait until after launch? Is this essential for MVP? +- For complex domains: Ensure compliance minimums are included in MVP ### 7. Generate Success Criteria Content @@ -211,43 +164,26 @@ When saving to document, append these Level 2 and Level 3 sections: [Content about future vision based on conversation] ``` -### 8. Present Content and Menu +### 8. Present MENU OPTIONS -Show the generated content and present choices: -"I've drafted our success criteria and scope definition based on our conversation. +Present the success criteria content for user review, then display menu: -**Here's what I'll add to the document:** +- Show the drafted success criteria and scope definition (using structure from section 7) +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of the conversation -[Show the complete markdown content from step 7] +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to User Journey Mapping (Step 4 of 11)" -**What would you like to do?** -[A] Advanced Elicitation - Let's dive deeper and refine these success metrics -[P] Party Mode - Bring in different perspectives on success criteria -[C] Continue - Save success criteria and move to User Journey Mapping (Step 4 of 11)" +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current success criteria content, process the enhanced success metrics that come back, ask user "Accept these improvements to the success criteria? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current success criteria, process the collaborative improvements to metrics and scope, ask user "Accept these changes to the success criteria? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu -### 9. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current success criteria content -- Process the enhanced success metrics that come back -- Ask user: "Accept these improvements to the success criteria? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current success criteria -- Process the collaborative improvements to metrics and scope -- Ask user: "Accept these changes to the success criteria? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step to the end of the steps completed array -- Load `./step-04-journeys.md` +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu ## APPEND TO DOCUMENT: diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md new file mode 100644 index 00000000..765eb8b3 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md @@ -0,0 +1,213 @@ +--- +name: 'step-04-journeys' +description: 'Map ALL user types that interact with the system with narrative story-based journeys' + +# File References +nextStepFile: './step-05-domain.md' +outputFile: '{planning_artifacts}/prd.md' + +# Task References +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' +--- + +# Step 4: User Journey Mapping + +**Progress: Step 4 of 11** - Next: Domain Requirements + +## MANDATORY EXECUTION RULES (READ FIRST): + +- 🛑 NEVER generate content without user input + +- 📖 CRITICAL: ALWAYS read the complete step file before taking any action - partial understanding leads to incomplete decisions +- 🔄 CRITICAL: When loading next step with 'C', ensure the entire file is read and understood before proceeding +- ✅ ALWAYS treat this as collaborative discovery between PM peers +- 📋 YOU ARE A FACILITATOR, not a content generator +- 💬 FOCUS on mapping ALL user types that interact with the system +- 🎯 CRITICAL: No journey = no functional requirements = product doesn't exist +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +## EXECUTION PROTOCOLS: + +- 🎯 Show your analysis before taking any action +- ⚠️ Present A/P/C menu after generating journey content +- 💾 ONLY save when user chooses C (Continue) +- 📖 Update output file frontmatter, adding this step name to the end of the list of stepsCompleted +- 🚫 FORBIDDEN to load next step until C is selected + +## CONTEXT BOUNDARIES: + +- Current document and frontmatter from previous steps are available +- Success criteria and scope already defined +- Input documents from step-01 are available (product briefs with user personas) +- Every human interaction with the system needs a journey + +## YOUR TASK: + +Create compelling narrative user journeys that leverage existing personas from product briefs and identify additional user types needed for comprehensive coverage. + +## JOURNEY MAPPING SEQUENCE: + +### 1. Leverage Existing Users & Identify Additional Types + +**Check Input Documents for Existing Personas:** +Analyze product brief, research, and brainstorming documents for user personas already defined. + +**If User Personas Exist in Input Documents:** +Guide user to build on existing personas: +- Acknowledge personas found in their product brief +- Extract key persona details and backstories +- Leverage existing insights about their needs +- Prompt to identify additional user types beyond those documented +- Suggest additional user types based on product context (admins, moderators, support, API consumers, internal ops) +- Ask what additional user types should be considered + +**If No Personas in Input Documents:** +Start with comprehensive user type discovery: +- Guide exploration of ALL people who interact with the system +- Consider beyond primary users: admins, moderators, support staff, API consumers, internal ops +- Ask what user types should be mapped for this specific product +- Ensure comprehensive coverage of all system interactions + +### 2. Create Narrative Story-Based Journeys + +For each user type, create compelling narrative journeys that tell their story: + +#### Narrative Journey Creation Process: + +**If Using Existing Persona from Input Documents:** +Guide narrative journey creation: +- Use persona's existing backstory from brief +- Explore how the product changes their life/situation +- Craft journey narrative: where do we meet them, how does product help them write their next chapter? + +**If Creating New Persona:** +Guide persona creation with story framework: +- Name: realistic name and personality +- Situation: What's happening in their life/work that creates need? +- Goal: What do they desperately want to achieve? +- Obstacle: What's standing in their way? +- Solution: How does the product solve their story? + +**Story-Based Journey Mapping:** + +Guide narrative journey creation using story structure: +- **Opening Scene**: Where/how do we meet them? What's their current pain? +- **Rising Action**: What steps do they take? What do they discover? +- **Climax**: Critical moment where product delivers real value +- **Resolution**: How does their situation improve? What's their new reality? + +Encourage narrative format with specific user details, emotional journey, and clear before/after contrast + +### 3. Guide Journey Exploration + +For each journey, facilitate detailed exploration: +- What happens at each step specifically? +- What could go wrong? What's the recovery path? +- What information do they need to see/hear? +- What's their emotional state at each point? +- Where does this journey succeed or fail? + +### 4. Connect Journeys to Requirements + +After each journey, explicitly state: +- This journey reveals requirements for specific capability areas +- Help user see how different journeys create different feature sets +- Connect journey needs to concrete capabilities (onboarding, dashboards, notifications, etc.) + +### 5. Aim for Comprehensive Coverage + +Guide toward complete journey set: + +- **Primary user** - happy path (core experience) +- **Primary user** - edge case (different goal, error recovery) +- **Secondary user** (admin, moderator, support, etc.) +- **API consumer** (if applicable) + +Ask if additional journeys are needed to cover uncovered user types + +### 6. Generate User Journey Content + +Prepare the content to append to the document: + +#### Content Structure: + +When saving to document, append these Level 2 and Level 3 sections: + +```markdown +## User Journeys + +[All journey narratives based on conversation] + +### Journey Requirements Summary + +[Summary of capabilities revealed by journeys based on conversation] +``` + +### 7. Present MENU OPTIONS + +Present the user journey content for review, then display menu: +- Show the mapped user journeys (using structure from section 6) +- Highlight how each journey reveals different capabilities +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of conversation + +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Domain Requirements (Step 5 of 11)" + +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current journey content, process the enhanced journey insights that come back, ask user "Accept these improvements to the user journeys? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current journeys, process the collaborative journey improvements and additions, ask user "Accept these changes to the user journeys? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu + +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu + +## APPEND TO DOCUMENT: + +When user selects 'C', append the content directly to the document using the structure from step 6. + +## SUCCESS METRICS: + +✅ Existing personas from product briefs leveraged when available +✅ All user types identified (not just primary users) +✅ Rich narrative storytelling for each persona and journey +✅ Complete story-based journey mapping with emotional arc +✅ Journey requirements clearly connected to capabilities needed +✅ Minimum 3-4 compelling narrative journeys covering different user types +✅ A/P/C menu presented and handled correctly +✅ Content properly appended to document when C selected + +## FAILURE MODES: + +❌ Ignoring existing personas from product briefs +❌ Only mapping primary user journeys and missing secondary users +❌ Creating generic journeys without rich persona details and narrative +❌ Missing emotional storytelling elements that make journeys compelling +❌ Missing critical decision points and failure scenarios +❌ Not connecting journeys to required capabilities +❌ Not having enough journey diversity (admin, support, API, etc.) +❌ Not presenting A/P/C menu after content generation +❌ Appending content without user selecting 'C' + +❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions +❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file +❌ **CRITICAL**: Making decisions without complete understanding of step requirements and protocols + +## JOURNEY TYPES TO ENSURE: + +**Minimum Coverage:** + +1. **Primary User - Success Path**: Core experience journey +2. **Primary User - Edge Case**: Error recovery, alternative goals +3. **Admin/Operations User**: Management, configuration, monitoring +4. **Support/Troubleshooting**: Help, investigation, issue resolution +5. **API/Integration** (if applicable): Developer/technical user journey + +## NEXT STEP: + +After user selects 'C' and content is saved to document, load `./step-05-domain.md`. + +Remember: Do NOT proceed to step-05 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md new file mode 100644 index 00000000..36351c64 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md @@ -0,0 +1,207 @@ +--- +name: 'step-05-domain' +description: 'Explore domain-specific requirements for complex domains (optional step)' + +# File References +nextStepFile: './step-06-innovation.md' +outputFile: '{planning_artifacts}/prd.md' +domainComplexityCSV: '../data/domain-complexity.csv' + +# Task References +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' +--- + +# Step 5: Domain-Specific Requirements (Optional) + +**Progress: Step 5 of 13** - Next: Innovation Focus + +## STEP GOAL: + +For complex domains only that have a mapping in {domainComplexityCSV}, explore domain-specific constraints, compliance requirements, and technical considerations that shape the product. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure the entire file is read +- ✅ ALWAYS treat this as collaborative discovery between PM peers +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a product-focused PM facilitator collaborating with an expert peer +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring structured thinking and facilitation skills, while the user brings domain expertise + +### Step-Specific Rules: + +- 🎯 This step is OPTIONAL - only needed for complex domains +- 🚫 SKIP if domain complexity is "low" from step-02 +- 💬 APPROACH: Natural conversation to discover domain-specific needs +- 🎯 Focus on constraints, compliance, and domain patterns + +## EXECUTION PROTOCOLS: + +- 🎯 Check domain complexity from step-02 classification first +- ⚠️ If complexity is "low", offer to skip this step +- ⚠️ Present A/P/C menu after domain requirements defined (or skipped) +- 💾 ONLY save when user chooses C (Continue) +- 📖 Update output file frontmatter, adding this step name to the end of the list of stepsCompleted +- 🚫 FORBIDDEN to load next step until C is selected + +## CONTEXT BOUNDARIES: + +- Domain classification from step-02 is available +- If complexity is low, this step may be skipped +- Domain CSV data provides complexity reference +- Focus on domain-specific constraints, not general requirements + +## YOUR TASK: + +For complex domains, explore what makes this domain special: +- **Compliance requirements** - regulations, standards, certifications +- **Technical constraints** - security, privacy, integration requirements +- **Domain patterns** - common patterns, best practices, anti-patterns +- **Risks and mitigations** - what could go wrong, how to prevent it + +## DOMAIN DISCOVERY SEQUENCE: + +### 1. Check Domain Complexity + +**Review classification from step-02:** + +- What's the domain complexity level? (low/medium/high) +- What's the specific domain? (healthcare, fintech, education, etc.) + +**If complexity is LOW:** + +Offer to skip: +"The domain complexity from our discovery is low. We may not need deep domain-specific requirements. Would you like to: +- [C] Skip this step and move to Innovation +- [D] Do domain exploration anyway" + +**If complexity is MEDIUM or HIGH:** + +Proceed with domain exploration. + +### 2. Load Domain Reference Data + +**Attempt subprocess data lookup:** + +"Your task: Lookup data in {domainComplexityCSV} + +**Search criteria:** +- Find row where domain matches {{domainFromStep02}} + +**Return format:** +Return ONLY the matching row as a YAML-formatted object with these fields: +domain, complexity, typical_concerns, compliance_requirements + +**Do NOT return the entire CSV - only the matching row.**" + +**Graceful degradation (if Task tool unavailable):** +- Load the CSV file directly +- Find the matching row manually +- Extract required fields +- Understand typical concerns and compliance requirements + +### 3. Explore Domain-Specific Concerns + +**Start with what you know:** + +Acknowledge the domain and explore what makes it complex: +- What regulations apply? (HIPAA, PCI-DSS, GDPR, SOX, etc.) +- What standards matter? (ISO, NIST, domain-specific standards) +- What certifications are needed? (security, privacy, domain-specific) +- What integrations are required? (EMR systems, payment processors, etc.) + +**Explore technical constraints:** +- Security requirements (encryption, audit logs, access control) +- Privacy requirements (data handling, consent, retention) +- Performance requirements (real-time, batch, latency) +- Availability requirements (uptime, disaster recovery) + +### 4. Document Domain Requirements + +**Structure the requirements around key concerns:** + +```markdown +### Compliance & Regulatory +- [Specific requirements] + +### Technical Constraints +- [Security, privacy, performance needs] + +### Integration Requirements +- [Required systems and data flows] + +### Risk Mitigations +- [Domain-specific risks and how to address them] +``` + +### 5. Validate Completeness + +**Check with the user:** + +"Are there other domain-specific concerns we should consider? For [this domain], what typically gets overlooked?" + +### N. Present MENU OPTIONS + +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue - Save and Proceed to Innovation (Step 6 of 13)" + +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask}, and when finished redisplay the menu +- IF P: Execute {partyModeWorkflow}, and when finished redisplay the menu +- IF C: Save content to {outputFile}, update frontmatter, then load, read entire file, then execute {nextStepFile} +- IF Any other comments or queries: help user respond then [Redisplay Menu Options](#n-present-menu-options) + +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu + +## APPEND TO DOCUMENT + +When user selects 'C', append to `{outputFile}`: + +```markdown +## Domain-Specific Requirements + +{{discovered domain requirements}} +``` + +If step was skipped, append nothing and proceed. + +## CRITICAL STEP COMPLETION NOTE + +ONLY WHEN [C continue option] is selected and [content saved or skipped], will you then load and read fully `{nextStepFile}` to explore innovation. + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Domain complexity checked before proceeding +- Offered to skip if complexity is low +- Natural conversation exploring domain concerns +- Compliance, technical, and integration requirements identified +- Domain-specific risks documented with mitigations +- User validated completeness +- Content properly saved (or step skipped) when C selected + +### ❌ SYSTEM FAILURE: + +- Not checking domain complexity first +- Not offering to skip for low-complexity domains +- Missing critical compliance requirements +- Not exploring technical constraints +- Not asking about domain-specific risks +- Being generic instead of domain-specific +- Proceeding without user validation + +**Master Rule:** This step is OPTIONAL for simple domains. For complex domains, focus on compliance, constraints, and domain patterns. Natural conversation, not checklists. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md similarity index 58% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md index 28af51eb..85e3d473 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md @@ -2,17 +2,12 @@ name: 'step-06-innovation' description: 'Detect and explore innovative aspects of the product (optional step)' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-06-innovation.md' -nextStepFile: '{workflow_path}/steps/step-07-project-type.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-07-project-type.md' outputFile: '{planning_artifacts}/prd.md' # Data Files -projectTypesCSV: '{workflow_path}/project-types.csv' +projectTypesCSV: '../data/project-types.csv' # Task References advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' @@ -40,24 +35,9 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - 🎯 Show your analysis before taking any action - ⚠️ Present A/P/C menu after generating innovation content - 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6]` before loading next step +- 📖 Update output file frontmatter, adding this step name to the end of the list of stepsCompleted - 🚫 FORBIDDEN to load next step until C is selected -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to develop deeper innovation insights -- **P (Party Mode)**: Bring creative perspectives to explore innovation opportunities -- **C (Continue)**: Save the content to the document and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding - ## CONTEXT BOUNDARIES: - Current document and frontmatter from previous steps are available @@ -84,7 +64,7 @@ Detect and explore innovation patterns in the product, focusing on what makes it Load innovation signals specific to this project type: -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv` completely +- Load `{projectTypesCSV}` completely - Find the row where `project_type` matches detected type from step-02 - Extract `innovation_signals` (semicolon-separated list) - Extract `web_search_triggers` for potential innovation research @@ -113,27 +93,22 @@ Match user descriptions against innovation_signals for their project_type: ### 3. Initial Innovation Screening Ask targeted innovation discovery questions: -"As we explore {{project_name}}, I'm listening for what makes it innovative. - -**Innovation Indicators:** - -- Are you challenging any existing assumptions about how things work? -- Are you combining technologies or approaches in new ways? -- Is there something about this that hasn't been done before? - -What aspects of {{project_name}} feel most innovative to you?" +- Guide exploration of what makes the product innovative +- Explore if they're challenging existing assumptions +- Ask about novel combinations of technologies/approaches +- Identify what hasn't been done before +- Understand which aspects feel most innovative ### 4. Deep Innovation Exploration (If Detected) If innovation signals are found, explore deeply: #### Innovation Discovery Questions: - -- "What makes it unique compared to existing solutions?" -- "What assumption are you challenging?" -- "How do we validate it works?" -- "What's the fallback if it doesn't?" -- "Has anyone tried this before?" +- What makes it unique compared to existing solutions? +- What assumption are you challenging? +- How do we validate it works? +- What's the fallback if it doesn't? +- Has anyone tried this before? #### Market Context Research: @@ -169,54 +144,43 @@ When saving to document, append these Level 2 and Level 3 sections: [Innovation risks and fallbacks based on conversation] ``` -### 6. Present Content and Menu (Only if Innovation Detected) +### 6. Present MENU OPTIONS (Only if Innovation Detected) -Show the generated innovation content and present choices: -"I've identified some innovative aspects of {{project_name}} that differentiate it from existing solutions. +Present the innovation content for review, then display menu: +- Show identified innovative aspects (using structure from section 5) +- Highlight differentiation from existing solutions +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of conversation -**Here's what I'll add to the document:** +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Project Type Analysis (Step 7 of 11)" -[Show the complete markdown content from step 5] +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current innovation content, process the enhanced innovation insights that come back, ask user "Accept these improvements to the innovation analysis? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current innovation content, process the collaborative innovation exploration and ideation, ask user "Accept these changes to the innovation analysis? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu -**What would you like to do?** -[A] Advanced Elicitation - Let's dive deeper into these innovation opportunities -[P] Party Mode - Bring creative perspectives to explore innovation further -[C] Continue - Save this and move to Project Type Analysis (Step 7 of 11)" - -### 7. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current innovation content -- Process the enhanced innovation insights that come back -- Ask user: "Accept these improvements to the innovation analysis? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current innovation content -- Process the collaborative innovation exploration and ideation -- Ask user: "Accept these changes to the innovation analysis? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md` +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu ## NO INNOVATION DETECTED: If no genuine innovation signals are found after exploration: -"After exploring {{project_name}}, I don't see clear innovation signals that warrant a dedicated innovation section. This is perfectly fine - many successful products are excellent executions of existing concepts rather than breakthrough innovations. +- Acknowledge that no clear innovation signals were found +- Note this is fine - many successful products are excellent executions of existing concepts +- Ask if they'd like to try finding innovative angles or proceed -**Options:** -[A] Force innovation exploration - Let's try to find innovative angles -[C] Continue - Skip innovation section and move to Project Type Analysis (Step 7 of 11)" +Display: "**Select:** [A] Advanced Elicitation - Let's try to find innovative angles [C] Continue - Skip innovation section and move to Project Type Analysis (Step 7 of 11)" -If user selects 'A', proceed with content generation anyway. If 'C', skip this step and load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md`. +### Menu Handling Logic: +- IF A: Proceed with content generation anyway, then return to menu +- IF C: Skip this step, then load, read entire file, then execute {nextStepFile} + +### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' ## APPEND TO DOCUMENT: @@ -248,7 +212,7 @@ When user selects 'C', append the content directly to the document using the str ## SKIP CONDITIONS: -Skip this step and load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md` if: +Skip this step and load `{nextStepFile}` if: - No innovation signals detected in conversation - Product is incremental improvement rather than breakthrough @@ -257,6 +221,6 @@ Skip this step and load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd ## NEXT STEP: -After user selects 'C' and content is saved to document (or step is skipped), load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md`. +After user selects 'C' and content is saved to document (or step is skipped), load `{nextStepFile}`. Remember: Do NOT proceed to step-07 until user explicitly selects 'C' from the A/P/C menu (or confirms step skip)! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md similarity index 68% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md index 3b992526..27650819 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md @@ -2,17 +2,12 @@ name: 'step-07-project-type' description: 'Conduct project-type specific discovery using CSV-driven guidance' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-07-project-type.md' -nextStepFile: '{workflow_path}/steps/step-08-scoping.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-08-scoping.md' outputFile: '{planning_artifacts}/prd.md' # Data Files -projectTypesCSV: '{workflow_path}/project-types.csv' +projectTypesCSV: '../data/project-types.csv' # Task References advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' @@ -40,24 +35,9 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - 🎯 Show your analysis before taking any action - ⚠️ Present A/P/C menu after generating project-type content - 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7]` before loading next step +- 📖 Update output file frontmatter, adding this step name to the end of the list of stepsCompleted - 🚫 FORBIDDEN to load next step until C is selected -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to develop deeper project-type insights -- **P (Party Mode)**: Bring technical perspectives to explore project-specific requirements -- **C (Continue)**: Save the content to the document and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding - ## CONTEXT BOUNDARIES: - Current document and frontmatter from previous steps are available @@ -73,11 +53,23 @@ Conduct project-type specific discovery using CSV-driven guidance to define tech ### 1. Load Project-Type Configuration Data -Load project-type specific configuration: +**Attempt subprocess data lookup:** -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv` completely -- Find the row where `project_type` matches detected type from step-02 -- Extract these columns: +"Your task: Lookup data in {projectTypesCSV} + +**Search criteria:** +- Find row where project_type matches {{projectTypeFromStep02}} + +**Return format:** +Return ONLY the matching row as a YAML-formatted object with these fields: +project_type, key_questions, required_sections, skip_sections, innovation_signals + +**Do NOT return the entire CSV - only the matching row.**" + +**Graceful degradation (if Task tool unavailable):** +- Load the CSV file directly +- Find the matching row manually +- Extract required fields: - `key_questions` (semicolon-separated list of discovery questions) - `required_sections` (semicolon-separated list of sections to document) - `skip_sections` (semicolon-separated list of sections to skip) @@ -165,47 +157,34 @@ When saving to document, append these Level 2 and Level 3 sections: [Implementation specific requirements based on conversation] ``` -### 6. Present Content and Menu +### 6. Present MENU OPTIONS -Show the generated project-type content and present choices: -"I've documented the {project_type}-specific requirements for {{project_name}} based on our conversation and best practices for this type of product. +Present the project-type content for review, then display menu: + +"Based on our conversation and best practices for this product type, I've documented the {project_type}-specific requirements for {{project_name}}. **Here's what I'll add to the document:** -[Show the complete markdown content from step 5] +[Show the complete markdown content from section 5] -**What would you like to do?** -[A] Advanced Elicitation - Let's dive deeper into these technical requirements -[P] Party Mode - Bring technical expertise perspectives to validate requirements -[C] Continue - Save this and move to Scoping (Step 8 of 11)" +**What would you like to do?**" -### 7. Handle Menu Selection +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Scoping (Step 8 of 11)" -#### If 'A' (Advanced Elicitation): +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current project-type content, process the enhanced technical insights that come back, ask user "Accept these improvements to the technical requirements? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current project-type requirements, process the collaborative technical expertise and validation, ask user "Accept these changes to the technical requirements? (y/n)", if yes update content with improvements then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current project-type content -- Process the enhanced technical insights that come back -- Ask user: "Accept these improvements to the technical requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current project-type requirements -- Process the collaborative technical expertise and validation -- Ask user: "Accept these changes to the technical requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md` +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu ## APPEND TO DOCUMENT: -When user selects 'C', append the content directly to the document using the structure from step 5. +When user selects 'C', append the content directly to the document using the structure from previous steps. ## SUCCESS METRICS: @@ -253,6 +232,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md` to define project scope. +After user selects 'C' and content is saved to document, load `{nextStepFile}` to define project scope. Remember: Do NOT proceed to step-08 (Scoping) until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md similarity index 53% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md index 33f72f5c..c26ad663 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md @@ -2,13 +2,8 @@ name: 'step-08-scoping' description: 'Define MVP boundaries and prioritize features across development phases' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-08-scoping.md' -nextStepFile: '{workflow_path}/steps/step-09-functional.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-09-functional.md' outputFile: '{planning_artifacts}/prd.md' # Task References @@ -38,23 +33,9 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - 📚 Review the complete PRD document built so far - ⚠️ Present A/P/C menu after generating scoping decisions - 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8]` before loading next step +- 📖 Update output file frontmatter, adding this step name to the end of the list of stepsCompleted - 🚫 FORBIDDEN to load next step until C is selected -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to explore innovative scoping approaches -- **P (Party Mode)**: Bring multiple perspectives to ensure comprehensive scope decisions -- **C (Continue)**: Save the scoping decisions and proceed to functional requirements - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to display this step's A/P/C menu after the A or P have completed -- User accepts/rejects protocol changes before proceeding ## CONTEXT BOUNDARIES: @@ -72,80 +53,46 @@ Conduct comprehensive scoping exercise to define MVP boundaries and prioritize f ### 1. Review Current PRD State Analyze everything documented so far: -"I've reviewed your complete PRD so far. Here's what we've established: - -**Product Vision & Success:** -{{summary_of_vision_and_success_criteria}} - -**User Journeys:** {{number_of_journeys}} mapped with rich narratives - -**Domain & Innovation Focus:** -{{summary_of_domain_requirements_and_innovation}} - -**Current Scope Implications:** -Based on everything we've documented, this looks like it could be: - -- [ ] Simple MVP (small team, lean scope) -- [ ] Medium scope (moderate team, balanced features) -- [ ] Complex project (large team, comprehensive scope) - -Does this initial assessment feel right, or do you see this differently?" +- Present synthesis of established vision, success criteria, journeys +- Assess domain and innovation focus +- Evaluate scope implications: simple MVP, medium, or complex project +- Ask if initial assessment feels right or if they see it differently ### 2. Define MVP Strategy Facilitate strategic MVP decisions: - -"Let's think strategically about your launch strategy: - -**MVP Philosophy Options:** - -1. **Problem-Solving MVP**: Solve the core problem with minimal features -2. **Experience MVP**: Deliver the key user experience with basic functionality -3. **Platform MVP**: Build the foundation for future expansion -4. **Revenue MVP**: Generate early revenue with essential features - -**Critical Questions:** - -- What's the minimum that would make users say 'this is useful'? -- What would make investors/partners say 'this has potential'? -- What's the fastest path to validated learning? - -**Which MVP approach feels right for {{project_name}}?**" +- Explore MVP philosophy options: problem-solving, experience, platform, or revenue MVP +- Ask critical questions: + - What's the minimum that would make users say 'this is useful'? + - What would make investors/partners say 'this has potential'? + - What's the fastest path to validated learning? +- Guide toward appropriate MVP approach for their product ### 3. Scoping Decision Framework Use structured decision-making for scope: **Must-Have Analysis:** -"Let's identify absolute MVP necessities. For each journey and success criterion, ask: - -- **Without this, does the product fail?** (Y/N) -- **Can this be manual initially?** (Y/N) -- **Is this a deal-breaker for early adopters?** (Y/N) - -**Current Document Review:** -Looking at your user journeys, what are the absolute core experiences that must work? - -{{analyze_journeys_for_mvp_essentials}}" +- Guide identification of absolute MVP necessities +- For each journey and success criterion, ask: + - Without this, does the product fail? + - Can this be manual initially? + - Is this a deal-breaker for early adopters? +- Analyze journeys for MVP essentials **Nice-to-Have Analysis:** -"Let's also identify what could be added later: - -**Post-MVP Enhancements:** - -- Features that enhance but aren't essential -- User types that can be added later -- Advanced functionality that builds on MVP - -**What features could we add in versions 2, 3, etc.?**" +- Identify what could be added later: + - Features that enhance but aren't essential + - User types that can be added later + - Advanced functionality that builds on MVP +- Ask what features could be added in versions 2, 3, etc. ### 4. Progressive Feature Roadmap Create phased development approach: - -"Let's map your features across development phases: - -**Phase 1: MVP** +- Guide mapping of features across development phases +- Structure as Phase 1 (MVP), Phase 2 (Growth), Phase 3 (Vision) +- Ensure clear progression and dependencies - Core user value delivery - Essential user journeys @@ -225,44 +172,26 @@ Prepare comprehensive scoping section: **Resource Risks:** {{contingency_approach}} ``` -### 7. Present Content and Menu +### 7. Present MENU OPTIONS -Show the scoping decisions and present choices: +Present the scoping decisions for review, then display menu: +- Show strategic scoping plan (using structure from step 6) +- Highlight MVP boundaries and phased roadmap +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of conversation -"I've analyzed your complete PRD and created a strategic scoping plan for {{project_name}}. +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Functional Requirements (Step 9 of 11)" -**Here's what I'll add to the document:** +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current scoping analysis, process the enhanced insights that come back, ask user if they accept the improvements, if yes update content then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the scoping context, process the collaborative insights on MVP and roadmap decisions, ask user if they accept the changes, if yes update content then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu -[Show the complete markdown content from step 6] - -**What would you like to do?** -[A] Advanced Elicitation - Explore alternative scoping strategies -[P] Party Mode - Bring different perspectives on MVP and roadmap decisions -[C] Continue - Save scoping decisions and move to Functional Requirements (Step 9 of 11)" - -### 8. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with current scoping analysis -- Process enhanced scoping insights that come back -- Ask user: "Accept these improvements to the scoping decisions? (y/n)" -- If yes: Update content, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with scoping context -- Process collaborative insights on MVP and roadmap decisions -- Ask user: "Accept these changes to the scoping decisions? (y/n)" -- If yes: Update content, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `./step-09-functional.md` +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu ## APPEND TO DOCUMENT: @@ -294,6 +223,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `./step-09-functional.md`. +After user selects 'C' and content is saved to document, load {nextStepFile}. Remember: Do NOT proceed to step-09 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md similarity index 70% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md index d91e49b9..36fb71b4 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md @@ -2,13 +2,8 @@ name: 'step-09-functional' description: 'Synthesize all discovery into comprehensive functional requirements' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-09-functional.md' -nextStepFile: '{workflow_path}/steps/step-10-nonfunctional.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-10-nonfunctional.md' outputFile: '{planning_artifacts}/prd.md' # Task References @@ -37,23 +32,9 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - 🎯 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 output file frontmatter, adding this step name to the end of the list of stepsCompleted - 🚫 FORBIDDEN to load next step until C is selected -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to ensure comprehensive requirement coverage -- **P (Party Mode)**: Bring multiple perspectives to validate complete requirement set -- **C (Continue)**: Save the content to the document and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding ## CONTEXT BOUNDARIES: @@ -186,49 +167,29 @@ When saving to document, append these Level 2 and Level 3 sections: [Continue for all capability areas discovered in conversation] ``` -### 7. Present Content and Menu +### 7. Present MENU OPTIONS -Show the generated functional requirements and present choices: -"I've synthesized all our discussions into comprehensive functional requirements. This becomes the capability contract that UX designers, architects, and developers will all work from. +Present the functional requirements for review, then display menu: +- Show synthesized functional requirements (using structure from step 6) +- Emphasize this is the capability contract for all downstream work +- Highlight that every feature must trace back to these requirements +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of conversation -**Here's what I'll add to the document:** +**What would you like to do?**" -[Show the complete FR list from step 6] +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Non-Functional Requirements (Step 10 of 11)" -**This is critical because:** +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current FR list, process the enhanced capability coverage that comes back, ask user if they accept the additions, if yes update content then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current FR list, process the collaborative capability validation and additions, ask user if they accept the changes, if yes update content then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu -- Every feature we build must trace back to one of these requirements -- UX designers will ONLY design interactions for these capabilities -- Architects will ONLY build systems to support these capabilities - -**What would you like to do?** -[A] Advanced Elicitation - Let's ensure we haven't missed any capabilities -[P] Party Mode - Bring different perspectives to validate complete coverage -[C] Continue - Save this and move to Non-Functional Requirements (Step 10 of 11)" - -### 8. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current FR list -- Process the enhanced capability coverage that comes back -- Ask user: "Accept these additions to the functional requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current FR list -- Process the collaborative capability validation and additions -- Ask user: "Accept these changes to the functional requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md` +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu ## APPEND TO DOCUMENT: @@ -265,6 +226,6 @@ Emphasize to user: "This FR list is now binding. Any feature not listed here wil ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md` to define non-functional requirements. +After user selects 'C' and content is saved to document, load {nextStepFile} to define non-functional requirements. Remember: Do NOT proceed to step-10 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md similarity index 64% rename from src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md index 48422859..403a647e 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md @@ -2,13 +2,8 @@ name: 'step-10-nonfunctional' description: 'Define quality attributes that matter for this specific product' -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - # File References -thisStepFile: '{workflow_path}/steps/step-10-nonfunctional.md' -nextStepFile: '{workflow_path}/steps/step-11-complete.md' -workflowFile: '{workflow_path}/workflow.md' +nextStepFile: './step-11-polish.md' outputFile: '{planning_artifacts}/prd.md' # Task References @@ -18,7 +13,7 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' # Step 10: Non-Functional Requirements -**Progress: Step 10 of 11** - Next: Complete PRD +**Progress: Step 10 of 12** - Next: Polish Document ## MANDATORY EXECUTION RULES (READ FIRST): @@ -37,23 +32,9 @@ partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' - 🎯 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 output file frontmatter, adding this step name to the end of the list of stepsCompleted - 🚫 FORBIDDEN to load next step until C is selected -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to ensure comprehensive quality attributes -- **P (Party Mode)**: Bring technical perspectives to validate NFR completeness -- **C (Continue)**: Save the content to the document and proceed to final step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding ## CONTEXT BOUNDARIES: @@ -97,56 +78,41 @@ For each relevant category, conduct targeted discovery: #### Performance NFRs (If relevant): -"Let's talk about performance requirements for {{project_name}}. - -**Performance Questions:** - +Explore performance requirements: - What parts of the system need to be fast for users to be successful? - Are there specific response time expectations? - What happens if performance is slower than expected? -- Are there concurrent user scenarios we need to support?" +- Are there concurrent user scenarios we need to support? #### Security NFRs (If relevant): -"Security is critical for products that handle sensitive information. - -**Security Questions:** - +Explore security requirements: - What data needs to be protected? - Who should have access to what? - What are the security risks we need to mitigate? -- Are there compliance requirements (GDPR, HIPAA, PCI-DSS)?" +- Are there compliance requirements (GDPR, HIPAA, PCI-DSS)? #### Scalability NFRs (If relevant): -"Scalability matters if we expect growth or have variable demand. - -**Scalability Questions:** - +Explore scalability requirements: - How many users do we expect initially? Long-term? - Are there seasonal or event-based traffic spikes? -- What happens if we exceed our capacity?" -- What growth scenarios should we plan for?" +- What happens if we exceed our capacity? +- What growth scenarios should we plan for? #### Accessibility NFRs (If relevant): -"Accessibility ensures the product works for users with disabilities. - -**Accessibility Questions:** - +Explore accessibility requirements: - Are we serving users with visual, hearing, or motor impairments? - Are there legal accessibility requirements (WCAG, Section 508)? -- What accessibility features are most important for our users?" +- What accessibility features are most important for our users? #### Integration NFRs (If relevant): -"Integration requirements matter for products that connect to other systems. - -**Integration Questions:** - +Explore integration requirements: - What external systems do we need to connect with? - Are there APIs or data formats we must support? -- How reliable do these integrations need to be?" +- How reliable do these integrations need to be? ### 4. Make NFRs Specific and Measurable @@ -190,45 +156,27 @@ When saving to document, append these Level 2 and Level 3 sections (only include [Integration requirements based on conversation - only include if relevant] ``` -### 6. Present Content and Menu +### 6. Present MENU OPTIONS -Show the generated NFR content and present choices: -"I've defined the non-functional requirements that specify how well {{project_name}} needs to perform. I've only included categories that actually matter for this product. +Present the non-functional requirements for review, then display menu: +- Show defined NFRs (using structure from step 5) +- Note that only relevant categories were included +- Emphasize NFRs specify how well the system needs to perform +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of conversation -**Here's what I'll add to the document:** +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Polish Document (Step 11 of 12)" -[Show the complete NFR content from step 5] +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the current NFR content, process the enhanced quality attribute insights that come back, ask user if they accept the improvements, if yes update content then redisplay menu, if no keep original content then redisplay menu +- IF P: Execute {partyModeWorkflow} with the current NFR list, process the collaborative technical validation and additions, ask user if they accept the changes, if yes update content then redisplay menu, if no keep original content then redisplay menu +- IF C: Append the final content to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu -**Note:** We've skipped categories that don't apply to avoid unnecessary requirements. - -**What would you like to do?** -[A] Advanced Elicitation - Let's ensure we haven't missed critical quality attributes -[P] Party Mode - Bring technical perspectives to validate NFR specifications -[C] Continue - Save this and move to Complete PRD (Step 11 of 11)" - -### 7. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current NFR content -- Process the enhanced quality attribute insights that come back -- Ask user: "Accept these improvements to the non-functional requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current NFR list -- Process the collaborative technical validation and additions -- Ask user: "Accept these changes to the non-functional requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md` +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu ## APPEND TO DOCUMENT: @@ -289,6 +237,6 @@ When user selects 'C', append the content directly to the document using the str ## NEXT STEP: -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md` to finalize the PRD and complete the workflow. +After user selects 'C' and content is saved to document, load {nextStepFile} to finalize the PRD and complete the workflow. Remember: Do NOT proceed to step-11 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md new file mode 100644 index 00000000..1edbf0bf --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md @@ -0,0 +1,217 @@ +--- +name: 'step-11-polish' +description: 'Optimize and polish the complete PRD document for flow, coherence, and readability' + +# File References +nextStepFile: './step-12-complete.md' +outputFile: '{planning_artifacts}/prd.md' +purposeFile: './data/prd-purpose.md' + +# Task References +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' +--- + +# Step 11: Document Polish + +**Progress: Step 11 of 12** - Next: Complete PRD + +## MANDATORY EXECUTION RULES (READ FIRST): + +- 🛑 CRITICAL: Load the ENTIRE document before making changes +- 📖 CRITICAL: Read complete step file before taking action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- ✅ This is a POLISH step - optimize existing content +- 📋 IMPROVE flow, coherence, and readability +- 💬 PRESERVE user's voice and intent +- 🎯 MAINTAIN all essential information while improving presentation +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +## EXECUTION PROTOCOLS: + +- 🎯 Load complete document first +- 📝 Review for flow and coherence issues +- ✂️ Reduce duplication while preserving essential info +- 📖 Ensure proper ## Level 2 headers throughout +- 💾 Save optimized document +- ⚠️ Present A/P/C menu after polish +- 🚫 DO NOT skip review steps + +## CONTEXT BOUNDARIES: + +- Complete PRD document exists from all previous steps +- Document may have duplication from progressive append +- Sections may not flow smoothly together +- Level 2 headers ensure document can be split if needed +- Focus on readability and coherence + +## YOUR TASK: + +Optimize the complete PRD document for flow, coherence, and professional presentation while preserving all essential information. + +## DOCUMENT POLISH SEQUENCE: + +### 1. Load Context and Document + +**CRITICAL:** Load the PRD purpose document first: + +- Read `{purposeFile}` to understand what makes a great BMAD PRD +- Internalize the philosophy: information density, traceability, measurable requirements +- Keep the dual-audience nature (humans + LLMs) in mind + +**Then Load the PRD Document:** + +- Read `{outputFile}` completely from start to finish +- Understand the full document structure and content +- Identify all sections and their relationships +- Note areas that need attention + +### 2. Document Quality Review + +Review the entire document with PRD purpose principles in mind: + +**Information Density:** +- Are there wordy phrases that can be condensed? +- Is conversational padding present? +- Can sentences be more direct and concise? + +**Flow and Coherence:** +- Do sections transition smoothly? +- Are there jarring topic shifts? +- Does the document tell a cohesive story? +- Is the progression logical for readers? + +**Duplication Detection:** +- Are ideas repeated across sections? +- Is the same information stated multiple times? +- Can redundant content be consolidated? +- Are there contradictory statements? + +**Header Structure:** +- Are all main sections using ## Level 2 headers? +- Is the hierarchy consistent (##, ###, ####)? +- Can sections be easily extracted or referenced? +- Are headers descriptive and clear? + +**Readability:** +- Are sentences clear and concise? +- Is the language consistent throughout? +- Are technical terms used appropriately? +- Would stakeholders find this easy to understand? + +### 3. Optimization Actions + +Make targeted improvements: + +**Improve Flow:** +- Add transition sentences between sections +- Smooth out jarring topic shifts +- Ensure logical progression +- Connect related concepts across sections + +**Reduce Duplication:** +- Consolidate repeated information +- Keep content in the most appropriate section +- Use cross-references instead of repetition +- Remove redundant explanations + +**Enhance Coherence:** +- Ensure consistent terminology throughout +- Align all sections with product differentiator +- Maintain consistent voice and tone +- Verify scope consistency across sections + +**Optimize Headers:** +- Ensure all main sections use ## Level 2 +- Make headers descriptive and action-oriented +- Check that headers follow consistent patterns +- Verify headers support document navigation + +### 4. Preserve Critical Information + +**While optimizing, ensure NOTHING essential is lost:** + +**Must Preserve:** +- All user success criteria +- All functional requirements (capability contract) +- All user journey narratives +- All scope decisions (MVP, Growth, Vision) +- All non-functional requirements +- Product differentiator and vision +- Domain-specific requirements +- Innovation analysis (if present) + +**Can Consolidate:** +- Repeated explanations of the same concept +- Redundant background information +- Multiple versions of similar content +- Overlapping examples + +### 5. Generate Optimized Document + +Create the polished version: + +**Polishing Process:** +1. Start with original document +2. Apply all optimization actions +3. Review to ensure nothing essential was lost +4. Verify improvements enhance readability +5. Prepare optimized version for review + +### 6. Present MENU OPTIONS + +Present the polished document for review, then display menu: +- Show what changed in the polish +- Highlight improvements made (flow, duplication, headers) +- Ask if they'd like to refine further, get other perspectives, or proceed +- Present menu options naturally as part of conversation + +Display: "**Select:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Complete PRD (Step 12 of 12)" + +#### Menu Handling Logic: +- IF A: Execute {advancedElicitationTask} with the polished document, process the enhanced refinements that come back, ask user "Accept these polish improvements? (y/n)", if yes update content with improvements then redisplay menu, if no keep original polish then redisplay menu +- IF P: Execute {partyModeWorkflow} with the polished document, process the collaborative refinements to flow and coherence, ask user "Accept these polish changes? (y/n)", if yes update content with improvements then redisplay menu, if no keep original polish then redisplay menu +- IF C: Save the polished document to {outputFile}, update frontmatter by adding this step name to the end of the stepsCompleted array, then load, read entire file, then execute {nextStepFile} +- IF Any other: help user respond, then redisplay menu + +#### EXECUTION RULES: +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- After other menu items execution, return to this menu + +## APPEND TO DOCUMENT: + +When user selects 'C', replace the entire document content with the polished version. + +## SUCCESS METRICS: + +✅ Complete document loaded and reviewed +✅ Flow and coherence improved +✅ Duplication reduced while preserving essential information +✅ All main sections use ## Level 2 headers +✅ Transitions between sections are smooth +✅ User's voice and intent preserved +✅ Document is more readable and professional +✅ A/P/C menu presented and handled correctly +✅ Polished document saved when C selected + +## FAILURE MODES: + +❌ Loading only partial document (leads to incomplete polish) +❌ Removing essential information while reducing duplication +❌ Not preserving user's voice and intent +❌ Changing content instead of improving presentation +❌ Not ensuring ## Level 2 headers for main sections +❌ Making arbitrary style changes instead of coherence improvements +❌ Not presenting A/P/C menu for user approval +❌ Saving polished document without user selecting 'C' + +❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions +❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file +❌ **CRITICAL**: Making changes without complete understanding of document requirements + +## NEXT STEP: + +After user selects 'C' and polished document is saved, load `./step-12-complete.md` to complete the workflow. + +Remember: Do NOT proceed to step-12 until user explicitly selects 'C' from the A/P/C menu and polished document is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md new file mode 100644 index 00000000..435c9084 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md @@ -0,0 +1,180 @@ +--- +name: 'step-12-complete' +description: 'Complete the PRD workflow, update status files, and suggest next steps including validation' + +# File References +outputFile: '{planning_artifacts}/prd.md' +validationFlow: '../steps-v/step-v-01-discovery.md' +--- + +# Step 12: Workflow Completion + +**Final Step - Complete the PRD** + +## MANDATORY EXECUTION RULES (READ FIRST): + +- ✅ THIS IS A FINAL STEP - Workflow completion required +- 📖 CRITICAL: ALWAYS read the complete step file before taking any action +- 🛑 NO content generation - this is a wrap-up step +- 📋 FINALIZE document and update workflow status +- 💬 FOCUS on completion, validation options, and next steps +- 🎯 UPDATE workflow status files with completion information +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +## EXECUTION PROTOCOLS: + +- 🎯 Show your analysis before taking any action +- 💾 Update the main workflow status file with completion information (if exists) +- 📖 Offer validation workflow options to user +- 🚫 DO NOT load additional steps after this one + +## TERMINATION STEP PROTOCOLS: + +- This is a FINAL step - workflow completion required +- Update workflow status file with finalized document +- Suggest validation and next workflow steps +- Mark workflow as complete in status tracking + +## CONTEXT BOUNDARIES: + +- Complete and polished PRD document is available from all previous steps +- Workflow frontmatter shows all completed steps including polish +- All collaborative content has been generated, saved, and optimized +- Focus on completion, validation options, and next steps + +## YOUR TASK: + +Complete the PRD workflow, update status files, offer validation options, and suggest next steps for the project. + +## WORKFLOW COMPLETION SEQUENCE: + +### 1. Announce Workflow Completion + +Inform user that the PRD is complete and polished: +- Celebrate successful completion of comprehensive PRD +- Summarize all sections that were created +- Highlight that document has been polished for flow and coherence +- Emphasize document is ready for downstream work + +### 2. Workflow Status Update + +Update the main workflow status file if there is one: + +- Load `{status_file}` from workflow configuration (if exists) +- Update workflow_status["prd"] = "{default_output_file}" +- Save file, preserving all comments and structure +- Mark current timestamp as completion time + +### 3. Validation Workflow Options + +Offer validation workflows to ensure PRD is ready for implementation: + +**Available Validation Workflows:** + +**Option 1: Check Implementation Readiness** (`{checkImplementationReadinessWorkflow}`) +- Validates PRD has all information needed for development +- Checks epic coverage completeness +- Reviews UX alignment with requirements +- Assesses epic quality and readiness +- Identifies gaps before architecture/design work begins + +**When to use:** Before starting technical architecture or epic breakdown + +**Option 2: Skip for Now** +- Proceed directly to next workflows (architecture, UX, epics) +- Validation can be done later if needed +- Some teams prefer to validate during architecture reviews + +### 4. Suggest Next Workflows + +Provide guidance on logical next workflows - strongly suggesting any of these chosen are started in a fresh context with the appropriate agent: + +**Typical Next Workflows:** + +**Immediate Next Steps:** + +1. **PRD Quality Validation First (Recommended):** + - execute the `{validationFlow}` workflow if selected or start a new chat with me and select the validate PRD menu item + - Ensures PRD is complete and ready + - Identifies any gaps or issues + - Validates before committing to architecture/design + +2. **UX Design:** `workflow create-ux-design` with the UX-Designer Agent (if UI exists) + - User journey insights from step-04 inform interaction design + - Functional requirements from step-09 define design scope + - Polish-optimized document provides clear design requirements + +3. **Technical Architecture:** `workflow create-architecture` with the Architect Agent + - Project-type requirements from step-07 guide technical decisions + - Non-functional requirements from step-10 inform architecture choices + - Functional requirements define system capabilities + +4. **Epic Breakdown:** `workflow create-epics-and-stories` with me again - but really recommend first doing a UX if needed and an architecture! + - Functional requirements from step-09 become epics and stories + - Scope definition from step-03 guides sprint planning + - Richer when created after UX/architecture + +**Strategic Considerations:** + +- Validation adds confidence before architecture/design investment +- UX design and architecture can happen in parallel after validation +- Epics/stories are richer when created after UX/architecture +- Order depends on team preferences and project needs + +### 5. Final Completion Confirmation + +- Confirm completion with user and summarize what has been accomplished +- Document now contains: Executive Summary, Success Criteria, User Journeys, Domain Requirements (if applicable), Innovation Analysis (if applicable), Project-Type Requirements, Functional Requirements (capability contract), Non-Functional Requirements, and has been polished for flow and coherence +- Ask if they'd like to run validation workflow or proceed to next workflows + +## SUCCESS METRICS: + +✅ PRD document contains all required sections and has been polished +✅ All collaborative content properly saved and optimized +✅ Workflow status file updated with completion information (if exists) +✅ Validation workflow options clearly presented +✅ Clear next step guidance provided to user +✅ Document quality validation completed +✅ User acknowledges completion and understands next options + +## FAILURE MODES: + +❌ Not updating workflow status file with completion information (if exists) +❌ Not offering validation workflow options +❌ Missing clear next step guidance for user +❌ Not confirming document completeness with user +❌ Workflow not properly marked as complete in status tracking (if applicable) +❌ User unclear about what happens next or what validation options exist + +❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions +❌ **CRITICAL**: Making decisions without complete understanding of step requirements and protocols + +## WORKFLOW COMPLETION CHECKLIST: + +### Document Structure Complete: + +- [ ] Executive Summary with vision and differentiator +- [ ] Success Criteria with measurable outcomes +- [ ] Product Scope (MVP, Growth, Vision) +- [ ] User Journeys (comprehensive coverage) +- [ ] Domain Requirements (if applicable) +- [ ] Innovation Analysis (if applicable) +- [ ] Project-Type Requirements +- [ ] Functional Requirements (capability contract) +- [ ] Non-Functional Requirements +- [ ] Document polished for flow and coherence + +### Process Complete: + +- [ ] All steps (including polish) completed with user confirmation +- [ ] All content saved and optimized +- [ ] Frontmatter properly updated +- [ ] Workflow status file updated (if exists) +- [ ] Validation options presented +- [ ] Next steps clearly communicated + +## FINAL REMINDER to give the user: + +The polished PRD serves as the foundation for all subsequent product development activities. All design, architecture, and development work should trace back to the requirements and vision documented in this PRD - update it also as needed as you continue planning. + +**Congratulations on completing the Product Requirements Document for {{project_name}}!** 🎉 diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md new file mode 100644 index 00000000..4b9e882a --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md @@ -0,0 +1,247 @@ +--- +name: 'step-e-01-discovery' +description: 'Discovery & Understanding - Understand what user wants to edit and detect PRD format' + +# File references (ONLY variables used in this step) +altStepFile: './step-e-01b-legacy-conversion.md' +prdPurpose: '{project-root}/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md' +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' +--- + +# Step E-1: Discovery & Understanding + +## STEP GOAL: + +Understand what the user wants to edit in the PRD, detect PRD format/type, check for validation report guidance, and route appropriately. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and PRD Improvement Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring analytical expertise and improvement guidance +- ✅ User brings domain knowledge and edit requirements + +### Step-Specific Rules: + +- 🎯 Focus ONLY on discovering user intent and PRD format +- 🚫 FORBIDDEN to make any edits yet +- 💬 Approach: Inquisitive and analytical, understanding before acting +- 🚪 This is a branch step - may route to legacy conversion + +## EXECUTION PROTOCOLS: + +- 🎯 Discover user's edit requirements +- 🎯 Auto-detect validation reports in PRD folder (use as guide) +- 🎯 Load validation report if provided (use as guide) +- 🎯 Detect PRD format (BMAD/legacy) +- 🎯 Route appropriately based on format +- 💾 Document discoveries for next step +- 🚫 FORBIDDEN to proceed without understanding requirements + +## CONTEXT BOUNDARIES: + +- Available context: PRD file to edit, optional validation report, auto-detected validation reports +- Focus: User intent discovery and format detection only +- Limits: Don't edit yet, don't validate yet +- Dependencies: None - this is first edit step + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Load PRD Purpose Standards + +Load and read the complete file at: +`{prdPurpose}` (data/prd-purpose.md) + +This file defines what makes a great BMAD PRD. Internalize this understanding - it will guide improvement recommendations. + +### 2. Discover PRD to Edit + +"**PRD Edit Workflow** + +Which PRD would you like to edit? + +Please provide the path to the PRD file you want to edit." + +**Wait for user to provide PRD path.** + +### 3. Validate PRD Exists and Load + +Once PRD path is provided: +- Check if PRD file exists at specified path +- If not found: "I cannot find a PRD at that path. Please check the path and try again." +- If found: Load the complete PRD file including frontmatter + +### 4. Check for Existing Validation Report + +**Check if validation report exists in the PRD folder:** + +```bash +# Look for most recent validation report in the PRD folder +ls -t {prd_folder_path}/validation-report-*.md 2>/dev/null | head -1 +``` + +**If validation report found:** + +Display: +"**📋 Found Validation Report** + +I found a validation report from {validation_date} in the PRD folder. + +This report contains findings from previous validation checks and can help guide our edits to fix known issues. + +**Would you like to:** +- **[U] Use validation report** - Load it to guide and prioritize edits +- **[S] Skip** - Proceed with manual edit discovery" + +**Wait for user input.** + +**IF U (Use validation report):** +- Load the validation report file +- Extract findings, issues, and improvement suggestions +- Note: "Validation report loaded - will use it to guide prioritized improvements" +- Continue to step 5 + +**IF S (Skip) or no validation report found:** +- Note: "Proceeding with manual edit discovery" +- Continue to step 5 + +**If no validation report found:** +- Note: "No validation report found in PRD folder" +- Continue to step 5 without asking user + +### 5. Ask About Validation Report + +"**Do you have a validation report to guide edits?** + +If you've run the validation workflow on this PRD, I can use that report to guide improvements and prioritize changes. + +Validation report path (or type 'none'):" + +**Wait for user input.** + +**If validation report path provided:** +- Load the validation report +- Extract findings, severity, improvement suggestions +- Note: "Validation report loaded - will use it to guide prioritized improvements" + +**If no validation report:** +- Note: "Proceeding with manual edit discovery" +- Continue to step 6 + +### 6. Discover Edit Requirements + +"**What would you like to edit in this PRD?** + +Please describe the changes you want to make. For example: +- Fix specific issues (information density, implementation leakage, etc.) +- Add missing sections or content +- Improve structure and flow +- Convert to BMAD format (if legacy PRD) +- General improvements +- Other changes + +**Describe your edit goals:**" + +**Wait for user to describe their requirements.** + +### 7. Detect PRD Format + +Analyze the loaded PRD: + +**Extract all ## Level 2 headers** from PRD + +**Check for BMAD PRD core sections:** +1. Executive Summary +2. Success Criteria +3. Product Scope +4. User Journeys +5. Functional Requirements +6. Non-Functional Requirements + +**Classify format:** +- **BMAD Standard:** 5-6 core sections present +- **BMAD Variant:** 3-4 core sections present, generally follows BMAD patterns +- **Legacy (Non-Standard):** Fewer than 3 core sections, does not follow BMAD structure + +### 8. Route Based on Format and Context + +**IF validation report provided OR PRD is BMAD Standard/Variant:** + +Display: "**Edit Requirements Understood** + +**PRD Format:** {classification} +{If validation report: "**Validation Guide:** Yes - will use validation report findings"} +**Edit Goals:** {summary of user's requirements} + +**Proceeding to deep review and analysis...**" + +Load and execute next step (step-e-02-review.md) + +**IF PRD is Legacy (Non-Standard) AND no validation report:** + +Display: "**Format Detected:** Legacy PRD + +This PRD does not follow BMAD standard structure (only {count}/6 core sections present). + +**Your edit goals:** {user's requirements} + +**How would you like to proceed?**" + +Present MENU OPTIONS below for user selection + +### 9. Present MENU OPTIONS (Legacy PRDs Only) + +**[C] Convert to BMAD Format** - Convert PRD to BMAD standard structure, then apply your edits +**[E] Edit As-Is** - Apply your edits without converting the format +**[X] Exit** - Exit and review conversion options + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed based on user selection + +#### Menu Handling Logic: + +- IF C (Convert): Load, read entire file, then execute {altStepFile} (step-e-01b-legacy-conversion.md) +- IF E (Edit As-Is): Display "Proceeding with edits..." then load next step +- IF X (Exit): Display summary and exit +- IF Any other: help user, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- User's edit requirements clearly understood +- Auto-detected validation reports loaded and analyzed (when found) +- Manual validation report loaded and analyzed (if provided) +- PRD format detected correctly +- BMAD PRDs proceed directly to review step +- Legacy PRDs pause and present conversion options +- User can choose conversion path or edit as-is + +### ❌ SYSTEM FAILURE: + +- Not discovering user's edit requirements +- Not auto-detecting validation reports in PRD folder +- Not loading validation report when provided (auto or manual) +- Missing format detection +- Not pausing for legacy PRDs without guidance +- Auto-proceeding without understanding intent + +**Master Rule:** Understand before editing. Detect format early so we can guide users appropriately. Auto-detect and use validation reports for prioritized improvements. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md new file mode 100644 index 00000000..b8c67753 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md @@ -0,0 +1,208 @@ +--- +name: 'step-e-01b-legacy-conversion' +description: 'Legacy PRD Conversion Assessment - Analyze legacy PRD and propose conversion strategy' + +# File references (ONLY variables used in this step) +nextStepFile: './step-e-02-review.md' +prdFile: '{prd_file_path}' +prdPurpose: '{project-root}/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md' +--- + +# Step E-1B: Legacy PRD Conversion Assessment + +## STEP GOAL: + +Analyze legacy PRD against BMAD standards, identify gaps, propose conversion strategy, and let user choose how to proceed. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and PRD Improvement Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring BMAD standards expertise and conversion guidance +- ✅ User brings domain knowledge and edit requirements + +### Step-Specific Rules: + +- 🎯 Focus ONLY on conversion assessment and proposal +- 🚫 FORBIDDEN to perform conversion yet (that comes in edit step) +- 💬 Approach: Analytical gap analysis with clear recommendations +- 🚪 This is a branch step - user chooses conversion path + +## EXECUTION PROTOCOLS: + +- 🎯 Analyze legacy PRD against BMAD standard +- 💾 Identify gaps and estimate conversion effort +- 📖 Present conversion options with effort estimates +- 🚫 FORBIDDEN to proceed without user selection + +## CONTEXT BOUNDARIES: + +- Available context: Legacy PRD, user's edit requirements, prd-purpose standards +- Focus: Conversion assessment only (not actual conversion) +- Limits: Don't convert yet, don't validate yet +- Dependencies: Step e-01 detected legacy format and routed here + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Assessment + +**Try to use Task tool with sub-agent:** + +"Perform legacy PRD conversion assessment: + +**Load the PRD and prd-purpose.md** + +**For each BMAD PRD section, analyze:** +1. Does PRD have this section? (Executive Summary, Success Criteria, Product Scope, User Journeys, Functional Requirements, Non-Functional Requirements) +2. If present: Is it complete and well-structured? +3. If missing: What content exists that could migrate to this section? +4. Effort to create/complete: Minimal / Moderate / Significant + +**Identify:** +- Core sections present: {count}/6 +- Content gaps in each section +- Overall conversion effort: Quick / Moderate / Substantial +- Recommended approach: Full restructuring vs targeted improvements + +Return conversion assessment with gap analysis and effort estimate." + +**Graceful degradation (if no Task tool):** +- Manually check PRD for each BMAD section +- Note what's present and what's missing +- Estimate conversion effort +- Identify best conversion approach + +### 2. Build Gap Analysis + +**For each BMAD core section:** + +**Executive Summary:** +- Present: [Yes/No/Partial] +- Gap: [what's missing or incomplete] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Success Criteria:** +- Present: [Yes/No/Partial] +- Gap: [what's missing or incomplete] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Product Scope:** +- Present: [Yes/No/Partial] +- Gap: [what's missing or incomplete] +- Effort to Complete: [Minimal/Moderate/Significant] + +**User Journeys:** +- Present: [Yes/No/Partial] +- Gap: [what's missing or incomplete] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Functional Requirements:** +- Present: [Yes/No/Partial] +- Gap: [what's missing or incomplete] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Non-Functional Requirements:** +- Present: [Yes/No/Partial] +- Gap: [what's missing or incomplete] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Overall Assessment:** +- Sections Present: {count}/6 +- Total Conversion Effort: [Quick/Moderate/Substantial] +- Recommended: [Full restructuring / Targeted improvements] + +### 3. Present Conversion Assessment + +Display: + +"**Legacy PRD Conversion Assessment** + +**Current PRD Structure:** +- Core sections present: {count}/6 +{List which sections are present/missing} + +**Gap Analysis:** + +{Present gap analysis table showing each section's status and effort} + +**Overall Conversion Effort:** {effort level} + +**Your Edit Goals:** +{Reiterate user's stated edit requirements} + +**Recommendation:** +{Based on effort and user goals, recommend best approach} + +**How would you like to proceed?**" + +### 4. Present MENU OPTIONS + +**[R] Restructure to BMAD** - Full conversion to BMAD format, then apply your edits +**[I] Targeted Improvements** - Apply your edits to existing structure without restructuring +**[E] Edit & Restructure** - Do both: convert format AND apply your edits +**[X] Exit** - Review assessment and decide + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed based on user selection + +#### Menu Handling Logic: + +- IF R (Restructure): Note conversion mode, then load next step +- IF I (Targeted): Note targeted mode, then load next step +- IF E (Edit & Restructure): Note both mode, then load next step +- IF X (Exit): Display summary, exit + +### 5. Document Conversion Strategy + +Store conversion decision for next step: + +- **Conversion mode:** [Full restructuring / Targeted improvements / Both] +- **Edit requirements:** [user's requirements from step e-01] +- **Gap analysis:** [summary of gaps identified] + +Display: "**Conversion Strategy Documented** + +Mode: {conversion mode} +Edit goals: {summary} + +**Proceeding to deep review...**" + +Load and execute {nextStepFile} (step-e-02-review.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All 6 BMAD core sections analyzed for gaps +- Effort estimates provided for each section +- Overall conversion effort assessed correctly +- Clear recommendation provided based on effort and user goals +- User chooses conversion strategy (restructure/targeted/both) +- Conversion strategy documented for next step + +### ❌ SYSTEM FAILURE: + +- Not analyzing all 6 core sections +- Missing effort estimates +- Not providing clear recommendation +- Auto-proceeding without user selection +- Not documenting conversion strategy + +**Master Rule:** Legacy PRDs need conversion assessment so users understand the work involved and can choose the best approach. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md new file mode 100644 index 00000000..31c80971 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md @@ -0,0 +1,249 @@ +--- +name: 'step-e-02-review' +description: 'Deep Review & Analysis - Thoroughly review existing PRD and prepare detailed change plan' + +# File references (ONLY variables used in this step) +nextStepFile: './step-e-03-edit.md' +prdFile: '{prd_file_path}' +validationReport: '{validation_report_path}' # If provided +prdPurpose: '{project-root}/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md' +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +--- + +# Step E-2: Deep Review & Analysis + +## STEP GOAL: + +Thoroughly review the existing PRD, analyze validation report findings (if provided), and prepare a detailed change plan before editing. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and PRD Improvement Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring analytical expertise and improvement planning +- ✅ User brings domain knowledge and approval authority + +### Step-Specific Rules: + +- 🎯 Focus ONLY on review and analysis, not editing yet +- 🚫 FORBIDDEN to make changes to PRD in this step +- 💬 Approach: Thorough analysis with user confirmation on plan +- 🚪 This is a middle step - user confirms plan before proceeding + +## EXECUTION PROTOCOLS: + +- 🎯 Load and analyze validation report (if provided) +- 🎯 Deep review of entire PRD +- 🎯 Map validation findings to specific sections +- 🎯 Prepare detailed change plan +- 💬 Get user confirmation on plan +- 🚫 FORBIDDEN to proceed to edit without user approval + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, validation report (if provided), user requirements from step e-01 +- Focus: Analysis and planning only (no editing) +- Limits: Don't change PRD yet, don't validate yet +- Dependencies: Step e-01 completed - requirements and format known + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Deep Review + +**Try to use Task tool with sub-agent:** + +"Perform deep PRD review and change planning: + +**Context from step e-01:** +- User's edit requirements: {user_requirements} +- PRD format: {BMAD/legacy} +- Validation report provided: {yes/no} +- Conversion mode: {restructure/targeted/both} (if legacy) + +**IF validation report provided:** +1. Extract all findings from validation report +2. Map findings to specific PRD sections +3. Prioritize by severity: Critical > Warning > Informational +4. For each critical issue: identify specific fix needed +5. For user's manual edit goals: identify where in PRD to apply + +**IF no validation report:** +1. Read entire PRD thoroughly +2. Analyze against BMAD standards (from prd-purpose.md) +3. Identify issues in: + - Information density (anti-patterns) + - Structure and flow + - Completeness (missing sections/content) + - Measurability (unmeasurable requirements) + - Traceability (broken chains) + - Implementation leakage +4. Map user's edit goals to specific sections + +**Output:** +- Section-by-section analysis +- Specific changes needed for each section +- Prioritized action list +- Recommended order for applying changes + +Return detailed change plan with section breakdown." + +**Graceful degradation (if no Task tool):** +- Manually read PRD sections +- Manually analyze validation report findings (if provided) +- Build section-by-section change plan +- Prioritize changes by severity/user goals + +### 2. Build Change Plan + +**Organize by PRD section:** + +**For each section (in order):** +- **Current State:** Brief description of what exists +- **Issues Identified:** [List from validation report or manual analysis] +- **Changes Needed:** [Specific changes required] +- **Priority:** [Critical/High/Medium/Low] +- **User Requirements Met:** [Which user edit goals address this section] + +**Include:** +- Sections to add (if missing) +- Sections to update (if present but needs work) +- Content to remove (if incorrect/leakage) +- Structure changes (if reformatting needed) + +### 3. Prepare Change Plan Summary + +**Summary sections:** + +**Changes by Type:** +- **Additions:** {count} sections to add +- **Updates:** {count} sections to update +- **Removals:** {count} items to remove +- **Restructuring:** {yes/no} if format conversion needed + +**Priority Distribution:** +- **Critical:** {count} changes (must fix) +- **High:** {count} changes (important) +- **Medium:** {count} changes (nice to have) +- **Low:** {count} changes (optional) + +**Estimated Effort:** +[Quick/Moderate/Substantial] based on scope and complexity + +### 4. Present Change Plan to User + +Display: + +"**Deep Review Complete - Change Plan** + +**PRD Analysis:** +{Brief summary of PRD current state} + +{If validation report provided:} +**Validation Findings:** +{count} issues identified: {critical} critical, {warning} warnings + +**Your Edit Requirements:** +{summary of what user wants to edit} + +**Proposed Change Plan:** + +**By Section:** +{Present section-by-section breakdown} + +**By Priority:** +- Critical: {count} items +- High: {count} items +- Medium: {count} items + +**Estimated Effort:** {effort level} + +**Questions:** +1. Does this change plan align with what you had in mind? +2. Any sections I should add/remove/reprioritize? +3. Any concerns before I proceed with edits? + +**Review the plan and let me know if you'd like any adjustments.**" + +### 5. Get User Confirmation + +Wait for user to review and provide feedback. + +**If user wants adjustments:** +- Discuss requested changes +- Revise change plan accordingly +- Represent for confirmation + +**If user approves:** +- Note: "Change plan approved. Proceeding to edit step." +- Continue to step 6 + +### 6. Document Approved Plan + +Store approved change plan for next step: + +- **Approved changes:** Section-by-section list +- **Priority order:** Sequence to apply changes +- **User confirmed:** Yes + +Display: "**Change Plan Approved** + +{Brief summary of approved plan} + +**Proceeding to edit step...**" + +Load and execute {nextStepFile} (step-e-03-edit.md) + +### 7. Present MENU OPTIONS (If User Wants Discussion) + +**[A] Advanced Elicitation** - Get additional perspectives on change plan +**[P] Party Mode** - Discuss with team for more ideas +**[C] Continue to Edit** - Proceed with approved plan + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed to edit when user selects 'C' + +#### Menu Handling Logic: + +- IF A: Execute {advancedElicitationTask}, then return to discussion +- IF P: Execute {partyModeWorkflow}, then return to discussion +- IF C: Document approval, then load {nextStepFile} +- IF Any other: discuss, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Validation report findings fully analyzed (if provided) +- Deep PRD review completed systematically +- Change plan built section-by-section +- Changes prioritized by severity/user goals +- User presented with clear plan +- User confirms or adjusts plan +- Approved plan documented for next step + +### ❌ SYSTEM FAILURE: + +- Not analyzing validation report findings (if provided) +- Superficial review instead of deep analysis +- Missing section-by-section breakdown +- Not prioritizing changes +- Proceeding without user approval + +**Master Rule:** Plan before editing. Thorough analysis ensures we make the right changes in the right order. User approval prevents misalignment. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md new file mode 100644 index 00000000..7c26891b --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md @@ -0,0 +1,253 @@ +--- +name: 'step-e-03-edit' +description: 'Edit & Update - Apply changes to PRD following approved change plan' + +# File references (ONLY variables used in this step) +nextStepFile: './step-e-04-complete.md' +prdFile: '{prd_file_path}' +prdPurpose: '{project-root}/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md' +--- + +# Step E-3: Edit & Update + +## STEP GOAL: + +Apply changes to the PRD following the approved change plan from step e-02, including content updates, structure improvements, and format conversion if needed. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 ALWAYS generate content WITH user input/approval +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and PRD Improvement Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring analytical expertise and precise editing skills +- ✅ User brings domain knowledge and approval authority + +### Step-Specific Rules: + +- 🎯 Focus ONLY on implementing approved changes from step e-02 +- 🚫 FORBIDDEN to make changes beyond the approved plan +- 💬 Approach: Methodical, section-by-section execution +- 🚪 This is a middle step - user can request adjustments + +## EXECUTION PROTOCOLS: + +- 🎯 Follow approved change plan systematically +- 💾 Edit PRD content according to plan +- 📖 Update frontmatter as needed +- 🚫 FORBIDDEN to proceed without completion + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, approved change plan from step e-02, prd-purpose standards +- Focus: Implementing changes from approved plan only +- Limits: Don't add changes beyond plan, don't validate yet +- Dependencies: Step e-02 completed - plan approved by user + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Retrieve Approved Change Plan + +From step e-02, retrieve: +- **Approved changes:** Section-by-section list +- **Priority order:** Sequence to apply changes +- **User requirements:** Edit goals from step e-01 + +Display: "**Starting PRD Edits** + +**Change Plan:** {summary} +**Total Changes:** {count} +**Estimated Effort:** {effort level} + +**Proceeding with edits section by section...**" + +### 2. Attempt Sub-Process Edits (For Complex Changes) + +**Try to use Task tool with sub-agent for major sections:** + +"Execute PRD edits for {section_name}: + +**Context:** +- Section to edit: {section_name} +- Current content: {existing content} +- Changes needed: {specific changes from plan} +- BMAD PRD standards: Load from prd-purpose.md + +**Tasks:** +1. Read current PRD section +2. Apply specified changes +3. Ensure BMAD PRD principles compliance: + - High information density (no filler) + - Measurable requirements + - Clear structure + - Proper markdown formatting +4. Return updated section content + +Apply changes and return updated section." + +**Graceful degradation (if no Task tool):** +- Perform edits directly in current context +- Load PRD section, apply changes, save + +### 3. Execute Changes Section-by-Section + +**For each section in approved plan (in priority order):** + +**a) Load current section** +- Read the current PRD section content +- Note what exists + +**b) Apply changes per plan** +- Additions: Create new sections with proper content +- Updates: Modify existing content per plan +- Removals: Remove specified content +- Restructuring: Reformat content to BMAD standard + +**c) Update PRD file** +- Apply changes to PRD +- Save updated PRD +- Verify changes applied correctly + +**Display progress after each section:** +"**Section Updated:** {section_name} +Changes: {brief summary} +{More sections remaining...}" + +### 4. Handle Restructuring (If Needed) + +**If conversion mode is "Full restructuring" or "Both":** + +**For restructuring:** +- Reorganize PRD to BMAD standard structure +- Ensure proper ## Level 2 headers +- Reorder sections logically +- Update PRD frontmatter to match BMAD format + +**Follow BMAD PRD structure:** +1. Executive Summary +2. Success Criteria +3. Product Scope +4. User Journeys +5. Domain Requirements (if applicable) +6. Innovation Analysis (if applicable) +7. Project-Type Requirements +8. Functional Requirements +9. Non-Functional Requirements + +Display: "**PRD Restructured** +BMAD standard structure applied. +{Sections added/reordered}" + +### 5. Update PRD Frontmatter + +**Ensure frontmatter is complete and accurate:** + +```yaml +--- +workflowType: 'prd' +workflow: 'create' # or 'validate' or 'edit' +classification: + domain: '{domain}' + projectType: '{project_type}' + complexity: '{complexity}' +inputDocuments: [list of input documents] +stepsCompleted: ['step-e-01-discovery', 'step-e-02-review', 'step-e-03-edit'] +lastEdited: '{current_date}' +editHistory: + - date: '{current_date}' + changes: '{summary of changes}' +--- +``` + +**Update frontmatter accordingly.** + +### 6. Final Review of Changes + +**Load complete updated PRD** + +**Verify:** +- All approved changes applied correctly +- PRD structure is sound +- No unintended modifications +- Frontmatter is accurate + +**If issues found:** +- Fix them now +- Note corrections made + +**If user wants adjustments:** +- Accept feedback and make adjustments +- Re-verify after adjustments + +### 7. Confirm Completion + +Display: + +"**PRD Edits Complete** + +**Changes Applied:** {count} sections modified +**PRD Updated:** {prd_file_path} + +**Summary of Changes:** +{Brief bullet list of major changes} + +**PRD is ready for:** +- Use in downstream workflows (UX, Architecture) +- Validation (if not yet validated) + +**What would you like to do next?**" + +### 8. Present MENU OPTIONS + +**[V] Run Validation** - Execute full validation workflow (steps-v/step-v-01-discovery.md) +**[S] Summary Only** - End with summary of changes (no validation) +**[A] Adjust** - Make additional edits +**[X] Exit** - Exit edit workflow + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed based on user selection + +#### Menu Handling Logic: + +- IF V (Validate): Display "Starting validation workflow..." then load and execute steps-v/step-v-01-discovery.md +- IF S (Summary): Present edit summary and exit +- IF A (Adjust): Accept additional requirements, loop back to editing +- IF X (Exit): Display summary and exit + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All approved changes from step e-02 applied correctly +- Changes executed in planned priority order +- Restructuring completed (if needed) +- Frontmatter updated accurately +- Final verification confirms changes +- User can proceed to validation or exit with summary +- Option to run validation seamlessly integrates edit and validate modes + +### ❌ SYSTEM FAILURE: + +- Making changes beyond approved plan +- Not following priority order +- Missing restructuring (if conversion mode) +- Not updating frontmatter +- No final verification +- Not saving updated PRD + +**Master Rule:** Execute the plan exactly as approved. PRD is now ready for validation or downstream use. Validation integration ensures quality. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md new file mode 100644 index 00000000..780f2694 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md @@ -0,0 +1,168 @@ +--- +name: 'step-e-04-complete' +description: 'Complete & Validate - Present options for next steps including full validation' + +# File references (ONLY variables used in this step) +prdFile: '{prd_file_path}' +validationWorkflow: './steps-v/step-v-01-discovery.md' +--- + +# Step E-4: Complete & Validate + +## STEP GOAL: + +Present summary of completed edits and offer next steps including seamless integration with validation workflow. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 ALWAYS generate content WITH user input/approval +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and PRD Improvement Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring synthesis and summary expertise +- ✅ User chooses next actions + +### Step-Specific Rules: + +- 🎯 Focus ONLY on presenting summary and options +- 🚫 FORBIDDEN to make additional changes +- 💬 Approach: Clear, concise summary with actionable options +- 🚪 This is the final edit step - no more edits + +## EXECUTION PROTOCOLS: + +- 🎯 Compile summary of all changes made +- 🎯 Present options clearly with expected outcomes +- 📖 Route to validation if user chooses +- 🚫 FORBIDDEN to proceed without user selection + +## CONTEXT BOUNDARIES: + +- Available context: Updated PRD file, edit history from step e-03 +- Focus: Summary and options only (no more editing) +- Limits: Don't make changes, just present options +- Dependencies: Step e-03 completed - all edits applied + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Compile Edit Summary + +From step e-03 change execution, compile: + +**Changes Made:** +- Sections added: {list with names} +- Sections updated: {list with names} +- Content removed: {list} +- Structure changes: {description} + +**Edit Details:** +- Total sections affected: {count} +- Mode: {restructure/targeted/both} +- Priority addressed: {Critical/High/Medium/Low} + +**PRD Status:** +- Format: {BMAD Standard / BMAD Variant / Legacy (converted)} +- Completeness: {assessment} +- Ready for: {downstream use cases} + +### 2. Present Completion Summary + +Display: + +"**✓ PRD Edit Complete** + +**Updated PRD:** {prd_file_path} + +**Changes Summary:** +{Present bulleted list of major changes} + +**Edit Mode:** {mode} +**Sections Modified:** {count} + +**PRD Format:** {format} + +**PRD is now ready for:** +- Downstream workflows (UX Design, Architecture) +- Validation to ensure quality +- Production use + +**What would you like to do next?**" + +### 3. Present MENU OPTIONS + +Display: + +**[V] Run Full Validation** - Execute complete validation workflow (steps-v) to verify PRD quality +**[E] Edit More** - Make additional edits to the PRD +**[S] Summary** - End with detailed summary of changes +**[X] Exit** - Exit edit workflow + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed based on user selection + +#### Menu Handling Logic: + +- **IF V (Run Full Validation):** + - Display: "**Starting Validation Workflow**" + - Display: "This will run all 13 validation checks on the updated PRD." + - Display: "Preparing to validate: {prd_file_path}" + - Display: "**Proceeding to validation...**" + - Load, read entire file, then execute {validationWorkflow} (steps-v/step-v-01-discovery.md) + - Note: This hands off to the validation workflow which will run its complete 13-step process + +- **IF E (Edit More):** + - Display: "**Additional Edits**" + - Ask: "What additional edits would you like to make?" + - Accept input, then display: "**Returning to edit step...**" + - Load and execute step-e-03-edit.md again + +- **IF S (Summary):** + - Display detailed summary including: + - Complete list of all changes made + - Before/after comparison (key improvements) + - Recommendations for next steps + - Display: "**Edit Workflow Complete**" + - Exit + +- **IF X (Exit):** + - Display summary + - Display: "**Edit Workflow Complete**" + - Exit + +- **IF Any other:** Help user, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Complete edit summary compiled accurately +- All changes clearly documented +- Options presented with clear expectations +- Validation option seamlessly integrates with steps-v workflow +- User can validate, edit more, or exit +- Clean handoff to validation workflow (if chosen) +- Edit workflow completes properly + +### ❌ SYSTEM FAILURE: + +- Missing changes in summary +- Not offering validation option +- Not documenting completion properly +- No clear handoff to validation workflow + +**Master Rule:** Edit workflow seamlessly integrates with validation. User can edit → validate → edit again → validate again in iterative improvement cycle. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md new file mode 100644 index 00000000..0d198495 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md @@ -0,0 +1,218 @@ +--- +name: 'step-v-01-discovery' +description: 'Document Discovery & Confirmation - Handle fresh context validation, confirm PRD path, discover input documents' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-02-format-detection.md' +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' +prdPurpose: '../data/prd-purpose.md' +--- + +# Step 1: Document Discovery & Confirmation + +## STEP GOAL: + +Handle fresh context validation by confirming PRD path, discovering and loading input documents from frontmatter, and initializing the validation report. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring systematic validation expertise and analytical rigor +- ✅ User brings domain knowledge and specific PRD context + +### Step-Specific Rules: + +- 🎯 Focus ONLY on discovering PRD and input documents, not validating yet +- 🚫 FORBIDDEN to perform any validation checks in this step +- 💬 Approach: Systematic discovery with clear reporting to user +- 🚪 This is the setup step - get everything ready for validation + +## EXECUTION PROTOCOLS: + +- 🎯 Discover and confirm PRD to validate +- 💾 Load PRD and all input documents from frontmatter +- 📖 Initialize validation report next to PRD +- 🚫 FORBIDDEN to load next step until user confirms setup + +## CONTEXT BOUNDARIES: + +- Available context: PRD path (user-specified or discovered), workflow configuration +- Focus: Document discovery and setup only +- Limits: Don't perform validation, don't skip discovery +- Dependencies: Configuration loaded from PRD workflow.md initialization + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Load PRD Purpose and Standards + +Load and read the complete file at: +`{prdPurpose}` + +This file contains the BMAD PRD philosophy, standards, and validation criteria that will guide all validation checks. Internalize this understanding - it defines what makes a great BMAD PRD. + +### 2. Discover PRD to Validate + +**If PRD path provided as invocation parameter:** +- Use provided path + +**If no PRD path provided:** +"**PRD Validation Workflow** + +Which PRD would you like to validate? + +Please provide the path to the PRD file you want to validate." + +**Wait for user to provide PRD path.** + +### 3. Validate PRD Exists and Load + +Once PRD path is provided: + +- Check if PRD file exists at specified path +- If not found: "I cannot find a PRD at that path. Please check the path and try again." +- If found: Load the complete PRD file including frontmatter + +### 4. Extract Frontmatter and Input Documents + +From the loaded PRD frontmatter, extract: + +- `inputDocuments: []` array (if present) +- Any other relevant metadata (classification, date, etc.) + +**If no inputDocuments array exists:** +Note this and proceed with PRD-only validation + +### 5. Load Input Documents + +For each document listed in `inputDocuments`: + +- Attempt to load the document +- Track successfully loaded documents +- Note any documents that fail to load + +**Build list of loaded input documents:** +- Product Brief (if present) +- Research documents (if present) +- Other reference materials (if present) + +### 6. Ask About Additional Reference Documents + +"**I've loaded the following documents from your PRD frontmatter:** + +{list loaded documents with file names} + +**Are there any additional reference documents you'd like me to include in this validation?** + +These could include: +- Additional research or context documents +- Project documentation not tracked in frontmatter +- Standards or compliance documents +- Competitive analysis or benchmarks + +Please provide paths to any additional documents, or type 'none' to proceed." + +**Load any additional documents provided by user.** + +### 7. Initialize Validation Report + +Create validation report at: `{validationReportPath}` + +**Initialize with frontmatter:** +```yaml +--- +validationTarget: '{prd_path}' +validationDate: '{current_date}' +inputDocuments: [list of all loaded documents] +validationStepsCompleted: [] +validationStatus: IN_PROGRESS +--- +``` + +**Initial content:** +```markdown +# PRD Validation Report + +**PRD Being Validated:** {prd_path} +**Validation Date:** {current_date} + +## Input Documents + +{list all documents loaded for validation} + +## Validation Findings + +[Findings will be appended as validation progresses] +``` + +### 8. Present Discovery Summary + +"**Setup Complete!** + +**PRD to Validate:** {prd_path} + +**Input Documents Loaded:** +- PRD: {prd_name} ✓ +- Product Brief: {count} {if count > 0}✓{else}(none found){/if} +- Research: {count} {if count > 0}✓{else}(none found){/if} +- Additional References: {count} {if count > 0}✓{else}(none){/if} + +**Validation Report:** {validationReportPath} + +**Ready to begin validation.**" + +### 9. Present MENU OPTIONS + +Display: **Select an Option:** [A] Advanced Elicitation [P] Party Mode [C] Continue to Format Detection + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input after presenting menu +- ONLY proceed to next step when user selects 'C' +- User can ask questions or add more documents - always respond and redisplay menu + +#### Menu Handling Logic: + +- IF A: Execute {advancedElicitationTask}, and when finished redisplay the menu +- IF P: Execute {partyModeWorkflow}, and when finished redisplay the menu +- IF C: Load, read entire file, then execute {nextStepFile} to begin format detection +- IF user provides additional document: Load it, update report, redisplay summary +- IF Any other: help user, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- PRD path discovered and confirmed +- PRD file exists and loads successfully +- All input documents from frontmatter loaded +- Additional reference documents (if any) loaded +- Validation report initialized next to PRD +- User clearly informed of setup status +- Menu presented and user input handled correctly + +### ❌ SYSTEM FAILURE: + +- Proceeding with non-existent PRD file +- Not loading input documents from frontmatter +- Creating validation report in wrong location +- Proceeding without user confirming setup +- Not handling missing input documents gracefully + +**Master Rule:** Complete discovery and setup BEFORE validation. This step ensures everything is in place for systematic validation checks. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md new file mode 100644 index 00000000..97566603 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md @@ -0,0 +1,191 @@ +--- +name: 'step-v-02-format-detection' +description: 'Format Detection & Structure Analysis - Classify PRD format and route appropriately' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-03-density-validation.md' +altStepFile: './step-v-02b-parity-check.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 2: Format Detection & Structure Analysis + +## STEP GOAL: + +Detect if PRD follows BMAD format and route appropriately - classify as BMAD Standard / BMAD Variant / Non-Standard, with optional parity check for non-standard formats. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring systematic validation expertise and pattern recognition +- ✅ User brings domain knowledge and PRD context + +### Step-Specific Rules: + +- 🎯 Focus ONLY on detecting format and classifying structure +- 🚫 FORBIDDEN to perform other validation checks in this step +- 💬 Approach: Analytical and systematic, clear reporting of findings +- 🚪 This is a branch step - may route to parity check for non-standard PRDs + +## EXECUTION PROTOCOLS: + +- 🎯 Analyze PRD structure systematically +- 💾 Append format findings to validation report +- 📖 Route appropriately based on format classification +- 🚫 FORBIDDEN to skip format detection or proceed without classification + +## CONTEXT BOUNDARIES: + +- Available context: PRD file loaded in step 1, validation report initialized +- Focus: Format detection and classification only +- Limits: Don't perform other validation, don't skip classification +- Dependencies: Step 1 completed - PRD loaded and report initialized + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Extract PRD Structure + +Load the complete PRD file and extract: + +**All Level 2 (##) headers:** +- Scan through entire PRD document +- Extract all ## section headers +- List them in order + +**PRD frontmatter:** +- Extract classification.domain if present +- Extract classification.projectType if present +- Note any other relevant metadata + +### 2. Check for BMAD PRD Core Sections + +Check if the PRD contains the following BMAD PRD core sections: + +1. **Executive Summary** (or variations: ## Executive Summary, ## Overview, ## Introduction) +2. **Success Criteria** (or: ## Success Criteria, ## Goals, ## Objectives) +3. **Product Scope** (or: ## Product Scope, ## Scope, ## In Scope, ## Out of Scope) +4. **User Journeys** (or: ## User Journeys, ## User Stories, ## User Flows) +5. **Functional Requirements** (or: ## Functional Requirements, ## Features, ## Capabilities) +6. **Non-Functional Requirements** (or: ## Non-Functional Requirements, ## NFRs, ## Quality Attributes) + +**Count matches:** +- How many of these 6 core sections are present? +- Which specific sections are present? +- Which are missing? + +### 3. Classify PRD Format + +Based on core section count, classify: + +**BMAD Standard:** +- 5-6 core sections present +- Follows BMAD PRD structure closely + +**BMAD Variant:** +- 3-4 core sections present +- Generally follows BMAD patterns but may have structural differences +- Missing some sections but recognizable as BMAD-style + +**Non-Standard:** +- Fewer than 3 core sections present +- Does not follow BMAD PRD structure +- May be completely custom format, legacy format, or from another framework + +### 4. Report Format Findings to Validation Report + +Append to validation report: + +```markdown +## Format Detection + +**PRD Structure:** +[List all ## Level 2 headers found] + +**BMAD Core Sections Present:** +- Executive Summary: [Present/Missing] +- Success Criteria: [Present/Missing] +- Product Scope: [Present/Missing] +- User Journeys: [Present/Missing] +- Functional Requirements: [Present/Missing] +- Non-Functional Requirements: [Present/Missing] + +**Format Classification:** [BMAD Standard / BMAD Variant / Non-Standard] +**Core Sections Present:** [count]/6 +``` + +### 5. Route Based on Format Classification + +**IF format is BMAD Standard or BMAD Variant:** + +Display: "**Format Detected:** {classification} + +Proceeding to systematic validation checks..." + +Immediately load and execute {nextStepFile} (step-v-03-density-validation.md) + +**IF format is Non-Standard (< 3 core sections):** + +Display: "**Format Detected:** Non-Standard PRD + +This PRD does not follow BMAD standard structure (only {count}/6 core sections present). + +You have options:" + +Present MENU OPTIONS below for user selection + +### 6. Present MENU OPTIONS (Non-Standard PRDs Only) + +**[A] Parity Check** - Analyze gaps and estimate effort to reach BMAD PRD parity +**[B] Validate As-Is** - Proceed with validation using current structure +**[C] Exit** - Exit validation and review format findings + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed based on user selection + +#### Menu Handling Logic: + +- IF A (Parity Check): Load, read entire file, then execute {altStepFile} (step-v-02b-parity-check.md) +- IF B (Validate As-Is): Display "Proceeding with validation..." then load, read entire file, then execute {nextStepFile} +- IF C (Exit): Display format findings summary and exit validation +- IF Any other: help user respond, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All ## Level 2 headers extracted successfully +- BMAD core sections checked systematically +- Format classified correctly based on section count +- Findings reported to validation report +- BMAD Standard/Variant PRDs proceed directly to next validation step +- Non-Standard PRDs pause and present options to user +- User can choose parity check, validate as-is, or exit + +### ❌ SYSTEM FAILURE: + +- Not extracting all headers before classification +- Incorrect format classification +- Not reporting findings to validation report +- Not pausing for non-standard PRDs +- Proceeding without user decision for non-standard formats + +**Master Rule:** Format detection determines validation path. Non-standard PRDs require user choice before proceeding. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md new file mode 100644 index 00000000..3c1cc273 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md @@ -0,0 +1,209 @@ +--- +name: 'step-v-02b-parity-check' +description: 'Document Parity Check - Analyze non-standard PRD and identify gaps to achieve BMAD PRD parity' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-03-density-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 2B: Document Parity Check + +## STEP GOAL: + +Analyze non-standard PRD and identify gaps to achieve BMAD PRD parity, presenting user with options for how to proceed. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring BMAD PRD standards expertise and gap analysis +- ✅ User brings domain knowledge and PRD context + +### Step-Specific Rules: + +- 🎯 Focus ONLY on analyzing gaps and estimating parity effort +- 🚫 FORBIDDEN to perform other validation checks in this step +- 💬 Approach: Systematic gap analysis with clear recommendations +- 🚪 This is an optional branch step - user chooses next action + +## EXECUTION PROTOCOLS: + +- 🎯 Analyze each BMAD PRD section for gaps +- 💾 Append parity analysis to validation report +- 📖 Present options and await user decision +- 🚫 FORBIDDEN to proceed without user selection + +## CONTEXT BOUNDARIES: + +- Available context: Non-standard PRD from step 2, validation report in progress +- Focus: Parity analysis only - what's missing, what's needed +- Limits: Don't perform validation checks, don't auto-proceed +- Dependencies: Step 2 classified PRD as non-standard and user chose parity check + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Analyze Each BMAD PRD Section + +For each of the 6 BMAD PRD core sections, analyze: + +**Executive Summary:** +- Does PRD have vision/overview? +- Is problem statement clear? +- Are target users identified? +- Gap: [What's missing or incomplete] + +**Success Criteria:** +- Are measurable goals defined? +- Is success clearly defined? +- Gap: [What's missing or incomplete] + +**Product Scope:** +- Is scope clearly defined? +- Are in-scope items listed? +- Are out-of-scope items listed? +- Gap: [What's missing or incomplete] + +**User Journeys:** +- Are user types/personas identified? +- Are user flows documented? +- Gap: [What's missing or incomplete] + +**Functional Requirements:** +- Are features/capabilities listed? +- Are requirements structured? +- Gap: [What's missing or incomplete] + +**Non-Functional Requirements:** +- Are quality attributes defined? +- Are performance/security/etc. requirements documented? +- Gap: [What's missing or incomplete] + +### 2. Estimate Effort to Reach Parity + +For each missing or incomplete section, estimate: + +**Effort Level:** +- Minimal - Section exists but needs minor enhancements +- Moderate - Section missing but content exists elsewhere in PRD +- Significant - Section missing, requires new content creation + +**Total Parity Effort:** +- Based on individual section estimates +- Classify overall: Quick / Moderate / Substantial effort + +### 3. Report Parity Analysis to Validation Report + +Append to validation report: + +```markdown +## Parity Analysis (Non-Standard PRD) + +### Section-by-Section Gap Analysis + +**Executive Summary:** +- Status: [Present/Missing/Incomplete] +- Gap: [specific gap description] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Success Criteria:** +- Status: [Present/Missing/Incomplete] +- Gap: [specific gap description] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Product Scope:** +- Status: [Present/Missing/Incomplete] +- Gap: [specific gap description] +- Effort to Complete: [Minimal/Moderate/Significant] + +**User Journeys:** +- Status: [Present/Missing/Incomplete] +- Gap: [specific gap description] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Functional Requirements:** +- Status: [Present/Missing/Incomplete] +- Gap: [specific gap description] +- Effort to Complete: [Minimal/Moderate/Significant] + +**Non-Functional Requirements:** +- Status: [Present/Missing/Incomplete] +- Gap: [specific gap description] +- Effort to Complete: [Minimal/Moderate/Significant] + +### Overall Parity Assessment + +**Overall Effort to Reach BMAD Standard:** [Quick/Moderate/Substantial] +**Recommendation:** [Brief recommendation based on analysis] +``` + +### 4. Present Parity Analysis and Options + +Display: + +"**Parity Analysis Complete** + +Your PRD is missing {count} of 6 core BMAD PRD sections. The overall effort to reach BMAD standard is: **{effort level}** + +**Quick Summary:** +[2-3 sentence summary of key gaps] + +**Recommendation:** +{recommendation from analysis} + +**How would you like to proceed?**" + +### 5. Present MENU OPTIONS + +**[C] Continue Validation** - Proceed with validation using current structure +**[E] Exit & Review** - Exit validation and review parity report +**[S] Save & Exit** - Save parity report and exit + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input +- Only proceed based on user selection + +#### Menu Handling Logic: + +- IF C (Continue): Display "Proceeding with validation..." then load, read entire file, then execute {nextStepFile} +- IF E (Exit): Display parity summary and exit validation +- IF S (Save): Confirm saved, display summary, exit +- IF Any other: help user respond, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All 6 BMAD PRD sections analyzed for gaps +- Effort estimates provided for each gap +- Overall parity effort assessed correctly +- Parity analysis reported to validation report +- Clear summary presented to user +- User can choose to continue validation, exit, or save report + +### ❌ SYSTEM FAILURE: + +- Not analyzing all 6 sections systematically +- Missing effort estimates +- Not reporting parity analysis to validation report +- Auto-proceeding without user decision +- Unclear recommendations + +**Master Rule:** Parity check informs user of gaps and effort, but user decides whether to proceed with validation or address gaps first. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md new file mode 100644 index 00000000..b7d4f330 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md @@ -0,0 +1,174 @@ +--- +name: 'step-v-03-density-validation' +description: 'Information Density Check - Scan for anti-patterns that violate information density principles' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-04-brief-coverage-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 3: Information Density Validation + +## STEP GOAL: + +Validate PRD meets BMAD information density standards by scanning for conversational filler, wordy phrases, and redundant expressions that violate conciseness principles. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring analytical rigor and attention to detail +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on information density anti-patterns +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Systematic scanning and categorization +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Scan PRD for density anti-patterns systematically +- 💾 Append density findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, validation report with format findings +- Focus: Information density validation only +- Limits: Don't validate other aspects, don't pause for user input +- Dependencies: Step 2 completed - format classification done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform information density validation on this PRD: + +1. Load the PRD file +2. Scan for the following anti-patterns: + - Conversational filler phrases (examples: 'The system will allow users to...', 'It is important to note that...', 'In order to') + - Wordy phrases (examples: 'Due to the fact that', 'In the event of', 'For the purpose of') + - Redundant phrases (examples: 'Future plans', 'Absolutely essential', 'Past history') +3. Count violations by category with line numbers +4. Classify severity: Critical (>10 violations), Warning (5-10), Pass (<5) + +Return structured findings with counts and examples." + +### 2. Graceful Degradation (if Task tool unavailable) + +If Task tool unavailable, perform analysis directly: + +**Scan for conversational filler patterns:** +- "The system will allow users to..." +- "It is important to note that..." +- "In order to" +- "For the purpose of" +- "With regard to" +- Count occurrences and note line numbers + +**Scan for wordy phrases:** +- "Due to the fact that" (use "because") +- "In the event of" (use "if") +- "At this point in time" (use "now") +- "In a manner that" (use "how") +- Count occurrences and note line numbers + +**Scan for redundant phrases:** +- "Future plans" (just "plans") +- "Past history" (just "history") +- "Absolutely essential" (just "essential") +- "Completely finish" (just "finish") +- Count occurrences and note line numbers + +### 3. Classify Severity + +**Calculate total violations:** +- Conversational filler count +- Wordy phrases count +- Redundant phrases count +- Total = sum of all categories + +**Determine severity:** +- **Critical:** Total > 10 violations +- **Warning:** Total 5-10 violations +- **Pass:** Total < 5 violations + +### 4. Report Density Findings to Validation Report + +Append to validation report: + +```markdown +## Information Density Validation + +**Anti-Pattern Violations:** + +**Conversational Filler:** {count} occurrences +[If count > 0, list examples with line numbers] + +**Wordy Phrases:** {count} occurrences +[If count > 0, list examples with line numbers] + +**Redundant Phrases:** {count} occurrences +[If count > 0, list examples with line numbers] + +**Total Violations:** {total} + +**Severity Assessment:** [Critical/Warning/Pass] + +**Recommendation:** +[If Critical] "PRD requires significant revision to improve information density. Every sentence should carry weight without filler." +[If Warning] "PRD would benefit from reducing wordiness and eliminating filler phrases." +[If Pass] "PRD demonstrates good information density with minimal violations." +``` + +### 5. Display Progress and Auto-Proceed + +Display: "**Information Density Validation Complete** + +Severity: {Critical/Warning/Pass} + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-04-brief-coverage-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- PRD scanned for all three anti-pattern categories +- Violations counted with line numbers +- Severity classified correctly +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not scanning all anti-pattern categories +- Missing severity classification +- Not reporting findings to validation report +- Pausing for user input (should auto-proceed) +- Not attempting subprocess architecture + +**Master Rule:** Information density validation runs autonomously. Scan, classify, report, auto-proceed. No user interaction needed. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md new file mode 100644 index 00000000..909114fe --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md @@ -0,0 +1,214 @@ +--- +name: 'step-v-04-brief-coverage-validation' +description: 'Product Brief Coverage Check - Validate PRD covers all content from Product Brief (if used as input)' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-05-measurability-validation.md' +prdFile: '{prd_file_path}' +productBrief: '{product_brief_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 4: Product Brief Coverage Validation + +## STEP GOAL: + +Validate that PRD covers all content from Product Brief (if brief was used as input), mapping brief content to PRD sections and identifying gaps. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring analytical rigor and traceability expertise +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on Product Brief coverage (conditional on brief existence) +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Systematic mapping and gap analysis +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Check if Product Brief exists in input documents +- 💬 If no brief: Skip this check and report "N/A - No Product Brief" +- 🎯 If brief exists: Map brief content to PRD sections +- 💾 Append coverage findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, input documents from step 1, validation report +- Focus: Product Brief coverage only (conditional) +- Limits: Don't validate other aspects, conditional execution +- Dependencies: Step 1 completed - input documents loaded + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Check for Product Brief + +Check if Product Brief was loaded in step 1's inputDocuments: + +**IF no Product Brief found:** +Append to validation report: +```markdown +## Product Brief Coverage + +**Status:** N/A - No Product Brief was provided as input +``` + +Display: "**Product Brief Coverage: Skipped** (No Product Brief provided) + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} + +**IF Product Brief exists:** Continue to step 2 below + +### 2. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform Product Brief coverage validation: + +1. Load the Product Brief +2. Extract key content: + - Vision statement + - Target users/personas + - Problem statement + - Key features + - Goals/objectives + - Differentiators + - Constraints +3. For each item, search PRD for corresponding coverage +4. Classify coverage: Fully Covered / Partially Covered / Not Found / Intentionally Excluded +5. Note any gaps with severity: Critical / Moderate / Informational + +Return structured coverage map with classifications." + +### 3. Graceful Degradation (if Task tool unavailable) + +If Task tool unavailable, perform analysis directly: + +**Extract from Product Brief:** +- Vision: What is this product? +- Users: Who is it for? +- Problem: What problem does it solve? +- Features: What are the key capabilities? +- Goals: What are the success criteria? +- Differentiators: What makes it unique? + +**For each item, search PRD:** +- Scan Executive Summary for vision +- Check User Journeys or user personas +- Look for problem statement +- Review Functional Requirements for features +- Check Success Criteria section +- Search for differentiators + +**Classify coverage:** +- **Fully Covered:** Content present and complete +- **Partially Covered:** Content present but incomplete +- **Not Found:** Content missing from PRD +- **Intentionally Excluded:** Content explicitly out of scope + +### 4. Assess Coverage and Severity + +**For each gap (Partially Covered or Not Found):** +- Is this Critical? (Core vision, primary users, main features) +- Is this Moderate? (Secondary features, some goals) +- Is this Informational? (Nice-to-have features, minor details) + +**Note:** Some exclusions may be intentional (valid scoping decisions) + +### 5. Report Coverage Findings to Validation Report + +Append to validation report: + +```markdown +## Product Brief Coverage + +**Product Brief:** {brief_file_name} + +### Coverage Map + +**Vision Statement:** [Fully/Partially/Not Found/Intentionally Excluded] +[If gap: Note severity and specific missing content] + +**Target Users:** [Fully/Partially/Not Found/Intentionally Excluded] +[If gap: Note severity and specific missing content] + +**Problem Statement:** [Fully/Partially/Not Found/Intentionally Excluded] +[If gap: Note severity and specific missing content] + +**Key Features:** [Fully/Partially/Not Found/Intentionally Excluded] +[If gap: List specific features with severity] + +**Goals/Objectives:** [Fully/Partially/Not Found/Intentionally Excluded] +[If gap: Note severity and specific missing content] + +**Differentiators:** [Fully/Partially/Not Found/Intentionally Excluded] +[If gap: Note severity and specific missing content] + +### Coverage Summary + +**Overall Coverage:** [percentage or qualitative assessment] +**Critical Gaps:** [count] [list if any] +**Moderate Gaps:** [count] [list if any] +**Informational Gaps:** [count] [list if any] + +**Recommendation:** +[If critical gaps exist] "PRD should be revised to cover critical Product Brief content." +[If moderate gaps] "Consider addressing moderate gaps for complete coverage." +[If minimal gaps] "PRD provides good coverage of Product Brief content." +``` + +### 6. Display Progress and Auto-Proceed + +Display: "**Product Brief Coverage Validation Complete** + +Overall Coverage: {assessment} + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-05-measurability-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Checked for Product Brief existence correctly +- If no brief: Reported "N/A" and skipped gracefully +- If brief exists: Mapped all key brief content to PRD sections +- Coverage classified appropriately (Fully/Partially/Not Found/Intentionally Excluded) +- Severity assessed for gaps (Critical/Moderate/Informational) +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not checking for brief existence before attempting validation +- If brief exists: not mapping all key content areas +- Missing coverage classifications +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** Product Brief coverage is conditional - skip if no brief, validate thoroughly if brief exists. Always auto-proceed. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md new file mode 100644 index 00000000..18442e8a --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md @@ -0,0 +1,228 @@ +--- +name: 'step-v-05-measurability-validation' +description: 'Measurability Validation - Validate that all requirements (FRs and NFRs) are measurable and testable' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-06-traceability-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 5: Measurability Validation + +## STEP GOAL: + +Validate that all Functional Requirements (FRs) and Non-Functional Requirements (NFRs) are measurable, testable, and follow proper format without implementation details. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring analytical rigor and requirements engineering expertise +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on FR and NFR measurability +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Systematic requirement-by-requirement analysis +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Extract all FRs and NFRs from PRD +- 💾 Validate each for measurability and format +- 📖 Append findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, validation report +- Focus: FR and NFR measurability only +- Limits: Don't validate other aspects, don't pause for user input +- Dependencies: Steps 2-4 completed - initial validation checks done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform measurability validation on this PRD: + +**Functional Requirements (FRs):** +1. Extract all FRs from Functional Requirements section +2. Check each FR for: + - '[Actor] can [capability]' format compliance + - No subjective adjectives (easy, fast, simple, intuitive, etc.) + - No vague quantifiers (multiple, several, some, many, etc.) + - No implementation details (technology names, library names, data structures unless capability-relevant) +3. Document violations with line numbers + +**Non-Functional Requirements (NFRs):** +1. Extract all NFRs from Non-Functional Requirements section +2. Check each NFR for: + - Specific metrics with measurement methods + - Template compliance (criterion, metric, measurement method, context) + - Context included (why this matters, who it affects) +3. Document violations with line numbers + +Return structured findings with violation counts and examples." + +### 2. Graceful Degradation (if Task tool unavailable) + +If Task tool unavailable, perform analysis directly: + +**Functional Requirements Analysis:** + +Extract all FRs and check each for: + +**Format compliance:** +- Does it follow "[Actor] can [capability]" pattern? +- Is actor clearly defined? +- Is capability actionable and testable? + +**No subjective adjectives:** +- Scan for: easy, fast, simple, intuitive, user-friendly, responsive, quick, efficient (without metrics) +- Note line numbers + +**No vague quantifiers:** +- Scan for: multiple, several, some, many, few, various, number of +- Note line numbers + +**No implementation details:** +- Scan for: React, Vue, Angular, PostgreSQL, MongoDB, AWS, Docker, Kubernetes, Redux, etc. +- Unless capability-relevant (e.g., "API consumers can access...") +- Note line numbers + +**Non-Functional Requirements Analysis:** + +Extract all NFRs and check each for: + +**Specific metrics:** +- Is there a measurable criterion? (e.g., "response time < 200ms", not "fast response") +- Can this be measured or tested? + +**Template compliance:** +- Criterion defined? +- Metric specified? +- Measurement method included? +- Context provided? + +### 3. Tally Violations + +**FR Violations:** +- Format violations: count +- Subjective adjectives: count +- Vague quantifiers: count +- Implementation leakage: count +- Total FR violations: sum + +**NFR Violations:** +- Missing metrics: count +- Incomplete template: count +- Missing context: count +- Total NFR violations: sum + +**Total violations:** FR violations + NFR violations + +### 4. Report Measurability Findings to Validation Report + +Append to validation report: + +```markdown +## Measurability Validation + +### Functional Requirements + +**Total FRs Analyzed:** {count} + +**Format Violations:** {count} +[If violations exist, list examples with line numbers] + +**Subjective Adjectives Found:** {count} +[If found, list examples with line numbers] + +**Vague Quantifiers Found:** {count} +[If found, list examples with line numbers] + +**Implementation Leakage:** {count} +[If found, list examples with line numbers] + +**FR Violations Total:** {total} + +### Non-Functional Requirements + +**Total NFRs Analyzed:** {count} + +**Missing Metrics:** {count} +[If missing, list examples with line numbers] + +**Incomplete Template:** {count} +[If incomplete, list examples with line numbers] + +**Missing Context:** {count} +[If missing, list examples with line numbers] + +**NFR Violations Total:** {total} + +### Overall Assessment + +**Total Requirements:** {FRs + NFRs} +**Total Violations:** {FR violations + NFR violations} + +**Severity:** [Critical if >10 violations, Warning if 5-10, Pass if <5] + +**Recommendation:** +[If Critical] "Many requirements are not measurable or testable. Requirements must be revised to be testable for downstream work." +[If Warning] "Some requirements need refinement for measurability. Focus on violating requirements above." +[If Pass] "Requirements demonstrate good measurability with minimal issues." +``` + +### 5. Display Progress and Auto-Proceed + +Display: "**Measurability Validation Complete** + +Total Violations: {count} ({severity}) + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-06-traceability-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All FRs extracted and analyzed for measurability +- All NFRs extracted and analyzed for measurability +- Violations documented with line numbers +- Severity assessed correctly +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not analyzing all FRs and NFRs +- Missing line numbers for violations +- Not reporting findings to validation report +- Not assessing severity +- Not auto-proceeding + +**Master Rule:** Requirements must be testable to be useful. Validate every requirement for measurability, document violations, auto-proceed. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md new file mode 100644 index 00000000..2a2dcc76 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md @@ -0,0 +1,217 @@ +--- +name: 'step-v-06-traceability-validation' +description: 'Traceability Validation - Validate the traceability chain from vision → success → journeys → FRs is intact' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-07-implementation-leakage-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 6: Traceability Validation + +## STEP GOAL: + +Validate the traceability chain from Executive Summary → Success Criteria → User Journeys → Functional Requirements is intact, ensuring every requirement traces back to a user need or business objective. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring analytical rigor and traceability matrix expertise +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on traceability chain validation +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Systematic chain validation and orphan detection +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Build and validate traceability matrix +- 💾 Identify broken chains and orphan requirements +- 📖 Append findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, validation report +- Focus: Traceability chain validation only +- Limits: Don't validate other aspects, don't pause for user input +- Dependencies: Steps 2-5 completed - initial validations done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform traceability validation on this PRD: + +1. Extract content from Executive Summary (vision, goals) +2. Extract Success Criteria +3. Extract User Journeys (user types, flows, outcomes) +4. Extract Functional Requirements (FRs) +5. Extract Product Scope (in-scope items) + +**Validate chains:** +- Executive Summary → Success Criteria: Does vision align with defined success? +- Success Criteria → User Journeys: Are success criteria supported by user journeys? +- User Journeys → Functional Requirements: Does each FR trace back to a user journey? +- Scope → FRs: Do MVP scope FRs align with in-scope items? + +**Identify orphans:** +- FRs not traceable to any user journey or business objective +- Success criteria not supported by user journeys +- User journeys without supporting FRs + +Build traceability matrix and identify broken chains and orphan FRs. + +Return structured findings with chain status and orphan list." + +### 2. Graceful Degradation (if Task tool unavailable) + +If Task tool unavailable, perform analysis directly: + +**Step 1: Extract key elements** +- Executive Summary: Note vision, goals, objectives +- Success Criteria: List all criteria +- User Journeys: List user types and their flows +- Functional Requirements: List all FRs +- Product Scope: List in-scope items + +**Step 2: Validate Executive Summary → Success Criteria** +- Does Executive Summary mention the success dimensions? +- Are Success Criteria aligned with vision? +- Note any misalignment + +**Step 3: Validate Success Criteria → User Journeys** +- For each success criterion, is there a user journey that achieves it? +- Note success criteria without supporting journeys + +**Step 4: Validate User Journeys → FRs** +- For each user journey/flow, are there FRs that enable it? +- List FRs with no clear user journey origin +- Note orphan FRs (requirements without traceable source) + +**Step 5: Validate Scope → FR Alignment** +- Does MVP scope align with essential FRs? +- Are in-scope items supported by FRs? +- Note misalignments + +**Step 6: Build traceability matrix** +- Map each FR to its source (journey or business objective) +- Note orphan FRs +- Identify broken chains + +### 3. Tally Traceability Issues + +**Broken chains:** +- Executive Summary → Success Criteria gaps: count +- Success Criteria → User Journeys gaps: count +- User Journeys → FRs gaps: count +- Scope → FR misalignments: count + +**Orphan elements:** +- Orphan FRs (no traceable source): count +- Unsupported success criteria: count +- User journeys without FRs: count + +**Total issues:** Sum of all broken chains and orphans + +### 4. Report Traceability Findings to Validation Report + +Append to validation report: + +```markdown +## Traceability Validation + +### Chain Validation + +**Executive Summary → Success Criteria:** [Intact/Gaps Identified] +{If gaps: List specific misalignments} + +**Success Criteria → User Journeys:** [Intact/Gaps Identified] +{If gaps: List unsupported success criteria} + +**User Journeys → Functional Requirements:** [Intact/Gaps Identified] +{If gaps: List journeys without supporting FRs} + +**Scope → FR Alignment:** [Intact/Misaligned] +{If misaligned: List specific issues} + +### Orphan Elements + +**Orphan Functional Requirements:** {count} +{List orphan FRs with numbers} + +**Unsupported Success Criteria:** {count} +{List unsupported criteria} + +**User Journeys Without FRs:** {count} +{List journeys without FRs} + +### Traceability Matrix + +{Summary table showing traceability coverage} + +**Total Traceability Issues:** {total} + +**Severity:** [Critical if orphan FRs exist, Warning if gaps, Pass if intact] + +**Recommendation:** +[If Critical] "Orphan requirements exist - every FR must trace back to a user need or business objective." +[If Warning] "Traceability gaps identified - strengthen chains to ensure all requirements are justified." +[If Pass] "Traceability chain is intact - all requirements trace to user needs or business objectives." +``` + +### 5. Display Progress and Auto-Proceed + +Display: "**Traceability Validation Complete** + +Total Issues: {count} ({severity}) + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-07-implementation-leakage-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All traceability chains validated systematically +- Orphan FRs identified with numbers +- Broken chains documented +- Traceability matrix built +- Severity assessed correctly +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not validating all traceability chains +- Missing orphan FR detection +- Not building traceability matrix +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** Every requirement should trace to a user need or business objective. Orphan FRs indicate broken traceability that must be fixed. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md new file mode 100644 index 00000000..7d2839b5 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md @@ -0,0 +1,205 @@ +--- +name: 'step-v-07-implementation-leakage-validation' +description: 'Implementation Leakage Check - Ensure FRs and NFRs don\'t include implementation details' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-08-domain-compliance-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +--- + +# Step 7: Implementation Leakage Validation + +## STEP GOAL: + +Ensure Functional Requirements and Non-Functional Requirements don't include implementation details - they should specify WHAT, not HOW. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring analytical rigor and separation of concerns expertise +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on implementation leakage detection +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Systematic scanning for technology and implementation terms +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Scan FRs and NFRs for implementation terms +- 💾 Distinguish capability-relevant vs leakage +- 📖 Append findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, validation report +- Focus: Implementation leakage detection only +- Limits: Don't validate other aspects, don't pause for user input +- Dependencies: Steps 2-6 completed - initial validations done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform implementation leakage validation on this PRD: + +**Scan for:** +1. Technology names (React, Vue, Angular, PostgreSQL, MongoDB, AWS, GCP, Azure, Docker, Kubernetes, etc.) +2. Library names (Redux, axios, lodash, Express, Django, Rails, Spring, etc.) +3. Data structures (JSON, XML, CSV) unless relevant to capability +4. Architecture patterns (MVC, microservices, serverless) unless business requirement +5. Protocol names (HTTP, REST, GraphQL, WebSockets) - check if capability-relevant + +**For each term found:** +- Is this capability-relevant? (e.g., 'API consumers can access...' - API is capability) +- Or is this implementation detail? (e.g., 'React component for...' - implementation) + +Document violations with line numbers and explanation. + +Return structured findings with leakage counts and examples." + +### 2. Graceful Degradation (if Task tool unavailable) + +If Task tool unavailable, perform analysis directly: + +**Implementation leakage terms to scan for:** + +**Frontend Frameworks:** +React, Vue, Angular, Svelte, Solid, Next.js, Nuxt, etc. + +**Backend Frameworks:** +Express, Django, Rails, Spring, Laravel, FastAPI, etc. + +**Databases:** +PostgreSQL, MySQL, MongoDB, Redis, DynamoDB, Cassandra, etc. + +**Cloud Platforms:** +AWS, GCP, Azure, Cloudflare, Vercel, Netlify, etc. + +**Infrastructure:** +Docker, Kubernetes, Terraform, Ansible, etc. + +**Libraries:** +Redux, Zustand, axios, fetch, lodash, jQuery, etc. + +**Data Formats:** +JSON, XML, YAML, CSV (unless capability-relevant) + +**For each term found in FRs/NFRs:** +- Determine if it's capability-relevant or implementation leakage +- Example: "API consumers can access data via REST endpoints" - API/REST is capability +- Example: "React components fetch data using Redux" - implementation leakage + +**Count violations and note line numbers** + +### 3. Tally Implementation Leakage + +**By category:** +- Frontend framework leakage: count +- Backend framework leakage: count +- Database leakage: count +- Cloud platform leakage: count +- Infrastructure leakage: count +- Library leakage: count +- Other implementation details: count + +**Total implementation leakage violations:** sum + +### 4. Report Implementation Leakage Findings to Validation Report + +Append to validation report: + +```markdown +## Implementation Leakage Validation + +### Leakage by Category + +**Frontend Frameworks:** {count} violations +{If violations, list examples with line numbers} + +**Backend Frameworks:** {count} violations +{If violations, list examples with line numbers} + +**Databases:** {count} violations +{If violations, list examples with line numbers} + +**Cloud Platforms:** {count} violations +{If violations, list examples with line numbers} + +**Infrastructure:** {count} violations +{If violations, list examples with line numbers} + +**Libraries:** {count} violations +{If violations, list examples with line numbers} + +**Other Implementation Details:** {count} violations +{If violations, list examples with line numbers} + +### Summary + +**Total Implementation Leakage Violations:** {total} + +**Severity:** [Critical if >5 violations, Warning if 2-5, Pass if <2] + +**Recommendation:** +[If Critical] "Extensive implementation leakage found. Requirements specify HOW instead of WHAT. Remove all implementation details - these belong in architecture, not PRD." +[If Warning] "Some implementation leakage detected. Review violations and remove implementation details from requirements." +[If Pass] "No significant implementation leakage found. Requirements properly specify WHAT without HOW." + +**Note:** API consumers, GraphQL (when required), and other capability-relevant terms are acceptable when they describe WHAT the system must do, not HOW to build it. +``` + +### 5. Display Progress and Auto-Proceed + +Display: "**Implementation Leakage Validation Complete** + +Total Violations: {count} ({severity}) + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-08-domain-compliance-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Scanned FRs and NFRs for all implementation term categories +- Distinguished capability-relevant from implementation leakage +- Violations documented with line numbers and explanations +- Severity assessed correctly +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not scanning all implementation term categories +- Not distinguishing capability-relevant from leakage +- Missing line numbers for violations +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** Requirements specify WHAT, not HOW. Implementation details belong in architecture documents, not PRDs. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md new file mode 100644 index 00000000..6bc473e7 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md @@ -0,0 +1,243 @@ +--- +name: 'step-v-08-domain-compliance-validation' +description: 'Domain Compliance Validation - Validate domain-specific requirements are present for high-complexity domains' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-09-project-type-validation.md' +prdFile: '{prd_file_path}' +prdFrontmatter: '{prd_frontmatter}' +validationReportPath: '{validation_report_path}' +domainComplexityData: '../data/domain-complexity.csv' +--- + +# Step 8: Domain Compliance Validation + +## STEP GOAL: + +Validate domain-specific requirements are present for high-complexity domains (Healthcare, Fintech, GovTech, etc.), ensuring regulatory and compliance requirements are properly documented. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring domain expertise and compliance knowledge +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on domain-specific compliance requirements +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Conditional validation based on domain classification +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Check classification.domain from PRD frontmatter +- 💬 If low complexity (general): Skip detailed checks +- 🎯 If high complexity: Validate required special sections +- 💾 Append compliance findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file with frontmatter classification, validation report +- Focus: Domain compliance only (conditional on domain complexity) +- Limits: Don't validate other aspects, conditional execution +- Dependencies: Steps 2-7 completed - format and requirements validation done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Load Domain Complexity Data + +Load and read the complete file at: +`{domainComplexityData}` (../data/domain-complexity.csv) + +This CSV contains: +- Domain classifications and complexity levels (high/medium/low) +- Required special sections for each domain +- Key concerns and requirements for regulated industries + +Internalize this data - it drives which domains require special compliance sections. + +### 2. Extract Domain Classification + +From PRD frontmatter, extract: +- `classification.domain` - what domain is this PRD for? + +**If no domain classification found:** +Treat as "general" (low complexity) and proceed to step 4 + +### 2. Determine Domain Complexity + +**Low complexity domains (skip detailed checks):** +- General +- Consumer apps (standard e-commerce, social, productivity) +- Content websites +- Business tools (standard) + +**High complexity domains (require special sections):** +- Healthcare / Healthtech +- Fintech / Financial services +- GovTech / Public sector +- EdTech (educational records, accredited courses) +- Legal tech +- Other regulated domains + +### 3. For High-Complexity Domains: Validate Required Special Sections + +**Attempt subprocess validation:** + +"Perform domain compliance validation for {domain}: + +Based on {domain} requirements, check PRD for: + +**Healthcare:** +- Clinical Requirements section +- Regulatory Pathway (FDA, HIPAA, etc.) +- Safety Measures +- HIPAA Compliance (data privacy, security) +- Patient safety considerations + +**Fintech:** +- Compliance Matrix (SOC2, PCI-DSS, GDPR, etc.) +- Security Architecture +- Audit Requirements +- Fraud Prevention measures +- Financial transaction handling + +**GovTech:** +- Accessibility Standards (WCAG 2.1 AA, Section 508) +- Procurement Compliance +- Security Clearance requirements +- Data residency requirements + +**Other regulated domains:** +- Check for domain-specific regulatory sections +- Compliance requirements +- Special considerations + +For each required section: +- Is it present in PRD? +- Is it adequately documented? +- Note any gaps + +Return compliance matrix with presence/adequacy assessment." + +**Graceful degradation (if no Task tool):** +- Manually check for required sections based on domain +- List present sections and missing sections +- Assess adequacy of documentation + +### 5. For Low-Complexity Domains: Skip Detailed Checks + +Append to validation report: +```markdown +## Domain Compliance Validation + +**Domain:** {domain} +**Complexity:** Low (general/standard) +**Assessment:** N/A - No special domain compliance requirements + +**Note:** This PRD is for a standard domain without regulatory compliance requirements. +``` + +Display: "**Domain Compliance Validation Skipped** + +Domain: {domain} (low complexity) + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} + +### 6. Report Compliance Findings (High-Complexity Domains) + +Append to validation report: + +```markdown +## Domain Compliance Validation + +**Domain:** {domain} +**Complexity:** High (regulated) + +### Required Special Sections + +**{Section 1 Name}:** [Present/Missing/Adequate] +{If missing or inadequate: Note specific gaps} + +**{Section 2 Name}:** [Present/Missing/Adequate] +{If missing or inadequate: Note specific gaps} + +[Continue for all required sections] + +### Compliance Matrix + +| Requirement | Status | Notes | +|-------------|--------|-------| +| {Requirement 1} | [Met/Partial/Missing] | {Notes} | +| {Requirement 2} | [Met/Partial/Missing] | {Notes} | +[... continue for all requirements] + +### Summary + +**Required Sections Present:** {count}/{total} +**Compliance Gaps:** {count} + +**Severity:** [Critical if missing regulatory sections, Warning if incomplete, Pass if complete] + +**Recommendation:** +[If Critical] "PRD is missing required domain-specific compliance sections. These are essential for {domain} products." +[If Warning] "Some domain compliance sections are incomplete. Strengthen documentation for full compliance." +[If Pass] "All required domain compliance sections are present and adequately documented." +``` + +### 7. Display Progress and Auto-Proceed + +Display: "**Domain Compliance Validation Complete** + +Domain: {domain} ({complexity}) +Compliance Status: {status} + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-09-project-type-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Domain classification extracted correctly +- Complexity assessed appropriately +- Low complexity domains: Skipped with clear "N/A" documentation +- High complexity domains: All required sections checked +- Compliance matrix built with status for each requirement +- Severity assessed correctly +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not checking domain classification before proceeding +- Performing detailed checks on low complexity domains +- For high complexity: missing required section checks +- Not building compliance matrix +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** Domain compliance is conditional. High-complexity domains require special sections - low complexity domains skip these checks. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md new file mode 100644 index 00000000..0aa4a2fb --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md @@ -0,0 +1,263 @@ +--- +name: 'step-v-09-project-type-validation' +description: 'Project-Type Compliance Validation - Validate project-type specific requirements are properly documented' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-10-smart-validation.md' +prdFile: '{prd_file_path}' +prdFrontmatter: '{prd_frontmatter}' +validationReportPath: '{validation_report_path}' +projectTypesData: '../data/project-types.csv' +--- + +# Step 9: Project-Type Compliance Validation + +## STEP GOAL: + +Validate project-type specific requirements are properly documented - different project types (api_backend, web_app, mobile_app, etc.) have different required and excluded sections. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring project type expertise and architectural knowledge +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on project-type compliance +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Validate required sections present, excluded sections absent +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Check classification.projectType from PRD frontmatter +- 🎯 Validate required sections for that project type are present +- 🎯 Validate excluded sections for that project type are absent +- 💾 Append compliance findings to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file with frontmatter classification, validation report +- Focus: Project-type compliance only +- Limits: Don't validate other aspects, don't pause for user input +- Dependencies: Steps 2-8 completed - domain and requirements validation done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Load Project Types Data + +Load and read the complete file at: +`{projectTypesData}` (../data/project-types.csv) + +This CSV contains: +- Detection signals for each project type +- Required sections for each project type +- Skip/excluded sections for each project type +- Innovation signals + +Internalize this data - it drives what sections must be present or absent for each project type. + +### 2. Extract Project Type Classification + +From PRD frontmatter, extract: +- `classification.projectType` - what type of project is this? + +**Common project types:** +- api_backend +- web_app +- mobile_app +- desktop_app +- data_pipeline +- ml_system +- library_sdk +- infrastructure +- other + +**If no projectType classification found:** +Assume "web_app" (most common) and note in findings + +### 3. Determine Required and Excluded Sections from CSV Data + +**From loaded project-types.csv data, for this project type:** + +**Required sections:** (from required_sections column) +These MUST be present in the PRD + +**Skip sections:** (from skip_sections column) +These MUST NOT be present in the PRD + +**Example mappings from CSV:** +- api_backend: Required=[endpoint_specs, auth_model, data_schemas], Skip=[ux_ui, visual_design] +- mobile_app: Required=[platform_reqs, device_permissions, offline_mode], Skip=[desktop_features, cli_commands] +- cli_tool: Required=[command_structure, output_formats, config_schema], Skip=[visual_design, ux_principles, touch_interactions] +- etc. + +### 4. Validate Against CSV-Based Requirements + +**Based on project type, determine:** + +**api_backend:** +- Required: Endpoint Specs, Auth Model, Data Schemas, API Versioning +- Excluded: UX/UI sections, mobile-specific sections + +**web_app:** +- Required: User Journeys, UX/UI Requirements, Responsive Design +- Excluded: None typically + +**mobile_app:** +- Required: Mobile UX, Platform specifics (iOS/Android), Offline mode +- Excluded: Desktop-specific sections + +**desktop_app:** +- Required: Desktop UX, Platform specifics (Windows/Mac/Linux) +- Excluded: Mobile-specific sections + +**data_pipeline:** +- Required: Data Sources, Data Transformation, Data Sinks, Error Handling +- Excluded: UX/UI sections + +**ml_system:** +- Required: Model Requirements, Training Data, Inference Requirements, Model Performance +- Excluded: UX/UI sections (unless ML UI) + +**library_sdk:** +- Required: API Surface, Usage Examples, Integration Guide +- Excluded: UX/UI sections, deployment sections + +**infrastructure:** +- Required: Infrastructure Components, Deployment, Monitoring, Scaling +- Excluded: Feature requirements (this is infrastructure, not product) + +### 4. Attempt Sub-Process Validation + +"Perform project-type compliance validation for {projectType}: + +**Check that required sections are present:** +{List required sections for this project type} +For each: Is it present in PRD? Is it adequately documented? + +**Check that excluded sections are absent:** +{List excluded sections for this project type} +For each: Is it absent from PRD? (Should not be present) + +Build compliance table showing: +- Required sections: [Present/Missing/Incomplete] +- Excluded sections: [Absent/Present] (Present = violation) + +Return compliance table with findings." + +**Graceful degradation (if no Task tool):** +- Manually check PRD for required sections +- Manually check PRD for excluded sections +- Build compliance table + +### 5. Build Compliance Table + +**Required sections check:** +- For each required section: Present / Missing / Incomplete +- Count: Required sections present vs total required + +**Excluded sections check:** +- For each excluded section: Absent / Present (violation) +- Count: Excluded sections present (violations) + +**Total compliance score:** +- Required: {present}/{total} +- Excluded violations: {count} + +### 6. Report Project-Type Compliance Findings to Validation Report + +Append to validation report: + +```markdown +## Project-Type Compliance Validation + +**Project Type:** {projectType} + +### Required Sections + +**{Section 1}:** [Present/Missing/Incomplete] +{If missing or incomplete: Note specific gaps} + +**{Section 2}:** [Present/Missing/Incomplete] +{If missing or incomplete: Note specific gaps} + +[Continue for all required sections] + +### Excluded Sections (Should Not Be Present) + +**{Section 1}:** [Absent/Present] ✓ +{If present: This section should not be present for {projectType}} + +**{Section 2}:** [Absent/Present] ✓ +{If present: This section should not be present for {projectType}} + +[Continue for all excluded sections] + +### Compliance Summary + +**Required Sections:** {present}/{total} present +**Excluded Sections Present:** {violations} (should be 0) +**Compliance Score:** {percentage}% + +**Severity:** [Critical if required sections missing, Warning if incomplete, Pass if complete] + +**Recommendation:** +[If Critical] "PRD is missing required sections for {projectType}. Add missing sections to properly specify this type of project." +[If Warning] "Some required sections for {projectType} are incomplete. Strengthen documentation." +[If Pass] "All required sections for {projectType} are present. No excluded sections found." +``` + +### 7. Display Progress and Auto-Proceed + +Display: "**Project-Type Compliance Validation Complete** + +Project Type: {projectType} +Compliance: {score}% + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-10-smart-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Project type extracted correctly (or default assumed) +- Required sections validated for presence and completeness +- Excluded sections validated for absence +- Compliance table built with status for all sections +- Severity assessed correctly +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not checking project type before proceeding +- Missing required section checks +- Missing excluded section checks +- Not building compliance table +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** Different project types have different requirements. API PRDs don't need UX sections - validate accordingly. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md new file mode 100644 index 00000000..94918c91 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md @@ -0,0 +1,209 @@ +--- +name: 'step-v-10-smart-validation' +description: 'SMART Requirements Validation - Validate Functional Requirements meet SMART quality criteria' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-11-holistic-quality-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +--- + +# Step 10: SMART Requirements Validation + +## STEP GOAL: + +Validate Functional Requirements meet SMART quality criteria (Specific, Measurable, Attainable, Relevant, Traceable), ensuring high-quality requirements. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring requirements engineering expertise and quality assessment +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on FR quality assessment using SMART framework +- 🚫 FORBIDDEN to validate other aspects in this step +- 💬 Approach: Score each FR on SMART criteria (1-5 scale) +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Extract all FRs from PRD +- 🎯 Score each FR on SMART criteria (Specific, Measurable, Attainable, Relevant, Traceable) +- 💾 Flag FRs with score < 3 in any category +- 📖 Append scoring table and suggestions to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: PRD file, validation report +- Focus: FR quality assessment only using SMART framework +- Limits: Don't validate NFRs or other aspects, don't pause for user input +- Dependencies: Steps 2-9 completed - comprehensive validation checks done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Extract All Functional Requirements + +From the PRD's Functional Requirements section, extract: +- All FRs with their FR numbers (FR-001, FR-002, etc.) +- Count total FRs + +### 2. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform SMART requirements validation on these Functional Requirements: + +{List all FRs} + +**For each FR, score on SMART criteria (1-5 scale):** + +**Specific (1-5):** +- 5: Clear, unambiguous, well-defined +- 3: Somewhat clear but could be more specific +- 1: Vague, ambiguous, unclear + +**Measurable (1-5):** +- 5: Quantifiable metrics, testable +- 3: Partially measurable +- 1: Not measurable, subjective + +**Attainable (1-5):** +- 5: Realistic, achievable with constraints +- 3: Probably achievable but uncertain +- 1: Unrealistic, technically infeasible + +**Relevant (1-5):** +- 5: Clearly aligned with user needs and business objectives +- 3: Somewhat relevant but connection unclear +- 1: Not relevant, doesn't align with goals + +**Traceable (1-5):** +- 5: Clearly traces to user journey or business objective +- 3: Partially traceable +- 1: Orphan requirement, no clear source + +**For each FR with score < 3 in any category:** +- Provide specific improvement suggestions + +Return scoring table with all FR scores and improvement suggestions for low-scoring FRs." + +**Graceful degradation (if no Task tool):** +- Manually score each FR on SMART criteria +- Note FRs with low scores +- Provide improvement suggestions + +### 3. Build Scoring Table + +For each FR: +- FR number +- Specific score (1-5) +- Measurable score (1-5) +- Attainable score (1-5) +- Relevant score (1-5) +- Traceable score (1-5) +- Average score +- Flag if any category < 3 + +**Calculate overall FR quality:** +- Percentage of FRs with all scores ≥ 3 +- Percentage of FRs with all scores ≥ 4 +- Average score across all FRs and categories + +### 4. Report SMART Findings to Validation Report + +Append to validation report: + +```markdown +## SMART Requirements Validation + +**Total Functional Requirements:** {count} + +### Scoring Summary + +**All scores ≥ 3:** {percentage}% ({count}/{total}) +**All scores ≥ 4:** {percentage}% ({count}/{total}) +**Overall Average Score:** {average}/5.0 + +### Scoring Table + +| FR # | Specific | Measurable | Attainable | Relevant | Traceable | Average | Flag | +|------|----------|------------|------------|----------|-----------|--------|------| +| FR-001 | {s1} | {m1} | {a1} | {r1} | {t1} | {avg1} | {X if any <3} | +| FR-002 | {s2} | {m2} | {a2} | {r2} | {t2} | {avg2} | {X if any <3} | +[Continue for all FRs] + +**Legend:** 1=Poor, 3=Acceptable, 5=Excellent +**Flag:** X = Score < 3 in one or more categories + +### Improvement Suggestions + +**Low-Scoring FRs:** + +**FR-{number}:** {specific suggestion for improvement} +[For each FR with score < 3 in any category] + +### Overall Assessment + +**Severity:** [Critical if >30% flagged FRs, Warning if 10-30%, Pass if <10%] + +**Recommendation:** +[If Critical] "Many FRs have quality issues. Revise flagged FRs using SMART framework to improve clarity and testability." +[If Warning] "Some FRs would benefit from SMART refinement. Focus on flagged requirements above." +[If Pass] "Functional Requirements demonstrate good SMART quality overall." +``` + +### 5. Display Progress and Auto-Proceed + +Display: "**SMART Requirements Validation Complete** + +FR Quality: {percentage}% with acceptable scores ({severity}) + +**Proceeding to next validation check...**" + +Immediately load and execute {nextStepFile} (step-v-11-holistic-quality-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- All FRs extracted from PRD +- Each FR scored on all 5 SMART criteria (1-5 scale) +- FRs with scores < 3 flagged for improvement +- Improvement suggestions provided for low-scoring FRs +- Scoring table built with all FR scores +- Overall quality assessment calculated +- Findings reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not scoring all FRs on all SMART criteria +- Missing improvement suggestions for low-scoring FRs +- Not building scoring table +- Not calculating overall quality metrics +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** FRs should be high-quality, not just present. SMART framework provides objective quality measure. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md new file mode 100644 index 00000000..65d41ea1 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md @@ -0,0 +1,264 @@ +--- +name: 'step-v-11-holistic-quality-validation' +description: 'Holistic Quality Assessment - Assess PRD as cohesive, compelling document - is it a good PRD?' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-12-completeness-validation.md' +prdFile: '{prd_file_path}' +validationReportPath: '{validation_report_path}' +advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' +--- + +# Step 11: Holistic Quality Assessment + +## STEP GOAL: + +Assess the PRD as a cohesive, compelling document - evaluating document flow, dual audience effectiveness (humans and LLMs), BMAD PRD principles compliance, and overall quality rating. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring analytical rigor and document quality expertise +- ✅ This step runs autonomously - no user input needed +- ✅ Uses Advanced Elicitation for multi-perspective evaluation + +### Step-Specific Rules: + +- 🎯 Focus ONLY on holistic document quality assessment +- 🚫 FORBIDDEN to validate individual components (done in previous steps) +- 💬 Approach: Multi-perspective evaluation using Advanced Elicitation +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Use Advanced Elicitation for multi-perspective assessment +- 🎯 Evaluate document flow, dual audience, BMAD principles +- 💾 Append comprehensive assessment to validation report +- 📖 Display "Proceeding to next check..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: Complete PRD file, validation report with findings from steps 1-10 +- Focus: Holistic quality - the WHOLE document +- Limits: Don't re-validate individual components, don't pause for user input +- Dependencies: Steps 1-10 completed - all systematic checks done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process with Advanced Elicitation + +**Try to use Task tool to spawn a subprocess using Advanced Elicitation:** + +"Perform holistic quality assessment on this PRD using multi-perspective evaluation: + +**Load and execute Advanced Elicitation workflow:** +{advancedElicitationTask} + +**Evaluate the PRD from these perspectives:** + +**1. Document Flow & Coherence:** +- Read entire PRD +- Evaluate narrative flow - does it tell a cohesive story? +- Check transitions between sections +- Assess consistency - is it coherent throughout? +- Evaluate readability - is it clear and well-organized? + +**2. Dual Audience Effectiveness:** + +**For Humans:** +- Executive-friendly: Can executives understand vision and goals quickly? +- Developer clarity: Do developers have clear requirements to build from? +- Designer clarity: Do designers understand user needs and flows? +- Stakeholder decision-making: Can stakeholders make informed decisions? + +**For LLMs:** +- Machine-readable structure: Is the PRD structured for LLM consumption? +- UX readiness: Can an LLM generate UX designs from this? +- Architecture readiness: Can an LLM generate architecture from this? +- Epic/Story readiness: Can an LLM break down into epics and stories? + +**3. BMAD PRD Principles Compliance:** +- Information density: Every sentence carries weight? +- Measurability: Requirements testable? +- Traceability: Requirements trace to sources? +- Domain awareness: Domain-specific considerations included? +- Zero anti-patterns: No filler or wordiness? +- Dual audience: Works for both humans and LLMs? +- Markdown format: Proper structure and formatting? + +**4. Overall Quality Rating:** +Rate the PRD on 5-point scale: +- Excellent (5/5): Exemplary, ready for production use +- Good (4/5): Strong with minor improvements needed +- Adequate (3/5): Acceptable but needs refinement +- Needs Work (2/5): Significant gaps or issues +- Problematic (1/5): Major flaws, needs substantial revision + +**5. Top 3 Improvements:** +Identify the 3 most impactful improvements to make this a great PRD + +Return comprehensive assessment with all perspectives, rating, and top 3 improvements." + +**Graceful degradation (if no Task tool or Advanced Elicitation unavailable):** +- Perform holistic assessment directly in current context +- Read complete PRD +- Evaluate document flow, coherence, transitions +- Assess dual audience effectiveness +- Check BMAD principles compliance +- Assign overall quality rating +- Identify top 3 improvements + +### 2. Synthesize Assessment + +**Compile findings from multi-perspective evaluation:** + +**Document Flow & Coherence:** +- Overall assessment: [Excellent/Good/Adequate/Needs Work/Problematic] +- Key strengths: [list] +- Key weaknesses: [list] + +**Dual Audience Effectiveness:** +- For Humans: [assessment] +- For LLMs: [assessment] +- Overall dual audience score: [1-5] + +**BMAD Principles Compliance:** +- Principles met: [count]/7 +- Principles with issues: [list] + +**Overall Quality Rating:** [1-5 with label] + +**Top 3 Improvements:** +1. [Improvement 1] +2. [Improvement 2] +3. [Improvement 3] + +### 3. Report Holistic Quality Findings to Validation Report + +Append to validation report: + +```markdown +## Holistic Quality Assessment + +### Document Flow & Coherence + +**Assessment:** [Excellent/Good/Adequate/Needs Work/Problematic] + +**Strengths:** +{List key strengths} + +**Areas for Improvement:** +{List key weaknesses} + +### Dual Audience Effectiveness + +**For Humans:** +- Executive-friendly: [assessment] +- Developer clarity: [assessment] +- Designer clarity: [assessment] +- Stakeholder decision-making: [assessment] + +**For LLMs:** +- Machine-readable structure: [assessment] +- UX readiness: [assessment] +- Architecture readiness: [assessment] +- Epic/Story readiness: [assessment] + +**Dual Audience Score:** {score}/5 + +### BMAD PRD Principles Compliance + +| Principle | Status | Notes | +|-----------|--------|-------| +| Information Density | [Met/Partial/Not Met] | {notes} | +| Measurability | [Met/Partial/Not Met] | {notes} | +| Traceability | [Met/Partial/Not Met] | {notes} | +| Domain Awareness | [Met/Partial/Not Met] | {notes} | +| Zero Anti-Patterns | [Met/Partial/Not Met] | {notes} | +| Dual Audience | [Met/Partial/Not Met] | {notes} | +| Markdown Format | [Met/Partial/Not Met] | {notes} | + +**Principles Met:** {count}/7 + +### Overall Quality Rating + +**Rating:** {rating}/5 - {label} + +**Scale:** +- 5/5 - Excellent: Exemplary, ready for production use +- 4/5 - Good: Strong with minor improvements needed +- 3/5 - Adequate: Acceptable but needs refinement +- 2/5 - Needs Work: Significant gaps or issues +- 1/5 - Problematic: Major flaws, needs substantial revision + +### Top 3 Improvements + +1. **{Improvement 1}** + {Brief explanation of why and how} + +2. **{Improvement 2}** + {Brief explanation of why and how} + +3. **{Improvement 3}** + {Brief explanation of why and how} + +### Summary + +**This PRD is:** {one-sentence overall assessment} + +**To make it great:** Focus on the top 3 improvements above. +``` + +### 4. Display Progress and Auto-Proceed + +Display: "**Holistic Quality Assessment Complete** + +Overall Rating: {rating}/5 - {label} + +**Proceeding to final validation checks...**" + +Immediately load and execute {nextStepFile} (step-v-12-completeness-validation.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Advanced Elicitation used for multi-perspective evaluation (or graceful degradation) +- Document flow & coherence assessed +- Dual audience effectiveness evaluated (humans and LLMs) +- BMAD PRD principles compliance checked +- Overall quality rating assigned (1-5 scale) +- Top 3 improvements identified +- Comprehensive assessment reported to validation report +- Auto-proceeds to next validation step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not using Advanced Elicitation for multi-perspective evaluation +- Missing document flow assessment +- Missing dual audience evaluation +- Not checking all BMAD principles +- Not assigning overall quality rating +- Missing top 3 improvements +- Not reporting comprehensive assessment to validation report +- Not auto-proceeding + +**Master Rule:** This evaluates the WHOLE document, not just components. Answers "Is this a good PRD?" and "What would make it great?" diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md new file mode 100644 index 00000000..825fbfe8 --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md @@ -0,0 +1,242 @@ +--- +name: 'step-v-12-completeness-validation' +description: 'Completeness Check - Final comprehensive completeness check before report generation' + +# File references (ONLY variables used in this step) +nextStepFile: './step-v-13-report-complete.md' +prdFile: '{prd_file_path}' +prdFrontmatter: '{prd_frontmatter}' +validationReportPath: '{validation_report_path}' +--- + +# Step 12: Completeness Validation + +## STEP GOAL: + +Final comprehensive completeness check - validate no template variables remain, each section has required content, section-specific completeness, and frontmatter is properly populated. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in systematic validation, not collaborative dialogue +- ✅ You bring attention to detail and completeness verification +- ✅ This step runs autonomously - no user input needed + +### Step-Specific Rules: + +- 🎯 Focus ONLY on completeness verification +- 🚫 FORBIDDEN to validate quality (done in step 11) or other aspects +- 💬 Approach: Systematic checklist-style verification +- 🚪 This is a validation sequence step - auto-proceeds when complete + +## EXECUTION PROTOCOLS: + +- 🎯 Check template completeness (no variables remaining) +- 🎯 Validate content completeness (each section has required content) +- 🎯 Validate section-specific completeness +- 🎯 Validate frontmatter completeness +- 💾 Append completeness matrix to validation report +- 📖 Display "Proceeding to final step..." and load next step +- 🚫 FORBIDDEN to pause or request user input + +## CONTEXT BOUNDARIES: + +- Available context: Complete PRD file, frontmatter, validation report +- Focus: Completeness verification only (final gate) +- Limits: Don't assess quality, don't pause for user input +- Dependencies: Steps 1-11 completed - all validation checks done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Attempt Sub-Process Validation + +**Try to use Task tool to spawn a subprocess:** + +"Perform completeness validation on this PRD - final gate check: + +**1. Template Completeness:** +- Scan PRD for any remaining template variables +- Look for: {variable}, {{variable}}, {placeholder}, [placeholder], etc. +- List any found with line numbers + +**2. Content Completeness:** +- Executive Summary: Has vision statement? ({key content}) +- Success Criteria: All criteria measurable? ({metrics present}) +- Product Scope: In-scope and out-of-scope defined? ({both present}) +- User Journeys: User types identified? ({users listed}) +- Functional Requirements: FRs listed with proper format? ({FRs present}) +- Non-Functional Requirements: NFRs with metrics? ({NFRs present}) + +For each section: Is required content present? (Yes/No/Partial) + +**3. Section-Specific Completeness:** +- Success Criteria: Each has specific measurement method? +- User Journeys: Cover all user types? +- Functional Requirements: Cover MVP scope? +- Non-Functional Requirements: Each has specific criteria? + +**4. Frontmatter Completeness:** +- stepsCompleted: Populated? +- classification: Present (domain, projectType)? +- inputDocuments: Tracked? +- date: Present? + +Return completeness matrix with status for each check." + +**Graceful degradation (if no Task tool):** +- Manually scan for template variables +- Manually check each section for required content +- Manually verify frontmatter fields +- Build completeness matrix + +### 2. Build Completeness Matrix + +**Template Completeness:** +- Template variables found: count +- List if any found + +**Content Completeness by Section:** +- Executive Summary: Complete / Incomplete / Missing +- Success Criteria: Complete / Incomplete / Missing +- Product Scope: Complete / Incomplete / Missing +- User Journeys: Complete / Incomplete / Missing +- Functional Requirements: Complete / Incomplete / Missing +- Non-Functional Requirements: Complete / Incomplete / Missing +- Other sections: [List completeness] + +**Section-Specific Completeness:** +- Success criteria measurable: All / Some / None +- Journeys cover all users: Yes / Partial / No +- FRs cover MVP scope: Yes / Partial / No +- NFRs have specific criteria: All / Some / None + +**Frontmatter Completeness:** +- stepsCompleted: Present / Missing +- classification: Present / Missing +- inputDocuments: Present / Missing +- date: Present / Missing + +**Overall completeness:** +- Sections complete: X/Y +- Critical gaps: [list if any] + +### 3. Report Completeness Findings to Validation Report + +Append to validation report: + +```markdown +## Completeness Validation + +### Template Completeness + +**Template Variables Found:** {count} +{If count > 0, list variables with line numbers} +{If count = 0, note: No template variables remaining ✓} + +### Content Completeness by Section + +**Executive Summary:** [Complete/Incomplete/Missing] +{If incomplete or missing, note specific gaps} + +**Success Criteria:** [Complete/Incomplete/Missing] +{If incomplete or missing, note specific gaps} + +**Product Scope:** [Complete/Incomplete/Missing] +{If incomplete or missing, note specific gaps} + +**User Journeys:** [Complete/Incomplete/Missing] +{If incomplete or missing, note specific gaps} + +**Functional Requirements:** [Complete/Incomplete/Missing] +{If incomplete or missing, note specific gaps} + +**Non-Functional Requirements:** [Complete/Incomplete/Missing] +{If incomplete or missing, note specific gaps} + +### Section-Specific Completeness + +**Success Criteria Measurability:** [All/Some/None] measurable +{If Some or None, note which criteria lack metrics} + +**User Journeys Coverage:** [Yes/Partial/No] - covers all user types +{If Partial or No, note missing user types} + +**FRs Cover MVP Scope:** [Yes/Partial/No] +{If Partial or No, note scope gaps} + +**NFRs Have Specific Criteria:** [All/Some/None] +{If Some or None, note which NFRs lack specificity} + +### Frontmatter Completeness + +**stepsCompleted:** [Present/Missing] +**classification:** [Present/Missing] +**inputDocuments:** [Present/Missing] +**date:** [Present/Missing] + +**Frontmatter Completeness:** {complete_fields}/4 + +### Completeness Summary + +**Overall Completeness:** {percentage}% ({complete_sections}/{total_sections}) + +**Critical Gaps:** [count] [list if any] +**Minor Gaps:** [count] [list if any] + +**Severity:** [Critical if template variables exist or critical sections missing, Warning if minor gaps, Pass if complete] + +**Recommendation:** +[If Critical] "PRD has completeness gaps that must be addressed before use. Fix template variables and complete missing sections." +[If Warning] "PRD has minor completeness gaps. Address minor gaps for complete documentation." +[If Pass] "PRD is complete with all required sections and content present." +``` + +### 4. Display Progress and Auto-Proceed + +Display: "**Completeness Validation Complete** + +Overall Completeness: {percentage}% ({severity}) + +**Proceeding to final step...**" + +Immediately load and execute {nextStepFile} (step-v-13-report-complete.md) + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Scanned for template variables systematically +- Validated each section for required content +- Validated section-specific completeness (measurability, coverage, scope) +- Validated frontmatter completeness +- Completeness matrix built with all checks +- Severity assessed correctly +- Findings reported to validation report +- Auto-proceeds to final step +- Subprocess attempted with graceful degradation + +### ❌ SYSTEM FAILURE: + +- Not scanning for template variables +- Missing section-specific completeness checks +- Not validating frontmatter +- Not building completeness matrix +- Not reporting findings to validation report +- Not auto-proceeding + +**Master Rule:** Final gate to ensure document is complete before presenting findings. Template variables or critical gaps must be fixed. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md new file mode 100644 index 00000000..8b138cfb --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md @@ -0,0 +1,232 @@ +--- +name: 'step-v-13-report-complete' +description: 'Validation Report Complete - Finalize report, summarize findings, present to user, offer next steps' + +# File references (ONLY variables used in this step) +validationReportPath: '{validation_report_path}' +prdFile: '{prd_file_path}' +--- + +# Step 13: Validation Report Complete + +## STEP GOAL: + +Finalize validation report, summarize all findings from steps 1-12, present summary to user conversationally, and offer actionable next steps. + +## MANDATORY EXECUTION RULES (READ FIRST): + +### Universal Rules: + +- 🛑 NEVER generate content without user input +- 📖 CRITICAL: Read the complete step file before taking any action +- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read +- 📋 YOU ARE A FACILITATOR, not a content generator +- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` + +### Role Reinforcement: + +- ✅ You are a Validation Architect and Quality Assurance Specialist +- ✅ If you already have been given communication or persona patterns, continue to use those while playing this new role +- ✅ We engage in collaborative dialogue, not command-response +- ✅ You bring synthesis and summary expertise +- ✅ This is the FINAL step - requires user interaction + +### Step-Specific Rules: + +- 🎯 Focus ONLY on summarizing findings and presenting options +- 🚫 FORBIDDEN to perform additional validation +- 💬 Approach: Conversational summary with clear next steps +- 🚪 This is the final step - no next step after this + +## EXECUTION PROTOCOLS: + +- 🎯 Load complete validation report +- 🎯 Summarize all findings from steps 1-12 +- 🎯 Update report frontmatter with final status +- 💬 Present summary to user conversationally +- 💬 Offer menu options for next actions +- 🚫 FORBIDDEN to proceed without user selection + +## CONTEXT BOUNDARIES: + +- Available context: Complete validation report with findings from all validation steps +- Focus: Summary and presentation only (no new validation) +- Limits: Don't add new findings, just synthesize existing +- Dependencies: Steps 1-12 completed - all validation checks done + +## MANDATORY SEQUENCE + +**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change. + +### 1. Load Complete Validation Report + +Read the entire validation report from {validationReportPath} + +Extract all findings from: +- Format Detection (Step 2) +- Parity Analysis (Step 2B, if applicable) +- Information Density (Step 3) +- Product Brief Coverage (Step 4) +- Measurability (Step 5) +- Traceability (Step 6) +- Implementation Leakage (Step 7) +- Domain Compliance (Step 8) +- Project-Type Compliance (Step 9) +- SMART Requirements (Step 10) +- Holistic Quality (Step 11) +- Completeness (Step 12) + +### 2. Update Report Frontmatter with Final Status + +Update validation report frontmatter: + +```yaml +--- +validationTarget: '{prd_path}' +validationDate: '{current_date}' +inputDocuments: [list of documents] +validationStepsCompleted: ['step-v-01-discovery', 'step-v-02-format-detection', 'step-v-03-density-validation', 'step-v-04-brief-coverage-validation', 'step-v-05-measurability-validation', 'step-v-06-traceability-validation', 'step-v-07-implementation-leakage-validation', 'step-v-08-domain-compliance-validation', 'step-v-09-project-type-validation', 'step-v-10-smart-validation', 'step-v-11-holistic-quality-validation', 'step-v-12-completeness-validation'] +validationStatus: COMPLETE +holisticQualityRating: '{rating from step 11}' +overallStatus: '{Pass/Warning/Critical based on all findings}' +--- +``` + +### 3. Create Summary of Findings + +**Overall Status:** +- Determine from all validation findings +- **Pass:** All critical checks pass, minor warnings acceptable +- **Warning:** Some issues found but PRD is usable +- **Critical:** Major issues that prevent PRD from being fit for purpose + +**Quick Results Table:** +- Format: [classification] +- Information Density: [severity] +- Measurability: [severity] +- Traceability: [severity] +- Implementation Leakage: [severity] +- Domain Compliance: [status] +- Project-Type Compliance: [compliance score] +- SMART Quality: [percentage] +- Holistic Quality: [rating/5] +- Completeness: [percentage] + +**Critical Issues:** List from all validation steps +**Warnings:** List from all validation steps +**Strengths:** List positives from all validation steps + +**Holistic Quality Rating:** From step 11 +**Top 3 Improvements:** From step 11 + +**Recommendation:** Based on overall status + +### 4. Present Summary to User Conversationally + +Display: + +"**✓ PRD Validation Complete** + +**Overall Status:** {Pass/Warning/Critical} + +**Quick Results:** +{Present quick results table with key findings} + +**Critical Issues:** {count or "None"} +{If any, list briefly} + +**Warnings:** {count or "None"} +{If any, list briefly} + +**Strengths:** +{List key strengths} + +**Holistic Quality:** {rating}/5 - {label} + +**Top 3 Improvements:** +1. {Improvement 1} +2. {Improvement 2} +3. {Improvement 3} + +**Recommendation:** +{Based on overall status: +- Pass: "PRD is in good shape. Address minor improvements to make it great." +- Warning: "PRD is usable but has issues that should be addressed. Review warnings and improve where needed." +- Critical: "PRD has significant issues that should be fixed before use. Focus on critical issues above."} + +**What would you like to do next?**" + +### 5. Present MENU OPTIONS + +Display: + +**[R] Review Detailed Findings** - Walk through validation report section by section +**[E] Use Edit Workflow** - Use validation report with Edit workflow for systematic improvements +**[F] Fix Simpler Items** - Immediate fixes for simple issues (anti-patterns, leakage, missing headers) +**[X] Exit** - Exit and review validation report + +#### EXECUTION RULES: + +- ALWAYS halt and wait for user input after presenting menu +- Only proceed based on user selection + +#### Menu Handling Logic: + +- **IF R (Review Detailed Findings):** + - Walk through validation report section by section + - Present findings from each validation step + - Allow user to ask questions + - After review, return to menu + +- **IF E (Use Edit Workflow):** + - Explain: "The Edit workflow (steps-e/) can use this validation report to systematically address issues. Edit mode will guide you through discovering what to edit, reviewing the PRD, and applying targeted improvements." + - Offer: "Would you like to launch Edit mode now? It will help you fix validation findings systematically." + - If yes: Load and execute steps-e/step-e-01-discovery.md + - If no: Return to menu + +- **IF F (Fix Simpler Items):** + - Offer immediate fixes for: + - Template variables (fill in with appropriate content) + - Conversational filler (remove wordy phrases) + - Implementation leakage (remove technology names from FRs/NFRs) + - Missing section headers (add ## headers) + - Ask: "Which simple fixes would you like me to make?" + - If user specifies fixes, make them and update validation report + - Return to menu + +- **IF X (Exit):** + - Display: "**Validation Report Saved:** {validationReportPath}" + - Display: "**Summary:** {overall status} - {recommendation}" + - Display: "**Next Steps:** Review the validation report and address findings. For systematic improvements, consider using Edit workflow when available, or manually fix issues identified in this report." + - Exit validation + +- **IF Any other:** Help user, then redisplay menu + +--- + +## 🚨 SYSTEM SUCCESS/FAILURE METRICS + +### ✅ SUCCESS: + +- Complete validation report loaded successfully +- All findings from steps 1-12 summarized +- Report frontmatter updated with final status +- Overall status determined correctly (Pass/Warning/Critical) +- Quick results table presented +- Critical issues, warnings, and strengths listed +- Holistic quality rating included +- Top 3 improvements presented +- Clear recommendation provided +- Menu options presented with clear explanations +- User can review findings, get help, or exit + +### ❌ SYSTEM FAILURE: + +- Not loading complete validation report +- Missing summary of findings +- Not updating report frontmatter +- Not determining overall status +- Missing menu options +- Unclear next steps + +**Master Rule:** User needs clear summary and actionable next steps. Edit workflow is best for complex issues; immediate fixes available for simpler ones. diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md deleted file mode 100644 index 5127230b..00000000 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +++ /dev/null @@ -1,421 +0,0 @@ ---- -name: 'step-02-discovery' -description: 'Conduct project and domain discovery with data-driven classification' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - -# File References -thisStepFile: '{workflow_path}/steps/step-02-discovery.md' -nextStepFile: '{workflow_path}/steps/step-03-success.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{planning_artifacts}/prd.md' - -# Data Files -projectTypesCSV: '{workflow_path}/project-types.csv' -domainComplexityCSV: '{workflow_path}/domain-complexity.csv' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' ---- - -# Step 2: Project & Domain Discovery - -**Progress: Step 2 of 11** - Next: Success Criteria Definition - -## STEP GOAL: - -Conduct comprehensive project discovery that leverages existing input documents while allowing user refinement, with data-driven classification, and generate the Executive Summary content. - -## MANDATORY EXECUTION RULES (READ FIRST): - -### Universal Rules: - -- 🛑 NEVER generate content without user input -- 📖 CRITICAL: Read the complete step file before taking any action -- 🔄 CRITICAL: When loading next step with 'C', ensure entire file is read -- 📋 YOU ARE A FACILITATOR, not a content generator -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -### Role Reinforcement: - -- ✅ You are a product-focused PM facilitator collaborating with an expert peer -- ✅ We engage in collaborative dialogue, not command-response -- ✅ You bring structured thinking and facilitation skills, while the user brings domain expertise and product vision - -### Step-Specific Rules: - -- 🎯 Focus on project classification and vision alignment only -- 🚫 FORBIDDEN to generate content without real user input -- 💬 APPROACH: Adapt questions based on document context (brownfield vs greenfield) -- 🎯 LOAD classification data BEFORE starting discovery conversation - -## EXECUTION PROTOCOLS: - -- 🎯 Show your analysis before taking any action -- ⚠️ Present A/P/C menu after generating executive summary content -- 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2]` before loading next step -- 🚫 FORBIDDEN to load next step until C is selected - -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to develop deeper insights about the generated content -- **P (Party Mode)**: Bring multiple perspectives to discuss and improve the generated content -- **C (Continue)**: Append and save the content to the `{outputFile}` and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {advancedElicitationTask} -- When 'P' selected: Execute {partyModeWorkflow} -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding - -## CONTEXT BOUNDARIES: - -- Current document and frontmatter from step 1 are available -- Input documents already loaded are in memory (product briefs, research, brainstorming, project docs) -- **Document counts available in frontmatter `documentCounts`** -- Classification CSV data will be loaded in this step only -- This will be the first content section appended to the document - -## Sequence of Instructions (Do not deviate, skip, or optimize) - -### 1. Read Document State from Frontmatter - -**CRITICAL FIRST ACTION:** Read the frontmatter from `{outputFile}` to get document counts. - -``` -Read documentCounts from prd.md frontmatter: -- briefCount = documentCounts.briefs -- researchCount = documentCounts.research -- brainstormingCount = documentCounts.brainstorming -- projectDocsCount = documentCounts.projectDocs -``` - -**ANNOUNCE your understanding:** - -"From step 1, I have loaded: - -- Product briefs: {{briefCount}} files -- Research: {{researchCount}} files -- Brainstorming: {{brainstormingCount}} files -- Project docs: {{projectDocsCount}} files - -{if projectDocsCount > 0}This is a **brownfield project** - I'll focus on understanding what you want to add or change.{else}This is a **greenfield project** - I'll help you define the full product vision.{/if}" - -### 2. Load Classification Data - -Load and prepare CSV data for intelligent classification: - -- Load `{projectTypesCSV}` completely -- Load `{domainComplexityCSV}` completely -- Parse column structures and store in memory for this step only - -### 3. Begin Discovery Conversation - -**SELECT EXACTLY ONE DISCOVERY PATH based on document state:** - ---- - -#### PATH A: Has Product Brief (briefCount > 0) - -**Use this path when:** `briefCount > 0` - -"As your PM peer, I've reviewed your product brief and have a great starting point for our discovery. Let me share what I understand and you can refine or correct as needed. - -**Based on your product brief:** - -**What you're building:** -{{extracted_vision_from_brief}} - -**Problem it solves:** -{{extracted_problem_from_brief}} - -**Target users:** -{{extracted_users_from_brief}} - -**What makes it special:** -{{extracted_differentiator_from_brief}} - -{if projectDocsCount > 0}I also see you have existing project documentation. This PRD will define how new features integrate with your existing system architecture.{/if} - -**How does this align with your vision?** Should we refine any of these points or are there important aspects I'm missing?" - -**AFTER this message, SKIP to Section 4.** - ---- - -#### PATH B: No Brief but Has Project Docs - Brownfield (briefCount == 0 AND projectDocsCount > 0) - -**Use this path when:** `briefCount == 0 AND projectDocsCount > 0` - -**NOTE:** Extract the following from loaded project documentation (index.md, architecture.md, project-overview.md, etc.): - -"As your PM peer, I've reviewed your existing project documentation from document-project. - -**Your existing system includes:** - -- **Tech Stack:** {analyze index.md and architecture.md for technologies used} -- **Architecture:** {summarize architecture patterns from architecture.md} -- **Key Components:** {list main components from source-tree-analysis.md or project-overview.md} - -This PRD will define **new features or changes** to add to this existing codebase. - -**Tell me about what you want to add or change:** - -- What new capability or feature do you want to build? -- What problem will this solve for your users? -- How should it integrate with the existing system? -- Is this adding new functionality, improving existing features, or fixing issues? - -I'll help you create a PRD focused on these additions while respecting your existing patterns and architecture." - -**AFTER this message, SKIP to Section 4.** - ---- - -#### PATH C: No Documents - Greenfield (briefCount == 0 AND projectDocsCount == 0) - -**Use this path when:** `briefCount == 0 AND projectDocsCount == 0` - -"As your PM peer, I'm excited to help you shape {{project_name}}. Let me start by understanding what you want to build. - -**Tell me about what you want to create:** - -- What problem does it solve? -- Who are you building this for? -- What excites you most about this product? - -I'll be listening for signals to help us classify the project and domain so we can ask the right questions throughout our process." - -**AFTER this message, continue to Section 4.** - ---- - -### 4. Listen for Classification Signals - -As the user describes their product/feature, listen for and match against: - -#### Project Type Signals - -Compare user description against `detection_signals` from `project-types.csv`: - -- Look for keyword matches from semicolon-separated signals -- Examples: "API,REST,GraphQL" → api_backend -- Examples: "iOS,Android,app,mobile" → mobile_app -- Store the best matching `project_type` - -#### Domain Signals - -Compare user description against `signals` from `domain-complexity.csv`: - -- Look for domain keyword matches -- Examples: "medical,diagnostic,clinical" → healthcare -- Examples: "payment,banking,trading" → fintech -- Store the matched `domain` and `complexity_level` - -### 5. Present Classification for Validation - -**SELECT EXACTLY ONE CLASSIFICATION PRESENTATION based on document state:** - ---- - -#### IF PATH A was used (briefCount > 0): - -"Based on your product brief and our discussion, I'm classifying this as: - -- **Project Type:** {project_type_from_brief_or_conversation} -- **Domain:** {domain_from_brief_or_conversation} -- **Complexity:** {complexity_from_brief_or_conversation} - -From your brief, I detected these classification signals: -{{classification_signals_from_brief}} - -{if projectDocsCount > 0}Your existing project documentation also indicates: - -- **Existing Tech Stack:** {from architecture.md or index.md} -- **Architecture Pattern:** {from architecture.md} - -I'll ensure the new features align with your existing system.{/if} - -Combined with our conversation, this suggests the above classification. Does this sound right?" - ---- - -#### IF PATH B was used (briefCount == 0 AND projectDocsCount > 0): - -"Based on your existing project documentation and our discussion about new features: - -- **Existing Project Type:** {detected from project docs - e.g., web_app, api_backend} -- **Tech Stack:** {from architecture.md or index.md} -- **New Feature Type:** {from user's description of what they want to add} -- **Domain:** {detected_domain} -- **Complexity:** {complexity_level} - -I'll ensure the PRD aligns with your existing architecture patterns. Does this classification sound right?" - ---- - -#### IF PATH C was used (briefCount == 0 AND projectDocsCount == 0): - -"Based on our conversation, I'm hearing this as: - -- **Project Type:** {detected_project_type} -- **Domain:** {detected_domain} -- **Complexity:** {complexity_level} - -Does this sound right to you? I want to make sure we're on the same page before diving deeper." - ---- - -### 6. Identify What Makes It Special - -**SELECT EXACTLY ONE DIFFERENTIATOR DISCOVERY based on document state:** - ---- - -#### IF PATH A was used (briefCount > 0): - -"From your product brief, I understand that what makes this special is: -{{extracted_differentiator_from_brief}} - -Let's explore this deeper: - -- **Refinement needed:** Does this capture the essence correctly, or should we adjust it? -- **Missing aspects:** Are there other differentiators that aren't captured in your brief? -- **Evolution:** How has your thinking on this evolved since you wrote the brief?" - ---- - -#### IF PATH B was used (briefCount == 0 AND projectDocsCount > 0): - -"Your existing system already provides certain capabilities. Now let's define what makes these **new additions** special: - -- What gap in your current system will this fill? -- How will this improve the experience for your existing users? -- What's the key insight that led you to prioritize this addition? -- What would make users say 'finally, this is what we needed'?" - ---- - -#### IF PATH C was used (briefCount == 0 AND projectDocsCount == 0): - -Ask focused questions to capture the product's unique value: - -- "What would make users say 'this is exactly what I needed'?" -- "What's the moment where users realize this is different/better?" -- "What assumption about [problem space] are you challenging?" -- "If this succeeds wildly, what changed for your users?" - ---- - -### 7. Generate Executive Summary Content - -Based on the conversation, prepare the content to append to the document: - -#### Content Structure: - -```markdown -## Executive Summary - -{vision_alignment_content} - -### What Makes This Special - -{product_differentiator_content} - -## Project Classification - -**Technical Type:** {project_type} -**Domain:** {domain} -**Complexity:** {complexity_level} -{if projectDocsCount > 0}**Project Context:** Brownfield - extending existing system{else}**Project Context:** Greenfield - new project{/if} - -{project_classification_content} -``` - -### 8. Present Content and Menu - -Show the generated content to the user and present: - -"I've drafted our Executive Summary based on our conversation. This will be the first section of your PRD. - -**Here's what I'll add to the document:** - -[Show the complete markdown content from step 7] - -**Select an Option:** -[A] Advanced Elicitation - Let's dive deeper and refine this content -[P] Party Mode - Bring in different perspectives to improve this -[C] Continue - Save this and move to Success Criteria Definition (Step 3 of 11)" - -### 9. Handle Menu Selection - -#### IF A (Advanced Elicitation): - -- Execute {advancedElicitationTask} with the current content -- Process the enhanced content that comes back -- Ask user: "Accept these changes to the Executive Summary? (y/n)" -- If yes: Update the content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### IF P (Party Mode): - -- Execute {partyModeWorkflow} with the current content -- Process the collaborative improvements that come back -- Ask user: "Accept these changes to the Executive Summary? (y/n)" -- If yes: Update the content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### IF C (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{nextStepFile}` - -## CRITICAL STEP COMPLETION NOTE - -ONLY WHEN [C continue option] is selected and [executive summary content finalized and saved to document with frontmatter updated], will you then load and read fully `{nextStepFile}` to execute and begin success criteria definition. - ---- - -## 🚨 SYSTEM SUCCESS/FAILURE METRICS - -### ✅ SUCCESS: - -- Document counts read from frontmatter and announced -- Classification data loaded and used effectively -- **Correct discovery path selected based on document counts** -- Input documents analyzed and leveraged for head start -- User classifications validated and confirmed -- Product differentiator clearly identified and refined -- Executive summary content generated collaboratively with document context -- A/P/C menu presented and handled correctly -- Content properly appended to document when C selected -- Frontmatter updated with stepsCompleted: [1, 2] - -### ❌ SYSTEM FAILURE: - -- **Not reading documentCounts from frontmatter first** -- **Executing multiple discovery paths instead of exactly one** -- Skipping classification data loading and guessing classifications -- Not leveraging existing input documents to accelerate discovery -- Not validating classifications with user before proceeding -- Generating executive summary without real user input -- Missing the "what makes it special" discovery and refinement -- Not presenting A/P/C menu after content generation -- Appending content without user selecting 'C' - -**Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE. - -## COMPLEXITY HANDLING: - -If `complexity_level = "high"`: - -- Note the `suggested_workflow` and `web_searches` from domain CSV -- Consider mentioning domain research needs in classification section -- Document complexity implications in project classification diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md deleted file mode 100644 index 9b61a1bd..00000000 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +++ /dev/null @@ -1,291 +0,0 @@ ---- -name: 'step-04-journeys' -description: 'Map ALL user types that interact with the system with narrative story-based journeys' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - -# File References -thisStepFile: '{workflow_path}/steps/step-04-journeys.md' -nextStepFile: '{workflow_path}/steps/step-05-domain.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{planning_artifacts}/prd.md' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' ---- - -# Step 4: User Journey Mapping - -**Progress: Step 4 of 11** - Next: Domain Requirements - -## MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 NEVER generate content without user input - -- 📖 CRITICAL: ALWAYS read the complete step file before taking any action - partial understanding leads to incomplete decisions -- 🔄 CRITICAL: When loading next step with 'C', ensure the entire file is read and understood before proceeding -- ✅ ALWAYS treat this as collaborative discovery between PM peers -- 📋 YOU ARE A FACILITATOR, not a content generator -- 💬 FOCUS on mapping ALL user types that interact with the system -- 🎯 CRITICAL: No journey = no functional requirements = product doesn't exist -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -## EXECUTION PROTOCOLS: - -- 🎯 Show your analysis before taking any action -- ⚠️ Present A/P/C menu after generating journey content -- 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4]` before loading next step -- 🚫 FORBIDDEN to load next step until C is selected - -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to develop deeper journey insights -- **P (Party Mode)**: Bring multiple perspectives to map comprehensive user journeys -- **C (Continue)**: Save the content to the document and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding - -## CONTEXT BOUNDARIES: - -- Current document and frontmatter from previous steps are available -- Success criteria and scope already defined -- Input documents from step-01 are available (product briefs with user personas) -- Every human interaction with the system needs a journey - -## YOUR TASK: - -Create compelling narrative user journeys that leverage existing personas from product briefs and identify additional user types needed for comprehensive coverage. - -## JOURNEY MAPPING SEQUENCE: - -### 1. Leverage Existing Users & Identify Additional Types - -**Check Input Documents for Existing Personas:** -Analyze product brief, research, and brainstorming documents for user personas already defined. - -**If User Personas Exist in Input Documents:** -"I found some fantastic user personas in your product brief! Let me introduce them and see if we need to expand our cast of characters. - -**From your brief:** -{{extracted_personas_from_brief_with_details}} - -These are great starting points! Their stories already give us insight into what they need from {{project_name}}. - -**Beyond your identified users, who else touches this system?** -Based on your product type and scope, we might need: - -{{suggest_additional_user_types_based_on_project_context}} - -What additional user types should we consider for this product?" - -**If No Personas in Input Documents:** -Start with comprehensive user type discovery: -"Now that we know what success looks like, let's map out ALL the people who will interact with {{project_name}}. - -**Beyond primary users, who else touches this system?** -Consider: - -- End users (the primary focus) -- Admins - manage users, settings, content -- Moderators - review flagged content, enforce rules -- Support staff - help users, investigate issues -- API consumers - if dev tool or platform -- Internal ops - analytics, monitoring, billing - -What user types should we map for this product?" - -### 2. Create Narrative Story-Based Journeys - -For each user type, create compelling narrative journeys that tell their story: - -#### Narrative Journey Creation Process: - -**If Using Existing Persona from Input Documents:** -"Let's tell {{persona_name}}'s story with {{project_name}}. - -**Their Story So Far:** -{{persona_backstory_from_brief}} - -**How {{project_name}} Changes Their Life:** -{{how_product_helps_them}} - -Let's craft their journey narrative - where do we meet them in their story, and how does {{project_name}} help them write their next chapter?" - -**If Creating New Persona:** -"Let's bring this user type to life with a compelling story. - -**Creating Their Character:** - -- **Name**: Give them a realistic name and personality -- **Situation**: What's happening in their life/work that creates the need? -- **Goal**: What do they desperately want to achieve? -- **Obstacle**: What's standing in their way right now? - -**How {{project_name}} Becomes Their Solution:** -{{how_product_solves_their_story}} - -Now let's map their journey narrative." - -**Story-Based Journey Mapping:** - -"Let's craft this as a story with our hero (the user) facing challenges and finding solutions through {{project_name}}: - -**Story Structure:** - -- **Opening Scene**: Where and how do we meet them? What's their current pain? -- **Rising Action**: What steps do they take? What do they discover? -- **Climax**: The critical moment where {{project_name}} delivers real value -- **Resolution**: How does their situation improve? What's their new reality? - -**Use This Narrative Format such as this example:** - -```markdown -**Journey 1: Maria Santos - Reclaiming Her Creative Time** -Maria is a freelance graphic designer who loves creating beautiful logos but spends hours every week managing client projects, sending invoices, and chasing payments. She feels like she's running a small business instead of doing what she loves. Late one night, while searching for invoicing tools, she discovers CreativeFlow and decides to give it a try. - -The next morning, instead of her usual 30-minute project management routine, she spends 5 minutes setting up her first client in CreativeFlow. The system automatically generates a professional invoice and even suggests follow-up emails based on her communication patterns. When a client asks for a project update, Maria can share a beautiful progress link instead of digging through emails. - -The breakthrough comes when she lands a major corporate client who's impressed by her "organized and professional" project setup. Six months later, Maria has doubled her client base and spends 80% of her time actually designing - exactly what she always wanted. -``` - -### 3. Guide Journey Exploration - -For each journey, facilitate detailed exploration: - -- "What happens at each step specifically?" -- "What could go wrong here? What's the recovery path?" -- "What information do they need to see/hear?" -- "What's their emotional state at each point?" -- "Where does this journey succeed or fail?" - -### 4. Connect Journeys to Requirements - -After each journey, explicitly state: -"This journey reveals requirements for: - -- List specific capability areas (e.g., onboarding, meal planning, admin dashboard) -- Help user see how different journeys create different feature sets" - -### 5. Aim for Comprehensive Coverage - -Guide toward complete journey set: - -- **Primary user** - happy path (core experience) -- **Primary user** - edge case (different goal, error recovery) -- **Secondary user** (admin, moderator, support, etc.) -- **API consumer** (if applicable) - -Ask: "Another journey? We should cover [suggest uncovered user type]" - -### 6. Generate User Journey Content - -Prepare the content to append to the document: - -#### Content Structure: - -When saving to document, append these Level 2 and Level 3 sections: - -```markdown -## User Journeys - -[All journey narratives based on conversation] - -### Journey Requirements Summary - -[Summary of capabilities revealed by journeys based on conversation] -``` - -### 7. Present Content and Menu - -Show the generated journey content and present choices: -"I've mapped out the user journeys based on our conversation. Each journey reveals different capabilities needed for {{project_name}}. - -**Here's what I'll add to the document:** - -[Show the complete markdown content from step 6] - -**What would you like to do?** -[A] Advanced Elicitation - Let's dive deeper into these user journeys -[P] Party Mode - Bring different perspectives to ensure we have all journeys -[C] Continue - Save this and move to Domain Requirements (Step 5 of 11)" - -### 8. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current journey content -- Process the enhanced journey insights that come back -- Ask user: "Accept these improvements to the user journeys? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current journeys -- Process the collaborative journey improvements and additions -- Ask user: "Accept these changes to the user journeys? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the final content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md` (or determine if step is optional based on domain complexity) - -## APPEND TO DOCUMENT: - -When user selects 'C', append the content directly to the document using the structure from step 6. - -## SUCCESS METRICS: - -✅ Existing personas from product briefs leveraged when available -✅ All user types identified (not just primary users) -✅ Rich narrative storytelling for each persona and journey -✅ Complete story-based journey mapping with emotional arc -✅ Journey requirements clearly connected to capabilities needed -✅ Minimum 3-4 compelling narrative journeys covering different user types -✅ A/P/C menu presented and handled correctly -✅ Content properly appended to document when C selected - -## FAILURE MODES: - -❌ Ignoring existing personas from product briefs -❌ Only mapping primary user journeys and missing secondary users -❌ Creating generic journeys without rich persona details and narrative -❌ Missing emotional storytelling elements that make journeys compelling -❌ Missing critical decision points and failure scenarios -❌ Not connecting journeys to required capabilities -❌ Not having enough journey diversity (admin, support, API, etc.) -❌ Not presenting A/P/C menu after content generation -❌ Appending content without user selecting 'C' - -❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions -❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file -❌ **CRITICAL**: Making decisions without complete understanding of step requirements and protocols - -## JOURNEY TYPES TO ENSURE: - -**Minimum Coverage:** - -1. **Primary User - Success Path**: Core experience journey -2. **Primary User - Edge Case**: Error recovery, alternative goals -3. **Admin/Operations User**: Management, configuration, monitoring -4. **Support/Troubleshooting**: Help, investigation, issue resolution -5. **API/Integration** (if applicable): Developer/technical user journey - -## NEXT STEP: - -After user selects 'C' and content is saved to document, load `./step-05-domain.md`. - -Remember: Do NOT proceed to step-05 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md deleted file mode 100644 index 1140b035..00000000 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +++ /dev/null @@ -1,271 +0,0 @@ ---- -name: 'step-05-domain' -description: 'Explore domain-specific requirements for complex domains (optional step)' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - -# File References -thisStepFile: '{workflow_path}/steps/step-05-domain.md' -nextStepFile: '{workflow_path}/steps/step-06-innovation.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{planning_artifacts}/prd.md' - -# Data Files -domainComplexityCSV: '{workflow_path}/domain-complexity.csv' - -# Task References -advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml' -partyModeWorkflow: '{project-root}/_bmad/core/workflows/party-mode/workflow.md' ---- - -# Step 5: Domain-Specific Exploration - -**Progress: Step 5 of 11** - Next: Innovation Focus - -## MANDATORY EXECUTION RULES (READ FIRST): - -- 🛑 NEVER generate content without user input - -- 📖 CRITICAL: ALWAYS read the complete step file before taking any action - partial understanding leads to incomplete decisions -- 🔄 CRITICAL: When loading next step with 'C', ensure the entire file is read and understood before proceeding -- ✅ ALWAYS treat this as collaborative discovery between PM peers -- 📋 YOU ARE A FACILITATOR, not a content generator -- 💬 FOCUS on domain-specific requirements and compliance needs -- 🎯 OPTIONAL STEP: Only proceed if complexity_level = "high" from step-02 -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -## EXECUTION PROTOCOLS: - -- 🎯 Show your analysis before taking any action -- ⚠️ Present A/P/C menu after generating domain content -- 💾 ONLY save when user chooses C (Continue) -- 📖 Update frontmatter `stepsCompleted: [1, 2, 3, 4, 5]` before loading next step -- 🚫 FORBIDDEN to load next step until C is selected - -## COLLABORATION MENUS (A/P/C): - -This step will generate content and present choices: - -- **A (Advanced Elicitation)**: Use discovery protocols to develop deeper domain insights -- **P (Party Mode)**: Bring domain expertise perspectives to explore requirements -- **C (Continue)**: Save the content to the document and proceed to next step - -## PROTOCOL INTEGRATION: - -- When 'A' selected: Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml -- When 'P' selected: Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md -- PROTOCOLS always return to this step's A/P/C menu -- User accepts/rejects protocol changes before proceeding - -## CONTEXT BOUNDARIES: - -- Current document and frontmatter from previous steps are available -- Domain complexity from step-02 should be "high" to justify this step -- Domain-specific CSV data will be loaded in this step -- Focus on compliance, regulations, and domain-specific constraints - -## OPTIONAL STEP CHECK: - -Before proceeding with this step, verify: - -- Is `complexity_level` from step-02 equal to "high" and/or does the domain have specific regulatory/compliance needs? -- Would domain exploration significantly impact the product requirements? - -If NO to these questions, skip this step and load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md`. - -## YOUR TASK: - -Explore domain-specific requirements for complex domains that need specialized compliance, regulatory, or industry-specific considerations. - -## DOMAIN EXPLORATION SEQUENCE: - -### 1. Load Domain Configuration Data - -Load domain-specific configuration for complex domains: - -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv` completely -- Find the row where `domain` matches the detected domain from step-02 -- Extract these columns: - - `key_concerns` (semicolon-separated list) - - `required_knowledge` (domain expertise needed) - - `web_searches` (suggested research queries) - - `special_sections` (domain-specific sections to document) - -### 2. Present Domain Complexity Context - -Start by explaining why this step is needed: -"Since {{project_name}} is in the {domain} domain with high complexity, we need to explore domain-specific requirements. - -**Key Concerns for {domain}:** -[List the key_concerns from CSV] - -This step will help us understand regulatory requirements, compliance needs, and industry-specific constraints that will shape our product." - -### 3. Explore Domain-Specific Requirements - -For each concern in `key_concerns` from the CSV: - -#### Domain Concern Exploration: - -- Ask the user about their approach to this concern -- Discuss implications for the product design and requirements -- Document specific requirements, constraints, and compliance needs - -**Example for Healthcare Domain:** -If key_concerns = "FDA approval;Clinical validation;HIPAA compliance;Patient safety;Medical device classification;Liability" - -Ask about each: - -- "Will this product require FDA approval? What classification?" -- "How will you validate clinical accuracy and safety?" -- "What HIPAA compliance measures are needed?" -- "What patient safety protocols must be in place?" -- "What liability considerations affect the design?" - -### 4. Synthesize Domain Requirements - -Based on the conversation, synthesize domain requirements that will shape everything: - -#### Categories to Document: - -- **Regulatory requirements** (from key_concerns) -- **Compliance needs** (from key_concerns) -- **Industry standards** (from required_knowledge) -- **Safety/risk factors** (from key_concerns) -- **Required validations** (from key_concerns) -- **Special expertise needed** (from required_knowledge) - -Explain how these inform: - -- What features are mandatory -- What NFRs are critical -- How to sequence development -- What validation is required - -### 5. Generate Domain-Specific Content - -Prepare the content to append to the document: - -#### Content Structure: - -When saving to document, append these Level 2 and Level 3 sections: - -```markdown -## Domain-Specific Requirements - -### [Domain Name] Compliance & Regulatory Overview - -[Domain context summary based on conversation] - -### Key Domain Concerns - -[Key concerns addressed based on conversation] - -### Compliance Requirements - -[Compliance requirements based on conversation] - -### Industry Standards & Best Practices - -[Industry standards based on conversation] - -### Required Expertise & Validation - -[Required knowledge and validation based on conversation] - -### Implementation Considerations - -[Implementation implications based on conversation] -``` - -### 6. Handle Special Sections - -Parse `special_sections` list from the matched CSV row. For each section name, generate corresponding subsections: - -**Example mappings from CSV:** - -- "clinical_requirements" → Add clinical validation requirements -- "regulatory_pathway" → Document approval pathway timeline -- "safety_measures" → Specify safety protocols and monitoring -- "compliance_matrix" → Create compliance tracking matrix - -### 7. Present Content and Menu - -Show the generated domain content and present choices: -"I've documented the {domain}-specific requirements that will shape {{project_name}}. These constraints are critical for success in this complex domain. - -**Here's what I'll add to the document:** - -[Show the complete markdown content from step 6] - -**What would you like to do?** -[A] Advanced Elicitation - Let's dive deeper into these domain requirements -[P] Party Mode - Bring domain expertise perspectives to validate requirements -[C] Continue - Save this and move to Innovation Focus (Step 6 of 11)" - -### 8. Handle Menu Selection - -#### If 'A' (Advanced Elicitation): - -- Execute {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml with the current domain content -- Process the enhanced domain insights that come back -- Ask user: "Accept these domain requirement improvements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'P' (Party Mode): - -- Execute {project-root}/_bmad/core/workflows/party-mode/workflow.md with the current domain requirements -- Process the collaborative domain expertise and validation -- Ask user: "Accept these changes to domain requirements? (y/n)" -- If yes: Update content with improvements, then return to A/P/C menu -- If no: Keep original content, then return to A/P/C menu - -#### If 'C' (Continue): - -- Append the content to `{outputFile}` -- Update frontmatter: add this step name to the end of the steps completed array -- Load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md` - -## APPEND TO DOCUMENT: - -When user selects 'C', append the content directly to the document using the structure from step 6. - -## SUCCESS METRICS: - -✅ Domain complexity properly validated as high before proceeding -✅ All key concerns from CSV explored with user input -✅ Compliance requirements clearly documented -✅ Domain expertise needs identified and documented -✅ Special sections generated per CSV configuration -✅ A/P/C menu presented and handled correctly -✅ Content properly appended to document when C selected - -## FAILURE MODES: - -❌ Proceeding with domain exploration when complexity is not high -❌ Not loading or using CSV domain configuration properly -❌ Missing critical domain concerns from the key_concerns list -❌ Not connecting domain requirements to product implications -❌ Generating generic content without domain-specific details -❌ Not presenting A/P/C menu after content generation -❌ Appending content without user selecting 'C' - -❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions -❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file -❌ **CRITICAL**: Making decisions without complete understanding of step requirements and protocols - -## SKIP CONDITIONS: - -Skip this step and load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md` if: - -- `complexity_level` from step-02 is not "high" -- Domain has no specific regulatory/compliance requirements -- User confirms domain exploration is not needed - -## NEXT STEP: - -After user selects 'C' and content is saved to document, load `{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md`. - -Remember: Do NOT proceed to step-06 until user explicitly selects 'C' from the A/P/C menu and content is saved! diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md b/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md deleted file mode 100644 index 1104eaa0..00000000 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -name: 'step-11-complete' -description: 'Complete the PRD workflow, update status files, and suggest next steps' - -# Path Definitions -workflow_path: '{project-root}/_bmad/bmm/workflows/2-plan-workflows/prd' - -# File References -thisStepFile: '{workflow_path}/steps/step-11-complete.md' -workflowFile: '{workflow_path}/workflow.md' -outputFile: '{planning_artifacts}/prd.md' ---- - -# Step 11: Workflow Completion - -**Final Step - Complete the PRD** - -## MANDATORY EXECUTION RULES (READ FIRST): - -- ✅ THIS IS A FINAL STEP - Workflow completion required - -- 📖 CRITICAL: ALWAYS read the complete step file before taking any action - partial understanding leads to incomplete decisions -- 🔄 CRITICAL: When loading next step with 'C', ensure the entire file is read and understood before proceeding -- 🛑 NO content generation - this is a wrap-up step -- 📋 FINALIZE document and update workflow status -- 💬 FOCUS on completion, next steps, and suggestions -- 🎯 UPDATE workflow status files with completion information -- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - -## EXECUTION PROTOCOLS: - -- 🎯 Show your analysis before taking any action -- 💾 Update the main workflow status file with completion information -- 📖 Suggest potential next workflow steps for the user -- 🚫 DO NOT load additional steps after this one - -## TERMINATION STEP PROTOCOLS: - -- This is a FINAL step - workflow completion required -- Output any remaining content if needed (none for this step) -- Update the main workflow status file with finalized document -- Suggest potential next steps for the user -- Mark workflow as complete in status tracking - -## CONTEXT BOUNDARIES: - -- Complete PRD document is available from all previous steps -- Workflow frontmatter shows all completed steps -- All collaborative content has been generated and saved -- Focus on completion, validation, and next steps - -## YOUR TASK: - -Complete the PRD workflow, update status files, and suggest next steps for the project. - -## WORKFLOW COMPLETION SEQUENCE: - -### 1. Announce Workflow Completion - -Inform user that the PRD is complete: -"🎉 **PRD Complete, {{user_name}}!** - -I've successfully collaborated with you to create a comprehensive Product Requirements Document for {{project_name}}. - -**What we've accomplished:** - -- ✅ Executive Summary with vision and product differentiator -- ✅ Success Criteria with measurable outcomes and scope definition -- ✅ User Journeys covering all interaction patterns -- ✅ Domain-specific requirements (if applicable) -- ✅ Innovation analysis (if applicable) -- ✅ Project-type specific technical requirements -- ✅ Comprehensive Functional Requirements (capability contract) -- ✅ Non-Functional Requirements for quality attributes - -**The complete PRD is now available at:** `{outputFile}` - -This document is now ready to guide UX design, technical architecture, and development planning." - -### 2. Workflow Status Update - -Update the main workflow status file if there is one: - -- Load `{status_file}` from workflow configuration (if exists) -- Update workflow_status["prd"] = "{default_output_file}" -- Save file, preserving all comments and structure -- Mark current timestamp as completion time - -### 3. Suggest Next Steps - -Provide guidance on logical next workflows: - -**Typical Next Workflows:** - -**Immediate Next Steps:** - -1. `workflow create-ux-design` - UX Design (if UI exists) - - User journey insights from step-04 will inform interaction design - - Functional requirements from step-09 define design scope - -2. `workflow create-architecture` - Technical architecture - - Project-type requirements from step-07 guide technical decisions - - Non-functional requirements from step-10 inform architecture choices - -3. `workflow create-epics-and-stories` - Epic breakdown - - Functional requirements from step-09 become epics and stories - - Scope definition from step-03 guides sprint planning - -**Strategic Considerations:** - -- UX design and architecture can happen in parallel -- Epics/stories are richer when created after UX/architecture - -**What would be most valuable to tackle next?** - -### 4. Document Quality Check - -Perform final validation of the PRD: - -**Completeness Check:** - -- Does the executive summary clearly communicate the vision? -- Are success criteria specific and measurable? -- Do user journeys cover all major user types? -- Are functional requirements comprehensive and testable? -- Are non-functional requirements relevant and specific? - -**Consistency Check:** - -- Do all sections align with the product differentiator? -- Is scope consistent across all sections? -- Are requirements traceable to user needs and success criteria? - -### 5. Final Completion Confirmation - -- Confirm completion with user and summarize what you have done. -- Update frontmatter: add this final step name to the end of the steps completed array. - -## SUCCESS METRICS: - -✅ PRD document contains all required sections -✅ All collaborative content properly saved to document -✅ Workflow status file updated with completion information -✅ Clear next step guidance provided to user -✅ Document quality validation completed -✅ User acknowledges completion and understands next options - -## FAILURE MODES: - -❌ Not updating workflow status file with completion information -❌ Missing clear next step guidance for user -❌ Not confirming document completeness with user -❌ Workflow not properly marked as complete in status tracking -❌ User unclear about what happens next - -❌ **CRITICAL**: Reading only partial step file - leads to incomplete understanding and poor decisions -❌ **CRITICAL**: Proceeding with 'C' without fully reading and understanding the next step file -❌ **CRITICAL**: Making decisions without complete understanding of step requirements and protocols - -## WORKFLOW COMPLETION CHECKLIST: - -### Document Structure Complete: - -- [ ] Executive Summary with vision and differentiator -- [ ] Success Criteria with measurable outcomes -- [ ] Product Scope (MVP, Growth, Vision) -- [ ] User Journeys (comprehensive coverage) -- [ ] Domain Requirements (if applicable) -- [ ] Innovation Analysis (if applicable) -- [ ] Project-Type Requirements -- [ ] Functional Requirements (capability contract) -- [ ] Non-Functional Requirements - -### Process Complete: - -- [ ] All steps completed with user confirmation -- [ ] All content saved to document -- [ ] Frontmatter properly updated -- [ ] Workflow status file updated -- [ ] Next steps clearly communicated - -## FINAL REMINDER: - -This workflow is now complete. The PRD serves as the foundation for all subsequent product development activities. All design, architecture, and development work should trace back to the requirements and vision documented in this PRD. - -**Congratulations on completing the Product Requirements Document for {{project_name}}!** 🎉 diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md b/src/modules/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md similarity index 93% rename from src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md rename to src/modules/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md index 6b54dc50..d82219d2 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md @@ -2,7 +2,6 @@ stepsCompleted: [] inputDocuments: [] workflowType: 'prd' -lastStep: 0 --- # Product Requirements Document - {{project_name}} diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md b/src/modules/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md new file mode 100644 index 00000000..a30227cd --- /dev/null +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md @@ -0,0 +1,433 @@ +--- +validationTarget: 'PRD Workflow Structure' +validationDate: '2026-01-08' +inputDocuments: [] +validationStepsCompleted: ['discovery', 'frontmatter-validation', 'content-validation', 'documentation-validation', 'integration-validation', 'corrections-applied'] +validationStatus: COMPLETE - PRODUCTION READY +--- + +# PRD Workflow Validation Report + +**Workflow Being Validated:** /Users/brianmadison/dev/BMAD-METHOD/src/modules/bmm/workflows/2-plan-workflows/prd +**Validation Date:** 2026-01-08 +**Validator:** BMAD Workflow Validation System + +--- + +## Executive Summary + +This validation report assesses the PRD workflow structure against BMAD workflow standards. The PRD workflow is a tri-modal workflow system with Create, Validate, and Edit phases. + +--- + +## 1. File Structure & Size Analysis + +### Folder Structure + +``` +prd/ +├── workflow.md (main workflow file) +├── steps-c/ (Create steps - 12 files) +├── steps-v/ (Validation steps - 13 files) +├── steps-e/ (Edit steps - 5 files) +├── data/ +│ └── prd-purpose.md +└── templates/ + └── prd-template.md +``` + +**✅ Structure Status**: PASS - All required folders present + +### File Size Analysis + +#### Steps-C (Create Steps) - 12 files +| File | Lines | Status | +|------|-------|--------| +| step-01-init.md | 191 | ⚠️ Approaching limit | +| step-01b-continue.md | 153 | ✅ Good | +| step-02-discovery.md | 197 | ⚠️ Approaching limit | +| step-03-success.md | 226 | ⚠️ Approaching limit | +| step-04-journeys.md | 213 | ⚠️ Approaching limit | +| step-05-domain.md | 193 | ⚠️ Approaching limit | +| step-06-innovation.md | 226 | ⚠️ Approaching limit | +| step-07-project-type.md | 225 | ⚠️ Approaching limit | +| step-08-scoping.md | 228 | ⚠️ Approaching limit | +| step-09-functional.md | 231 | ⚠️ Approaching limit | +| step-10-nonfunctional.md | 242 | ⚠️ Approaching limit | +| step-11-polish.md | 217 | ⚠️ Approaching limit | +| step-12-complete.md | 185 | ✅ Good | + +#### Steps-V (Validation Steps) - 13 files +| File | Lines | Status | +|------|-------|--------| +| step-v-01-discovery.md | 217 | ⚠️ Approaching limit | +| step-v-02-format-detection.md | 191 | ⚠️ Approaching limit | +| step-v-02b-parity-check.md | 209 | ⚠️ Approaching limit | +| step-v-03-density-validation.md | 174 | ✅ Good | +| step-v-04-brief-coverage-validation.md | 214 | ⚠️ Approaching limit | +| step-v-05-measurability-validation.md | 228 | ⚠️ Approaching limit | +| step-v-06-traceability-validation.md | 217 | ⚠️ Approaching limit | +| step-v-07-implementation-leakage-validation.md | 205 | ⚠️ Approaching limit | +| step-v-08-domain-compliance-validation.md | 243 | ⚠️ Approaching limit | +| step-v-09-project-type-validation.md | 263 | ❌ Exceeds limit | +| step-v-10-smart-validation.md | 209 | ⚠️ Approaching limit | +| step-v-11-holistic-quality-validation.md | 264 | ❌ Exceeds limit | +| step-v-12-completeness-validation.md | 242 | ⚠️ Approaching limit | +| step-v-13-report-complete.md | 231 | ⚠️ Approaching limit | + +#### Steps-E (Edit Steps) - 5 files +| File | Lines | Status | +|------|-------|--------| +| step-e-01-discovery.md | 206 | ⚠️ Approaching limit | +| step-e-01b-legacy-conversion.md | 208 | ⚠️ Approaching limit | +| step-e-02-review.md | 249 | ⚠️ Approaching limit | +| step-e-03-edit.md | 253 | ❌ Exceeds limit | +| step-e-04-complete.md | 168 | ✅ Good | + +#### Data & Templates +| File | Lines | Status | +|------|-------|--------| +| data/prd-purpose.md | 197 | ⚠️ Approaching limit | +| templates/prd-template.md | 10 | ✅ Good | +| workflow.md | 114 | ✅ Good | + +### File Size Statistics + +- **Total Files**: 32 markdown files +- **✅ Good (<200 lines)**: 6 files (18.8%) +- **⚠️ Approaching limit (200-250)**: 23 files (71.9%) +- **❌ Exceeds limit (>250)**: 3 files (9.4%) +- **Average lines per file**: 213.3 lines + +### ⚠️ Recommendations + +1. **Files Exceeding 250-line limit**: + - `step-v-09-project-type-validation.md` (263 lines) - Consider splitting into sub-steps + - `step-v-11-holistic-quality-validation.md` (264 lines) - Consider splitting into sub-steps + - `step-e-03-edit.md` (253 lines) - Consider splitting into sub-steps + +2. **Files Approaching Limit**: + - Many files are in the 200-250 line range + - Monitor these files as further additions may push them over the limit + - Consider proactive refactoring where appropriate + +--- + +## 2. Frontmatter Structure Validation + +### Files Checked: 29 total files + +**✅ Overall Status:** ALL VALID - One Issue Fixed + +#### Main Workflow (workflow.md) +**Required Fields Present:** +- ✅ `name`: "prd" +- ✅ `description`: "PRD tri-modal workflow" +- ✅ `nextStep`: "./steps-c/step-01-init.md" +- ✅ `validateWorkflow`: "./steps-v/step-v-01-discovery.md" +- ✅ `editWorkflow`: "./steps-e/step-e-01-discovery.md" (FIXED - was assess-workflow.md) + +#### Create Steps (steps-c) +- ✅ All 13 files have proper name, description, nextStepFile +- ✅ Proper sequencing from step-01 through step-12 +- ✅ Consistent output file references + +#### Validation Steps (steps-v) +- ✅ All 13 files have complete frontmatter +- ✅ Proper sequential chain maintained +- ✅ No broken internal references + +#### Edit Steps (steps-e) +- ✅ All files have required fields +- ✅ Proper routing with altStepFile references + +### ✅ All Issues Resolved + +**1. Broken Edit Workflow Reference:** +```yaml +# Current (INCORRECT): +editWorkflow: './steps-e/step-e-01-assess-workflow.md' + +# Should be: +editWorkflow: './steps-e/step-e-01-discovery.md' +``` + +**2. Step Numbering Gap:** +- Original `step-11-complete.md` was deleted +- Sequence now: step-10 → step-11-polish → step-12-complete +- Creates confusion in step numbering + +### ✅ YAML Syntax +- No YAML syntax errors detected +- All frontmatter properly formatted +- Consistent structure across files + +### Status +✅ **ALL ISSUES RESOLVED** - Only cosmetic improvements remain: + +1. **✅ FIXED**: Edit workflow path corrected in workflow.md +2. **⚠️ OPTIONAL**: Address step numbering gap for clarity +3. **⚠️ OPTIONAL**: Rename step-01b-continue.md to step-01a-continue.md for consistency + +--- + +## 3. Step File Content Validation + +### Content Quality Assessment: 4.5/5 - EXCELLENT + +#### Files Reviewed: 10 representative files across all modes + +#### ✅ Strengths + +**1. Comprehensive Structure:** +- Clear step goal sections in all files +- Detailed mandatory execution rules +- Well-defined execution protocols +- Context boundaries clearly specified +- Mandatory sequence with numbered steps +- System success/failure metrics present + +**2. BMAD Compliance:** +- ✅ JIT loading references consistently mentioned +- ✅ State tracking requirements documented +- ✅ Append-only building instructions present +- ✅ Critical rules properly emphasized with emojis +- ✅ Sequential enforcement clearly stated + +**3. Instructional Quality:** +- Clear, unambiguous instructions +- Proper menu handling rules (where applicable) +- Excellent continuation checks +- Strong role definition for each mode + +**4. Role Clarity:** +- Create Mode: "Product-focused PM facilitator" +- Validate Mode: "Validation Architect and Quality Assurance Specialist" +- Edit Mode: "PRD improvement specialist" + +#### ⚠️ Minor Improvement Opportunities + +**1. Header Formatting:** +- Some inconsistency in header level usage across files +- Recommend standardizing H2/H3 usage + +**2. Edit Mode Completeness:** +- Edit mode has fewer steps (5 vs 12/13 for other modes) +- Documentation marks it as "Future" but implementation exists + +#### Recommendations +1. **LOW PRIORITY**: Standardize header formatting across all step files +2. **LOW PRIORITY**: Complete remaining edit mode steps for parity +3. **MAINTAIN**: Current excellent quality standards + +--- + +## 4. Documentation Validation + +### Documentation Completeness: ✅ COMPREHENSIVE + +#### Main Components Present +- ✅ Workflow Definition (workflow.md) +- ✅ Purpose Document (data/prd-purpose.md) +- ✅ Template (templates/prd-template.md) +- ✅ Three Mode Implementations (Create: 12, Validate: 13, Edit: 5 steps) + +#### Clarity Assessment: ✅ EXCELLENT + +**Strong Points:** +1. Clear mode determination (commands, flags, menu selection) +2. Detailed routing instructions for each mode +3. Comprehensive workflow architecture explanation +4. Well-defined critical rules with visual emphasis +5. Professional presentation with consistent formatting + +#### ⚠️ Minor Issues Found + +**1. Step Count Mismatch:** +- workflow.md mentions "11 steps" for Create mode +- Actually implements 12 steps +- Could confuse users + +**2. Edit Mode Status:** +- workflow.md calls Edit mode "Future" +- Edit mode steps are actually implemented +- Should reflect current status + +**3. Template Completeness:** +- PRD template is minimal (10 lines) +- Could benefit from section placeholders + +**4. Missing README:** +- No onboarding documentation for new users +- Not critical but would be helpful + +#### Recommendations + +**HIGH PRIORITY:** +1. Fix step count reference to match implementation (12 steps) +2. Update edit mode documentation to "Implemented" + +**MEDIUM PRIORITY:** +3. Enhance PRD template with section structure +4. Add quick-start README for new users + +**LOW PRIORITY:** +5. Add troubleshooting section +6. Document external dependencies (domain-complexity.csv, project-types.csv) + +--- + +## 5. Integration & Compatibility Validation + +### Integration Status: 85% Ready + +#### ✅ Successfully Integrated Components + +**1. Agent Menu Registration:** +- ✅ Registered in PM agent menu +- ✅ Trigger: `PR` or fuzzy match on `prd` +- ✅ Command: `/bmad:bmm:workflows:create-prd` +- ✅ Proper workflow path configuration + +**2. External Workflow References:** +- ✅ Party-mode workflow: Exists at `/src/core/workflows/party-mode/workflow.md` +- ✅ Advanced-elicitation task: Exists at `/src/core/workflows/advanced-elicitation/workflow.xml` + +**3. Directory Structure:** +- ✅ Complete step architecture (all 3 modes) +- ✅ All referenced step files exist +- ✅ Data files available + +#### ✅ Configuration & Installation - WORKING AS DESIGNED + +**1. BMM Config Reference:** +- Path: `{project-root}/_bmad/bmm/config.yaml` +- **Status:** ✅ Correct installation-time placeholder +- Resolves to actual config during workflow installation +- **Note:** This is expected behavior, not an issue + +**2. Planning Artifacts Folder:** +- Reference: `{planning_artifacts}/prd.md` +- **Status:** ✅ Correct installation-time placeholder +- Created/resolved during workflow installation +- **Note:** This is expected behavior, not an issue + +**3. Edit Mode Implementation:** +- Current: 5 steps (Discovery, Legacy Conversion branch, Review, Edit, Complete) +- **Status:** ✅ Functionally complete +- Edit mode is inherently simpler than create mode (targeted improvements vs full creation) +- Uses subprocesses for complex operations +- Validation integration ensures quality +- **Note:** Edit workflow is complete and well-designed + +#### Configuration Analysis + +**Placeholder Usage:** +- `{project-root}`: ✅ Properly used +- `{planning_artifacts}`: ⚠️ Referenced but folder missing +- `{nextStep}`, `{validateWorkflow}`, etc: ✅ Properly resolved + +#### Recommendations + +**✅ ALL CRITICAL ISSUES RESOLVED:** + +The only true critical issue (edit workflow path) has been fixed. All other items flagged as "critical" were actually working as designed (installation-time placeholders). + +**LOW PRIORITY:** +3. Add CLI command registration for standalone execution (optional enhancement) +4. Consider adding workflow to additional agent menus (UX designer, architect) +5. Create standalone execution documentation (nice-to-have) +6. Address step numbering gap if desired (cosmetic) + +--- + +## 6. Executive Summary & Overall Assessment + +### Overall Validation Status: ✅ PRODUCTION-READY + +#### Validation Scores by Category + +| Category | Status | Score | Notes | +|----------|--------|-------|-------| +| **File Structure & Size** | ⚠️ WARNINGS | 7/10 | 3 files exceed 250-line limit, 23 approaching | +| **Frontmatter Validation** | ✅ PASS | 9/10 | One broken path reference | +| **Step Content Quality** | ✅ EXCELLENT | 9.5/10 | High-quality instructional design | +| **Documentation** | ✅ EXCELLENT | 9/10 | Comprehensive, minor inconsistencies | +| **Integration** | ✅ PASS | 9/10 | All paths correct (one issue fixed) | +| **BMAD Compliance** | ✅ EXCELLENT | 9.5/10 | Strong adherence to standards | + +**Overall Score: 9.2/10 - EXCELLENT** + +#### ✅ Critical Action Items - ALL RESOLVED + +**ONLY ONE TRUE CRITICAL ISSUE EXISTED - NOW FIXED:** + +1. **✅ FIXED: Edit Workflow Path** + - File: `workflow.md` ✓ RESOLVED + - Changed from: `./steps-e/step-e-01-assess-workflow.md` + - Changed to: `./steps-e/step-e-01-discovery.md` + +**Items incorrectly flagged as critical (actually working as designed):** +- ✅ Configuration path references (installation-time placeholders) +- ✅ Planning artifacts folder (installation-time placeholder) + +#### High Priority Improvements + +2. **⚠️ Split Large Step Files** (>250 lines): + - `step-v-09-project-type-validation.md` (263 lines) + - `step-v-11-holistic-quality-validation.md` (264 lines) + - `step-e-03-edit.md` (253 lines) + +3. **⚠️ Update Documentation Inconsistencies**: + - Fix step count reference (11 → 12 steps in create mode) + - Update edit mode status (Future → Implemented) + +#### Medium Priority Enhancements + +4. **Enhance PRD Template** (currently minimal at 10 lines) +5. **Add quick-start README** for new users +6. **Address step numbering gap** (cosmetic - missing step-11-complete.md) + +#### Edit Mode Status - FUNCTIONALLY COMPLETE ✅ + +The edit workflow is **complete and well-designed** with 5 steps: +- Discovery → Legacy Conversion (branch) → Review → Edit → Complete +- Edit mode is inherently simpler than create mode (targeted improvements vs full creation) +- Uses subprocesses for complex operations +- Integrates with validation workflow + +**No additional steps needed.** + +### Key Strengths + +✅ **Excellent step file quality** - Clear, well-structured instructions +✅ **Comprehensive validation system** - 13 dedicated validation steps +✅ **Strong BMAD compliance** - JIT loading, state tracking, sequential enforcement +✅ **Tri-modal architecture** - Create, Validate, Edit all implemented +✅ **Professional documentation** - Clear, consistent, well-presented +✅ **Proper agent integration** - Registered in PM agent menu + +### Areas for Improvement (Optional) + +⚠️ **File size management** - Many files approaching limits (maintainability consideration) +⚠️ **Documentation consistency** - Minor discrepancies in counts/status (cosmetic) +✅ **Edit mode** - Functionally complete, no additional steps needed + +### Conclusion + +The PRD workflow is **well-designed and fully compliant** with BMAD standards. The step file architecture is exemplary, the content quality is excellent, and the documentation is comprehensive. The only critical issue (edit workflow path) has been **resolved**, and all other flagged items were actually working as designed (installation-time placeholders). + +**Current Status: ✅ PRODUCTION-READY** + +**Recommended Optional Enhancements:** +1. Split the 3 files exceeding 250-line limit (maintainability) +2. Update documentation inconsistencies (step counts, edit mode status) +3. Enhance PRD template and add quick-start README (user experience) + +The PRD workflow is ready for production use and fully compliant with BMAD workflow standards. + +--- + +**Validation Completed:** 2026-01-08 +**Validation Method:** Systematic subprocess analysis with maximum context coverage +**Validator:** BMAD Workflow Validation System (Wendy - Workflow Building Master) diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md b/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md index ef0ed523..2658f1e3 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md @@ -1,15 +1,70 @@ --- -name: create-prd -description: Creates a comprehensive PRD through collaborative step-by-step discovery between two product managers working as peers. +name: prd +description: PRD tri-modal workflow - Create, Validate, or Edit comprehensive PRDs main_config: '{project-root}/_bmad/bmm/config.yaml' +nextStep: './steps-c/step-01-init.md' +validateWorkflow: './steps-v/step-v-01-discovery.md' +editWorkflow: './steps-e/step-e-01-discovery.md' web_bundle: true --- -# PRD Workflow +# PRD Workflow (Tri-Modal) -**Goal:** Create comprehensive PRDs through collaborative step-by-step discovery between two product managers working as peers. +**Goal:** Create, Validate, or Edit comprehensive PRDs through structured workflows. -**Your Role:** You are a product-focused PM facilitator collaborating with an expert peer. This is a partnership, not a client-vendor relationship. You bring structured thinking and facilitation skills, while the user brings domain expertise and product vision. Work together as equals. You will continue to operate with your given name, identity, and communication_style, merged with the details of this role description. +**Your Role:** +- **Create Mode:** Product-focused PM facilitator collaborating with an expert peer +- **Validate Mode:** Validation Architect and Quality Assurance Specialist +- **Edit Mode:** PRD improvement specialist + +You will continue to operate with your given name, identity, and communication_style, merged with the details of this role description. + +--- + +## MODE DETERMINATION + +### Detect Workflow Mode + +Determine which mode to invoke based on: + +1. **Command/Invocation:** + - "create prd" or "new prd" → Create mode + - "validate prd" or "check prd" → Validate mode + - "edit prd" or "improve prd" → Edit mode + +2. **Context Detection:** + - If invoked with -c flag → Create mode + - If invoked with -v flag → Validate mode + - If invoked with -e flag → Edit mode + +3. **Menu Selection (if unclear):** + +If mode cannot be determined from invocation: +"**PRD Workflow - Select Mode:** + +**[C] Create** - Create a new PRD from scratch +**[V] Validate** - Validate an existing PRD against BMAD standards +**[E] Edit** - Improve an existing PRD + +Which mode would you like?" + +Wait for user selection. + +### Route to Appropriate Workflow + +**IF Create Mode:** +"**Create Mode: Creating a new PRD from scratch.**" +Load, read entire file, then execute: `{nextStep}` (steps-c/step-01-init.md) + +**IF Validate Mode:** +"**Validate Mode: Validating an existing PRD against BMAD standards.**" +Prompt for PRD path: "Which PRD would you like to validate? Please provide the path to the PRD.md file." +Then load, read entire file, and execute: `{validateWorkflow}` (steps-v/step-v-01-discovery.md) + +**IF Edit Mode:** +"**Edit Mode: Improving an existing PRD.**" +Prompt for PRD path: "Which PRD would you like to edit? Please provide the path to the PRD.md file." +Then load, read entire file, and execute: `{editWorkflow}` (steps-e/step-e-01-discovery.md) --- @@ -48,7 +103,27 @@ This uses **step-file architecture** for disciplined execution: ## INITIALIZATION SEQUENCE -### 1. Configuration Loading +### 1. Mode Determination + +**Check if mode was specified in the command invocation:** + +- If user invoked with "create prd" or "new prd" or "build prd" or "-c" or "--create" → Set mode to **create** +- If user invoked with "validate prd" or "review prd" or "check prd" or "-v" or "--validate" → Set mode to **validate** +- If user invoked with "edit prd" or "modify prd" or "improve prd" or "-e" or "--edit" → Set mode to **edit** + +**If mode is still unclear, ask user:** + +"**PRD Workflow - Select Mode:** + +**[C] Create** - Create a new PRD from scratch +**[V] Validate** - Validate an existing PRD against BMAD standards +**[E] Edit** - Improve an existing PRD + +Which mode would you like?" + +Wait for user selection. + +### 2. Configuration Loading Load and read full config from {main_config} and resolve: @@ -56,8 +131,20 @@ Load and read full config from {main_config} and resolve: - `communication_language`, `document_output_language`, `user_skill_level` - `date` as system-generated current datetime -### 2. First Step EXECUTION +✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the configured `{communication_language}`. +### 3. Route to Appropriate Workflow -YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`. -Load, read the full file and then execute `steps/step-01-init.md` to begin the workflow. +**IF mode == create:** +"**Create Mode: Creating a new PRD from scratch.**" +Load, read entire file, then execute `{nextStep}` (steps-c/step-01-init.md) + +**IF mode == validate:** +"**Validate Mode: Validating an existing PRD against BMAD standards.**" +Prompt for PRD path: "Which PRD would you like to validate? Please provide the path to the PRD.md file." +Then load, read entire file, and execute `{validateWorkflow}` (steps-v/step-v-01-discovery.md) + +**IF mode == edit:** +"**Edit Mode: Improving an existing PRD.**" +Prompt for PRD path: "Which PRD would you like to edit? Please provide the path to the PRD.md file." +Then load, read entire file, and execute `{editWorkflow}` (steps-e/step-e-01-discovery.md) diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md index 5199316d..c9270cc7 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md @@ -6,8 +6,8 @@ description: 'Discover and inventory all project documents, handling duplicates workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness' # File References -thisStepFile: '{workflow_path}/steps/step-01-document-discovery.md' -nextStepFile: '{workflow_path}/steps/step-02-prd-analysis.md' +thisStepFile: './step-01-document-discovery.md' +nextStepFile: './step-02-prd-analysis.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md' templateFile: '{workflow_path}/templates/readiness-report-template.md' diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md index 4dafecca..5dd08705 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md @@ -6,8 +6,8 @@ description: 'Read and analyze PRD to extract all FRs and NFRs for coverage vali workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness' # File References -thisStepFile: '{workflow_path}/steps/step-02-prd-analysis.md' -nextStepFile: '{workflow_path}/steps/step-03-epic-coverage-validation.md' +thisStepFile: './step-02-prd-analysis.md' +nextStepFile: './step-03-epic-coverage-validation.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md' epicsFile: '{planning_artifacts}/*epic*.md' # Will be resolved to actual file diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md index f11228e1..981a5b63 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md @@ -6,8 +6,8 @@ description: 'Validate that all PRD FRs are covered in epics and stories' workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness' # File References -thisStepFile: '{workflow_path}/steps/step-03-epic-coverage-validation.md' -nextStepFile: '{workflow_path}/steps/step-04-ux-alignment.md' +thisStepFile: './step-03-epic-coverage-validation.md' +nextStepFile: './step-04-ux-alignment.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md' --- diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md index e26190f2..33aad045 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md @@ -6,8 +6,8 @@ description: 'Check for UX document and validate alignment with PRD and Architec workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness' # File References -thisStepFile: '{workflow_path}/steps/step-04-ux-alignment.md' -nextStepFile: '{workflow_path}/steps/step-05-epic-quality-review.md' +thisStepFile: './step-04-ux-alignment.md' +nextStepFile: './step-05-epic-quality-review.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md' --- diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md index 59a531d3..0203cdc1 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md @@ -6,8 +6,8 @@ description: 'Validate epics and stories against create-epics-and-stories best p workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness' # File References -thisStepFile: '{workflow_path}/steps/step-05-epic-quality-review.md' -nextStepFile: '{workflow_path}/steps/step-06-final-assessment.md' +thisStepFile: './step-05-epic-quality-review.md' +nextStepFile: './step-06-final-assessment.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md' epicsBestPractices: '{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories' diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md index aa78c14f..9469a226 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md @@ -6,7 +6,7 @@ description: 'Compile final assessment and polish the readiness report' workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/implementation-readiness' # File References -thisStepFile: '{workflow_path}/steps/step-06-final-assessment.md' +thisStepFile: './step-06-final-assessment.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/implementation-readiness-report-{{date}}.md' --- diff --git a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md index ed9b890b..a06276fa 100644 --- a/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +++ b/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md @@ -52,4 +52,4 @@ Load and read full config from {project-root}/_bmad/bmm/config.yaml and resolve: ### 2. First Step EXECUTION -Load, read the full file and then execute `{workflow_path}/steps/step-01-document-discovery.md` to begin the workflow. +Load, read the full file and then execute `./step-01-document-discovery.md` to begin the workflow. diff --git a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md index 641c7081..ca52d4d2 100644 --- a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +++ b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md @@ -6,8 +6,8 @@ description: 'Validate required documents exist and extract all requirements for workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories' # File References -thisStepFile: '{workflow_path}/steps/step-01-validate-prerequisites.md' -nextStepFile: '{workflow_path}/steps/step-02-design-epics.md' +thisStepFile: './step-01-validate-prerequisites.md' +nextStepFile: './step-02-design-epics.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/epics.md' epicsTemplate: '{workflow_path}/templates/epics-template.md' diff --git a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md index 4527f5f3..65b36627 100644 --- a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +++ b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md @@ -6,8 +6,8 @@ description: 'Design and approve the epics_list that will organize all requireme workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories' # File References -thisStepFile: '{workflow_path}/steps/step-02-design-epics.md' -nextStepFile: '{workflow_path}/steps/step-03-create-stories.md' +thisStepFile: './step-02-design-epics.md' +nextStepFile: './step-03-create-stories.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/epics.md' diff --git a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md index 6e560e7c..3cdb3bf6 100644 --- a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +++ b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md @@ -6,8 +6,8 @@ description: 'Generate all epics with their stories following the template struc workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories' # File References -thisStepFile: '{workflow_path}/steps/step-03-create-stories.md' -nextStepFile: '{workflow_path}/steps/step-04-final-validation.md' +thisStepFile: './step-03-create-stories.md' +nextStepFile: './step-04-final-validation.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/epics.md' diff --git a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md index 309bef8c..3df1675b 100644 --- a/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +++ b/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md @@ -6,7 +6,7 @@ description: 'Validate complete coverage of all requirements and ensure implemen workflow_path: '{project-root}/_bmad/bmm/workflows/3-solutioning/create-epics-and-stories' # File References -thisStepFile: '{workflow_path}/steps/step-04-final-validation.md' +thisStepFile: './step-04-final-validation.md' workflowFile: '{workflow_path}/workflow.md' outputFile: '{planning_artifacts}/epics.md' diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md index 40b2fafa..cbb32894 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md @@ -3,9 +3,9 @@ name: 'step-01-mode-detection' description: 'Determine execution mode (tech-spec vs direct), handle escalation, set state variables' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev' -thisStepFile: '{workflow_path}/steps/step-01-mode-detection.md' -nextStepFile_modeA: '{workflow_path}/steps/step-03-execute.md' -nextStepFile_modeB: '{workflow_path}/steps/step-02-context-gathering.md' +thisStepFile: './step-01-mode-detection.md' +nextStepFile_modeA: './step-03-execute.md' +nextStepFile_modeB: './step-02-context-gathering.md' --- # Step 1: Mode Detection diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md index 8e2126bc..a886b5f5 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md @@ -3,8 +3,8 @@ name: 'step-02-context-gathering' description: 'Quick context gathering for direct mode - identify files, patterns, dependencies' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev' -thisStepFile: '{workflow_path}/steps/step-02-context-gathering.md' -nextStepFile: '{workflow_path}/steps/step-03-execute.md' +thisStepFile: './step-02-context-gathering.md' +nextStepFile: './step-03-execute.md' --- # Step 2: Context Gathering (Direct Mode) diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md index 1be12b98..f12113cf 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md @@ -3,8 +3,8 @@ name: 'step-03-execute' description: 'Execute implementation - iterate through tasks, write code, run tests' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev' -thisStepFile: '{workflow_path}/steps/step-03-execute.md' -nextStepFile: '{workflow_path}/steps/step-04-self-check.md' +thisStepFile: './step-03-execute.md' +nextStepFile: './step-04-self-check.md' --- # Step 3: Execute Implementation diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md index c6d93162..6179ebba 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md @@ -3,8 +3,8 @@ name: 'step-04-self-check' description: 'Self-audit implementation against tasks, tests, AC, and patterns' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev' -thisStepFile: '{workflow_path}/steps/step-04-self-check.md' -nextStepFile: '{workflow_path}/steps/step-05-adversarial-review.md' +thisStepFile: './step-04-self-check.md' +nextStepFile: './step-05-adversarial-review.md' --- # Step 4: Self-Check diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md index 2a366dbd..db03665f 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md @@ -3,8 +3,8 @@ name: 'step-05-adversarial-review' description: 'Construct diff and invoke adversarial review task' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev' -thisStepFile: '{workflow_path}/steps/step-05-adversarial-review.md' -nextStepFile: '{workflow_path}/steps/step-06-resolve-findings.md' +thisStepFile: './step-05-adversarial-review.md' +nextStepFile: './step-06-resolve-findings.md' --- # Step 5: Adversarial Code Review diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md index f6af4697..fcc5146e 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md @@ -3,7 +3,7 @@ name: 'step-06-resolve-findings' description: 'Handle review findings interactively, apply fixes, update tech-spec with final status' workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-dev' -thisStepFile: '{workflow_path}/steps/step-06-resolve-findings.md' +thisStepFile: './step-06-resolve-findings.md' --- # Step 6: Resolve Findings diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md index 1e5e3f79..c321dcc7 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md @@ -2,9 +2,9 @@ name: 'step-01-understand' description: 'Analyze the requirement delta between current state and what user wants to build' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' -nextStepFile: '{workflow_path}/steps/step-02-investigate.md' -skipToStepFile: '{workflow_path}/steps/step-03-generate.md' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +nextStepFile: './step-02-investigate.md' +skipToStepFile: './step-03-generate.md' templateFile: '{workflow_path}/tech-spec-template.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- @@ -59,7 +59,7 @@ a) **Menu Handling:** - Jump directly to the appropriate step based on `stepsCompleted`: - `[1]` → Load `{nextStepFile}` (Step 2) - `[1, 2]` → Load `{skipToStepFile}` (Step 3) - - `[1, 2, 3]` → Load `{workflow_path}/steps/step-04-review.md` (Step 4) + - `[1, 2, 3]` → Load `./step-04-review.md` (Step 4) - **[n] Archive and start fresh:** - Rename `{wipFile}` to `{implementation_artifacts}/tech-spec-{slug}-archived-{date}.md` diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md index 3dae5e61..1cb2ee40 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md @@ -2,8 +2,8 @@ name: 'step-02-investigate' description: 'Map technical constraints and anchor points within the codebase' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' -nextStepFile: '{workflow_path}/steps/step-03-generate.md' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +nextStepFile: './step-03-generate.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md index b731e566..4a33c7a1 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md @@ -2,8 +2,8 @@ name: 'step-03-generate' description: 'Build the implementation plan based on the technical mapping of constraints' -workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/quick-spec' -nextStepFile: '{workflow_path}/steps/step-04-review.md' +workflow_path: '{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec' +nextStepFile: './step-04-review.md' wipFile: '{implementation_artifacts}/tech-spec-wip.md' --- diff --git a/src/modules/cis/module.yaml b/src/modules/cis/module.yaml index 02ce7ca9..f03960d0 100644 --- a/src/modules/cis/module.yaml +++ b/src/modules/cis/module.yaml @@ -4,7 +4,6 @@ header: "Creative Innovation Suite (CIS) Module" subheader: "No custom configuration required - uses Core settings only" default_selected: false # This module will not be selected by default for new installations - # Variables from Core Config inserted: ## user_name ## communication_language From 0a3cc1d12c666727f0d4b9bc23748c3972c49d60 Mon Sep 17 00:00:00 2001 From: Brian Madison Date: Sun, 11 Jan 2026 13:16:49 +0800 Subject: [PATCH 07/22] release: bump to v6.0.0-alpha.23 --- CHANGELOG.md | 153 +++++++++++++++++++++ package-lock.json | 17 +-- package.json | 2 +- tools/cli/installers/install-messages.yaml | 66 ++++----- 4 files changed, 189 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e23cf8b0..7f266887 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,158 @@ # Changelog +## [6.0.0-alpha.23] + +**Release: January 11, 2026** + +### 🌟 Key Highlights + +1. **Astro/Starlight Documentation Platform**: Complete migration from Docusaurus to modern Astro+Starlight for superior performance and customization +2. **Diataxis Framework Implementation**: Professional documentation restructuring with tutorials, how-to guides, explanations, and references +3. **Workflow Creator & Validator**: Powerful new tools for workflow creation with subprocess support and PRD validation +4. **TEA Documentation Expansion**: Comprehensive testing documentation with cheat sheets, MCP enhancements, and API testing patterns +5. **Brainstorming Revolution**: Research-backed procedural rigor with 100+ idea goal and anti-bias protocols +6. **Cursor IDE Modernization**: Refactored from rules-based to command-based architecture for better IDE integration + +### 📚 Documentation Platform Revolution + +**Astro/Starlight Migration:** + +- **From Docusaurus to Astro**: Complete platform migration for improved performance, better customization, and modern tooling +- **Starlight Theme**: Professional documentation theme with dark mode default and responsive design +- **Build Pipeline Overhaul**: New build-docs.js orchestrates link checking, artifact generation, and Astro build +- **LLM-Friendly Documentation**: Generated llms.txt and llms-full.txt for AI agent discoverability +- **Downloadable Source Bundles**: bmad-sources.zip and bmad-prompts.zip for offline use + +**Diataxis Framework Implementation:** + +- **Four Content Types**: Professional separation into tutorials, how-to guides, explanations, and references +- **21 Files Migrated**: Phase 1 migration of core documentation to Diataxis structure +- **42+ Focused Documents**: Phase 2 split of large legacy files into manageable pieces +- **FAQ Restructuring**: 7 topic-specific FAQ files with standardized format +- **Tutorial Style Guide**: Comprehensive documentation standards for consistent content creation + +**Link Management & Quality:** + +- **Site-Relative Links**: Converted 217 links to repo-relative format (/docs/path/file.md) +- **Link Validation Tools**: New validate-doc-links.js and fix-doc-links.js for maintaining link integrity +- **Broken Link Fixes**: Resolved ~50 broken internal links across documentation +- **BMad Acronym Standardization**: Consistent use of "BMad" (Breakthrough Method of Agile AI Driven Development) +- **SEO Optimization**: Absolute URLs in AI meta tags for better web crawler discoverability + +### 🔧 Workflow Creator & Validator (Major Feature) + +**Workflow Creation Tool:** + +- **Subprocess Support**: Advanced workflows can now spawn subprocesses for complex operations +- **PRD Validation Step**: New validation step ensures PRD quality before workflow execution +- **Trimodal Workflow Creation**: Three-mode workflow generation system +- **Quadrivariate Module Workflow**: Four-variable workflow architecture for enhanced flexibility +- **Path Violation Checks**: Validator ensures workflows don't violate path constraints +- **Max Parallel Mode POC**: Proof-of-concept for parallel workflow validation + +**Workflow Quality Improvements:** + +- **PRD Trimodal Compliance**: PRD workflow now follows trimodal standards +- **Standardized Step Formatting**: Consistent markdown formatting across workflow and PRD steps +- **Better Suggested Next Steps**: Improved workflow completion guidance +- **Variable Naming Standardization**: {project_root} → {project-root} across all workflows + +### 🧪 TEA Documentation Expansion + +**Comprehensive Testing Guides:** + +- **Cheat Sheets**: Quick reference guides for common testing scenarios +- **MCP Enhancements**: Model Context Protocol improvements for testing workflows +- **API Testing Patterns**: Best practices for API testing documentation +- **Design Philosophy Callout**: Clear explanation of TEA's design principles +- **Context Engineering Glossary**: New glossary entry defining context engineering concepts +- **Fragment Count Updates**: Accurate documentation of TEA workflow components +- **Playwright Utils Examples**: Updated code examples for playwright-utils integration + +### 💡 Brainstorming Workflow Overhaul + +**Research-Backed Procedural Rigor:** + +- **100+ Idea Goal**: Emphasis on quantity-first approach to unlock better quality ideas +- **Anti-Bias Protocol**: Domain pivot every 10 ideas to reduce cognitive biases +- **Chain-of-Thought Requirements**: Reasoning before idea generation +- **Simulated Temperature**: Prompts for higher divergence in ideation +- **Standardized Idea Format**: Quality control template for consistent output +- **Energy Checkpoints**: Multiple continuation options to maintain creative flow + +**Exploration Menu Improvements:** + +- **Letter-Based Navigation**: [K/T/A/B/C] options instead of numbers for clarity +- **Keep/Try/Advanced/Break/Continue**: Clear action options for idea refinement +- **Universal Facilitation Rules**: Consistent guidelines across all brainstorming steps +- **Quality Growth Enforcement**: Balance between quantity and quality metrics + +### 🖥️ Cursor IDE Modernization + +**Command-Based Architecture:** + +- **From Rules to Commands**: Complete refactor from rules-based to command-based system +- **Command Generation**: Automatic generation of task and tool commands +- **Commands Directory**: New `.cursor/commands/bmad/` structure for generated commands +- **Cleanup Integration**: Automatic cleanup of old BMAD commands alongside rules +- **Enhanced Logging**: Better feedback on agents, tasks, tools, and workflow commands generated + +### 🤖 Agent System Improvements + +**Agent Builder & Validation:** + +- **hasSidecar Field**: All agents now indicate sidecar support (true/false) +- **Validation Enforcement**: hasSidecar now required in agent validation +- **Better Brownfield Documentation**: Improved brownfield project documentation +- **Agent Builder Updates**: Agent builder now uses hasSidecar field +- **Agent Editor Integration**: Editor workflow respects hasSidecar configuration + +### 🐛 Bug Fixes & Quality Improvements + +**Critical Fixes:** + +- **Windows Line Endings**: Resolved CRLF issues causing cross-platform problems +- **Code-Review File Filtering**: Fixed code-review picking up non-application files +- **ERR_REQUIRE_ESM Resolution**: Dynamic import for inquirer v9+ compatibility +- **Project-Context Conflicts**: Allow full project-context usage with conflict precedence +- **Workflow Paths**: Fixed paths for workflow and sprint status files +- **Missing Scripts**: Fixed missing scripts from installation + +**Workflow & Variable Fixes:** + +- **Variable Naming**: Standardized from {project_root} to {project-root} across CIS, BMGD, and BMM modules +- **Workflow References**: Fixed broken .yaml → .md workflow references +- **Advanced Elicitation Variables**: Fixed undefined variables in brainstorming +- **Dependency Format**: Corrected dependency format and added missing frontmatter + +**Code Quality:** + +- **Dependency Updates**: Bumped qs from 6.14.0 to 6.14.1 +- **CodeRabbit Integration**: Enabled auto-review on new PRs +- **TEA Fragment Counts**: Updated fragment counts for accuracy +- **Documentation Links**: Fixed Discord channel references (#general-dev → #bmad-development) + +### 🚀 Installation & CLI Improvements + +**Installation Enhancements:** + +- **Workflow Exclusion**: Ability to exclude workflows from being added as commands +- **Example Workflow Protection**: Example workflow in workflow builder now excluded from tools +- **CNAME Configuration**: Added CNAME file for custom domain support +- **Script Fixes**: All scripts now properly included in installation + +### 📊 Statistics + +- **27 commits** since alpha.22 +- **217 documentation links** converted to site-relative format +- **42+ focused documents** created from large legacy files +- **7 topic-specific FAQ files** with standardized formatting +- **Complete documentation platform** migrated from Docusaurus to Astro/Starlight +- **Major workflow tools** added: Creator, Validator with subprocess support +- **Brainstorming workflow** overhauled with research-backed rigor + +--- + ## [6.0.0-alpha.22] **Release: December 31, 2025** diff --git a/package-lock.json b/package-lock.json index d6ea4f26..b5a2a4ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bmad-method", - "version": "6.0.0-alpha.22", + "version": "6.0.0-alpha.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bmad-method", - "version": "6.0.0-alpha.22", + "version": "6.0.0-alpha.23", "license": "MIT", "dependencies": { "@kayvan/markdown-tree-parser": "^1.6.1", @@ -244,7 +244,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -3643,7 +3642,6 @@ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3983,7 +3981,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4290,7 +4287,6 @@ "integrity": "sha512-6mF/YrvwwRxLTu+aMEa5pwzKUNl5ZetWbTyZCs9Um0F12HUmxUiF5UHiZPy4rifzU3gtpM3xP2DfdmkNX9eZRg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -5358,7 +5354,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6689,7 +6684,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10304,7 +10298,6 @@ "integrity": "sha512-p3JTemJJbkiMjXEMiFwgm0v6ym5g8K+b2oDny+6xdl300tUKySxvilJQLSea48C6OaYNmO30kH9KxpiAg5bWJw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "globby": "15.0.0", "js-yaml": "4.1.1", @@ -12378,7 +12371,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12444,7 +12436,6 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13273,7 +13264,6 @@ "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -14837,7 +14827,6 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -15111,7 +15100,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -15303,7 +15291,6 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index a46171e3..1f090907 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "bmad-method", - "version": "6.0.0-alpha.22", + "version": "6.0.0-alpha.23", "description": "Breakthrough Method of Agile AI-driven Development", "keywords": [ "agile", diff --git a/tools/cli/installers/install-messages.yaml b/tools/cli/installers/install-messages.yaml index e44a3228..860b8352 100644 --- a/tools/cli/installers/install-messages.yaml +++ b/tools/cli/installers/install-messages.yaml @@ -6,28 +6,24 @@ startMessage: | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - If you are looking for Version 4 of BMad Method, please note that you can - still install it by using the command `npx bmad-method@latest install`, until v6 reaches beta. + ⭐ IMPORTANT: Version Alpha.23 Changes - IMPORTANT Changes with Version Alpha.22 - PLEASE READ THIS if upgrading from earlier Alpha Versions: + If your current version is older than Alpha.21, you'll need a fresh install: + - Remove .bmad folder and reinstall + - Only needed during final push to beta (ETA January 18th) - 1. The BMad Core default output folder has changed from `docs` to `_bmad-output`. `docs` - is meant for long-term artifacts, which you can always decide to move content to. + 📚 New Docs Site: http://docs.bmad-method.org/ + - Tons of guides and articles coming soon! + - Everything is free. No paywalls. No gated content. + - Knowledge should be shared, not sold. - 2. If utilizing the BMad Method Module (BMM) please be aware of the following important recent changes: + 📺 YouTube Master Class & Podcast launching February 1st! - - Phases 1-3 (Analysis, Planning, Solutioning) will now default output to _bmad-output/planning-artifacts - - Phase 4 (Implementation) will now default output to _bmad-output/implementation-artifacts - - Long term project knowledge (research, docs, references, document-project output) will now default to docs/ + 💡 Love BMad? Please star us on GitHub & subscribe on YouTube! + - GitHub: https://github.com/bmad-code-org/BMAD-METHOD/ + - YouTube: https://www.youtube.com/@BMadCode - IT IS STRONGLY SUGGESTED to align with these folder conventions instead of dumping all to docs/ - if you are upgrading from a prior - version where all output was going to docs or docs/sprint-artifacts, it is suggested to reset configs to these new values. - - If you have anything in progress, you can move what was in sprint-artifacts to _bmad-output/implementation-artifacts, - and if you had brainstorming content, a PRD, UX or Architecture, you can move the content to _bmad-output/planning-artifacts. - - Read the latest updates before continuing: - https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md + Latest updates: https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -35,24 +31,28 @@ startMessage: | endMessage: | ════════════════════════════════════════════════════════════════════════════════ - ✨ BMAD IS READY TO USE! + ✨ BMAD IS READY! Beta is just days away! Thank you for your support! - ONE FINAL NOTE WITH VERSION Alpha.22: Phase 4 (Implementation) is still in the process of - being migrated to the improved workflow progressive disclosure system. - Along with this, the full conversion to the new path locations for content being searched - may possibly be incomplete. If you run a workflow that relies on finding input documents - automatically, and you notice they are not being found / looking in the wrong location, either: - 1. Manually specify the correct input location when prompted - 2. Open an issue on GitHub so we can address the problem quickly if you think its a bug. - 3. Ensure your content is in the new locations for best results: - - Planning Artifacts (Phases 1-3): _bmad-output/planning-artifacts - - Implementation Artifacts (Phase 4): _bmad-output/implementation-artifacts - - Long Term Project Knowledge (docs, research, references): docs/ + 🌟 BMad is 100% free and open source. + - No gated Discord. No paywalls. + - We believe in empowering everyone, not just those who can pay. - Thank you for helping test the early release version of the new BMad Core and BMad Method! - Stable Beta coming soon - please read the full README.md and linked documentation to get started. + 🙏 SUPPORT BMAD DEVELOPMENT: + - Donate: https://buymeacoffee.com/bmad + - Corporate Sponsorship available - DM on Discord - And again, here is the Change Log with all the details of recent updates: - https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md + 🎤 SPEAKING & MEDIA: + - Available for conferences, podcasts, and media appearances + - Topics: AI-Native Transformation, Spec and Context Engineering, BMad Method + - For speaking inquiries or interviews, reach out to BMad on Discord! + + 📚 RESOURCES: + - Docs: http://docs.bmad-method.org/ (bookmark it!) + - Changelog: https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md + + ⭐⭐⭐ HELP US GROW: + - Star us on GitHub: https://github.com/bmad-code-org/BMAD-METHOD/ + - Subscribe on YouTube: https://www.youtube.com/@BMadCode + - Every star & sub helps us reach more developers! ════════════════════════════════════════════════════════════════════════════════ From eff826eef9c011698c2bb69a3c4921c1c0426de8 Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Sun, 11 Jan 2026 00:18:34 -0500 Subject: [PATCH 08/22] docs: add open source philosophy and support options to README - Add "100% free and open source" tagline at top - Update YouTube line with upcoming master class/podcast - Add "Help us grow" CTA for stars and subs - Add new "Support BMad" section with donation and speaking info Co-Authored-By: Claude Opus 4.5 --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5285425e..281d1d35 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ **Build More, Architect Dreams** — An AI-driven agile development framework with 21 specialized agents, 50+ guided workflows, and scale-adaptive intelligence that adjusts from bug fixes to enterprise systems. +**100% free and open source.** No paywalls. No gated content. We believe knowledge should be shared, not sold. + ## Why BMad? Traditional AI tools do the thinking for you, producing average results. BMad agents act as expert collaborators who guide you through structured workflows to bring out your best thinking. @@ -60,10 +62,20 @@ This analyzes your project and recommends a track: ## Community - [Discord](https://discord.gg/gk8jAdXWmj) — Get help, share ideas, collaborate -- [YouTube](https://www.youtube.com/@BMadCode) — Video tutorials and updates +- [YouTube](https://www.youtube.com/@BMadCode) — Tutorials, master class, and podcast (launching Feb 2025) - [GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) — Bug reports and feature requests - [Discussions](https://github.com/bmad-code-org/BMAD-METHOD/discussions) — Community conversations +**Help us grow:** Star us on [GitHub](https://github.com/bmad-code-org/BMAD-METHOD/) and subscribe on [YouTube](https://www.youtube.com/@BMadCode) — every star and sub helps us reach more developers! + +## Support BMad + +BMad is free for everyone. If you'd like to support development: + +- [Buy Me a Coffee](https://buymeacoffee.com/bmad) +- Corporate sponsorship — DM on Discord +- Speaking & media inquiries — Reach out on Discord (conferences, podcasts, interviews) + ## Contributing We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. From 5870651bad2af7de1e899dc50b92f88e0c2936ed Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Sun, 11 Jan 2026 00:24:58 -0500 Subject: [PATCH 09/22] docs: enhance README free/open source messaging and support section - Expand tagline: "No gated Discord", "empowering everyone" - Add emojis and stronger CTAs to Support section - Consolidate star/subscribe asks into Support section Co-Authored-By: Claude Opus 4.5 --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 281d1d35..3b4bd4c3 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ **Build More, Architect Dreams** — An AI-driven agile development framework with 21 specialized agents, 50+ guided workflows, and scale-adaptive intelligence that adjusts from bug fixes to enterprise systems. -**100% free and open source.** No paywalls. No gated content. We believe knowledge should be shared, not sold. +**100% free and open source.** No paywalls. No gated content. No gated Discord. We believe in empowering everyone, not just those who can pay. ## Why BMad? @@ -66,15 +66,15 @@ This analyzes your project and recommends a track: - [GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) — Bug reports and feature requests - [Discussions](https://github.com/bmad-code-org/BMAD-METHOD/discussions) — Community conversations -**Help us grow:** Star us on [GitHub](https://github.com/bmad-code-org/BMAD-METHOD/) and subscribe on [YouTube](https://www.youtube.com/@BMadCode) — every star and sub helps us reach more developers! - ## Support BMad -BMad is free for everyone. If you'd like to support development: +BMad is free for everyone — and always will be. If you'd like to support development: -- [Buy Me a Coffee](https://buymeacoffee.com/bmad) -- Corporate sponsorship — DM on Discord -- Speaking & media inquiries — Reach out on Discord (conferences, podcasts, interviews) +- ⭐ [Star us on GitHub](https://github.com/bmad-code-org/BMAD-METHOD/) — helps others discover BMad +- 📺 [Subscribe on YouTube](https://www.youtube.com/@BMadCode) — master class launching Feb 2025 +- ☕ [Buy Me a Coffee](https://buymeacoffee.com/bmad) — fuel the development +- 🏢 Corporate sponsorship — DM on Discord +- 🎤 Speaking & media — Available for conferences, podcasts, interviews (Discord) ## Contributing From 9f85dade257ace65be8e5e8a8ea7fb88d2fadcc3 Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Sun, 11 Jan 2026 00:28:29 -0500 Subject: [PATCH 10/22] docs: capitalize support section descriptions Co-Authored-By: Claude Opus 4.5 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3b4bd4c3..be81a5d8 100644 --- a/README.md +++ b/README.md @@ -70,11 +70,11 @@ This analyzes your project and recommends a track: BMad is free for everyone — and always will be. If you'd like to support development: -- ⭐ [Star us on GitHub](https://github.com/bmad-code-org/BMAD-METHOD/) — helps others discover BMad -- 📺 [Subscribe on YouTube](https://www.youtube.com/@BMadCode) — master class launching Feb 2025 -- ☕ [Buy Me a Coffee](https://buymeacoffee.com/bmad) — fuel the development +- ⭐ [Star us on GitHub](https://github.com/bmad-code-org/BMAD-METHOD/) — Helps others discover BMad +- 📺 [Subscribe on YouTube](https://www.youtube.com/@BMadCode) — Master class launching Feb 2025 +- ☕ [Buy Me a Coffee](https://buymeacoffee.com/bmad) — Fuel the development - 🏢 Corporate sponsorship — DM on Discord -- 🎤 Speaking & media — Available for conferences, podcasts, interviews (Discord) +- 🎤 Speaking & Media — Available for conferences, podcasts, interviews (Discord) ## Contributing From d4f66423331c41cf5ea2add8acec3c762f7e5f6b Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Sun, 11 Jan 2026 01:04:52 -0800 Subject: [PATCH 11/22] fix: add missing review menu and HALT to quick-spec step 4 (#1305) Step 4 was missing a structured menu at the spec review checkpoint. This caused agents to skip past the approval step without waiting for explicit user confirmation. Added: - Review menu with [y] Approve, [c] Changes, [q] Questions, [a] Advanced Elicitation, [p] Party Mode - Explicit HALT instruction - Menu handling section This aligns step 4 with the menu-driven pattern used in steps 1-3. Fixes #1304 Also fixes pre-existing prettier issue in src/modules/cis/module.yaml. Co-authored-by: Claude Opus 4.5 --- package-lock.json | 15 ++++++++++++- package.json | 2 +- .../quick-spec/steps/step-04-review.md | 22 +++++++++++++++++-- src/modules/cis/module.yaml | 1 + 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5a2a4ba..ba812f09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "jest": "^30.0.4", "lint-staged": "^16.1.1", "markdownlint-cli2": "^0.19.1", - "prettier": "^3.5.3", + "prettier": "^3.7.4", "prettier-plugin-packagejson": "^2.5.19", "sharp": "^0.33.5", "yaml-eslint-parser": "^1.2.3", @@ -244,6 +244,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -3642,6 +3643,7 @@ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3981,6 +3983,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4287,6 +4290,7 @@ "integrity": "sha512-6mF/YrvwwRxLTu+aMEa5pwzKUNl5ZetWbTyZCs9Um0F12HUmxUiF5UHiZPy4rifzU3gtpM3xP2DfdmkNX9eZRg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -5354,6 +5358,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6684,6 +6689,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10298,6 +10304,7 @@ "integrity": "sha512-p3JTemJJbkiMjXEMiFwgm0v6ym5g8K+b2oDny+6xdl300tUKySxvilJQLSea48C6OaYNmO30kH9KxpiAg5bWJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "globby": "15.0.0", "js-yaml": "4.1.1", @@ -12371,6 +12378,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12436,6 +12444,7 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13264,6 +13273,7 @@ "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -14827,6 +14837,7 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -15100,6 +15111,7 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -15291,6 +15303,7 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 1f090907..0f8953f3 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "jest": "^30.0.4", "lint-staged": "^16.1.1", "markdownlint-cli2": "^0.19.1", - "prettier": "^3.5.3", + "prettier": "^3.7.4", "prettier-plugin-packagejson": "^2.5.19", "sharp": "^0.33.5", "yaml-eslint-parser": "^1.2.3", diff --git a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md index a8466de4..3e612d9b 100644 --- a/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +++ b/src/modules/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md @@ -39,9 +39,27 @@ wipFile: '{implementation_artifacts}/tech-spec-wip.md' - {task_count} tasks to implement - {ac_count} acceptance criteria to verify -- {files_count} files to modify +- {files_count} files to modify" -Does this capture your intent? Any changes needed?" +**Present review menu:** + +``` +[y] Approve - finalize the spec +[c] Changes - request modifications +[q] Questions - ask about any section +[a] Advanced Elicitation - dig deeper before approving +[p] Party Mode - get expert feedback before approving +``` + +**HALT and wait for user selection.** + +#### Menu Handling: + +- **[y]**: Proceed to Section 3 (Finalize the Spec) +- **[c]**: Proceed to Section 2 (Handle Review Feedback), then return here and redisplay menu +- **[q]**: Answer questions, then redisplay this menu +- **[a]**: Load and execute `{advanced_elicitation}`, then return here and redisplay menu +- **[p]**: Load and execute `{party_mode_exec}`, then return here and redisplay menu ### 2. Handle Review Feedback diff --git a/src/modules/cis/module.yaml b/src/modules/cis/module.yaml index f03960d0..02ce7ca9 100644 --- a/src/modules/cis/module.yaml +++ b/src/modules/cis/module.yaml @@ -4,6 +4,7 @@ header: "Creative Innovation Suite (CIS) Module" subheader: "No custom configuration required - uses Core settings only" default_selected: false # This module will not be selected by default for new installations + # Variables from Core Config inserted: ## user_name ## communication_language From e465ce4bb50214133e1882d026f41e0edad87847 Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Sun, 11 Jan 2026 12:01:37 -0500 Subject: [PATCH 12/22] docs: fix year typo in README (2025 -> 2026) Co-Authored-By: Claude Opus 4.5 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index be81a5d8..14d581ff 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ This analyzes your project and recommends a track: BMad is free for everyone — and always will be. If you'd like to support development: - ⭐ [Star us on GitHub](https://github.com/bmad-code-org/BMAD-METHOD/) — Helps others discover BMad -- 📺 [Subscribe on YouTube](https://www.youtube.com/@BMadCode) — Master class launching Feb 2025 +- 📺 [Subscribe on YouTube](https://www.youtube.com/@BMadCode) — Master class launching Feb 2026 - ☕ [Buy Me a Coffee](https://buymeacoffee.com/bmad) — Fuel the development - 🏢 Corporate sponsorship — DM on Discord - 🎤 Speaking & Media — Available for conferences, podcasts, interviews (Discord) From e535f943258eb9eb3ac94ce75c014e9a6be5442f Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Mon, 12 Jan 2026 00:23:05 -0500 Subject: [PATCH 13/22] docs: comprehensive style guide update with reference and glossary standards Style Guide Additions: - Add Reference Structure section with 6 document types (Index, Catalog, Deep-Dive, Configuration, Glossary, Comprehensive) - Add Glossary Structure section with table-based format leveraging Starlight's right-nav for navigation - Include checklists for both new document types Reference Docs Updated: - agents/index.md: Catalog format, universal commands tip admonition - configuration/core-tasks.md: Configuration format with admonitions - configuration/global-config.md: Table-based config reference - workflows/index.md: Minimal index format - workflows/core-workflows.md: Catalog format - workflows/document-project.md: Deep-dive with Quick Facts admonition - workflows/bmgd-workflows.md: Comprehensive format, removed ~30 hr rules Glossary Rewritten: - Converted from 373 lines with ### headers to 123 lines with tables - Right nav now shows 9 categories instead of 50+ terms - Added italic context markers (*BMGD.*, *Brownfield.*, etc.) - Alphabetized terms within categories - Removed redundant inline TOC All Docs: - Remove horizontal rules (---) per style guide - Remove "Related" sections (sidebar handles navigation) - Standardize admonition usage - Archive deleted workflow customization docs Co-Authored-By: Claude Opus 4.5 --- docs/_STYLE_GUIDE.md | 421 ++++++++++++++++- .../customize-workflows.md | 9 +- .../vendor-workflows.md | 17 +- docs/explanation/agents/barry-quick-flow.md | 64 ++- docs/explanation/agents/index.md | 28 +- docs/explanation/architecture/four-phases.md | 25 +- .../preventing-agent-conflicts.md | 43 +- .../architecture/why-solutioning-matters.md | 26 +- .../bmad-builder/custom-content-types.md | 11 +- docs/explanation/bmad-builder/index.md | 67 +-- docs/explanation/bmm/index.md | 42 +- docs/explanation/core-concepts/agent-roles.md | 25 - docs/explanation/core-concepts/index.md | 5 - .../core-concepts/what-are-agents.md | 9 +- .../core-concepts/what-are-modules.md | 9 +- .../core-concepts/what-are-workflows.md | 19 +- .../creative-intelligence/index.md | 24 +- .../features/advanced-elicitation.md | 15 +- .../features/brainstorming-techniques.md | 23 +- docs/explanation/features/party-mode.md | 25 +- docs/explanation/features/quick-flow.md | 76 ++- docs/explanation/features/tea-overview.md | 22 - docs/explanation/features/web-bundles.md | 7 +- docs/explanation/game-dev/agents.md | 51 +-- docs/explanation/game-dev/bmgd-vs-bmm.md | 25 - docs/explanation/game-dev/game-types.md | 59 --- docs/explanation/game-dev/index.md | 23 +- .../facilitation-over-generation.md | 43 +- .../philosophy/testing-as-engineering.md | 7 - .../brownfield/add-feature-to-existing.md | 23 +- .../brownfield/document-existing-project.md | 22 +- docs/how-to/brownfield/index.md | 26 +- .../brownfield/quick-fix-in-brownfield.md | 19 +- docs/how-to/customization/customize-agents.md | 10 +- docs/how-to/customization/index.md | 7 +- .../customization/shard-large-documents.md | 72 +-- docs/how-to/get-answers-about-bmad.md | 66 +-- docs/how-to/installation/index.md | 9 +- docs/how-to/installation/install-bmad.md | 68 +-- .../installation/install-custom-modules.md | 194 ++++---- docs/how-to/installation/upgrade-to-v6.md | 186 ++++---- .../troubleshooting/bmgd-troubleshooting.md | 43 +- docs/how-to/workflows/bmgd-quick-flow.md | 273 +++-------- docs/how-to/workflows/conduct-research.md | 89 ++-- docs/how-to/workflows/create-architecture.md | 66 +-- .../workflows/create-epics-and-stories.md | 59 +-- docs/how-to/workflows/create-prd.md | 61 +-- docs/how-to/workflows/create-product-brief.md | 57 +-- docs/how-to/workflows/create-story.md | 47 +- docs/how-to/workflows/create-ux-design.md | 47 +- docs/how-to/workflows/implement-story.md | 86 ++-- docs/how-to/workflows/quick-spec.md | 69 +-- .../workflows/run-brainstorming-session.md | 51 +-- docs/how-to/workflows/run-code-review.md | 94 +--- .../workflows/run-implementation-readiness.md | 83 +--- docs/how-to/workflows/run-sprint-planning.md | 49 +- docs/how-to/workflows/run-test-design.md | 70 +-- docs/how-to/workflows/setup-party-mode.md | 75 +-- docs/how-to/workflows/setup-test-framework.md | 49 +- docs/reference/agents/index.md | 128 ++---- docs/reference/configuration/core-tasks.md | 66 +-- docs/reference/configuration/global-config.md | 30 +- docs/reference/glossary/index.md | 432 ++++-------------- docs/reference/workflows/bmgd-workflows.md | 148 +----- docs/reference/workflows/core-workflows.md | 23 +- docs/reference/workflows/document-project.md | 65 ++- docs/reference/workflows/index.md | 9 +- 67 files changed, 1530 insertions(+), 2661 deletions(-) rename docs/{how-to/customization => _archive}/customize-workflows.md (82%) rename docs/{how-to/customization => _archive}/vendor-workflows.md (89%) diff --git a/docs/_STYLE_GUIDE.md b/docs/_STYLE_GUIDE.md index 592d1148..008557e1 100644 --- a/docs/_STYLE_GUIDE.md +++ b/docs/_STYLE_GUIDE.md @@ -1,4 +1,6 @@ -# Documentation Style Guide +--- +title: "Documentation Style Guide" +--- Internal guidelines for maintaining consistent, high-quality documentation across the BMad Method project. This document is not included in the Starlight sidebar — it's for contributors and maintainers, not end users. @@ -54,6 +56,423 @@ Every tutorial should follow this structure: Not all sections are required for every tutorial, but this is the standard flow. +## How-To Structure + +How-to guides are task-focused and shorter than tutorials. They answer "How do I do X?" for users who already understand the basics. + +``` +1. Title + Hook (one sentence: "Use the `X` workflow to...") +2. When to Use This (bullet list of scenarios) +3. When to Skip This (optional - for workflows that aren't always needed) +4. Prerequisites (note admonition) +5. Steps (numbered ### subsections) +6. What You Get (output/artifacts produced) +7. Example (optional - concrete usage scenario) +8. Tips (optional - best practices, common pitfalls) +9. Next Steps (optional - what to do after completion) +``` + +Include sections only when they add value. A simple how-to might only need Hook, Prerequisites, Steps, and What You Get. + +### How-To vs Tutorial + +| Aspect | How-To | Tutorial | +|--------|--------|----------| +| **Length** | 50-150 lines | 200-400 lines | +| **Audience** | Users who know the basics | New users learning concepts | +| **Focus** | Complete a specific task | Understand a workflow end-to-end | +| **Sections** | 5-8 sections | 12-15 sections | +| **Examples** | Brief, inline | Detailed, step-by-step | + +### How-To Visual Elements + +Use admonitions strategically in how-to guides: + +| Admonition | Use In How-To | +|------------|---------------| +| `:::note[Prerequisites]` | Required dependencies, agents, prior steps | +| `:::tip[Pro Tip]` | Optional shortcuts or best practices | +| `:::caution[Common Mistake]` | Pitfalls to avoid | +| `:::note[Example]` | Brief usage example inline with steps | + +**Guidelines:** +- **1-2 admonitions max** per how-to (they're shorter than tutorials) +- **Prerequisites as admonition** makes scanning easier +- **Tips section** can be a flat list instead of admonition if there are multiple tips +- **Skip admonitions entirely** for very simple how-tos + +### How-To Checklist + +Before submitting a how-to: + +- [ ] Hook is one clear sentence starting with "Use the `X` workflow to..." +- [ ] When to Use This has 3-5 bullet points +- [ ] Prerequisites listed (admonition or flat list) +- [ ] Steps are numbered `###` subsections with action verbs +- [ ] What You Get describes output artifacts +- [ ] No horizontal rules (`---`) +- [ ] No `####` headers +- [ ] No "Related" section (sidebar handles navigation) +- [ ] 1-2 admonitions maximum + +## Explanation Structure + +Explanation documents help users understand concepts, features, and design decisions. They answer "What is X?" and "Why does X matter?" rather than "How do I do X?" + +### Types of Explanation Documents + +| Type | Purpose | Example | +|------|---------|---------| +| **Index/Landing** | Overview of a topic area with navigation | `core-concepts/index.md` | +| **Concept** | Define and explain a core concept | `what-are-agents.md` | +| **Feature** | Deep dive into a specific capability | `quick-flow.md` | +| **Philosophy** | Explain design decisions and rationale | `why-solutioning-matters.md` | +| **FAQ** | Answer common questions (see FAQ Sections below) | `brownfield-faq.md` | + +### General Explanation Structure + +``` +1. Title + Hook (1-2 sentences explaining the topic) +2. Overview/Definition (what it is, why it matters) +3. Key Concepts (### subsections for main ideas) +4. Comparison Table (optional - when comparing options) +5. When to Use / When Not to Use (optional - decision guidance) +6. Diagram (optional - mermaid for processes/flows) +7. Next Steps (optional - where to go from here) +``` + +### Index/Landing Pages + +Index pages orient users within a topic area. + +``` +1. Title + Hook (one sentence overview) +2. Content Table (links with descriptions) +3. Getting Started (numbered list for new users) +4. Choose Your Path (optional - decision tree for different goals) +``` + +**Example hook:** "Understanding the fundamental building blocks of the BMad Method." + +### Concept Explainers + +Concept pages define and explain core ideas. + +``` +1. Title + Hook (what it is in one sentence) +2. Types/Categories (if applicable, with ### subsections) +3. Key Differences Table (comparing types/options) +4. Components/Parts (breakdown of elements) +5. Which Should You Use? (decision guidance) +6. Creating/Customizing (brief pointer to how-to guides) +``` + +**Example hook:** "Agents are AI assistants that help you accomplish tasks. Each agent has a unique personality, specialized capabilities, and an interactive menu." + +### Feature Explainers + +Feature pages provide deep dives into specific capabilities. + +``` +1. Title + Hook (what the feature does) +2. Quick Facts (optional - "Perfect for:", "Time to:") +3. When to Use / When Not to Use (with bullet lists) +4. How It Works (process overview, mermaid diagram if helpful) +5. Key Benefits (what makes it valuable) +6. Comparison Table (vs alternatives if applicable) +7. When to Graduate/Upgrade (optional - when to use something else) +``` + +**Example hook:** "Quick Spec Flow is a streamlined alternative to the full BMad Method for Quick Flow track projects." + +### Philosophy/Rationale Documents + +Philosophy pages explain design decisions and reasoning. + +``` +1. Title + Hook (the principle or decision) +2. The Problem (what issue this addresses) +3. The Solution (how this approach solves it) +4. Key Principles (### subsections for main ideas) +5. Benefits (what users gain) +6. When This Applies (scope of the principle) +``` + +**Example hook:** "Phase 3 (Solutioning) translates **what** to build (from Planning) into **how** to build it (technical design)." + +### Explanation Visual Elements + +Use these elements strategically in explanation documents: + +| Element | Use For | +|---------|---------| +| **Comparison tables** | Contrasting types, options, or approaches | +| **Mermaid diagrams** | Process flows, phase sequences, decision trees | +| **"Best for:" lists** | Quick decision guidance | +| **Code examples** | Illustrating concepts (keep brief) | + +**Guidelines:** +- **Use diagrams sparingly** — one mermaid diagram per document maximum +- **Tables over prose** — for any comparison of 3+ items +- **Avoid step-by-step instructions** — point to how-to guides instead + +### Explanation Checklist + +Before submitting an explanation document: + +- [ ] Hook clearly states what the document explains +- [ ] Content organized into scannable `##` sections +- [ ] Comparison tables used for contrasting options +- [ ] No horizontal rules (`---`) +- [ ] No `####` headers +- [ ] No "Related" section (sidebar handles navigation) +- [ ] No "Next:" navigation links (sidebar handles navigation) +- [ ] Diagrams have clear labels and flow +- [ ] Links to how-to guides for "how do I do this?" questions +- [ ] 2-3 admonitions maximum + +## Reference Structure + +Reference documents provide quick lookup information for users who know what they're looking for. They answer "What are the options?" and "What does X do?" rather than explaining concepts or teaching skills. + +### Types of Reference Documents + +| Type | Purpose | Example | +|------|---------|---------| +| **Index/Landing** | Navigation to reference content | `workflows/index.md` | +| **Catalog** | Quick-reference list of items | `agents/index.md` | +| **Deep-Dive** | Detailed single-item reference | `document-project.md` | +| **Configuration** | Settings and config documentation | `core-tasks.md` | +| **Glossary** | Term definitions | `glossary/index.md` | +| **Comprehensive** | Extensive multi-item reference | `bmgd-workflows.md` | + +### Reference Index Pages + +For navigation landing pages: + +``` +1. Title + Hook (one sentence describing scope) +2. Content Sections (## for each category) + - Bullet list with links and brief descriptions +``` + +Keep these minimal — their job is navigation, not explanation. + +### Catalog Reference (Item Lists) + +For quick-reference lists of items: + +``` +1. Title + Hook (one sentence) +2. Items (## for each item) + - Brief description (one sentence) + - **Commands:** or **Key Info:** as flat list +3. Universal/Shared (## section if applicable) +``` + +**Guidelines:** +- Use `##` for items, not `###` +- No horizontal rules between items — whitespace is sufficient +- No "Related" section — sidebar handles navigation +- Keep descriptions to 1 sentence per item + +### Item Deep-Dive Reference + +For detailed single-item documentation: + +``` +1. Title + Hook (one sentence purpose) +2. Quick Facts (optional note admonition) + - Module, Command, Input, Output as list +3. Purpose/Overview (## section) +4. How to Invoke (code block) +5. Key Sections (## for each major aspect) + - Use ### for sub-options within sections +6. Notes/Caveats (tip or caution admonition) +``` + +**Guidelines:** +- Start with "quick facts" so readers immediately know scope +- Use admonitions for important caveats +- No "Related Documentation" section — sidebar handles this + +### Configuration Reference + +For settings, tasks, and config documentation: + +``` +1. Title + Hook (one sentence explaining what these configure) +2. Table of Contents (jump links if 4+ items) +3. Items (## for each config/task) + - **Bold summary** — one sentence describing what it does + - **Use it when:** bullet list of scenarios + - **How it works:** numbered steps + - **Output:** expected result (if applicable) +``` + +**Guidelines:** +- Table of contents only needed for 4+ items +- Keep "How it works" to 3-5 steps maximum +- No horizontal rules between items + +### Glossary Reference + +For term definitions: + +``` +1. Title + Hook (one sentence) +2. Navigation (jump links to categories) +3. Categories (## for each category) + - Terms (### for each term) + - Definition (1-3 sentences, no prefix) + - Related context or example (optional) +``` + +**Guidelines:** +- Group related terms into categories +- Keep definitions concise — link to explanation docs for depth +- Use `###` for terms (makes them linkable and scannable) +- No horizontal rules between terms + +### Comprehensive Reference Guide + +For extensive multi-item references: + +``` +1. Title + Hook (one sentence) +2. Overview (## section) + - Diagram or table showing organization +3. Major Sections (## for each phase/category) + - Items (### for each item) + - Standardized fields: Command, Agent, Input, Output, Description + - Optional: Steps, Features, Use when +4. Next Steps (optional — only if genuinely helpful) +``` + +**Guidelines:** +- Standardize item fields across all items in the guide +- Use tables for comparing multiple items at once +- One diagram maximum per document +- No horizontal rules — use `##` sections for separation + +### General Reference Guidelines + +These apply to all reference documents: + +| Do | Don't | +|----|-------| +| Use `##` for major sections, `###` for items within | Use `####` headers | +| Use whitespace for separation | Use horizontal rules (`---`) | +| Link to explanation docs for "why" | Explain concepts inline | +| Use tables for structured data | Use nested lists | +| Use admonitions for important notes | Use bold paragraphs for callouts | +| Keep descriptions to 1-2 sentences | Write paragraphs of explanation | + +### Reference Admonitions + +Use sparingly — 1-2 maximum per reference document: + +| Admonition | Use In Reference | +|------------|------------------| +| `:::note[Prerequisites]` | Dependencies needed before using | +| `:::tip[Pro Tip]` | Shortcuts or advanced usage | +| `:::caution[Important]` | Critical caveats or warnings | + +### Reference Checklist + +Before submitting a reference document: + +- [ ] Hook clearly states what the document references +- [ ] Appropriate structure for reference type (catalog, deep-dive, etc.) +- [ ] No horizontal rules (`---`) +- [ ] No `####` headers +- [ ] No "Related" section (sidebar handles navigation) +- [ ] Items use consistent structure throughout +- [ ] Descriptions are 1-2 sentences maximum +- [ ] Tables used for structured/comparative data +- [ ] 1-2 admonitions maximum +- [ ] Links to explanation docs for conceptual depth + +## Glossary Structure + +Glossaries provide quick-reference definitions for project terminology. Unlike other reference documents, glossaries prioritize compact scanability over narrative explanation. + +### Layout Strategy + +Starlight auto-generates a right-side "On this page" navigation from headers. Use this to your advantage: + +- **Categories as `##` headers** — Appear in right nav for quick jumping +- **Terms in tables** — Compact rows, not individual headers +- **No inline TOC** — Right sidebar handles navigation; inline TOC is redundant +- **Right nav shows categories only** — Cleaner than listing every term + +This approach reduces content length by ~70% while improving navigation. + +### Table Format + +Each category uses a two-column table: + +```md +## Category Name + +| Term | Definition | +|------|------------| +| **Agent** | Specialized AI persona with specific expertise that guides users through workflows. | +| **Workflow** | Multi-step guided process that orchestrates AI agent activities to produce deliverables. | +``` + +### Definition Guidelines + +| Do | Don't | +|----|-------| +| Start with what it IS or DOES | Start with "This is..." or "A [term] is..." | +| Keep to 1-2 sentences | Write multi-paragraph explanations | +| Bold the term name in the cell | Use plain text for terms | +| Link to docs for deep dives | Explain full concepts inline | + +### Context Markers + +For terms with limited scope, add italic context at the start of the definition: + +```md +| **Tech-Spec** | *Quick Flow only.* Comprehensive technical plan for small changes. | +| **PRD** | *BMad Method/Enterprise.* Product-level planning document with vision and goals. | +``` + +Standard markers: +- `*Quick Flow only.*` +- `*BMad Method/Enterprise.*` +- `*Phase N.*` +- `*BMGD.*` +- `*Brownfield.*` + +### Cross-References + +Link related terms when helpful. Reference the category anchor since individual terms aren't headers: + +```md +| **Tech-Spec** | *Quick Flow only.* Technical plan for small changes. See [PRD](#planning-documents). | +``` + +### Organization + +- **Alphabetize terms** within each category table +- **Alphabetize categories** or order by logical progression (foundational → specific) +- **No catch-all sections** — Every term belongs in a specific category + +### Glossary Checklist + +Before submitting glossary changes: + +- [ ] Terms in tables, not individual headers +- [ ] Terms alphabetized within each category +- [ ] No inline TOC (right nav handles navigation) +- [ ] No horizontal rules (`---`) +- [ ] Definitions are 1-2 sentences +- [ ] Context markers italicized at definition start +- [ ] Term names bolded in table cells +- [ ] No "A [term] is..." definitions + ## Visual Hierarchy ### Avoid diff --git a/docs/how-to/customization/customize-workflows.md b/docs/_archive/customize-workflows.md similarity index 82% rename from docs/how-to/customization/customize-workflows.md rename to docs/_archive/customize-workflows.md index 97ddccd5..3a80e471 100644 --- a/docs/how-to/customization/customize-workflows.md +++ b/docs/_archive/customize-workflows.md @@ -2,12 +2,13 @@ title: "Workflow Customization Guide" --- - Customize and optimize workflows with step replacement and hooks. ## Status -> **Coming Soon:** Workflow customization is an upcoming capability. This guide will be updated when the feature is available. +:::note[Coming Soon] +Workflow customization is an upcoming capability. This guide will be updated when the feature is available. +::: ## What to Expect @@ -26,8 +27,4 @@ While workflow customization is in development, you can: - **Customize Agents** - Modify agent behavior using [Agent Customization](/docs/how-to/customization/customize-agents.md) - **Provide Feedback** - Share your workflow customization needs with the community ---- - **In the meantime:** Learn how to [create custom workflows](/docs/explanation/bmad-builder/index.md) from scratch. - -[← Back to Customization](/docs/how-to/customization/index.md) diff --git a/docs/how-to/customization/vendor-workflows.md b/docs/_archive/vendor-workflows.md similarity index 89% rename from docs/how-to/customization/vendor-workflows.md rename to docs/_archive/vendor-workflows.md index 3dfec9b1..4ad4f840 100644 --- a/docs/how-to/customization/vendor-workflows.md +++ b/docs/_archive/vendor-workflows.md @@ -1,9 +1,8 @@ --- -title: "Workflow Vendoring, Customization, and Inheritance (Official Support Coming Soon)" +title: "Workflow Vendoring, Customization, and Inheritance" --- - -Vendoring and Inheritance of workflows are 2 ways of sharing or reutilizing workflows - but with some key distinctions and use cases. +Use workflow vendoring and inheritance to share or reutilize workflows across modules. ## Workflow Vendoring @@ -24,7 +23,11 @@ From your modules agent definition, you would implement the menu item as follows At install time, it will clone the workflow and all of its required assets, and the agent that gets built will have an exec to a path installed in its own module. The content gets added to the folder you specify in exec. While it does not have to exactly match the source path, you will want to ensure you are specifying the workflow.md to be in a new location (in other words in this example, dev-story would not already be the path of another custom module workflow that already exists.) -## Workflow Inheritance (Official Support Coming Post Beta) +## Workflow Inheritance + +:::note[Coming Soon] +Official support for workflow inheritance is coming post beta. +::: Workflow Inheritance is a different concept, that allows you to modify or extend existing workflow. @@ -36,7 +39,11 @@ Some possible examples could be: - Sprint Planning - Collaborative Brainstorming Sessions -## Workflow Customization (Official Support Coming Post Beta) +## Workflow Customization + +:::note[Coming Soon] +Official support for workflow customization is coming post beta. +::: Similar to Workflow Inheritance, Workflow Customization will soon be allowed for certain workflows that are meant to be user customized - similar in process to how agents are customized now. diff --git a/docs/explanation/agents/barry-quick-flow.md b/docs/explanation/agents/barry-quick-flow.md index 5338d7fe..62d454ff 100644 --- a/docs/explanation/agents/barry-quick-flow.md +++ b/docs/explanation/agents/barry-quick-flow.md @@ -2,12 +2,13 @@ title: "Quick Flow Solo Dev Agent (Barry)" --- +Barry is the elite solo developer who takes projects from concept to deployment with ruthless efficiency — no handoffs, no delays, just pure focused development. -**Agent ID:** `_bmad/bmm/agents/quick-flow-solo-dev.md` -**Icon:** 🚀 -**Module:** BMM - ---- +:::note[Agent Info] +- **Agent ID:** `_bmad/bmm/agents/quick-flow-solo-dev.md` +- **Icon:** 🚀 +- **Module:** BMM +::: ## Overview @@ -31,8 +32,6 @@ Barry is the elite solo developer who lives and breathes the BMad Quick Flow wor - Documentation happens alongside development, not after - Ship early, ship often ---- - ## Menu Commands Barry owns the entire BMad Quick Flow path, providing a streamlined 3-step development process that eliminates handoffs and maximizes velocity. @@ -61,8 +60,6 @@ Barry owns the entire BMad Quick Flow path, providing a streamlined 3-step devel - **Description:** Bring in other experts when I need specialized backup - **Use when:** You need collaborative problem-solving or specialized expertise ---- - ## When to Use Barry ### Ideal Scenarios @@ -81,8 +78,6 @@ Barry owns the entire BMad Quick Flow path, providing a streamlined 3-step devel - **Proof of Concepts** - Rapid prototyping with production-quality code - **Performance Optimizations** - System improvements and scalability work ---- - ## The BMad Quick Flow Process Barry orchestrates a simple, efficient 3-step process: @@ -180,8 +175,6 @@ flowchart LR - Security considerations - Maintainability and documentation ---- - ## Collaboration with Other Agents ### Natural Partnerships @@ -201,8 +194,6 @@ In party mode, Barry often acts as: - **Performance Optimizer** - Ensuring scalable solutions - **Code Review Authority** - Validating technical approaches ---- - ## Tips for Working with Barry ### For Best Results @@ -228,8 +219,6 @@ In party mode, Barry often acts as: 4. **Over-planning** - I excel at rapid, pragmatic development 5. **Not Using Party Mode** - Missing collaborative insights for complex problems ---- - ## Example Workflow ```bash @@ -306,35 +295,34 @@ Implement OAuth 2.0 authentication with JWT tokens and role-based access control - [ ] Given admin role, when accessing admin endpoint, then allow access ``` ---- +## Common Questions -## Related Documentation +- [When should I use Barry vs other agents?](#when-should-i-use-barry-vs-other-agents) +- [Is the code review step mandatory?](#is-the-code-review-step-mandatory) +- [Can I skip the tech spec step?](#can-i-skip-the-tech-spec-step) +- [How does Barry differ from the Dev agent?](#how-does-barry-differ-from-the-dev-agent) +- [Can Barry handle enterprise-scale projects?](#can-barry-handle-enterprise-scale-projects) -- **[Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md)** - Getting started with BMM -- **[Agents Guide](/docs/explanation/core-concepts/agent-roles.md)** - Complete agent reference -- **[Four Phases](/docs/explanation/architecture/four-phases.md)** - Understanding development tracks -- **[Workflow Implementation](/docs/how-to/workflows/run-sprint-planning.md)** - Implementation workflows -- **[Party Mode](/docs/explanation/features/party-mode.md)** - Multi-agent collaboration +### When should I use Barry vs other agents? ---- +Use Barry for Quick Flow development (small to medium features), rapid prototyping, or when you need elite solo development. For large, complex projects requiring full team collaboration, consider the full BMad Method with specialized agents. -## Frequently Asked Questions +### Is the code review step mandatory? -**Q: When should I use Barry vs other agents?** -A: Use Barry for Quick Flow development (small to medium features), rapid prototyping, or when you need elite solo development. For large, complex projects requiring full team collaboration, consider the full BMad Method with specialized agents. +No, it's optional but highly recommended for critical features, team projects, or when learning best practices. -**Q: Is the code review step mandatory?** -A: No, it's optional but highly recommended for critical features, team projects, or when learning best practices. +### Can I skip the tech spec step? -**Q: Can I skip the tech spec step?** -A: Yes, the quick-dev workflow accepts direct instructions. However, tech specs are recommended for complex features or team collaboration. +Yes, the quick-dev workflow accepts direct instructions. However, tech specs are recommended for complex features or team collaboration. -**Q: How does Barry differ from the Dev agent?** -A: Barry handles the complete Quick Flow process (spec → dev → review) with elite architectural expertise, while the Dev agent specializes in pure implementation tasks. Barry is your autonomous end-to-end solution. +### How does Barry differ from the Dev agent? -**Q: Can Barry handle enterprise-scale projects?** -A: For enterprise-scale projects requiring full team collaboration, consider using the Enterprise Method track. Barry is optimized for rapid delivery in the Quick Flow track where solo execution wins. +Barry handles the complete Quick Flow process (spec → dev → review) with elite architectural expertise, while the Dev agent specializes in pure implementation tasks. Barry is your autonomous end-to-end solution. ---- +### Can Barry handle enterprise-scale projects? -**Ready to ship some code?** → Start with `/bmad:bmm:agents:quick-flow-solo-dev` +For enterprise-scale projects requiring full team collaboration, consider using the Enterprise Method track. Barry is optimized for rapid delivery in the Quick Flow track where solo execution wins. + +:::tip[Ready to Ship?] +Start with `/bmad:bmm:agents:quick-flow-solo-dev` +::: diff --git a/docs/explanation/agents/index.md b/docs/explanation/agents/index.md index ff47b035..c5f02426 100644 --- a/docs/explanation/agents/index.md +++ b/docs/explanation/agents/index.md @@ -3,26 +3,18 @@ title: "Understanding Agents" description: Understanding BMad agents and their roles --- - -Comprehensive guides to BMad's AI agents - their roles, capabilities, and how to work with them effectively. - ---- +Comprehensive guides to BMad's AI agents — their roles, capabilities, and how to work with them effectively. ## Agent Guides -### BMM Agents +| Agent | Description | +|-------|-------------| +| **[Agent Roles](/docs/explanation/core-concepts/agent-roles.md)** | Overview of all BMM agent roles and responsibilities | +| **[Quick Flow Solo Dev (Barry)](/docs/explanation/agents/barry-quick-flow.md)** | The dedicated agent for rapid development | +| **[Game Development Agents](/docs/explanation/game-dev/agents.md)** | Complete guide to BMGD's specialized game dev agents | -- **[Agent Roles](/docs/explanation/core-concepts/agent-roles.md)** - Overview of all BMM agent roles and responsibilities -- **[Quick Flow Solo Dev (Barry)](/docs/explanation/agents/barry-quick-flow.md)** - The dedicated agent for rapid development +## Getting Started -### BMGD Agents - -- **[Game Development Agents](/docs/explanation/game-dev/agents.md)** - Complete guide to BMGD's specialized game dev agents - ---- - -## Related - -- **[What Are Agents?](/docs/explanation/core-concepts/what-are-agents.md)** - Core concept explanation -- **[Party Mode](/docs/explanation/features/party-mode.md)** - Multi-agent collaboration -- **[Customize Agents](/docs/how-to/customization/customize-agents.md)** - How to customize agent behavior +1. Read **[What Are Agents?](/docs/explanation/core-concepts/what-are-agents.md)** for the core concept explanation +2. Review **[Agent Roles](/docs/explanation/core-concepts/agent-roles.md)** to understand available agents +3. Choose an agent that fits your workflow needs diff --git a/docs/explanation/architecture/four-phases.md b/docs/explanation/architecture/four-phases.md index 83538b9f..59c350f0 100644 --- a/docs/explanation/architecture/four-phases.md +++ b/docs/explanation/architecture/four-phases.md @@ -6,8 +6,6 @@ description: Understanding the four phases of the BMad Method BMad Method uses a four-phase approach that adapts to project complexity while ensuring consistent quality. ---- - ## Phase Overview | Phase | Name | Purpose | Required? | @@ -17,8 +15,6 @@ BMad Method uses a four-phase approach that adapts to project complexity while e | **Phase 3** | Solutioning | Technical design | Track-dependent | | **Phase 4** | Implementation | Building the software | Required | ---- - ## Phase 1: Analysis (Optional) Exploration and discovery workflows that help validate ideas and understand markets before planning. @@ -38,8 +34,6 @@ Exploration and discovery workflows that help validate ideas and understand mark - Well-defined features - Continuing existing work ---- - ## Phase 2: Planning (Required) Requirements definition using the scale-adaptive system to match planning depth to project complexity. @@ -52,8 +46,6 @@ Requirements definition using the scale-adaptive system to match planning depth **Key principle:** Define **what** to build and **why**. Leave **how** to Phase 3. ---- - ## Phase 3: Solutioning (Track-Dependent) Technical architecture and design decisions that prevent agent conflicts during implementation. @@ -73,8 +65,6 @@ Technical architecture and design decisions that prevent agent conflicts during **Key principle:** Make technical decisions explicit so all agents implement consistently. ---- - ## Phase 4: Implementation (Required) Iterative sprint-based development with story-centric workflow. @@ -86,10 +76,9 @@ Iterative sprint-based development with story-centric workflow. - `code-review` - Quality assurance - `retrospective` - Continuous improvement -**Key principle:** -One story at a time, complete each story's full lifecycle before starting the next. - ---- +:::tip[Key Principle] +One story at a time — complete each story's full lifecycle before starting the next. +::: ## Phase Flow by Track @@ -116,11 +105,3 @@ Phase 1 → Phase 2 (PRD) → Phase 3 (architecture + extended) → Phase 4 (imp ``` Same as BMad Method with optional extended workflows. - ---- - -## Related - -- [Why Solutioning Matters](/docs/explanation/architecture/why-solutioning-matters.md) -- [Preventing Agent Conflicts](/docs/explanation/architecture/preventing-agent-conflicts.md) -- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) diff --git a/docs/explanation/architecture/preventing-agent-conflicts.md b/docs/explanation/architecture/preventing-agent-conflicts.md index 6d0f7563..e8141989 100644 --- a/docs/explanation/architecture/preventing-agent-conflicts.md +++ b/docs/explanation/architecture/preventing-agent-conflicts.md @@ -6,8 +6,6 @@ description: How architecture prevents conflicts when multiple agents implement When multiple AI agents implement different parts of a system, they can make conflicting technical decisions. Architecture documentation prevents this by establishing shared standards. ---- - ## Common Conflict Types ### API Style Conflicts @@ -43,8 +41,6 @@ With architecture: - ADR specifies state management approach - All agents implement consistently ---- - ## How Architecture Prevents Conflicts ### 1. Explicit Decisions via ADRs @@ -70,8 +66,6 @@ Explicit documentation of: - Code organization - Testing patterns ---- - ## Architecture as Shared Context Think of architecture as the shared context that all agents read before implementing: @@ -88,8 +82,6 @@ Agent C reads architecture → implements Epic 3 Result: Consistent implementation ``` ---- - ## Key ADR Topics Common decisions that prevent conflicts: @@ -103,36 +95,17 @@ Common decisions that prevent conflicts: | Styling | CSS Modules vs Tailwind vs Styled Components | | Testing | Jest + Playwright vs Vitest + Cypress | ---- +## Anti-Patterns to Avoid -## Anti-Patterns - -### ❌ Implicit Decisions - -"We'll figure out the API style as we go" -→ Leads to inconsistency - -### ❌ Over-Documentation - -Every minor choice documented -→ Analysis paralysis, wasted time - -### ❌ Stale Architecture - -Document written once, never updated -→ Agents follow outdated patterns - -### ✅ Correct Approach +:::caution[Common Mistakes] +- **Implicit Decisions** — "We'll figure out the API style as we go" leads to inconsistency +- **Over-Documentation** — Documenting every minor choice causes analysis paralysis +- **Stale Architecture** — Documents written once and never updated cause agents to follow outdated patterns +::: +:::tip[Correct Approach] - Document decisions that cross epic boundaries - Focus on conflict-prone areas - Update architecture as you learn - Use `correct-course` for significant changes - ---- - -## Related - -- [Why Solutioning Matters](/docs/explanation/architecture/why-solutioning-matters.md) -- [Four Phases](/docs/explanation/architecture/four-phases.md) -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) +::: diff --git a/docs/explanation/architecture/why-solutioning-matters.md b/docs/explanation/architecture/why-solutioning-matters.md index d10f76d2..cb37b7c5 100644 --- a/docs/explanation/architecture/why-solutioning-matters.md +++ b/docs/explanation/architecture/why-solutioning-matters.md @@ -6,8 +6,6 @@ description: Understanding why the solutioning phase is critical for multi-epic Phase 3 (Solutioning) translates **what** to build (from Planning) into **how** to build it (technical design). This phase prevents agent conflicts in multi-epic projects by documenting architectural decisions before implementation begins. ---- - ## The Problem Without Solutioning ``` @@ -18,8 +16,6 @@ Result: Inconsistent API design, integration nightmare When multiple agents implement different parts of a system without shared architectural guidance, they make independent technical decisions that may conflict. ---- - ## The Solution With Solutioning ``` @@ -30,8 +26,6 @@ Result: Consistent implementation, no conflicts By documenting technical decisions explicitly, all agents implement consistently and integration becomes straightforward. ---- - ## Solutioning vs Planning | Aspect | Planning (Phase 2) | Solutioning (Phase 3) | @@ -43,8 +37,6 @@ By documenting technical decisions explicitly, all agents implement consistently | Document | PRD (FRs/NFRs) | Architecture + Epic Files | | Level | Business logic | Technical design + Work breakdown | ---- - ## Key Principle **Make technical decisions explicit and documented** so all agents implement consistently. @@ -56,8 +48,6 @@ This prevents: - Naming convention mismatches - Security approach variations ---- - ## When Solutioning is Required | Track | Solutioning Required? | @@ -67,9 +57,9 @@ This prevents: | BMad Method Complex | Yes | | Enterprise | Yes | -**Rule of thumb:** If you have multiple epics that could be implemented by different agents, you need solutioning. - ---- +:::tip[Rule of Thumb] +If you have multiple epics that could be implemented by different agents, you need solutioning. +::: ## The Cost of Skipping @@ -80,12 +70,6 @@ Skipping solutioning on complex projects leads to: - **Longer development time** overall - **Technical debt** from inconsistent patterns +:::caution[Cost Multiplier] Catching alignment issues in solutioning is 10× faster than discovering them during implementation. - ---- - -## Related - -- [Four Phases](/docs/explanation/architecture/four-phases.md) - Overview of all phases -- [Preventing Agent Conflicts](/docs/explanation/architecture/preventing-agent-conflicts.md) - Detailed conflict prevention -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - How to do it +::: diff --git a/docs/explanation/bmad-builder/custom-content-types.md b/docs/explanation/bmad-builder/custom-content-types.md index d593d50b..408cd411 100644 --- a/docs/explanation/bmad-builder/custom-content-types.md +++ b/docs/explanation/bmad-builder/custom-content-types.md @@ -2,10 +2,13 @@ title: "Custom Content" --- +BMad supports several categories of custom content that extend the platform's capabilities — from simple personal agents to full-featured professional modules. -BMad supports several categories of officially supported custom content that extend the platform's capabilities. Custom content can be created manually or with the recommended assistance of the BMad Builder (BoMB) Module. The BoMB Agents provides workflows and expertise to plan and build any custom content you can imagine. +:::tip[Recommended Approach] +Use the BMad Builder (BoMB) Module for guided workflows and expertise when creating custom content. +::: -This flexibility transforms the platform beyond its current capabilities, enabling: +This flexibility enables: - Extensions and add-ons for existing modules (BMad Method, Creative Intelligence Suite) - Completely new modules, workflows, templates, and agents outside software engineering @@ -96,7 +99,9 @@ The distinction between simple and expert agents lies in their structure: - When installed, the sidecar folder (`[agentname]-sidecar`) is placed in the user memory location - has metadata type: expert +:::note[Key Distinction] The key distinction is the presence of a sidecar folder. As web and consumer agent tools evolve to support common memory mechanisms, storage formats, and MCP, the writable memory files will adapt to support these evolving standards. +::: Custom agents can be: @@ -117,4 +122,6 @@ A custom workflow created outside of a larger module can still be distributed an - Slash commands - Manual command/prompt execution when supported by tools +:::tip[Core Concept] At its core, a custom workflow is a single or series of prompts designed to achieve a specific outcome. +::: diff --git a/docs/explanation/bmad-builder/index.md b/docs/explanation/bmad-builder/index.md index b1d0f39f..6653d9ca 100644 --- a/docs/explanation/bmad-builder/index.md +++ b/docs/explanation/bmad-builder/index.md @@ -3,64 +3,43 @@ title: "BMad Builder (BMB)" description: Create custom agents, workflows, and modules for BMad --- - -Create custom agents, workflows, and modules for BMad. - ---- +Create custom agents, workflows, and modules for BMad — from simple personal assistants to full-featured professional tools. ## Quick Start -- **[Agent Creation Guide](/docs/tutorials/advanced/create-custom-agent.md)** - Step-by-step guide to building your first agent - ---- +| Resource | Description | +|----------|-------------| +| **[Agent Creation Guide](/docs/tutorials/advanced/create-custom-agent.md)** | Step-by-step guide to building your first agent | +| **[Install Custom Modules](/docs/how-to/installation/install-custom-modules.md)** | Installing standalone simple and expert agents | ## Agent Architecture -Comprehensive guides for each agent type: - -- **Simple Agent Architecture** - Self-contained, optimized, personality-driven -- **Expert Agent Architecture** - Memory, sidecar files, domain restrictions -- **Module Agent Architecture** - Workflow integration, professional tools - ---- +| Type | Description | +|------|-------------| +| **Simple Agent** | Self-contained, optimized, personality-driven | +| **Expert Agent** | Memory, sidecar files, domain restrictions | +| **Module Agent** | Workflow integration, professional tools | ## Key Concepts -### YAML to XML Compilation - Agents are authored in YAML with Handlebars templating. The compiler auto-injects: -1. **Frontmatter** - Name and description from metadata -2. **Activation Block** - Steps, menu handlers, rules -3. **Menu Enhancement** - `*help` and `*exit` commands added automatically -4. **Trigger Prefixing** - Your triggers auto-prefixed with `*` +1. **Frontmatter** — Name and description from metadata +2. **Activation Block** — Steps, menu handlers, rules +3. **Menu Enhancement** — `*help` and `*exit` commands added automatically +4. **Trigger Prefixing** — Your triggers auto-prefixed with `*` ---- +:::note[Learn More] +See [Custom Content Types](/docs/explanation/bmad-builder/custom-content-types.md) for detailed explanations of all content categories. +::: ## Reference Examples Production-ready examples available in the BMB reference folder: -### Simple Agents -- **commit-poet** - Commit message artisan with style customization - -### Expert Agents -- **journal-keeper** - Personal journal companion with memory and pattern recognition - -### Module Agents -- **security-engineer** - BMM security specialist with threat modeling -- **trend-analyst** - CIS trend intelligence expert - ---- - -## Installation Guide - -For installing standalone simple and expert agents, see: -- [Install Custom Modules](/docs/how-to/installation/install-custom-modules.md) - ---- - -## Related - -- [Custom Content Types](/docs/explanation/bmad-builder/custom-content-types.md) - Understanding content types -- [Create Custom Agent](/docs/tutorials/advanced/create-custom-agent.md) - Tutorial +| Agent | Type | Description | +|-------|------|-------------| +| **commit-poet** | Simple | Commit message artisan with style customization | +| **journal-keeper** | Expert | Personal journal companion with memory and pattern recognition | +| **security-engineer** | Module | BMM security specialist with threat modeling | +| **trend-analyst** | Module | CIS trend intelligence expert | diff --git a/docs/explanation/bmm/index.md b/docs/explanation/bmm/index.md index 29e0cd21..2631a43e 100644 --- a/docs/explanation/bmm/index.md +++ b/docs/explanation/bmm/index.md @@ -2,28 +2,22 @@ title: "BMM Documentation" --- +Complete guides for the BMad Method Module (BMM) — AI-powered agile development workflows that adapt to your project's complexity. -Complete guides for the BMad Method Module (BMM) - AI-powered agile development workflows that adapt to your project's complexity. +## Getting Started ---- - -## 🚀 Getting Started +:::tip[Quick Path] +Install → workflow-init → Follow agent guidance +::: **New to BMM?** Start here: -- **[Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md)** - Step-by-step guide to building your first project - - Installation and setup - - Understanding the four phases - - Running your first workflows - - Agent-based development flow +| Resource | Description | +|----------|-------------| +| **[Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md)** | Step-by-step guide to building your first project | +| **[Complete Workflow Diagram](../../tutorials/getting-started/images/workflow-method-greenfield.svg)** | Visual flowchart showing all phases, agents, and decision points | -**Quick Path:** Install → workflow-init → Follow agent guidance - -### 📊 Visual Overview - -**[Complete Workflow Diagram](../../tutorials/getting-started/images/workflow-method-greenfield.svg)** - Visual flowchart showing all phases, agents (color-coded), and decision points for the BMad Method standard greenfield track. - -## 📖 Core Concepts +## Core Concepts The BMad Method is meant to be adapted and customized to your specific needs. In this realm there is no one size fits all - your needs are unique, and BMad Method is meant to support this (and if it does not, can be further customized or extended with new modules). @@ -45,7 +39,7 @@ First know there is the full BMad Method Process and then there is a Quick Flow - **TEA engagement (optional)** - Choose TEA engagement: none, TEA-only (standalone), or integrated by track. See **[Test Architect Guide](/docs/explanation/features/tea-overview.md)**. -## 🤖 Agents and Collaboration +## Agents and Collaboration Complete guide to BMM's AI agent team: @@ -63,7 +57,7 @@ Complete guide to BMM's AI agent team: - Agent customization in party mode - Best practices -## 🔧 Working with Existing Code +## Working with Existing Code Comprehensive guide for brownfield development: @@ -74,14 +68,14 @@ Comprehensive guide for brownfield development: - Phase-by-phase workflow guidance - Common scenarios -## 📚 Quick References +## Quick References Essential reference materials: - **[Glossary](/docs/reference/glossary/index.md)** - Key terminology and concepts - **[FAQ](/docs/explanation/faq/index.md)** - Frequently asked questions across all topics -## 🎯 Choose Your Path +## Choose Your Path ### I need to... @@ -95,7 +89,7 @@ Essential reference materials: → Read [Brownfield Development Guide](/docs/how-to/brownfield/index.md) → Pay special attention to documentation requirements for brownfield projects -## 📋 Workflow Guides +## Workflow Guides Comprehensive documentation for all BMM workflows organized by phase: @@ -124,7 +118,7 @@ Comprehensive documentation for all BMM workflows organized by phase: - Test strategy, automation, quality gates - TEA agent and test healing -## 🌐 External Resources +## External Resources ### Community and Support @@ -132,4 +126,6 @@ Comprehensive documentation for all BMM workflows organized by phase: - **[GitHub Issues](https://github.com/bmad-code-org/BMAD-METHOD/issues)** - Report bugs or request features - **[YouTube Channel](https://www.youtube.com/@BMadCode)** - Video tutorials and walkthroughs -**Ready to begin?** → [Start with the Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) +:::tip[Ready to Begin?] +[Start with the Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) +::: diff --git a/docs/explanation/core-concepts/agent-roles.md b/docs/explanation/core-concepts/agent-roles.md index 4a9ada9d..31e0d76c 100644 --- a/docs/explanation/core-concepts/agent-roles.md +++ b/docs/explanation/core-concepts/agent-roles.md @@ -3,11 +3,8 @@ title: "Agent Roles in BMad Method" description: Understanding the different agent roles in BMad Method --- - BMad Method uses specialized AI agents, each with a distinct role, expertise, and personality. Understanding these roles helps you know which agent to use for each task. ---- - ## Core Agents Overview | Agent | Role | Primary Phase | @@ -21,8 +18,6 @@ BMad Method uses specialized AI agents, each with a distinct role, expertise, an | **UX Designer** | User experience | Phase 2-3 | | **Quick Flow Solo Dev** | Fast solo development | All phases (Quick Flow) | ---- - ## Phase 1: Analysis ### Analyst (Mary) @@ -43,8 +38,6 @@ Business analysis and research specialist. **When to use:** Starting new projects, exploring ideas, validating market fit, documenting existing codebases. ---- - ## Phase 2: Planning ### PM (John) @@ -80,8 +73,6 @@ User experience and UI design specialist. **When to use:** When UX is a primary differentiator, complex user workflows, design system creation. ---- - ## Phase 3: Solutioning ### Architect (Winston) @@ -100,8 +91,6 @@ System architecture and technical design expert. **When to use:** Multi-epic projects, cross-cutting technical decisions, preventing agent conflicts. ---- - ## Phase 4: Implementation ### SM (Bob) @@ -138,8 +127,6 @@ Story implementation and code review specialist. **When to use:** Writing code, implementing stories, reviewing quality. ---- - ## Cross-Phase Agents ### TEA (Murat) @@ -159,8 +146,6 @@ Test architecture and quality strategy expert. **When to use:** Setting up testing, creating test plans, quality gates. ---- - ## Quick Flow ### Quick Flow Solo Dev (Barry) @@ -179,8 +164,6 @@ Fast solo development without handoffs. **When to use:** Bug fixes, small features, rapid prototyping. ---- - ## Choosing the Right Agent | Task | Agent | @@ -194,11 +177,3 @@ Fast solo development without handoffs. | Writing code | DEV | | Setting up tests | TEA | | Quick bug fix | Quick Flow Solo Dev | - ---- - -## Related - -- [What Are Agents](/docs/explanation/core-concepts/what-are-agents.md) - Foundational concepts -- [Agent Reference](/docs/reference/agents/index.md) - Complete command reference -- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) diff --git a/docs/explanation/core-concepts/index.md b/docs/explanation/core-concepts/index.md index ef03bbd2..076c3820 100644 --- a/docs/explanation/core-concepts/index.md +++ b/docs/explanation/core-concepts/index.md @@ -2,7 +2,6 @@ title: "BMad Core Concepts" --- - Understanding the fundamental building blocks of the BMad Method. ## The Essentials @@ -34,7 +33,3 @@ Start here to understand what BMad is and how it works: ### Advanced - **[Web Bundles](/docs/explanation/features/web-bundles.md)** - Use BMad in Gemini Gems and Custom GPTs - ---- - -**Next:** Read the [Agents Guide](/docs/explanation/core-concepts/what-are-agents.md) to understand the core building block of BMad. diff --git a/docs/explanation/core-concepts/what-are-agents.md b/docs/explanation/core-concepts/what-are-agents.md index 1f3169b1..86d49642 100644 --- a/docs/explanation/core-concepts/what-are-agents.md +++ b/docs/explanation/core-concepts/what-are-agents.md @@ -2,7 +2,6 @@ title: "Agents" --- - Agents are AI assistants that help you accomplish tasks. Each agent has a unique personality, specialized capabilities, and an interactive menu. ## Agent Types @@ -72,6 +71,10 @@ All agents share these building blocks: ## Which Should You Use? +:::tip[Quick Decision] +Choose **Simple** for focused, one-off tasks with no memory needs. Choose **Expert** when you need persistent context and complex workflows. +::: + **Choose Simple when:** - You need a task done quickly and reliably - The scope is well-defined and won't change much @@ -90,7 +93,3 @@ BMad provides the **BMad Builder (BMB)** module for creating your own agents. Se ## Customizing Existing Agents You can modify any agent's behavior without editing core files. See [BMad Customization](/docs/how-to/customization/index.md) for details. It is critical to never modify an installed agents .md file directly and follow the customization process, this way future updates to the agent or module its part of will continue to be updated and recompiled with the installer tool, and your customizations will still be retained. - ---- - -**Next:** Learn about [Workflows](/docs/explanation/core-concepts/what-are-workflows.md) to see how agents accomplish complex tasks. diff --git a/docs/explanation/core-concepts/what-are-modules.md b/docs/explanation/core-concepts/what-are-modules.md index 3d6ae383..4527b9ba 100644 --- a/docs/explanation/core-concepts/what-are-modules.md +++ b/docs/explanation/core-concepts/what-are-modules.md @@ -2,7 +2,6 @@ title: "Modules" --- - Modules are organized collections of agents and workflows that solve specific problems or address particular domains. ## What is a Module? @@ -16,6 +15,10 @@ A module is a self-contained package that includes: ## Official Modules +:::note[Core is Always Installed] +The Core module is automatically included with every BMad installation. It provides the foundation that other modules build upon. +::: + ### Core Module Always installed, provides shared functionality: - Global configuration @@ -73,7 +76,3 @@ Custom modules are installed the same way as official modules. During BMad installation, you choose which modules to install. You can also add or remove modules later by re-running the installer. See [Installation Guide](/docs/how-to/installation/index.md) for details. - ---- - -**Next:** Read the [Installation Guide](/docs/how-to/installation/index.md) to set up BMad with the modules you need. diff --git a/docs/explanation/core-concepts/what-are-workflows.md b/docs/explanation/core-concepts/what-are-workflows.md index 19f7e97c..e60d8d80 100644 --- a/docs/explanation/core-concepts/what-are-workflows.md +++ b/docs/explanation/core-concepts/what-are-workflows.md @@ -2,13 +2,10 @@ title: "Workflows" --- - Workflows are like prompts on steroids. They harness the untapped power and control of LLMs through progressive disclosure—breaking complex tasks into focused steps that execute sequentially. Instead of random AI slop where you hope for the best, workflows give you repeatable, reliable, high-quality outputs. This guide explains what workflows are, why they're powerful, and how to think about designing them. ---- - ## What Is a Workflow? A workflow is a structured process where the AI executes steps sequentially to accomplish a task. Each step has a specific purpose, and the AI moves through them methodically—whether that involves extensive collaboration or minimal user interaction. @@ -71,9 +68,9 @@ When workflows involve users, they should be **facilitative, not directive**. Th The AI figures out exact wording and question order based on conversation context. This makes interactions feel natural and responsive rather than robotic and interrogative. -**When to be prescriptive**: Some workflows require exact scripts—medical intake, legal compliance, safety-critical procedures. But these are the exception, not the rule. Default to facilitative intent-based approaches unless compliance or regulation demands otherwise. - ---- +:::caution[When to Be Prescriptive] +Some workflows require exact scripts—medical intake, legal compliance, safety-critical procedures. But these are the exception. Default to facilitative intent-based approaches unless compliance or regulation demands otherwise. +::: ## Why Workflows Matter @@ -85,8 +82,6 @@ Workflows solve three fundamental problems with AI interactions: **Quality**: Sequential enforcement prevents shortcuts. The AI must complete each step fully before moving on, ensuring thorough, complete outputs instead of rushed, half-baked results. ---- - ## How Workflows Work ### The Basic Structure @@ -150,8 +145,6 @@ All BMad planning workflows and the BMB module (will) use this tri-modal pattern This tri-modal approach gives you the best of both worlds: the creativity and flexibility to build what you need, the quality assurance of validation that can run anytime, and the ability to iterate while staying true to standards that make the artifacts valuable across sessions and team members. ---- - ## Design Decisions Before building a workflow, answer these questions: @@ -166,8 +159,6 @@ Before building a workflow, answer these questions: **Intent or prescriptive?**: Is this intent-based facilitation (most workflows) or prescriptive compliance (medical, legal, regulated)? ---- - ## Learning from Examples The best way to understand workflows is to study real examples. Look at the official BMad modules: @@ -181,8 +172,6 @@ Study the workflow.md files to understand how each workflow starts. Examine step Copy patterns that work. Adapt them to your domain. The structure is consistent across all workflows—the content and steps change, but the architecture stays the same. ---- - ## When to Use Workflows Use workflows when: @@ -206,8 +195,6 @@ Modified BMad Workflows If there's only one thing to do and it can be explained in under about 300 lines - don't bother with step files. Instead, you can still have a short single file workflow.md file. ---- - ## The Bottom Line Workflows transform AI from a tool that gives variable, unpredictable results into a reliable system for complex, multi-step processes. Through progressive disclosure, sequential execution, guided facilitation, and thoughtful design, workflows give you control and repeatability that ad-hoc prompting alone can't match. diff --git a/docs/explanation/creative-intelligence/index.md b/docs/explanation/creative-intelligence/index.md index ecc3e7a9..439dc6f3 100644 --- a/docs/explanation/creative-intelligence/index.md +++ b/docs/explanation/creative-intelligence/index.md @@ -3,17 +3,12 @@ title: "Creative Intelligence Suite (CIS)" description: AI-powered creative facilitation with the Creative Intelligence Suite --- - AI-powered creative facilitation transforming strategic thinking through expert coaching across five specialized domains. ---- - ## Core Capabilities CIS provides structured creative methodologies through distinctive agent personas who act as master facilitators, drawing out insights through strategic questioning rather than generating solutions directly. ---- - ## Specialized Agents - **Carson** - Brainstorming Specialist (energetic facilitator) @@ -22,8 +17,6 @@ CIS provides structured creative methodologies through distinctive agent persona - **Victor** - Innovation Oracle (bold strategic precision) - **Sophia** - Master Storyteller (whimsical narrator) ---- - ## Interactive Workflows **5 Workflows** with **150+ Creative Techniques:** @@ -63,8 +56,6 @@ Business model disruption: - Story circles - Compelling pitch structures ---- - ## Quick Start ### Direct Workflow @@ -83,8 +74,6 @@ agent cis/brainstorming-coach > *brainstorm ``` ---- - ## Key Differentiators - **Facilitation Over Generation** - Guides discovery through questions @@ -93,8 +82,6 @@ agent cis/brainstorming-coach - **Persona-Driven** - Unique communication styles - **Rich Method Libraries** - 150+ proven techniques ---- - ## Integration Points CIS workflows integrate with: @@ -103,8 +90,6 @@ CIS workflows integrate with: - **BMB** - Creative module design - **Custom Modules** - Shared creative resource ---- - ## Best Practices 1. **Set clear objectives** before starting sessions @@ -113,9 +98,6 @@ CIS workflows integrate with: 4. **Take breaks** when energy flags 5. **Document insights** as they emerge ---- - -## Related - -- [Facilitation Over Generation](/docs/explanation/philosophy/facilitation-over-generation.md) - Core philosophy -- [Brainstorming Techniques](/docs/explanation/features/brainstorming-techniques.md) - Technique reference +:::tip[Learn More] +See [Facilitation Over Generation](/docs/explanation/philosophy/facilitation-over-generation.md) for the core philosophy behind CIS. +::: diff --git a/docs/explanation/features/advanced-elicitation.md b/docs/explanation/features/advanced-elicitation.md index db445770..0185977f 100644 --- a/docs/explanation/features/advanced-elicitation.md +++ b/docs/explanation/features/advanced-elicitation.md @@ -2,13 +2,10 @@ title: "Advanced Elicitation" --- - -**Push the LLM to rethink its work through 50+ reasoning methods—essentially, LLM brainstorming.** +Push the LLM to rethink its work through 50+ reasoning methods — essentially, LLM brainstorming. Advanced Elicitation is the inverse of Brainstorming. Instead of pulling ideas out of you, the LLM applies sophisticated reasoning techniques to re-examine and enhance content it has just generated. It's the LLM brainstorming with itself to find better approaches, uncover hidden issues, and discover improvements it missed on the first pass. ---- - ## When to Use It - After a workflow generates a section of content and you want to explore alternatives @@ -17,8 +14,6 @@ Advanced Elicitation is the inverse of Brainstorming. Instead of pulling ideas o - To stress-test assumptions, explore edge cases, or find weaknesses in generated plans - When you want the LLM to "think again" but with structured reasoning methods ---- - ## How It Works ### 1. Context Analysis @@ -44,8 +39,6 @@ Based on context, 5 methods are intelligently selected from a library of 50+ tec ### 4. Party Mode Integration (Optional) If Party Mode is active, BMad agents participate randomly in the elicitation process, adding their unique perspectives to the methods. ---- - ## Method Categories | Category | Focus | Example Methods | @@ -62,8 +55,6 @@ If Party Mode is active, BMad agents participate randomly in the elicitation pro | **Philosophical** | Conceptual clarity | Occam's Razor, Ethical Dilemmas | | **Retrospective** | Reflection and lessons | Hindsight Reflection, Lessons Learned Extraction | ---- - ## Key Features - **50+ reasoning methods** — Spanning core logic to advanced multi-step reasoning frameworks @@ -72,8 +63,6 @@ If Party Mode is active, BMad agents participate randomly in the elicitation pro - **User control** — Accept or discard each enhancement before proceeding - **Party Mode integration** — Agents can participate when Party Mode is active ---- - ## Workflow Integration Advanced Elicitation is a core workflow designed to be invoked by other workflows during content generation: @@ -96,8 +85,6 @@ When called from a workflow: A specification generation workflow could invoke Advanced Elicitation after producing each major section (requirements, architecture, implementation plan). The workflow would pass the generated section, and Advanced Elicitation would offer methods like "Stakeholder Round Table" to gather diverse perspectives on requirements, or "Red Team vs Blue Team" to stress-test the architecture for vulnerabilities. ---- - ## Advanced Elicitation vs. Brainstorming | | **Advanced Elicitation** | **Brainstorming** | diff --git a/docs/explanation/features/brainstorming-techniques.md b/docs/explanation/features/brainstorming-techniques.md index 23cc6a0b..704ddb3a 100644 --- a/docs/explanation/features/brainstorming-techniques.md +++ b/docs/explanation/features/brainstorming-techniques.md @@ -2,14 +2,13 @@ title: "Brainstorming" --- +Facilitate structured creative sessions using 60+ proven ideation techniques. -**Facilitate structured creative sessions using 60+ proven ideation techniques.** +The Brainstorming workflow is an interactive facilitation system that helps you unlock your own creativity. The AI acts as coach, guide, and creative partner — using proven techniques to draw out ideas and insights that are already within you. -The Brainstorming workflow is an interactive facilitation system that helps you unlock your own creativity. The AI acts as coach, guide, and creative partner—using proven techniques to draw out ideas and insights that are already within you. - -**Important:** Every idea comes from you. The workflow creates the conditions for your best thinking to emerge through guided exploration, but you are the source. - ---- +:::note[Important] +Every idea comes from you. The workflow creates the conditions for your best thinking to emerge through guided exploration, but you are the source. +::: ## When to Use It @@ -19,8 +18,6 @@ The Brainstorming workflow is an interactive facilitation system that helps you - Systematically developing ideas from raw concepts to actionable plans - Team ideation (with collaborative techniques) or personal creative exploration ---- - ## How It Works ### 1. Session Setup @@ -44,8 +41,6 @@ All your generated ideas are organized into themes and prioritized. ### 5. Action Planning Top ideas get concrete next steps, resource requirements, and success metrics. ---- - ## What You Get A comprehensive session document that captures the entire journey: @@ -57,9 +52,7 @@ A comprehensive session document that captures the entire journey: - Prioritized ideas with action plans - Session highlights and key breakthroughs -This document becomes a permanent record of your creative process—valuable for future reference, sharing with stakeholders, or continuing the session later. - ---- +This document becomes a permanent record of your creative process — valuable for future reference, sharing with stakeholders, or continuing the session later. ## Technique Categories @@ -76,8 +69,6 @@ This document becomes a permanent record of your creative process—valuable for | **Cultural** | Traditional knowledge and cross-cultural approaches | | **Introspective Delight** | Inner wisdom and authentic exploration | ---- - ## Key Features - **Interactive coaching** — Pulls ideas *out* of you, doesn't generate them for you @@ -85,8 +76,6 @@ This document becomes a permanent record of your creative process—valuable for - **Session preservation** — Every step, insight, and action plan is documented - **Continuation support** — Pause sessions and return later, or extend with additional techniques ---- - ## Workflow Integration Brainstorming is a core workflow designed to be invoked and configured by other modules. When called from another workflow, it accepts contextual parameters: diff --git a/docs/explanation/features/party-mode.md b/docs/explanation/features/party-mode.md index a3a494fa..1ff6d5cf 100644 --- a/docs/explanation/features/party-mode.md +++ b/docs/explanation/features/party-mode.md @@ -2,8 +2,7 @@ title: "Party Mode: Multi-Agent Collaboration" --- - -**Get all your AI agents in one conversation** +Get all your AI agents in one conversation. ## What is Party Mode? @@ -20,8 +19,6 @@ Type `/bmad:core:workflows:party-mode` (or `*party-mode` from any agent or at ke - **Sprint retrospectives** - Party mode powers the retrospective workflow - **Sprint planning** - Multi-agent collaboration for planning sessions ---- - ## How It Works **The basics:** @@ -34,8 +31,6 @@ Type `/bmad:core:workflows:party-mode` (or `*party-mode` from any agent or at ke **That's it.** No complex merging, no runtime magic. Just agents talking. ---- - ## Quick Start ```bash @@ -51,8 +46,6 @@ Ask questions, respond to agents, direct the conversation Type: exit ``` ---- - ## Fun Examples ### Example 1: Calling Out Bad Architecture @@ -69,8 +62,6 @@ Type: exit _(Watch them debate whose fault it really was - it's therapeutic)_ ---- - ### Example 2: Creative Brainstorming **You:** "How do we make onboarding feel magical instead of boring?" @@ -85,8 +76,6 @@ _(Watch them debate whose fault it really was - it's therapeutic)_ _(Ideas cross-pollinate and evolve)_ ---- - ### Example 3: Technical Decision **You:** "Monolith or microservices for MVP?" @@ -101,12 +90,6 @@ _(Ideas cross-pollinate and evolve)_ _(Multiple perspectives reveal the right answer)_ -## Related Documentation - -- [Agents Reference](/docs/reference/agents/index.md) - Complete agent reference -- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM -- [Setup Party Mode](/docs/how-to/workflows/setup-party-mode.md) - How to use it - ---- - -_Better decisions through diverse perspectives. Welcome to party mode._ +:::tip[Better Decisions] +Better decisions through diverse perspectives. Welcome to party mode. +::: diff --git a/docs/explanation/features/quick-flow.md b/docs/explanation/features/quick-flow.md index 85791e85..29857ef2 100644 --- a/docs/explanation/features/quick-flow.md +++ b/docs/explanation/features/quick-flow.md @@ -3,18 +3,14 @@ title: "Quick Spec Flow" description: Understanding Quick Spec Flow for rapid development in BMad Method --- - Quick Spec Flow is a streamlined alternative to the full BMad Method for Quick Flow track projects. Instead of going through Product Brief → PRD → Architecture, you go straight to a context-aware technical specification and start coding. -**Perfect for:** Bug fixes, small features, rapid prototyping, and quick enhancements - -**Time to implementation:** Minutes, not hours - ---- +- **Perfect for:** Bug fixes, small features, rapid prototyping, and quick enhancements +- **Time to implementation:** Minutes, not hours ## When to Use Quick Flow -### ✅ Use Quick Flow when: +### Use Quick Flow when: - Single bug fix or small enhancement - Small feature with clear scope (typically 1-15 stories) @@ -22,16 +18,16 @@ Quick Spec Flow is a streamlined alternative to the full BMad Method for Quick F - Adding to existing brownfield codebase - You know exactly what you want to build -### ❌ Use BMad Method or Enterprise when: +### Use BMad Method or Enterprise when: - Building new products or major features - Need stakeholder alignment - Complex multi-team coordination - Requires extensive planning and architecture -💡 **Not sure?** Run `workflow-init` to get a recommendation based on your project's needs! - ---- +:::tip[Not Sure?] +Run `workflow-init` to get a recommendation based on your project's needs. +::: ## Quick Flow Overview @@ -61,19 +57,15 @@ flowchart TD style DONE fill:#f9f,stroke:#333,stroke-width:3px ``` ---- - ## What Makes It Quick -- ✅ No Product Brief needed -- ✅ No PRD needed -- ✅ No Architecture doc needed -- ✅ Auto-detects your stack -- ✅ Auto-analyzes brownfield code -- ✅ Auto-validates quality -- ✅ Story context optional (tech-spec is comprehensive!) - ---- +- No Product Brief needed +- No PRD needed +- No Architecture doc needed +- Auto-detects your stack +- Auto-analyzes brownfield code +- Auto-validates quality +- Story context optional (tech-spec is comprehensive) ## Smart Context Discovery @@ -119,19 +111,15 @@ Should I follow these existing conventions? (yes/no) **You decide:** Conform to existing patterns or establish new standards! ---- - ## Auto-Validation Quick Spec Flow **automatically validates** everything: -- ✅ Context gathering completeness -- ✅ Definitiveness (no "use X or Y" statements) -- ✅ Brownfield integration quality -- ✅ Stack alignment -- ✅ Implementation readiness - ---- +- Context gathering completeness +- Definitiveness (no "use X or Y" statements) +- Brownfield integration quality +- Stack alignment +- Implementation readiness ## Comparison: Quick Flow vs Full BMM @@ -145,25 +133,17 @@ Quick Spec Flow **automatically validates** everything: | **Validation** | Auto-validates everything | Manual validation steps | | **Brownfield** | Auto-analyzes and conforms | Manual documentation required | ---- - ## When to Graduate to BMad Method Start with Quick Flow, but switch to BMad Method when: -- ❌ Project grows beyond initial scope -- ❌ Multiple teams need coordination -- ❌ Stakeholders need formal documentation -- ❌ Product vision is unclear -- ❌ Architectural decisions need deep analysis -- ❌ Compliance/regulatory requirements exist +- Project grows beyond initial scope +- Multiple teams need coordination +- Stakeholders need formal documentation +- Product vision is unclear +- Architectural decisions need deep analysis +- Compliance/regulatory requirements exist -💡 **Tip:** You can always run `workflow-init` later to transition from Quick Flow to BMad Method! - ---- - -## Related - -- [Quick Spec](/docs/how-to/workflows/quick-spec.md) - How to use Quick Flow -- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started -- [Four Phases](/docs/explanation/architecture/four-phases.md) - Understanding the full methodology +:::tip[Transition Tip] +You can always run `workflow-init` later to transition from Quick Flow to BMad Method. +::: diff --git a/docs/explanation/features/tea-overview.md b/docs/explanation/features/tea-overview.md index 6e9a7127..06fe96df 100644 --- a/docs/explanation/features/tea-overview.md +++ b/docs/explanation/features/tea-overview.md @@ -16,8 +16,6 @@ TEA was built to solve AI-generated tests that rot in review. For the problem st - **Mission:** Deliver actionable quality strategies, automation coverage, and gate decisions that scale with project complexity and compliance demands. - **Use When:** BMad Method or Enterprise track projects, integration risk is non-trivial, brownfield regression risk exists, or compliance/NFR evidence is required. (Quick Flow projects typically don't require TEA) ---- - ## Choose Your TEA Engagement Model BMad does not mandate TEA. There are five valid ways to use it (or skip it). Pick one intentionally. @@ -50,8 +48,6 @@ BMad does not mandate TEA. There are five valid ways to use it (or skip it). Pic If you are unsure, default to the integrated path for your track and adjust later. ---- - ## TEA Workflow Lifecycle TEA integrates into the BMad development lifecycle during Solutioning (Phase 3) and Implementation (Phase 4): @@ -153,8 +149,6 @@ Quick Flow track skips Phases 1 and 3. BMad Method and Enterprise use all phases based on project needs. When an ADR or architecture draft is produced, run `*test-design` in **system-level** mode before the implementation-readiness gate. This ensures the ADR has an attached testability review and ADR → test mapping. Keep the test-design updated if ADRs change. ---- - ## Why TEA is Different from Other BMM Agents TEA is the only BMM agent that operates in **multiple phases** (Phase 3 and Phase 4) and has its own **knowledge base architecture**. @@ -209,9 +203,6 @@ TEA uniquely requires: This architecture enables TEA to maintain consistent, production-ready testing patterns across all BMad projects while operating across multiple development phases. ---- - - ## High-Level Cheat Sheets These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks** across the **4-Phase Methodology** (Phase 1: Analysis, Phase 2: Planning, Phase 3: Solutioning, Phase 4: Implementation). @@ -366,8 +357,6 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks* ---- - ## TEA Command Catalog | Command | Primary Outputs | Notes | With Playwright MCP Enhancements | @@ -381,8 +370,6 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks* | `*nfr-assess` | NFR assessment report with actions | Focus on security/performance/reliability | - | | `*trace` | Phase 1: Coverage matrix, recommendations. Phase 2: Gate decision (PASS/CONCERNS/FAIL/WAIVED) | Two-phase workflow: traceability + gate decision | - | ---- - ## Playwright Utils Integration TEA optionally integrates with `@seontechnologies/playwright-utils`, an open-source library providing fixture-based utilities for Playwright tests. This integration enhances TEA's test generation and review workflows with production-ready patterns. @@ -431,8 +418,6 @@ TEA optionally integrates with `@seontechnologies/playwright-utils`, an open-sou ---- - ## Playwright MCP Enhancements TEA can leverage Playwright MCP servers to enhance test generation with live browser verification. MCP provides interactive capabilities on top of TEA's default AI-based approach. @@ -488,10 +473,3 @@ TEA can leverage Playwright MCP servers to enhance test generation with live bro Benefit: Visual failure context, live DOM inspection, root cause discovery - ---- - -## Related Documentation - -- [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md) - How to set up testing infrastructure -- [Run Test Design](/docs/how-to/workflows/run-test-design.md) - Creating test plans diff --git a/docs/explanation/features/web-bundles.md b/docs/explanation/features/web-bundles.md index 79a93950..a3b1b522 100644 --- a/docs/explanation/features/web-bundles.md +++ b/docs/explanation/features/web-bundles.md @@ -2,12 +2,11 @@ title: "Web Bundles" --- - Use BMad agents in Gemini Gems and Custom GPTs. -## Status - -> **Note:** The Web Bundling Feature is being rebuilt from the ground up. Current v6 bundles may be incomplete or missing functionality. +:::caution[Status] +The Web Bundling Feature is being rebuilt from the ground up. Current v6 bundles may be incomplete or missing functionality. +::: ## What Are Web Bundles? diff --git a/docs/explanation/game-dev/agents.md b/docs/explanation/game-dev/agents.md index 0fab3f4c..1dcdbb32 100644 --- a/docs/explanation/game-dev/agents.md +++ b/docs/explanation/game-dev/agents.md @@ -2,27 +2,22 @@ title: "BMGD Agents Guide" --- - Complete reference for BMGD's six specialized game development agents. ---- - ## Agent Overview BMGD provides six agents, each with distinct expertise: -| Agent | Name | Role | Phase Focus | -| ------------------------ | ---------------- | ----------------------------------------------------------- | ----------- | -| 🎲 **Game Designer** | Samus Shepard | Lead Game Designer + Creative Vision Architect | Phases 1-2 | -| 🏛️ **Game Architect** | Cloud Dragonborn | Principal Game Systems Architect + Technical Director | Phase 3 | -| 🕹️ **Game Developer** | Link Freeman | Senior Game Developer + Technical Implementation Specialist | Phase 4 | -| 🎯 **Game Scrum Master** | Max | Game Development Scrum Master + Sprint Orchestrator | Phase 4 | -| 🧪 **Game QA** | GLaDOS | Game QA Architect + Test Automation Specialist | All Phases | -| 🎮 **Game Solo Dev** | Indie | Elite Indie Game Developer + Quick Flow Specialist | All Phases | +| Agent | Name | Role | Phase Focus | +|-------|------|------|-------------| +| **Game Designer** | Samus Shepard | Lead Game Designer + Creative Vision Architect | Phases 1-2 | +| **Game Architect** | Cloud Dragonborn | Principal Game Systems Architect + Technical Director | Phase 3 | +| **Game Developer** | Link Freeman | Senior Game Developer + Technical Implementation Specialist | Phase 4 | +| **Game Scrum Master** | Max | Game Development Scrum Master + Sprint Orchestrator | Phase 4 | +| **Game QA** | GLaDOS | Game QA Architect + Test Automation Specialist | All Phases | +| **Game Solo Dev** | Indie | Elite Indie Game Developer + Quick Flow Specialist | All Phases | ---- - -## 🎲 Game Designer (Samus Shepard) +## Game Designer (Samus Shepard) ### Role @@ -62,9 +57,7 @@ Talks like an excited streamer - enthusiastic, asks about player motivations, ce | `party-mode` | Multi-agent collaboration | | `advanced-elicitation` | Deep exploration (web only) | ---- - -## 🏛️ Game Architect (Cloud Dragonborn) +## Game Architect (Cloud Dragonborn) ### Role @@ -102,9 +95,7 @@ Speaks like a wise sage from an RPG - calm, measured, uses architectural metapho | `party-mode` | Multi-agent collaboration | | `advanced-elicitation` | Deep exploration (web only) | ---- - -## 🕹️ Game Developer (Link Freeman) +## Game Developer (Link Freeman) ### Role @@ -144,9 +135,7 @@ Speaks like a speedrunner - direct, milestone-focused, always optimizing for the | `party-mode` | Multi-agent collaboration | | `advanced-elicitation` | Deep exploration (web only) | ---- - -## 🎯 Game Scrum Master (Max) +## Game Scrum Master (Max) ### Role @@ -190,9 +179,7 @@ Talks in game terminology - milestones are save points, handoffs are level trans | `party-mode` | Multi-agent collaboration | | `advanced-elicitation` | Deep exploration (web only) | ---- - -## 🧪 Game QA (GLaDOS) +## Game QA (GLaDOS) ### Role @@ -265,9 +252,7 @@ GLaDOS has access to a comprehensive game testing knowledge base (`gametest/qa-i - Smoke testing - Test prioritization (P0-P3) ---- - -## 🎮 Game Solo Dev (Indie) +## Game Solo Dev (Indie) ### Role @@ -324,8 +309,6 @@ Use **Full BMGD workflow** when: - You're working with stakeholders/publishers - Long-term maintainability is critical ---- - ## Agent Selection Guide ### By Phase @@ -359,8 +342,6 @@ Use **Full BMGD workflow** when: | "Quick prototype this idea" | Game Solo Dev | | "Ship this feature fast" | Game Solo Dev | ---- - ## Multi-Agent Collaboration ### Party Mode @@ -391,8 +372,6 @@ Game QA integrates at multiple points: - During Implementation: Create automated tests - Before Release: Performance and certification testing ---- - ## Project Context All agents share the principle: @@ -401,8 +380,6 @@ All agents share the principle: The `project-context.md` file (if present) serves as the authoritative source for project decisions and constraints. ---- - ## Next Steps - **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD diff --git a/docs/explanation/game-dev/bmgd-vs-bmm.md b/docs/explanation/game-dev/bmgd-vs-bmm.md index 3ce2d181..cbf16338 100644 --- a/docs/explanation/game-dev/bmgd-vs-bmm.md +++ b/docs/explanation/game-dev/bmgd-vs-bmm.md @@ -3,11 +3,8 @@ title: "BMGD vs BMM" description: Understanding the differences between BMGD and BMM --- - BMGD (BMad Game Development) extends BMM (BMad Method) with game-specific capabilities. This page explains the key differences. ---- - ## Quick Comparison | Aspect | BMM | BMGD | @@ -20,8 +17,6 @@ BMGD (BMad Game Development) extends BMM (BMad Method) with game-specific capabi | **Testing** | Web-focused | Engine-specific (Unity, Unreal, Godot) | | **Production** | BMM workflows | BMM workflows with game overrides | ---- - ## Agent Differences ### BMM Agents @@ -46,8 +41,6 @@ BMGD agents understand game-specific concepts like: - Engine-specific patterns - Playtesting and QA ---- - ## Planning Documents ### BMM Planning @@ -65,8 +58,6 @@ The GDD (Game Design Document) includes: - Art and audio direction - Genre-specific sections ---- - ## Game Type Templates BMGD includes 24 game type templates that auto-configure GDD sections: @@ -83,8 +74,6 @@ Each template provides: - Testing considerations - Common pitfalls to avoid ---- - ## Narrative Support BMGD includes full narrative workflow for story-driven games: @@ -97,8 +86,6 @@ BMGD includes full narrative workflow for story-driven games: BMM has no equivalent for narrative design. ---- - ## Testing Differences ### BMM Testing (TEA) @@ -113,8 +100,6 @@ BMM has no equivalent for narrative design. - Playtest planning - Balance validation ---- - ## Production Workflow BMGD production workflows **inherit from BMM** and add game-specific: @@ -125,8 +110,6 @@ BMGD production workflows **inherit from BMM** and add game-specific: This means you get all of BMM's implementation structure plus game-specific enhancements. ---- - ## When to Use Each ### Use BMM when: @@ -140,11 +123,3 @@ This means you get all of BMM's implementation structure plus game-specific enha - Creating interactive experiences - Game prototyping - Game jams - ---- - -## Related - -- [BMGD Overview](/docs/explanation/game-dev/index.md) - Getting started with BMGD -- [Game Types Guide](/docs/explanation/game-dev/game-types.md) - Understanding game templates -- [Quick Start BMGD](/docs/tutorials/getting-started/quick-start-bmgd.md) - Tutorial diff --git a/docs/explanation/game-dev/game-types.md b/docs/explanation/game-dev/game-types.md index 1e754035..ee012eb2 100644 --- a/docs/explanation/game-dev/game-types.md +++ b/docs/explanation/game-dev/game-types.md @@ -2,17 +2,12 @@ title: "BMGD Game Types Guide" --- - Reference for selecting and using BMGD's 24 supported game type templates. ---- - ## Overview When creating a GDD, BMGD offers game type templates that provide genre-specific sections. This ensures your design document covers mechanics and systems relevant to your game's genre. ---- - ## Supported Game Types ### Action & Combat @@ -30,8 +25,6 @@ Side-scrolling or 3D platforming with combat mechanics. Think Hollow Knight, Cel - Level design patterns - Boss design ---- - #### Shooter **Tags:** shooter, combat, aiming, fps, tps @@ -46,8 +39,6 @@ Projectile combat with aiming mechanics. Covers FPS, TPS, and arena shooters. - Level/arena design - Multiplayer considerations ---- - #### Fighting **Tags:** fighting, combat, competitive, combos, pvp @@ -62,8 +53,6 @@ Projectile combat with aiming mechanics. Covers FPS, TPS, and arena shooters. - Competitive balance - Netcode requirements ---- - ### Strategy & Tactics #### Strategy @@ -80,8 +69,6 @@ Resource management with tactical decisions. RTS, 4X, and grand strategy. - Map/scenario design - Victory conditions ---- - #### Turn-Based Tactics **Tags:** tactics, turn-based, grid, positioning @@ -96,8 +83,6 @@ Grid-based movement with turn order. XCOM-likes and tactical RPGs. - Unit progression - Procedural mission generation ---- - #### Tower Defense **Tags:** tower-defense, waves, placement, strategy @@ -112,8 +97,6 @@ Wave-based defense with tower placement. - Map design patterns - Meta-progression ---- - ### RPG & Progression #### RPG @@ -130,8 +113,6 @@ Character progression with stats, inventory, and quests. - Combat system (action/turn-based) - Skill trees and builds ---- - #### Roguelike **Tags:** roguelike, procedural, permadeath, runs @@ -146,8 +127,6 @@ Procedural generation with permadeath and run-based progression. - Item/ability synergies - Meta-progression systems ---- - #### Metroidvania **Tags:** metroidvania, exploration, abilities, interconnected @@ -162,8 +141,6 @@ Interconnected world with ability gating. - Secret and collectible placement - Power-up progression ---- - ### Narrative & Story #### Adventure @@ -180,8 +157,6 @@ Story-driven exploration and narrative. Point-and-click and narrative adventures - Dialogue systems - Story branching ---- - #### Visual Novel **Tags:** visual-novel, narrative, choices, story @@ -196,8 +171,6 @@ Narrative choices with branching story. - UI/presentation - Save/load states ---- - #### Text-Based **Tags:** text, parser, interactive-fiction, mud @@ -212,8 +185,6 @@ Text input/output games. Parser games, choice-based IF, MUDs. - Text presentation - Save state management ---- - ### Simulation & Management #### Simulation @@ -230,8 +201,6 @@ Realistic systems with management and building. Includes tycoons and sim games. - Building/construction - Failure states ---- - #### Sandbox **Tags:** sandbox, creative, building, freedom @@ -246,8 +215,6 @@ Creative freedom with building and minimal objectives. - Sharing/community features - Optional objectives ---- - ### Sports & Racing #### Racing @@ -264,8 +231,6 @@ Vehicle control with tracks and lap times. - Progression/career mode - Multiplayer racing ---- - #### Sports **Tags:** sports, teams, realistic, physics @@ -280,8 +245,6 @@ Team-based or individual sports simulation. - Season/career modes - Multiplayer modes ---- - ### Multiplayer #### MOBA @@ -298,8 +261,6 @@ Multiplayer team battles with hero selection. - Matchmaking - Economy (gold/items) ---- - #### Party Game **Tags:** party, multiplayer, minigames, casual @@ -314,8 +275,6 @@ Local multiplayer with minigames. - Scoring systems - Player count flexibility ---- - ### Horror & Survival #### Survival @@ -332,8 +291,6 @@ Resource gathering with crafting and persistent threats. - Threat systems - Base building ---- - #### Horror **Tags:** horror, atmosphere, tension, fear @@ -348,8 +305,6 @@ Atmosphere and tension with limited resources. - Lighting and visibility - Enemy/threat design ---- - ### Casual & Progression #### Puzzle @@ -366,8 +321,6 @@ Logic-based challenges and problem-solving. - Level structure - Scoring/rating ---- - #### Idle/Incremental **Tags:** idle, incremental, automation, progression @@ -382,8 +335,6 @@ Passive progression with upgrades and automation. - Number scaling - Offline progress ---- - #### Card Game **Tags:** card, deck-building, strategy, turns @@ -398,8 +349,6 @@ Deck building with card mechanics. - Rarity and collection - Competitive balance ---- - ### Rhythm #### Rhythm @@ -416,8 +365,6 @@ Music synchronization with timing-based gameplay. - Music licensing - Input methods ---- - ## Hybrid Game Types Many games combine multiple genres. BMGD supports hybrid selection: @@ -449,8 +396,6 @@ You: It's a roguelike with card game combat Agent: I'll include sections for both Roguelike and Card Game... ``` ---- - ## Game Type Selection Tips ### 1. Start with Core Fantasy @@ -482,8 +427,6 @@ One type should be primary (most gameplay time). Others add flavor: - **Primary:** Platformer (core movement and exploration) - **Secondary:** Metroidvania (ability gating structure) ---- - ## GDD Section Mapping When you select a game type, BMGD adds these GDD sections: @@ -497,8 +440,6 @@ When you select a game type, BMGD adds these GDD sections: | Multiplayer | Matchmaking, Netcode, Balance | | Simulation | Systems, Economy, AI | ---- - ## Next Steps - **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD diff --git a/docs/explanation/game-dev/index.md b/docs/explanation/game-dev/index.md index b84704a4..105c2c78 100644 --- a/docs/explanation/game-dev/index.md +++ b/docs/explanation/game-dev/index.md @@ -3,10 +3,7 @@ title: "BMGD - Game Development Module" description: AI-powered workflows for game design and development with BMGD --- - -Complete guides for the BMad Game Development Module (BMGD) - AI-powered workflows for game design and development that adapt to your project's needs. - ---- +Complete guides for the BMad Game Development Module (BMGD) — AI-powered workflows for game design and development that adapt to your project's needs. ## Getting Started @@ -18,17 +15,15 @@ Complete guides for the BMad Game Development Module (BMGD) - AI-powered workflo - Running your first workflows - Agent-based development flow -**Quick Path:** Install BMGD module → Game Brief → GDD → Architecture → Build - ---- +:::tip[Quick Path] +Install BMGD module → Game Brief → GDD → Architecture → Build +::: ## Core Documentation - **[Game Types Guide](/docs/explanation/game-dev/game-types.md)** - Selecting and using game type templates (24 supported types) - **[BMGD vs BMM](/docs/explanation/game-dev/bmgd-vs-bmm.md)** - Understanding the differences ---- - ## Game Development Phases BMGD follows four phases aligned with game development: @@ -51,8 +46,6 @@ BMGD follows four phases aligned with game development: - **Testing** - Automated tests, playtesting, performance - **Retrospective** - Continuous improvement ---- - ## Choose Your Path ### I need to... @@ -75,11 +68,3 @@ BMGD follows four phases aligned with game development: **Quickly test an idea** → Use [Quick-Flow](/docs/how-to/workflows/bmgd-quick-flow.md) for rapid prototyping - ---- - -## Related - -- [Game Types Guide](/docs/explanation/game-dev/game-types.md) - Understanding game type templates -- [BMGD vs BMM](/docs/explanation/game-dev/bmgd-vs-bmm.md) - Comparison with core method -- [Glossary](/docs/reference/glossary/index.md) - Terminology reference diff --git a/docs/explanation/philosophy/facilitation-over-generation.md b/docs/explanation/philosophy/facilitation-over-generation.md index 92552651..35fd13dd 100644 --- a/docs/explanation/philosophy/facilitation-over-generation.md +++ b/docs/explanation/philosophy/facilitation-over-generation.md @@ -6,16 +6,15 @@ description: Understanding CIS's facilitation-first approach to creative work The Creative Intelligence Suite (CIS) takes a fundamentally different approach from typical AI tools. Instead of generating solutions directly, CIS agents act as master facilitators who guide you to discover insights yourself. ---- - ## The Problem with Generation Traditional AI approaches to creative work: -``` -User: "Give me marketing ideas" -AI: "Here are 10 marketing ideas..." -``` +:::note[Generation Example] +**User:** "Give me marketing ideas" + +**AI:** "Here are 10 marketing ideas..." +::: This approach: - Produces generic, predictable outputs @@ -23,20 +22,19 @@ This approach: - Misses context and nuance - Limits creative exploration ---- - ## The Facilitation Approach CIS agents use strategic questioning: -``` -User: "I need marketing ideas" -CIS: "What makes your customers choose you over alternatives? - What's the one thing they always mention?" -User: "They say our support is exceptional" -CIS: "Interesting! How might you make that exceptional - support visible before they become customers?" -``` +:::note[Facilitation Example] +**User:** "I need marketing ideas" + +**CIS:** "What makes your customers choose you over alternatives? What's the one thing they always mention?" + +**User:** "They say our support is exceptional" + +**CIS:** "Interesting! How might you make that exceptional support visible before they become customers?" +::: This approach: - Draws out insights already within you @@ -44,8 +42,6 @@ This approach: - Captures context and nuance - Enables deeper creative exploration ---- - ## Key Principles ### 1. Questions Over Answers @@ -85,8 +81,6 @@ Each CIS agent has a distinct personality: These personas create engaging experiences that maintain creative flow. ---- - ## When Generation is Appropriate CIS does generate when appropriate: @@ -97,8 +91,6 @@ CIS does generate when appropriate: But the core creative work happens through facilitated discovery. ---- - ## Benefits ### For Individuals @@ -112,10 +104,3 @@ But the core creative work happens through facilitated discovery. - Aligned understanding - Documented rationale - Stronger buy-in to outcomes - ---- - -## Related - -- [Creative Intelligence Suite](/docs/explanation/creative-intelligence/index.md) - CIS overview -- [Brainstorming Techniques](/docs/explanation/features/brainstorming-techniques.md) - Available techniques diff --git a/docs/explanation/philosophy/testing-as-engineering.md b/docs/explanation/philosophy/testing-as-engineering.md index bb270ad6..7b8db5a4 100644 --- a/docs/explanation/philosophy/testing-as-engineering.md +++ b/docs/explanation/philosophy/testing-as-engineering.md @@ -110,10 +110,3 @@ The three-part stack addresses each gap: | No review | TEA `*test-review` audits quality with scoring | This approach is sometimes called *context engineering*—loading domain-specific standards into AI context automatically rather than relying on prompts alone. TEA's `tea-index.csv` manifest loads relevant knowledge fragments so the AI doesn't relearn testing patterns each session. - -## Related - -- [TEA Overview](/docs/explanation/features/tea-overview.md) — Workflow details and cheat sheets -- [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md) — Implementation guide -- [The Testing Meta Most Teams Have Not Caught Up To Yet](https://dev.to/muratkeremozcan/the-testing-meta-most-teams-have-not-caught-up-to-yet-5765) — Original article by Murat K Ozcan -- [Playwright-Utils Repository](https://github.com/seontechnologies/playwright-utils) — Source and documentation diff --git a/docs/how-to/brownfield/add-feature-to-existing.md b/docs/how-to/brownfield/add-feature-to-existing.md index 98683ec6..27c6412e 100644 --- a/docs/how-to/brownfield/add-feature-to-existing.md +++ b/docs/how-to/brownfield/add-feature-to-existing.md @@ -3,10 +3,7 @@ title: "How to Add a Feature to an Existing Project" description: How to add new features to an existing brownfield project --- - -Add new functionality to your brownfield codebase while respecting existing patterns and architecture. - ---- +Use the `workflow-init` workflow to add new functionality to your brownfield codebase while respecting existing patterns and architecture. ## When to Use This @@ -14,15 +11,11 @@ Add new functionality to your brownfield codebase while respecting existing patt - Major enhancements that need proper planning - Features that touch multiple parts of the system ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Existing project documentation (run `document-project` first if needed) - Clear understanding of what you want to build - ---- +::: ## Steps @@ -73,19 +66,9 @@ Follow the standard Phase 4 implementation workflows: 3. `dev-story` - Implement with tests 4. `code-review` - Quality assurance ---- - ## Tips - Always ensure agents read your existing documentation - Pay attention to integration points with existing code - Follow existing conventions unless deliberately changing them - Document why you're adding new patterns (if any) - ---- - -## Related - -- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) -- [Document Existing Project](/docs/how-to/brownfield/document-existing-project.md) -- [Quick Fix in Brownfield](/docs/how-to/brownfield/quick-fix-in-brownfield.md) diff --git a/docs/how-to/brownfield/document-existing-project.md b/docs/how-to/brownfield/document-existing-project.md index 68303742..b318363b 100644 --- a/docs/how-to/brownfield/document-existing-project.md +++ b/docs/how-to/brownfield/document-existing-project.md @@ -3,11 +3,8 @@ title: "How to Document an Existing Project" description: How to document an existing brownfield codebase using BMad Method --- - Use the `document-project` workflow to scan your entire codebase and generate comprehensive documentation about its current state. ---- - ## When to Use This - Starting work on an undocumented legacy project @@ -15,14 +12,10 @@ Use the `document-project` workflow to scan your entire codebase and generate co - AI agents need context about existing code patterns - Onboarding new team members ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed in your project - Access to the codebase you want to document - ---- +::: ## Steps @@ -58,8 +51,6 @@ Review the documentation for: - Completeness of architecture description - Any missing business rules or intent ---- - ## What You Get - **Project overview** - High-level description of what the project does @@ -68,17 +59,8 @@ Review the documentation for: - **Business rules** - Logic extracted from the codebase - **Integration points** - External APIs and services ---- - ## Tips - Run this before any major brownfield work - Keep the documentation updated as the project evolves - Use it as input for future PRD creation - ---- - -## Related - -- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) -- [Add Feature to Existing Project](/docs/how-to/brownfield/add-feature-to-existing.md) diff --git a/docs/how-to/brownfield/index.md b/docs/how-to/brownfield/index.md index 070f1a88..ab5f30e9 100644 --- a/docs/how-to/brownfield/index.md +++ b/docs/how-to/brownfield/index.md @@ -3,24 +3,19 @@ title: "Brownfield Development" description: How to use BMad Method on existing codebases --- - -How to effectively use BMad Method when working on existing projects and legacy codebases. +Use BMad Method effectively when working on existing projects and legacy codebases. ## What is Brownfield Development? **Brownfield** refers to working on existing projects with established codebases and patterns, as opposed to **greenfield** which means starting from scratch with a clean slate. -This tutorial covers the essential workflow for onboarding to brownfield projects with BMad Method. - ---- - -## Prerequisites +This guide covers the essential workflow for onboarding to brownfield projects with BMad Method. +:::note[Prerequisites] - BMad Method installed (`npx bmad-method install`) - An existing codebase you want to work on - Access to an AI-powered IDE (Claude Code, Cursor, or Windsurf) - ---- +::: ## Step 1: Clean Up Completed Planning Artifacts @@ -30,8 +25,6 @@ If you have completed all PRD epics and stories through the BMad process, clean - `_bmad-output/planning-artifacts/` - `_bmad-output/implementation-artifacts/` ---- - ## Step 2: Maintain Quality Project Documentation Your `docs/` folder should contain succinct, well-organized documentation that accurately represents your project: @@ -43,8 +36,6 @@ Your `docs/` folder should contain succinct, well-organized documentation that a For complex projects, consider using the `document-project` workflow. It offers runtime variants that will scan your entire project and document its actual current state. ---- - ## Step 3: Initialize for Brownfield Work Run `workflow-init`. It should recognize you are in an existing project. If not, explicitly clarify that this is brownfield development for a new feature. @@ -85,18 +76,9 @@ When doing architecture, ensure the architect: Pay close attention here to prevent reinventing the wheel or making decisions that misalign with your existing architecture. ---- - ## Next Steps - **[Document Existing Project](/docs/how-to/brownfield/document-existing-project.md)** - How to document your brownfield codebase - **[Add Feature to Existing Project](/docs/how-to/brownfield/add-feature-to-existing.md)** - Adding new functionality - **[Quick Fix in Brownfield](/docs/how-to/brownfield/quick-fix-in-brownfield.md)** - Bug fixes and ad-hoc changes - **[Brownfield FAQ](/docs/explanation/faq/brownfield-faq.md)** - Common questions about brownfield development - ---- - -## Related Documentation - -- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM -- [Quick Spec Flow](/docs/explanation/features/quick-flow.md) - Fast path for small changes diff --git a/docs/how-to/brownfield/quick-fix-in-brownfield.md b/docs/how-to/brownfield/quick-fix-in-brownfield.md index 8a695b55..2e8896ab 100644 --- a/docs/how-to/brownfield/quick-fix-in-brownfield.md +++ b/docs/how-to/brownfield/quick-fix-in-brownfield.md @@ -3,10 +3,7 @@ title: "How to Make Quick Fixes in Brownfield Projects" description: How to make quick fixes and ad-hoc changes in brownfield projects --- - -Not everything requires the full BMad method or even Quick Flow. For bug fixes, refactorings, or small targeted changes, you can work directly with the agent. - ---- +Use the **DEV agent** directly for bug fixes, refactorings, or small targeted changes that don't require the full BMad method or Quick Flow. ## When to Use This @@ -16,8 +13,6 @@ Not everything requires the full BMad method or even Quick Flow. For bug fixes, - Learning about your codebase - One-off changes that don't need planning ---- - ## Steps ### 1. Load an Agent @@ -54,8 +49,6 @@ The agent will: Review the changes made and commit when satisfied. ---- - ## Learning Your Codebase This approach is also excellent for exploring unfamiliar code: @@ -74,8 +67,6 @@ LLMs are excellent at interpreting and analyzing code—whether it was AI-genera - Understand how things are built - Explore unfamiliar parts of the codebase ---- - ## When to Upgrade to Formal Planning Consider using Quick Flow or full BMad Method when: @@ -84,11 +75,3 @@ Consider using Quick Flow or full BMad Method when: - You're unsure about the scope - The fix keeps growing in complexity - You need documentation for the change - ---- - -## Related - -- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) -- [Add Feature to Existing Project](/docs/how-to/brownfield/add-feature-to-existing.md) -- [Quick Spec Flow](/docs/explanation/features/quick-flow.md) diff --git a/docs/how-to/customization/customize-agents.md b/docs/how-to/customization/customize-agents.md index cf0a228b..682a3fb8 100644 --- a/docs/how-to/customization/customize-agents.md +++ b/docs/how-to/customization/customize-agents.md @@ -2,8 +2,14 @@ title: "Agent Customization Guide" --- +Use `.customize.yaml` files to customize BMad agents without modifying core files. All customizations persist through updates. -Customize BMad agents without modifying core files. All customizations persist through updates. +## When to Use This + +- Change agent names or personas +- Add project-specific memories or context +- Add custom menu items and workflows +- Define critical actions for consistent behavior ## Quick Start @@ -204,5 +210,3 @@ memories: - **[Learn about Agents](/docs/explanation/core-concepts/what-are-agents.md)** - Understand Simple vs Expert agents - **[Agent Creation Guide](/docs/tutorials/advanced/create-custom-agent.md)** - Build completely custom agents - **[BMM Complete Documentation](/docs/explanation/bmm/index.md)** - Full BMad Method reference - -[← Back to Customization](/docs/how-to/customization/index.md) diff --git a/docs/how-to/customization/index.md b/docs/how-to/customization/index.md index f13f0726..9434524e 100644 --- a/docs/how-to/customization/index.md +++ b/docs/how-to/customization/index.md @@ -2,7 +2,6 @@ title: "BMad Customization" --- - Personalize agents and workflows to match your needs. ## Guides @@ -17,11 +16,9 @@ Personalize agents and workflows to match your needs. BMad provides two main customization approaches: ### Agent Customization + Modify any agent's persona, name, capabilities, or menu items using `.customize.yaml` files in `_bmad/_config/agents/`. Your customizations persist through updates. ### Workflow Customization + Replace or extend workflow steps to create tailored processes. (Coming soon) - ---- - -**Next:** Read the [Agent Customization Guide](/docs/how-to/customization/customize-agents.md) to start personalizing your agents. diff --git a/docs/how-to/customization/shard-large-documents.md b/docs/how-to/customization/shard-large-documents.md index ea1c51f0..a8cabc5b 100644 --- a/docs/how-to/customization/shard-large-documents.md +++ b/docs/how-to/customization/shard-large-documents.md @@ -2,16 +2,14 @@ title: "Document Sharding Guide" --- +Use the `shard-doc` tool to split large markdown files into smaller, organized files for better context management. -Comprehensive guide to BMad Method's document sharding system for managing large planning and architecture documents. +## When to Use This -## Table of Contents - -- [What is Document Sharding?](#what-is-document-sharding) -- [When to Use Sharding](#when-to-use-sharding) -- [How Sharding Works](#how-sharding-works) -- [Using the Shard-Doc Tool](#using-the-shard-doc-tool) -- [Workflow Support](#workflow-support) +- Very large complex PRDs +- Architecture documents with multiple system layers +- Epic files with 4+ epics (especially for Phase 4) +- UX design specs covering multiple subsystems ## What is Document Sharding? @@ -39,43 +37,15 @@ docs/ └── ... # Additional sections ``` -## When to Use Sharding +## Steps -### Ideal Candidates - -**Large Multi-Epic Projects:** - -- Very large complex PRDs -- Architecture documents with multiple system layers -- Epic files with 4+ epics (especially for Phase 4) -- UX design specs covering multiple subsystems - -## How Sharding Works - -### Sharding Process - -1. **Tool Execution**: Run `npx @kayvan/markdown-tree-parser source.md destination/` - this is abstracted with the core shard-doc task which is installed as a slash command or manual task rule depending on your tools. -2. **Section Extraction**: Tool splits by level 2 headings -3. **File Creation**: Each section becomes a separate file -4. **Index Generation**: `index.md` created with structure and descriptions - -### Workflow Discovery - -BMad workflows use a **dual discovery system**: - -1. **Try whole document first** - Look for `document-name.md` -2. **Check for sharded version** - Look for `document-name/index.md` -3. **Priority rule** - Whole document takes precedence if both exist - remove the whole document if you want the sharded to be used instead. - -## Using the Shard-Doc Tool - -### CLI Command +### 1. Run the Shard-Doc Tool ```bash -/bmad:core:tools:shard-doc +/bmad:core:tools:shard-doc ``` -### Interactive Process +### 2. Follow the Interactive Process ``` Agent: Which document would you like to shard? @@ -91,7 +61,7 @@ Agent: Sharding PRD.md... ✓ Complete! ``` -### What Gets Created +## What You Get **index.md structure:** @@ -113,13 +83,19 @@ Agent: Sharding PRD.md... - Preserves all markdown formatting - Can be read independently +## How Workflow Discovery Works + +BMad workflows use a **dual discovery system**: + +1. **Try whole document first** - Look for `document-name.md` +2. **Check for sharded version** - Look for `document-name/index.md` +3. **Priority rule** - Whole document takes precedence if both exist - remove the whole document if you want the sharded to be used instead + ## Workflow Support -### Universal Support +All BMM workflows support both formats: -**All BMM workflows support both formats:** - -- ✅ Whole documents -- ✅ Sharded documents -- ✅ Automatic detection -- ✅ Transparent to user +- Whole documents +- Sharded documents +- Automatic detection +- Transparent to user diff --git a/docs/how-to/get-answers-about-bmad.md b/docs/how-to/get-answers-about-bmad.md index 9933404d..6581e817 100644 --- a/docs/how-to/get-answers-about-bmad.md +++ b/docs/how-to/get-answers-about-bmad.md @@ -3,41 +3,38 @@ title: "How to Get Answers About BMad" description: Use an LLM to quickly answer your own BMad questions --- -Point an LLM at BMad's source files and ask your question. That's the technique—the rest of this guide shows you how. +Use your AI tool to get answers about BMad by pointing it at the source files. -## See It Work +## When to Use This -:::note[Example] -**Q:** "Tell me the fastest way to build something with BMad" +- You have a question about how BMad works +- You want to understand a specific agent or workflow +- You need quick answers without waiting for Discord -**A:** Use Quick Flow: Run `quick-spec` to write a technical specification, then `quick-dev` to implement it—skipping the full planning phases. This gets small features shipped in a single focused session instead of going through the full 4-phase BMM workflow. +:::note[Prerequisites] +An AI tool (Claude Code, Cursor, ChatGPT, Claude.ai, etc.) and either BMad installed in your project or access to the GitHub repo. ::: -## Why This Works +## Steps -BMad's prompts are written in plain English, not code. The `_bmad` folder contains readable instructions, workflows, and agent definitions—exactly what LLMs are good at processing. You're not asking the LLM to guess; you're giving it the actual source material. - -## How to Do It - -### What Each Source Gives You +### 1. Choose Your Source | Source | Best For | Examples | |--------|----------|----------| -| **`_bmad` folder** (installed) | How BMad works in detail—agents, workflows, prompts | "What does the PM agent do?" "How does the PRD workflow work?" | -| **Full GitHub repo** (cloned) | Why things are the way they are—history, installer, architecture | "Why is the installer structured this way?" "What changed in v6?" | -| **`llms-full.txt`** | Quick overview from documentation perspective | "Explain BMad's four phases" "What's the difference between levels?" | +| **`_bmad` folder** | How BMad works—agents, workflows, prompts | "What does the PM agent do?" | +| **Full GitHub repo** | History, installer, architecture | "What changed in v6?" | +| **`llms-full.txt`** | Quick overview from docs | "Explain BMad's four phases" | -:::note[What's `_bmad`?] -The `_bmad` folder is created when you install BMad. It contains all the agent definitions, workflows, and prompts. If you don't have this folder yet, you haven't installed BMad—see the "clone the repo" option below. -::: +The `_bmad` folder is created when you install BMad. If you don't have it yet, clone the repo instead. -### If Your AI Can Read Files (Claude Code, Cursor, etc.) +### 2. Point Your AI at the Source -**BMad installed:** Point your LLM at the `_bmad` folder and ask directly. +**If your AI can read files (Claude Code, Cursor, etc.):** -**Want deeper context:** Clone the [full repo](https://github.com/bmad-code-org/BMAD-METHOD) for git history and installer details. +- **BMad installed:** Point at the `_bmad` folder and ask directly +- **Want deeper context:** Clone the [full repo](https://github.com/bmad-code-org/BMAD-METHOD) -### If You Use ChatGPT or Claude.ai +**If you use ChatGPT or Claude.ai:** Fetch `llms-full.txt` into your session: @@ -45,12 +42,25 @@ Fetch `llms-full.txt` into your session: https://bmad-code-org.github.io/BMAD-METHOD/llms-full.txt ``` -You can also find this and other downloadable resources on the [Downloads page](/docs/downloads.md). +See the [Downloads page](/docs/downloads.md) for other downloadable resources. -:::tip[Verify Surprising Answers] -LLMs occasionally get things wrong. If an answer seems off, check the source file it referenced or ask on Discord. +### 3. Ask Your Question + +:::note[Example] +**Q:** "Tell me the fastest way to build something with BMad" + +**A:** Use Quick Flow: Run `quick-spec` to write a technical specification, then `quick-dev` to implement it—skipping the full planning phases. ::: +## What You Get + +Direct answers about BMad—how agents work, what workflows do, why things are structured the way they are—without waiting for someone else to respond. + +## Tips + +- **Verify surprising answers** — LLMs occasionally get things wrong. Check the source file or ask on Discord. +- **Be specific** — "What does step 3 of the PRD workflow do?" beats "How does PRD work?" + ## Still Stuck? Tried the LLM approach and still need help? You now have a much better question to ask. @@ -64,13 +74,7 @@ Tried the LLM approach and still need help? You now have a much better question **Discord:** [discord.gg/gk8jAdXWmj](https://discord.gg/gk8jAdXWmj) -## Found a Bug? - -If it's clearly a bug in BMad itself, skip Discord and go straight to GitHub Issues: - -**GitHub Issues:** [github.com/bmad-code-org/BMAD-METHOD/issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) - ---- +**GitHub Issues:** [github.com/bmad-code-org/BMAD-METHOD/issues](https://github.com/bmad-code-org/BMAD-METHOD/issues) (for clear bugs) *You!* *Stuck* diff --git a/docs/how-to/installation/index.md b/docs/how-to/installation/index.md index 928aa7db..e3a3e29d 100644 --- a/docs/how-to/installation/index.md +++ b/docs/how-to/installation/index.md @@ -3,13 +3,10 @@ title: "Installation Guides" description: How to install and upgrade BMad Method --- - How-to guides for installing and configuring the BMad Method. -## Available Guides - | Guide | Description | |-------|-------------| -| **[Install BMad](/docs/how-to/installation/install-bmad.md)** | Step-by-step installation instructions | -| **[Install Custom Modules](/docs/how-to/installation/install-custom-modules.md)** | Add custom agents, workflows, and modules | -| **[Upgrade to v6](/docs/how-to/installation/upgrade-to-v6.md)** | Migrate from BMad v4 to v6 | +| [Install BMad](/docs/how-to/installation/install-bmad.md) | Step-by-step installation instructions | +| [Install Custom Modules](/docs/how-to/installation/install-custom-modules.md) | Add custom agents, workflows, and modules | +| [Upgrade to v6](/docs/how-to/installation/upgrade-to-v6.md) | Migrate from BMad v4 to v6 | diff --git a/docs/how-to/installation/install-bmad.md b/docs/how-to/installation/install-bmad.md index d439c888..f2d06fc7 100644 --- a/docs/how-to/installation/install-bmad.md +++ b/docs/how-to/installation/install-bmad.md @@ -3,18 +3,19 @@ title: "How to Install BMad" description: Step-by-step guide to installing BMad in your project --- +Use the `npx bmad-method install` command to set up BMad in your project with your choice of modules and AI tools. -Complete guide to installing BMad in your project. +## When to Use This ---- - -## Prerequisites +- Starting a new project with BMad +- Adding BMad to an existing codebase +- Setting up BMad on a new machine +:::note[Prerequisites] - **Node.js** 20+ (required for the installer) - **Git** (recommended) - **AI-powered IDE** (Claude Code, Cursor, Windsurf, or similar) - ---- +::: ## Steps @@ -26,7 +27,8 @@ npx bmad-method install ### 2. Choose Installation Location -The installer will ask where to install BMad files. Options: +The installer will ask where to install BMad files: + - Current directory (recommended for new projects) - Subdirectory - Custom path @@ -34,6 +36,7 @@ The installer will ask where to install BMad files. Options: ### 3. Select Your AI Tools Choose which AI tools you'll be using: + - Claude Code - Cursor - Windsurf @@ -54,29 +57,13 @@ Select which modules to install: ### 5. Add Custom Content (Optional) -If you have custom agents, workflows, or modules: -- Point to their location -- The installer will integrate them +If you have custom agents, workflows, or modules, point to their location and the installer will integrate them. ### 6. Configure Settings -For each module, either: -- Accept recommended defaults (faster) -- Customize settings (more control) +For each module, either accept recommended defaults (faster) or customize settings (more control). ---- - -## Verify Installation - -After installation, verify by: - -1. Checking the `_bmad/` directory exists -2. Loading an agent in your AI tool -3. Running `*menu` to see available commands - ---- - -## Directory Structure +## What You Get ``` your-project/ @@ -91,7 +78,11 @@ your-project/ └── .claude/ # IDE configuration ``` ---- +## Verify Installation + +1. Check the `_bmad/` directory exists +2. Load an agent in your AI tool +3. Run `*menu` to see available commands ## Configuration @@ -103,36 +94,19 @@ user_name: Your Name communication_language: english ``` ---- - ## Troubleshooting -### "Command not found: npx" - -Install Node.js 20+: +**"Command not found: npx"** — Install Node.js 20+: ```bash brew install node - ``` -### "Permission denied" - -Check npm permissions: +**"Permission denied"** — Check npm permissions: ```bash npm config set prefix ~/.npm-global ``` -### Installer hangs - -Try running with verbose output: +**Installer hangs** — Try running with verbose output: ```bash npx bmad-method install --verbose ``` - ---- - -## Related - -- [Quick Start Guide](/docs/tutorials/getting-started/getting-started-bmadv6.md) - Getting started with BMM -- [Upgrade to V6](/docs/how-to/installation/upgrade-to-v6.md) - Upgrading from previous versions -- [Install Custom Modules](/docs/how-to/installation/install-custom-modules.md) - Adding custom content diff --git a/docs/how-to/installation/install-custom-modules.md b/docs/how-to/installation/install-custom-modules.md index 1c6e2fed..0e995676 100644 --- a/docs/how-to/installation/install-custom-modules.md +++ b/docs/how-to/installation/install-custom-modules.md @@ -1,152 +1,118 @@ --- -title: "Custom Content Installation" +title: "How to Install Custom Modules" +description: Add custom agents, workflows, and modules to BMad --- +Use the BMad installer to add custom agents, workflows, and modules that extend BMad's functionality. -This guide explains how to create and install custom BMad content including agents, workflows, and modules. Custom content extends BMad's functionality with specialized tools and workflows that can be shared across projects or teams. +## When to Use This -For detailed information about the different types of custom content available, see [Custom Content Types](/docs/explanation/bmad-builder/custom-content-types.md). +- Adding third-party BMad modules to your project +- Installing your own custom agents or workflows +- Sharing custom content across projects or teams -You can find example custom modules in the `samples/sample-custom-modules/` folder of the repository. Download either of the sample folders to try them out. +:::note[Prerequisites] +- BMad installed in your project +- Custom content with a valid `module.yaml` file +::: -## Content Types Overview +## Steps -BMad Core supports several categories of custom content: +### 1. Prepare Your Custom Content -- Custom Stand Alone Modules -- Custom Add On Modules -- Custom Global Modules -- Custom Agents -- Custom Workflows +Your custom content needs a `module.yaml` file. Choose the appropriate structure: -## Making Custom Content Installable +**For a cohesive module** (agents and workflows that work together): -### Custom Modules +``` +module-code/ + module.yaml + agents/ + workflows/ + tools/ + templates/ +``` -To create an installable custom module: +**For standalone items** (unrelated agents/workflows): -1. **Folder Structure** - - Create a folder with a short, abbreviated name (e.g., `cis` for Creative Intelligence Suite) - - The folder name serves as the module code +``` +module-name/ + module.yaml # Contains unitary: true + agents/ + larry/larry.agent.md + curly/curly.agent.md + workflows/ +``` -2. **Required File** - - Include a `module.yaml` file in the root folder (this drives questions for the final generated config.yaml at install target) +Add `unitary: true` in your `module.yaml` to indicate items don't depend on each other. -3. **Folder Organization** - Follow these conventions for optimal compatibility: +### 2. Run the Installer - ``` - module-code/ - module.yaml - agents/ - workflows/ - tools/ - templates/ - ... - ``` +**New project:** - - `agents/` - Agent definitions - - `workflows/` - Workflow definitions - - Additional custom folders are supported but following conventions is recommended for agent and workflow discovery +```bash +npx bmad-method install +``` -**Note:** Full documentation for global modules and add-on modules will be available as support is finalized. +When prompted "Would you like to install a local custom module?", select 'y' and provide the path to your module folder. -### Standalone Content (Agents, Workflows, Tasks, Tools, Templates, Prompts) +**Existing project:** -For standalone content that isn't part of a cohesive module collection, follow this structure: +```bash +npx bmad-method install +``` -1. **Module Configuration** - - Create a folder with a `module.yaml` file (similar to custom modules) - - Add the property `unitary: true` in the module.yaml - - The `unitary: true` property indicates this is a collection of potentially unrelated items that don't depend on each other - - Any content you add to this folder should still be nested under workflows and agents - but the key with stand alone content is they do not rely on each other. - - Agents do not reference other workflows even if stored in a unitary:true module. But unitary Agents can have their own workflows in their sidecar, or reference workflows as requirements from other modules - with a process known as workflow vendoring. Keep in mind, this will require that the workflow referenced from the other module would need to be available for the end user to install, so its recommended to only vendor workflows from the core module, or official bmm modules. +1. Select `Modify BMad Installation` +2. Choose the option to add, modify, or update custom modules +3. Provide the path to your module folder -2. **Folder Structure** - Organize content in specific named folders: +### 3. Verify Installation - ``` - module-name/ - module.yaml # Contains unitary: true - agents/ - workflows/ - templates/ - tools/ - tasks/ - prompts/ - ``` +Check that your custom content appears in the `_bmad/` directory and is accessible from your AI tool. -3. **Individual Item Organization** - Each item should have its own subfolder: - ```text - my-custom-stuff/ - module.yaml - agents/ - larry/larry.agent.md - curly/curly.agent.md - moe/moe.agent.md - moe/moe-sidecar/memories.csv - ``` +## What You Get -**Future Feature:** Unitary modules will support selective installation, allowing users to pick and choose which specific items to install. +- Custom agents available in your AI tool +- Custom workflows accessible via `*workflow-name` +- Content integrated with BMad's update system -**Note:** Documentation explaining the distinctions between these content types and their specific use cases will be available soon. +## Content Types -## Installation Process +BMad supports several categories of custom content: -### Prerequisites +| Type | Description | +|------|-------------| +| **Stand Alone Modules** | Complete modules with their own agents and workflows | +| **Add On Modules** | Extensions that add to existing modules | +| **Global Modules** | Content available across all modules | +| **Custom Agents** | Individual agent definitions | +| **Custom Workflows** | Individual workflow definitions | -Ensure your content follows the proper conventions and includes a `module.yaml` file (only one per top-level folder). +For detailed information about content types, see [Custom Content Types](/docs/explanation/bmad-builder/custom-content-types.md). -### New Project Installation +## Updating Custom Content -When setting up a new BMad project: +When BMad Core or module updates are available, the quick update process: -1. The installer will prompt: `Would you like to install a local custom module (this includes custom agents and workflows also)? (y/N)` -2. Select 'y' to specify the path to your module folder containing `module.yaml` +1. Applies updates to core modules +2. Recompiles all agents with your customizations +3. Retains your custom content from cache +4. Preserves your configurations -### Existing Project Modification +You don't need to keep source module files locally—just point to the updated location during updates. -To add custom content to an existing BMad project: +## Tips -1. Run the installer against your project location -2. Select `Modify BMad Installation` -3. Choose the option to add, modify, or update custom modules +- **Use unique module codes** — Don't use `bmm` or other existing module codes +- **Avoid naming conflicts** — Each module needs a distinct code +- **Document dependencies** — Note any modules your custom content requires +- **Test in isolation** — Verify custom modules work before sharing +- **Version your content** — Track updates with version numbers -### Upcoming Features +:::caution[Naming Conflicts] +Don't create custom modules with codes like `bmm` (already used by BMad Method). Each custom module needs a unique code. +::: -- **Unitary Module Selection:** For modules with `type: unitary` (instead of `type: module`), you'll be able to select specific items to install -- **Add-on Module Dependencies:** The installer will verify and install dependencies for add-on modules automatically +## Example Modules -## Quick Updates - -When updates to BMad Core or core modules (BMM, CIS, etc.) become available, the quick update process will: - -1. Apply available updates to core modules -2. Recompile all agents with customizations from the `_config/agents` folder -3. Retain your custom content from a cached location -4. Preserve your existing configurations and customizations - -This means you don't need to keep the source module files locally. When updates are available, simply point to the updated module location during the update process. - -## Important Considerations - -### Module Naming Conflicts - -When installing unofficial modules, ensure unique identification to avoid conflicts: - -1. **Module Codes:** Each module must have a unique code (e.g., don't use `bmm` for custom modules) -2. **Module Names:** Avoid using names that conflict with existing modules -3. **Multiple Custom Modules:** If creating multiple custom modules, use distinct codes for each - -**Examples of conflicts to avoid:** - -- Don't create a custom module with code `bmm` (already used by BMad Method) -- Don't name multiple custom modules with the same code like `mca` - -### Best Practices - -- Use descriptive, unique codes for your modules -- Document any dependencies your custom modules have -- Test custom modules in isolation before sharing -- Consider version numbering for your custom content to track updates +Find example custom modules in the `samples/sample-custom-modules/` folder of the [BMad repository](https://github.com/bmad-code-org/BMAD-METHOD). Download either sample folder to try them out. diff --git a/docs/how-to/installation/upgrade-to-v6.md b/docs/how-to/installation/upgrade-to-v6.md index 6a1349f4..3d576f46 100644 --- a/docs/how-to/installation/upgrade-to-v6.md +++ b/docs/how-to/installation/upgrade-to-v6.md @@ -1,147 +1,131 @@ --- -title: "Upgrading from Previous Versions" +title: "How to Upgrade to v6" +description: Migrate from BMad v4 to v6 --- +Use the BMad installer to upgrade from v4 to v6, which includes automatic detection of legacy installations and migration assistance. -## Overview +## When to Use This -The latest version of BMad represents a complete ground-up rewrite with significant architectural changes. This guide will help you migrate from version 4. +- You have BMad v4 installed (`.bmad-method` folder) +- You want to migrate to the new v6 architecture +- You have existing planning artifacts to preserve ---- +:::note[Prerequisites] +- Node.js 20+ +- Existing BMad v4 installation +::: -## Automatic V4 Detection +## Steps -When you run `npm run install:bmad` on a project, the installer automatically detects: +### 1. Run the Installer -- **Legacy v4 installation folder**: `.bmad-method` -- **IDE command artifacts**: Legacy bmad folders in IDE configuration directories (`.claude/commands/`, `.cursor/commands/`, etc.) - -### What Happens During Detection - -1. **Automatic Detection of v4 Modules** - 1. Installer will suggest removal or backup of your .bmad-method folder. You can choose to exit the installer and handle this cleanup, or allow the install to continue. Technically you can have both v4 and v6 installed, but it is not recommended. All BMad content and modules will be installed under a .bmad folder, fully segregated. - -2. **IDE Command Cleanup Recommended**: Legacy v4 IDE commands should be manually removed - - Located in IDE config folders, for example claude: `.claude/commands/BMad/agents`, `.claude/commands/BMad/tasks`, etc. - - NOTE: if the upgrade and install of v6 finished, the new commands will be under `.claude/commands/bmad//agents|workflows` - - Note 2: If you accidentally delete the wrong/new bmad commands - you can easily restore them by rerunning the installer, and choose quick update option, and all will be reapplied properly. - -## Module Migration - -### Deprecated Modules from v4 - -| v4 Module | v6 Status | -| ----------------------------- | ---------------------------------------------- | -| `_bmad-2d-phaser-game-dev` | Integrated into new BMGD Module | -| `_bmad-2d-unity-game-dev` | Integrated into new BMGD Module | -| `_bmad-godot-game-dev` | Integrated into new BMGD Module | -| `_bmad-*-game-dev` (any) | Integrated into new BMGD Module | -| `_bmad-infrastructure-devops` | Deprecated - New core devops agent coming soon | -| `_bmad-creative-writing` | Not adapted - New v6 module coming soon | - -Aside from .bmad-method - if you have any of these others installed also, again its recommended to remove them and use the V6 equivalents, but its also fine if you decide to keep both. But it is not recommended to use both on the same project long term. - -## Architecture Changes - -### Folder Structure - -**v4 "Expansion Packs" Structure:** - -``` -your-project/ -├── .bmad-method/ -├── .bmad-game-dev/ -├── .bmad-creative-writing/ -└── .bmad-infrastructure-devops/ +```bash +npx bmad-method install ``` -**v6 Unified Structure:** +The installer automatically detects: -``` -your-project/ -└── _bmad/ # Single installation folder is _bmad - └── _config/ # Your customizations - | └── agents/ # Agent customization files - ├── core/ # Real core framework (applies to all modules) - ├── bmm/ # BMad Method (software/game dev) - ├── bmb/ # BMad Builder (create agents/workflows) - ├── cis/ # Creative Intelligence Suite -├── _bmad_output # Default bmad output folder (was doc folder in v4) +- **Legacy v4 folder**: `.bmad-method` +- **IDE command artifacts**: Legacy bmad folders in `.claude/commands/`, `.cursor/commands/`, etc. -``` +### 2. Handle Legacy Installation -### Key Concept Changes +When v4 is detected, you can: -- **v4 `_bmad-core and _bmad-method`**: Was actually the BMad Method -- **v6 `_bmad/core/`**: Is the real universal core framework -- **v6 `_bmad/bmm/`**: Is the BMad Method module -- **Module identification**: All modules now have a `config.yaml` file once installed at the root of the modules installed folder +- Allow the installer to back up and remove `.bmad-method` +- Exit and handle cleanup manually +- Keep both (not recommended for same project) -## Project Progress Migration +### 3. Clean Up IDE Commands -### If You've Completed Some or all Planning Phases (Brief/PRD/UX/Architecture) with the BMad Method: +Manually remove legacy v4 IDE commands: -After running the v6 installer, if you kept the paths the same as the installation suggested, you will need to move a few files, or run the installer again. It is recommended to stick with these defaults as it will be easier to adapt if things change in the future. +- `.claude/commands/BMad/agents` +- `.claude/commands/BMad/tasks` -If you have any planning artifacts, put them in a folder called _bmad-output/planning-artifacts at the root of your project, ensuring that: -PRD has PRD in the file name or folder name if sharded. -Similar for 'brief', 'architecture', 'ux-design'. +New v6 commands will be at `.claude/commands/bmad//agents|workflows`. -If you have other long term docs that will not be as ephemeral as these project docs, you can put them in the /docs folder, ideally with a index.md file. +:::tip[Accidentally Deleted Commands?] +If you delete the wrong commands, rerun the installer and choose "quick update" to restore them. +::: -HIGHLY RECOMMENDED NOTE: If you are only partway through planning, its highly recommended to restart and do the PRD, UX and ARCHITECTURE steps. You could even use your existing documents as inputs letting the agent know you want to redo them with the new workflows. These optimized v6 progressive discovery workflows that also will utilize web search at key moments, while offering better advanced elicitation and part mode in the IDE will produce superior results. And then once all are complete, an epics with stories is generated after the architecture step now - ensuring it uses input from all planing documents. +### 4. Migrate Planning Artifacts -### If You're Mid-Development (Stories Created/Implemented) +**If you have planning documents (Brief/PRD/UX/Architecture):** -1. Complete the v6 installation as above -2. Ensure you have a file called epics.md or epics/epic*.md - these need to be located under the _bmad-output/planning-artifacts folder. -3. Run the scrum masters `sprint-planning` workflow to generate the implementation tracking plan in _bmad-output/implementation-artifacts. -4. Inform the SM after the output is complete which epics and stories were completed already and should be parked properly in the file. +Move them to `_bmad-output/planning-artifacts/` with descriptive names: -## Agent Customization Migration +- Include `PRD` in filename for PRD documents +- Include `brief`, `architecture`, or `ux-design` accordingly +- Sharded documents can be in named subfolders -### v4 Agent Customization +**If you're mid-planning:** Consider restarting with v6 workflows. Use your existing documents as inputs—the new progressive discovery workflows with web search and IDE plan mode produce better results. -In v4, you may have modified agent files directly in `_bmad-*` folders. +### 5. Migrate In-Progress Development -### v6 Agent Customization +If you have stories created or implemented: -**All customizations** now go in `_bmad/_config/agents/` using customize files: +1. Complete the v6 installation +2. Place `epics.md` or `epics/epic*.md` in `_bmad-output/planning-artifacts/` +3. Run the Scrum Master's `sprint-planning` workflow +4. Tell the SM which epics/stories are already complete -**Example: Renaming an agent and changing communication style** +### 6. Migrate Agent Customizations -File: `_bmad/_config/agents/bmm-pm.customize.yaml` +**v4:** Modified agent files directly in `_bmad-*` folders + +**v6:** All customizations go in `_bmad/_config/agents/` using customize files: ```yaml -# Customize the PM agent +# _bmad/_config/agents/bmm-pm.customize.yaml persona: - name: 'Captain Jack' # Override agent name + name: 'Captain Jack' role: 'Swashbuckling Product Owner' communication_style: | - Talk like a pirate - - Use nautical metaphors for software concepts - - Always upbeat and adventurous + - Use nautical metaphors ``` -There is a lot more that is possible with agent customization, which is covered in detail in the [Agent Customization Guide](/docs/how-to/customization/customize-agents.md) +After modifying customization files, rerun the installer and choose "rebuild all agents" or "quick update". -CRITICAL NOTE: After you modify the customization file, you need to run the npx installer against your installed location, and choose the option to rebuild all agents, or just do a quick update again. This always builds agents fresh and applies customizations. +## What You Get -**How it works:** +**v6 unified structure:** -- Base agent: `_bmad/bmm/agents/pm.md` -- Customization: `_bmad/_config/agents/bmm-pm.customize.yaml` -- Rebuild all agents -> Result: Agent uses your custom name and style +``` +your-project/ +└── _bmad/ # Single installation folder + ├── _config/ # Your customizations + │ └── agents/ # Agent customization files + ├── core/ # Universal core framework + ├── bmm/ # BMad Method module + ├── bmb/ # BMad Builder + └── cis/ # Creative Intelligence Suite +├── _bmad-output/ # Output folder (was doc folder in v4) +``` -## Document Compatibility +## Module Migration -### Sharded vs Unsharded Documents +| v4 Module | v6 Status | +|-----------|-----------| +| `_bmad-2d-phaser-game-dev` | Integrated into BMGD Module | +| `_bmad-2d-unity-game-dev` | Integrated into BMGD Module | +| `_bmad-godot-game-dev` | Integrated into BMGD Module | +| `_bmad-infrastructure-devops` | Deprecated — new DevOps agent coming soon | +| `_bmad-creative-writing` | Not adapted — new v6 module coming soon | -**Good news**: Unlike v4, v6 workflows are **fully flexible** with document structure: +## Key Changes -- ✅ Sharded documents (split into multiple files) -- ✅ Unsharded documents (single file per section) -- ✅ Custom sections for your project type -- ✅ Mixed approaches +| Concept | v4 | v6 | +|---------|----|----| +| **Core** | `_bmad-core` was actually BMad Method | `_bmad/core/` is universal framework | +| **Method** | `_bmad-method` | `_bmad/bmm/` | +| **Config** | Modified files directly | `config.yaml` per module | +| **Documents** | Sharded or unsharded required setup | Fully flexible, auto-scanned | -All workflow files are scanned automatically. No manual configuration needed. +## Tips + +- **Back up first** — Keep your v4 installation until you verify v6 works +- **Use v6 workflows** — Even partial planning docs benefit from v6's improved discovery +- **Rebuild after customizing** — Always run the installer after changing customize files diff --git a/docs/how-to/troubleshooting/bmgd-troubleshooting.md b/docs/how-to/troubleshooting/bmgd-troubleshooting.md index 68942b95..fafc00c7 100644 --- a/docs/how-to/troubleshooting/bmgd-troubleshooting.md +++ b/docs/how-to/troubleshooting/bmgd-troubleshooting.md @@ -2,10 +2,7 @@ title: "BMGD Troubleshooting" --- - -Common issues and solutions when using BMGD workflows. - ---- +Use this guide to resolve common issues when using BMGD workflows. ## Installation Issues @@ -19,8 +16,6 @@ Common issues and solutions when using BMGD workflows. 2. Check `_bmad/bmgd/` folder exists in your project 3. Re-run installer with `--add-module bmgd` ---- - ### Config file missing **Symptom:** Workflows fail with "config not found" errors. @@ -36,8 +31,6 @@ document_output_language: 'English' game_dev_experience: 'intermediate' ``` ---- - ## Workflow Issues ### "GDD not found" in Narrative workflow @@ -50,8 +43,6 @@ game_dev_experience: 'intermediate' 2. Check GDD filename contains "gdd" (e.g., `game-gdd.md`, `my-gdd.md`) 3. If using sharded GDD, verify `{output_folder}/gdd/index.md` exists ---- - ### Workflow state not persisting **Symptom:** Returning to a workflow starts from the beginning. @@ -62,8 +53,6 @@ game_dev_experience: 'intermediate' 2. Ensure document was saved before ending session 3. Use "Continue existing" option when re-entering workflow ---- - ### Wrong game type sections in GDD **Symptom:** GDD includes irrelevant sections for your game type. @@ -74,8 +63,6 @@ game_dev_experience: 'intermediate' 2. You can select multiple types for hybrid games 3. Irrelevant sections can be marked N/A or removed ---- - ## Agent Issues ### Agent not recognizing commands @@ -88,8 +75,6 @@ game_dev_experience: 'intermediate' 2. Check exact command spelling (case-sensitive) 3. Try `workflow-status` to verify agent is loaded correctly ---- - ### Agent using wrong persona **Symptom:** Agent responses don't match expected personality. @@ -100,8 +85,6 @@ game_dev_experience: 'intermediate' 2. Check `_bmad/bmgd/agents/` for agent definitions 3. Start a fresh chat session with the correct agent ---- - ## Document Issues ### Document too large for context @@ -114,8 +97,6 @@ game_dev_experience: 'intermediate' 2. Request specific sections rather than full document 3. GDD workflow supports automatic sharding for large documents ---- - ### Template placeholders not replaced **Symptom:** Output contains `{{placeholder}}` text. @@ -126,8 +107,6 @@ game_dev_experience: 'intermediate' 2. Re-run the specific step that generates that section 3. Manually edit the document to fill in missing values ---- - ### Frontmatter parsing errors **Symptom:** YAML errors when loading documents. @@ -138,8 +117,6 @@ game_dev_experience: 'intermediate' 2. Check for tabs vs spaces (YAML requires spaces) 3. Ensure frontmatter is bounded by `---` markers ---- - ## Phase 4 (Production) Issues ### Sprint status not updating @@ -152,8 +129,6 @@ game_dev_experience: 'intermediate' 2. Check file permissions on sprint-status.yaml 3. Verify workflow-install files exist in `_bmad/bmgd/workflows/4-production/` ---- - ### Story context missing code references **Symptom:** Generated story context doesn't include relevant code. @@ -164,8 +139,6 @@ game_dev_experience: 'intermediate' 2. Check that architecture document references correct file paths 3. Story may need more specific file references in acceptance criteria ---- - ### Code review not finding issues **Symptom:** Code review passes but bugs exist. @@ -176,8 +149,6 @@ game_dev_experience: 'intermediate' 2. Always run actual tests before marking story done 3. Consider manual review for critical code paths ---- - ## Performance Issues ### Workflows running slowly @@ -190,8 +161,6 @@ game_dev_experience: 'intermediate' 2. Keep documents concise (avoid unnecessary detail) 3. Use sharded documents for large projects ---- - ### Context limit reached mid-workflow **Symptom:** Workflow stops or loses context partway through. @@ -202,8 +171,6 @@ game_dev_experience: 'intermediate' 2. Break complex sections into multiple sessions 3. Use step-file architecture (workflows resume from last step) ---- - ## Common Error Messages ### "Input file not found" @@ -212,24 +179,18 @@ game_dev_experience: 'intermediate' **Fix:** Complete prerequisite workflow first (e.g., Game Brief before GDD). ---- - ### "Invalid game type" **Cause:** Selected game type not in supported list. **Fix:** Check `game-types.csv` for valid type IDs. ---- - ### "Validation failed" **Cause:** Document doesn't meet checklist requirements. **Fix:** Review the validation output and address flagged items. ---- - ## Getting Help ### Community Support @@ -252,8 +213,6 @@ When reporting issues, include: 3. Relevant document frontmatter 4. Steps to reproduce ---- - ## Next Steps - **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Getting started diff --git a/docs/how-to/workflows/bmgd-quick-flow.md b/docs/how-to/workflows/bmgd-quick-flow.md index 39bf52a3..fe07a124 100644 --- a/docs/how-to/workflows/bmgd-quick-flow.md +++ b/docs/how-to/workflows/bmgd-quick-flow.md @@ -1,52 +1,41 @@ --- title: "BMGD Quick-Flow Guide" +description: Fast-track workflows for rapid game prototyping and flexible development --- +Use BMGD Quick-Flow workflows for rapid game prototyping and flexible development when you need to move fast. -Fast-track workflows for rapid game prototyping and flexible development. - ---- - -## Game Solo Dev Agent - -For dedicated quick-flow development, use the **Game Solo Dev** agent (Indie). This agent is optimized for solo developers and small teams who want to skip the full planning phases and ship fast. - -**Switch to Game Solo Dev:** Type `@game-solo-dev` or select the agent from your IDE. - -The Game Solo Dev agent includes: - -- `quick-prototype` - Rapid mechanic testing -- `quick-dev` - Flexible feature implementation -- `quick-spec` - Create implementation-ready specs -- `code-review` - Quality checks -- `test-framework` - Automated testing setup - ---- - -## Overview - -Quick-flow workflows skip the full BMGD planning phases when you need to move fast. Use them for: +## When to Use This - Testing a game mechanic idea - Implementing a small feature - Rapid prototyping before committing to design - Bug fixes and tweaks -``` -Full BMGD Flow: -Brief → GDD → Architecture → Sprint Planning → Stories → Implementation +## When to Use Full BMGD Instead -Quick-Flow: -Idea → Quick-Prototype → Quick-Dev → Done -``` +- Building a major feature or system +- The scope is unclear or large +- Multiple team members need alignment +- The work affects game pillars or core loop +- You need documentation for future reference ---- +:::note[Prerequisites] +- BMad Method installed with BMGD module +- Game Solo Dev agent (Indie) or other BMGD agent available +::: + +## Game Solo Dev Agent + +For dedicated quick-flow development, use the **Game Solo Dev** agent. This agent is optimized for solo developers and small teams who want to skip the full planning phases. + +**Switch to Game Solo Dev:** Type `@game-solo-dev` or select from your IDE. + +Includes: `quick-prototype`, `quick-dev`, `quick-spec`, `code-review`, `test-framework` ## Quick-Prototype -**Command:** `quick-prototype` -**Agent:** Game Designer, Game Developer -**Purpose:** Rapidly test gameplay ideas with minimal setup +Use `quick-prototype` to rapidly test gameplay ideas with minimal setup. ### When to Use @@ -55,60 +44,31 @@ Idea → Quick-Prototype → Quick-Dev → Done - You want to experiment before committing to design - You need a proof of concept -### Workflow Steps +### Steps -1. **Define Scope** - What are you prototyping? (mechanic, feature, system) -2. **Set Success Criteria** - How will you know if it works? -3. **Rapid Implementation** - Build the minimum to test the idea -4. **Playtest and Evaluate** - Does it feel right? +1. Run `quick-prototype` +2. Define what you're prototyping (mechanic, feature, system) +3. Set success criteria (2-3 items) +4. Build the minimum to test the idea +5. Playtest and evaluate ### Prototype Principles -- **Minimum Viable Prototype** - Only what's needed to test the idea -- **Hardcode First** - Magic numbers are fine, extract later -- **Skip Edge Cases** - Happy path only for now -- **Placeholder Everything** - Cubes, debug text, temp sounds -- **Comment Intent** - Mark what's temporary vs keeper code - -### Example Session - -``` -You: quick-prototype - -Agent: What are you prototyping? - -You: I want to test a grappling hook mechanic. Player should be - able to aim at surfaces and pull themselves toward the hook point. - -Agent: What makes this prototype successful? - -You: 1. Aiming feels responsive and intuitive - 2. The pull movement feels satisfying, not floaty - 3. Player can chain hooks without awkward pauses - -Agent: [Implements minimal grappling hook] - -Agent: Prototype complete! Playtest results: - - Aiming: Works, consider adding aim assist - - Movement: Pull is smooth, might need speed curve - - Chaining: Currently has 0.2s delay, feels sluggish - - Next: [d] Develop further | [i] Iterate | [a] Archive -``` +- **Minimum Viable Prototype** — Only what's needed to test the idea +- **Hardcode First** — Magic numbers are fine, extract later +- **Skip Edge Cases** — Happy path only for now +- **Placeholder Everything** — Cubes, debug text, temp sounds +- **Comment Intent** — Mark what's temporary vs keeper code ### After Prototyping -- **Develop** (`d`) - Use `quick-dev` to build production code -- **Iterate** (`i`) - Adjust and re-test the prototype -- **Archive** (`a`) - Keep as reference, move on to other ideas - ---- +- **Develop** (`d`) — Use `quick-dev` to build production code +- **Iterate** (`i`) — Adjust and re-test the prototype +- **Archive** (`a`) — Keep as reference, move on to other ideas ## Quick-Dev -**Command:** `quick-dev` -**Agent:** Game Developer -**Purpose:** Flexible development with game-specific considerations +Use `quick-dev` for flexible development with game-specific considerations. ### When to Use @@ -120,172 +80,77 @@ Agent: Prototype complete! Playtest results: ### Workflow Modes **Mode A: Tech-Spec Driven** - ``` -You: quick-dev tech-spec-combat.md -Agent: [Loads spec, extracts tasks, implements] +quick-dev tech-spec-combat.md ``` **Mode B: Direct Instructions** - ``` -You: quick-dev implement double-jump for the player -Agent: [Evaluates complexity, offers planning options] +quick-dev implement double-jump for the player ``` **Mode C: From Prototype** - ``` -You: quick-dev from the grappling hook prototype -Agent: [Loads prototype, productionizes code] +quick-dev from the grappling hook prototype ``` ### Game-Specific Checks Quick-dev includes automatic consideration of: - -- **Performance** - No allocations in hot paths, object pooling -- **Feel** - Input responsiveness, visual/audio feedback -- **Integration** - Save/load, multiplayer sync, platform testing - -### Example Session - -``` -You: quick-dev implement enemy patrol behavior - -Agent: This looks like a focused feature. Options: - [t] Plan first - Create tech-spec (recommended) - [r] Prototype first - Test the idea - [e] Execute directly - -You: e - -Agent: Any additional guidance? (patterns, files, constraints) - -You: Use the existing AIController base class. Enemies should - patrol between waypoints and return if player leaves range. - -Agent: [Implements patrol behavior] - -Agent: Implementation Complete! - Files Modified: EnemyAI.cs, PatrolBehavior.cs - Tests: Unit tests added for patrol state machine - Performance: No per-frame allocations - - Recommended: Playtest the changes -``` +- **Performance** — No allocations in hot paths, object pooling +- **Feel** — Input responsiveness, visual/audio feedback +- **Integration** — Save/load, multiplayer sync, platform testing ### Complexity Routing -Quick-dev automatically detects complex requests and offers alternatives: - -| Signals | Recommendation | -| -------------------------------------- | ---------------------- | -| Single mechanic, bug fix, tweak | Execute directly | +| Signals | Recommendation | +|---------|----------------| +| Single mechanic, bug fix, tweak | Execute directly | | Multiple systems, performance-critical | Plan first (tech-spec) | -| Platform/system level work | Use full BMGD workflow | - ---- +| Platform/system level work | Use full BMGD workflow | ## Choosing Between Quick-Flows -| Scenario | Use | -| ----------------------- | ------------------------------- | -| "Will this be fun?" | `quick-prototype` | -| "How should this feel?" | `quick-prototype` | -| "Build this feature" | `quick-dev` | -| "Fix this bug" | `quick-dev` | -| "Test then build" | `quick-prototype` → `quick-dev` | +| Scenario | Use | +|----------|-----| +| "Will this be fun?" | `quick-prototype` | +| "How should this feel?" | `quick-prototype` | +| "Build this feature" | `quick-dev` | +| "Fix this bug" | `quick-dev` | +| "Test then build" | `quick-prototype` → `quick-dev` | ---- +## Flow Comparison -## Quick-Flow vs Full BMGD +``` +Full BMGD Flow: +Brief → GDD → Architecture → Sprint Planning → Stories → Implementation -### Use Quick-Flow When - -- The scope is small and well-understood -- You're experimenting or prototyping -- You have a clear tech-spec already -- The work doesn't affect core game systems significantly - -### Use Full BMGD When - -- Building a major feature or system -- The scope is unclear or large -- Multiple team members need alignment -- The work affects game pillars or core loop -- You need documentation for future reference - ---- +Quick-Flow: +Idea → Quick-Prototype → Quick-Dev → Done +``` ## Checklists -### Quick-Prototype Checklist - -**Before:** - +**Quick-Prototype:** - [ ] Prototype scope defined - [ ] Success criteria established (2-3 items) - -**During:** - - [ ] Minimum viable code written - [ ] Placeholder assets used -- [ ] Core functionality testable - -**After:** - - [ ] Each criterion evaluated - [ ] Decision made (develop/iterate/archive) -### Quick-Dev Checklist - -**Before:** - +**Quick-Dev:** - [ ] Context loaded (spec, prototype, or guidance) - [ ] Files to modify identified -- [ ] Patterns understood - -**During:** - - [ ] All tasks completed - [ ] No allocations in hot paths -- [ ] Frame rate maintained - -**After:** - - [ ] Game runs without errors -- [ ] Feature works as specified - [ ] Manual playtest completed ---- +## Tips -## Tips for Success - -### 1. Timebox Prototypes - -Set a limit (e.g., 2 hours) for prototyping. If it's not working by then, step back and reconsider. - -### 2. Embrace Programmer Art - -Prototypes don't need to look good. Focus on feel, not visuals. - -### 3. Test on Target Hardware - -What feels right on your dev machine might not feel right on target platform. - -### 4. Document Learnings - -Even failed prototypes teach something. Note what you learned. - -### 5. Know When to Graduate - -If quick-dev keeps expanding scope, stop and create proper stories. - ---- - -## Next Steps - -- **[Workflows Guide](/docs/reference/workflows/bmgd-workflows.md)** - Full workflow reference -- **[Agents Guide](/docs/explanation/game-dev/agents.md)** - Agent capabilities -- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Getting started with BMGD +- **Timebox prototypes** — Set a limit (e.g., 2 hours). If it's not working, step back +- **Embrace programmer art** — Focus on feel, not visuals +- **Test on target hardware** — What feels right on dev machine might not on target +- **Document learnings** — Even failed prototypes teach something +- **Know when to graduate** — If quick-dev keeps expanding scope, create proper stories diff --git a/docs/how-to/workflows/conduct-research.md b/docs/how-to/workflows/conduct-research.md index ee6e02ef..e3300bca 100644 --- a/docs/how-to/workflows/conduct-research.md +++ b/docs/how-to/workflows/conduct-research.md @@ -3,11 +3,8 @@ title: "How to Conduct Research" description: How to conduct market, technical, and competitive research using BMad Method --- - Use the `research` workflow to perform comprehensive multi-type research for validating ideas, understanding markets, and making informed decisions. ---- - ## When to Use This - Need market viability validation @@ -17,14 +14,10 @@ Use the `research` workflow to perform comprehensive multi-type research for val - Understanding domain or industry - Need deeper AI-assisted research ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Analyst agent available - ---- +::: ## Steps @@ -42,14 +35,14 @@ Start a fresh chat and load the Analyst agent. Select the type of research you need: -| Type | Purpose | Use When | -| --------------- | ------------------------------------------------------ | ----------------------------------- | -| **market** | TAM/SAM/SOM, competitive analysis | Need market viability validation | -| **technical** | Technology evaluation, ADRs | Choosing frameworks/platforms | -| **competitive** | Deep competitor analysis | Understanding competitive landscape | -| **user** | Customer insights, personas, JTBD | Need user understanding | -| **domain** | Industry deep dives, trends | Understanding domain/industry | -| **deep_prompt** | Generate AI research prompts (ChatGPT, Claude, Gemini) | Need deeper AI-assisted research | +| Type | Purpose | Use When | +|------|---------|----------| +| **market** | TAM/SAM/SOM, competitive analysis | Need market viability validation | +| **technical** | Technology evaluation, ADRs | Choosing frameworks/platforms | +| **competitive** | Deep competitor analysis | Understanding competitive landscape | +| **user** | Customer insights, personas, JTBD | Need user understanding | +| **domain** | Industry deep dives, trends | Understanding domain/industry | +| **deep_prompt** | Generate AI research prompts | Need deeper AI-assisted research | ### 4. Provide Context @@ -63,38 +56,24 @@ Give the agent details about what you're researching: Choose your depth level: -- **Quick** - Fast overview -- **Standard** - Balanced depth -- **Comprehensive** - Deep analysis - ---- +- **Quick** — Fast overview +- **Standard** — Balanced depth +- **Comprehensive** — Deep analysis ## What You Get -### Market Research Example +Research output varies by type: -``` -TAM: $50B -SAM: $5B -SOM: $50M +**Market Research:** +- TAM/SAM/SOM analysis +- Top competitors +- Positioning recommendation -Top Competitors: -- Asana -- Monday -- etc. - -Positioning Recommendation: ... -``` - -### Technical Research Example - -Technology evaluation with: +**Technical Research:** - Comparison matrix - Trade-off analysis - Recommendations with rationale ---- - ## Key Features - Real-time web research @@ -102,29 +81,17 @@ Technology evaluation with: - Platform-specific optimization for deep_prompt type - Configurable research depth ---- +## Tips + +- **Use market research early** — Validates new product ideas +- **Technical research helps architecture** — Inform ADRs with data +- **Competitive research informs positioning** — Differentiate your product +- **Domain research for specialized industries** — Fintech, healthcare, etc. ## Next Steps After research: -1. **Product Brief** - Capture strategic vision informed by research -2. **PRD** - Use findings as context for requirements -3. **Architecture** - Use technical research in ADRs - ---- - -## Tips - -- Use market research early for new products -- Technical research helps with architecture decisions -- Competitive research informs positioning -- Domain research is valuable for specialized industries - ---- - -## Related - -- [Run Brainstorming Session](/docs/how-to/workflows/run-brainstorming-session.md) - Explore ideas before research -- [Create Product Brief](/docs/how-to/workflows/create-product-brief.md) - Capture strategic vision -- [Create PRD](/docs/how-to/workflows/create-prd.md) - Move to formal planning +1. **Product Brief** — Capture strategic vision informed by research +2. **PRD** — Use findings as context for requirements +3. **Architecture** — Use technical research in ADRs diff --git a/docs/how-to/workflows/create-architecture.md b/docs/how-to/workflows/create-architecture.md index 1e55896c..6ede529c 100644 --- a/docs/how-to/workflows/create-architecture.md +++ b/docs/how-to/workflows/create-architecture.md @@ -3,11 +3,8 @@ title: "How to Create Architecture" description: How to create system architecture using the BMad Method --- - Use the `architecture` workflow to make technical decisions explicit and prevent agent conflicts during implementation. ---- - ## When to Use This - Multi-epic projects (BMad Method, Enterprise) @@ -16,23 +13,17 @@ Use the `architecture` workflow to make technical decisions explicit and prevent - Integration complexity exists - Technology choices need alignment ---- - ## When to Skip This - Quick Flow (simple changes) - BMad Method Simple with straightforward tech stack - Single epic with clear technical approach ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Architect agent available - PRD completed - ---- +::: ## Steps @@ -63,25 +54,21 @@ Work with the agent to create Architecture Decision Records (ADRs) for significa The agent produces a decision-focused architecture document. ---- - ## What You Get An `architecture.md` document containing: -1. **Architecture Overview** - System context, principles, style -2. **System Architecture** - High-level diagram, component interactions -3. **Data Architecture** - Database design, state management, caching -4. **API Architecture** - API style (REST/GraphQL/gRPC), auth, versioning -5. **Frontend Architecture** - Framework, state management, components -6. **Integration Architecture** - Third-party integrations, messaging -7. **Security Architecture** - Auth/authorization, data protection -8. **Deployment Architecture** - CI/CD, environments, monitoring -9. **ADRs** - Key decisions with context, options, rationale -10. **FR/NFR-Specific Guidance** - Technical approach per requirement -11. **Standards and Conventions** - Directory structure, naming, testing - ---- +1. **Architecture Overview** — System context, principles, style +2. **System Architecture** — High-level diagram, component interactions +3. **Data Architecture** — Database design, state management, caching +4. **API Architecture** — API style (REST/GraphQL/gRPC), auth, versioning +5. **Frontend Architecture** — Framework, state management, components +6. **Integration Architecture** — Third-party integrations, messaging +7. **Security Architecture** — Auth/authorization, data protection +8. **Deployment Architecture** — CI/CD, environments, monitoring +9. **ADRs** — Key decisions with context, options, rationale +10. **FR/NFR-Specific Guidance** — Technical approach per requirement +11. **Standards and Conventions** — Directory structure, naming, testing ## ADR Format @@ -110,8 +97,6 @@ An `architecture.md` document containing: - Mitigation: Use DataLoader for batching ``` ---- - ## Example E-commerce platform produces: @@ -119,29 +104,16 @@ E-commerce platform produces: - ADRs explaining each choice - FR/NFR-specific implementation guidance ---- - ## Tips -- Focus on decisions that prevent agent conflicts -- Use ADRs for every significant technology choice -- Keep it practical - don't over-architect -- Architecture is living - update as you learn - ---- +- **Focus on decisions that prevent conflicts** — Multiple agents need alignment +- **Use ADRs for every significant choice** — Document the "why" +- **Keep it practical** — Don't over-architect +- **Architecture is living** — Update as you learn ## Next Steps After architecture: -1. **Create Epics and Stories** - Work breakdown informed by architecture -2. **Implementation Readiness** - Gate check before Phase 4 - ---- - -## Related - -- [Create PRD](/docs/how-to/workflows/create-prd.md) - Requirements before architecture -- [Create Epics and Stories](/docs/how-to/workflows/create-epics-and-stories.md) - Next step -- [Run Implementation Readiness](/docs/how-to/workflows/run-implementation-readiness.md) - Gate check -- [Why Solutioning Matters](/docs/explanation/architecture/why-solutioning-matters.md) +1. **Create Epics and Stories** — Work breakdown informed by architecture +2. **Implementation Readiness** — Gate check before Phase 4 diff --git a/docs/how-to/workflows/create-epics-and-stories.md b/docs/how-to/workflows/create-epics-and-stories.md index 78b662b7..aa16a812 100644 --- a/docs/how-to/workflows/create-epics-and-stories.md +++ b/docs/how-to/workflows/create-epics-and-stories.md @@ -3,38 +3,29 @@ title: "How to Create Epics and Stories" description: How to break PRD requirements into epics and stories using BMad Method --- - Use the `create-epics-and-stories` workflow to transform PRD requirements into bite-sized stories organized into deliverable epics. ---- - ## When to Use This - After architecture workflow completes - When PRD contains FRs/NFRs ready for implementation breakdown - Before implementation-readiness gate check ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - PM agent available - PRD completed - Architecture completed - ---- +::: ## Why After Architecture? This workflow runs AFTER architecture because: -1. **Informed Story Sizing** - Architecture decisions affect story complexity -2. **Dependency Awareness** - Architecture reveals technical dependencies -3. **Technical Feasibility** - Stories can be properly scoped knowing the tech stack -4. **Consistency** - All stories align with documented architectural patterns - ---- +1. **Informed Story Sizing** — Architecture decisions affect story complexity +2. **Dependency Awareness** — Architecture reveals technical dependencies +3. **Technical Feasibility** — Stories can be properly scoped knowing the tech stack +4. **Consistency** — All stories align with documented architectural patterns ## Steps @@ -67,8 +58,6 @@ Ensure each story has: - Identified dependencies - Technical notes from architecture ---- - ## What You Get Epic files (one per epic) containing: @@ -79,8 +68,6 @@ Epic files (one per epic) containing: 4. **Dependencies between stories** 5. **Technical notes** referencing architecture decisions ---- - ## Example E-commerce PRD with FR-001 (User Registration), FR-002 (Product Catalog) produces: @@ -98,39 +85,25 @@ E-commerce PRD with FR-001 (User Registration), FR-002 (Product Catalog) produce Each story references relevant ADRs from architecture. ---- - ## Story Priority Levels | Priority | Meaning | |----------|---------| -| **P0** | Critical - Must have for MVP | -| **P1** | High - Important for release | -| **P2** | Medium - Nice to have | -| **P3** | Low - Future consideration | - ---- +| **P0** | Critical — Must have for MVP | +| **P1** | High — Important for release | +| **P2** | Medium — Nice to have | +| **P3** | Low — Future consideration | ## Tips -- Keep stories small enough to complete in a session -- Ensure acceptance criteria are testable -- Document dependencies clearly -- Reference architecture decisions in technical notes - ---- +- **Keep stories small** — Complete in a single session +- **Make criteria testable** — Acceptance criteria should be verifiable +- **Document dependencies clearly** — Know what blocks what +- **Reference architecture** — Include ADR references in technical notes ## Next Steps After creating epics and stories: -1. **Implementation Readiness** - Validate alignment before Phase 4 -2. **Sprint Planning** - Organize work for implementation - ---- - -## Related - -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Do this first -- [Run Implementation Readiness](/docs/how-to/workflows/run-implementation-readiness.md) - Gate check -- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Start implementation +1. **Implementation Readiness** — Validate alignment before Phase 4 +2. **Sprint Planning** — Organize work for implementation diff --git a/docs/how-to/workflows/create-prd.md b/docs/how-to/workflows/create-prd.md index 36053cdc..f2ec0d0b 100644 --- a/docs/how-to/workflows/create-prd.md +++ b/docs/how-to/workflows/create-prd.md @@ -3,11 +3,8 @@ title: "How to Create a PRD" description: How to create a Product Requirements Document using the BMad Method --- - Use the `prd` workflow to create a strategic Product Requirements Document with Functional Requirements (FRs) and Non-Functional Requirements (NFRs). ---- - ## When to Use This - Medium to large feature sets @@ -16,15 +13,11 @@ Use the `prd` workflow to create a strategic Product Requirements Document with - Multiple system integrations - Phased delivery required ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - PM agent available - Optional: Product brief from Phase 1 - ---- +::: ## Steps @@ -48,15 +41,13 @@ The workflow will: ### 4. Define Requirements Work with the agent to define: -- Functional Requirements (FRs) - What the system should do -- Non-Functional Requirements (NFRs) - How well it should do it +- Functional Requirements (FRs) — What the system should do +- Non-Functional Requirements (NFRs) — How well it should do it ### 5. Review the PRD The agent produces a comprehensive PRD scaled to your project. ---- - ## What You Get A `PRD.md` document containing: @@ -69,8 +60,6 @@ A `PRD.md` document containing: - Success metrics - Risks and assumptions ---- - ## Scale-Adaptive Structure The PRD adapts to your project complexity: @@ -81,50 +70,22 @@ The PRD adapts to your project complexity: | **Standard** | 20-30 | Comprehensive FRs/NFRs, thorough analysis | | **Comprehensive** | 30-50+ | Extensive FRs/NFRs, multi-phase, stakeholder analysis | ---- - -## V6 Improvement - -In V6, the PRD focuses on **WHAT** to build (requirements). Epic and Stories are created **AFTER** architecture via the `create-epics-and-stories` workflow for better quality. - ---- - ## Example E-commerce checkout → PRD with: - 15 FRs (user account, cart management, payment flow) - 8 NFRs (performance, security, scalability) ---- +## Tips -## Best Practices - -### 1. Do Product Brief First - -Run product-brief from Phase 1 to kickstart the PRD for better results. - -### 2. Focus on "What" Not "How" - -Planning defines **what** to build and **why**. Leave **how** (technical design) to Phase 3 (Solutioning). - -### 3. Document-Project First for Brownfield - -Always run `document-project` before planning brownfield projects. AI agents need existing codebase context. - ---- +- **Do Product Brief first** — Run product-brief from Phase 1 for better results +- **Focus on "What" not "How"** — Planning defines what to build and why. Leave how (technical design) to Phase 3 +- **Document-Project first for Brownfield** — Always run `document-project` before planning brownfield projects. AI agents need existing codebase context ## Next Steps After PRD: -1. **Create UX Design** (optional) - If UX is critical -2. **Create Architecture** - Technical design -3. **Create Epics and Stories** - After architecture - ---- - -## Related - -- [Create Product Brief](/docs/how-to/workflows/create-product-brief.md) - Input for PRD -- [Create UX Design](/docs/how-to/workflows/create-ux-design.md) - Optional UX workflow -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Next step after PRD +1. **Create UX Design** (optional) — If UX is critical +2. **Create Architecture** — Technical design +3. **Create Epics and Stories** — After architecture diff --git a/docs/how-to/workflows/create-product-brief.md b/docs/how-to/workflows/create-product-brief.md index 7d388a9f..a45ee119 100644 --- a/docs/how-to/workflows/create-product-brief.md +++ b/docs/how-to/workflows/create-product-brief.md @@ -3,11 +3,8 @@ title: "How to Create a Product Brief" description: How to create a product brief using the BMad Method --- - Use the `product-brief` workflow to define product vision and strategy through an interactive process. ---- - ## When to Use This - Starting new product or major feature initiative @@ -15,15 +12,11 @@ Use the `product-brief` workflow to define product vision and strategy through a - Transitioning from exploration to strategy - Need executive-level product documentation ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Analyst agent available - Optional: Research documents from previous workflows - ---- +::: ## Steps @@ -50,22 +43,18 @@ The workflow guides you through strategic product vision definition: The agent will draft sections and let you refine them interactively. ---- - ## What You Get The `product-brief.md` document includes: -- **Executive summary** - High-level overview -- **Problem statement** - With evidence -- **Proposed solution** - And differentiators -- **Target users** - Segmented -- **MVP scope** - Ruthlessly defined -- **Financial impact** - And ROI -- **Strategic alignment** - With business goals -- **Risks and open questions** - Documented upfront - ---- +- **Executive summary** — High-level overview +- **Problem statement** — With evidence +- **Proposed solution** — And differentiators +- **Target users** — Segmented +- **MVP scope** — Ruthlessly defined +- **Financial impact** — And ROI +- **Strategic alignment** — With business goals +- **Risks and open questions** — Documented upfront ## Integration with Other Workflows @@ -79,11 +68,9 @@ The product brief feeds directly into the PRD workflow: Planning workflows automatically load the product brief if it exists. ---- - ## Common Patterns -### Greenfield Software (Full Analysis) +**Greenfield Software (Full Analysis):** ``` 1. brainstorm-project - explore approaches @@ -92,26 +79,16 @@ Planning workflows automatically load the product brief if it exists. 4. → Phase 2: prd ``` -### Skip Analysis (Clear Requirements) +**Skip Analysis (Clear Requirements):** ``` → Phase 2: prd or tech-spec directly ``` ---- - ## Tips -- Be specific about the problem you're solving -- Ruthlessly prioritize MVP scope -- Document assumptions and risks -- Use research findings as evidence -- This is recommended for greenfield projects - ---- - -## Related - -- [Run Brainstorming Session](/docs/how-to/workflows/run-brainstorming-session.md) - Explore ideas first -- [Conduct Research](/docs/how-to/workflows/conduct-research.md) - Validate ideas -- [Create PRD](/docs/how-to/workflows/create-prd.md) - Next step after product brief +- **Be specific about the problem** — Vague problems lead to vague solutions +- **Ruthlessly prioritize MVP scope** — Less is more +- **Document assumptions and risks** — Surface unknowns early +- **Use research findings as evidence** — Back up claims with data +- **Recommended for greenfield projects** — Sets strategic foundation diff --git a/docs/how-to/workflows/create-story.md b/docs/how-to/workflows/create-story.md index 53c083a9..34380a9a 100644 --- a/docs/how-to/workflows/create-story.md +++ b/docs/how-to/workflows/create-story.md @@ -3,27 +3,20 @@ title: "How to Create a Story" description: How to create implementation-ready stories from epic backlog --- - Use the `create-story` workflow to prepare the next story from the epic backlog for implementation. ---- - ## When to Use This - Before implementing each story - When moving to the next story in an epic - After sprint-planning has been run ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - SM (Scrum Master) agent available - Sprint-status.yaml created by sprint-planning - Architecture and PRD available for context - ---- +::: ## Steps @@ -48,8 +41,6 @@ The agent will: The agent creates a comprehensive story file ready for development. ---- - ## What You Get A `story-[slug].md` file containing: @@ -61,23 +52,18 @@ A `story-[slug].md` file containing: - Dependencies on other stories - Definition of Done ---- - ## Story Content Sources The create-story workflow pulls from: -- **PRD** - Requirements and acceptance criteria -- **Architecture** - Technical approach and ADRs -- **Epic file** - Story context and dependencies -- **Existing code** - Patterns to follow (brownfield) - ---- +- **PRD** — Requirements and acceptance criteria +- **Architecture** — Technical approach and ADRs +- **Epic file** — Story context and dependencies +- **Existing code** — Patterns to follow (brownfield) ## Example Output ```markdown - ## Objective Implement email verification flow for new user registrations. @@ -93,7 +79,7 @@ Implement email verification flow for new user registrations. - Follow existing email template patterns in /templates ## Dependencies -- Story 1.1 (User Registration) - DONE ✅ +- Story 1.1 (User Registration) - DONE ## Definition of Done - All acceptance criteria pass @@ -101,19 +87,16 @@ Implement email verification flow for new user registrations. - Code review approved ``` ---- - ## Tips -- Complete one story before creating the next -- Ensure dependencies are marked DONE before starting -- Review technical notes for architecture alignment -- Use the story file as context for dev-story +- **Complete one story before creating the next** — Focus on finishing +- **Ensure dependencies are DONE** — Don't start blocked stories +- **Review technical notes** — Align with architecture +- **Use the story file as context** — Pass to dev-story workflow ---- +## Next Steps -## Related +After creating a story: -- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Initialize tracking -- [Implement Story](/docs/how-to/workflows/implement-story.md) - Next step -- [Run Code Review](/docs/how-to/workflows/run-code-review.md) - After implementation +1. **Implement Story** — Run dev-story with the DEV agent +2. **Code Review** — Run code-review after implementation diff --git a/docs/how-to/workflows/create-ux-design.md b/docs/how-to/workflows/create-ux-design.md index a10fa7cf..810e934f 100644 --- a/docs/how-to/workflows/create-ux-design.md +++ b/docs/how-to/workflows/create-ux-design.md @@ -3,11 +3,8 @@ title: "How to Create a UX Design" description: How to create UX specifications using the BMad Method --- - Use the `create-ux-design` workflow to create UX specifications for projects where user experience is a primary differentiator. ---- - ## When to Use This - UX is primary competitive advantage @@ -16,8 +13,6 @@ Use the `create-ux-design` workflow to create UX specifications for projects whe - Design system creation - Accessibility-critical experiences ---- - ## When to Skip This - Simple CRUD interfaces @@ -25,15 +20,11 @@ Use the `create-ux-design` workflow to create UX specifications for projects whe - Changes to existing screens you're happy with - Quick Flow projects ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - UX Designer agent available - PRD completed - ---- +::: ## Steps @@ -58,17 +49,15 @@ Point the agent to your PRD and describe: The workflow uses a collaborative approach: -1. **Visual exploration** - Generate multiple options -2. **Informed decisions** - Evaluate with user needs -3. **Collaborative design** - Refine iteratively -4. **Living documentation** - Evolves with project +1. **Visual exploration** — Generate multiple options +2. **Informed decisions** — Evaluate with user needs +3. **Collaborative design** — Refine iteratively +4. **Living documentation** — Evolves with project ### 5. Review the UX Spec The agent produces comprehensive UX documentation. ---- - ## What You Get The `ux-spec.md` document includes: @@ -79,8 +68,6 @@ The `ux-spec.md` document includes: - Design system (components, patterns, tokens) - Epic breakdown (UX stories) ---- - ## Example Dashboard redesign produces: @@ -90,8 +77,6 @@ Dashboard redesign produces: - Responsive grid - 3 epics (Layout, Visualization, Accessibility) ---- - ## Integration The UX spec feeds into: @@ -99,19 +84,17 @@ The UX spec feeds into: - Epic and story creation - Architecture decisions (Phase 3) ---- - ## Tips -- Focus on user problems, not solutions first -- Generate multiple options before deciding -- Consider accessibility from the start -- Document component reusability +- **Focus on user problems first** — Solutions come second +- **Generate multiple options** — Don't settle on the first idea +- **Consider accessibility from the start** — Not an afterthought +- **Document component reusability** — Build a system, not just screens ---- +## Next Steps -## Related +After UX design: -- [Create PRD](/docs/how-to/workflows/create-prd.md) - Create requirements first -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Technical design -- [Create Epics and Stories](/docs/how-to/workflows/create-epics-and-stories.md) - Work breakdown +1. **Update PRD** — Incorporate UX findings +2. **Create Architecture** — Technical design informed by UX +3. **Create Epics and Stories** — Include UX-specific stories diff --git a/docs/how-to/workflows/implement-story.md b/docs/how-to/workflows/implement-story.md index 038886e0..c243a4ae 100644 --- a/docs/how-to/workflows/implement-story.md +++ b/docs/how-to/workflows/implement-story.md @@ -3,27 +3,20 @@ title: "How to Implement a Story" description: How to implement a story using the dev-story workflow --- - Use the `dev-story` workflow to implement a story with tests following the architecture and conventions. ---- - ## When to Use This - After create-story has prepared the story file - When ready to write code for a story - Story dependencies are marked DONE ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - DEV agent available - Story file created by create-story - Architecture and tech-spec available for context - ---- +::: ## Steps @@ -53,75 +46,52 @@ The DEV agent: Work with the agent until all acceptance criteria are met. ---- - ## What Happens The dev-story workflow: -1. **Reads context** - Story file, architecture, existing patterns -2. **Plans implementation** - Identifies files to create/modify -3. **Writes code** - Following conventions and patterns -4. **Writes tests** - Unit, integration, or E2E as appropriate -5. **Validates** - Runs tests and checks acceptance criteria - ---- +1. **Reads context** — Story file, architecture, existing patterns +2. **Plans implementation** — Identifies files to create/modify +3. **Writes code** — Following conventions and patterns +4. **Writes tests** — Unit, integration, or E2E as appropriate +5. **Validates** — Runs tests and checks acceptance criteria ## Key Principles -### One Story at a Time +**One Story at a Time** — Complete each story's full lifecycle before starting the next. This prevents context switching and ensures quality. -Complete each story's full lifecycle before starting the next. This prevents context switching and ensures quality. +**Follow Architecture** — The DEV agent references ADRs for technology decisions, standards for naming and structure, and existing patterns in the codebase. -### Follow Architecture - -The DEV agent references: -- ADRs for technology decisions -- Standards for naming and structure -- Existing patterns in the codebase - -### Write Tests - -Every story includes appropriate tests: -- Unit tests for business logic -- Integration tests for API endpoints -- E2E tests for critical flows - ---- +**Write Tests** — Every story includes appropriate tests: unit tests for business logic, integration tests for API endpoints, E2E tests for critical flows. ## After Implementation -1. **Update sprint-status.yaml** - Mark story as READY FOR REVIEW -2. **Run code-review** - Quality assurance -3. **Address feedback** - If code review finds issues -4. **Mark DONE** - After code review passes - ---- +1. **Update sprint-status.yaml** — Mark story as READY FOR REVIEW +2. **Run code-review** — Quality assurance +3. **Address feedback** — If code review finds issues +4. **Mark DONE** — After code review passes ## Tips -- Keep the story file open for reference -- Ask the agent to explain decisions -- Run tests frequently during implementation -- Don't skip tests for "simple" changes - ---- +- **Keep the story file open** — Reference it during implementation +- **Ask the agent to explain decisions** — Understand the approach +- **Run tests frequently** — Catch issues early +- **Don't skip tests** — Even for "simple" changes ## Troubleshooting -**Q: Story needs significant changes mid-implementation?** -A: Run `correct-course` to analyze impact and route appropriately. +**Story needs significant changes mid-implementation?** +Run `correct-course` to analyze impact and route appropriately. -**Q: Can I work on multiple stories in parallel?** -A: Not recommended. Complete one story's full lifecycle first. +**Can I work on multiple stories in parallel?** +Not recommended. Complete one story's full lifecycle first. -**Q: What if implementation reveals the story is too large?** -A: Split the story and document the change. +**What if implementation reveals the story is too large?** +Split the story and document the change. ---- +## Next Steps -## Related +After implementing a story: -- [Create Story](/docs/how-to/workflows/create-story.md) - Prepare the story first -- [Run Code Review](/docs/how-to/workflows/run-code-review.md) - After implementation -- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Sprint organization +1. **Code Review** — Run code-review with the DEV agent +2. **Create Next Story** — Run create-story with the SM agent diff --git a/docs/how-to/workflows/quick-spec.md b/docs/how-to/workflows/quick-spec.md index d2a0915e..936dbdc3 100644 --- a/docs/how-to/workflows/quick-spec.md +++ b/docs/how-to/workflows/quick-spec.md @@ -3,10 +3,7 @@ title: "How to Use Quick Spec" description: How to create a technical specification using Quick Spec workflow --- - -Use the `tech-spec` workflow for Quick Flow projects to go directly from idea to implementation-ready specification. - ---- +Use the `quick-spec` workflow for Quick Flow projects to go directly from idea to implementation-ready specification. ## When to Use This @@ -16,15 +13,11 @@ Use the `tech-spec` workflow for Quick Flow projects to go directly from idea to - Adding to existing brownfield codebase - Quick Flow track projects ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - PM agent or Quick Flow Solo Dev agent available - Project directory (can be empty for greenfield) - ---- +::: ## Steps @@ -63,12 +56,9 @@ For brownfield projects, the agent will: The agent generates a comprehensive tech-spec with ready-to-implement stories. ---- - ## What You Get -### tech-spec.md - +**tech-spec.md:** - Problem statement and solution - Detected framework versions and dependencies - Brownfield code patterns (if applicable) @@ -76,18 +66,11 @@ The agent generates a comprehensive tech-spec with ready-to-implement stories. - Specific file paths to modify - Complete implementation guidance -### Story Files +**Story Files:** +- Single changes: `story-[slug].md` +- Small features: `epics.md` + `story-[epic-slug]-1.md`, etc. -For single changes: -- `story-[slug].md` - Single user story ready for development - -For small features: -- `epics.md` - Epic organization -- `story-[epic-slug]-1.md`, `story-[epic-slug]-2.md`, etc. - ---- - -## Example: Bug Fix (Single Change) +## Example: Bug Fix **You:** "I want to fix the login validation bug that allows empty passwords" @@ -99,11 +82,7 @@ For small features: 5. Generates tech-spec.md with specific file paths 6. Creates story-login-fix.md -**Total time:** 15-30 minutes (mostly implementation) - ---- - -## Example: Small Feature (Multi-Story) +## Example: Small Feature **You:** "I want to add OAuth social login (Google, GitHub)" @@ -118,10 +97,6 @@ For small features: - story-oauth-1.md (Backend OAuth setup) - story-oauth-2.md (Frontend login buttons) -**Total time:** 1-3 hours (mostly implementation) - ---- - ## Implementing After Tech Spec ```bash @@ -133,27 +108,15 @@ For small features: # Then: Load DEV agent and run dev-story for each story ``` ---- - ## Tips -### Be Specific in Discovery +- **Be specific in discovery** — "Fix email validation in UserService to allow plus-addressing" beats "Fix validation bug" +- **Trust convention detection** — If it detects your patterns correctly, say yes! It's faster than establishing new conventions +- **Keep single changes atomic** — If your "single change" needs 3+ files, it might be a multi-story feature. Let the workflow guide you -- ✅ "Fix email validation in UserService to allow plus-addressing" -- ❌ "Fix validation bug" +## Next Steps -### Trust Convention Detection +After tech spec: -If it detects your patterns correctly, say yes! It's faster than establishing new conventions. - -### Keep Single Changes Atomic - -If your "single change" needs 3+ files, it might be a multi-story feature. Let the workflow guide you. - ---- - -## Related - -- [Quick Flow](/docs/explanation/features/quick-flow.md) - Understanding Quick Spec Flow -- [Implement Story](/docs/how-to/workflows/implement-story.md) - After tech spec -- [Create PRD](/docs/how-to/workflows/create-prd.md) - For larger projects needing full BMad Method +1. **Implement Story** — Run dev-story with the DEV agent +2. **Sprint Planning** — Optional for multi-story features diff --git a/docs/how-to/workflows/run-brainstorming-session.md b/docs/how-to/workflows/run-brainstorming-session.md index 298d9e8c..b05b821c 100644 --- a/docs/how-to/workflows/run-brainstorming-session.md +++ b/docs/how-to/workflows/run-brainstorming-session.md @@ -3,11 +3,8 @@ title: "How to Run a Brainstorming Session" description: How to run a brainstorming session using the BMad Method --- - Use the `brainstorm-project` workflow to explore solution approaches through parallel ideation tracks. ---- - ## When to Use This - Very vague or seed kernel of an idea that needs exploration @@ -15,14 +12,10 @@ Use the `brainstorm-project` workflow to explore solution approaches through par - See your idea from different angles and viewpoints - No idea what you want to build, but want to find some inspiration ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Analyst agent available - ---- +::: ## Steps @@ -48,17 +41,15 @@ Tell the agent about your project idea, even if it's vague: The workflow generates solution approaches through parallel ideation tracks: -- **Architecture track** - Technical approaches and patterns -- **UX track** - User experience possibilities -- **Integration track** - How it connects with other systems -- **Value track** - Business value and differentiation +- **Architecture track** — Technical approaches and patterns +- **UX track** — User experience possibilities +- **Integration track** — How it connects with other systems +- **Value track** — Business value and differentiation ### 5. Evaluate Options Review the generated options with rationale for each approach. ---- - ## What You Get - Multiple solution approaches with trade-offs @@ -66,29 +57,17 @@ Review the generated options with rationale for each approach. - UX and integration considerations - Clear rationale for each direction ---- +## Tips + +- **Don't worry about having a fully formed idea** — Vague is fine +- **Let the agent guide exploration** — Follow the prompts +- **Consider multiple tracks** — Don't settle on the first option +- **Use outputs as input for product-brief** — Build on brainstorming results ## Next Steps After brainstorming: -1. **Research** - Validate ideas with market/technical research -2. **Product Brief** - Capture strategic vision -3. **PRD** - Move to formal planning - ---- - -## Tips - -- Don't worry about having a fully formed idea -- Let the agent guide the exploration -- Consider multiple tracks before deciding -- Use outputs as input for product-brief workflow - ---- - -## Related - -- [Conduct Research](/docs/how-to/workflows/conduct-research.md) - Validate your ideas -- [Create Product Brief](/docs/how-to/workflows/create-product-brief.md) - Capture strategic vision -- [Create PRD](/docs/how-to/workflows/create-prd.md) - Move to formal planning +1. **Research** — Validate ideas with market/technical research +2. **Product Brief** — Capture strategic vision +3. **PRD** — Move to formal planning diff --git a/docs/how-to/workflows/run-code-review.md b/docs/how-to/workflows/run-code-review.md index bbd3f211..ea6e2c85 100644 --- a/docs/how-to/workflows/run-code-review.md +++ b/docs/how-to/workflows/run-code-review.md @@ -3,27 +3,20 @@ title: "How to Run Code Review" description: How to run code review for quality assurance --- - Use the `code-review` workflow to perform a thorough quality review of implemented code. ---- - ## When to Use This - After dev-story completes implementation - Before marking a story as DONE -- Every story goes through code review - no exceptions - ---- - -## Prerequisites +- Every story goes through code review — no exceptions +:::note[Prerequisites] - BMad Method installed - DEV agent available - Story implementation complete - Tests written and passing - ---- +::: ## Steps @@ -55,56 +48,21 @@ If issues are found: 2. Re-run tests 3. Run code-review again ---- - ## What Gets Reviewed -The code review checks: - -### Code Quality -- Clean, readable code -- Appropriate abstractions -- No code smells -- Proper error handling - -### Architecture Alignment -- Follows ADRs and architecture decisions -- Consistent with existing patterns -- Proper separation of concerns - -### Testing -- Adequate test coverage -- Tests are meaningful (not just for coverage) -- Edge cases handled -- Tests follow project patterns - -### Security -- No hardcoded secrets -- Input validation -- Authentication/authorization proper -- No common vulnerabilities - -### Performance -- No obvious performance issues -- Appropriate data structures -- Efficient queries - ---- +| Category | Checks | +|----------|--------| +| **Code Quality** | Clean code, appropriate abstractions, no code smells, proper error handling | +| **Architecture Alignment** | Follows ADRs, consistent with patterns, proper separation of concerns | +| **Testing** | Adequate coverage, meaningful tests, edge cases, follows project patterns | +| **Security** | No hardcoded secrets, input validation, proper auth, no common vulnerabilities | +| **Performance** | No obvious issues, appropriate data structures, efficient queries | ## Review Outcomes -### ✅ Approved +**Approved** — Code meets quality standards, tests pass. Mark story as DONE in sprint-status.yaml. -- Code meets quality standards -- Tests pass -- **Action:** Mark story as DONE in sprint-status.yaml - -### 🔧 Changes Requested - -- Issues identified that need fixing -- **Action:** Fix issues in dev-story, then re-run code-review - ---- +**Changes Requested** — Issues identified that need fixing. Fix issues in dev-story, then re-run code-review. ## Quality Gates @@ -115,27 +73,17 @@ Every story goes through code-review before being marked done. This ensures: - Test coverage - Security review ---- - ## Tips -- Don't skip code review for "simple" changes -- Address all findings, not just critical ones -- Use findings as learning opportunities -- Re-run review after fixes +- **Don't skip for "simple" changes** — Simple changes can have subtle bugs +- **Address all findings** — Not just critical ones +- **Use findings as learning opportunities** — Improve over time +- **Re-run review after fixes** — Verify issues are resolved ---- +## Next Steps -## After Code Review +After code review: -1. **If approved:** Update sprint-status.yaml to mark story DONE -2. **If changes requested:** Fix issues and re-run review -3. **Move to next story:** Run create-story for the next item - ---- - -## Related - -- [Implement Story](/docs/how-to/workflows/implement-story.md) - Before code review -- [Create Story](/docs/how-to/workflows/create-story.md) - Move to next story -- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Sprint organization +1. **If approved** — Update sprint-status.yaml to mark story DONE +2. **If changes requested** — Fix issues and re-run review +3. **Move to next story** — Run create-story for the next item diff --git a/docs/how-to/workflows/run-implementation-readiness.md b/docs/how-to/workflows/run-implementation-readiness.md index 27be2d54..8f938f27 100644 --- a/docs/how-to/workflows/run-implementation-readiness.md +++ b/docs/how-to/workflows/run-implementation-readiness.md @@ -3,11 +3,8 @@ title: "How to Run Implementation Readiness" description: How to validate planning and solutioning before implementation --- - Use the `implementation-readiness` workflow to validate that planning and solutioning are complete and aligned before Phase 4 implementation. ---- - ## When to Use This - **Always** before Phase 4 for BMad Method and Enterprise projects @@ -15,22 +12,16 @@ Use the `implementation-readiness` workflow to validate that planning and soluti - Before sprint-planning workflow - When stakeholders request readiness check ---- - ## When to Skip This - Quick Flow (no solutioning phase) - BMad Method Simple (no gate check required) ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Architect agent available - PRD, Architecture, and Epics completed - ---- +::: ## Steps @@ -56,66 +47,42 @@ The workflow systematically checks: The agent produces a gate decision with rationale. ---- - ## Gate Decision Outcomes -### ✅ PASS - -- All critical criteria met -- Minor gaps acceptable with documented plan -- **Action:** Proceed to Phase 4 - -### ⚠️ CONCERNS - -- Some criteria not met but not blockers -- Gaps identified with clear resolution path -- **Action:** Proceed with caution, address gaps in parallel - -### ❌ FAIL - -- Critical gaps or contradictions -- Architecture missing key decisions -- Epics conflict with PRD/architecture -- **Action:** BLOCK Phase 4, resolve issues first - ---- +| Decision | Meaning | Action | +|----------|---------|--------| +| **PASS** | All critical criteria met, minor gaps acceptable | Proceed to Phase 4 | +| **CONCERNS** | Some criteria not met but not blockers | Proceed with caution, address gaps in parallel | +| **FAIL** | Critical gaps or contradictions | BLOCK Phase 4, resolve issues first | ## What Gets Checked -### PRD/GDD Completeness +**PRD/GDD Completeness:** - Problem statement clear and evidence-based - Success metrics defined - User personas identified -- Functional requirements (FRs) complete -- Non-functional requirements (NFRs) specified +- FRs and NFRs complete - Risks and assumptions documented -### Architecture Completeness -- System architecture defined -- Data architecture specified -- API architecture decided +**Architecture Completeness:** +- System, data, API architecture defined - Key ADRs documented - Security architecture addressed - FR/NFR-specific guidance provided - Standards and conventions defined -### Epic/Story Completeness +**Epic/Story Completeness:** - All PRD features mapped to stories - Stories have acceptance criteria - Stories prioritized (P0/P1/P2/P3) - Dependencies identified -- Story sequencing logical -### Alignment Checks +**Alignment Checks:** - Architecture addresses all PRD FRs/NFRs - Epics align with architecture decisions - No contradictions between epics -- NFRs have technical approach - Integration points clear ---- - ## What You Get An `implementation-readiness.md` document containing: @@ -128,11 +95,9 @@ An `implementation-readiness.md` document containing: 6. **Gate Decision** with rationale 7. **Next Steps** ---- - ## Example -E-commerce platform → CONCERNS ⚠️ +E-commerce platform → CONCERNS **Gaps identified:** - Missing security architecture section @@ -144,19 +109,17 @@ E-commerce platform → CONCERNS ⚠️ **Action:** Proceed with caution, address before payment epic. ---- - ## Tips -- Run this before every Phase 4 start -- Take FAIL decisions seriously - fix issues first -- Use CONCERNS as a checklist for parallel work -- Document why you proceed despite concerns +- **Run before every Phase 4 start** — It's a valuable checkpoint +- **Take FAIL decisions seriously** — Fix issues first +- **Use CONCERNS as a checklist** — Track parallel work +- **Document why you proceed despite concerns** — Transparency matters ---- +## Next Steps -## Related +After implementation readiness: -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Architecture workflow -- [Create Epics and Stories](/docs/how-to/workflows/create-epics-and-stories.md) - Work breakdown -- [Run Sprint Planning](/docs/how-to/workflows/run-sprint-planning.md) - Start implementation +1. **If PASS** — Run sprint-planning to start Phase 4 +2. **If CONCERNS** — Proceed with documented gaps to address +3. **If FAIL** — Return to relevant workflow to fix issues diff --git a/docs/how-to/workflows/run-sprint-planning.md b/docs/how-to/workflows/run-sprint-planning.md index e92f42a4..ebdc3066 100644 --- a/docs/how-to/workflows/run-sprint-planning.md +++ b/docs/how-to/workflows/run-sprint-planning.md @@ -3,27 +3,20 @@ title: "How to Run Sprint Planning" description: How to initialize sprint tracking for implementation --- - Use the `sprint-planning` workflow to initialize the sprint tracking file and organize work for implementation. ---- - ## When to Use This - Once at the start of Phase 4 (Implementation) - After implementation-readiness gate passes - When starting a new sprint cycle ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - SM (Scrum Master) agent available - Epic files created from `create-epics-and-stories` - Implementation-readiness passed (for BMad Method/Enterprise) - ---- +::: ## Steps @@ -45,8 +38,6 @@ Point the agent to your epic files created during Phase 3. The agent organizes stories into the sprint tracking file. ---- - ## What You Get A `sprint-status.yaml` file containing: @@ -56,12 +47,8 @@ A `sprint-status.yaml` file containing: - Dependencies between stories - Priority ordering ---- - ## Story Lifecycle States -Stories move through these states in the sprint status file: - | State | Description | |-------|-------------| | **TODO** | Story identified but not started | @@ -69,43 +56,39 @@ Stories move through these states in the sprint status file: | **READY FOR REVIEW** | Implementation complete, awaiting code review | | **DONE** | Accepted and complete | ---- - ## Typical Sprint Flow -### Sprint 0 (Planning Phase) +**Sprint 0 (Planning Phase):** - Complete Phases 1-3 - PRD/GDD + Architecture complete - Epics+Stories created via create-epics-and-stories -### Sprint 1+ (Implementation Phase) +**Sprint 1+ (Implementation Phase):** -**Start of Phase 4:** +Start of Phase 4: 1. SM runs `sprint-planning` (once) -**Per Story (repeat until epic complete):** +Per Story (repeat until epic complete): 1. SM runs `create-story` 2. DEV runs `dev-story` 3. DEV runs `code-review` 4. Update sprint-status.yaml -**After Epic Complete:** +After Epic Complete: - SM runs `retrospective` - Move to next epic ---- - ## Tips -- Run sprint-planning only once at Phase 4 start -- Use `sprint-status` during Phase 4 to check current state -- Keep the sprint-status.yaml file as single source of truth -- Update story status after each stage +- **Run sprint-planning only once** — At Phase 4 start +- **Use sprint-status during Phase 4** — Check current state anytime +- **Keep sprint-status.yaml as single source of truth** — All status updates go here +- **Update story status after each stage** — Keep it current ---- +## Next Steps -## Related +After sprint planning: -- [Create Story](/docs/how-to/workflows/create-story.md) - Prepare stories for implementation -- [Implement Story](/docs/how-to/workflows/implement-story.md) - Dev workflow -- [Run Code Review](/docs/how-to/workflows/run-code-review.md) - Quality assurance +1. **Create Story** — Prepare the first story for implementation +2. **Implement Story** — Run dev-story with the DEV agent +3. **Code Review** — Quality assurance after implementation diff --git a/docs/how-to/workflows/run-test-design.md b/docs/how-to/workflows/run-test-design.md index f2b6361f..c6e41caa 100644 --- a/docs/how-to/workflows/run-test-design.md +++ b/docs/how-to/workflows/run-test-design.md @@ -3,11 +3,8 @@ title: "How to Run Test Design" description: How to create comprehensive test plans using TEA's test-design workflow --- - Use TEA's `*test-design` workflow to create comprehensive test plans with risk assessment and coverage strategies. ---- - ## When to Use This **System-level (Phase 3):** @@ -20,16 +17,12 @@ Use TEA's `*test-design` workflow to create comprehensive test plans with risk a - Before implementing stories in the epic - To identify epic-specific testing needs ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - TEA agent available - For system-level: Architecture document complete - For epic-level: Epic defined with stories - ---- +::: ## Steps @@ -47,8 +40,8 @@ Start a fresh chat and load the TEA (Test Architect) agent. TEA will ask if you want: -- **System-level** - For architecture testability review (Phase 3) -- **Epic-level** - For epic-specific test planning (Phase 4) +- **System-level** — For architecture testability review (Phase 3) +- **Epic-level** — For epic-specific test planning (Phase 4) ### 4. Provide Context @@ -64,20 +57,16 @@ For epic-level: TEA generates a comprehensive test design document. ---- - ## What You Get -### System-Level Output (`test-design-system.md`) - +**System-Level Output (`test-design-system.md`):** - Testability review of architecture - ADR → test mapping - Architecturally Significant Requirements (ASRs) - Environment needs - Test infrastructure recommendations -### Epic-Level Output (`test-design-epic-N.md`) - +**Epic-Level Output (`test-design-epic-N.md`):** - Risk assessment for the epic - Test priorities - Coverage plan @@ -85,44 +74,25 @@ TEA generates a comprehensive test design document. - Integration risks - Mitigation strategies ---- - ## Test Design for Different Tracks -### Greenfield - BMad Method - -| Stage | Test Design Focus | -|-------|-------------------| -| Phase 3 | System-level testability review | -| Phase 4 | Per-epic risk assessment and test plan | - -### Brownfield - BMad Method/Enterprise - -| Stage | Test Design Focus | -|-------|-------------------| -| Phase 3 | System-level + existing test baseline | -| Phase 4 | Regression hotspots, integration risks | - -### Enterprise - -| Stage | Test Design Focus | -|-------|-------------------| -| Phase 3 | Compliance-aware testability | -| Phase 4 | Security/performance/compliance focus | - ---- +| Track | Phase 3 Focus | Phase 4 Focus | +|-------|---------------|---------------| +| **Greenfield** | System-level testability review | Per-epic risk assessment and test plan | +| **Brownfield** | System-level + existing test baseline | Regression hotspots, integration risks | +| **Enterprise** | Compliance-aware testability | Security/performance/compliance focus | ## Tips -- Run system-level test-design right after architecture -- Run epic-level test-design at the start of each epic -- Update test design if ADRs change -- Use the output to guide `*atdd` and `*automate` workflows +- **Run system-level right after architecture** — Early testability review +- **Run epic-level at the start of each epic** — Targeted test planning +- **Update if ADRs change** — Keep test design aligned +- **Use output to guide other workflows** — Feeds into `*atdd` and `*automate` ---- +## Next Steps -## Related +After test design: -- [TEA Overview](/docs/explanation/features/tea-overview.md) - Understanding the Test Architect -- [Setup Test Framework](/docs/how-to/workflows/setup-test-framework.md) - Setting up testing infrastructure -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Architecture workflow +1. **Setup Test Framework** — If not already configured +2. **Implementation Readiness** — System-level feeds into gate check +3. **Story Implementation** — Epic-level guides testing during dev diff --git a/docs/how-to/workflows/setup-party-mode.md b/docs/how-to/workflows/setup-party-mode.md index 3e82e440..fcfdc259 100644 --- a/docs/how-to/workflows/setup-party-mode.md +++ b/docs/how-to/workflows/setup-party-mode.md @@ -3,11 +3,8 @@ title: "How to Set Up Party Mode" description: How to set up and use Party Mode for multi-agent collaboration --- - Use Party Mode to orchestrate dynamic multi-agent conversations with your entire BMad team. ---- - ## When to Use This - Exploring complex topics that benefit from diverse expert perspectives @@ -15,14 +12,10 @@ Use Party Mode to orchestrate dynamic multi-agent conversations with your entire - Getting comprehensive views across multiple domains - Strategic decisions with trade-offs ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed with multiple agents - Any agent loaded that supports party mode - ---- +::: ## Steps @@ -62,56 +55,36 @@ The facilitator will: Type "exit" or "done" to conclude the session. Participating agents will say personalized farewells. ---- - ## What Happens -1. **Agent Roster** - Party Mode loads your complete agent roster -2. **Introduction** - Available team members are introduced -3. **Topic Analysis** - The facilitator analyzes your topic -4. **Agent Selection** - 2-3 most relevant agents are selected -5. **Discussion** - Agents respond, reference each other, engage in cross-talk -6. **Exit** - Session concludes with farewells - ---- +1. **Agent Roster** — Party Mode loads your complete agent roster +2. **Introduction** — Available team members are introduced +3. **Topic Analysis** — The facilitator analyzes your topic +4. **Agent Selection** — 2-3 most relevant agents are selected +5. **Discussion** — Agents respond, reference each other, engage in cross-talk +6. **Exit** — Session concludes with farewells ## Example Party Compositions -### Product Strategy -- PM + Innovation Strategist (CIS) + Analyst - -### Technical Design -- Architect + Creative Problem Solver (CIS) + Game Architect - -### User Experience -- UX Designer + Design Thinking Coach (CIS) + Storyteller (CIS) - -### Quality Assessment -- TEA + DEV + Architect - ---- +| Topic | Typical Agents | +|-------|---------------| +| **Product Strategy** | PM + Innovation Strategist (CIS) + Analyst | +| **Technical Design** | Architect + Creative Problem Solver (CIS) + Game Architect | +| **User Experience** | UX Designer + Design Thinking Coach (CIS) + Storyteller (CIS) | +| **Quality Assessment** | TEA + DEV + Architect | ## Key Features -- **Intelligent agent selection** - Selects based on expertise needed -- **Authentic personalities** - Each agent maintains their unique voice -- **Natural cross-talk** - Agents reference and build on each other -- **Optional TTS** - Voice configurations for each agent -- **Graceful exit** - Personalized farewells - ---- +- **Intelligent agent selection** — Selects based on expertise needed +- **Authentic personalities** — Each agent maintains their unique voice +- **Natural cross-talk** — Agents reference and build on each other +- **Optional TTS** — Voice configurations for each agent +- **Graceful exit** — Personalized farewells ## Tips -- Be specific about your topic for better agent selection -- Let the conversation flow naturally -- Ask follow-up questions to go deeper -- Take notes on key insights -- Use for strategic decisions, not routine tasks - ---- - -## Related - -- [Party Mode](/docs/explanation/features/party-mode.md) - Understanding Party Mode -- [Agent Roles](/docs/explanation/core-concepts/agent-roles.md) - Available agents +- **Be specific about your topic** — Better agent selection +- **Let the conversation flow** — Don't over-direct +- **Ask follow-up questions** — Go deeper on interesting points +- **Take notes on key insights** — Capture valuable perspectives +- **Use for strategic decisions** — Not routine tasks diff --git a/docs/how-to/workflows/setup-test-framework.md b/docs/how-to/workflows/setup-test-framework.md index 508d6144..a5eb9422 100644 --- a/docs/how-to/workflows/setup-test-framework.md +++ b/docs/how-to/workflows/setup-test-framework.md @@ -3,11 +3,8 @@ title: "How to Set Up a Test Framework" description: How to set up a production-ready test framework using TEA --- - Use TEA's `*framework` workflow to scaffold a production-ready test framework for your project. ---- - ## When to Use This - No existing test framework in your project @@ -15,15 +12,11 @@ Use TEA's `*framework` workflow to scaffold a production-ready test framework fo - Starting a new project that needs testing infrastructure - Phase 3 (Solutioning) after architecture is complete ---- - -## Prerequisites - +:::note[Prerequisites] - BMad Method installed - Architecture completed (or at least tech stack decided) - TEA agent available - ---- +::: ## Steps @@ -50,13 +43,11 @@ TEA will ask about: TEA generates: -- **Test scaffold** - Directory structure and config files -- **Sample specs** - Example tests following best practices -- **`.env.example`** - Environment variable template -- **`.nvmrc`** - Node version specification -- **README updates** - Testing documentation - ---- +- **Test scaffold** — Directory structure and config files +- **Sample specs** — Example tests following best practices +- **`.env.example`** — Environment variable template +- **`.nvmrc`** — Node version specification +- **README updates** — Testing documentation ## What You Get @@ -71,8 +62,6 @@ tests/ └── README.md ``` ---- - ## Optional: Playwright Utils Integration TEA can integrate with `@seontechnologies/playwright-utils` for advanced fixtures: @@ -85,29 +74,25 @@ Enable during BMad installation or set `tea_use_playwright_utils: true` in confi **Utilities available:** api-request, network-recorder, auth-session, intercept-network-call, recurse, log, file-utils, burn-in, network-error-monitor ---- - ## Optional: MCP Enhancements TEA can use Playwright MCP servers for enhanced capabilities: -- `playwright` - Browser automation -- `playwright-test` - Test runner with failure analysis +- `playwright` — Browser automation +- `playwright-test` — Test runner with failure analysis Configure in your IDE's MCP settings. ---- - ## Tips -- Run `*framework` only once per repository -- Run after architecture is complete so framework aligns with tech stack -- Follow up with `*ci` to set up CI/CD pipeline +- **Run only once per repository** — Framework setup is a one-time operation +- **Run after architecture is complete** — Framework aligns with tech stack +- **Follow up with CI setup** — Run `*ci` to configure CI/CD pipeline ---- +## Next Steps -## Related +After test framework setup: -- [TEA Overview](/docs/explanation/features/tea-overview.md) - Understanding the Test Architect -- [Run Test Design](/docs/how-to/workflows/run-test-design.md) - Creating test plans -- [Create Architecture](/docs/how-to/workflows/create-architecture.md) - Architecture workflow +1. **Test Design** — Create test plans for system or epics +2. **CI Configuration** — Set up automated test runs +3. **Story Implementation** — Tests are ready for development diff --git a/docs/reference/agents/index.md b/docs/reference/agents/index.md index 0595c74a..409f161c 100644 --- a/docs/reference/agents/index.md +++ b/docs/reference/agents/index.md @@ -3,139 +3,107 @@ title: "Agents Reference" description: Complete reference for BMad Method agents and their commands --- - Quick reference of all BMad Method agents and their available commands. ---- +:::tip[Universal Commands] +All agents support: `*menu` (redisplay options), `*dismiss` (dismiss agent), and `*party-mode` (multi-agent collaboration). +::: ## Analyst (Mary) Business analysis and research. **Commands:** -- `*workflow-status` - Get workflow status or initialize tracking -- `*brainstorm-project` - Guided brainstorming session -- `*research` - Market, domain, competitive, or technical research -- `*product-brief` - Create a product brief (input for PRD) -- `*document-project` - Document existing brownfield projects - ---- +- `*workflow-status` — Get workflow status or initialize tracking +- `*brainstorm-project` — Guided brainstorming session +- `*research` — Market, domain, competitive, or technical research +- `*product-brief` — Create a product brief (input for PRD) +- `*document-project` — Document existing brownfield projects ## PM (John) Product requirements and planning. **Commands:** -- `*workflow-status` - Get workflow status or initialize tracking -- `*create-prd` - Create Product Requirements Document -- `*create-epics-and-stories` - Break PRD into epics and user stories (after Architecture) -- `*implementation-readiness` - Validate PRD, UX, Architecture, Epics alignment -- `*correct-course` - Course correction during implementation - ---- +- `*workflow-status` — Get workflow status or initialize tracking +- `*create-prd` — Create Product Requirements Document +- `*create-epics-and-stories` — Break PRD into epics and user stories (after Architecture) +- `*implementation-readiness` — Validate PRD, UX, Architecture, Epics alignment +- `*correct-course` — Course correction during implementation ## Architect (Winston) System architecture and technical design. **Commands:** -- `*workflow-status` - Get workflow status or initialize tracking -- `*create-architecture` - Create architecture document to guide development -- `*implementation-readiness` - Validate PRD, UX, Architecture, Epics alignment -- `*create-excalidraw-diagram` - System architecture or technical diagrams -- `*create-excalidraw-dataflow` - Data flow diagrams - ---- +- `*workflow-status` — Get workflow status or initialize tracking +- `*create-architecture` — Create architecture document to guide development +- `*implementation-readiness` — Validate PRD, UX, Architecture, Epics alignment +- `*create-excalidraw-diagram` — System architecture or technical diagrams +- `*create-excalidraw-dataflow` — Data flow diagrams ## SM (Bob) Sprint planning and story preparation. **Commands:** -- `*sprint-planning` - Generate sprint-status.yaml from epic files -- `*create-story` - Create story from epic (prep for development) -- `*validate-create-story` - Validate story quality -- `*epic-retrospective` - Team retrospective after epic completion -- `*correct-course` - Course correction during implementation - ---- +- `*sprint-planning` — Generate sprint-status.yaml from epic files +- `*create-story` — Create story from epic (prep for development) +- `*validate-create-story` — Validate story quality +- `*epic-retrospective` — Team retrospective after epic completion +- `*correct-course` — Course correction during implementation ## DEV (Amelia) Story implementation and code review. **Commands:** -- `*dev-story` - Execute story workflow (implementation with tests) -- `*code-review` - Thorough code review - ---- +- `*dev-story` — Execute story workflow (implementation with tests) +- `*code-review` — Thorough code review ## Quick Flow Solo Dev (Barry) Fast solo development without handoffs. **Commands:** -- `*quick-spec` - Architect technical spec with implementation-ready stories -- `*quick-dev` - Implement tech spec end-to-end solo -- `*code-review` - Review and improve code - ---- +- `*quick-spec` — Architect technical spec with implementation-ready stories +- `*quick-dev` — Implement tech spec end-to-end solo +- `*code-review` — Review and improve code ## TEA (Murat) Test architecture and quality strategy. **Commands:** -- `*framework` - Initialize production-ready test framework -- `*atdd` - Generate E2E tests first (before implementation) -- `*automate` - Comprehensive test automation -- `*test-design` - Create comprehensive test scenarios -- `*trace` - Map requirements to tests, quality gate decision -- `*nfr-assess` - Validate non-functional requirements -- `*ci` - Scaffold CI/CD quality pipeline -- `*test-review` - Review test quality - ---- +- `*framework` — Initialize production-ready test framework +- `*atdd` — Generate E2E tests first (before implementation) +- `*automate` — Comprehensive test automation +- `*test-design` — Create comprehensive test scenarios +- `*trace` — Map requirements to tests, quality gate decision +- `*nfr-assess` — Validate non-functional requirements +- `*ci` — Scaffold CI/CD quality pipeline +- `*test-review` — Review test quality ## UX Designer (Sally) User experience and UI design. **Commands:** -- `*create-ux-design` - Generate UX design and UI plan from PRD -- `*validate-design` - Validate UX specification and design artifacts -- `*create-excalidraw-wireframe` - Create website or app wireframe - ---- +- `*create-ux-design` — Generate UX design and UI plan from PRD +- `*validate-design` — Validate UX specification and design artifacts +- `*create-excalidraw-wireframe` — Create website or app wireframe ## Technical Writer (Paige) Technical documentation and diagrams. **Commands:** -- `*document-project` - Comprehensive project documentation -- `*generate-mermaid` - Generate Mermaid diagrams -- `*create-excalidraw-flowchart` - Process and logic flow visualizations -- `*create-excalidraw-diagram` - System architecture or technical diagrams -- `*create-excalidraw-dataflow` - Data flow visualizations -- `*validate-doc` - Review documentation against standards -- `*improve-readme` - Review and improve README files -- `*explain-concept` - Create clear technical explanations -- `*standards-guide` - Show BMad documentation standards - ---- - -## Universal Commands - -Available to all agents: - -- `*menu` - Redisplay menu options -- `*dismiss` - Dismiss agent -- `*party-mode` - Multi-agent collaboration (most agents) - ---- - -## Related - -- [Agent Roles](/docs/explanation/core-concepts/agent-roles.md) - Understanding agent responsibilities -- [What Are Agents](/docs/explanation/core-concepts/what-are-agents.md) - Foundational concepts +- `*document-project` — Comprehensive project documentation +- `*generate-mermaid` — Generate Mermaid diagrams +- `*create-excalidraw-flowchart` — Process and logic flow visualizations +- `*create-excalidraw-diagram` — System architecture or technical diagrams +- `*create-excalidraw-dataflow` — Data flow visualizations +- `*validate-doc` — Review documentation against standards +- `*improve-readme` — Review and improve README files +- `*explain-concept` — Create clear technical explanations +- `*standards-guide` — Show BMad documentation standards diff --git a/docs/reference/configuration/core-tasks.md b/docs/reference/configuration/core-tasks.md index 3815b3f5..fa90e484 100644 --- a/docs/reference/configuration/core-tasks.md +++ b/docs/reference/configuration/core-tasks.md @@ -2,66 +2,66 @@ title: "Core Tasks" --- +Reusable task definitions that can be invoked by any BMad module, workflow, or agent. -Core Tasks are reusable task definitions that can be invoked by any BMad module, workflow, or agent. These tasks provide standardized functionality for common operations. - -## Table of Contents +## Contents - [Index Docs](#index-docs) — Generate directory index files -- [Adversarial Review](#adversarial-review-general) — Critical content review +- [Adversarial Review](#adversarial-review) — Critical content review - [Shard Document](#shard-document) — Split large documents into sections ---- - ## Index Docs -**Generates or updates an index.md file documenting all documents in a specified directory.** +**Generates or updates an index.md file documenting all files in a specified directory.** -This task scans a target directory, reads file contents to understand their purpose, and creates a well-organized index with accurate descriptions. Files are grouped by type, purpose, or subdirectory, and descriptions are generated from actual content rather than guessing from filenames. - -**Use it when:** You need to create navigable documentation for a folder of markdown files, or you want to maintain an updated index as content evolves. +**Use it when:** +- You need navigable documentation for a folder of markdown files +- You want to maintain an updated index as content evolves **How it works:** 1. Scan the target directory for files and subdirectories 2. Group content by type, purpose, or location -3. Read each file to generate brief (3-10 word) descriptions based on actual content -4. Create or update index.md with organized listings using relative paths +3. Read each file to generate brief (3-10 word) descriptions +4. Create or update index.md with organized listings -**Output format:** A markdown index with sections for Files and Subdirectories, each entry containing a relative link and description. +**Output:** Markdown index with sections for Files and Subdirectories, each entry containing a relative link and description. ---- - -## Adversarial Review (General) +## Adversarial Review **Performs a cynical, skeptical review of any content to identify issues and improvement opportunities.** -This task applies adversarial thinking to content review—approaching the material with the assumption that problems exist. It's designed to find what's missing, not just what's wrong, and produces at least ten specific findings. The reviewer adopts a professional but skeptical tone, looking for gaps, inconsistencies, oversights, and areas that need clarification. - -**Use it when:** You need a critical eye on code diffs, specifications, user stories, documentation, or any artifact before finalizing. It's particularly valuable before merging code, releasing documentation, or considering a specification complete. +**Use it when:** +- Reviewing code diffs before merging +- Finalizing specifications or user stories +- Releasing documentation +- Any artifact needs a critical eye before completion **How it works:** -1. Load the content to review (diff, branch, uncommitted changes, document, etc.) -2. Perform adversarial analysis with extreme skepticism—assume problems exist +1. Load the content to review (diff, branch, document, etc.) +2. Perform adversarial analysis — assume problems exist 3. Find at least ten issues to fix or improve 4. Output findings as a markdown list -**Note:** This task is designed to run in a separate subagent/process with read access to the project but no prior context, ensuring an unbiased review. - ---- +:::note[Unbiased Review] +This task runs in a separate subagent with read access but no prior context, ensuring an unbiased review. +::: ## Shard Document -**Splits large markdown documents into smaller, organized files based on level 2 (##) sections.** +**Splits large markdown documents into smaller files based on level 2 (`##`) sections.** -Uses the `@kayvan/markdown-tree-parser` tool to automatically break down large documents into a folder structure. Each level 2 heading becomes a separate file, and an index.md is generated to tie everything together. This makes large documents more maintainable and allows for easier navigation and updates to individual sections. - -**Use it when:** A markdown file has grown too large to effectively work with, or you want to break a monolithic document into manageable sections that can be edited independently. +**Use it when:** +- A markdown file has grown too large to work with effectively +- You want to break a monolithic document into manageable sections +- Individual sections need to be edited independently **How it works:** -1. Confirm source document path and verify it's a markdown file -2. Determine destination folder (defaults to same location as source, folder named after document) -3. Execute the sharding command using npx @kayvan/markdown-tree-parser +1. Confirm source document path (must be markdown) +2. Determine destination folder (defaults to folder named after document) +3. Execute sharding via `npx @kayvan/markdown-tree-parser` 4. Verify output files and index.md were created -5. Handle the original document—delete, move to archive, or keep with warning +5. Handle original document — delete, move to archive, or keep -**Handling the original:** After sharding, the task prompts you to delete, archive, or keep the original document. Deleting or archiving is recommended to avoid confusion and ensure updates happen in the sharded files only. +:::caution[Original File] +After sharding, delete or archive the original to avoid confusion. Updates should happen in the sharded files only. +::: diff --git a/docs/reference/configuration/global-config.md b/docs/reference/configuration/global-config.md index 31e3ddeb..5a2f243d 100644 --- a/docs/reference/configuration/global-config.md +++ b/docs/reference/configuration/global-config.md @@ -1,14 +1,28 @@ --- -title: "Core Module Global Inheritable Config" +title: "Global Inheritable Config" --- +Configuration values defined in the Core Module that all other modules inherit by default. -The Core Modules module.yaml file defines configuration values that are useful and unique for all other modules to utilize, and by default all other modules installed will clone the values defined in the core module yaml.config into their own. It is possible for other modules to override these values, but the general intent it to accept the core module values and define their own values as needed, or extend the core values. +## Core Config Values -Currently, the core module.yaml config will define (asking the user upon installation, and recording to the core module config.yaml): -- `user_name`: string (defaults to the system defined user name) -- `communication_language`: string (defaults to english) -- `document_output_language`: string (defaults to english) -- `output_folder`: string (default `_bmad-output`) +These values are set during installation and recorded to the core `module.yaml`: -An example of extending one of these values, in the BMad Method module.yaml it defines a planning_artifacts config, which will default to `default: "{output_folder}/planning-artifacts"` thus whatever the output_folder will be, this extended versions default will use the value from this core module and append a new folder onto it. The user can choose to replace this without utilizing the output_folder from the core if they so chose. +| Config Key | Default | Description | +|------------|---------|-------------| +| `user_name` | System username | User's display name | +| `communication_language` | `english` | Language for agent communication | +| `document_output_language` | `english` | Language for generated documents | +| `output_folder` | `_bmad-output` | Directory for workflow outputs | + +## Inheritance Behavior + +All installed modules automatically clone these values into their own config. Modules can: + +- **Accept defaults** — Use core values as-is (recommended) +- **Override values** — Replace with module-specific settings +- **Extend values** — Build on core values with additional paths + +:::tip[Extending Config] +Use `{output_folder}` to reference the core value. Example: BMad Method defines `planning_artifacts` as `{output_folder}/planning-artifacts`, automatically inheriting whatever output folder the user configured. +::: diff --git a/docs/reference/glossary/index.md b/docs/reference/glossary/index.md index cd998551..6e4d4586 100644 --- a/docs/reference/glossary/index.md +++ b/docs/reference/glossary/index.md @@ -2,371 +2,121 @@ title: "BMad Glossary" --- - -Comprehensive terminology reference for the BMad Method. - ---- - -## Navigation - -- [Core Concepts](#core-concepts) -- [Scale and Complexity](#scale-and-complexity) -- [Planning Documents](#planning-documents) -- [Workflow and Phases](#workflow-and-phases) -- [Agents and Roles](#agents-and-roles) -- [Status and Tracking](#status-and-tracking) -- [Project Types](#project-types) -- [Implementation Terms](#implementation-terms) -- [Game Development Terms](#game-development-terms) - ---- +Terminology reference for the BMad Method. ## Core Concepts -### BMad (Breakthrough Method of Agile AI Driven Development) - -AI-driven agile development framework with specialized agents, guided workflows, and scale-adaptive intelligence. - -### BMM (BMad Method Module) - -Core orchestration system for AI-driven agile development, providing comprehensive lifecycle management through specialized agents and workflows. - -### BMad Method - -The complete methodology for AI-assisted software development, encompassing planning, architecture, implementation, and quality assurance workflows that adapt to project complexity. - -### Scale-Adaptive System - -BMad Method's intelligent workflow orchestration that automatically adjusts planning depth, documentation requirements, and implementation processes based on project needs through three distinct planning tracks (Quick Flow, BMad Method, Enterprise Method). - -### Agent - -A specialized AI persona with specific expertise (PM, Architect, SM, DEV, TEA) that guides users through workflows and creates deliverables. Agents have defined capabilities, communication styles, and workflow access. - -### Workflow - -A multi-step guided process that orchestrates AI agent activities to produce specific deliverables. Workflows are interactive and adapt to user context. - ---- +| Term | Definition | +|------|------------| +| **Agent** | Specialized AI persona with specific expertise (PM, Architect, SM, DEV, TEA) that guides users through workflows and creates deliverables. | +| **BMad** | Breakthrough Method of Agile AI Driven Development — AI-driven agile framework with specialized agents, guided workflows, and scale-adaptive intelligence. | +| **BMad Method** | Complete methodology for AI-assisted software development, encompassing planning, architecture, implementation, and quality assurance workflows that adapt to project complexity. | +| **BMM** | BMad Method Module — core orchestration system providing comprehensive lifecycle management through specialized agents and workflows. | +| **Scale-Adaptive System** | Intelligent workflow orchestration that adjusts planning depth and documentation requirements based on project needs through three planning tracks. | +| **Workflow** | Multi-step guided process that orchestrates AI agent activities to produce specific deliverables. Workflows are interactive and adapt to user context. | ## Scale and Complexity -### Quick Flow Track - -Fast implementation track using tech-spec planning only. Best for bug fixes, small features, and changes with clear scope. Typical range: 1-15 stories. No architecture phase needed. Examples: bug fixes, OAuth login, search features. - -### BMad Method Track - -Full product planning track using PRD + Architecture + UX. Best for products, platforms, and complex features requiring system design. Typical range: 10-50+ stories. Examples: admin dashboards, e-commerce platforms, SaaS products. - -### Enterprise Method Track - -Extended enterprise planning track adding Security Architecture, DevOps Strategy, and Test Strategy to BMad Method. Best for enterprise requirements, compliance needs, and multi-tenant systems. Typical range: 30+ stories. Examples: multi-tenant platforms, compliance-driven systems, mission-critical applications. - -### Planning Track - -The methodology path (Quick Flow, BMad Method, or Enterprise Method) chosen for a project based on planning needs, complexity, and requirements rather than story count alone. - -**Note:** Story counts are guidance, not definitions. Tracks are determined by what planning the project needs, not story math. - ---- +| Term | Definition | +|------|------------| +| **BMad Method Track** | Full product planning track using PRD + Architecture + UX. Best for products, platforms, and complex features. Typical range: 10-50+ stories. | +| **Enterprise Method Track** | Extended planning track adding Security Architecture, DevOps Strategy, and Test Strategy. Best for compliance needs and multi-tenant systems. Typical range: 30+ stories. | +| **Planning Track** | Methodology path (Quick Flow, BMad Method, or Enterprise) chosen based on planning needs and complexity, not story count alone. | +| **Quick Flow Track** | Fast implementation track using tech-spec only. Best for bug fixes, small features, and clear-scope changes. Typical range: 1-15 stories. | ## Planning Documents -### Tech-Spec (Technical Specification) - -**Quick Flow track only.** Comprehensive technical plan created upfront that serves as the primary planning document for small changes or features. Contains problem statement, solution approach, file-level changes, stack detection (brownfield), testing strategy, and developer resources. - -### PRD (Product Requirements Document) - -**BMad Method/Enterprise tracks.** Product-level planning document containing vision, goals, Functional Requirements (FRs), Non-Functional Requirements (NFRs), success criteria, and UX considerations. Replaces tech-spec for larger projects that need product planning. **V6 Note:** PRD focuses on WHAT to build (requirements). Epic+Stories are created separately AFTER architecture via create-epics-and-stories workflow. - -### Architecture Document - -**BMad Method/Enterprise tracks.** System-wide design document defining structure, components, interactions, data models, integration patterns, security, performance, and deployment. - -**Scale-Adaptive:** Architecture complexity scales with track - BMad Method is lightweight to moderate, Enterprise Method is comprehensive with security/devops/test strategies. - -### Epics - -High-level feature groupings that contain multiple related stories. Typically span 5-15 stories each and represent cohesive functionality (e.g., "User Authentication Epic"). - -### Product Brief - -Optional strategic planning document created in Phase 1 (Analysis) that captures product vision, market context, user needs, and high-level requirements before detailed planning. - -### GDD (Game Design Document) - -Game development equivalent of PRD, created by Game Designer agent for game projects. Comprehensive document detailing all aspects of game design: mechanics, systems, content, and more. - -### Game Brief - -Document capturing the game's core vision, pillars, target audience, and scope. Foundation for the GDD. - ---- +| Term | Definition | +|------|------------| +| **Architecture Document** | *BMad Method/Enterprise.* System-wide design document defining structure, components, data models, integration patterns, security, and deployment. | +| **Epics** | High-level feature groupings containing multiple related stories. Typically 5-15 stories each representing cohesive functionality. | +| **Game Brief** | *BMGD.* Document capturing game's core vision, pillars, target audience, and scope. Foundation for the GDD. | +| **GDD** | *BMGD.* Game Design Document — comprehensive document detailing all aspects of game design: mechanics, systems, content, and more. | +| **PRD** | *BMad Method/Enterprise.* Product Requirements Document containing vision, goals, FRs, NFRs, and success criteria. Focuses on WHAT to build. | +| **Product Brief** | *Phase 1.* Optional strategic document capturing product vision, market context, and high-level requirements before detailed planning. | +| **Tech-Spec** | *Quick Flow only.* Comprehensive technical plan with problem statement, solution approach, file-level changes, and testing strategy. | ## Workflow and Phases -### Phase 0: Documentation (Prerequisite) - -**Conditional phase for brownfield projects.** Creates comprehensive codebase documentation before planning. Only required if existing documentation is insufficient for AI agents. - -### Phase 1: Analysis (Optional) - -Discovery and research phase including brainstorming, research workflows, and product brief creation. Optional for Quick Flow, recommended for BMad Method, required for Enterprise Method. - -### Phase 2: Planning (Required) - -**Always required.** Creates formal requirements and work breakdown. Routes to tech-spec (Quick Flow) or PRD (BMad Method/Enterprise) based on selected track. - -### Phase 3: Solutioning (Track-Dependent) - -Architecture design phase. Required for BMad Method and Enterprise Method tracks. Includes architecture creation, validation, and gate checks. - -### Phase 4: Implementation (Required) - -Sprint-based development through story-by-story iteration. Uses sprint-planning, create-story, dev-story, code-review, and retrospective workflows. - -### Quick Spec Flow - -Fast-track workflow system for Quick Flow track projects that goes straight from idea to tech-spec to implementation, bypassing heavy planning. Designed for bug fixes, small features, and rapid prototyping. - ---- +| Term | Definition | +|------|------------| +| **Phase 0: Documentation** | *Brownfield.* Conditional prerequisite phase creating codebase documentation before planning. Only required if existing docs are insufficient. | +| **Phase 1: Analysis** | Discovery phase including brainstorming, research, and product brief creation. Optional for Quick Flow, recommended for BMad Method. | +| **Phase 2: Planning** | Required phase creating formal requirements. Routes to tech-spec (Quick Flow) or PRD (BMad Method/Enterprise). | +| **Phase 3: Solutioning** | *BMad Method/Enterprise.* Architecture design phase including creation, validation, and gate checks. | +| **Phase 4: Implementation** | Required sprint-based development through story-by-story iteration using sprint-planning, create-story, dev-story, and code-review workflows. | +| **Quick Spec Flow** | Fast-track workflow for Quick Flow projects going straight from idea to tech-spec to implementation. | +| **Workflow Init** | Initialization workflow creating bmm-workflow-status.yaml, detecting project type, and determining planning track. | +| **Workflow Status** | Universal entry point checking for existing status file, displaying progress, and recommending next action. | ## Agents and Roles -### PM (Product Manager) - -Agent responsible for creating PRDs, tech-specs, and managing product requirements. Primary agent for Phase 2 planning. - -### Analyst (Business Analyst) - -Agent that initializes workflows, conducts research, creates product briefs, and tracks progress. Often the entry point for new projects. - -### Architect - -Agent that designs system architecture, creates architecture documents, performs technical reviews, and validates designs. Primary agent for Phase 3 solutioning. - -### SM (Scrum Master) - -Agent that manages sprints, creates stories, generates contexts, and coordinates implementation. Primary orchestrator for Phase 4 implementation. - -### DEV (Developer) - -Agent that implements stories, writes code, runs tests, and performs code reviews. Primary implementer in Phase 4. - -### TEA (Test Architect) - -Agent responsible for test strategy, quality gates, NFR assessment, and comprehensive quality assurance. Integrates throughout all phases. - -### Technical Writer - -Agent specialized in creating and maintaining high-quality technical documentation. Expert in documentation standards, information architecture, and professional technical writing. - -### UX Designer - -Agent that creates UX design documents, interaction patterns, and visual specifications for UI-heavy projects. - -### Game Designer - -Specialized agent for game development projects. Creates game design documents (GDD) and game-specific workflows. - -### Game Architect - -Agent that designs game system architecture, creates technical architecture for games, and validates game-specific designs. - -### BMad Master - -Meta-level orchestrator agent from BMad Core. Facilitates party mode, lists available tasks and workflows, and provides high-level guidance across all modules. - -### Party Mode - -Multi-agent collaboration feature where all installed agents discuss challenges together in real-time. BMad Master orchestrates, selecting 2-3 relevant agents per message for natural cross-talk and debate. Best for strategic decisions, creative brainstorming, cross-functional alignment, and complex problem-solving. - ---- +| Term | Definition | +|------|------------| +| **Analyst** | Agent that initializes workflows, conducts research, creates product briefs, and tracks progress. Often the entry point for new projects. | +| **Architect** | Agent designing system architecture, creating architecture documents, and validating designs. Primary agent for Phase 3. | +| **BMad Master** | Meta-level orchestrator from BMad Core facilitating party mode and providing high-level guidance across all modules. | +| **DEV** | Developer agent implementing stories, writing code, running tests, and performing code reviews. Primary implementer in Phase 4. | +| **Game Architect** | *BMGD.* Agent designing game system architecture and validating game-specific technical designs. | +| **Game Designer** | *BMGD.* Agent creating game design documents (GDD) and running game-specific workflows. | +| **Party Mode** | Multi-agent collaboration feature where agents discuss challenges together. BMad Master orchestrates, selecting 2-3 relevant agents per message. | +| **PM** | Product Manager agent creating PRDs and tech-specs. Primary agent for Phase 2 planning. | +| **SM** | Scrum Master agent managing sprints, creating stories, and coordinating implementation. Primary orchestrator for Phase 4. | +| **TEA** | Test Architect agent responsible for test strategy, quality gates, and NFR assessment. Integrates throughout all phases. | +| **Technical Writer** | Agent specialized in creating technical documentation, diagrams, and maintaining documentation standards. | +| **UX Designer** | Agent creating UX design documents, interaction patterns, and visual specifications for UI-heavy projects. | ## Status and Tracking -### bmm-workflow-status.yaml - -**Phases 1-3.** Tracking file that shows current phase, completed workflows, progress, and next recommended actions. Created by workflow-init, updated automatically. - -### sprint-status.yaml - -**Phase 4 only.** Single source of truth for implementation tracking. Contains all epics, stories, and retrospectives with current status for each. Created by sprint-planning, updated by agents. - -### Story Status Progression - -``` -backlog → ready-for-dev → in-progress → review → done -``` - -- **backlog** - Story exists in epic but not yet created -- **ready-for-dev** - Story file created via create-story; validation is optional -- **in-progress** - DEV is implementing via dev-story -- **review** - Implementation complete, awaiting code-review -- **done** - Completed with DoD met - -### Epic Status Progression - -``` -backlog → in-progress → done -``` - -- **backlog** - Epic not yet started -- **in-progress** - Epic actively being worked on -- **done** - All stories in epic completed - -### Retrospective - -Workflow run after completing each epic to capture learnings, identify improvements, and feed insights into next epic planning. Critical for continuous improvement. - ---- +| Term | Definition | +|------|------------| +| **bmm-workflow-status.yaml** | *Phases 1-3.* Tracking file showing current phase, completed workflows, and next recommended actions. | +| **DoD** | Definition of Done — criteria for marking a story complete: implementation done, tests passing, code reviewed, docs updated. | +| **Epic Status Progression** | `backlog → in-progress → done` — lifecycle states for epics during implementation. | +| **Gate Check** | Validation workflow (implementation-readiness) ensuring PRD, Architecture, and Epics are aligned before Phase 4. | +| **Retrospective** | Workflow after each epic capturing learnings and improvements for continuous improvement. | +| **sprint-status.yaml** | *Phase 4.* Single source of truth for implementation tracking containing all epics, stories, and their statuses. | +| **Story Status Progression** | `backlog → ready-for-dev → in-progress → review → done` — lifecycle states for stories. | ## Project Types -### Greenfield - -New project starting from scratch with no existing codebase. Freedom to establish patterns, choose stack, and design from clean slate. - -### Brownfield - -Existing project with established codebase, patterns, and constraints. Requires understanding existing architecture, respecting established conventions, and planning integration with current systems. - -**Critical:** Brownfield projects should run document-project workflow BEFORE planning to ensure AI agents have adequate context about existing code. - -### document-project Workflow - -**Brownfield prerequisite.** Analyzes and documents existing codebase, creating comprehensive documentation including project overview, architecture analysis, source tree, API contracts, and data models. Three scan levels: quick, deep, exhaustive. - ---- +| Term | Definition | +|------|------------| +| **Brownfield** | Existing project with established codebase and patterns. Requires understanding existing architecture and planning integration. | +| **Convention Detection** | *Quick Flow.* Feature auto-detecting existing code style, naming conventions, and frameworks from brownfield codebases. | +| **document-project** | *Brownfield.* Workflow analyzing and documenting existing codebase with three scan levels: quick, deep, exhaustive. | +| **Feature Flags** | *Brownfield.* Implementation technique for gradual rollout, easy rollback, and A/B testing of new functionality. | +| **Greenfield** | New project starting from scratch with freedom to establish patterns, choose stack, and design from clean slate. | +| **Integration Points** | *Brownfield.* Specific locations where new code connects with existing systems. Must be documented in tech-specs. | ## Implementation Terms -### Story - -Single unit of implementable work with clear acceptance criteria, typically 2-8 hours of development effort. Stories are grouped into epics and tracked in sprint-status.yaml. - -### Story File - -Markdown file containing story details: description, acceptance criteria, technical notes, dependencies, implementation guidance, and testing requirements. - -### Story Context - -Implementation guidance embedded within story files during the create-story workflow. Provides implementation-specific context, references existing patterns, suggests approaches, and helps maintain consistency with established codebase conventions. - -### Sprint Planning - -Workflow that initializes Phase 4 implementation by creating sprint-status.yaml, extracting all epics/stories from planning docs, and setting up tracking infrastructure. - -### Sprint - -Time-boxed period of development work, typically 1-2 weeks. - -### Gate Check - -Validation workflow (implementation-readiness) run before Phase 4 to ensure PRD + Architecture + Epics + UX (optional) are aligned with no gaps or contradictions. Required for BMad Method and Enterprise Method tracks. - -### DoD (Definition of Done) - -Criteria that must be met before marking a story as done. Typically includes: implementation complete, tests written and passing, code reviewed, documentation updated, and acceptance criteria validated. - -### Shard / Sharding - -**For runtime LLM optimization only (NOT human docs).** Splitting large planning documents (PRD, epics, architecture) into smaller section-based files to improve workflow efficiency. Phase 1-3 workflows load entire sharded documents transparently. Phase 4 workflows selectively load only needed sections for massive token savings. - ---- +| Term | Definition | +|------|------------| +| **Context Engineering** | Loading domain-specific standards into AI context automatically via manifests, ensuring consistent outputs regardless of prompt variation. | +| **Correct Course** | Workflow for navigating significant changes when implementation is off-track. Analyzes impact and recommends adjustments. | +| **Shard / Sharding** | Splitting large planning documents into section-based files for LLM optimization. Phase 4 workflows load only needed sections. | +| **Sprint** | Time-boxed period of development work, typically 1-2 weeks. | +| **Sprint Planning** | Workflow initializing Phase 4 by creating sprint-status.yaml and extracting epics/stories from planning docs. | +| **Story** | Single unit of implementable work with clear acceptance criteria, typically 2-8 hours of effort. Grouped into epics. | +| **Story Context** | Implementation guidance embedded in story files during create-story, referencing existing patterns and approaches. | +| **Story File** | Markdown file containing story description, acceptance criteria, technical notes, and testing requirements. | +| **Track Selection** | Automatic analysis by workflow-init suggesting appropriate track based on complexity indicators. User can override. | ## Game Development Terms -### Core Fantasy - -The emotional experience players seek from your game. What they want to FEEL. - -### Core Loop - -The fundamental cycle of actions players repeat throughout gameplay. The heart of your game. - -### Design Pillar - -Core principle that guides all design decisions. Typically 3-5 pillars define a game's identity. - -### Game Type - -Genre classification that determines which specialized GDD sections are included. - -### Narrative Complexity - -How central story is to the game experience: -- **Critical** - Story IS the game (visual novels) -- **Heavy** - Deep narrative with gameplay (RPGs) -- **Moderate** - Meaningful story supporting gameplay -- **Light** - Minimal story, gameplay-focused - -### Environmental Storytelling - -Narrative communicated through the game world itself—visual details, audio, found documents—rather than explicit dialogue. - -### MDA Framework - -Mechanics → Dynamics → Aesthetics. Framework for analyzing and designing games. - -### Procedural Generation - -Algorithmic creation of game content (levels, items, characters) rather than hand-crafted. - -### Roguelike - -Genre featuring procedural generation, permadeath, and run-based progression. - -### Metroidvania - -Genre featuring interconnected world exploration with ability-gated progression. - -### Meta-Progression - -Persistent progression that carries between individual runs or sessions. - -### Permadeath - -Game mechanic where character death is permanent, typically requiring a new run. - -### Player Agency - -The degree to which players can make meaningful choices that affect outcomes. - ---- - -## Additional Terms - -### Workflow Status - -Universal entry point workflow that checks for existing status file, displays current phase/progress, and recommends next action based on project state. - -### Workflow Init - -Initialization workflow that creates bmm-workflow-status.yaml, detects greenfield vs brownfield, determines planning track, and sets up appropriate workflow path. - -### Track Selection - -Automatic analysis by workflow-init that uses keyword analysis, complexity indicators, and project requirements to suggest appropriate track (Quick Flow, BMad Method, or Enterprise Method). User can override suggested track. - -### Correct Course - -Workflow run during Phase 4 when significant changes or issues arise. Analyzes impact, proposes solutions, and routes to appropriate remediation workflows. - -### Feature Flags - -Implementation technique for brownfield projects that allows gradual rollout of new functionality, easy rollback, and A/B testing. Recommended for BMad Method and Enterprise brownfield changes. - -### Integration Points - -Specific locations where new code connects with existing systems. Must be documented explicitly in brownfield tech-specs and architectures. - -### Context Engineering - -Loading domain-specific standards and patterns into AI context automatically, rather than relying on prompts alone. In TEA, this means the `tea-index.csv` manifest loads relevant knowledge fragments so the AI doesn't relearn testing patterns each session. This approach ensures consistent, production-ready outputs regardless of prompt variation. - -### Convention Detection - -Quick Spec Flow feature that automatically detects existing code style, naming conventions, patterns, and frameworks from brownfield codebases, then asks user to confirm before proceeding. +| Term | Definition | +|------|------------| +| **Core Fantasy** | *BMGD.* The emotional experience players seek from your game — what they want to FEEL. | +| **Core Loop** | *BMGD.* Fundamental cycle of actions players repeat throughout gameplay. The heart of your game. | +| **Design Pillar** | *BMGD.* Core principle guiding all design decisions. Typically 3-5 pillars define a game's identity. | +| **Environmental Storytelling** | *BMGD.* Narrative communicated through the game world itself rather than explicit dialogue. | +| **Game Type** | *BMGD.* Genre classification determining which specialized GDD sections are included. | +| **MDA Framework** | *BMGD.* Mechanics → Dynamics → Aesthetics — framework for analyzing and designing games. | +| **Meta-Progression** | *BMGD.* Persistent progression carrying between individual runs or sessions. | +| **Metroidvania** | *BMGD.* Genre featuring interconnected world exploration with ability-gated progression. | +| **Narrative Complexity** | *BMGD.* How central story is to the game: Critical, Heavy, Moderate, or Light. | +| **Permadeath** | *BMGD.* Game mechanic where character death is permanent, typically requiring a new run. | +| **Player Agency** | *BMGD.* Degree to which players can make meaningful choices affecting outcomes. | +| **Procedural Generation** | *BMGD.* Algorithmic creation of game content (levels, items, characters) rather than hand-crafted. | +| **Roguelike** | *BMGD.* Genre featuring procedural generation, permadeath, and run-based progression. | diff --git a/docs/reference/workflows/bmgd-workflows.md b/docs/reference/workflows/bmgd-workflows.md index 79d19165..6f2498ac 100644 --- a/docs/reference/workflows/bmgd-workflows.md +++ b/docs/reference/workflows/bmgd-workflows.md @@ -2,19 +2,14 @@ title: "BMGD Workflows Guide" --- - Complete reference for all BMGD workflows organized by development phase. ---- - -## Workflow Overview +## Overview BMGD workflows are organized into four phases: ![BMGD Workflow Overview](../../tutorials/getting-started/images/workflow-overview.jpg) ---- - ## Phase 1: Preproduction ### Brainstorm Game @@ -24,23 +19,19 @@ BMGD workflows are organized into four phases: **Input:** None required **Output:** Ideas and concepts (optionally saved) -**Description:** Guided ideation session using game-specific brainstorming techniques: -- **MDA Framework** - Mechanics → Dynamics → Aesthetics analysis -- **Core Loop Workshop** - Define the fundamental gameplay loop -- **Player Fantasy Mining** - Explore what players want to feel -- **Genre Mashup** - Combine genres for unique concepts +- **MDA Framework** — Mechanics → Dynamics → Aesthetics analysis +- **Core Loop Workshop** — Define the fundamental gameplay loop +- **Player Fantasy Mining** — Explore what players want to feel +- **Genre Mashup** — Combine genres for unique concepts **Steps:** - 1. Initialize brainstorm session 2. Load game-specific techniques 3. Execute ideation with selected techniques 4. Summarize and (optionally) hand off to Game Brief ---- - ### Game Brief **Command:** `create-game-brief` @@ -48,11 +39,9 @@ Guided ideation session using game-specific brainstorming techniques: **Input:** Ideas from brainstorming (optional) **Output:** `{output_folder}/game-brief.md` -**Description:** -Captures your game's core vision and fundamentals. This is the foundation for all subsequent design work. +Captures your game's core vision and fundamentals. Foundation for all subsequent design work. **Sections covered:** - - Game concept and vision - Design pillars (3-5 core principles) - Target audience and market @@ -60,8 +49,6 @@ Captures your game's core vision and fundamentals. This is the foundation for al - Core gameplay loop - Initial scope definition ---- - ## Phase 2: Design ### GDD (Game Design Document) @@ -71,11 +58,9 @@ Captures your game's core vision and fundamentals. This is the foundation for al **Input:** Game Brief **Output:** `{output_folder}/gdd.md` (or sharded into `{output_folder}/gdd/`) -**Description:** Comprehensive game design document with genre-specific sections based on 24 supported game types. **Core sections:** - 1. Executive Summary 2. Gameplay Systems 3. Core Mechanics @@ -88,14 +73,11 @@ Comprehensive game design document with genre-specific sections based on 24 supp 10. Epic Generation (for sprint planning) **Features:** - - Game type selection with specialized sections - Hybrid game type support - Automatic epic generation - Scale-adaptive complexity ---- - ### Narrative Design **Command:** `narrative` @@ -103,11 +85,9 @@ Comprehensive game design document with genre-specific sections based on 24 supp **Input:** GDD (required), Game Brief (optional) **Output:** `{output_folder}/narrative-design.md` -**Description:** For story-driven games. Creates comprehensive narrative documentation. **Sections covered:** - 1. Story Foundation (premise, themes, tone) 2. Story Structure (acts, beats, pacing) 3. Characters (protagonists, antagonists, supporting, arcs) @@ -120,13 +100,10 @@ For story-driven games. Creates comprehensive narrative documentation. 10. Appendices (relationship map, timeline) **Narrative Complexity Levels:** - -- **Critical** - Story IS the game (visual novels, adventure games) -- **Heavy** - Deep narrative with gameplay (RPGs, story-driven action) -- **Moderate** - Meaningful story supporting gameplay -- **Light** - Minimal story, gameplay-focused - ---- +- **Critical** — Story IS the game (visual novels, adventure games) +- **Heavy** — Deep narrative with gameplay (RPGs, story-driven action) +- **Moderate** — Meaningful story supporting gameplay +- **Light** — Minimal story, gameplay-focused ## Phase 3: Technical @@ -137,11 +114,9 @@ For story-driven games. Creates comprehensive narrative documentation. **Input:** GDD, Narrative Design (optional) **Output:** `{output_folder}/game-architecture.md` -**Description:** Technical architecture document covering engine selection, system design, and implementation approach. **Sections covered:** - 1. Executive Summary 2. Engine/Framework Selection 3. Core Systems Architecture @@ -153,8 +128,6 @@ Technical architecture document covering engine selection, system design, and im 9. Build and Deployment 10. Technical Risks and Mitigations ---- - ## Phase 4: Production Production workflows inherit from BMM and add game-specific overrides. @@ -166,11 +139,8 @@ Production workflows inherit from BMM and add game-specific overrides. **Input:** GDD with epics **Output:** `{implementation_artifacts}/sprint-status.yaml` -**Description:** Generates or updates sprint tracking from epic files. Sets up the sprint backlog and tracking. ---- - ### Sprint Status **Command:** `sprint-status` @@ -178,14 +148,12 @@ Generates or updates sprint tracking from epic files. Sets up the sprint backlog **Input:** `sprint-status.yaml` **Output:** Sprint summary, risks, next action recommendation -**Description:** -Summarizes sprint progress, surfaces risks (stale file, orphaned stories, stories in review), and recommends the next workflow to run. Supports three modes: +Summarizes sprint progress, surfaces risks (stale file, orphaned stories, stories in review), and recommends the next workflow to run. -- **interactive** (default): Displays summary with menu options -- **validate**: Checks sprint-status.yaml structure -- **data**: Returns raw data for other workflows - ---- +**Modes:** +- **interactive** (default) — Displays summary with menu options +- **validate** — Checks sprint-status.yaml structure +- **data** — Returns raw data for other workflows ### Create Story @@ -194,13 +162,10 @@ Summarizes sprint progress, surfaces risks (stale file, orphaned stories, storie **Input:** GDD, Architecture, Epic context **Output:** `{output_folder}/epics/{epic-name}/stories/{story-name}.md` -**Description:** Creates implementable story drafts with acceptance criteria, tasks, and technical notes. Stories are marked ready-for-dev directly when created. **Validation:** `validate-create-story` ---- - ### Dev Story **Command:** `dev-story` @@ -208,11 +173,8 @@ Creates implementable story drafts with acceptance criteria, tasks, and technica **Input:** Story (ready for dev) **Output:** Implemented code -**Description:** Implements story tasks following acceptance criteria. Uses TDD approach (red-green-refactor). Updates sprint-status.yaml automatically on completion. ---- - ### Code Review **Command:** `code-review` @@ -220,11 +182,8 @@ Implements story tasks following acceptance criteria. Uses TDD approach (red-gre **Input:** Story (ready for review) **Output:** Review feedback, approved/needs changes -**Description:** Thorough QA code review with game-specific considerations (performance, 60fps, etc.). ---- - ### Retrospective **Command:** `epic-retrospective` @@ -232,11 +191,8 @@ Thorough QA code review with game-specific considerations (performance, 60fps, e **Input:** Completed epic **Output:** Retrospective document -**Description:** Facilitates team retrospective after epic completion. Captures learnings and improvements. ---- - ### Correct Course **Command:** `correct-course` @@ -244,25 +200,18 @@ Facilitates team retrospective after epic completion. Captures learnings and imp **Input:** Current project state **Output:** Correction plan -**Description:** Navigates significant changes when implementation is off-track. Analyzes impact and recommends adjustments. ---- - ## Workflow Status **Command:** `workflow-status` **Agent:** All agents -**Output:** Project status summary -**Description:** Checks current project status across all phases. Shows completed documents, current phase, and next steps. ---- - ## Quick-Flow Workflows -Fast-track workflows that skip full planning phases. See **[Quick-Flow Guide](/docs/how-to/workflows/bmgd-quick-flow.md)** for detailed usage. +Fast-track workflows that skip full planning phases. See [Quick-Flow Guide](/docs/how-to/workflows/bmgd-quick-flow.md) for detailed usage. ### Quick-Prototype @@ -271,17 +220,13 @@ Fast-track workflows that skip full planning phases. See **[Quick-Flow Guide](/d **Input:** Idea or concept to test **Output:** Working prototype, playtest results -**Description:** Rapid prototyping workflow for testing game mechanics and ideas quickly. Focuses on "feel" over polish. **Use when:** - - Testing if a mechanic is fun - Proving a concept before committing to design - Experimenting with gameplay ideas ---- - ### Quick-Dev **Command:** `quick-dev` @@ -289,17 +234,13 @@ Rapid prototyping workflow for testing game mechanics and ideas quickly. Focuses **Input:** Tech-spec, prototype, or direct instructions **Output:** Implemented feature -**Description:** Flexible development workflow with game-specific considerations (performance, feel, integration). **Use when:** - - Implementing features from tech-specs - Building on successful prototypes - Making changes that don't need full story workflow ---- - ## Quality Assurance Workflows Game testing workflows for automated testing, playtesting, and quality assurance across Unity, Unreal, and Godot. @@ -311,22 +252,18 @@ Game testing workflows for automated testing, playtesting, and quality assurance **Input:** Game project **Output:** Configured test framework -**Description:** Initialize a production-ready test framework for your game engine: -- **Unity**: Unity Test Framework with Edit Mode and Play Mode tests -- **Unreal**: Unreal Automation system with functional tests -- **Godot**: GUT (Godot Unit Test) framework +- **Unity** — Unity Test Framework with Edit Mode and Play Mode tests +- **Unreal** — Unreal Automation system with functional tests +- **Godot** — GUT (Godot Unit Test) framework **Creates:** - - Test directory structure - Framework configuration - Sample unit and integration tests - Test documentation ---- - ### Test Design **Command:** `test-design` @@ -334,7 +271,6 @@ Initialize a production-ready test framework for your game engine: **Input:** GDD, Architecture **Output:** `{output_folder}/game-test-design.md` -**Description:** Creates comprehensive test scenarios covering: - Core gameplay mechanics @@ -344,8 +280,6 @@ Creates comprehensive test scenarios covering: Uses GIVEN/WHEN/THEN format with priority levels (P0-P3). ---- - ### Automate **Command:** `automate` @@ -353,15 +287,12 @@ Uses GIVEN/WHEN/THEN format with priority levels (P0-P3). **Input:** Test design, game code **Output:** Automated test files -**Description:** Generates engine-appropriate automated tests: - Unit tests for pure logic - Integration tests for system interactions - Smoke tests for critical path validation ---- - ### Playtest Plan **Command:** `playtest-plan` @@ -369,7 +300,6 @@ Generates engine-appropriate automated tests: **Input:** Build, test objectives **Output:** `{output_folder}/playtest-plan.md` -**Description:** Creates structured playtesting sessions: - Session structure (pre/during/post) @@ -378,12 +308,9 @@ Creates structured playtesting sessions: - Analysis templates **Playtest Types:** - -- Internal (team validation) -- External (unbiased feedback) -- Focused (specific feature testing) - ---- +- **Internal** — Team validation +- **External** — Unbiased feedback +- **Focused** — Specific feature testing ### Performance Test @@ -392,7 +319,6 @@ Creates structured playtesting sessions: **Input:** Platform targets **Output:** `{output_folder}/performance-test-plan.md` -**Description:** Designs performance testing strategy: - Frame rate targets per platform @@ -401,8 +327,6 @@ Designs performance testing strategy: - Benchmark scenarios - Profiling methodology ---- - ### Test Review **Command:** `test-review` @@ -410,7 +334,6 @@ Designs performance testing strategy: **Input:** Existing test suite **Output:** `{output_folder}/test-review-report.md` -**Description:** Reviews test quality and coverage: - Test suite metrics @@ -418,8 +341,6 @@ Reviews test quality and coverage: - Coverage gaps - Recommendations ---- - ## Utility Workflows ### Party Mode @@ -427,40 +348,21 @@ Reviews test quality and coverage: **Command:** `party-mode` **Agent:** All agents -**Description:** Brings multiple agents together for collaborative discussion on complex decisions. ---- - ### Advanced Elicitation **Command:** `advanced-elicitation` **Agent:** All agents (web only) -**Description:** Deep exploration techniques to challenge assumptions and surface hidden requirements. ---- - ## Standalone BMGD Workflows -BMGD Phase 4 workflows are standalone implementations tailored for game development: +:::note[Implementation Detail] +BMGD Phase 4 workflows are standalone implementations tailored for game development. They are self-contained with game-specific logic, templates, and checklists — no dependency on BMM workflow files. +::: ```yaml workflow: '{project-root}/_bmad/bmgd/workflows/4-production/dev-story/workflow.yaml' ``` - -This means: - -1. BMGD workflows are self-contained with game-specific logic -2. Game-focused templates, checklists, and instructions -3. No dependency on BMM workflow files - ---- - -## Next Steps - -- **[Quick Start Guide](/docs/tutorials/getting-started/quick-start-bmgd.md)** - Get started with BMGD -- **[Quick-Flow Guide](/docs/how-to/workflows/bmgd-quick-flow.md)** - Rapid prototyping and development -- **[Agents Guide](/docs/explanation/game-dev/agents.md)** - Agent reference -- **[Game Types Guide](/docs/explanation/game-dev/game-types.md)** - Game type templates diff --git a/docs/reference/workflows/core-workflows.md b/docs/reference/workflows/core-workflows.md index ef27d5c9..7a4a4600 100644 --- a/docs/reference/workflows/core-workflows.md +++ b/docs/reference/workflows/core-workflows.md @@ -2,32 +2,31 @@ title: "Core Workflows" --- +Domain-agnostic workflows that can be utilized by any BMad-compliant module, workflow, or agent. -Core Workflows are domain-agnostic workflows that can be utilized by any BMad-compliant module, workflow, or agent. These workflows are installed by default and available at any time. +## Party Mode -## Available Core Workflows +Orchestrate dynamic multi-agent conversations with your entire BMad team. Engage multiple specialized perspectives simultaneously — each agent maintains their unique personality, expertise, and communication style. -### [Party Mode](/docs/explanation/features/party-mode.md) +See [Party Mode](/docs/explanation/features/party-mode.md) for detailed usage. -Orchestrate dynamic multi-agent conversations with your entire BMad team. Engage with multiple specialized perspectives simultaneously—each agent maintaining their unique personality, expertise, and communication style. +## Brainstorming -### [Brainstorming](/docs/explanation/features/brainstorming-techniques.md) +Facilitate structured creative sessions using 60+ proven ideation techniques. The AI acts as coach and guide, using proven creativity methods to draw out ideas and insights. -Facilitate structured creative sessions using 60+ proven ideation techniques. The AI acts as coach and guide, using proven creativity methods to draw out ideas and insights that are already within you. +See [Brainstorming Techniques](/docs/explanation/features/brainstorming-techniques.md) for detailed usage. -### [Advanced Elicitation](/docs/explanation/features/advanced-elicitation.md) +## Advanced Elicitation -Push the LLM to rethink its work through 50+ reasoning methods—the inverse of brainstorming. The LLM applies sophisticated techniques to re-examine and enhance content it has just generated, essentially "LLM brainstorming" to find better approaches and uncover improvements. +Push the LLM to rethink its work through 50+ reasoning methods — the inverse of brainstorming. The LLM applies sophisticated techniques to re-examine and enhance content it has just generated. ---- +See [Advanced Elicitation](/docs/explanation/features/advanced-elicitation.md) for detailed usage. ## Workflow Integration -Core Workflows are designed to be invoked and configured by other modules. When called from another workflow, they accept contextual parameters to customize the session: +Core Workflows accept contextual parameters when called from other modules: - **Topic focus** — Direct the session toward a specific domain or question - **Additional personas** (Party Mode) — Inject expert agents into the roster at runtime - **Guardrails** (Brainstorming) — Set constraints and boundaries for ideation - **Output goals** — Define what the final output needs to accomplish - -This allows modules to leverage these workflows' capabilities while maintaining focus on their specific domain and objectives. diff --git a/docs/reference/workflows/document-project.md b/docs/reference/workflows/document-project.md index f6eaba55..74adca93 100644 --- a/docs/reference/workflows/document-project.md +++ b/docs/reference/workflows/document-project.md @@ -1,74 +1,73 @@ --- -title: "Document Project Workflow - Technical Reference" +title: "Document Project Workflow" --- +Analyzes and documents brownfield projects for AI-assisted development. -**Module:** BMM (BMad Method Module) +:::note[Quick Facts] +- **Module:** BMM (BMad Method Module) +- **Command:** `*document-project` +- **Agents:** Analyst, Technical Writer +- **Output:** Master index + documentation files in `{output_folder}` +::: ## Purpose -Analyzes and documents brownfield projects by scanning codebase, architecture, and patterns to create comprehensive reference documentation for AI-assisted development. Generates a master index and multiple documentation files tailored to project structure and type. +Scans your codebase, architecture, and patterns to create comprehensive reference documentation. Generates a master index and multiple documentation files tailored to your project structure and type. ## How to Invoke + ```bash -/bmad:bmm:workflows:document-project +*document-project ``` ---- ## Scan Levels -Choose the right scan depth for your needs: +Choose the right depth for your needs: -### 1. Quick Scan (Default) +### Quick Scan (Default) **What it does:** Pattern-based analysis without reading source files -**Reads:** Config files, package manifests, directory structure, README -**Use when:** +**Reads:** Config files, package manifests, directory structure, README + +**Use when:** - You need a fast project overview - Initial understanding of project structure - Planning next steps before deeper analysis -**Does NOT read:** Source code files (`_.js`, `_.ts`, `_.py`, `_.go`, etc.) - -### 2. Deep Scan +### Deep Scan **What it does:** Reads files in critical directories based on project type -**Reads:** Files in critical paths defined by documentation requirements -**Use when:** +**Reads:** Files in critical paths defined by documentation requirements + +**Use when:** - Creating comprehensive documentation for brownfield PRD - Need detailed analysis of key areas - Want balance between depth and speed -**Example:** For a web app, reads controllers/, models/, components/, but not every utility file - -### 3. Exhaustive Scan +### Exhaustive Scan **What it does:** Reads ALL source files in project -**Reads:** Every source file (excludes node_modules, dist, build, .git) -**Use when:** +**Reads:** Every source file (excludes node_modules, dist, build, .git) + +**Use when:** - Complete project analysis needed - Migration planning requires full understanding - Detailed audit of entire codebase -- Deep technical debt assessment -**Note:** Deep-dive mode ALWAYS uses exhaustive scan (no choice) - ---- +:::caution[Deep-Dive Mode] +Deep-dive mode always uses exhaustive scan — no choice of scan level. +::: ## Resumability The workflow can be interrupted and resumed without losing progress: -- **State Tracking:** Progress saved in `project-scan-report.json` -- **Auto-Detection:** Workflow detects incomplete runs (<24 hours old) -- **Resume Prompt:** Choose to resume or start fresh -- **Step-by-Step:** Resume from exact step where interrupted -- **Archiving:** Old state files automatically archived - -**Related Documentation:** - -- [Brownfield Development Guide](/docs/how-to/brownfield/index.md) -- [Implementation Workflows](/docs/how-to/workflows/run-sprint-planning.md) +- **State Tracking** — Progress saved in `project-scan-report.json` +- **Auto-Detection** — Workflow detects incomplete runs (<24 hours old) +- **Resume Prompt** — Choose to resume or start fresh +- **Step-by-Step** — Resume from exact step where interrupted +- **Archiving** — Old state files automatically archived diff --git a/docs/reference/workflows/index.md b/docs/reference/workflows/index.md index d1da2924..fd469174 100644 --- a/docs/reference/workflows/index.md +++ b/docs/reference/workflows/index.md @@ -3,14 +3,13 @@ title: "Workflows Reference" description: Reference documentation for BMad Method workflows --- - -Complete reference documentation for all BMad Method workflows. +Reference documentation for all BMad Method workflows. ## Core Workflows -- [Core Workflows](/docs/reference/workflows/core-workflows.md) - Domain-agnostic workflows available to all modules -- [Document Project](/docs/reference/workflows/document-project.md) - Brownfield project documentation workflow +- [Core Workflows](/docs/reference/workflows/core-workflows.md) — Domain-agnostic workflows available to all modules +- [Document Project](/docs/reference/workflows/document-project.md) — Brownfield project documentation ## Module-Specific Workflows -- [BMGD Workflows](/docs/reference/workflows/bmgd-workflows.md) - Game development workflows +- [BMGD Workflows](/docs/reference/workflows/bmgd-workflows.md) — Game development workflows From c0f6401902d0a8d6eea6c76277b1b323bc344f35 Mon Sep 17 00:00:00 2001 From: forcetrainer Date: Mon, 12 Jan 2026 00:31:54 -0500 Subject: [PATCH 14/22] docs: add token usage FAQ and fix broken links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add "Why does BMad use so many tokens?" FAQ explaining design tradeoff (decision quality over code velocity) - Fix stale anchor #adversarial-review-general → #adversarial-review - Remove link to archived customize-workflows.md Co-Authored-By: Claude Opus 4.5 --- docs/explanation/core/index.md | 2 +- docs/explanation/faq/getting-started-faq.md | 5 +++++ docs/how-to/customization/index.md | 1 - 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/explanation/core/index.md b/docs/explanation/core/index.md index de7687dc..9c604a48 100644 --- a/docs/explanation/core/index.md +++ b/docs/explanation/core/index.md @@ -14,5 +14,5 @@ The Core Module is installed with all installations of BMad modules and provides - [Advanced Elicitation](/docs/explanation/features/advanced-elicitation.md) — LLM rethinking with 50+ reasoning methods - **[Core Tasks](/docs/reference/configuration/core-tasks.md)** — Common tasks available across modules - [Index Docs](/docs/reference/configuration/core-tasks.md#index-docs) — Generate directory index files - - [Adversarial Review](/docs/reference/configuration/core-tasks.md#adversarial-review-general) — Critical content review + - [Adversarial Review](/docs/reference/configuration/core-tasks.md#adversarial-review) — Critical content review - [Shard Document](/docs/reference/configuration/core-tasks.md#shard-document) — Split large documents into sections diff --git a/docs/explanation/faq/getting-started-faq.md b/docs/explanation/faq/getting-started-faq.md index 424e1013..78b7c88e 100644 --- a/docs/explanation/faq/getting-started-faq.md +++ b/docs/explanation/faq/getting-started-faq.md @@ -7,12 +7,17 @@ Quick answers to common questions about getting started with the BMad Method. ## Questions +- [Why does BMad use so many tokens?](#why-does-bmad-use-so-many-tokens) - [Do I always need to run workflow-init?](#do-i-always-need-to-run-workflow-init) - [Why do I need fresh chats for each workflow?](#why-do-i-need-fresh-chats-for-each-workflow) - [Can I skip workflow-status and just start working?](#can-i-skip-workflow-status-and-just-start-working) - [What's the minimum I need to get started?](#whats-the-minimum-i-need-to-get-started) - [How do I know if I'm in Phase 1, 2, 3, or 4?](#how-do-i-know-if-im-in-phase-1-2-3-or-4) +### Why does BMad use so many tokens? + +BMad is not always the most token efficient approach, and that's by design. The checkpoints, story files, and retrospectives keep you in the loop so you can apply taste, judgment, and accumulated context that no agent has. Fully automated coding loops optimize for code velocity; BMad optimizes for decision quality. If you're building something you'll maintain for years, where user experience matters, where architectural choices compound—that tradeoff pays for itself. + ### Do I always need to run workflow-init? No, once you learn the flow you can go directly to workflows. However, workflow-init is helpful because it: diff --git a/docs/how-to/customization/index.md b/docs/how-to/customization/index.md index 9434524e..a792104c 100644 --- a/docs/how-to/customization/index.md +++ b/docs/how-to/customization/index.md @@ -9,7 +9,6 @@ Personalize agents and workflows to match your needs. | Guide | Description | |-------|-------------| | **[Agent Customization](/docs/how-to/customization/customize-agents.md)** | Modify agent behavior without editing core files | -| **[Workflow Customization](/docs/how-to/customization/customize-workflows.md)** | Customize and optimize workflows | ## Overview From d419ac8a701b792ebe7c8a4ac341f45e481fd385 Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Mon, 12 Jan 2026 08:20:04 -0800 Subject: [PATCH 15/22] feat: add editorial review tasks for structure and prose (#1307) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add editorial review tasks for structure and prose Add two complementary editorial review tasks: - editorial-review-structure.xml: Structural editor that proposes cuts, reorganization, and simplification. Includes 5 document archetype models (Tutorial, Reference, Explanation, Prompt, Strategic) for targeted evaluation. - editorial-review-prose.xml: Clinical copy-editor for prose improvements using Microsoft Writing Style Guide as baseline. Both tasks support humans and llm target audiences with different principles. * fix: add content-sacrosanct guardrail to editorial review tasks Both editorial review tasks (prose and structure) were missing the key constraint that reviewers should never challenge the ideas/knowledge themselves—only how clearly they are communicated. This restores the original design intent. Co-Authored-By: Claude Opus 4.5 * fix: align reader_type parameter naming across editorial tasks Prose task was using 'target_audience' for the humans/llm optimization flag while structure task correctly separates 'target_audience' (who reads) from 'reader_type' (optimization mode). Aligns to reader_type. Co-Authored-By: Claude Opus 4.5 --------- Co-authored-by: Claude Opus 4.5 Co-authored-by: Brian --- src/core/tasks/editorial-review-prose.xml | 91 ++++++++ src/core/tasks/editorial-review-structure.xml | 198 ++++++++++++++++++ src/core/tasks/review-adversarial-general.xml | 5 + 3 files changed, 294 insertions(+) create mode 100644 src/core/tasks/editorial-review-prose.xml create mode 100644 src/core/tasks/editorial-review-structure.xml diff --git a/src/core/tasks/editorial-review-prose.xml b/src/core/tasks/editorial-review-prose.xml new file mode 100644 index 00000000..f6714b43 --- /dev/null +++ b/src/core/tasks/editorial-review-prose.xml @@ -0,0 +1,91 @@ + + + Review text for communication issues that impede comprehension and output suggested fixes in a three-column table + + + + + + + + MANDATORY: Execute ALL steps in the flow section IN EXACT ORDER + DO NOT skip steps or change the sequence + HALT immediately when halt-conditions are met + Each action xml tag within step xml tag is a REQUIRED action to complete that step + + You are a clinical copy-editor: precise, professional, neither warm nor cynical + Apply Microsoft Writing Style Guide principles as your baseline + Focus on communication issues that impede comprehension - not style preferences + NEVER rewrite for preference - only fix genuine issues + + CONTENT IS SACROSANCT: Never challenge ideas—only clarify how they're expressed. + + + Minimal intervention: Apply the smallest fix that achieves clarity + Preserve structure: Fix prose within existing structure, never restructure + Skip code/markup: Detect and skip code blocks, frontmatter, structural markup + When uncertain: Flag with a query rather than suggesting a definitive change + Deduplicate: Same issue in multiple places = one entry with locations listed + No conflicts: Merge overlapping fixes into single entries + Respect author voice: Preserve intentional stylistic choices + + + + + + + Check if content is empty or contains fewer than 3 words + HALT with error: "Content too short for editorial review (minimum 3 words required)" + Validate reader_type is "humans" or "llm" (or not provided, defaulting to "humans") + HALT with error: "Invalid reader_type. Must be 'humans' or 'llm'" + Identify content type (markdown, plain text, XML with text) + Note any code blocks, frontmatter, or structural markup to skip + + + + Analyze the style, tone, and voice of the input text + Note any intentional stylistic choices to preserve (informal tone, technical jargon, rhetorical patterns) + Calibrate review approach based on reader_type parameter + Prioritize: unambiguous references, consistent terminology, explicit structure, no hedging + Prioritize: clarity, flow, readability, natural progression + + + + Review all prose sections (skip code blocks, frontmatter, structural markup) + Identify communication issues that impede comprehension + For each issue, determine the minimal fix that achieves clarity + Deduplicate: If same issue appears multiple times, create one entry listing all locations + Merge overlapping issues into single entries (no conflicting suggestions) + For uncertain fixes, phrase as query: "Consider: [suggestion]?" rather than definitive change + Preserve author voice - do not "improve" intentional stylistic choices + + + + Output a three-column markdown table with all suggested fixes + Output: "No editorial issues identified" + + +| Original Text | Revised Text | Changes | +|---------------|--------------|---------| +| The exact original passage | The suggested revision | Brief explanation of what changed and why | + + + +| Original Text | Revised Text | Changes | +|---------------|--------------|---------| +| The system will processes data and it handles errors. | The system processes data and handles errors. | Fixed subject-verb agreement ("will processes" to "processes"); removed redundant "it" | +| Users can chose from options (lines 12, 45, 78) | Users can choose from options | Fixed spelling: "chose" to "choose" (appears in 3 locations) | + + + + + + HALT with error if content is empty or fewer than 3 words + HALT with error if reader_type is not "humans" or "llm" + If no issues found after thorough review, output "No editorial issues identified" (this is valid completion, not an error) + + + diff --git a/src/core/tasks/editorial-review-structure.xml b/src/core/tasks/editorial-review-structure.xml new file mode 100644 index 00000000..26ef400a --- /dev/null +++ b/src/core/tasks/editorial-review-structure.xml @@ -0,0 +1,198 @@ + + + + Review document structure and propose substantive changes + to improve clarity and flow-run this BEFORE copy editing + + + + + + + + + MANDATORY: Execute ALL steps in the flow section IN EXACT ORDER + DO NOT skip steps or change the sequence + HALT immediately when halt-conditions are met + Each action xml tag within step xml tag is a REQUIRED action to complete that step + You are a structural editor focused on HIGH-VALUE DENSITY + Brevity IS clarity: Concise writing respects limited attention spans and enables effective scanning + Every section must justify its existence-cut anything that delays understanding + True redundancy is failure + + Comprehension through calibration: Optimize for the minimum words needed to maintain understanding + Front-load value: Critical information comes first; nice-to-know comes last (or goes) + One source of truth: If information appears identically twice, consolidate + Scope discipline: Content that belongs in a different document should be cut or linked + Propose, don't execute: Output recommendations-user decides what to accept + CONTENT IS SACROSANCT: Never challenge ideas—only optimize how they're organized. + + + These elements serve human comprehension and engagement-preserve unless clearly wasteful: + Visual aids: Diagrams, images, and flowcharts anchor understanding + Expectation-setting: "What You'll Learn" helps readers confirm they're in the right place + Reader's Journey: Organize content biologically (linear progression), not logically (database) + Mental models: Overview before details prevents cognitive overload + Warmth: Encouraging tone reduces anxiety for new users + Whitespace: Admonitions and callouts provide visual breathing room + Summaries: Recaps help retention; they're reinforcement, not redundancy + Examples: Concrete illustrations make abstract concepts accessible + Engagement: "Flow" techniques (transitions, variety) are functional, not "fluff"-they maintain attention + + + When reader_type='llm', optimize for PRECISION and UNAMBIGUITY: + Dependency-first: Define concepts before usage to minimize hallucination risk + Cut emotional language, encouragement, and orientation sections + + IF concept is well-known from training (e.g., "conventional + commits", "REST APIs"): Reference the standard-don't re-teach it + ELSE: Be explicit-don't assume the LLM will infer correctly + + Use consistent terminology-same word for same concept throughout + Eliminate hedging ("might", "could", "generally")-use direct statements + Prefer structured formats (tables, lists, YAML) over prose + Reference known standards ("conventional commits", "Google style guide") to leverage training + STILL PROVIDE EXAMPLES even for known standards-grounds the LLM in your specific expectation + Unambiguous references-no unclear antecedents ("it", "this", "the above") + Note: LLM documents may be LONGER than human docs in some areas + (more explicit) while shorter in others (no warmth) + + + + Prerequisites: Setup/Context MUST precede action + Sequence: Steps must follow strict chronological or logical dependency order + Goal-oriented: clear 'Definition of Done' at the end + + + Random Access: No narrative flow required; user jumps to specific item + MECE: Topics are Mutually Exclusive and Collectively Exhaustive + Consistent Schema: Every item follows identical structure (e.g., Signature to Params to Returns) + + + Abstract to Concrete: Definition to Context to Implementation/Example + Scaffolding: Complex ideas built on established foundations + + + Meta-first: Inputs, usage constraints, and context defined before instructions + Separation of Concerns: Instructions (logic) separate from Data (content) + Step-by-step: Execution flow must be explicit and ordered + + + Top-down: Conclusion/Status/Recommendation starts the document + Grouping: Supporting context grouped logically below the headline + Ordering: Most critical information first + MECE: Arguments/Groups are Mutually Exclusive and Collectively Exhaustive + Evidence: Data supports arguments, never leads + + + + + + Check if content is empty or contains fewer than 3 words + HALT with error: "Content + too short for substantive review (minimum 3 words required)" + Validate reader_type is "humans" or "llm" (or not provided, defaulting to "humans") + HALT with error: "Invalid reader_type. Must be 'humans' or 'llm'" + Identify document type and structure (headings, sections, lists, etc.) + Note the current word count and section count + + + If purpose was provided, use it; otherwise infer from content + If target_audience was provided, use it; otherwise infer from content + Identify the core question the document answers + State in one sentence: "This document exists to help [audience] accomplish [goal]" + Select the most appropriate structural model from structure-models based on purpose/audience + Note reader_type and which principles apply (human-reader-principles or llm-reader-principles) + + + Map the document structure: list each major section with its word count + Evaluate structure against the selected model's primary rules + (e.g., 'Does recommendation come first?' for Pyramid) + For each section, answer: Does this directly serve the stated purpose? + For each comprehension aid (visual, + summary, example, callout), answer: Does this help readers + understand or stay engaged? + Identify sections that could be: cut entirely, merged with + another, moved to a different location, or split + Identify true redundancies: identical information repeated + without purpose (not summaries or reinforcement) + Identify scope violations: content that belongs in a different document + Identify burying: critical information hidden deep in the document + + + Assess the reader's journey: Does the sequence match how readers will use this? + Identify premature detail: explanation given before the reader needs it + Identify missing scaffolding: complex ideas without adequate setup + Identify anti-patterns: FAQs that should be inline, appendices + that should be cut, overviews that repeat the body verbatim + Assess pacing: Is there enough + whitespace and visual variety to maintain attention? + + + Compile all findings into prioritized recommendations + Categorize each recommendation: CUT (remove entirely), + MERGE (combine sections), MOVE (reorder), CONDENSE (shorten + significantly), QUESTION (needs author decision), PRESERVE + (explicitly keep-for elements that might seem cuttable but + serve comprehension) + For each recommendation, state the rationale in one sentence + Estimate impact: how many words would this save (or cost, for PRESERVE)? + If length_target was provided, assess whether recommendations meet it + Flag with warning: "This cut may impact + reader comprehension/engagement" + + + Output document summary (purpose, audience, reader_type, current length) + Output the recommendation list in priority order + Output estimated total reduction if all recommendations accepted + Output: "No substantive changes recommended-document structure is sound" + +## Document Summary +- **Purpose:** [inferred or provided purpose] +- **Audience:** [inferred or provided audience] +- **Reader type:** [selected reader type] +- **Structure model:** [selected structure model] +- **Current length:** [X] words across [Y] sections + +## Recommendations + +### 1. [CUT/MERGE/MOVE/CONDENSE/QUESTION/PRESERVE] - [Section or element name] +**Rationale:** [One sentence explanation] +**Impact:** ~[X] words +**Comprehension note:** [If applicable, note impact on reader understanding] + +### 2. ... + +## Summary +- **Total recommendations:** [N] +- **Estimated reduction:** [X] words ([Y]% of original) +- **Meets length target:** [Yes/No/No target specified] +- **Comprehension trade-offs:** [Note any cuts that sacrifice reader engagement for brevity] + + + + + HALT with error if content is empty or fewer than 3 words + HALT with error if reader_type is not "humans" or "llm" + If no structural issues found, output "No substantive changes + recommended" (this is valid completion, not an error) + + diff --git a/src/core/tasks/review-adversarial-general.xml b/src/core/tasks/review-adversarial-general.xml index 6e5df408..4e68ff9a 100644 --- a/src/core/tasks/review-adversarial-general.xml +++ b/src/core/tasks/review-adversarial-general.xml @@ -9,6 +9,11 @@ + MANDATORY: Execute ALL steps in the flow section IN EXACT ORDER + DO NOT skip steps or change the sequence + HALT immediately when halt-conditions are met + Each action xml tag within step xml tag is a REQUIRED action to complete that step + You are a cynical, jaded reviewer with zero patience for sloppy work The content was submitted by a clueless weasel and you expect to find problems Be skeptical of everything From eeebf152afd3f72338cd365e3b656745dbb66bd7 Mon Sep 17 00:00:00 2001 From: Murat K Ozcan <34237651+muratkeremozcan@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:27:25 -0600 Subject: [PATCH 16/22] docs: tea editorial review (#1313) * docs: tea editorial review * fix: addressed nit pick --- docs/explanation/features/tea-overview.md | 275 +++++----------------- 1 file changed, 62 insertions(+), 213 deletions(-) diff --git a/docs/explanation/features/tea-overview.md b/docs/explanation/features/tea-overview.md index 06fe96df..3fb95ab5 100644 --- a/docs/explanation/features/tea-overview.md +++ b/docs/explanation/features/tea-overview.md @@ -26,7 +26,7 @@ BMad does not mandate TEA. There are five valid ways to use it (or skip it). Pic 2. **TEA-only (Standalone)** - Use TEA on a non-BMad project. Bring your own requirements, acceptance criteria, and environments. - Typical sequence: `*test-design` (system or epic) -> `*atdd` and/or `*automate` -> optional `*test-review` -> `*trace` for coverage and gate decisions. - - Run `*framework` or `*ci` only if you want TEA to scaffold the harness or pipeline. + - Run `*framework` or `*ci` only if you want TEA to scaffold the harness or pipeline; they work best after you decide the stack/architecture. 3. **Integrated: Greenfield - BMad Method (Simple/Standard Work)** - Phase 3: system-level `*test-design`, then `*framework` and `*ci`. @@ -48,8 +48,29 @@ BMad does not mandate TEA. There are five valid ways to use it (or skip it). Pic If you are unsure, default to the integrated path for your track and adjust later. +## TEA Command Catalog + +| Command | Primary Outputs | Notes | With Playwright MCP Enhancements | +| -------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| `*framework` | Playwright/Cypress scaffold, `.env.example`, `.nvmrc`, sample specs | Use when no production-ready harness exists | - | +| `*ci` | CI workflow, selective test scripts, secrets checklist | Platform-aware (GitHub Actions default) | - | +| `*test-design` | Combined risk assessment, mitigation plan, and coverage strategy | Risk scoring + optional exploratory mode | **+ Exploratory**: Interactive UI discovery with browser automation (uncover actual functionality) | +| `*atdd` | Failing acceptance tests + implementation checklist | TDD red phase + optional recording mode | **+ Recording**: AI generation verified with live browser (accurate selectors from real DOM) | +| `*automate` | Prioritized specs, fixtures, README/script updates, DoD summary | Optional healing/recording, avoid duplicate coverage | **+ Healing**: Pattern fixes enhanced with visual debugging + **+ Recording**: AI verified with live browser | +| `*test-review` | Test quality review report with 0-100 score, violations, fixes | Reviews tests against knowledge base patterns | - | +| `*nfr-assess` | NFR assessment report with actions | Focus on security/performance/reliability | - | +| `*trace` | Phase 1: Coverage matrix, recommendations. Phase 2: Gate decision (PASS/CONCERNS/FAIL/WAIVED) | Two-phase workflow: traceability + gate decision | - | + ## TEA Workflow Lifecycle +**Phase Numbering Note:** BMad uses a 4-phase methodology with optional Phase 1 and a documentation prerequisite: + +- **Documentation** (Optional for brownfield): Prerequisite using `*document-project` +- **Phase 1** (Optional): Discovery/Analysis (`*brainstorm`, `*research`, `*product-brief`) +- **Phase 2** (Required): Planning (`*prd` creates PRD with FRs/NFRs) +- **Phase 3** (Track-dependent): Solutioning (`*architecture` → `*test-design` (system-level) → `*create-epics-and-stories` → TEA: `*framework`, `*ci` → `*implementation-readiness`) +- **Phase 4** (Required): Implementation (`*sprint-planning` → per-epic: `*test-design` → per-story: dev workflows) + TEA integrates into the BMad development lifecycle during Solutioning (Phase 3) and Implementation (Phase 4): ```mermaid @@ -132,62 +153,25 @@ graph TB style Waived fill:#9c27b0,stroke:#4a148c,stroke-width:3px,color:#000 ``` -**Phase Numbering Note:** BMad uses a 4-phase methodology with optional Phase 1 and documentation prerequisite: - -- **Documentation** (Optional for brownfield): Prerequisite using `*document-project` -- **Phase 1** (Optional): Discovery/Analysis (`*brainstorm`, `*research`, `*product-brief`) -- **Phase 2** (Required): Planning (`*prd` creates PRD with FRs/NFRs) -- **Phase 3** (Track-dependent): Solutioning (`*architecture` → `*test-design` (system-level) → `*create-epics-and-stories` → TEA: `*framework`, `*ci` → `*implementation-readiness`) -- **Phase 4** (Required): Implementation (`*sprint-planning` → per-epic: `*test-design` → per-story: dev workflows) - **TEA workflows:** `*framework` and `*ci` run once in Phase 3 after architecture. `*test-design` is **dual-mode**: - **System-level (Phase 3):** Run immediately after architecture/ADR drafting to produce `test-design-system.md` (testability review, ADR → test mapping, Architecturally Significant Requirements (ASRs), environment needs). Feeds the implementation-readiness gate. - **Epic-level (Phase 4):** Run per-epic to produce `test-design-epic-N.md` (risk, priorities, coverage plan). -Quick Flow track skips Phases 1 and 3. +The Quick Flow track skips Phases 1 and 3. BMad Method and Enterprise use all phases based on project needs. When an ADR or architecture draft is produced, run `*test-design` in **system-level** mode before the implementation-readiness gate. This ensures the ADR has an attached testability review and ADR → test mapping. Keep the test-design updated if ADRs change. -## Why TEA is Different from Other BMM Agents +## Why TEA Is Different from Other BMM Agents -TEA is the only BMM agent that operates in **multiple phases** (Phase 3 and Phase 4) and has its own **knowledge base architecture**. - -### Phase-Specific Agents (Standard Pattern) - -Most BMM agents work in a single phase: - -- **Phase 1 (Analysis)**: Analyst agent -- **Phase 2 (Planning)**: PM agent -- **Phase 3 (Solutioning)**: Architect agent -- **Phase 4 (Implementation)**: SM, DEV agents - -### TEA: Multi-Phase Quality Agent (Unique Pattern) - -TEA is **the only agent that operates in multiple phases**: - -``` -Phase 1 (Analysis) → [TEA not typically used] - ↓ -Phase 2 (Planning) → [PM defines requirements - TEA not active] - ↓ -Phase 3 (Solutioning) → TEA: *framework, *ci (test infrastructure AFTER architecture) - ↓ -Phase 4 (Implementation) → TEA: *test-design (per epic: "how do I test THIS feature?") - → TEA: *atdd, *automate, *test-review, *trace (per story) - ↓ -Epic/Release Gate → TEA: *nfr-assess, *trace Phase 2 (release decision) -``` +TEA spans multiple phases (Phase 3, Phase 4, and the release gate). Most BMM agents operate in a single phase. That multi-phase role is paired with a dedicated testing knowledge base so standards stay consistent across projects. ### TEA's 8 Workflows Across Phases -**Standard agents**: 1-3 workflows per phase -**TEA**: 8 workflows across Phase 3, Phase 4, and Release Gate - | Phase | TEA Workflows | Frequency | Purpose | | ----------- | --------------------------------------------------------- | ---------------- | ---------------------------------------------- | | **Phase 2** | (none) | - | Planning phase - PM defines requirements | -| **Phase 3** | \*framework, \*ci | Once per project | Setup test infrastructure AFTER architecture | +| **Phase 3** | \*test-design (system-level), \*framework, \*ci | Once per project | System testability review and test infrastructure setup | | **Phase 4** | \*test-design, \*atdd, \*automate, \*test-review, \*trace | Per epic/story | Test planning per epic, then per-story testing | | **Release** | \*nfr-assess, \*trace (Phase 2: gate) | Per epic/release | Go/no-go decision | @@ -197,17 +181,17 @@ Epic/Release Gate → TEA: *nfr-assess, *trace Phase 2 (release decision) TEA uniquely requires: -- **Extensive domain knowledge**: 30+ fragments covering test patterns, CI/CD, fixtures, quality practices, and optional playwright-utils integration -- **Cross-cutting concerns**: Domain-specific testing patterns that apply across all BMad projects (vs project-specific artifacts like PRDs/stories) -- **Optional integrations**: MCP capabilities (exploratory, verification) and playwright-utils support +- **Extensive domain knowledge**: Test patterns, CI/CD, fixtures, and quality practices +- **Cross-cutting concerns**: Standards that apply across all BMad projects (not just PRDs or stories) +- **Optional integrations**: Playwright-utils and MCP enhancements -This architecture enables TEA to maintain consistent, production-ready testing patterns across all BMad projects while operating across multiple development phases. +This architecture lets TEA maintain consistent, production-ready testing patterns while operating across multiple phases. -## High-Level Cheat Sheets +## Track Cheat Sheets (Condensed) These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks** across the **4-Phase Methodology** (Phase 1: Analysis, Phase 2: Planning, Phase 3: Solutioning, Phase 4: Implementation). -**Note:** Quick Flow projects typically don't require TEA (covered in Overview). These cheat sheets focus on BMad Method and Enterprise tracks where TEA adds value. +**Note:** The Quick Flow track typically doesn't require TEA (covered in Overview). These cheat sheets focus on BMad Method and Enterprise tracks where TEA adds value. **Legend for Track Deltas:** @@ -231,39 +215,15 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks* | **Phase 4**: Story Review | Execute `*test-review` (optional), re-run `*trace` | Address recommendations, update code/tests | Quality report, refreshed coverage matrix | | **Phase 4**: Release Gate | (Optional) `*test-review` for final audit, Run `*trace` (Phase 2) | Confirm Definition of Done, share release notes | Quality audit, Gate YAML + release summary | -
-Execution Notes - -- Run `*framework` only once per repo or when modern harness support is missing. -- **Phase 3 (Solutioning)**: After architecture is complete, run `*framework` and `*ci` to setup test infrastructure based on architectural decisions. -- **Phase 4 starts**: After solutioning is complete, sprint planning loads all epics. -- **`*test-design` runs per-epic**: At the beginning of working on each epic, run `*test-design` to create a test plan for THAT specific epic/feature. Output: `test-design-epic-N.md`. -- Use `*atdd` before coding when the team can adopt ATDD; share its checklist with the dev agent. -- Post-implementation, keep `*trace` current, expand coverage with `*automate`, optionally review test quality with `*test-review`. For release gate, run `*trace` with Phase 2 enabled to get deployment decision. -- Use `*test-review` after `*atdd` to validate generated tests, after `*automate` to ensure regression quality, or before gate for final audit. -- Clarification: `*test-review` is optional and only audits existing tests; run it after `*atdd` or `*automate` when you want a quality review, not as a required step. -- Clarification: `*atdd` outputs are not auto-consumed; share the ATDD doc/tests with the dev workflow. `*trace` does not run `*atdd`—it evaluates existing artifacts for coverage and gate readiness. -- Clarification: `*ci` is a one-time setup; recommended early (Phase 3 or before feature work), but it can be done later if it was skipped. - -
- -
-Worked Example – “Nova CRM” Greenfield Feature - -1. **Planning (Phase 2):** Analyst runs `*product-brief`; PM executes `*prd` to produce PRD with FRs/NFRs. -2. **Solutioning (Phase 3):** Architect completes `*architecture` for the new module; `*create-epics-and-stories` generates epics/stories based on architecture; TEA sets up test infrastructure via `*framework` and `*ci` based on architectural decisions; gate check validates planning completeness. -3. **Sprint Start (Phase 4):** Scrum Master runs `*sprint-planning` to load all epics into sprint status. -4. **Epic 1 Planning (Phase 4):** TEA runs `*test-design` to create test plan for Epic 1, producing `test-design-epic-1.md` with risk assessment. -5. **Story Implementation (Phase 4):** For each story in Epic 1, SM generates story via `*create-story`; TEA optionally runs `*atdd`; Dev implements with guidance from failing tests. -6. **Post-Dev (Phase 4):** TEA runs `*automate`, optionally `*test-review` to audit test quality, re-runs `*trace` to refresh coverage. -7. **Release Gate:** TEA runs `*trace` with Phase 2 enabled to generate gate decision. - -
+**Key notes:** +- Run `*framework` and `*ci` once in Phase 3 after architecture. +- Run `*test-design` per epic in Phase 4; use `*atdd` before dev when helpful. +- Use `*trace` for gate decisions; `*test-review` is an optional audit. ### Brownfield - BMad Method or Enterprise (Simple or Complex) **Planning Tracks:** BMad Method or Enterprise Method -**Use Case:** Existing codebases - simple additions (BMad Method) or complex enterprise requirements (Enterprise Method) +**Use Case:** Existing codebases: simple additions (BMad Method) or complex enterprise requirements (Enterprise Method) **🔄 Brownfield Deltas from Greenfield:** @@ -284,31 +244,10 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks* | **Phase 4**: Story Review | Apply `*test-review` (optional), re-run `*trace`, ➕ `*nfr-assess` if needed | Resolve gaps, update docs/tests | Quality report, refreshed coverage matrix, NFR report | | **Phase 4**: Release Gate | (Optional) `*test-review` for final audit, Run `*trace` (Phase 2) | Capture sign-offs, share release notes | Quality audit, Gate YAML + release summary | -
-Execution Notes - -- Lead with `*trace` during Planning (Phase 2) to baseline existing test coverage before architecture work begins. -- **Phase 3 (Solutioning)**: After architecture is complete, run `*framework` and `*ci` to modernize test infrastructure. For brownfield, framework may need to integrate with or replace existing test setup. -- **Phase 4 starts**: After solutioning is complete and sprint planning loads all epics. -- **`*test-design` runs per-epic**: At the beginning of working on each epic, run `*test-design` to identify regression hotspots, integration risks, and mitigation strategies for THAT specific epic/feature. Output: `test-design-epic-N.md`. -- Use `*atdd` when stories benefit from ATDD; otherwise proceed to implementation and rely on post-dev automation. -- After development, expand coverage with `*automate`, optionally review test quality with `*test-review`, re-run `*trace` (Phase 2 for gate decision). Run `*nfr-assess` now if non-functional risks weren't addressed earlier. -- Use `*test-review` to validate existing brownfield tests or audit new tests before gate. - -
- -
-Worked Example – “Atlas Payments” Brownfield Story - -1. **Planning (Phase 2):** PM executes `*prd` to create PRD with FRs/NFRs; TEA runs `*trace` to baseline existing coverage. -2. **Solutioning (Phase 3):** Architect triggers `*architecture` capturing legacy payment flows and integration architecture; `*create-epics-and-stories` generates Epic 1 (Payment Processing) based on architecture; TEA sets up `*framework` and `*ci` based on architectural decisions; gate check validates planning. -3. **Sprint Start (Phase 4):** Scrum Master runs `*sprint-planning` to load Epic 1 into sprint status. -4. **Epic 1 Planning (Phase 4):** TEA runs `*test-design` for Epic 1 (Payment Processing), producing `test-design-epic-1.md` that flags settlement edge cases, regression hotspots, and mitigation plans. -5. **Story Implementation (Phase 4):** For each story in Epic 1, SM generates story via `*create-story`; TEA runs `*atdd` producing failing Playwright specs; Dev implements with guidance from tests and checklist. -6. **Post-Dev (Phase 4):** TEA applies `*automate`, optionally `*test-review` to audit test quality, re-runs `*trace` to refresh coverage. -7. **Release Gate:** TEA performs `*nfr-assess` to validate SLAs, runs `*trace` with Phase 2 enabled to generate gate decision (PASS/CONCERNS/FAIL). - -
+**Key notes:** +- Start with `*trace` in Phase 2 to baseline coverage. +- Focus `*test-design` on regression hotspots and integration risk. +- Run `*nfr-assess` before the gate if it wasn't done earlier. ### Greenfield - Enterprise Method (Enterprise/Compliance Work) @@ -332,105 +271,36 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks* | **Phase 4**: Story Dev | (Optional) `*atdd`, `*automate`, `*test-review`, `*trace` per story | SM `*create-story`, DEV implements | Tests, fixtures, quality reports, coverage matrices | | **Phase 4**: Release Gate | Final `*test-review` audit, Run `*trace` (Phase 2), 📦 archive artifacts | Capture sign-offs, 📦 compliance evidence | Quality audit, updated assessments, gate YAML, 📦 audit trail | -
-Execution Notes +**Key notes:** +- Run `*nfr-assess` early in Phase 2. +- `*test-design` emphasizes compliance, security, and performance alignment. +- Archive artifacts at the release gate for audits. -- `*nfr-assess` runs early in Planning (Phase 2) to capture compliance, security, and performance requirements upfront. -- **Phase 3 (Solutioning)**: After architecture is complete, run `*framework` and `*ci` with enterprise-grade configurations (selective testing, burn-in jobs, caching, notifications). -- **Phase 4 starts**: After solutioning is complete and sprint planning loads all epics. -- **`*test-design` runs per-epic**: At the beginning of working on each epic, run `*test-design` to create an enterprise-focused test plan for THAT specific epic, ensuring alignment with security architecture, performance targets, and compliance requirements. Output: `test-design-epic-N.md`. -- Use `*atdd` for stories when feasible so acceptance tests can lead implementation. -- Use `*test-review` per story or sprint to maintain quality standards and ensure compliance with testing best practices. -- Prior to release, rerun coverage (`*trace`, `*automate`), perform final quality audit with `*test-review`, and formalize the decision with `*trace` Phase 2 (gate decision); archive artifacts for compliance audits. +**Related how-to guides:** +- [How to Run Test Design](/docs/how-to/workflows/run-test-design.md) +- [How to Set Up a Test Framework](/docs/how-to/workflows/setup-test-framework.md) -
+## Optional Integrations -
-Worked Example – “Helios Ledger” Enterprise Release +### Playwright Utils (`@seontechnologies/playwright-utils`) -1. **Planning (Phase 2):** Analyst runs `*research` and `*product-brief`; PM completes `*prd` creating PRD with FRs/NFRs; TEA runs `*nfr-assess` to establish NFR targets. -2. **Solutioning (Phase 3):** Architect completes `*architecture` with enterprise considerations; `*create-epics-and-stories` generates epics/stories based on architecture; TEA sets up `*framework` and `*ci` with enterprise-grade configurations based on architectural decisions; gate check validates planning completeness. -3. **Sprint Start (Phase 4):** Scrum Master runs `*sprint-planning` to load all epics into sprint status. -4. **Per-Epic (Phase 4):** For each epic, TEA runs `*test-design` to create epic-specific test plan (e.g., `test-design-epic-1.md`, `test-design-epic-2.md`) with compliance-focused risk assessment. -5. **Per-Story (Phase 4):** For each story, TEA uses `*atdd`, `*automate`, `*test-review`, and `*trace`; Dev teams iterate on the findings. -6. **Release Gate:** TEA re-checks coverage, performs final quality audit with `*test-review`, and logs the final gate decision via `*trace` Phase 2, archiving artifacts for compliance. +Production-ready fixtures and utilities that enhance TEA workflows. -
+- Install: `npm install -D @seontechnologies/playwright-utils` +> Note: Playwright Utils is enabled via the installer. Only set `tea_use_playwright_utils` in `_bmad/bmm/config.yaml` if you need to override the installer choice. +- Impacts: `*framework`, `*atdd`, `*automate`, `*test-review`, `*ci` +- Utilities include: api-request, auth-session, network-recorder, intercept-network-call, recurse, log, file-utils, burn-in, network-error-monitor, fixtures-composition -## TEA Command Catalog +### Playwright MCP Enhancements -| Command | Primary Outputs | Notes | With Playwright MCP Enhancements | -| -------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -| `*framework` | Playwright/Cypress scaffold, `.env.example`, `.nvmrc`, sample specs | Use when no production-ready harness exists | - | -| `*ci` | CI workflow, selective test scripts, secrets checklist | Platform-aware (GitHub Actions default) | - | -| `*test-design` | Combined risk assessment, mitigation plan, and coverage strategy | Risk scoring + optional exploratory mode | **+ Exploratory**: Interactive UI discovery with browser automation (uncover actual functionality) | -| `*atdd` | Failing acceptance tests + implementation checklist | TDD red phase + optional recording mode | **+ Recording**: AI generation verified with live browser (accurate selectors from real DOM) | -| `*automate` | Prioritized specs, fixtures, README/script updates, DoD summary | Optional healing/recording, avoid duplicate coverage | **+ Healing**: Pattern fixes enhanced with visual debugging + **+ Recording**: AI verified with live browser | -| `*test-review` | Test quality review report with 0-100 score, violations, fixes | Reviews tests against knowledge base patterns | - | -| `*nfr-assess` | NFR assessment report with actions | Focus on security/performance/reliability | - | -| `*trace` | Phase 1: Coverage matrix, recommendations. Phase 2: Gate decision (PASS/CONCERNS/FAIL/WAIVED) | Two-phase workflow: traceability + gate decision | - | - -## Playwright Utils Integration - -TEA optionally integrates with `@seontechnologies/playwright-utils`, an open-source library providing fixture-based utilities for Playwright tests. This integration enhances TEA's test generation and review workflows with production-ready patterns. - -
-Installation & Configuration - -**Package**: `@seontechnologies/playwright-utils` ([npm](https://www.npmjs.com/package/@seontechnologies/playwright-utils) | [GitHub](https://github.com/seontechnologies/playwright-utils)) - -**Install**: `npm install -D @seontechnologies/playwright-utils` - -**Enable during BMAD installation** by answering "Yes" when prompted, or manually set `tea_use_playwright_utils: true` in `_bmad/bmm/config.yaml`. - -**To disable**: Set `tea_use_playwright_utils: false` in `_bmad/bmm/config.yaml`. - -
- -
-How Playwright Utils Enhances TEA Workflows - -1. `*framework`: - - Default: Basic Playwright scaffold - - **+ playwright-utils**: Scaffold with api-request, network-recorder, auth-session, burn-in, network-error-monitor fixtures pre-configured - - Benefit: Production-ready patterns from day one - -2. `*automate`, `*atdd`: - - Default: Standard test patterns - - **+ playwright-utils**: Tests using api-request (schema validation), intercept-network-call (mocking), recurse (polling), log (structured logging), file-utils (CSV/PDF) - - Benefit: Advanced patterns without boilerplate - -3. `*test-review`: - - Default: Reviews against core knowledge base (22 fragments) - - **+ playwright-utils**: Reviews against expanded knowledge base (33 fragments: 22 core + 11 playwright-utils) - - Benefit: Reviews include fixture composition, auth patterns, network recording best practices - -4. `*ci`: - - Default: Standard CI workflow - - **+ playwright-utils**: CI workflow with burn-in script (smart test selection) and network-error-monitor integration - - Benefit: Faster CI feedback, HTTP error detection - -**Utilities available** (10 total): api-request, network-recorder, auth-session, intercept-network-call, recurse, log, file-utils, burn-in, network-error-monitor, fixtures-composition - -
- -## Playwright MCP Enhancements - -TEA can leverage Playwright MCP servers to enhance test generation with live browser verification. MCP provides interactive capabilities on top of TEA's default AI-based approach. - -
-MCP Server Configuration +Live browser verification for test design and automation. **Two Playwright MCP servers** (actively maintained, continuously updated): - `playwright` - Browser automation (`npx @playwright/mcp@latest`) - `playwright-test` - Test runner with failure analysis (`npx playwright run-test-mcp-server`) -**Config example**: +**Configuration example**: ```json { @@ -447,29 +317,8 @@ TEA can leverage Playwright MCP servers to enhance test generation with live bro } ``` -**To disable**: Set `tea_use_mcp_enhancements: false` in `_bmad/bmm/config.yaml` OR remove MCPs from IDE config. +- Helps `*test-design` validate actual UI behavior. +- Helps `*atdd` and `*automate` verify selectors against the live DOM. +- Enhances healing with `browser_snapshot`, console, network, and locator tools. -
- -
-How MCP Enhances TEA Workflows - -1. `*test-design`: - - Default: Analysis + documentation - - **+ MCP**: Interactive UI discovery with `browser_navigate`, `browser_click`, `browser_snapshot`, behavior observation - - Benefit: Discover actual functionality, edge cases, undocumented features - -2. `*atdd`, `*automate`: - - Default: Infers selectors and interactions from requirements and knowledge fragments - - **+ MCP**: Generates tests **then** verifies with `generator_setup_page`, `browser_*` tools, validates against live app - - Benefit: Accurate selectors from real DOM, verified behavior, refined test code - -3. `*automate` (healing mode): - - Default: Pattern-based fixes from error messages + knowledge fragments - - **+ MCP**: Pattern fixes **enhanced with** `browser_snapshot`, `browser_console_messages`, `browser_network_requests`, `browser_generate_locator` - - Benefit: Visual failure context, live DOM inspection, root cause discovery - -
+**To disable**: set `tea_use_mcp_enhancements: false` in `_bmad/bmm/config.yaml` or remove MCPs from IDE config. From 5cb5606ba3cfa575365464afe2a9892c0aacd15f Mon Sep 17 00:00:00 2001 From: Davor Racic Date: Wed, 14 Jan 2026 23:25:35 +0100 Subject: [PATCH 17/22] fix(cli): replace inquirer with @clack/prompts for Windows compatibility (#1316) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(cli): replace inquirer with @clack/prompts for Windows compatibility - Add new prompts.js wrapper around @clack/prompts to fix Windows arrow key navigation issues (libuv #852) - Fix validation logic in github-copilot.js that always returned true - Add support for primitive choice values (string/number) in select/multiselect - Add 'when' property support for conditional questions in prompt() - Update all IDE installers to use new prompts module Co-Authored-By: Claude Opus 4.5 * fix(cli): address code review feedback for prompts migration - Move @clack/prompts from devDependencies to dependencies (critical) - Remove unused inquirer dependency - Fix potential crash in multiselect when initialValues is undefined - Add async validator detection with explicit error message - Extract validateCustomContentPathSync method in ui.js - Extract promptInstallLocation methods in claude-code.js and antigravity.js - Fix moduleId -> missing.id in installer.js remove flow - Update multiselect to support native clack API (options/initialValues) Co-Authored-By: Claude Opus 4.5 * chore: update comments to reference @clack/prompts instead of inquirer - Update bmad-cli.js comment about CLI prompts - Update config-collector.js JSDoc comments - Rename inquirer variable to choiceUtils in ui.js - Update JSDoc returns and calls documentation Co-Authored-By: Claude Opus 4.5 * fix(cli): add spacing between prompts and installation progress Co-Authored-By: Claude Opus 4.5 * fix(cli): add multiselect usage hints for inexperienced users Add inline navigation hints to all multiselect prompts showing (↑/↓ navigate, SPACE select, ENTER confirm) to help users unfamiliar with terminal multiselect controls. Also restore detailed warning when no tools are selected, explaining that SPACE must be pressed to select items. Co-Authored-By: Claude Opus 4.5 * feat(cli): restore IDE grouping using groupMultiselect Replace flat multiselect with native @clack/prompts groupMultiselect component to restore visual grouping of IDE/tool options: - "Previously Configured" - pre-selected IDEs from existing install - "Recommended Tools" - starred preferred options - "Additional Tools" - other available options This restores the grouped UX that was lost during the Inquirer.js to @clack/prompts migration. Co-Authored-By: Claude Opus 4.5 --------- Co-authored-by: Claude Opus 4.5 --- package-lock.json | 188 +---- package.json | 2 +- tools/cli/bmad-cli.js | 2 +- tools/cli/commands/install.js | 12 +- .../installers/lib/core/config-collector.js | 26 +- tools/cli/installers/lib/core/installer.js | 166 ++--- tools/cli/installers/lib/ide/antigravity.js | 91 +-- tools/cli/installers/lib/ide/claude-code.js | 91 +-- tools/cli/installers/lib/ide/codex.js | 51 +- .../cli/installers/lib/ide/github-copilot.js | 32 +- tools/cli/lib/prompts.js | 432 +++++++++++ tools/cli/lib/ui.js | 691 +++++++++--------- 12 files changed, 982 insertions(+), 802 deletions(-) create mode 100644 tools/cli/lib/prompts.js diff --git a/package-lock.json b/package-lock.json index ba812f09..18fd9a25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "fs-extra": "^11.3.0", "glob": "^11.0.3", "ignore": "^7.0.5", - "inquirer": "^9.3.8", "js-yaml": "^4.1.0", "ora": "^5.4.1", "semver": "^7.6.3", @@ -34,6 +33,7 @@ "devDependencies": { "@astrojs/sitemap": "^3.6.0", "@astrojs/starlight": "^0.37.0", + "@clack/prompts": "^0.11.0", "@eslint/js": "^9.33.0", "archiver": "^7.0.1", "astro": "^5.16.0", @@ -244,7 +244,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -756,6 +755,29 @@ "node": ">=18" } }, + "node_modules/@clack/core": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@clack/core": "0.5.0", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -1998,36 +2020,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", @@ -3641,9 +3633,8 @@ "version": "25.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", - "devOptional": true, + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3983,7 +3974,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4031,6 +4021,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -4046,6 +4037,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -4290,7 +4282,6 @@ "integrity": "sha512-6mF/YrvwwRxLTu+aMEa5pwzKUNl5ZetWbTyZCs9Um0F12HUmxUiF5UHiZPy4rifzU3gtpM3xP2DfdmkNX9eZRg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -5358,7 +5349,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -5601,12 +5591,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", - "license": "MIT" - }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -5787,15 +5771,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -6689,7 +6664,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -8269,22 +8243,6 @@ "@babel/runtime": "^7.23.2" } }, - "node_modules/iconv-lite": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -8420,43 +8378,6 @@ "dev": true, "license": "MIT" }, - "node_modules/inquirer": { - "version": "9.3.8", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.8.tgz", - "integrity": "sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==", - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.2", - "@inquirer/figures": "^1.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/iron-webcrypto": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", @@ -10304,7 +10225,6 @@ "integrity": "sha512-p3JTemJJbkiMjXEMiFwgm0v6ym5g8K+b2oDny+6xdl300tUKySxvilJQLSea48C6OaYNmO30kH9KxpiAg5bWJw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "globby": "15.0.0", "js-yaml": "4.1.1", @@ -11576,15 +11496,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/nano-spawn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", @@ -12378,7 +12289,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12444,7 +12354,6 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13273,7 +13182,6 @@ "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -13310,15 +13218,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -13343,15 +13242,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -13372,12 +13262,6 @@ ], "license": "MIT" }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, "node_modules/sax": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", @@ -14251,6 +14135,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, "license": "0BSD" }, "node_modules/type-check": { @@ -14335,7 +14220,7 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/unicode-properties": { @@ -14837,7 +14722,6 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -15111,7 +14995,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -15270,18 +15153,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zip-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", @@ -15303,7 +15174,6 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 0f8953f3..7cf03d1c 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ ] }, "dependencies": { + "@clack/prompts": "^0.11.0", "@kayvan/markdown-tree-parser": "^1.6.1", "boxen": "^5.1.2", "chalk": "^4.1.2", @@ -77,7 +78,6 @@ "fs-extra": "^11.3.0", "glob": "^11.0.3", "ignore": "^7.0.5", - "inquirer": "^9.3.8", "js-yaml": "^4.1.0", "ora": "^5.4.1", "semver": "^7.6.3", diff --git a/tools/cli/bmad-cli.js b/tools/cli/bmad-cli.js index 0cba5814..ad3aac34 100755 --- a/tools/cli/bmad-cli.js +++ b/tools/cli/bmad-cli.js @@ -3,7 +3,7 @@ const path = require('node:path'); const fs = require('node:fs'); // Fix for stdin issues when running through npm on Windows -// Ensures keyboard interaction works properly with inquirer prompts +// Ensures keyboard interaction works properly with CLI prompts if (process.stdin.isTTY) { try { process.stdin.resume(); diff --git a/tools/cli/commands/install.js b/tools/cli/commands/install.js index f71d5679..26b6425e 100644 --- a/tools/cli/commands/install.js +++ b/tools/cli/commands/install.js @@ -71,14 +71,10 @@ module.exports = { console.log(chalk.dim(' • ElevenLabs AI (150+ premium voices)')); console.log(chalk.dim(' • Piper TTS (50+ free voices)\n')); - const { default: inquirer } = await import('inquirer'); - await inquirer.prompt([ - { - type: 'input', - name: 'continue', - message: chalk.green('Press Enter to start AgentVibes installer...'), - }, - ]); + const prompts = require('../lib/prompts'); + await prompts.text({ + message: chalk.green('Press Enter to start AgentVibes installer...'), + }); console.log(''); diff --git a/tools/cli/installers/lib/core/config-collector.js b/tools/cli/installers/lib/core/config-collector.js index fb48b68d..ee486955 100644 --- a/tools/cli/installers/lib/core/config-collector.js +++ b/tools/cli/installers/lib/core/config-collector.js @@ -4,15 +4,7 @@ const yaml = require('yaml'); const chalk = require('chalk'); const { getProjectRoot, getModulePath } = require('../../../lib/project-root'); const { CLIUtils } = require('../../../lib/cli-utils'); - -// Lazy-load inquirer (ESM module) to avoid ERR_REQUIRE_ESM -let _inquirer = null; -async function getInquirer() { - if (!_inquirer) { - _inquirer = (await import('inquirer')).default; - } - return _inquirer; -} +const prompts = require('../../../lib/prompts'); class ConfigCollector { constructor() { @@ -183,7 +175,6 @@ class ConfigCollector { * @returns {boolean} True if new fields were prompted, false if all fields existed */ async collectModuleConfigQuick(moduleName, projectDir, silentMode = true) { - const inquirer = await getInquirer(); this.currentProjectDir = projectDir; // Load existing config if not already loaded @@ -359,7 +350,7 @@ class ConfigCollector { // Only show header if we actually have questions CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader); console.log(); // Line break before questions - const promptedAnswers = await inquirer.prompt(questions); + const promptedAnswers = await prompts.prompt(questions); // Merge prompted answers with static answers Object.assign(allAnswers, promptedAnswers); @@ -502,7 +493,6 @@ class ConfigCollector { * @param {boolean} skipCompletion - Skip showing completion message (for early core collection) */ async collectModuleConfig(moduleName, projectDir, skipLoadExisting = false, skipCompletion = false) { - const inquirer = await getInquirer(); this.currentProjectDir = projectDir; // Load existing config if needed and not already loaded if (!skipLoadExisting && !this.existingConfig) { @@ -597,7 +587,7 @@ class ConfigCollector { console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName)); let customize = true; if (moduleName !== 'core') { - const customizeAnswer = await inquirer.prompt([ + const customizeAnswer = await prompts.prompt([ { type: 'confirm', name: 'customize', @@ -614,7 +604,7 @@ class ConfigCollector { if (questionsWithoutDefaults.length > 0) { console.log(chalk.dim(`\n Asking required questions for ${moduleName.toUpperCase()}...`)); - const promptedAnswers = await inquirer.prompt(questionsWithoutDefaults); + const promptedAnswers = await prompts.prompt(questionsWithoutDefaults); Object.assign(allAnswers, promptedAnswers); } @@ -628,7 +618,7 @@ class ConfigCollector { allAnswers[question.name] = question.default; } } else { - const promptedAnswers = await inquirer.prompt(questions); + const promptedAnswers = await prompts.prompt(questions); Object.assign(allAnswers, promptedAnswers); } } @@ -750,7 +740,7 @@ class ConfigCollector { console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName)); // Ask user if they want to accept defaults or customize on the next line - const { customize } = await inquirer.prompt([ + const { customize } = await prompts.prompt([ { type: 'confirm', name: 'customize', @@ -845,7 +835,7 @@ class ConfigCollector { } /** - * Build an inquirer question from a config item + * Build a prompt question from a config item * @param {string} moduleName - Module name * @param {string} key - Config key * @param {Object} item - Config item definition @@ -1007,7 +997,7 @@ class ConfigCollector { message: message, }; - // Set default - if it's dynamic, use a function that inquirer will evaluate with current answers + // Set default - if it's dynamic, use a function that the prompt will evaluate with current answers // But if we have an existing value, always use that instead if (existingValue !== null && existingValue !== undefined && questionType !== 'list') { question.default = existingValue; diff --git a/tools/cli/installers/lib/core/installer.js b/tools/cli/installers/lib/core/installer.js index 8b7e05fd..97506847 100644 --- a/tools/cli/installers/lib/core/installer.js +++ b/tools/cli/installers/lib/core/installer.js @@ -16,6 +16,7 @@ const { CLIUtils } = require('../../../lib/cli-utils'); const { ManifestGenerator } = require('./manifest-generator'); const { IdeConfigManager } = require('./ide-config-manager'); const { CustomHandler } = require('../custom/handler'); +const prompts = require('../../../lib/prompts'); // BMAD installation folder name - this is constant and should never change const BMAD_FOLDER_NAME = '_bmad'; @@ -758,6 +759,9 @@ class Installer { config.skipIde = toolSelection.skipIde; const ideConfigurations = toolSelection.configurations; + // Add spacing after prompts before installation progress + console.log(''); + if (spinner.isSpinning) { spinner.text = 'Continuing installation...'; } else { @@ -2139,15 +2143,11 @@ class Installer { * Private: Prompt for update action */ async promptUpdateAction() { - const { default: inquirer } = await import('inquirer'); - return await inquirer.prompt([ - { - type: 'list', - name: 'action', - message: 'What would you like to do?', - choices: [{ name: 'Update existing installation', value: 'update' }], - }, - ]); + const action = await prompts.select({ + message: 'What would you like to do?', + choices: [{ name: 'Update existing installation', value: 'update' }], + }); + return { action }; } /** @@ -2156,8 +2156,6 @@ class Installer { * @param {Object} _legacyV4 - Legacy V4 detection result (unused in simplified version) */ async handleLegacyV4Migration(_projectDir, _legacyV4) { - const { default: inquirer } = await import('inquirer'); - console.log(''); console.log(chalk.yellow.bold('⚠️ Legacy BMAD v4 detected')); console.log(chalk.yellow('─'.repeat(80))); @@ -2172,26 +2170,22 @@ class Installer { console.log(chalk.dim('If your v4 installation set up rules or commands, you should remove those as well.')); console.log(''); - const { proceed } = await inquirer.prompt([ - { - type: 'list', - name: 'proceed', - message: 'What would you like to do?', - choices: [ - { - name: 'Exit and clean up manually (recommended)', - value: 'exit', - short: 'Exit installation', - }, - { - name: 'Continue with installation anyway', - value: 'continue', - short: 'Continue', - }, - ], - default: 'exit', - }, - ]); + const proceed = await prompts.select({ + message: 'What would you like to do?', + choices: [ + { + name: 'Exit and clean up manually (recommended)', + value: 'exit', + hint: 'Exit installation', + }, + { + name: 'Continue with installation anyway', + value: 'continue', + hint: 'Continue', + }, + ], + default: 'exit', + }); if (proceed === 'exit') { console.log(''); @@ -2437,7 +2431,6 @@ class Installer { console.log(chalk.yellow(`\n⚠️ Found ${customModulesWithMissingSources.length} custom module(s) with missing sources:`)); - const { default: inquirer } = await import('inquirer'); let keptCount = 0; let updatedCount = 0; let removedCount = 0; @@ -2451,12 +2444,12 @@ class Installer { { name: 'Keep installed (will not be processed)', value: 'keep', - short: 'Keep', + hint: 'Keep', }, { name: 'Specify new source location', value: 'update', - short: 'Update', + hint: 'Update', }, ]; @@ -2465,47 +2458,40 @@ class Installer { choices.push({ name: '⚠️ REMOVE module completely (destructive!)', value: 'remove', - short: 'Remove', + hint: 'Remove', }); } - const { action } = await inquirer.prompt([ - { - type: 'list', - name: 'action', - message: `How would you like to handle "${missing.name}"?`, - choices, - }, - ]); + const action = await prompts.select({ + message: `How would you like to handle "${missing.name}"?`, + choices, + }); switch (action) { case 'update': { - const { newSourcePath } = await inquirer.prompt([ - { - type: 'input', - name: 'newSourcePath', - message: 'Enter the new path to the custom module:', - default: missing.sourcePath, - validate: async (input) => { - if (!input || input.trim() === '') { - return 'Please enter a path'; - } - const expandedPath = path.resolve(input.trim()); - if (!(await fs.pathExists(expandedPath))) { - return 'Path does not exist'; - } - // Check if it looks like a valid module - const moduleYamlPath = path.join(expandedPath, 'module.yaml'); - const agentsPath = path.join(expandedPath, 'agents'); - const workflowsPath = path.join(expandedPath, 'workflows'); + // Use sync validation because @clack/prompts doesn't support async validate + const newSourcePath = await prompts.text({ + message: 'Enter the new path to the custom module:', + default: missing.sourcePath, + validate: (input) => { + if (!input || input.trim() === '') { + return 'Please enter a path'; + } + const expandedPath = path.resolve(input.trim()); + if (!fs.pathExistsSync(expandedPath)) { + return 'Path does not exist'; + } + // Check if it looks like a valid module + const moduleYamlPath = path.join(expandedPath, 'module.yaml'); + const agentsPath = path.join(expandedPath, 'agents'); + const workflowsPath = path.join(expandedPath, 'workflows'); - if (!(await fs.pathExists(moduleYamlPath)) && !(await fs.pathExists(agentsPath)) && !(await fs.pathExists(workflowsPath))) { - return 'Path does not appear to contain a valid custom module'; - } - return true; - }, + if (!fs.pathExistsSync(moduleYamlPath) && !fs.pathExistsSync(agentsPath) && !fs.pathExistsSync(workflowsPath)) { + return 'Path does not appear to contain a valid custom module'; + } + return; // clack expects undefined for valid input }, - ]); + }); // Update the source in manifest const resolvedPath = path.resolve(newSourcePath.trim()); @@ -2531,46 +2517,38 @@ class Installer { console.log(chalk.red.bold(`\n⚠️ WARNING: This will PERMANENTLY DELETE "${missing.name}" and all its files!`)); console.log(chalk.red(` Module location: ${path.join(bmadDir, missing.id)}`)); - const { confirm } = await inquirer.prompt([ - { - type: 'confirm', - name: 'confirm', - message: chalk.red.bold('Are you absolutely sure you want to delete this module?'), - default: false, - }, - ]); + const confirmDelete = await prompts.confirm({ + message: chalk.red.bold('Are you absolutely sure you want to delete this module?'), + default: false, + }); - if (confirm) { - const { typedConfirm } = await inquirer.prompt([ - { - type: 'input', - name: 'typedConfirm', - message: chalk.red.bold('Type "DELETE" to confirm permanent deletion:'), - validate: (input) => { - if (input !== 'DELETE') { - return chalk.red('You must type "DELETE" exactly to proceed'); - } - return true; - }, + if (confirmDelete) { + const typedConfirm = await prompts.text({ + message: chalk.red.bold('Type "DELETE" to confirm permanent deletion:'), + validate: (input) => { + if (input !== 'DELETE') { + return chalk.red('You must type "DELETE" exactly to proceed'); + } + return; // clack expects undefined for valid input }, - ]); + }); if (typedConfirm === 'DELETE') { // Remove the module from filesystem and manifest - const modulePath = path.join(bmadDir, moduleId); + const modulePath = path.join(bmadDir, missing.id); if (await fs.pathExists(modulePath)) { const fsExtra = require('fs-extra'); await fsExtra.remove(modulePath); console.log(chalk.yellow(` ✓ Deleted module directory: ${path.relative(projectRoot, modulePath)}`)); } - await this.manifest.removeModule(bmadDir, moduleId); - await this.manifest.removeCustomModule(bmadDir, moduleId); + await this.manifest.removeModule(bmadDir, missing.id); + await this.manifest.removeCustomModule(bmadDir, missing.id); console.log(chalk.yellow(` ✓ Removed from manifest`)); // Also remove from installedModules list - if (installedModules && installedModules.includes(moduleId)) { - const index = installedModules.indexOf(moduleId); + if (installedModules && installedModules.includes(missing.id)) { + const index = installedModules.indexOf(missing.id); if (index !== -1) { installedModules.splice(index, 1); } @@ -2591,7 +2569,7 @@ class Installer { } case 'keep': { keptCount++; - keptModulesWithoutSources.push(moduleId); + keptModulesWithoutSources.push(missing.id); console.log(chalk.dim(` Module will be kept as-is`)); break; diff --git a/tools/cli/installers/lib/ide/antigravity.js b/tools/cli/installers/lib/ide/antigravity.js index c896d62d..57071cdc 100644 --- a/tools/cli/installers/lib/ide/antigravity.js +++ b/tools/cli/installers/lib/ide/antigravity.js @@ -13,6 +13,7 @@ const { resolveSubagentFiles, } = require('./shared/module-injections'); const { getAgentsFromBmad, getAgentsFromDir } = require('./shared/bmad-artifacts'); +const prompts = require('../../../lib/prompts'); /** * Google Antigravity IDE setup handler @@ -26,6 +27,21 @@ class AntigravitySetup extends BaseIdeSetup { this.workflowsDir = 'workflows'; } + /** + * Prompt for subagent installation location + * @returns {Promise} Selected location ('project' or 'user') + */ + async _promptInstallLocation() { + return prompts.select({ + message: 'Where would you like to install Antigravity subagents?', + choices: [ + { name: 'Project level (.agent/agents/)', value: 'project' }, + { name: 'User level (~/.agent/agents/)', value: 'user' }, + ], + default: 'project', + }); + } + /** * Collect configuration choices before installation * @param {Object} options - Configuration options @@ -57,21 +73,7 @@ class AntigravitySetup extends BaseIdeSetup { config.subagentChoices = await this.promptSubagentInstallation(injectionConfig.subagents); if (config.subagentChoices.install !== 'none') { - // Ask for installation location - const { default: inquirer } = await import('inquirer'); - const locationAnswer = await inquirer.prompt([ - { - type: 'list', - name: 'location', - message: 'Where would you like to install Antigravity subagents?', - choices: [ - { name: 'Project level (.agent/agents/)', value: 'project' }, - { name: 'User level (~/.agent/agents/)', value: 'user' }, - ], - default: 'project', - }, - ]); - config.installLocation = locationAnswer.location; + config.installLocation = await this._promptInstallLocation(); } } } catch (error) { @@ -297,20 +299,7 @@ class AntigravitySetup extends BaseIdeSetup { choices = await this.promptSubagentInstallation(config.subagents); if (choices.install !== 'none') { - const { default: inquirer } = await import('inquirer'); - const locationAnswer = await inquirer.prompt([ - { - type: 'list', - name: 'location', - message: 'Where would you like to install Antigravity subagents?', - choices: [ - { name: 'Project level (.agent/agents/)', value: 'project' }, - { name: 'User level (~/.agent/agents/)', value: 'user' }, - ], - default: 'project', - }, - ]); - location = locationAnswer.location; + location = await this._promptInstallLocation(); } } @@ -334,22 +323,16 @@ class AntigravitySetup extends BaseIdeSetup { * Prompt user for subagent installation preferences */ async promptSubagentInstallation(subagentConfig) { - const { default: inquirer } = await import('inquirer'); - // First ask if they want to install subagents - const { install } = await inquirer.prompt([ - { - type: 'list', - name: 'install', - message: 'Would you like to install Antigravity subagents for enhanced functionality?', - choices: [ - { name: 'Yes, install all subagents', value: 'all' }, - { name: 'Yes, let me choose specific subagents', value: 'selective' }, - { name: 'No, skip subagent installation', value: 'none' }, - ], - default: 'all', - }, - ]); + const install = await prompts.select({ + message: 'Would you like to install Antigravity subagents for enhanced functionality?', + choices: [ + { name: 'Yes, install all subagents', value: 'all' }, + { name: 'Yes, let me choose specific subagents', value: 'selective' }, + { name: 'No, skip subagent installation', value: 'none' }, + ], + default: 'all', + }); if (install === 'selective') { // Show list of available subagents with descriptions @@ -361,18 +344,14 @@ class AntigravitySetup extends BaseIdeSetup { 'document-reviewer.md': 'Document quality review', }; - const { selected } = await inquirer.prompt([ - { - type: 'checkbox', - name: 'selected', - message: 'Select subagents to install:', - choices: subagentConfig.files.map((file) => ({ - name: `${file.replace('.md', '')} - ${subagentInfo[file] || 'Specialized assistant'}`, - value: file, - checked: true, - })), - }, - ]); + const selected = await prompts.multiselect({ + message: `Select subagents to install ${chalk.dim('(↑/↓ navigate, SPACE select, ENTER confirm)')}:`, + choices: subagentConfig.files.map((file) => ({ + name: `${file.replace('.md', '')} - ${subagentInfo[file] || 'Specialized assistant'}`, + value: file, + checked: true, + })), + }); return { install: 'selective', selected }; } diff --git a/tools/cli/installers/lib/ide/claude-code.js b/tools/cli/installers/lib/ide/claude-code.js index f2a33221..02c65b40 100644 --- a/tools/cli/installers/lib/ide/claude-code.js +++ b/tools/cli/installers/lib/ide/claude-code.js @@ -13,6 +13,7 @@ const { resolveSubagentFiles, } = require('./shared/module-injections'); const { getAgentsFromBmad, getAgentsFromDir } = require('./shared/bmad-artifacts'); +const prompts = require('../../../lib/prompts'); /** * Claude Code IDE setup handler @@ -25,6 +26,21 @@ class ClaudeCodeSetup extends BaseIdeSetup { this.agentsDir = 'agents'; } + /** + * Prompt for subagent installation location + * @returns {Promise} Selected location ('project' or 'user') + */ + async promptInstallLocation() { + return prompts.select({ + message: 'Where would you like to install Claude Code subagents?', + choices: [ + { name: 'Project level (.claude/agents/)', value: 'project' }, + { name: 'User level (~/.claude/agents/)', value: 'user' }, + ], + default: 'project', + }); + } + /** * Collect configuration choices before installation * @param {Object} options - Configuration options @@ -56,21 +72,7 @@ class ClaudeCodeSetup extends BaseIdeSetup { config.subagentChoices = await this.promptSubagentInstallation(injectionConfig.subagents); if (config.subagentChoices.install !== 'none') { - // Ask for installation location - const { default: inquirer } = await import('inquirer'); - const locationAnswer = await inquirer.prompt([ - { - type: 'list', - name: 'location', - message: 'Where would you like to install Claude Code subagents?', - choices: [ - { name: 'Project level (.claude/agents/)', value: 'project' }, - { name: 'User level (~/.claude/agents/)', value: 'user' }, - ], - default: 'project', - }, - ]); - config.installLocation = locationAnswer.location; + config.installLocation = await this.promptInstallLocation(); } } } catch (error) { @@ -305,20 +307,7 @@ class ClaudeCodeSetup extends BaseIdeSetup { choices = await this.promptSubagentInstallation(config.subagents); if (choices.install !== 'none') { - const { default: inquirer } = await import('inquirer'); - const locationAnswer = await inquirer.prompt([ - { - type: 'list', - name: 'location', - message: 'Where would you like to install Claude Code subagents?', - choices: [ - { name: 'Project level (.claude/agents/)', value: 'project' }, - { name: 'User level (~/.claude/agents/)', value: 'user' }, - ], - default: 'project', - }, - ]); - location = locationAnswer.location; + location = await this.promptInstallLocation(); } } @@ -342,22 +331,16 @@ class ClaudeCodeSetup extends BaseIdeSetup { * Prompt user for subagent installation preferences */ async promptSubagentInstallation(subagentConfig) { - const { default: inquirer } = await import('inquirer'); - // First ask if they want to install subagents - const { install } = await inquirer.prompt([ - { - type: 'list', - name: 'install', - message: 'Would you like to install Claude Code subagents for enhanced functionality?', - choices: [ - { name: 'Yes, install all subagents', value: 'all' }, - { name: 'Yes, let me choose specific subagents', value: 'selective' }, - { name: 'No, skip subagent installation', value: 'none' }, - ], - default: 'all', - }, - ]); + const install = await prompts.select({ + message: 'Would you like to install Claude Code subagents for enhanced functionality?', + choices: [ + { name: 'Yes, install all subagents', value: 'all' }, + { name: 'Yes, let me choose specific subagents', value: 'selective' }, + { name: 'No, skip subagent installation', value: 'none' }, + ], + default: 'all', + }); if (install === 'selective') { // Show list of available subagents with descriptions @@ -369,18 +352,14 @@ class ClaudeCodeSetup extends BaseIdeSetup { 'document-reviewer.md': 'Document quality review', }; - const { selected } = await inquirer.prompt([ - { - type: 'checkbox', - name: 'selected', - message: 'Select subagents to install:', - choices: subagentConfig.files.map((file) => ({ - name: `${file.replace('.md', '')} - ${subagentInfo[file] || 'Specialized assistant'}`, - value: file, - checked: true, - })), - }, - ]); + const selected = await prompts.multiselect({ + message: `Select subagents to install ${chalk.dim('(↑/↓ navigate, SPACE select, ENTER confirm)')}:`, + options: subagentConfig.files.map((file) => ({ + label: `${file.replace('.md', '')} - ${subagentInfo[file] || 'Specialized assistant'}`, + value: file, + })), + initialValues: subagentConfig.files, + }); return { install: 'selective', selected }; } diff --git a/tools/cli/installers/lib/ide/codex.js b/tools/cli/installers/lib/ide/codex.js index 3ce9d910..e037a779 100644 --- a/tools/cli/installers/lib/ide/codex.js +++ b/tools/cli/installers/lib/ide/codex.js @@ -6,6 +6,7 @@ const { BaseIdeSetup } = require('./_base-ide'); const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator'); const { AgentCommandGenerator } = require('./shared/agent-command-generator'); const { getTasksFromBmad } = require('./shared/bmad-artifacts'); +const prompts = require('../../../lib/prompts'); /** * Codex setup handler (CLI mode) @@ -21,32 +22,24 @@ class CodexSetup extends BaseIdeSetup { * @returns {Object} Collected configuration */ async collectConfiguration(options = {}) { - const { default: inquirer } = await import('inquirer'); - let confirmed = false; let installLocation = 'global'; while (!confirmed) { - const { location } = await inquirer.prompt([ - { - type: 'list', - name: 'location', - message: 'Where would you like to install Codex CLI prompts?', - choices: [ - { - name: 'Global - Simple for single project ' + '(~/.codex/prompts, but references THIS project only)', - value: 'global', - }, - { - name: `Project-specific - Recommended for real work (requires CODEX_HOME=${path.sep}.codex)`, - value: 'project', - }, - ], - default: 'global', - }, - ]); - - installLocation = location; + installLocation = await prompts.select({ + message: 'Where would you like to install Codex CLI prompts?', + choices: [ + { + name: 'Global - Simple for single project ' + '(~/.codex/prompts, but references THIS project only)', + value: 'global', + }, + { + name: `Project-specific - Recommended for real work (requires CODEX_HOME=${path.sep}.codex)`, + value: 'project', + }, + ], + default: 'global', + }); // Display detailed instructions for the chosen option console.log(''); @@ -57,16 +50,10 @@ class CodexSetup extends BaseIdeSetup { } // Confirm the choice - const { proceed } = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Proceed with this installation option?', - default: true, - }, - ]); - - confirmed = proceed; + confirmed = await prompts.confirm({ + message: 'Proceed with this installation option?', + default: true, + }); if (!confirmed) { console.log(chalk.yellow("\n Let's choose a different installation option.\n")); diff --git a/tools/cli/installers/lib/ide/github-copilot.js b/tools/cli/installers/lib/ide/github-copilot.js index b9dd5f98..c500a284 100644 --- a/tools/cli/installers/lib/ide/github-copilot.js +++ b/tools/cli/installers/lib/ide/github-copilot.js @@ -2,6 +2,7 @@ const path = require('node:path'); const { BaseIdeSetup } = require('./_base-ide'); const chalk = require('chalk'); const { AgentCommandGenerator } = require('./shared/agent-command-generator'); +const prompts = require('../../../lib/prompts'); /** * GitHub Copilot setup handler @@ -21,29 +22,23 @@ class GitHubCopilotSetup extends BaseIdeSetup { * @returns {Object} Collected configuration */ async collectConfiguration(options = {}) { - const { default: inquirer } = await import('inquirer'); const config = {}; console.log('\n' + chalk.blue(' 🔧 VS Code Settings Configuration')); console.log(chalk.dim(' GitHub Copilot works best with specific settings\n')); - const response = await inquirer.prompt([ - { - type: 'list', - name: 'configChoice', - message: 'How would you like to configure VS Code settings?', - choices: [ - { name: 'Use recommended defaults (fastest)', value: 'defaults' }, - { name: 'Configure each setting manually', value: 'manual' }, - { name: 'Skip settings configuration', value: 'skip' }, - ], - default: 'defaults', - }, - ]); - config.vsCodeConfig = response.configChoice; + config.vsCodeConfig = await prompts.select({ + message: 'How would you like to configure VS Code settings?', + choices: [ + { name: 'Use recommended defaults (fastest)', value: 'defaults' }, + { name: 'Configure each setting manually', value: 'manual' }, + { name: 'Skip settings configuration', value: 'skip' }, + ], + default: 'defaults', + }); - if (response.configChoice === 'manual') { - config.manualSettings = await inquirer.prompt([ + if (config.vsCodeConfig === 'manual') { + config.manualSettings = await prompts.prompt([ { type: 'input', name: 'maxRequests', @@ -52,7 +47,8 @@ class GitHubCopilotSetup extends BaseIdeSetup { validate: (input) => { const num = parseInt(input, 10); if (isNaN(num)) return 'Enter a valid number 1-50'; - return (num >= 1 && num <= 50) || 'Enter 1-50'; + if (num < 1 || num > 50) return 'Enter a number between 1-50'; + return true; }, }, { diff --git a/tools/cli/lib/prompts.js b/tools/cli/lib/prompts.js new file mode 100644 index 00000000..96b80ba1 --- /dev/null +++ b/tools/cli/lib/prompts.js @@ -0,0 +1,432 @@ +/** + * @clack/prompts wrapper for BMAD CLI + * + * This module provides a unified interface for CLI prompts using @clack/prompts. + * It replaces Inquirer.js to fix Windows arrow key navigation issues (libuv #852). + * + * @module prompts + */ + +let _clack = null; + +/** + * Lazy-load @clack/prompts (ESM module) + * @returns {Promise} The clack prompts module + */ +async function getClack() { + if (!_clack) { + _clack = await import('@clack/prompts'); + } + return _clack; +} + +/** + * Handle user cancellation gracefully + * @param {any} value - The value to check + * @param {string} [message='Operation cancelled'] - Message to display + * @returns {boolean} True if cancelled + */ +async function handleCancel(value, message = 'Operation cancelled') { + const clack = await getClack(); + if (clack.isCancel(value)) { + clack.cancel(message); + process.exit(0); + } + return false; +} + +/** + * Display intro message + * @param {string} message - The intro message + */ +async function intro(message) { + const clack = await getClack(); + clack.intro(message); +} + +/** + * Display outro message + * @param {string} message - The outro message + */ +async function outro(message) { + const clack = await getClack(); + clack.outro(message); +} + +/** + * Display a note/info box + * @param {string} message - The note content + * @param {string} [title] - Optional title + */ +async function note(message, title) { + const clack = await getClack(); + clack.note(message, title); +} + +/** + * Display a spinner for async operations + * @returns {Object} Spinner controller with start, stop, message methods + */ +async function spinner() { + const clack = await getClack(); + return clack.spinner(); +} + +/** + * Single-select prompt (replaces Inquirer 'list' type) + * @param {Object} options - Prompt options + * @param {string} options.message - The question to ask + * @param {Array} options.choices - Array of choices [{name, value, hint?}] + * @param {any} [options.default] - Default selected value + * @returns {Promise} Selected value + */ +async function select(options) { + const clack = await getClack(); + + // Convert Inquirer-style choices to clack format + // Handle both object choices {name, value, hint} and primitive choices (string/number) + const clackOptions = options.choices + .filter((c) => c.type !== 'separator') // Skip separators for now + .map((choice) => { + if (typeof choice === 'string' || typeof choice === 'number') { + return { value: choice, label: String(choice) }; + } + return { + value: choice.value === undefined ? choice.name : choice.value, + label: choice.name || choice.label || String(choice.value), + hint: choice.hint || choice.description, + }; + }); + + // Find initial value + let initialValue; + if (options.default !== undefined) { + initialValue = options.default; + } + + const result = await clack.select({ + message: options.message, + options: clackOptions, + initialValue, + }); + + await handleCancel(result); + return result; +} + +/** + * Multi-select prompt (replaces Inquirer 'checkbox' type) + * @param {Object} options - Prompt options + * @param {string} options.message - The question to ask + * @param {Array} options.choices - Array of choices [{name, value, checked?, hint?}] + * @param {boolean} [options.required=false] - Whether at least one must be selected + * @returns {Promise} Array of selected values + */ +async function multiselect(options) { + const clack = await getClack(); + + // Support both clack-native (options) and Inquirer-style (choices) APIs + let clackOptions; + let initialValues; + + if (options.options) { + // Native clack format: options with label/value + clackOptions = options.options; + initialValues = options.initialValues || []; + } else { + // Convert Inquirer-style choices to clack format + // Handle both object choices {name, value, hint} and primitive choices (string/number) + clackOptions = options.choices + .filter((c) => c.type !== 'separator') // Skip separators + .map((choice) => { + if (typeof choice === 'string' || typeof choice === 'number') { + return { value: choice, label: String(choice) }; + } + return { + value: choice.value === undefined ? choice.name : choice.value, + label: choice.name || choice.label || String(choice.value), + hint: choice.hint || choice.description, + }; + }); + + // Find initial values (pre-checked items) + initialValues = options.choices + .filter((c) => c.checked && c.type !== 'separator') + .map((c) => (c.value === undefined ? c.name : c.value)); + } + + const result = await clack.multiselect({ + message: options.message, + options: clackOptions, + initialValues: initialValues.length > 0 ? initialValues : undefined, + required: options.required || false, + }); + + await handleCancel(result); + return result; +} + +/** + * Grouped multi-select prompt for categorized options + * @param {Object} options - Prompt options + * @param {string} options.message - The question to ask + * @param {Object} options.options - Object mapping group names to arrays of choices + * @param {Array} [options.initialValues] - Array of initially selected values + * @param {boolean} [options.required=false] - Whether at least one must be selected + * @param {boolean} [options.selectableGroups=false] - Whether groups can be selected as a whole + * @returns {Promise} Array of selected values + */ +async function groupMultiselect(options) { + const clack = await getClack(); + + const result = await clack.groupMultiselect({ + message: options.message, + options: options.options, + initialValues: options.initialValues, + required: options.required || false, + }); + + await handleCancel(result); + return result; +} + +/** + * Confirm prompt (replaces Inquirer 'confirm' type) + * @param {Object} options - Prompt options + * @param {string} options.message - The question to ask + * @param {boolean} [options.default=true] - Default value + * @returns {Promise} User's answer + */ +async function confirm(options) { + const clack = await getClack(); + + const result = await clack.confirm({ + message: options.message, + initialValue: options.default === undefined ? true : options.default, + }); + + await handleCancel(result); + return result; +} + +/** + * Text input prompt (replaces Inquirer 'input' type) + * @param {Object} options - Prompt options + * @param {string} options.message - The question to ask + * @param {string} [options.default] - Default value + * @param {string} [options.placeholder] - Placeholder text (defaults to options.default if not provided) + * @param {Function} [options.validate] - Validation function + * @returns {Promise} User's input + */ +async function text(options) { + const clack = await getClack(); + + // Use default as placeholder if placeholder not explicitly provided + // This shows the default value as grayed-out hint text + const placeholder = options.placeholder === undefined ? options.default : options.placeholder; + + const result = await clack.text({ + message: options.message, + defaultValue: options.default, + placeholder: typeof placeholder === 'string' ? placeholder : undefined, + validate: options.validate, + }); + + await handleCancel(result); + return result; +} + +/** + * Password input prompt (replaces Inquirer 'password' type) + * @param {Object} options - Prompt options + * @param {string} options.message - The question to ask + * @param {Function} [options.validate] - Validation function + * @returns {Promise} User's input + */ +async function password(options) { + const clack = await getClack(); + + const result = await clack.password({ + message: options.message, + validate: options.validate, + }); + + await handleCancel(result); + return result; +} + +/** + * Group multiple prompts together + * @param {Object} prompts - Object of prompt functions + * @param {Object} [options] - Group options + * @returns {Promise} Object with all answers + */ +async function group(prompts, options = {}) { + const clack = await getClack(); + + const result = await clack.group(prompts, { + onCancel: () => { + clack.cancel('Operation cancelled'); + process.exit(0); + }, + ...options, + }); + + return result; +} + +/** + * Run tasks with spinner feedback + * @param {Array} tasks - Array of task objects [{title, task, enabled?}] + * @returns {Promise} + */ +async function tasks(taskList) { + const clack = await getClack(); + await clack.tasks(taskList); +} + +/** + * Log messages with styling + */ +const log = { + async info(message) { + const clack = await getClack(); + clack.log.info(message); + }, + async success(message) { + const clack = await getClack(); + clack.log.success(message); + }, + async warn(message) { + const clack = await getClack(); + clack.log.warn(message); + }, + async error(message) { + const clack = await getClack(); + clack.log.error(message); + }, + async message(message) { + const clack = await getClack(); + clack.log.message(message); + }, + async step(message) { + const clack = await getClack(); + clack.log.step(message); + }, +}; + +/** + * Execute an array of Inquirer-style questions using @clack/prompts + * This provides compatibility with dynamic question arrays + * @param {Array} questions - Array of Inquirer-style question objects + * @returns {Promise} Object with answers keyed by question name + */ +async function prompt(questions) { + const answers = {}; + + for (const question of questions) { + const { type, name, message, choices, default: defaultValue, validate, when } = question; + + // Handle conditional questions via 'when' property + if (when !== undefined) { + const shouldAsk = typeof when === 'function' ? await when(answers) : when; + if (!shouldAsk) continue; + } + + let answer; + + switch (type) { + case 'input': { + // Note: @clack/prompts doesn't support async validation, so validate must be sync + answer = await text({ + message, + default: typeof defaultValue === 'function' ? defaultValue(answers) : defaultValue, + validate: validate + ? (val) => { + const result = validate(val, answers); + if (result instanceof Promise) { + throw new TypeError('Async validation is not supported by @clack/prompts. Please use synchronous validation.'); + } + return result === true ? undefined : result; + } + : undefined, + }); + break; + } + + case 'confirm': { + answer = await confirm({ + message, + default: typeof defaultValue === 'function' ? defaultValue(answers) : defaultValue, + }); + break; + } + + case 'list': { + answer = await select({ + message, + choices: choices || [], + default: typeof defaultValue === 'function' ? defaultValue(answers) : defaultValue, + }); + break; + } + + case 'checkbox': { + answer = await multiselect({ + message, + choices: choices || [], + required: false, + }); + break; + } + + case 'password': { + // Note: @clack/prompts doesn't support async validation, so validate must be sync + answer = await password({ + message, + validate: validate + ? (val) => { + const result = validate(val, answers); + if (result instanceof Promise) { + throw new TypeError('Async validation is not supported by @clack/prompts. Please use synchronous validation.'); + } + return result === true ? undefined : result; + } + : undefined, + }); + break; + } + + default: { + // Default to text input for unknown types + answer = await text({ + message, + default: typeof defaultValue === 'function' ? defaultValue(answers) : defaultValue, + }); + } + } + + answers[name] = answer; + } + + return answers; +} + +module.exports = { + getClack, + handleCancel, + intro, + outro, + note, + spinner, + select, + multiselect, + groupMultiselect, + confirm, + text, + password, + group, + tasks, + log, + prompt, +}; diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js index 85f31ce1..a78cfec9 100644 --- a/tools/cli/lib/ui.js +++ b/tools/cli/lib/ui.js @@ -4,16 +4,21 @@ const os = require('node:os'); const fs = require('fs-extra'); const { CLIUtils } = require('./cli-utils'); const { CustomHandler } = require('../installers/lib/custom/handler'); +const prompts = require('./prompts'); -// Lazy-load inquirer (ESM module) to avoid ERR_REQUIRE_ESM -let _inquirer = null; -async function getInquirer() { - if (!_inquirer) { - _inquirer = (await import('inquirer')).default; +// Separator class for visual grouping in select/multiselect prompts +// Note: @clack/prompts doesn't support separators natively, they are filtered out +class Separator { + constructor(text = '────────') { + this.line = text; + this.name = text; } - return _inquirer; + type = 'separator'; } +// Separator for choice lists (compatible interface) +const choiceUtils = { Separator }; + /** * UI utilities for the installer */ @@ -23,7 +28,6 @@ class UI { * @returns {Object} Installation configuration */ async promptInstall() { - const inquirer = await getInquirer(); CLIUtils.displayLogo(); // Display version-specific start message from install-messages.yaml @@ -113,26 +117,20 @@ class UI { console.log(chalk.yellow('─'.repeat(80))); console.log(''); - const { proceed } = await inquirer.prompt([ - { - type: 'list', - name: 'proceed', - message: 'What would you like to do?', - choices: [ - { - name: 'Cancel and do a fresh install (recommended)', - value: 'cancel', - short: 'Cancel installation', - }, - { - name: 'Proceed anyway (will attempt update, potentially may fail or have unstable behavior)', - value: 'proceed', - short: 'Proceed with update', - }, - ], - default: 'cancel', - }, - ]); + const proceed = await prompts.select({ + message: 'What would you like to do?', + choices: [ + { + name: 'Cancel and do a fresh install (recommended)', + value: 'cancel', + }, + { + name: 'Proceed anyway (will attempt update, potentially may fail or have unstable behavior)', + value: 'proceed', + }, + ], + default: 'cancel', + }); if (proceed === 'cancel') { console.log(''); @@ -188,14 +186,10 @@ class UI { // If Claude Code was selected, ask about TTS if (claudeCodeSelected) { - const { enableTts } = await inquirer.prompt([ - { - type: 'confirm', - name: 'enableTts', - message: 'Claude Code supports TTS (Text-to-Speech). Would you like to enable it?', - default: false, - }, - ]); + const enableTts = await prompts.confirm({ + message: 'Claude Code supports TTS (Text-to-Speech). Would you like to enable it?', + default: false, + }); if (enableTts) { agentVibesConfig = { enabled: true, alreadyInstalled: false }; @@ -250,18 +244,11 @@ class UI { // Common actions choices.push({ name: 'Modify BMAD Installation', value: 'update' }); - const promptResult = await inquirer.prompt([ - { - type: 'list', - name: 'actionType', - message: 'What would you like to do?', - choices: choices, - default: choices[0].value, // Use the first option as default - }, - ]); - - // Extract actionType from prompt result - actionType = promptResult.actionType; + actionType = await prompts.select({ + message: 'What would you like to do?', + choices: choices, + default: choices[0].value, + }); // Handle quick update separately if (actionType === 'quick-update') { @@ -290,14 +277,10 @@ class UI { const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory); console.log(chalk.dim(` Found existing modules: ${[...installedModuleIds].join(', ')}`)); - const { changeModuleSelection } = await inquirer.prompt([ - { - type: 'confirm', - name: 'changeModuleSelection', - message: 'Modify official module selection (BMad Method, BMad Builder, Creative Innovation Suite)?', - default: false, - }, - ]); + const changeModuleSelection = await prompts.confirm({ + message: 'Modify official module selection (BMad Method, BMad Builder, Creative Innovation Suite)?', + default: false, + }); let selectedModules = []; if (changeModuleSelection) { @@ -310,14 +293,10 @@ class UI { // After module selection, ask about custom modules console.log(''); - const { changeCustomModules } = await inquirer.prompt([ - { - type: 'confirm', - name: 'changeCustomModules', - message: 'Modify custom module selection (add, update, or remove custom modules/agents/workflows)?', - default: false, - }, - ]); + const changeCustomModules = await prompts.confirm({ + message: 'Modify custom module selection (add, update, or remove custom modules/agents/workflows)?', + default: false, + }); let customModuleResult = { selectedCustomModules: [], customContentConfig: { hasCustomContent: false } }; if (changeCustomModules) { @@ -352,15 +331,10 @@ class UI { let enableTts = false; if (hasClaudeCode) { - const { enableTts: enable } = await inquirer.prompt([ - { - type: 'confirm', - name: 'enableTts', - message: 'Claude Code supports TTS (Text-to-Speech). Would you like to enable it?', - default: false, - }, - ]); - enableTts = enable; + enableTts = await prompts.confirm({ + message: 'Claude Code supports TTS (Text-to-Speech). Would you like to enable it?', + default: false, + }); } // Core config with existing defaults (ask after TTS) @@ -385,14 +359,10 @@ class UI { const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory); // Ask about official modules for new installations - const { wantsOfficialModules } = await inquirer.prompt([ - { - type: 'confirm', - name: 'wantsOfficialModules', - message: 'Will you be installing any official BMad modules (BMad Method, BMad Builder, Creative Innovation Suite)?', - default: true, - }, - ]); + const wantsOfficialModules = await prompts.confirm({ + message: 'Will you be installing any official BMad modules (BMad Method, BMad Builder, Creative Innovation Suite)?', + default: true, + }); let selectedOfficialModules = []; if (wantsOfficialModules) { @@ -401,14 +371,10 @@ class UI { } // Ask about custom content - const { wantsCustomContent } = await inquirer.prompt([ - { - type: 'confirm', - name: 'wantsCustomContent', - message: 'Would you like to install a local custom module (this includes custom agents and workflows also)?', - default: false, - }, - ]); + const wantsCustomContent = await prompts.confirm({ + message: 'Would you like to install a local custom module (this includes custom agents and workflows also)?', + default: false, + }); if (wantsCustomContent) { customContentConfig = await this.promptCustomContentSource(); @@ -459,7 +425,6 @@ class UI { * @returns {Object} Tool configuration */ async promptToolSelection(projectDir, selectedModules) { - const inquirer = await getInquirer(); // Check for existing configured IDEs - use findBmadDir to detect custom folder names const { Detector } = require('../installers/lib/core/detector'); const { Installer } = require('../installers/lib/core/installer'); @@ -477,13 +442,14 @@ class UI { const preferredIdes = ideManager.getPreferredIdes(); const otherIdes = ideManager.getOtherIdes(); - // Build IDE choices array with separators - const ideChoices = []; + // Build grouped options object for groupMultiselect + const groupedOptions = {}; const processedIdes = new Set(); + const initialValues = []; // First, add previously configured IDEs at the top, marked with ✅ if (configuredIdes.length > 0) { - ideChoices.push(new inquirer.Separator('── Previously Configured ──')); + const configuredGroup = []; for (const ideValue of configuredIdes) { // Skip empty or invalid IDE values if (!ideValue || typeof ideValue !== 'string') { @@ -496,81 +462,71 @@ class UI { const ide = preferredIde || otherIde; if (ide) { - ideChoices.push({ - name: `${ide.name} ✅`, + configuredGroup.push({ + label: `${ide.name} ✅`, value: ide.value, - checked: true, // Previously configured IDEs are checked by default }); processedIdes.add(ide.value); + initialValues.push(ide.value); // Pre-select configured IDEs } else { // Warn about unrecognized IDE (but don't fail) console.log(chalk.yellow(`⚠️ Previously configured IDE '${ideValue}' is no longer available`)); } } + if (configuredGroup.length > 0) { + groupedOptions['Previously Configured'] = configuredGroup; + } } // Add preferred tools (excluding already processed) const remainingPreferred = preferredIdes.filter((ide) => !processedIdes.has(ide.value)); if (remainingPreferred.length > 0) { - ideChoices.push(new inquirer.Separator('── Recommended Tools ──')); - for (const ide of remainingPreferred) { - ideChoices.push({ - name: `${ide.name} ⭐`, - value: ide.value, - checked: false, - }); + groupedOptions['Recommended Tools'] = remainingPreferred.map((ide) => { processedIdes.add(ide.value); - } + return { + label: `${ide.name} ⭐`, + value: ide.value, + }; + }); } // Add other tools (excluding already processed) const remainingOther = otherIdes.filter((ide) => !processedIdes.has(ide.value)); if (remainingOther.length > 0) { - ideChoices.push(new inquirer.Separator('── Additional Tools ──')); - for (const ide of remainingOther) { - ideChoices.push({ - name: ide.name, - value: ide.value, - checked: false, - }); - } + groupedOptions['Additional Tools'] = remainingOther.map((ide) => ({ + label: ide.name, + value: ide.value, + })); } - let answers; + let selectedIdes = []; let userConfirmedNoTools = false; // Loop until user selects at least one tool OR explicitly confirms no tools while (!userConfirmedNoTools) { - answers = await inquirer.prompt([ - { - type: 'checkbox', - name: 'ides', - message: 'Select tools to configure:', - choices: ideChoices, - pageSize: 30, - }, - ]); + selectedIdes = await prompts.groupMultiselect({ + message: `Select tools to configure ${chalk.dim('(↑/↓ navigate, SPACE select, ENTER confirm)')}:`, + options: groupedOptions, + initialValues: initialValues.length > 0 ? initialValues : undefined, + required: false, + }); // If tools were selected, we're done - if (answers.ides && answers.ides.length > 0) { + if (selectedIdes && selectedIdes.length > 0) { break; } // Warn that no tools were selected - users often miss the spacebar requirement console.log(); console.log(chalk.red.bold('⚠️ WARNING: No tools were selected!')); - console.log(chalk.red(' You must press SPACEBAR to select items, then ENTER to confirm.')); + console.log(chalk.red(' You must press SPACE to select items, then ENTER to confirm.')); console.log(chalk.red(' Simply highlighting an item does NOT select it.')); console.log(); - const { goBack } = await inquirer.prompt([ - { - type: 'confirm', - name: 'goBack', - message: chalk.yellow('Would you like to go back and select at least one tool?'), - default: true, - }, - ]); + const goBack = await prompts.confirm({ + message: chalk.yellow('Would you like to go back and select at least one tool?'), + default: true, + }); if (goBack) { // Re-display a message before looping back @@ -582,8 +538,8 @@ class UI { } return { - ides: answers.ides || [], - skipIde: !answers.ides || answers.ides.length === 0, + ides: selectedIdes || [], + skipIde: !selectedIdes || selectedIdes.length === 0, }; } @@ -592,23 +548,17 @@ class UI { * @returns {Object} Update configuration */ async promptUpdate() { - const inquirer = await getInquirer(); - const answers = await inquirer.prompt([ - { - type: 'confirm', - name: 'backupFirst', - message: 'Create backup before updating?', - default: true, - }, - { - type: 'confirm', - name: 'preserveCustomizations', - message: 'Preserve local customizations?', - default: true, - }, - ]); + const backupFirst = await prompts.confirm({ + message: 'Create backup before updating?', + default: true, + }); - return answers; + const preserveCustomizations = await prompts.confirm({ + message: 'Preserve local customizations?', + default: true, + }); + + return { backupFirst, preserveCustomizations }; } /** @@ -617,27 +567,17 @@ class UI { * @returns {Array} Selected modules */ async promptModules(modules) { - const inquirer = await getInquirer(); const choices = modules.map((mod) => ({ name: `${mod.name} - ${mod.description}`, value: mod.id, checked: false, })); - const { selectedModules } = await inquirer.prompt([ - { - type: 'checkbox', - name: 'selectedModules', - message: 'Select modules to add:', - choices, - validate: (answer) => { - if (answer.length === 0) { - return 'You must choose at least one module.'; - } - return true; - }, - }, - ]); + const selectedModules = await prompts.multiselect({ + message: `Select modules to add ${chalk.dim('(↑/↓ navigate, SPACE select, ENTER confirm)')}:`, + choices, + required: true, + }); return selectedModules; } @@ -649,17 +589,10 @@ class UI { * @returns {boolean} User confirmation */ async confirm(message, defaultValue = false) { - const inquirer = await getInquirer(); - const { confirmed } = await inquirer.prompt([ - { - type: 'confirm', - name: 'confirmed', - message, - default: defaultValue, - }, - ]); - - return confirmed; + return await prompts.confirm({ + message, + default: defaultValue, + }); } /** @@ -753,10 +686,9 @@ class UI { * Get module choices for selection * @param {Set} installedModuleIds - Currently installed module IDs * @param {Object} customContentConfig - Custom content configuration - * @returns {Array} Module choices for inquirer + * @returns {Array} Module choices for prompt */ async getModuleChoices(installedModuleIds, customContentConfig = null) { - const inquirer = await getInquirer(); const moduleChoices = []; const isNewInstallation = installedModuleIds.size === 0; @@ -811,9 +743,9 @@ class UI { if (allCustomModules.length > 0) { // Add separator for custom content, all custom modules, and official content separator moduleChoices.push( - new inquirer.Separator('── Custom Content ──'), + new choiceUtils.Separator('── Custom Content ──'), ...allCustomModules, - new inquirer.Separator('── Official Content ──'), + new choiceUtils.Separator('── Official Content ──'), ); } @@ -837,44 +769,43 @@ class UI { * @returns {Array} Selected module IDs */ async selectModules(moduleChoices, defaultSelections = []) { - const inquirer = await getInquirer(); - const moduleAnswer = await inquirer.prompt([ - { - type: 'checkbox', - name: 'modules', - message: 'Select modules to install:', - choices: moduleChoices, - default: defaultSelections, - }, - ]); + // Mark choices as checked based on defaultSelections + const choicesWithDefaults = moduleChoices.map((choice) => ({ + ...choice, + checked: defaultSelections.includes(choice.value), + })); - const selected = moduleAnswer.modules || []; + const selected = await prompts.multiselect({ + message: `Select modules to install ${chalk.dim('(↑/↓ navigate, SPACE select, ENTER confirm)')}:`, + choices: choicesWithDefaults, + required: false, + }); - return selected; + return selected || []; } /** * Prompt for directory selection - * @returns {Object} Directory answer from inquirer + * @returns {Object} Directory answer from prompt */ async promptForDirectory() { - const inquirer = await getInquirer(); - return await inquirer.prompt([ - { - type: 'input', - name: 'directory', - message: `Installation directory:`, - default: process.cwd(), - validate: async (input) => this.validateDirectory(input), - filter: (input) => { - // If empty, use the default - if (!input || input.trim() === '') { - return process.cwd(); - } - return this.expandUserPath(input); - }, - }, - ]); + // Use sync validation because @clack/prompts doesn't support async validate + const directory = await prompts.text({ + message: 'Installation directory:', + default: process.cwd(), + placeholder: process.cwd(), + validate: (input) => this.validateDirectorySync(input), + }); + + // Apply filter logic + let filteredDir = directory; + if (!filteredDir || filteredDir.trim() === '') { + filteredDir = process.cwd(); + } else { + filteredDir = this.expandUserPath(filteredDir); + } + + return { directory: filteredDir }; } /** @@ -915,45 +846,92 @@ class UI { * @returns {boolean} Whether user confirmed */ async confirmDirectory(directory) { - const inquirer = await getInquirer(); const dirExists = await fs.pathExists(directory); if (dirExists) { - const confirmAnswer = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: `Install to this directory?`, - default: true, - }, - ]); + const proceed = await prompts.confirm({ + message: 'Install to this directory?', + default: true, + }); - if (!confirmAnswer.proceed) { + if (!proceed) { console.log(chalk.yellow("\nLet's try again with a different path.\n")); } - return confirmAnswer.proceed; + return proceed; } else { // Ask for confirmation to create the directory - const createConfirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'create', - message: `The directory '${directory}' doesn't exist. Would you like to create it?`, - default: false, - }, - ]); + const create = await prompts.confirm({ + message: `The directory '${directory}' doesn't exist. Would you like to create it?`, + default: false, + }); - if (!createConfirm.create) { + if (!create) { console.log(chalk.yellow("\nLet's try again with a different path.\n")); } - return createConfirm.create; + return create; } } /** - * Validate directory path for installation + * Validate directory path for installation (sync version for clack prompts) + * @param {string} input - User input path + * @returns {string|undefined} Error message or undefined if valid + */ + validateDirectorySync(input) { + // Allow empty input to use the default + if (!input || input.trim() === '') { + return; // Empty means use default, undefined = valid for clack + } + + let expandedPath; + try { + expandedPath = this.expandUserPath(input.trim()); + } catch (error) { + return error.message; + } + + // Check if the path exists + const pathExists = fs.pathExistsSync(expandedPath); + + if (!pathExists) { + // Find the first existing parent directory + const existingParent = this.findExistingParentSync(expandedPath); + + if (!existingParent) { + return 'Cannot create directory: no existing parent directory found'; + } + + // Check if the existing parent is writable + try { + fs.accessSync(existingParent, fs.constants.W_OK); + // Path doesn't exist but can be created - will prompt for confirmation later + return; + } catch { + // Provide a detailed error message explaining both issues + return `Directory '${expandedPath}' does not exist and cannot be created: parent directory '${existingParent}' is not writable`; + } + } + + // If it exists, validate it's a directory and writable + const stat = fs.statSync(expandedPath); + if (!stat.isDirectory()) { + return `Path exists but is not a directory: ${expandedPath}`; + } + + // Check write permissions + try { + fs.accessSync(expandedPath, fs.constants.W_OK); + } catch { + return `Directory is not writable: ${expandedPath}`; + } + + return; + } + + /** + * Validate directory path for installation (async version) * @param {string} input - User input path * @returns {string|true} Error message or true if valid */ @@ -1009,7 +987,28 @@ class UI { } /** - * Find the first existing parent directory + * Find the first existing parent directory (sync version) + * @param {string} targetPath - The path to check + * @returns {string|null} The first existing parent directory, or null if none found + */ + findExistingParentSync(targetPath) { + let currentPath = path.resolve(targetPath); + + // Walk up the directory tree until we find an existing directory + while (currentPath !== path.dirname(currentPath)) { + // Stop at root + const parent = path.dirname(currentPath); + if (fs.pathExistsSync(parent)) { + return parent; + } + currentPath = parent; + } + + return null; // No existing parent found (shouldn't happen in practice) + } + + /** + * Find the first existing parent directory (async version) * @param {string} targetPath - The path to check * @returns {string|null} The first existing parent directory, or null if none found */ @@ -1071,7 +1070,7 @@ class UI { * @sideeffects None - pure user input collection, no files written * @edgecases Shows warning if user enables TTS but AgentVibes not detected * @calledby promptInstall() during installation flow, after core config, before IDE selection - * @calls checkAgentVibesInstalled(), inquirer.prompt(), chalk.green/yellow/dim() + * @calls checkAgentVibesInstalled(), prompts.select(), chalk.green/yellow/dim() * * AI NOTE: This prompt is strategically positioned in installation flow: * - AFTER core config (user_name, etc) @@ -1102,7 +1101,6 @@ class UI { * - GitHub Issue: paulpreibisch/AgentVibes#36 */ async promptAgentVibes(projectDir) { - const inquirer = await getInquirer(); CLIUtils.displaySection('🎤 Voice Features', 'Enable TTS for multi-agent conversations'); // Check if AgentVibes is already installed @@ -1114,23 +1112,19 @@ class UI { console.log(chalk.dim(' AgentVibes not detected')); } - const answers = await inquirer.prompt([ - { - type: 'confirm', - name: 'enableTts', - message: 'Enable Agents to Speak Out loud (powered by Agent Vibes? Claude Code only currently)', - default: false, // Default to yes - recommended for best experience - }, - ]); + const enableTts = await prompts.confirm({ + message: 'Enable Agents to Speak Out loud (powered by Agent Vibes? Claude Code only currently)', + default: false, + }); - if (answers.enableTts && !agentVibesInstalled) { + if (enableTts && !agentVibesInstalled) { console.log(chalk.yellow('\n ⚠️ AgentVibes not installed')); console.log(chalk.dim(' Install AgentVibes separately to enable TTS:')); console.log(chalk.dim(' https://github.com/paulpreibisch/AgentVibes\n')); } return { - enabled: answers.enableTts, + enabled: enableTts, alreadyInstalled: agentVibesInstalled, }; } @@ -1248,30 +1242,75 @@ class UI { return existingInstall.ides || []; } + /** + * Validate custom content path synchronously + * @param {string} input - User input path + * @returns {string|undefined} Error message or undefined if valid + */ + validateCustomContentPathSync(input) { + // Allow empty input to cancel + if (!input || input.trim() === '') { + return; // Allow empty to exit + } + + try { + // Expand the path + const expandedPath = this.expandUserPath(input.trim()); + + // Check if path exists + if (!fs.pathExistsSync(expandedPath)) { + return 'Path does not exist'; + } + + // Check if it's a directory + const stat = fs.statSync(expandedPath); + if (!stat.isDirectory()) { + return 'Path must be a directory'; + } + + // Check for module.yaml in the root + const moduleYamlPath = path.join(expandedPath, 'module.yaml'); + if (!fs.pathExistsSync(moduleYamlPath)) { + return 'Directory must contain a module.yaml file in the root'; + } + + // Try to parse the module.yaml to get the module ID + try { + const yaml = require('yaml'); + const content = fs.readFileSync(moduleYamlPath, 'utf8'); + const moduleData = yaml.parse(content); + if (!moduleData.code) { + return 'module.yaml must contain a "code" field for the module ID'; + } + } catch (error) { + return 'Invalid module.yaml file: ' + error.message; + } + + return; // Valid + } catch (error) { + return 'Error validating path: ' + error.message; + } + } + /** * Prompt user for custom content source location * @returns {Object} Custom content configuration */ async promptCustomContentSource() { - const inquirer = await getInquirer(); const customContentConfig = { hasCustomContent: true, sources: [] }; // Keep asking for more sources until user is done while (true) { // First ask if user wants to add another module or continue if (customContentConfig.sources.length > 0) { - const { action } = await inquirer.prompt([ - { - type: 'list', - name: 'action', - message: 'Would you like to:', - choices: [ - { name: 'Add another custom module', value: 'add' }, - { name: 'Continue with installation', value: 'continue' }, - ], - default: 'continue', - }, - ]); + const action = await prompts.select({ + message: 'Would you like to:', + choices: [ + { name: 'Add another custom module', value: 'add' }, + { name: 'Continue with installation', value: 'continue' }, + ], + default: 'continue', + }); if (action === 'continue') { break; @@ -1282,57 +1321,11 @@ class UI { let isValid = false; while (!isValid) { - const { path: inputPath } = await inquirer.prompt([ - { - type: 'input', - name: 'path', - message: 'Enter the path to your custom content folder (or press Enter to cancel):', - validate: async (input) => { - // Allow empty input to cancel - if (!input || input.trim() === '') { - return true; // Allow empty to exit - } - - try { - // Expand the path - const expandedPath = this.expandUserPath(input.trim()); - - // Check if path exists - if (!(await fs.pathExists(expandedPath))) { - return 'Path does not exist'; - } - - // Check if it's a directory - const stat = await fs.stat(expandedPath); - if (!stat.isDirectory()) { - return 'Path must be a directory'; - } - - // Check for module.yaml in the root - const moduleYamlPath = path.join(expandedPath, 'module.yaml'); - if (!(await fs.pathExists(moduleYamlPath))) { - return 'Directory must contain a module.yaml file in the root'; - } - - // Try to parse the module.yaml to get the module ID - try { - const yaml = require('yaml'); - const content = await fs.readFile(moduleYamlPath, 'utf8'); - const moduleData = yaml.parse(content); - if (!moduleData.code) { - return 'module.yaml must contain a "code" field for the module ID'; - } - } catch (error) { - return 'Invalid module.yaml file: ' + error.message; - } - - return true; - } catch (error) { - return 'Error validating path: ' + error.message; - } - }, - }, - ]); + // Use sync validation because @clack/prompts doesn't support async validate + const inputPath = await prompts.text({ + message: 'Enter the path to your custom content folder (or press Enter to cancel):', + validate: (input) => this.validateCustomContentPathSync(input), + }); // If user pressed Enter without typing anything, exit the loop if (!inputPath || inputPath.trim() === '') { @@ -1364,14 +1357,10 @@ class UI { } // Ask if user wants to add these to the installation - const { shouldInstall } = await inquirer.prompt([ - { - type: 'confirm', - name: 'shouldInstall', - message: `Install ${customContentConfig.sources.length} custom module(s) now?`, - default: true, - }, - ]); + const shouldInstall = await prompts.confirm({ + message: `Install ${customContentConfig.sources.length} custom module(s) now?`, + default: true, + }); if (shouldInstall) { customContentConfig.selected = true; @@ -1391,7 +1380,6 @@ class UI { * @returns {Object} Result with selected custom modules and custom content config */ async handleCustomModulesInModifyFlow(directory, selectedModules) { - const inquirer = await getInquirer(); // Get existing installation to find custom modules const { existingInstall } = await this.getExistingInstallation(directory); @@ -1451,16 +1439,11 @@ class UI { choices.push({ name: 'Add new custom modules', value: 'add' }, { name: 'Cancel (no custom modules)', value: 'cancel' }); } - const { customAction } = await inquirer.prompt([ - { - type: 'list', - name: 'customAction', - message: - cachedCustomModules.length > 0 ? 'What would you like to do with custom modules?' : 'Would you like to add custom modules?', - choices: choices, - default: cachedCustomModules.length > 0 ? 'keep' : 'add', - }, - ]); + const customAction = await prompts.select({ + message: cachedCustomModules.length > 0 ? 'What would you like to do with custom modules?' : 'Would you like to add custom modules?', + choices: choices, + default: cachedCustomModules.length > 0 ? 'keep' : 'add', + }); switch (customAction) { case 'keep': { @@ -1472,21 +1455,18 @@ class UI { case 'select': { // Let user choose which to keep - const choices = cachedCustomModules.map((m) => ({ + const selectChoices = cachedCustomModules.map((m) => ({ name: `${m.name} ${chalk.gray(`(${m.id})`)}`, value: m.id, + checked: m.checked, })); - const { keepModules } = await inquirer.prompt([ - { - type: 'checkbox', - name: 'keepModules', - message: 'Select custom modules to keep:', - choices: choices, - default: cachedCustomModules.filter((m) => m.checked).map((m) => m.id), - }, - ]); - result.selectedCustomModules = keepModules; + const keepModules = await prompts.multiselect({ + message: `Select custom modules to keep ${chalk.dim('(↑/↓ navigate, SPACE select, ENTER confirm)')}:`, + choices: selectChoices, + required: false, + }); + result.selectedCustomModules = keepModules || []; break; } @@ -1586,7 +1566,6 @@ class UI { * @returns {Promise} True if user wants to proceed, false if they cancel */ async showOldAlphaVersionWarning(installedVersion, currentVersion, bmadFolderName) { - const inquirer = await getInquirer(); const versionInfo = this.checkAlphaVersionAge(installedVersion, currentVersion); // Also warn if version is unknown or can't be parsed (legacy/unsupported) @@ -1627,26 +1606,20 @@ class UI { console.log(chalk.yellow('─'.repeat(80))); console.log(''); - const { proceed } = await inquirer.prompt([ - { - type: 'list', - name: 'proceed', - message: 'What would you like to do?', - choices: [ - { - name: 'Proceed with update anyway (may have issues)', - value: 'proceed', - short: 'Proceed with update', - }, - { - name: 'Cancel (recommended - do a fresh install instead)', - value: 'cancel', - short: 'Cancel installation', - }, - ], - default: 'cancel', - }, - ]); + const proceed = await prompts.select({ + message: 'What would you like to do?', + choices: [ + { + name: 'Proceed with update anyway (may have issues)', + value: 'proceed', + }, + { + name: 'Cancel (recommended - do a fresh install instead)', + value: 'cancel', + }, + ], + default: 'cancel', + }); if (proceed === 'cancel') { console.log(''); From 993d02b8b3bd51c142fe9dd8de5be3a9a28b70d8 Mon Sep 17 00:00:00 2001 From: VJSai Date: Thu, 15 Jan 2026 03:57:52 +0530 Subject: [PATCH 18/22] Enhance security policy documentation (#1312) Expanded the security policy to include supported versions, reporting guidelines, response timelines, security scope, and best practices for users. Co-authored-by: Alex Verkhovsky --- SECURITY.md | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..2c565ed1 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,85 @@ +# Security Policy + +## Supported Versions + +We release security patches for the following versions: + +| Version | Supported | +| ------- | ------------------ | +| Latest | :white_check_mark: | +| < Latest | :x: | + +We recommend always using the latest version of BMad Method to ensure you have the most recent security updates. + +## Reporting a Vulnerability + +We take security vulnerabilities seriously. If you discover a security issue, please report it responsibly. + +### How to Report + +**Do NOT report security vulnerabilities through public GitHub issues.** + +Instead, please report them via one of these methods: + +1. **GitHub Security Advisories** (Preferred): Use [GitHub's private vulnerability reporting](https://github.com/bmad-code-org/BMAD-METHOD/security/advisories/new) to submit a confidential report. + +2. **Discord**: Contact a maintainer directly via DM on our [Discord server](https://discord.gg/gk8jAdXWmj). + +### What to Include + +Please include as much of the following information as possible: + +- Type of vulnerability (e.g., prompt injection, path traversal, etc.) +- Full paths of source file(s) related to the vulnerability +- Step-by-step instructions to reproduce the issue +- Proof-of-concept or exploit code (if available) +- Impact assessment of the vulnerability + +### Response Timeline + +- **Initial Response**: Within 48 hours of receiving your report +- **Status Update**: Within 7 days with our assessment +- **Resolution Target**: Critical issues within 30 days; other issues within 90 days + +### What to Expect + +1. We will acknowledge receipt of your report +2. We will investigate and validate the vulnerability +3. We will work on a fix and coordinate disclosure timing with you +4. We will credit you in the security advisory (unless you prefer to remain anonymous) + +## Security Scope + +### In Scope + +- Vulnerabilities in BMad Method core framework code +- Security issues in agent definitions or workflows that could lead to unintended behavior +- Path traversal or file system access issues +- Prompt injection vulnerabilities that bypass intended agent behavior +- Supply chain vulnerabilities in dependencies + +### Out of Scope + +- Security issues in user-created custom agents or modules +- Vulnerabilities in third-party AI providers (Claude, GPT, etc.) +- Issues that require physical access to a user's machine +- Social engineering attacks +- Denial of service attacks that don't exploit a specific vulnerability + +## Security Best Practices for Users + +When using BMad Method: + +1. **Review Agent Outputs**: Always review AI-generated code before executing it +2. **Limit File Access**: Configure your AI IDE to limit file system access where possible +3. **Keep Updated**: Regularly update to the latest version +4. **Validate Dependencies**: Review any dependencies added by generated code +5. **Environment Isolation**: Consider running AI-assisted development in isolated environments + +## Acknowledgments + +We appreciate the security research community's efforts in helping keep BMad Method secure. Contributors who report valid security issues will be acknowledged in our security advisories. + +--- + +Thank you for helping keep BMad Method and our community safe. From 1d8df63ac573b9aa9b3cef0187b250cd386e7b60 Mon Sep 17 00:00:00 2001 From: sjennings Date: Wed, 14 Jan 2026 20:53:40 -0600 Subject: [PATCH 19/22] feat(bmgd): Add E2E testing methodology and scaffold workflow (#1322) * feat(bmgd): Add E2E testing methodology and scaffold workflow - Add comprehensive e2e-testing.md knowledge fragment - Add e2e-scaffold workflow for infrastructure generation - Update qa-index.csv with e2e-testing fragment reference - Update game-qa.agent.yaml with ES trigger - Update test-design and automate instructions with E2E guidance - Update unity-testing.md with E2E section reference * fix(bmgd): improve E2E testing infrastructure robustness - Add WaitForValueApprox overloads for float/double comparisons - Fix assembly definition to use precompiledReferences for test runners - Fix CaptureOnFailure to yield before screenshot capture (main thread) - Add error handling to test file cleanup with try/catch - Fix ClickButton to use FindObjectsByType and check scene.isLoaded - Add engine-specific output paths (Unity/Unreal/Godot) to workflow - Fix knowledge_fragments paths to use correct relative paths * feat(bmgd): add E2E testing support for Godot and Unreal Godot: - Add C# testing with xUnit/NSubstitute alongside GDScript GUT - Add E2E infrastructure: GameE2ETestFixture, ScenarioBuilder, InputSimulator, AsyncAssert (all GDScript) - Add example E2E tests and quick checklist Unreal: - Add E2E infrastructure extending AFunctionalTest - Add GameE2ETestBase, ScenarioBuilder, InputSimulator classes - Add AsyncTestHelpers with latent commands and macros - Add example E2E tests for combat and turn cycle - Add CLI commands for running E2E tests --------- Co-authored-by: Scott Jennings Co-authored-by: Brian --- src/modules/bmgd/agents/game-qa.agent.yaml | 6 + .../bmgd/gametest/knowledge/e2e-testing.md | 1013 +++++++++++++++ .../bmgd/gametest/knowledge/godot-testing.md | 499 ++++++++ .../bmgd/gametest/knowledge/unity-testing.md | 14 + .../bmgd/gametest/knowledge/unreal-testing.md | 1126 ++++++++++++++++ src/modules/bmgd/gametest/qa-index.csv | 3 +- .../gametest/automate/instructions.md | 81 ++ .../gametest/e2e-scaffold/checklist.md | 95 ++ .../gametest/e2e-scaffold/instructions.md | 1137 +++++++++++++++++ .../gametest/e2e-scaffold/workflow.yaml | 145 +++ .../gametest/test-design/instructions.md | 57 +- 11 files changed, 4169 insertions(+), 7 deletions(-) create mode 100644 src/modules/bmgd/gametest/knowledge/e2e-testing.md create mode 100644 src/modules/bmgd/workflows/gametest/e2e-scaffold/checklist.md create mode 100644 src/modules/bmgd/workflows/gametest/e2e-scaffold/instructions.md create mode 100644 src/modules/bmgd/workflows/gametest/e2e-scaffold/workflow.yaml diff --git a/src/modules/bmgd/agents/game-qa.agent.yaml b/src/modules/bmgd/agents/game-qa.agent.yaml index a1eddbc6..973d521c 100644 --- a/src/modules/bmgd/agents/game-qa.agent.yaml +++ b/src/modules/bmgd/agents/game-qa.agent.yaml @@ -22,6 +22,8 @@ agent: critical_actions: - "Consult {project-root}/_bmad/bmgd/gametest/qa-index.csv to select knowledge fragments under knowledge/ and load only the files needed for the current task" + - "For E2E testing requests, always load knowledge/e2e-testing.md first" + - "When scaffolding tests, distinguish between unit, integration, and E2E test needs" - "Load the referenced fragment(s) from {project-root}/_bmad/bmgd/gametest/knowledge/ before giving recommendations" - "Cross-check recommendations with the current official Unity Test Framework, Unreal Automation, or Godot GUT documentation" - "Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md`" @@ -43,6 +45,10 @@ agent: workflow: "{project-root}/_bmad/bmgd/workflows/gametest/automate/workflow.yaml" description: "[TA] Generate automated game tests" + - trigger: ES or fuzzy match on e2e-scaffold + workflow: "{project-root}/_bmad/bmgd/workflows/gametest/e2e-scaffold/workflow.yaml" + description: "[ES] Scaffold E2E testing infrastructure" + - trigger: PP or fuzzy match on playtest-plan workflow: "{project-root}/_bmad/bmgd/workflows/gametest/playtest-plan/workflow.yaml" description: "[PP] Create structured playtesting plan" diff --git a/src/modules/bmgd/gametest/knowledge/e2e-testing.md b/src/modules/bmgd/gametest/knowledge/e2e-testing.md new file mode 100644 index 00000000..8f35bcd7 --- /dev/null +++ b/src/modules/bmgd/gametest/knowledge/e2e-testing.md @@ -0,0 +1,1013 @@ +# End-to-End Testing for Games + +## Overview + +E2E tests validate complete gameplay flows from the player's perspective — the full orchestra, not individual instruments. Unlike integration tests that verify system interactions, E2E tests verify *player journeys* work correctly from start to finish. + +This is the difference between "does the damage calculator work with the inventory system?" (integration) and "can a player actually complete a combat encounter from selection to resolution?" (E2E). + +## E2E vs Integration vs Unit + +| Aspect | Unit | Integration | E2E | +|--------|------|-------------|-----| +| Scope | Single class | System interaction | Complete flow | +| Speed | < 10ms | < 1s | 1-30s | +| Stability | Very stable | Stable | Requires care | +| Example | DamageCalc math | Combat + Inventory | Full combat encounter | +| Dependencies | None/mocked | Some real | All real | +| Catches | Logic bugs | Wiring bugs | Journey bugs | + +## The E2E Testing Pyramid Addition + +``` + /\ + / \ Manual Playtesting + /----\ (Fun, Feel, Experience) + / \ + /--------\ E2E Tests + / \ (Player Journeys) + /------------\ + / \ Integration Tests + /----------------\ (System Interactions) + / \ Unit Tests + /____________________\ (Pure Logic) +``` + +E2E tests sit between integration tests and manual playtesting. They automate what *can* be automated about player experience while acknowledging that "is this fun?" still requires human judgment. + +## E2E Infrastructure Requirements + +Before writing E2E tests, scaffold supporting infrastructure. Without this foundation, E2E tests become brittle, flaky nightmares that erode trust faster than they build confidence. + +### 1. Test Fixture Base Class + +Provides scene loading, cleanup, and common utilities. Every E2E test inherits from this. + +**Unity Example:** + +```csharp +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools; + +public abstract class GameE2ETestFixture +{ + protected virtual string SceneName => "GameScene"; + protected GameStateManager GameState { get; private set; } + protected InputSimulator Input { get; private set; } + protected ScenarioBuilder Scenario { get; private set; } + + [UnitySetUp] + public IEnumerator BaseSetUp() + { + // Load the game scene + yield return SceneManager.LoadSceneAsync(SceneName); + yield return null; // Wait one frame for scene initialization + + // Get core references + GameState = Object.FindFirstObjectByType(); + Assert.IsNotNull(GameState, $"GameStateManager not found in {SceneName}"); + + // Initialize test utilities + Input = new InputSimulator(); + Scenario = new ScenarioBuilder(GameState); + + // Wait for game to be ready + yield return WaitForGameReady(); + } + + [UnityTearDown] + public IEnumerator BaseTearDown() + { + // Clean up any test-spawned objects + yield return CleanupTestObjects(); + + // Reset input state + Input?.Reset(); + } + + protected IEnumerator WaitForGameReady(float timeout = 10f) + { + yield return AsyncAssert.WaitUntil( + () => GameState != null && GameState.IsReady, + "Game ready state", + timeout); + } + + protected virtual IEnumerator CleanupTestObjects() + { + // Override in derived classes for game-specific cleanup + yield return null; + } +} +``` + +**Unreal Example:** + +```cpp +// GameE2ETestBase.h +UCLASS() +class AGameE2ETestBase : public AFunctionalTest +{ + GENERATED_BODY() + +protected: + UPROPERTY() + UGameStateManager* GameState; + + UPROPERTY() + UInputSimulator* InputSim; + + UPROPERTY() + UScenarioBuilder* Scenario; + + virtual void PrepareTest() override; + virtual void StartTest() override; + virtual void CleanUp() override; + + void WaitForGameReady(float Timeout = 10.f); +}; +``` + +**Godot Example:** + +```gdscript +extends GutTest +class_name GameE2ETestFixture + +var game_state: GameStateManager +var input_sim: InputSimulator +var scenario: ScenarioBuilder +var _scene_instance: Node + +func before_each(): + # Load game scene + var scene = load("res://scenes/game.tscn") + _scene_instance = scene.instantiate() + add_child(_scene_instance) + + # Get references + game_state = _scene_instance.get_node("GameStateManager") + input_sim = InputSimulator.new() + scenario = ScenarioBuilder.new(game_state) + + # Wait for ready + await wait_for_game_ready() + +func after_each(): + if _scene_instance: + _scene_instance.queue_free() + input_sim = null + scenario = null + +func wait_for_game_ready(timeout: float = 10.0): + var elapsed = 0.0 + while not game_state.is_ready and elapsed < timeout: + await get_tree().process_frame + elapsed += get_process_delta_time() + assert_true(game_state.is_ready, "Game should be ready") +``` + +### 2. Scenario Builder (Fluent API) + +Configure game state for test scenarios without manual setup. This is the secret sauce — it lets you express test preconditions in domain language. + +**Unity Example:** + +```csharp +public class ScenarioBuilder +{ + private readonly GameStateManager _gameState; + private readonly List> _setupActions = new(); + + public ScenarioBuilder(GameStateManager gameState) + { + _gameState = gameState; + } + + // Domain-specific setup methods + public ScenarioBuilder WithUnit(Faction faction, Hex position, int movementPoints = 6) + { + _setupActions.Add(() => SpawnUnit(faction, position, movementPoints)); + return this; + } + + public ScenarioBuilder WithTerrain(Hex position, TerrainType terrain) + { + _setupActions.Add(() => SetTerrain(position, terrain)); + return this; + } + + public ScenarioBuilder OnTurn(int turnNumber) + { + _setupActions.Add(() => SetTurn(turnNumber)); + return this; + } + + public ScenarioBuilder OnPhase(TurnPhase phase) + { + _setupActions.Add(() => SetPhase(phase)); + return this; + } + + public ScenarioBuilder WithActiveFaction(Faction faction) + { + _setupActions.Add(() => SetActiveFaction(faction)); + return this; + } + + public ScenarioBuilder FromSaveFile(string saveFileName) + { + _setupActions.Add(() => LoadSaveFile(saveFileName)); + return this; + } + + // Execute all setup actions + public IEnumerator Build() + { + foreach (var action in _setupActions) + { + yield return action(); + yield return null; // Allow state to propagate + } + _setupActions.Clear(); + } + + // Private implementation methods + private IEnumerator SpawnUnit(Faction faction, Hex position, int mp) + { + var unit = _gameState.SpawnUnit(faction, position); + unit.MovementPoints = mp; + yield return null; + } + + private IEnumerator SetTerrain(Hex position, TerrainType terrain) + { + _gameState.Map.SetTerrain(position, terrain); + yield return null; + } + + private IEnumerator SetTurn(int turn) + { + _gameState.SetTurnNumber(turn); + yield return null; + } + + private IEnumerator SetPhase(TurnPhase phase) + { + _gameState.SetPhase(phase); + yield return null; + } + + private IEnumerator SetActiveFaction(Faction faction) + { + _gameState.SetActiveFaction(faction); + yield return null; + } + + private IEnumerator LoadSaveFile(string fileName) + { + var path = $"TestData/{fileName}"; + yield return _gameState.LoadGame(path); + } +} +``` + +**Usage:** + +```csharp +yield return Scenario + .WithUnit(Faction.Player, new Hex(3, 4), movementPoints: 6) + .WithUnit(Faction.Enemy, new Hex(5, 4)) + .WithTerrain(new Hex(4, 4), TerrainType.Forest) + .OnTurn(1) + .WithActiveFaction(Faction.Player) + .Build(); +``` + +### 3. Input Simulator + +Abstract player input for deterministic testing. Don't simulate raw mouse positions — simulate player *intent*. + +**Unity Example (New Input System):** + +```csharp +using UnityEngine; +using UnityEngine.InputSystem; + +public class InputSimulator +{ + private Mouse _mouse; + private Keyboard _keyboard; + private Camera _camera; + + public InputSimulator() + { + _mouse = Mouse.current ?? InputSystem.AddDevice(); + _keyboard = Keyboard.current ?? InputSystem.AddDevice(); + _camera = Camera.main; + } + + public IEnumerator ClickWorldPosition(Vector3 worldPos) + { + var screenPos = _camera.WorldToScreenPoint(worldPos); + yield return ClickScreenPosition(screenPos); + } + + public IEnumerator ClickHex(Hex hex) + { + var worldPos = HexUtils.HexToWorld(hex); + yield return ClickWorldPosition(worldPos); + } + + public IEnumerator ClickScreenPosition(Vector2 screenPos) + { + // Move mouse + InputSystem.QueueStateEvent(_mouse, new MouseState { position = screenPos }); + yield return null; + + // Press + InputSystem.QueueStateEvent(_mouse, new MouseState + { + position = screenPos, + buttons = 1 + }); + yield return null; + + // Release + InputSystem.QueueStateEvent(_mouse, new MouseState + { + position = screenPos, + buttons = 0 + }); + yield return null; + } + + public IEnumerator ClickButton(string buttonName) + { + var button = GameObject.Find(buttonName)?.GetComponent(); + Assert.IsNotNull(button, $"Button '{buttonName}' not found"); + + button.onClick.Invoke(); + yield return null; + } + + public IEnumerator DragFromTo(Vector3 from, Vector3 to, float duration = 0.5f) + { + var fromScreen = _camera.WorldToScreenPoint(from); + var toScreen = _camera.WorldToScreenPoint(to); + + // Start drag + InputSystem.QueueStateEvent(_mouse, new MouseState + { + position = fromScreen, + buttons = 1 + }); + yield return null; + + // Interpolate drag + var elapsed = 0f; + while (elapsed < duration) + { + var t = elapsed / duration; + var pos = Vector2.Lerp(fromScreen, toScreen, t); + InputSystem.QueueStateEvent(_mouse, new MouseState + { + position = pos, + buttons = 1 + }); + yield return null; + elapsed += Time.deltaTime; + } + + // End drag + InputSystem.QueueStateEvent(_mouse, new MouseState + { + position = toScreen, + buttons = 0 + }); + yield return null; + } + + public IEnumerator PressKey(Key key) + { + _keyboard.SetKeyDown(key); + yield return null; + _keyboard.SetKeyUp(key); + yield return null; + } + + public void Reset() + { + // Reset any held state + if (_mouse != null) + { + InputSystem.QueueStateEvent(_mouse, new MouseState()); + } + } +} +``` + +### 4. Async Assertions + +Wait-for-condition assertions with meaningful failure messages. The timeout and message are critical — when tests fail, you need to know *what* it was waiting for. + +**Unity Example:** + +```csharp +using System; +using System.Collections; +using NUnit.Framework; +using UnityEngine; + +public static class AsyncAssert +{ + /// + /// Wait until condition is true, or fail with message after timeout. + /// + public static IEnumerator WaitUntil( + Func condition, + string description, + float timeout = 5f) + { + var elapsed = 0f; + while (!condition() && elapsed < timeout) + { + yield return null; + elapsed += Time.deltaTime; + } + + Assert.IsTrue(condition(), + $"Timeout after {timeout}s waiting for: {description}"); + } + + /// + /// Wait until condition is true, with periodic logging. + /// + public static IEnumerator WaitUntilVerbose( + Func condition, + string description, + float timeout = 5f, + float logInterval = 1f) + { + var elapsed = 0f; + var lastLog = 0f; + + while (!condition() && elapsed < timeout) + { + if (elapsed - lastLog >= logInterval) + { + Debug.Log($"[E2E] Still waiting for: {description} ({elapsed:F1}s)"); + lastLog = elapsed; + } + yield return null; + elapsed += Time.deltaTime; + } + + Assert.IsTrue(condition(), + $"Timeout after {timeout}s waiting for: {description}"); + } + + /// + /// Wait for a specific value, with descriptive failure. + /// Note: For floating-point comparisons, use WaitForValueApprox instead + /// to handle precision issues. This method uses exact equality. + /// + public static IEnumerator WaitForValue( + Func getter, + T expected, + string description, + float timeout = 5f) where T : IEquatable + { + yield return WaitUntil( + () => expected.Equals(getter()), + $"{description} to equal {expected} (current: {getter()})", + timeout); + } + + /// + /// Wait for a float value within tolerance (handles floating-point precision). + /// + public static IEnumerator WaitForValueApprox( + Func getter, + float expected, + string description, + float tolerance = 0.0001f, + float timeout = 5f) + { + yield return WaitUntil( + () => Mathf.Abs(expected - getter()) < tolerance, + $"{description} to equal ~{expected} ±{tolerance} (current: {getter()})", + timeout); + } + + /// + /// Wait for a double value within tolerance (handles floating-point precision). + /// + public static IEnumerator WaitForValueApprox( + Func getter, + double expected, + string description, + double tolerance = 0.0001, + float timeout = 5f) + { + yield return WaitUntil( + () => Math.Abs(expected - getter()) < tolerance, + $"{description} to equal ~{expected} ±{tolerance} (current: {getter()})", + timeout); + } + + /// + /// Wait for an event to fire. + /// + public static IEnumerator WaitForEvent( + Action> subscribe, + Action> unsubscribe, + string eventName, + float timeout = 5f) where T : class + { + T received = null; + Action handler = e => received = e; + + subscribe(handler); + + yield return WaitUntil( + () => received != null, + $"Event '{eventName}' to fire", + timeout); + + unsubscribe(handler); + } + + /// + /// Assert that something does NOT happen within a time window. + /// + public static IEnumerator WaitAndAssertNot( + Func condition, + string description, + float duration = 1f) + { + var elapsed = 0f; + while (elapsed < duration) + { + Assert.IsFalse(condition(), + $"Condition unexpectedly became true: {description}"); + yield return null; + elapsed += Time.deltaTime; + } + } +} +``` + +## E2E Test Patterns + +### Given-When-Then with Async + +The core pattern for E2E tests. Clear structure, readable intent. + +```csharp +[UnityTest] +public IEnumerator PlayerCanMoveUnitThroughZOC() +{ + // GIVEN: Soviet unit adjacent to German ZOC + yield return Scenario + .WithUnit(Faction.Soviet, new Hex(3, 4), movementPoints: 6) + .WithUnit(Faction.German, new Hex(4, 4)) // Creates ZOC at adjacent hexes + .WithActiveFaction(Faction.Soviet) + .Build(); + + // WHEN: Player selects unit and moves through ZOC + yield return Input.ClickHex(new Hex(3, 4)); // Select unit + yield return AsyncAssert.WaitUntil( + () => GameState.Selection.HasSelectedUnit, + "Unit should be selected"); + + yield return Input.ClickHex(new Hex(5, 4)); // Click destination (through ZOC) + + // THEN: Unit arrives with reduced movement points (ZOC cost) + yield return AsyncAssert.WaitUntil( + () => GetUnitAt(new Hex(5, 4)) != null, + "Unit should arrive at destination"); + + var unit = GetUnitAt(new Hex(5, 4)); + Assert.Less(unit.MovementPoints, 3, + "ZOC passage should cost extra movement points"); +} +``` + +### Full Turn Cycle + +Testing the complete turn lifecycle. + +```csharp +[UnityTest] +public IEnumerator FullTurnCycle_PlayerToAIAndBack() +{ + // GIVEN: Mid-game state with both factions having units + yield return Scenario + .FromSaveFile("mid_game_scenario.json") + .Build(); + + var startingTurn = GameState.TurnNumber; + + // WHEN: Player ends their turn + yield return Input.ClickButton("EndPhaseButton"); + yield return AsyncAssert.WaitUntil( + () => GameState.CurrentPhase == TurnPhase.EndPhaseConfirmation, + "End phase confirmation"); + + yield return Input.ClickButton("ConfirmButton"); + + // THEN: AI executes its turn + yield return AsyncAssert.WaitUntil( + () => GameState.CurrentFaction == Faction.AI, + "AI turn should begin"); + + // AND: Eventually returns to player + yield return AsyncAssert.WaitUntil( + () => GameState.CurrentFaction == Faction.Player, + "Player turn should return", + timeout: 30f); // AI might take a while + + Assert.AreEqual(startingTurn + 1, GameState.TurnNumber, + "Turn number should increment"); +} +``` + +### Save/Load Round-Trip + +Critical for any game with persistence. + +```csharp +[UnityTest] +public IEnumerator SaveLoad_PreservesGameState() +{ + // GIVEN: Game in specific state + yield return Scenario + .WithUnit(Faction.Player, new Hex(5, 5), movementPoints: 3) + .OnTurn(7) + .Build(); + + var unitPosition = new Hex(5, 5); + var originalMP = GetUnitAt(unitPosition).MovementPoints; + var originalTurn = GameState.TurnNumber; + + // WHEN: Save and reload + var savePath = "test_save_roundtrip"; + yield return GameState.SaveGame(savePath); + + // Trash the current state + yield return SceneManager.LoadSceneAsync(SceneName); + yield return WaitForGameReady(); + + // Load the save + yield return GameState.LoadGame(savePath); + yield return WaitForGameReady(); + + // THEN: State is preserved + Assert.AreEqual(originalTurn, GameState.TurnNumber, + "Turn number should be preserved"); + + var loadedUnit = GetUnitAt(unitPosition); + Assert.IsNotNull(loadedUnit, "Unit should exist at saved position"); + Assert.AreEqual(originalMP, loadedUnit.MovementPoints, + "Movement points should be preserved"); + + // Cleanup + var savedFilePath = GameState.GetSavePath(savePath); + if (System.IO.File.Exists(savedFilePath)) + { + try + { + System.IO.File.Delete(savedFilePath); + } + catch (System.IO.IOException ex) + { + Debug.LogWarning($"[E2E] Failed to delete test save file '{savedFilePath}': {ex.Message}"); + } + catch (UnauthorizedAccessException ex) + { + Debug.LogWarning($"[E2E] Access denied deleting test save file '{savedFilePath}': {ex.Message}"); + } + } +} +``` + +### UI Flow Testing + +Testing complete UI journeys. + +```csharp +[UnityTest] +public IEnumerator MainMenu_NewGame_ReachesGameplay() +{ + // GIVEN: At main menu + yield return SceneManager.LoadSceneAsync("MainMenu"); + yield return null; + + // WHEN: Start new game flow + yield return Input.ClickButton("NewGameButton"); + yield return AsyncAssert.WaitUntil( + () => FindPanel("DifficultySelect") != null, + "Difficulty selection should appear"); + + yield return Input.ClickButton("NormalDifficultyButton"); + yield return Input.ClickButton("StartButton"); + + // THEN: Game scene loads and is playable + yield return AsyncAssert.WaitUntil( + () => SceneManager.GetActiveScene().name == "GameScene", + "Game scene should load", + timeout: 10f); + + yield return WaitForGameReady(); + + Assert.AreEqual(TurnPhase.PlayerMovement, GameState.CurrentPhase, + "Should start in player movement phase"); +} +``` + +## What to E2E Test + +### High Priority (Test These) + +| Category | Why | Examples | +|----------|-----|----------| +| Core gameplay loop | 90% of player time | Select → Move → Attack → End Turn | +| Turn/phase transitions | State machine boundaries | Phase changes, turn handoff | +| Save → Load → Resume | Data integrity | Full round-trip with verification | +| Win/lose conditions | Critical path endpoints | Victory triggers, game over | +| Critical UI flows | First impressions | Menu → Game → Pause → Resume | + +### Medium Priority (Test Key Paths) + +| Category | Why | Examples | +|----------|-----|----------| +| Undo/redo | Easy to break | Action reversal | +| Multiplayer sync | Complex state | Turn handoff in MP | +| Tutorial flow | First-time experience | Guided sequence | + +### Low Priority (Usually Skip for E2E) + +| Category | Why | Better Tested By | +|----------|-----|------------------| +| Edge cases | Combinatorial explosion | Unit tests | +| Visual correctness | Subjective, changes often | Manual testing | +| Performance | Needs dedicated tooling | Performance tests | +| Every permutation | Infinite combinations | Unit + integration | +| AI decision quality | Subjective | Playtesting | + +## E2E Test Organization + +``` +Tests/ +├── EditMode/ +│ └── ... (existing unit tests) +├── PlayMode/ +│ ├── Integration/ +│ │ └── ... (existing integration tests) +│ └── E2E/ +│ ├── E2E.asmdef +│ ├── Infrastructure/ +│ │ ├── GameE2ETestFixture.cs +│ │ ├── ScenarioBuilder.cs +│ │ ├── InputSimulator.cs +│ │ └── AsyncAssert.cs +│ ├── Scenarios/ +│ │ ├── TurnCycleE2ETests.cs +│ │ ├── MovementE2ETests.cs +│ │ ├── CombatE2ETests.cs +│ │ ├── SaveLoadE2ETests.cs +│ │ └── UIFlowE2ETests.cs +│ └── TestData/ +│ ├── mid_game_scenario.json +│ ├── endgame_scenario.json +│ └── edge_case_setup.json +``` + +### Assembly Definition for E2E + +```json +{ + "name": "E2E", + "references": [ + "GameAssembly" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "UnityEngine.TestRunner.dll", + "UnityEditor.TestRunner.dll" + ], + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "autoReferenced": false +} +``` + +## CI Considerations + +E2E tests are slower and potentially flaky. Handle with care. + +### Separate CI Job + +```yaml +# GitHub Actions example +e2e-tests: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: game-ci/unity-test-runner@v4 + with: + testMode: PlayMode + projectPath: . + customParameters: -testCategory E2E +``` + +### Retry Strategy + +```yaml +# Retry flaky tests once before failing +- uses: nick-fields/retry@v2 + with: + timeout_minutes: 15 + max_attempts: 2 + command: | + unity-test-runner --category E2E +``` + +### Failure Artifacts + +Capture screenshots and logs on failure: + +```csharp +[UnityTearDown] +public IEnumerator CaptureOnFailure() +{ + // Yield first to ensure we're on the main thread for screenshot capture + yield return null; + + if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) + { + var screenshot = ScreenCapture.CaptureScreenshotAsTexture(); + var bytes = screenshot.EncodeToPNG(); + var screenshotPath = $"TestResults/Screenshots/{TestContext.CurrentContext.Test.Name}.png"; + System.IO.File.WriteAllBytes(screenshotPath, bytes); + + Debug.Log($"[E2E FAILURE] Screenshot saved: {screenshotPath}"); + } +} +``` + +### Execution Frequency + +| Suite | When | Timeout | +|-------|------|---------| +| Unit tests | Every commit | 5 min | +| Integration | Every commit | 10 min | +| E2E (smoke) | Every commit | 15 min | +| E2E (full) | Nightly | 60 min | + +## Avoiding Flaky Tests + +E2E tests are notorious for flakiness. Fight it proactively. + +### DO + +- Use explicit waits with `AsyncAssert.WaitUntil` +- Wait for *game state*, not time +- Clean up thoroughly in TearDown +- Isolate tests completely +- Use deterministic scenarios +- Seed random number generators + +### DON'T + +- Use `yield return new WaitForSeconds(x)` as primary sync +- Depend on test execution order +- Share state between tests +- Rely on animation timing +- Assume frame-perfect timing +- Skip cleanup "because it's slow" + +### Debugging Flaky Tests + +```csharp +// Add verbose logging to track down race conditions +[UnityTest] +public IEnumerator FlakyTest_WithDebugging() +{ + Debug.Log($"[E2E] Test start: {Time.frameCount}"); + + yield return Scenario.Build(); + Debug.Log($"[E2E] Scenario built: {Time.frameCount}"); + + yield return Input.ClickHex(targetHex); + Debug.Log($"[E2E] Input sent: {Time.frameCount}, Selection: {GameState.Selection}"); + + yield return AsyncAssert.WaitUntilVerbose( + () => ExpectedCondition(), + "Expected condition", + timeout: 10f, + logInterval: 0.5f); +} +``` + +## Engine-Specific Notes + +### Unity + +- Use `[UnityTest]` attribute for coroutine-based tests +- Prefer `WaitUntil` over `WaitForSeconds` +- Use `Object.FindFirstObjectByType()` (not the deprecated `FindObjectOfType`) +- Consider `InputTestFixture` for Input System simulation +- Remember: `yield return null` waits one frame + +### Unreal + +- Use `FFunctionalTest` actors for level-based E2E +- `LatentIt` for async test steps in Automation Framework +- Gauntlet for extended E2E suites running in isolated processes +- `ADD_LATENT_AUTOMATION_COMMAND` for sequenced operations + +### Godot + +- Use `await` for async operations in GUT +- `await get_tree().create_timer(x).timeout` for timed waits +- Scene instancing provides natural test isolation +- Use `queue_free()` for cleanup, not `free()` (avoids errors) + +## Anti-Patterns + +### The "Test Everything" Trap + +Don't try to E2E test every edge case. That's what unit tests are for. + +```csharp +// BAD: Testing edge case via E2E +[UnityTest] +public IEnumerator Movement_WithExactlyZeroMP_CannotMove() // Unit test this +{ + // 30 seconds of setup for a condition unit tests cover +} + +// GOOD: E2E tests the journey, unit tests the edge cases +[UnityTest] +public IEnumerator Movement_TypicalPlayerJourney_WorksCorrectly() +{ + // Tests the common path players actually experience +} +``` + +### The "Magic Sleep" Pattern + +```csharp +// BAD: Hoping 2 seconds is enough +yield return new WaitForSeconds(2f); +Assert.IsTrue(condition); + +// GOOD: Wait for the actual condition +yield return AsyncAssert.WaitUntil(() => condition, "description"); +``` + +### The "Shared State" Trap + +```csharp +// BAD: Tests pollute each other +private static int testCounter = 0; // Shared between tests! + +// GOOD: Each test is isolated +[SetUp] +public void Setup() +{ + // Fresh state every test +} +``` + +## Measuring E2E Test Value + +### Coverage Metrics That Matter + +- **Journey coverage**: How many critical player paths are tested? +- **Failure detection rate**: How many real bugs do E2E tests catch? +- **False positive rate**: How often do E2E tests fail spuriously? + +### Warning Signs + +- E2E suite takes > 30 minutes +- Flaky test rate > 5% +- E2E tests duplicate unit test coverage +- Team skips E2E tests because they're "always broken" + +### Health Indicators + +- E2E tests catch integration bugs unit tests miss +- New features include E2E tests for happy path +- Flaky tests are fixed or removed within a sprint +- E2E suite runs on every PR (at least smoke subset) diff --git a/src/modules/bmgd/gametest/knowledge/godot-testing.md b/src/modules/bmgd/gametest/knowledge/godot-testing.md index e282be22..ab79e093 100644 --- a/src/modules/bmgd/gametest/knowledge/godot-testing.md +++ b/src/modules/bmgd/gametest/knowledge/godot-testing.md @@ -374,3 +374,502 @@ test: | Signal not detected | Signal not watched | Call `watch_signals()` before action | | Physics not working | Missing frames | Await `physics_frame` | | Flaky tests | Timing issues | Use proper await/signals | + +## C# Testing in Godot + +Godot 4 supports C# via .NET 6+. You can use standard .NET testing frameworks alongside GUT. + +### Project Setup for C# + +``` +project/ +├── addons/ +│ └── gut/ +├── src/ +│ ├── Player/ +│ │ └── PlayerController.cs +│ └── Combat/ +│ └── DamageCalculator.cs +├── tests/ +│ ├── gdscript/ +│ │ └── test_integration.gd +│ └── csharp/ +│ ├── Tests.csproj +│ └── DamageCalculatorTests.cs +└── project.csproj +``` + +### C# Test Project Setup + +Create a separate test project that references your game assembly: + +```xml + + + + net6.0 + true + false + + + + + + + + + + + + + +``` + +### Basic C# Unit Tests + +```csharp +// tests/csharp/DamageCalculatorTests.cs +using Xunit; +using YourGame.Combat; + +public class DamageCalculatorTests +{ + private readonly DamageCalculator _calculator; + + public DamageCalculatorTests() + { + _calculator = new DamageCalculator(); + } + + [Fact] + public void Calculate_BaseDamage_ReturnsCorrectValue() + { + var result = _calculator.Calculate(100f, 1f); + Assert.Equal(100f, result); + } + + [Fact] + public void Calculate_CriticalHit_DoublesDamage() + { + var result = _calculator.Calculate(100f, 2f); + Assert.Equal(200f, result); + } + + [Theory] + [InlineData(100f, 0.5f, 50f)] + [InlineData(100f, 1.5f, 150f)] + [InlineData(50f, 2f, 100f)] + public void Calculate_Parameterized_ReturnsExpected( + float baseDamage, float multiplier, float expected) + { + var result = _calculator.Calculate(baseDamage, multiplier); + Assert.Equal(expected, result); + } +} +``` + +### Testing Godot Nodes in C# + +For tests requiring Godot runtime, use a hybrid approach: + +```csharp +// tests/csharp/PlayerControllerTests.cs +using Godot; +using Xunit; +using YourGame.Player; + +public class PlayerControllerTests : IDisposable +{ + private readonly SceneTree _sceneTree; + private PlayerController _player; + + public PlayerControllerTests() + { + // These tests must run within Godot runtime + // Use GodotXUnit or similar adapter + } + + [GodotFact] // Custom attribute for Godot runtime tests + public async Task Player_Move_ChangesPosition() + { + var startPos = _player.GlobalPosition; + + _player.SetInput(new Vector2(1, 0)); + + await ToSignal(GetTree().CreateTimer(0.5f), "timeout"); + + Assert.True(_player.GlobalPosition.X > startPos.X); + } + + public void Dispose() + { + _player?.QueueFree(); + } +} +``` + +### C# Mocking with NSubstitute + +```csharp +using NSubstitute; +using Xunit; + +public class EnemyAITests +{ + [Fact] + public void Enemy_UsesPathfinding_WhenMoving() + { + var mockPathfinding = Substitute.For(); + mockPathfinding.FindPath(Arg.Any(), Arg.Any()) + .Returns(new[] { Vector2.Zero, new Vector2(10, 10) }); + + var enemy = new EnemyAI(mockPathfinding); + + enemy.MoveTo(new Vector2(10, 10)); + + mockPathfinding.Received().FindPath( + Arg.Any(), + Arg.Is(v => v == new Vector2(10, 10))); + } +} +``` + +### Running C# Tests + +```bash +# Run C# unit tests (no Godot runtime needed) +dotnet test tests/csharp/Tests.csproj + +# Run with coverage +dotnet test tests/csharp/Tests.csproj --collect:"XPlat Code Coverage" + +# Run specific test +dotnet test tests/csharp/Tests.csproj --filter "FullyQualifiedName~DamageCalculator" +``` + +### Hybrid Test Strategy + +| Test Type | Framework | When to Use | +| ------------- | ---------------- | ---------------------------------- | +| Pure logic | xUnit/NUnit (C#) | Classes without Godot dependencies | +| Node behavior | GUT (GDScript) | MonoBehaviour-like testing | +| Integration | GUT (GDScript) | Scene and signal testing | +| E2E | GUT (GDScript) | Full gameplay flows | + +## End-to-End Testing + +For comprehensive E2E testing patterns, infrastructure scaffolding, and +scenario builders, see **knowledge/e2e-testing.md**. + +### E2E Infrastructure for Godot + +#### GameE2ETestFixture (GDScript) + +```gdscript +# tests/e2e/infrastructure/game_e2e_test_fixture.gd +extends GutTest +class_name GameE2ETestFixture + +var game_state: GameStateManager +var input_sim: InputSimulator +var scenario: ScenarioBuilder +var _scene_instance: Node + +## Override to specify a different scene for specific test classes. +func get_scene_path() -> String: + return "res://scenes/game.tscn" + +func before_each(): + # Load game scene + var scene = load(get_scene_path()) + _scene_instance = scene.instantiate() + add_child(_scene_instance) + + # Get references + game_state = _scene_instance.get_node("GameStateManager") + assert_not_null(game_state, "GameStateManager not found in scene") + + input_sim = InputSimulator.new() + scenario = ScenarioBuilder.new(game_state) + + # Wait for ready + await wait_for_game_ready() + +func after_each(): + if _scene_instance: + _scene_instance.queue_free() + _scene_instance = null + input_sim = null + scenario = null + +func wait_for_game_ready(timeout: float = 10.0): + var elapsed = 0.0 + while not game_state.is_ready and elapsed < timeout: + await get_tree().process_frame + elapsed += get_process_delta_time() + assert_true(game_state.is_ready, "Game should be ready within timeout") +``` + +#### ScenarioBuilder (GDScript) + +```gdscript +# tests/e2e/infrastructure/scenario_builder.gd +extends RefCounted +class_name ScenarioBuilder + +var _game_state: GameStateManager +var _setup_actions: Array[Callable] = [] + +func _init(game_state: GameStateManager): + _game_state = game_state + +## Load a pre-configured scenario from a save file. +func from_save_file(file_name: String) -> ScenarioBuilder: + _setup_actions.append(func(): await _load_save_file(file_name)) + return self + +## Configure the current turn number. +func on_turn(turn_number: int) -> ScenarioBuilder: + _setup_actions.append(func(): _set_turn(turn_number)) + return self + +## Spawn a unit at position. +func with_unit(faction: int, position: Vector2, movement_points: int = 6) -> ScenarioBuilder: + _setup_actions.append(func(): await _spawn_unit(faction, position, movement_points)) + return self + +## Execute all configured setup actions. +func build() -> void: + for action in _setup_actions: + await action.call() + _setup_actions.clear() + +## Clear pending actions without executing. +func reset() -> void: + _setup_actions.clear() + +# Private implementation +func _load_save_file(file_name: String) -> void: + var path = "res://tests/e2e/test_data/%s" % file_name + await _game_state.load_game(path) + +func _set_turn(turn: int) -> void: + _game_state.set_turn_number(turn) + +func _spawn_unit(faction: int, pos: Vector2, mp: int) -> void: + var unit = _game_state.spawn_unit(faction, pos) + unit.movement_points = mp +``` + +#### InputSimulator (GDScript) + +```gdscript +# tests/e2e/infrastructure/input_simulator.gd +extends RefCounted +class_name InputSimulator + +## Click at a world position. +func click_world_position(world_pos: Vector2) -> void: + var viewport = Engine.get_main_loop().root.get_viewport() + var camera = viewport.get_camera_2d() + var screen_pos = camera.get_screen_center_position() + (world_pos - camera.global_position) + await click_screen_position(screen_pos) + +## Click at a screen position. +func click_screen_position(screen_pos: Vector2) -> void: + var press = InputEventMouseButton.new() + press.button_index = MOUSE_BUTTON_LEFT + press.pressed = true + press.position = screen_pos + + var release = InputEventMouseButton.new() + release.button_index = MOUSE_BUTTON_LEFT + release.pressed = false + release.position = screen_pos + + Input.parse_input_event(press) + await Engine.get_main_loop().process_frame + Input.parse_input_event(release) + await Engine.get_main_loop().process_frame + +## Click a UI button by name. +func click_button(button_name: String) -> void: + var root = Engine.get_main_loop().root + var button = _find_button_recursive(root, button_name) + assert(button != null, "Button '%s' not found in scene tree" % button_name) + + if not button.visible: + push_warning("[InputSimulator] Button '%s' is not visible" % button_name) + if button.disabled: + push_warning("[InputSimulator] Button '%s' is disabled" % button_name) + + button.pressed.emit() + await Engine.get_main_loop().process_frame + +func _find_button_recursive(node: Node, button_name: String) -> Button: + if node is Button and node.name == button_name: + return node + for child in node.get_children(): + var found = _find_button_recursive(child, button_name) + if found: + return found + return null + +## Press and release a key. +func press_key(keycode: Key) -> void: + var press = InputEventKey.new() + press.keycode = keycode + press.pressed = true + + var release = InputEventKey.new() + release.keycode = keycode + release.pressed = false + + Input.parse_input_event(press) + await Engine.get_main_loop().process_frame + Input.parse_input_event(release) + await Engine.get_main_loop().process_frame + +## Simulate an input action. +func action_press(action_name: String) -> void: + Input.action_press(action_name) + await Engine.get_main_loop().process_frame + +func action_release(action_name: String) -> void: + Input.action_release(action_name) + await Engine.get_main_loop().process_frame + +## Reset all input state. +func reset() -> void: + Input.flush_buffered_events() +``` + +#### AsyncAssert (GDScript) + +```gdscript +# tests/e2e/infrastructure/async_assert.gd +extends RefCounted +class_name AsyncAssert + +## Wait until condition is true, or fail after timeout. +static func wait_until( + condition: Callable, + description: String, + timeout: float = 5.0 +) -> void: + var elapsed := 0.0 + while not condition.call() and elapsed < timeout: + await Engine.get_main_loop().process_frame + elapsed += Engine.get_main_loop().root.get_process_delta_time() + + assert(condition.call(), + "Timeout after %.1fs waiting for: %s" % [timeout, description]) + +## Wait for a value to equal expected. +static func wait_for_value( + getter: Callable, + expected: Variant, + description: String, + timeout: float = 5.0 +) -> void: + await wait_until( + func(): return getter.call() == expected, + "%s to equal '%s' (current: '%s')" % [description, expected, getter.call()], + timeout) + +## Wait for a float value within tolerance. +static func wait_for_value_approx( + getter: Callable, + expected: float, + description: String, + tolerance: float = 0.0001, + timeout: float = 5.0 +) -> void: + await wait_until( + func(): return absf(expected - getter.call()) < tolerance, + "%s to equal ~%s ±%s (current: %s)" % [description, expected, tolerance, getter.call()], + timeout) + +## Assert that condition does NOT become true within duration. +static func assert_never_true( + condition: Callable, + description: String, + duration: float = 1.0 +) -> void: + var elapsed := 0.0 + while elapsed < duration: + assert(not condition.call(), + "Condition unexpectedly became true: %s" % description) + await Engine.get_main_loop().process_frame + elapsed += Engine.get_main_loop().root.get_process_delta_time() + +## Wait for specified number of frames. +static func wait_frames(count: int) -> void: + for i in range(count): + await Engine.get_main_loop().process_frame + +## Wait for physics to settle. +static func wait_for_physics(frames: int = 3) -> void: + for i in range(frames): + await Engine.get_main_loop().root.get_tree().physics_frame +``` + +### Example E2E Test (GDScript) + +```gdscript +# tests/e2e/scenarios/test_combat_flow.gd +extends GameE2ETestFixture + +func test_player_can_attack_enemy(): + # GIVEN: Player and enemy in combat range + await scenario \ + .with_unit(Faction.PLAYER, Vector2(100, 100)) \ + .with_unit(Faction.ENEMY, Vector2(150, 100)) \ + .build() + + var enemy = game_state.get_units(Faction.ENEMY)[0] + var initial_health = enemy.health + + # WHEN: Player attacks + await input_sim.click_world_position(Vector2(100, 100)) # Select player + await AsyncAssert.wait_until( + func(): return game_state.selected_unit != null, + "Unit should be selected") + + await input_sim.click_world_position(Vector2(150, 100)) # Attack enemy + + # THEN: Enemy takes damage + await AsyncAssert.wait_until( + func(): return enemy.health < initial_health, + "Enemy should take damage") + +func test_turn_cycle_completes(): + # GIVEN: Game in progress + await scenario.on_turn(1).build() + var starting_turn = game_state.turn_number + + # WHEN: Player ends turn + await input_sim.click_button("EndTurnButton") + await AsyncAssert.wait_until( + func(): return game_state.current_faction == Faction.ENEMY, + "Should switch to enemy turn") + + # AND: Enemy turn completes + await AsyncAssert.wait_until( + func(): return game_state.current_faction == Faction.PLAYER, + "Should return to player turn", + 30.0) # AI might take a while + + # THEN: Turn number incremented + assert_eq(game_state.turn_number, starting_turn + 1) +``` + +### Quick E2E Checklist for Godot + +- [ ] Create `GameE2ETestFixture` base class extending GutTest +- [ ] Implement `ScenarioBuilder` for your game's domain +- [ ] Create `InputSimulator` wrapping Godot Input +- [ ] Add `AsyncAssert` utilities with proper await +- [ ] Organize E2E tests under `tests/e2e/scenarios/` +- [ ] Configure GUT to include E2E test directory +- [ ] Set up CI with headless Godot execution diff --git a/src/modules/bmgd/gametest/knowledge/unity-testing.md b/src/modules/bmgd/gametest/knowledge/unity-testing.md index f1b872d9..f057933c 100644 --- a/src/modules/bmgd/gametest/knowledge/unity-testing.md +++ b/src/modules/bmgd/gametest/knowledge/unity-testing.md @@ -381,3 +381,17 @@ test: | NullReferenceException | Missing Setup | Ensure [SetUp] initializes all fields | | Tests hang | Infinite coroutine | Add timeout or max iterations | | Flaky physics tests | Timing dependent | Use WaitForFixedUpdate, increase tolerance | + +## End-to-End Testing + +For comprehensive E2E testing patterns, infrastructure scaffolding, and +scenario builders, see **knowledge/e2e-testing.md**. + +### Quick E2E Checklist for Unity + +- [ ] Create `GameE2ETestFixture` base class +- [ ] Implement `ScenarioBuilder` for your game's domain +- [ ] Create `InputSimulator` wrapping Input System +- [ ] Add `AsyncAssert` utilities +- [ ] Organize E2E tests under `Tests/PlayMode/E2E/` +- [ ] Configure separate CI job for E2E suite diff --git a/src/modules/bmgd/gametest/knowledge/unreal-testing.md b/src/modules/bmgd/gametest/knowledge/unreal-testing.md index 0863bd0c..3b8f668d 100644 --- a/src/modules/bmgd/gametest/knowledge/unreal-testing.md +++ b/src/modules/bmgd/gametest/knowledge/unreal-testing.md @@ -386,3 +386,1129 @@ test: | Crash in test | Missing world | Use proper test context | | Flaky results | Timing issues | Use latent commands | | Slow tests | Too many actors | Optimize test setup | + +## End-to-End Testing + +For comprehensive E2E testing patterns, infrastructure scaffolding, and +scenario builders, see **knowledge/e2e-testing.md**. + +### E2E Infrastructure for Unreal + +E2E tests in Unreal leverage Functional Tests with custom infrastructure for scenario setup, input simulation, and async assertions. + +#### Project Structure + +``` +Source/ +├── MyGame/ +│ └── ... (game code) +└── MyGameTests/ + ├── MyGameTests.Build.cs + ├── Public/ + │ ├── GameE2ETestBase.h + │ ├── ScenarioBuilder.h + │ ├── InputSimulator.h + │ └── AsyncTestHelpers.h + ├── Private/ + │ ├── GameE2ETestBase.cpp + │ ├── ScenarioBuilder.cpp + │ ├── InputSimulator.cpp + │ ├── AsyncTestHelpers.cpp + │ └── E2E/ + │ ├── CombatE2ETests.cpp + │ ├── TurnCycleE2ETests.cpp + │ └── SaveLoadE2ETests.cpp + └── TestMaps/ + ├── E2E_Combat.umap + └── E2E_TurnCycle.umap +``` + +#### Test Module Build File + +```cpp +// MyGameTests.Build.cs +using UnrealBuildTool; + +public class MyGameTests : ModuleRules +{ + public MyGameTests(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { + "Core", + "CoreUObject", + "Engine", + "InputCore", + "EnhancedInput", + "MyGame" + }); + + PrivateDependencyModuleNames.AddRange(new string[] { + "FunctionalTesting", + "AutomationController" + }); + + // Only include in editor/test builds + if (Target.bBuildDeveloperTools || Target.Configuration == UnrealTargetConfiguration.Debug) + { + PrecompileForTargets = PrecompileTargetsType.Any; + } + } +} +``` + +#### GameE2ETestBase (Base Class) + +```cpp +// GameE2ETestBase.h +#pragma once + +#include "CoreMinimal.h" +#include "FunctionalTest.h" +#include "GameE2ETestBase.generated.h" + +class UScenarioBuilder; +class UInputSimulator; +class UGameStateManager; + +/** + * Base class for all E2E functional tests. + * Provides scenario setup, input simulation, and async assertion utilities. + */ +UCLASS(Abstract) +class MYGAMETESTS_API AGameE2ETestBase : public AFunctionalTest +{ + GENERATED_BODY() + +public: + AGameE2ETestBase(); + +protected: + /** Game state manager reference, found automatically on test start. */ + UPROPERTY(BlueprintReadOnly, Category = "E2E") + UGameStateManager* GameState; + + /** Input simulation utility. */ + UPROPERTY(BlueprintReadOnly, Category = "E2E") + UInputSimulator* InputSim; + + /** Scenario configuration builder. */ + UPROPERTY(BlueprintReadOnly, Category = "E2E") + UScenarioBuilder* Scenario; + + /** Timeout for waiting operations (seconds). */ + UPROPERTY(EditAnywhere, Category = "E2E") + float DefaultTimeout = 10.0f; + + // AFunctionalTest interface + virtual void PrepareTest() override; + virtual void StartTest() override; + virtual void CleanUp() override; + + /** Override to specify custom game state class. */ + virtual TSubclassOf GetGameStateClass() const; + + /** + * Wait until game state reports ready. + * Calls OnGameReady() when complete or fails test on timeout. + */ + UFUNCTION(BlueprintCallable, Category = "E2E") + void WaitForGameReady(); + + /** Called when game is ready. Override to begin test logic. */ + virtual void OnGameReady(); + + /** + * Wait until condition is true, then call callback. + * Fails test if timeout exceeded. + */ + void WaitUntil(TFunction Condition, const FString& Description, + TFunction OnComplete, float Timeout = -1.0f); + + /** + * Wait for a specific value, then call callback. + */ + template + void WaitForValue(TFunction Getter, T Expected, + const FString& Description, TFunction OnComplete, + float Timeout = -1.0f); + + /** + * Assert condition and fail test with message if false. + */ + void AssertTrue(bool Condition, const FString& Message); + + /** + * Assert values are equal within tolerance. + */ + void AssertNearlyEqual(float Actual, float Expected, + const FString& Message, float Tolerance = 0.0001f); + +private: + FTimerHandle WaitTimerHandle; + float WaitElapsed; + float WaitTimeout; + TFunction WaitCondition; + TFunction WaitCallback; + FString WaitDescription; + + void TickWaitCondition(); +}; +``` + +```cpp +// GameE2ETestBase.cpp +#include "GameE2ETestBase.h" +#include "ScenarioBuilder.h" +#include "InputSimulator.h" +#include "GameStateManager.h" +#include "Engine/World.h" +#include "TimerManager.h" +#include "Kismet/GameplayStatics.h" + +AGameE2ETestBase::AGameE2ETestBase() +{ + // Default test settings + TimeLimit = 120.0f; // 2 minute max for E2E tests + TimesUpMessage = TEXT("E2E test exceeded time limit"); +} + +void AGameE2ETestBase::PrepareTest() +{ + Super::PrepareTest(); + + // Create utilities + InputSim = NewObject(this); + Scenario = NewObject(this); +} + +void AGameE2ETestBase::StartTest() +{ + Super::StartTest(); + + // Find game state manager + TSubclassOf GameStateClass = GetGameStateClass(); + TArray FoundActors; + UGameplayStatics::GetAllActorsOfClass(GetWorld(), GameStateClass, FoundActors); + + if (FoundActors.Num() > 0) + { + GameState = Cast( + FoundActors[0]->GetComponentByClass(GameStateClass)); + } + + if (!GameState) + { + FinishTest(EFunctionalTestResult::Failed, + FString::Printf(TEXT("GameStateManager not found in test world"))); + return; + } + + // Initialize scenario builder with game state + Scenario->Initialize(GameState); + + // Wait for game to be ready + WaitForGameReady(); +} + +void AGameE2ETestBase::CleanUp() +{ + // Clear timer + if (WaitTimerHandle.IsValid()) + { + GetWorld()->GetTimerManager().ClearTimer(WaitTimerHandle); + } + + // Reset input state + if (InputSim) + { + InputSim->Reset(); + } + + Super::CleanUp(); +} + +TSubclassOf AGameE2ETestBase::GetGameStateClass() const +{ + return UGameStateManager::StaticClass(); +} + +void AGameE2ETestBase::WaitForGameReady() +{ + WaitUntil( + [this]() { return GameState && GameState->IsReady(); }, + TEXT("Game to reach ready state"), + [this]() { OnGameReady(); }, + DefaultTimeout + ); +} + +void AGameE2ETestBase::OnGameReady() +{ + // Override in derived classes to begin test logic +} + +void AGameE2ETestBase::WaitUntil( + TFunction Condition, + const FString& Description, + TFunction OnComplete, + float Timeout) +{ + WaitCondition = Condition; + WaitCallback = OnComplete; + WaitDescription = Description; + WaitElapsed = 0.0f; + WaitTimeout = (Timeout < 0.0f) ? DefaultTimeout : Timeout; + + // Check immediately + if (WaitCondition()) + { + WaitCallback(); + return; + } + + // Set up polling timer + GetWorld()->GetTimerManager().SetTimer( + WaitTimerHandle, + this, + &AGameE2ETestBase::TickWaitCondition, + 0.1f, // Check every 100ms + true + ); +} + +void AGameE2ETestBase::TickWaitCondition() +{ + WaitElapsed += 0.1f; + + if (WaitCondition()) + { + GetWorld()->GetTimerManager().ClearTimer(WaitTimerHandle); + WaitCallback(); + } + else if (WaitElapsed >= WaitTimeout) + { + GetWorld()->GetTimerManager().ClearTimer(WaitTimerHandle); + FinishTest(EFunctionalTestResult::Failed, + FString::Printf(TEXT("Timeout after %.1fs waiting for: %s"), + WaitTimeout, *WaitDescription)); + } +} + +void AGameE2ETestBase::AssertTrue(bool Condition, const FString& Message) +{ + if (!Condition) + { + FinishTest(EFunctionalTestResult::Failed, Message); + } +} + +void AGameE2ETestBase::AssertNearlyEqual( + float Actual, float Expected, + const FString& Message, float Tolerance) +{ + if (!FMath::IsNearlyEqual(Actual, Expected, Tolerance)) + { + FinishTest(EFunctionalTestResult::Failed, + FString::Printf(TEXT("%s: Expected ~%f, got %f"), + *Message, Expected, Actual)); + } +} +``` + +#### ScenarioBuilder + +```cpp +// ScenarioBuilder.h +#pragma once + +#include "CoreMinimal.h" +#include "UObject/NoExportTypes.h" +#include "ScenarioBuilder.generated.h" + +class UGameStateManager; + +/** + * Fluent API for configuring E2E test scenarios. + */ +UCLASS(BlueprintType) +class MYGAMETESTS_API UScenarioBuilder : public UObject +{ + GENERATED_BODY() + +public: + /** Initialize with game state reference. */ + void Initialize(UGameStateManager* InGameState); + + /** + * Load scenario from save file. + * @param FileName Save file name (without path) + */ + UFUNCTION(BlueprintCallable, Category = "Scenario") + UScenarioBuilder* FromSaveFile(const FString& FileName); + + /** + * Set the current turn number. + */ + UFUNCTION(BlueprintCallable, Category = "Scenario") + UScenarioBuilder* OnTurn(int32 TurnNumber); + + /** + * Set the active faction. + */ + UFUNCTION(BlueprintCallable, Category = "Scenario") + UScenarioBuilder* WithActiveFaction(EFaction Faction); + + /** + * Spawn a unit at position. + * @param Faction Unit's faction + * @param Position World position + * @param MovementPoints Starting movement points + */ + UFUNCTION(BlueprintCallable, Category = "Scenario") + UScenarioBuilder* WithUnit(EFaction Faction, FVector Position, + int32 MovementPoints = 6); + + /** + * Set terrain at position. + */ + UFUNCTION(BlueprintCallable, Category = "Scenario") + UScenarioBuilder* WithTerrain(FVector Position, ETerrainType Terrain); + + /** + * Execute all queued setup actions. + * @param OnComplete Called when all actions complete + */ + void Build(TFunction OnComplete); + + /** Clear pending actions without executing. */ + UFUNCTION(BlueprintCallable, Category = "Scenario") + void Reset(); + +private: + UPROPERTY() + UGameStateManager* GameState; + + TArray)>> SetupActions; + + void ExecuteNextAction(int32 Index, TFunction FinalCallback); +}; +``` + +```cpp +// ScenarioBuilder.cpp +#include "ScenarioBuilder.h" +#include "GameStateManager.h" + +void UScenarioBuilder::Initialize(UGameStateManager* InGameState) +{ + GameState = InGameState; + SetupActions.Empty(); +} + +UScenarioBuilder* UScenarioBuilder::FromSaveFile(const FString& FileName) +{ + SetupActions.Add([this, FileName](TFunction Done) { + FString Path = FString::Printf(TEXT("TestData/%s"), *FileName); + GameState->LoadGame(Path, FOnLoadComplete::CreateLambda([Done](bool bSuccess) { + Done(); + })); + }); + return this; +} + +UScenarioBuilder* UScenarioBuilder::OnTurn(int32 TurnNumber) +{ + SetupActions.Add([this, TurnNumber](TFunction Done) { + GameState->SetTurnNumber(TurnNumber); + Done(); + }); + return this; +} + +UScenarioBuilder* UScenarioBuilder::WithActiveFaction(EFaction Faction) +{ + SetupActions.Add([this, Faction](TFunction Done) { + GameState->SetActiveFaction(Faction); + Done(); + }); + return this; +} + +UScenarioBuilder* UScenarioBuilder::WithUnit( + EFaction Faction, FVector Position, int32 MovementPoints) +{ + SetupActions.Add([this, Faction, Position, MovementPoints](TFunction Done) { + AUnit* Unit = GameState->SpawnUnit(Faction, Position); + if (Unit) + { + Unit->SetMovementPoints(MovementPoints); + } + Done(); + }); + return this; +} + +UScenarioBuilder* UScenarioBuilder::WithTerrain( + FVector Position, ETerrainType Terrain) +{ + SetupActions.Add([this, Position, Terrain](TFunction Done) { + GameState->GetMap()->SetTerrain(Position, Terrain); + Done(); + }); + return this; +} + +void UScenarioBuilder::Build(TFunction OnComplete) +{ + if (SetupActions.Num() == 0) + { + OnComplete(); + return; + } + + ExecuteNextAction(0, OnComplete); +} + +void UScenarioBuilder::Reset() +{ + SetupActions.Empty(); +} + +void UScenarioBuilder::ExecuteNextAction( + int32 Index, TFunction FinalCallback) +{ + if (Index >= SetupActions.Num()) + { + SetupActions.Empty(); + FinalCallback(); + return; + } + + SetupActions[Index]([this, Index, FinalCallback]() { + ExecuteNextAction(Index + 1, FinalCallback); + }); +} +``` + +#### InputSimulator + +```cpp +// InputSimulator.h +#pragma once + +#include "CoreMinimal.h" +#include "UObject/NoExportTypes.h" +#include "InputCoreTypes.h" +#include "InputSimulator.generated.h" + +class APlayerController; + +/** + * Simulates player input for E2E tests. + */ +UCLASS(BlueprintType) +class MYGAMETESTS_API UInputSimulator : public UObject +{ + GENERATED_BODY() + +public: + /** + * Click at a world position. + * @param WorldPos Position in world space + * @param OnComplete Called when click completes + */ + void ClickWorldPosition(FVector WorldPos, TFunction OnComplete); + + /** + * Click at screen coordinates. + */ + void ClickScreenPosition(FVector2D ScreenPos, TFunction OnComplete); + + /** + * Click a UI button by name. + * @param ButtonName Name of the button widget + * @param OnComplete Called when click completes + */ + UFUNCTION(BlueprintCallable, Category = "Input") + void ClickButton(const FString& ButtonName, TFunction OnComplete); + + /** + * Press and release a key. + */ + void PressKey(FKey Key, TFunction OnComplete); + + /** + * Trigger an input action. + */ + void TriggerAction(FName ActionName, TFunction OnComplete); + + /** + * Drag from one position to another. + */ + void DragFromTo(FVector From, FVector To, float Duration, + TFunction OnComplete); + + /** Reset all input state. */ + UFUNCTION(BlueprintCallable, Category = "Input") + void Reset(); + +private: + APlayerController* GetPlayerController() const; + void SimulateMouseClick(FVector2D ScreenPos, TFunction OnComplete); +}; +``` + +```cpp +// InputSimulator.cpp +#include "InputSimulator.h" +#include "GameFramework/PlayerController.h" +#include "Blueprint/UserWidget.h" +#include "Components/Button.h" +#include "Blueprint/WidgetBlueprintLibrary.h" +#include "Kismet/GameplayStatics.h" +#include "Engine/World.h" +#include "TimerManager.h" +#include "Framework/Application/SlateApplication.h" + +void UInputSimulator::ClickWorldPosition( + FVector WorldPos, TFunction OnComplete) +{ + APlayerController* PC = GetPlayerController(); + if (!PC) + { + OnComplete(); + return; + } + + FVector2D ScreenPos; + if (PC->ProjectWorldLocationToScreen(WorldPos, ScreenPos, true)) + { + ClickScreenPosition(ScreenPos, OnComplete); + } + else + { + OnComplete(); + } +} + +void UInputSimulator::ClickScreenPosition( + FVector2D ScreenPos, TFunction OnComplete) +{ + SimulateMouseClick(ScreenPos, OnComplete); +} + +void UInputSimulator::ClickButton( + const FString& ButtonName, TFunction OnComplete) +{ + APlayerController* PC = GetPlayerController(); + if (!PC) + { + UE_LOG(LogTemp, Warning, + TEXT("[InputSimulator] No PlayerController found")); + OnComplete(); + return; + } + + // Find button in all widgets + TArray FoundWidgets; + UWidgetBlueprintLibrary::GetAllWidgetsOfClass( + PC->GetWorld(), FoundWidgets, UUserWidget::StaticClass(), false); + + UButton* TargetButton = nullptr; + for (UUserWidget* Widget : FoundWidgets) + { + if (UButton* Button = Cast( + Widget->GetWidgetFromName(FName(*ButtonName)))) + { + TargetButton = Button; + break; + } + } + + if (TargetButton) + { + if (!TargetButton->GetIsEnabled()) + { + UE_LOG(LogTemp, Warning, + TEXT("[InputSimulator] Button '%s' is not enabled"), *ButtonName); + } + + // Simulate click via delegate + TargetButton->OnClicked.Broadcast(); + + // Delay to allow UI to process + FTimerHandle TimerHandle; + PC->GetWorld()->GetTimerManager().SetTimer( + TimerHandle, + [OnComplete]() { OnComplete(); }, + 0.1f, + false + ); + } + else + { + UE_LOG(LogTemp, Warning, + TEXT("[InputSimulator] Button '%s' not found"), *ButtonName); + OnComplete(); + } +} + +void UInputSimulator::PressKey(FKey Key, TFunction OnComplete) +{ + APlayerController* PC = GetPlayerController(); + if (!PC) + { + OnComplete(); + return; + } + + // Simulate key press + FInputKeyEventArgs PressArgs(PC->GetLocalPlayer()->GetControllerId(), + Key, EInputEvent::IE_Pressed, 1.0f, false); + PC->InputKey(PressArgs); + + // Delay then release + FTimerHandle TimerHandle; + PC->GetWorld()->GetTimerManager().SetTimer( + TimerHandle, + [this, PC, Key, OnComplete]() { + FInputKeyEventArgs ReleaseArgs(PC->GetLocalPlayer()->GetControllerId(), + Key, EInputEvent::IE_Released, 0.0f, false); + PC->InputKey(ReleaseArgs); + OnComplete(); + }, + 0.1f, + false + ); +} + +void UInputSimulator::TriggerAction(FName ActionName, TFunction OnComplete) +{ + APlayerController* PC = GetPlayerController(); + if (!PC) + { + OnComplete(); + return; + } + + // For Enhanced Input System + if (UEnhancedInputComponent* EIC = Cast( + PC->InputComponent.Get())) + { + // Trigger the action through the input subsystem + // Implementation depends on your input action setup + } + + OnComplete(); +} + +void UInputSimulator::DragFromTo( + FVector From, FVector To, float Duration, TFunction OnComplete) +{ + APlayerController* PC = GetPlayerController(); + if (!PC) + { + OnComplete(); + return; + } + + FVector2D FromScreen, ToScreen; + PC->ProjectWorldLocationToScreen(From, FromScreen, true); + PC->ProjectWorldLocationToScreen(To, ToScreen, true); + + // Simulate drag start + FSlateApplication::Get().ProcessMouseButtonDownEvent( + nullptr, FPointerEvent( + 0, FromScreen, FromScreen, TSet(), + EKeys::LeftMouseButton, 0, FModifierKeysState() + ) + ); + + // Interpolate drag over duration + float Elapsed = 0.0f; + float Interval = 0.05f; + + FTimerHandle DragTimer; + PC->GetWorld()->GetTimerManager().SetTimer( + DragTimer, + [this, PC, FromScreen, ToScreen, Duration, &Elapsed, Interval, OnComplete, &DragTimer]() { + Elapsed += Interval; + float Alpha = FMath::Clamp(Elapsed / Duration, 0.0f, 1.0f); + FVector2D CurrentPos = FMath::Lerp(FromScreen, ToScreen, Alpha); + + FSlateApplication::Get().ProcessMouseMoveEvent( + FPointerEvent( + 0, CurrentPos, CurrentPos - FVector2D(1, 0), + TSet({EKeys::LeftMouseButton}), + FModifierKeysState() + ) + ); + + if (Alpha >= 1.0f) + { + PC->GetWorld()->GetTimerManager().ClearTimer(DragTimer); + + FSlateApplication::Get().ProcessMouseButtonUpEvent( + FPointerEvent( + 0, ToScreen, ToScreen, TSet(), + EKeys::LeftMouseButton, 0, FModifierKeysState() + ) + ); + + OnComplete(); + } + }, + Interval, + true + ); +} + +void UInputSimulator::Reset() +{ + // Release any held inputs + FSlateApplication::Get().ClearAllUserFocus(); +} + +APlayerController* UInputSimulator::GetPlayerController() const +{ + UWorld* World = GEngine->GetWorldContexts()[0].World(); + return World ? UGameplayStatics::GetPlayerController(World, 0) : nullptr; +} + +void UInputSimulator::SimulateMouseClick( + FVector2D ScreenPos, TFunction OnComplete) +{ + // Press + FSlateApplication::Get().ProcessMouseButtonDownEvent( + nullptr, FPointerEvent( + 0, ScreenPos, ScreenPos, TSet(), + EKeys::LeftMouseButton, 0, FModifierKeysState() + ) + ); + + // Delay then release + UWorld* World = GEngine->GetWorldContexts()[0].World(); + if (World) + { + FTimerHandle TimerHandle; + World->GetTimerManager().SetTimer( + TimerHandle, + [ScreenPos, OnComplete]() { + FSlateApplication::Get().ProcessMouseButtonUpEvent( + FPointerEvent( + 0, ScreenPos, ScreenPos, TSet(), + EKeys::LeftMouseButton, 0, FModifierKeysState() + ) + ); + OnComplete(); + }, + 0.1f, + false + ); + } + else + { + OnComplete(); + } +} +``` + +#### AsyncTestHelpers + +```cpp +// AsyncTestHelpers.h +#pragma once + +#include "CoreMinimal.h" +#include "Misc/AutomationTest.h" + +/** + * Latent command to wait for a condition. + */ +DEFINE_LATENT_AUTOMATION_COMMAND_THREE_PARAMETER( + FWaitUntilCondition, + TFunction, Condition, + FString, Description, + float, Timeout +); + +/** + * Latent command to wait for a value to equal expected. + */ +template +class FWaitForValue : public IAutomationLatentCommand +{ +public: + FWaitForValue(TFunction InGetter, T InExpected, + const FString& InDescription, float InTimeout) + : Getter(InGetter) + , Expected(InExpected) + , Description(InDescription) + , Timeout(InTimeout) + , Elapsed(0.0f) + {} + + virtual bool Update() override + { + Elapsed += FApp::GetDeltaTime(); + + if (Getter() == Expected) + { + return true; + } + + if (Elapsed >= Timeout) + { + UE_LOG(LogTemp, Error, + TEXT("Timeout after %.1fs waiting for: %s"), + Timeout, *Description); + return true; + } + + return false; + } + +private: + TFunction Getter; + T Expected; + FString Description; + float Timeout; + float Elapsed; +}; + +/** + * Latent command to wait for float value within tolerance. + */ +class FWaitForValueApprox : public IAutomationLatentCommand +{ +public: + FWaitForValueApprox(TFunction InGetter, float InExpected, + const FString& InDescription, + float InTolerance = 0.0001f, float InTimeout = 5.0f) + : Getter(InGetter) + , Expected(InExpected) + , Description(InDescription) + , Tolerance(InTolerance) + , Timeout(InTimeout) + , Elapsed(0.0f) + {} + + virtual bool Update() override + { + Elapsed += FApp::GetDeltaTime(); + + if (FMath::IsNearlyEqual(Getter(), Expected, Tolerance)) + { + return true; + } + + if (Elapsed >= Timeout) + { + UE_LOG(LogTemp, Error, + TEXT("Timeout after %.1fs waiting for: %s (expected ~%f, got %f)"), + Timeout, *Description, Expected, Getter()); + return true; + } + + return false; + } + +private: + TFunction Getter; + float Expected; + FString Description; + float Tolerance; + float Timeout; + float Elapsed; +}; + +/** + * Latent command to assert condition never becomes true. + */ +DEFINE_LATENT_AUTOMATION_COMMAND_THREE_PARAMETER( + FAssertNeverTrue, + TFunction, Condition, + FString, Description, + float, Duration +); + +/** Helper macros for E2E tests */ +#define E2E_WAIT_UNTIL(Cond, Desc, Timeout) \ + ADD_LATENT_AUTOMATION_COMMAND(FWaitUntilCondition(Cond, Desc, Timeout)) + +#define E2E_WAIT_FOR_VALUE(Getter, Expected, Desc, Timeout) \ + ADD_LATENT_AUTOMATION_COMMAND(FWaitForValue(Getter, Expected, Desc, Timeout)) + +#define E2E_WAIT_FOR_FLOAT(Getter, Expected, Desc, Tolerance, Timeout) \ + ADD_LATENT_AUTOMATION_COMMAND(FWaitForValueApprox(Getter, Expected, Desc, Tolerance, Timeout)) +``` + +### Example E2E Test + +```cpp +// CombatE2ETests.cpp +#include "GameE2ETestBase.h" +#include "ScenarioBuilder.h" +#include "InputSimulator.h" +#include "AsyncTestHelpers.h" + +/** + * E2E test: Player can attack enemy and deal damage. + */ +UCLASS() +class AE2E_PlayerAttacksEnemy : public AGameE2ETestBase +{ + GENERATED_BODY() + +protected: + virtual void OnGameReady() override + { + // GIVEN: Player and enemy units in combat range + Scenario + ->WithUnit(EFaction::Player, FVector(100, 100, 0), 6) + ->WithUnit(EFaction::Enemy, FVector(200, 100, 0), 6) + ->WithActiveFaction(EFaction::Player) + ->Build([this]() { OnScenarioReady(); }); + } + +private: + void OnScenarioReady() + { + // Store enemy reference and initial health + TArray Enemies = GameState->GetUnits(EFaction::Enemy); + if (Enemies.Num() == 0) + { + FinishTest(EFunctionalTestResult::Failed, TEXT("No enemy found")); + return; + } + + AUnit* Enemy = Enemies[0]; + float InitialHealth = Enemy->GetHealth(); + + // WHEN: Player selects unit and attacks + InputSim->ClickWorldPosition(FVector(100, 100, 0), [this]() { + WaitUntil( + [this]() { return GameState->GetSelectedUnit() != nullptr; }, + TEXT("Unit should be selected"), + [this, Enemy, InitialHealth]() { PerformAttack(Enemy, InitialHealth); } + ); + }); + } + + void PerformAttack(AUnit* Enemy, float InitialHealth) + { + // Click on enemy to attack + InputSim->ClickWorldPosition(Enemy->GetActorLocation(), [this, Enemy, InitialHealth]() { + // THEN: Enemy takes damage + WaitUntil( + [Enemy, InitialHealth]() { return Enemy->GetHealth() < InitialHealth; }, + TEXT("Enemy should take damage"), + [this]() { + FinishTest(EFunctionalTestResult::Succeeded, + TEXT("Player successfully attacked enemy")); + } + ); + }); + } +}; + +/** + * E2E test: Full turn cycle completes correctly. + */ +UCLASS() +class AE2E_TurnCycleCompletes : public AGameE2ETestBase +{ + GENERATED_BODY() + +protected: + int32 StartingTurn; + + virtual void OnGameReady() override + { + // GIVEN: Game in progress + Scenario + ->OnTurn(1) + ->WithActiveFaction(EFaction::Player) + ->Build([this]() { OnScenarioReady(); }); + } + +private: + void OnScenarioReady() + { + StartingTurn = GameState->GetTurnNumber(); + + // WHEN: Player ends turn + InputSim->ClickButton(TEXT("EndTurnButton"), [this]() { + WaitUntil( + [this]() { + return GameState->GetActiveFaction() == EFaction::Enemy; + }, + TEXT("Should switch to enemy turn"), + [this]() { WaitForPlayerTurnReturn(); } + ); + }); + } + + void WaitForPlayerTurnReturn() + { + // Wait for AI turn to complete + WaitUntil( + [this]() { + return GameState->GetActiveFaction() == EFaction::Player; + }, + TEXT("Should return to player turn"), + [this]() { VerifyTurnIncremented(); }, + 30.0f // AI might take a while + ); + } + + void VerifyTurnIncremented() + { + // THEN: Turn number incremented + int32 CurrentTurn = GameState->GetTurnNumber(); + if (CurrentTurn == StartingTurn + 1) + { + FinishTest(EFunctionalTestResult::Succeeded, + TEXT("Turn cycle completed successfully")); + } + else + { + FinishTest(EFunctionalTestResult::Failed, + FString::Printf(TEXT("Expected turn %d, got %d"), + StartingTurn + 1, CurrentTurn)); + } + } +}; +``` + +### Running E2E Tests + +```bash +# Run all E2E tests +UnrealEditor-Cmd.exe MyGame.uproject \ + -ExecCmds="Automation RunTests MyGame.E2E" \ + -unattended -nopause -nullrhi + +# Run specific E2E test +UnrealEditor-Cmd.exe MyGame.uproject \ + -ExecCmds="Automation RunTests MyGame.E2E.Combat.PlayerAttacksEnemy" \ + -unattended -nopause + +# Run with detailed logging +UnrealEditor-Cmd.exe MyGame.uproject \ + -ExecCmds="Automation RunTests MyGame.E2E" \ + -unattended -nopause -log=E2ETests.log +``` + +### Quick E2E Checklist for Unreal + +- [ ] Create `GameE2ETestBase` class extending `AFunctionalTest` +- [ ] Implement `ScenarioBuilder` for your game's domain +- [ ] Create `InputSimulator` wrapping Slate input system +- [ ] Add `AsyncTestHelpers` with latent commands +- [ ] Create dedicated E2E test maps with spawn points +- [ ] Organize E2E tests under `Source/MyGameTests/Private/E2E/` +- [ ] Configure separate CI job for E2E suite with extended timeout +- [ ] Use Gauntlet for extended E2E scenarios if needed diff --git a/src/modules/bmgd/gametest/qa-index.csv b/src/modules/bmgd/gametest/qa-index.csv index af026afd..05b3ba79 100644 --- a/src/modules/bmgd/gametest/qa-index.csv +++ b/src/modules/bmgd/gametest/qa-index.csv @@ -14,4 +14,5 @@ input-testing,Input Testing,"Controller, keyboard, and touch input validation"," localization-testing,Localization Testing,"Text, audio, and cultural validation for international releases","localization,i18n,text",knowledge/localization-testing.md certification-testing,Platform Certification,"Console TRC/XR requirements and certification testing","certification,console,trc,xr",knowledge/certification-testing.md smoke-testing,Smoke Testing,"Critical path validation for build verification","smoke-tests,bvt,ci",knowledge/smoke-testing.md -test-priorities,Test Priorities Matrix,"P0-P3 criteria, coverage targets, execution ordering for games","prioritization,risk,coverage",knowledge/test-priorities.md \ No newline at end of file +test-priorities,Test Priorities Matrix,"P0-P3 criteria, coverage targets, execution ordering for games","prioritization,risk,coverage",knowledge/test-priorities.md +e2e-testing,End-to-End Testing,"Complete player journey testing with infrastructure patterns and async utilities","e2e,integration,player-journeys,scenarios,infrastructure",knowledge/e2e-testing.md diff --git a/src/modules/bmgd/workflows/gametest/automate/instructions.md b/src/modules/bmgd/workflows/gametest/automate/instructions.md index 2af2e4fe..8fb1615c 100644 --- a/src/modules/bmgd/workflows/gametest/automate/instructions.md +++ b/src/modules/bmgd/workflows/gametest/automate/instructions.md @@ -209,6 +209,87 @@ func test_{feature}_integration(): # Cleanup scene.queue_free() ``` +### E2E Journey Tests + +**Knowledge Base Reference**: `knowledge/e2e-testing.md` +```csharp +public class {Feature}E2ETests : GameE2ETestFixture +{ + [UnityTest] + public IEnumerator {JourneyName}_Succeeds() + { + // GIVEN + yield return Scenario + .{SetupMethod1}() + .{SetupMethod2}() + .Build(); + + // WHEN + yield return Input.{Action1}(); + yield return AsyncAssert.WaitUntil( + () => {Condition1}, "{Description1}"); + yield return Input.{Action2}(); + + // THEN + yield return AsyncAssert.WaitUntil( + () => {FinalCondition}, "{FinalDescription}"); + Assert.{Assertion}({expected}, {actual}); + } +} +``` + + +## Step 3.5: Generate E2E Infrastructure + +Before generating E2E tests, scaffold the required infrastructure. + +### Infrastructure Checklist + +1. **Test Fixture Base Class** + - Scene loading/unloading + - Game ready state waiting + - Common service access + - Cleanup guarantees + +2. **Scenario Builder** + - Fluent API for game state configuration + - Domain-specific methods (e.g., `WithUnit`, `OnTurn`) + - Yields for state propagation + +3. **Input Simulator** + - Click/drag abstractions + - Button press simulation + - Keyboard input queuing + +4. **Async Assertions** + - `WaitUntil` with timeout and message + - `WaitForEvent` for event-driven flows + - `WaitForState` for state machine transitions + +### Generation Template +```csharp +// GameE2ETestFixture.cs +public abstract class GameE2ETestFixture +{ + protected {GameStateClass} GameState; + protected {InputSimulatorClass} Input; + protected {ScenarioBuilderClass} Scenario; + + [UnitySetUp] + public IEnumerator BaseSetUp() + { + yield return LoadScene("{main_scene}"); + GameState = Object.FindFirstObjectByType<{GameStateClass}>(); + Input = new {InputSimulatorClass}(); + Scenario = new {ScenarioBuilderClass}(GameState); + yield return WaitForReady(); + } + + // ... (fill from e2e-testing.md patterns) +} +``` + +**After scaffolding infrastructure, proceed to generate actual E2E tests.** --- diff --git a/src/modules/bmgd/workflows/gametest/e2e-scaffold/checklist.md b/src/modules/bmgd/workflows/gametest/e2e-scaffold/checklist.md new file mode 100644 index 00000000..58a510d2 --- /dev/null +++ b/src/modules/bmgd/workflows/gametest/e2e-scaffold/checklist.md @@ -0,0 +1,95 @@ +# E2E Infrastructure Scaffold Checklist + +## Preflight Validation + +- [ ] Test framework already initialized (`Tests/` directory exists with proper structure) +- [ ] Game state manager class identified +- [ ] Main gameplay scene identified and loads without errors +- [ ] No existing E2E infrastructure conflicts + +## Architecture Analysis + +- [ ] Game engine correctly detected +- [ ] Engine version identified +- [ ] Input system type determined (New Input System, Legacy, Custom) +- [ ] Game state manager class located +- [ ] Ready/initialized state property identified +- [ ] Key domain entities catalogued for ScenarioBuilder + +## Generated Files + +### Directory Structure +- [ ] `Tests/PlayMode/E2E/` directory created +- [ ] `Tests/PlayMode/E2E/Infrastructure/` directory created +- [ ] `Tests/PlayMode/E2E/Scenarios/` directory created +- [ ] `Tests/PlayMode/E2E/TestData/` directory created + +### Infrastructure Files +- [ ] `E2E.asmdef` created with correct assembly references +- [ ] `GameE2ETestFixture.cs` created with correct class references +- [ ] `ScenarioBuilder.cs` created with at least placeholder methods +- [ ] `InputSimulator.cs` created matching detected input system +- [ ] `AsyncAssert.cs` created with core assertion methods + +### Example and Documentation +- [ ] `ExampleE2ETest.cs` created with working infrastructure test +- [ ] `README.md` created with usage documentation + +## Code Quality + +### GameE2ETestFixture +- [ ] Correct namespace applied +- [ ] Correct `GameStateClass` reference +- [ ] Correct `SceneName` default +- [ ] `WaitForGameReady` uses correct ready property +- [ ] `UnitySetUp` and `UnityTearDown` properly structured +- [ ] Virtual methods for derived class customization + +### ScenarioBuilder +- [ ] Fluent API pattern correctly implemented +- [ ] `Build()` executes all queued actions +- [ ] At least one domain-specific method added (or clear TODOs) +- [ ] `FromSaveFile` method scaffolded + +### InputSimulator +- [ ] Matches detected input system (New vs Legacy) +- [ ] Mouse click simulation works +- [ ] Button click by name works +- [ ] Keyboard input scaffolded +- [ ] `Reset()` method cleans up state + +### AsyncAssert +- [ ] `WaitUntil` includes timeout and descriptive failure +- [ ] `WaitForValue` provides current vs expected in failure +- [ ] `AssertNeverTrue` for negative assertions +- [ ] Frame/physics wait utilities included + +## Assembly Definition + +- [ ] References main game assembly +- [ ] References Unity.InputSystem (if applicable) +- [ ] `overrideReferences` set to true +- [ ] `precompiledReferences` includes nunit.framework.dll +- [ ] `precompiledReferences` includes UnityEngine.TestRunner.dll +- [ ] `precompiledReferences` includes UnityEditor.TestRunner.dll +- [ ] `UNITY_INCLUDE_TESTS` define constraint set + +## Verification + +- [ ] Project compiles without errors after scaffold +- [ ] `ExampleE2ETests.Infrastructure_GameLoadsAndReachesReadyState` passes +- [ ] Test appears in Test Runner under PlayMode → E2E category + +## Documentation Quality + +- [ ] README explains all infrastructure components +- [ ] Quick start example is copy-pasteable +- [ ] Extension instructions are clear +- [ ] Troubleshooting table addresses common issues + +## Handoff + +- [ ] Summary output provided with all configuration values +- [ ] Next steps clearly listed +- [ ] Customization requirements highlighted +- [ ] Knowledge fragments referenced diff --git a/src/modules/bmgd/workflows/gametest/e2e-scaffold/instructions.md b/src/modules/bmgd/workflows/gametest/e2e-scaffold/instructions.md new file mode 100644 index 00000000..42b99840 --- /dev/null +++ b/src/modules/bmgd/workflows/gametest/e2e-scaffold/instructions.md @@ -0,0 +1,1137 @@ + + +# E2E Test Infrastructure Scaffold + +**Workflow ID**: `_bmad/bmgd/gametest/e2e-scaffold` +**Version**: 1.0 (BMad v6) + +--- + +## Overview + +Scaffold complete E2E testing infrastructure for an existing game project. This workflow creates the foundation required for reliable, maintainable end-to-end tests: test fixtures, scenario builders, input simulators, and async assertion utilities — all tailored to the project's specific architecture. + +E2E tests validate complete player journeys. Without proper infrastructure, they become brittle nightmares. This workflow prevents that. + +--- + +## Preflight Requirements + +**Critical:** Verify these requirements before proceeding. If any fail, HALT and guide the user. + +- ✅ Test framework already initialized (run `test-framework` workflow first) +- ✅ Game has identifiable state manager class +- ✅ Main gameplay scene exists and is functional +- ✅ No existing E2E infrastructure (check for `Tests/PlayMode/E2E/`) + +**Knowledge Base:** Load `knowledge/e2e-testing.md` before proceeding. + +--- + +## Step 1: Analyze Game Architecture + +### 1.1 Detect Game Engine + +Identify engine type by checking for: + +- **Unity**: `Assets/`, `ProjectSettings/`, `*.unity` scenes +- **Unreal**: `*.uproject`, `Source/`, `Config/DefaultEngine.ini` +- **Godot**: `project.godot`, `*.tscn`, `*.gd` files + +Load the appropriate engine-specific knowledge fragment: +- Unity: `knowledge/unity-testing.md` +- Unreal: `knowledge/unreal-testing.md` +- Godot: `knowledge/godot-testing.md` + +### 1.2 Identify Core Systems + +Locate and document: + +1. **Game State Manager** + - Primary class that holds game state + - Look for: `GameManager`, `GameStateManager`, `GameController`, `GameMode` + - Note: initialization method, ready state property, save/load methods + +2. **Input Handling** + - Unity: New Input System (`InputSystem` package) vs Legacy (`Input.GetKey`) + - Unreal: Enhanced Input vs Legacy + - Godot: Built-in Input singleton + - Custom input abstraction layer + +3. **Event/Messaging System** + - Event bus pattern + - C# events/delegates + - UnityEvents + - Signals (Godot) + +4. **Scene Structure** + - Main gameplay scene name + - Scene loading approach (additive, single) + - Bootstrap/initialization flow + +### 1.3 Identify Domain Concepts + +For the ScenarioBuilder, identify: + +- **Primary Entities**: Units, players, items, enemies, etc. +- **State Machine States**: Turn phases, game modes, player states +- **Spatial System**: Grid/hex positions, world coordinates, regions +- **Resources**: Currency, health, mana, ammunition, etc. + +### 1.4 Check Existing Test Structure + +``` +Expected structure after test-framework workflow: +Tests/ +├── EditMode/ +│ └── ... (unit tests) +└── PlayMode/ + └── ... (integration tests) +``` + +If `Tests/PlayMode/E2E/` already exists, HALT and ask user how to proceed. + +--- + +## Step 2: Generate Infrastructure + +### 2.1 Create Directory Structure + +``` +Tests/PlayMode/E2E/ +├── E2E.asmdef +├── Infrastructure/ +│ ├── GameE2ETestFixture.cs +│ ├── ScenarioBuilder.cs +│ ├── InputSimulator.cs +│ └── AsyncAssert.cs +├── Scenarios/ +│ └── (empty - user will add tests here) +├── TestData/ +│ └── (empty - user will add fixtures here) +└── README.md +``` + +### 2.2 Generate Assembly Definition + +**Unity: `E2E.asmdef`** + +```json +{ + "name": "E2E", + "rootNamespace": "{ProjectNamespace}.Tests.E2E", + "references": [ + "{GameAssemblyName}", + "Unity.InputSystem", + "Unity.InputSystem.TestFramework" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "UnityEngine.TestRunner.dll", + "UnityEditor.TestRunner.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} +``` + +**Notes:** +- Replace `{ProjectNamespace}` with detected project namespace +- Replace `{GameAssemblyName}` with main game assembly +- Include `Unity.InputSystem` references only if Input System package detected + +### 2.3 Generate GameE2ETestFixture + +This is the base class all E2E tests inherit from. + +**Unity Template:** + +```csharp +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools; + +namespace {Namespace}.Tests.E2E +{ + /// + /// Base fixture for all E2E tests. Handles scene loading, game initialization, + /// and provides access to core test utilities. + /// + public abstract class GameE2ETestFixture + { + /// + /// Override to specify a different scene for specific test classes. + /// + protected virtual string SceneName => "{MainSceneName}"; + + /// + /// Primary game state manager reference. + /// + protected {GameStateClass} GameState { get; private set; } + + /// + /// Input simulation utility. + /// + protected InputSimulator Input { get; private set; } + + /// + /// Scenario configuration builder. + /// + protected ScenarioBuilder Scenario { get; private set; } + + [UnitySetUp] + public IEnumerator BaseSetUp() + { + // Load the game scene + yield return SceneManager.LoadSceneAsync(SceneName); + yield return null; // Wait one frame for Awake/Start + + // Get core references + GameState = Object.FindFirstObjectByType<{GameStateClass}>(); + Assert.IsNotNull(GameState, + $"{nameof({GameStateClass})} not found in scene '{SceneName}'"); + + // Initialize test utilities + Input = new InputSimulator(); + Scenario = new ScenarioBuilder(GameState); + + // Wait for game to reach ready state + yield return WaitForGameReady(); + + // Call derived class setup + yield return SetUp(); + } + + [UnityTearDown] + public IEnumerator BaseTearDown() + { + // Call derived class teardown first + yield return TearDown(); + + // Reset input state + Input?.Reset(); + + // Clear references + GameState = null; + Input = null; + Scenario = null; + } + + /// + /// Override for test-class-specific setup. Called after scene loads and game is ready. + /// + protected virtual IEnumerator SetUp() + { + yield return null; + } + + /// + /// Override for test-class-specific teardown. Called before base cleanup. + /// + protected virtual IEnumerator TearDown() + { + yield return null; + } + + /// + /// Waits until the game reaches a playable state. + /// + protected virtual IEnumerator WaitForGameReady(float timeout = 10f) + { + yield return AsyncAssert.WaitUntil( + () => GameState != null && GameState.{IsReadyProperty}, + "Game to reach ready state", + timeout); + } + + /// + /// Captures screenshot on test failure for debugging. + /// + protected IEnumerator CaptureFailureScreenshot() + { + if (TestContext.CurrentContext.Result.Outcome.Status == + NUnit.Framework.Interfaces.TestStatus.Failed) + { + var texture = ScreenCapture.CaptureScreenshotAsTexture(); + var bytes = texture.EncodeToPNG(); + var testName = TestContext.CurrentContext.Test.Name; + var path = $"TestResults/E2E_Failure_{testName}_{System.DateTime.Now:yyyyMMdd_HHmmss}.png"; + + System.IO.Directory.CreateDirectory("TestResults"); + System.IO.File.WriteAllBytes(path, bytes); + Debug.Log($"[E2E] Failure screenshot saved: {path}"); + + Object.Destroy(texture); + } + yield return null; + } + } +} +``` + +**Customization Points:** +- `{Namespace}`: Project namespace (e.g., `AugustStorm`) +- `{MainSceneName}`: Detected main gameplay scene +- `{GameStateClass}`: Identified game state manager class +- `{IsReadyProperty}`: Property indicating game is initialized (e.g., `IsReady`, `IsInitialized`) + +### 2.4 Generate ScenarioBuilder + +Fluent API for configuring test scenarios. This must be customized to the game's domain. + +**Unity Template:** + +```csharp +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace {Namespace}.Tests.E2E +{ + /// + /// Fluent builder for configuring E2E test scenarios. + /// Add domain-specific methods as needed for your game. + /// + public class ScenarioBuilder + { + private readonly {GameStateClass} _gameState; + private readonly List> _setupActions = new(); + + public ScenarioBuilder({GameStateClass} gameState) + { + _gameState = gameState; + } + + #region State Configuration + + /// + /// Load a pre-configured scenario from a save file. + /// + public ScenarioBuilder FromSaveFile(string fileName) + { + _setupActions.Add(() => LoadSaveFile(fileName)); + return this; + } + + // TODO: Add domain-specific configuration methods + // Examples for a turn-based strategy game: + // + // public ScenarioBuilder WithUnit(Faction faction, Hex position, int mp = 6) + // { + // _setupActions.Add(() => SpawnUnit(faction, position, mp)); + // return this; + // } + // + // public ScenarioBuilder OnTurn(int turnNumber) + // { + // _setupActions.Add(() => SetTurn(turnNumber)); + // return this; + // } + // + // public ScenarioBuilder WithActiveFaction(Faction faction) + // { + // _setupActions.Add(() => SetActiveFaction(faction)); + // return this; + // } + + #endregion + + #region Execution + + /// + /// Execute all configured setup actions. + /// + public IEnumerator Build() + { + foreach (var action in _setupActions) + { + yield return action(); + yield return null; // Allow state to propagate + } + _setupActions.Clear(); + } + + /// + /// Clear pending actions without executing. + /// + public void Reset() + { + _setupActions.Clear(); + } + + #endregion + + #region Private Implementation + + private IEnumerator LoadSaveFile(string fileName) + { + var path = $"TestData/{fileName}"; + // TODO: Implement save loading based on your save system + // yield return _gameState.LoadGame(path); + Debug.Log($"[ScenarioBuilder] Loading scenario from: {path}"); + yield return null; + } + + // TODO: Implement domain-specific setup methods + // private IEnumerator SpawnUnit(Faction faction, Hex position, int mp) + // { + // var unit = _gameState.SpawnUnit(faction, position); + // unit.MovementPoints = mp; + // yield return null; + // } + + #endregion + } +} +``` + +**Note to Agent:** After generating the template, analyze the game's domain model and add 3-5 concrete configuration methods based on identified entities (Step 1.3). + +### 2.5 Generate InputSimulator + +Abstract player input for deterministic testing. + +**Unity Template (New Input System):** + +```csharp +using System.Collections; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; + +namespace {Namespace}.Tests.E2E +{ + /// + /// Simulates player input for E2E tests. + /// + public class InputSimulator + { + private Mouse _mouse; + private Keyboard _keyboard; + private Camera _camera; + + public InputSimulator() + { + _mouse = Mouse.current ?? InputSystem.AddDevice(); + _keyboard = Keyboard.current ?? InputSystem.AddDevice(); + _camera = Camera.main; + } + + #region Mouse Input + + /// + /// Click at a world position. + /// + public IEnumerator ClickWorldPosition(Vector3 worldPos) + { + var screenPos = _camera.WorldToScreenPoint(worldPos); + yield return ClickScreenPosition(new Vector2(screenPos.x, screenPos.y)); + } + + /// + /// Click at a screen position. + /// + public IEnumerator ClickScreenPosition(Vector2 screenPos) + { + // Move mouse to position + InputState.Change(_mouse.position, screenPos); + yield return null; + + // Press + using (StateEvent.From(_mouse, out var eventPtr)) + { + _mouse.CopyState(eventPtr); + _mouse.leftButton.WriteValueIntoEvent(1f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + + // Release + using (StateEvent.From(_mouse, out var eventPtr)) + { + _mouse.CopyState(eventPtr); + _mouse.leftButton.WriteValueIntoEvent(0f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + } + + /// + /// Click a UI button by name. + /// + public IEnumerator ClickButton(string buttonName) + { + var button = GameObject.Find(buttonName)? + .GetComponent(); + + if (button == null) + { + // Search in inactive objects within loaded scenes only + var buttons = Object.FindObjectsByType( + FindObjectsInactive.Include, FindObjectsSortMode.None); + foreach (var b in buttons) + { + if (b.name == buttonName && b.gameObject.scene.isLoaded) + { + button = b; + break; + } + } + } + + UnityEngine.Assertions.Assert.IsNotNull(button, + $"Button '{buttonName}' not found in active scenes"); + + if (!button.interactable) + { + Debug.LogWarning($"[InputSimulator] Button '{buttonName}' is not interactable"); + } + + button.onClick.Invoke(); + yield return null; + } + + /// + /// Drag from one world position to another. + /// + public IEnumerator DragFromTo(Vector3 from, Vector3 to, float duration = 0.3f) + { + var fromScreen = (Vector2)_camera.WorldToScreenPoint(from); + var toScreen = (Vector2)_camera.WorldToScreenPoint(to); + + // Move to start + InputState.Change(_mouse.position, fromScreen); + yield return null; + + // Press + using (StateEvent.From(_mouse, out var eventPtr)) + { + _mouse.CopyState(eventPtr); + _mouse.leftButton.WriteValueIntoEvent(1f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + + // Drag + var elapsed = 0f; + while (elapsed < duration) + { + var t = elapsed / duration; + var pos = Vector2.Lerp(fromScreen, toScreen, t); + InputState.Change(_mouse.position, pos); + yield return null; + elapsed += Time.deltaTime; + } + + // Release at destination + InputState.Change(_mouse.position, toScreen); + using (StateEvent.From(_mouse, out var eventPtr)) + { + _mouse.CopyState(eventPtr); + _mouse.leftButton.WriteValueIntoEvent(0f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + } + + #endregion + + #region Keyboard Input + + /// + /// Press and release a key. + /// + public IEnumerator PressKey(Key key) + { + var control = _keyboard[key]; + using (StateEvent.From(_keyboard, out var eventPtr)) + { + control.WriteValueIntoEvent(1f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + + using (StateEvent.From(_keyboard, out var eventPtr)) + { + control.WriteValueIntoEvent(0f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + } + + /// + /// Hold a key for a duration. + /// + public IEnumerator HoldKey(Key key, float duration) + { + var control = _keyboard[key]; + using (StateEvent.From(_keyboard, out var eventPtr)) + { + control.WriteValueIntoEvent(1f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + + yield return new WaitForSeconds(duration); + + using (StateEvent.From(_keyboard, out var eventPtr)) + { + control.WriteValueIntoEvent(0f, eventPtr); + InputSystem.QueueEvent(eventPtr); + } + yield return null; + } + + #endregion + + #region Utility + + /// + /// Reset all input state. + /// + public void Reset() + { + if (_mouse != null) + { + InputState.Change(_mouse, new MouseState()); + } + if (_keyboard != null) + { + InputState.Change(_keyboard, new KeyboardState()); + } + } + + /// + /// Update camera reference (call after scene load if needed). + /// + public void RefreshCamera() + { + _camera = Camera.main; + } + + #endregion + } +} +``` + +**Unity Template (Legacy Input):** + +If legacy input system detected, generate a simpler version using `Input.mousePosition` simulation or UI event triggering. + +### 2.6 Generate AsyncAssert + +Wait-for-condition assertions with meaningful failure messages. + +**Unity Template:** + +```csharp +using System; +using System.Collections; +using NUnit.Framework; +using UnityEngine; + +namespace {Namespace}.Tests.E2E +{ + /// + /// Async assertion utilities for E2E tests. + /// + public static class AsyncAssert + { + /// + /// Wait until condition is true, or fail with message after timeout. + /// + /// Condition to wait for + /// Human-readable description of what we're waiting for + /// Maximum seconds to wait + public static IEnumerator WaitUntil( + Func condition, + string description, + float timeout = 5f) + { + var elapsed = 0f; + while (!condition() && elapsed < timeout) + { + yield return null; + elapsed += Time.deltaTime; + } + + Assert.IsTrue(condition(), + $"Timeout after {timeout:F1}s waiting for: {description}"); + } + + /// + /// Wait until condition is true, with periodic debug logging. + /// + public static IEnumerator WaitUntilVerbose( + Func condition, + string description, + float timeout = 5f, + float logInterval = 1f) + { + var elapsed = 0f; + var lastLog = 0f; + + while (!condition() && elapsed < timeout) + { + if (elapsed - lastLog >= logInterval) + { + Debug.Log($"[E2E] Waiting for: {description} ({elapsed:F1}s elapsed)"); + lastLog = elapsed; + } + yield return null; + elapsed += Time.deltaTime; + } + + if (condition()) + { + Debug.Log($"[E2E] Condition met: {description} (after {elapsed:F1}s)"); + } + + Assert.IsTrue(condition(), + $"Timeout after {timeout:F1}s waiting for: {description}"); + } + + /// + /// Wait for a value to equal expected. + /// Note: For floating-point comparisons, use WaitForValueApprox instead + /// to handle precision issues. This method uses exact equality. + /// + public static IEnumerator WaitForValue( + Func getter, + T expected, + string description, + float timeout = 5f) where T : IEquatable + { + yield return WaitUntil( + () => expected.Equals(getter()), + $"{description} to equal '{expected}' (current: '{getter()}')", + timeout); + } + + /// + /// Wait for a float value within tolerance (handles floating-point precision). + /// + public static IEnumerator WaitForValueApprox( + Func getter, + float expected, + string description, + float tolerance = 0.0001f, + float timeout = 5f) + { + yield return WaitUntil( + () => Mathf.Abs(expected - getter()) < tolerance, + $"{description} to equal ~{expected} ±{tolerance} (current: {getter()})", + timeout); + } + + /// + /// Wait for a double value within tolerance (handles floating-point precision). + /// + public static IEnumerator WaitForValueApprox( + Func getter, + double expected, + string description, + double tolerance = 0.0001, + float timeout = 5f) + { + yield return WaitUntil( + () => Math.Abs(expected - getter()) < tolerance, + $"{description} to equal ~{expected} ±{tolerance} (current: {getter()})", + timeout); + } + + /// + /// Wait for a value to not equal a specific value. + /// + public static IEnumerator WaitForValueNot( + Func getter, + T notExpected, + string description, + float timeout = 5f) where T : IEquatable + { + yield return WaitUntil( + () => !notExpected.Equals(getter()), + $"{description} to change from '{notExpected}'", + timeout); + } + + /// + /// Wait for a reference to become non-null. + /// + public static IEnumerator WaitForNotNull( + Func getter, + string description, + float timeout = 5f) where T : class + { + yield return WaitUntil( + () => getter() != null, + $"{description} to exist (not null)", + timeout); + } + + /// + /// Wait for a Unity Object to exist (handles Unity's fake null). + /// + public static IEnumerator WaitForUnityObject( + Func getter, + string description, + float timeout = 5f) where T : UnityEngine.Object + { + yield return WaitUntil( + () => getter() != null, // Unity overloads == for destroyed objects + $"{description} to exist", + timeout); + } + + /// + /// Assert that a condition does NOT become true within a time window. + /// Useful for testing that something doesn't happen. + /// + public static IEnumerator AssertNeverTrue( + Func condition, + string description, + float duration = 1f) + { + var elapsed = 0f; + while (elapsed < duration) + { + Assert.IsFalse(condition(), + $"Condition unexpectedly became true: {description}"); + yield return null; + elapsed += Time.deltaTime; + } + } + + /// + /// Wait for a specific number of frames. + /// Use sparingly - prefer WaitUntil with conditions. + /// + public static IEnumerator WaitFrames(int frameCount) + { + for (int i = 0; i < frameCount; i++) + { + yield return null; + } + } + + /// + /// Wait for physics to settle (multiple FixedUpdates). + /// + public static IEnumerator WaitForPhysics(int fixedUpdateCount = 3) + { + for (int i = 0; i < fixedUpdateCount; i++) + { + yield return new WaitForFixedUpdate(); + } + } + } +} +``` + +--- + +## Step 3: Generate Example Test + +Create a working E2E test that exercises the infrastructure and proves it works. + +**Unity Template:** + +```csharp +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace {Namespace}.Tests.E2E +{ + /// + /// Example E2E tests demonstrating infrastructure usage. + /// Delete or modify these once you've verified the setup works. + /// + [Category("E2E")] + public class ExampleE2ETests : GameE2ETestFixture + { + [UnityTest] + public IEnumerator Infrastructure_GameLoadsAndReachesReadyState() + { + // This test verifies the E2E infrastructure is working correctly. + // If this test passes, your infrastructure is properly configured. + + // The base fixture already loaded the scene and waited for ready, + // so if we get here, everything worked. + + Assert.IsNotNull(GameState, "GameState should be available"); + Assert.IsNotNull(Input, "InputSimulator should be available"); + Assert.IsNotNull(Scenario, "ScenarioBuilder should be available"); + + // Verify game is actually ready + // NOTE: {IsReadyProperty} is a template placeholder. Replace it with your + // game's actual ready-state property (e.g., IsReady, IsInitialized, HasLoaded). + yield return AsyncAssert.WaitUntil( + () => GameState.{IsReadyProperty}, + "Game should be in ready state"); + + Debug.Log("[E2E] Infrastructure test passed - E2E framework is working!"); + } + + [UnityTest] + public IEnumerator Infrastructure_InputSimulatorCanClickButtons() + { + // Test that input simulation works + // Modify this to click an actual button in your game + + // Example: Click a button that should exist in your main scene + // yield return Input.ClickButton("SomeButtonName"); + // yield return AsyncAssert.WaitUntil( + // () => /* button click result */, + // "Button click should have effect"); + + Debug.Log("[E2E] Input simulation test - customize with your UI elements"); + yield return null; + } + + [UnityTest] + public IEnumerator Infrastructure_ScenarioBuilderCanConfigureState() + { + // Test that scenario builder works + // Modify this to use your domain-specific setup methods + + // Example: + // yield return Scenario + // .WithUnit(Faction.Player, new Hex(3, 3)) + // .OnTurn(1) + // .Build(); + // + // Assert.AreEqual(1, GameState.TurnNumber); + + Debug.Log("[E2E] Scenario builder test - customize with your domain methods"); + yield return Scenario.Build(); // Execute empty builder (no-op) + } + } +} +``` + +--- + +## Step 4: Generate Documentation + +Create a README explaining how to use the E2E infrastructure. + +**Template: `Tests/PlayMode/E2E/README.md`** + +```markdown +# E2E Testing Infrastructure + +End-to-end tests that validate complete player journeys through the game. + +## Quick Start + +1. Create a new test class inheriting from `GameE2ETestFixture` +2. Use `Scenario` to configure game state +3. Use `Input` to simulate player actions +4. Use `AsyncAssert` to wait for and verify outcomes + +## Example Test + +```csharp +[UnityTest] +public IEnumerator Player_CanCompleteBasicAction() +{ + // GIVEN: Configured scenario + yield return Scenario + .WithSomeSetup() + .Build(); + + // WHEN: Player takes action + yield return Input.ClickButton("ActionButton"); + + // THEN: Expected outcome occurs + yield return AsyncAssert.WaitUntil( + () => GameState.ActionCompleted, + "Action should complete"); +} +``` + +## Infrastructure Components + +### GameE2ETestFixture + +Base class for all E2E tests. Provides: +- Automatic scene loading and cleanup +- Access to `GameState`, `Input`, and `Scenario` +- Override `SetUp()` and `TearDown()` for test-specific setup + +### ScenarioBuilder + +Fluent API for configuring test scenarios. Extend with domain-specific methods: + +```csharp +// In ScenarioBuilder.cs, add methods like: +public ScenarioBuilder WithPlayer(Vector3 position) +{ + _setupActions.Add(() => SpawnPlayer(position)); + return this; +} +``` + +### InputSimulator + +Simulates player input: +- `ClickWorldPosition(Vector3)` - Click in 3D space +- `ClickScreenPosition(Vector2)` - Click at screen coordinates +- `ClickButton(string)` - Click UI button by name +- `DragFromTo(Vector3, Vector3)` - Drag gesture +- `PressKey(Key)` - Keyboard input + +### AsyncAssert + +Async assertions with timeouts: +- `WaitUntil(condition, description, timeout)` - Wait for condition +- `WaitForValue(getter, expected, description)` - Wait for specific value +- `AssertNeverTrue(condition, description, duration)` - Assert something doesn't happen + +## Directory Structure + +``` +E2E/ +├── Infrastructure/ # Base classes and utilities (don't modify often) +├── Scenarios/ # Your actual E2E tests go here +└── TestData/ # Save files and fixtures for scenarios +``` + +## Running Tests + +**In Unity Editor:** +- Window → General → Test Runner +- Select "PlayMode" tab +- Filter by "E2E" category + +**Command Line:** +```bash +unity -runTests -testPlatform PlayMode -testCategory E2E -batchmode +``` + +## Best Practices + +1. **Use Given-When-Then structure** for readable tests +2. **Wait for conditions, not time** - avoid `WaitForSeconds` as primary sync +3. **One journey per test** - keep tests focused +4. **Descriptive assertions** - include context in failure messages +5. **Clean up state** - don't let tests pollute each other + +## Extending the Framework + +### Adding Scenario Methods + +Edit `ScenarioBuilder.cs` to add domain-specific setup: + +```csharp +public ScenarioBuilder OnLevel(int level) +{ + _setupActions.Add(() => LoadLevel(level)); + return this; +} + +private IEnumerator LoadLevel(int level) +{ + _gameState.LoadLevel(level); + yield return null; +} +``` + +### Adding Input Methods + +Edit `InputSimulator.cs` for game-specific input: + +```csharp +public IEnumerator ClickHex(Hex hex) +{ + var worldPos = HexUtils.HexToWorld(hex); + yield return ClickWorldPosition(worldPos); +} +``` + +## Troubleshooting + +| Issue | Cause | Fix | +|-------|-------|-----| +| Tests timeout waiting for ready | Game init takes too long | Increase timeout in `WaitForGameReady` | +| Input simulation doesn't work | Wrong input system | Check `InputSimulator` matches your setup | +| Flaky tests | Race conditions | Use `AsyncAssert.WaitUntil` instead of `WaitForSeconds` | +| Can't find GameState | Wrong scene or class name | Check `SceneName` and class reference | +``` + +--- + +## Step 5: Output Summary + +After generating all files, provide this summary: + +```markdown +## E2E Infrastructure Scaffold Complete + +**Engine**: {Unity | Unreal | Godot} +**Version**: {detected_version} + +### Files Created + +``` +Tests/PlayMode/E2E/ +├── E2E.asmdef +├── Infrastructure/ +│ ├── GameE2ETestFixture.cs +│ ├── ScenarioBuilder.cs +│ ├── InputSimulator.cs +│ └── AsyncAssert.cs +├── Scenarios/ +│ └── (empty) +├── TestData/ +│ └── (empty) +├── ExampleE2ETest.cs +└── README.md +``` + +### Configuration + +| Setting | Value | +|---------|-------| +| Game State Class | `{GameStateClass}` | +| Main Scene | `{MainSceneName}` | +| Input System | `{InputSystemType}` | +| Ready Property | `{IsReadyProperty}` | + +### Customization Required + +1. **ScenarioBuilder**: Add domain-specific setup methods for your game entities +2. **InputSimulator**: Add game-specific input methods (e.g., hex clicking, gesture shortcuts) +3. **ExampleE2ETest**: Modify example tests to use your actual UI elements + +### Next Steps + +1. ✅ Run `ExampleE2ETests.Infrastructure_GameLoadsAndReachesReadyState` to verify setup +2. 📝 Extend `ScenarioBuilder` with your domain methods +3. 📝 Extend `InputSimulator` with game-specific input helpers +4. 🧪 Use `test-design` workflow to identify E2E scenarios +5. 🤖 Use `automate` workflow to generate E2E tests from scenarios + +### Knowledge Applied + +- `knowledge/e2e-testing.md` - Core E2E patterns and infrastructure +- `knowledge/{engine}-testing.md` - Engine-specific implementation details +``` + +--- + +## Validation + +Refer to `checklist.md` for comprehensive validation criteria. diff --git a/src/modules/bmgd/workflows/gametest/e2e-scaffold/workflow.yaml b/src/modules/bmgd/workflows/gametest/e2e-scaffold/workflow.yaml new file mode 100644 index 00000000..03d7c465 --- /dev/null +++ b/src/modules/bmgd/workflows/gametest/e2e-scaffold/workflow.yaml @@ -0,0 +1,145 @@ +# E2E Test Infrastructure Scaffold Workflow + +workflow: + id: e2e-scaffold + name: E2E Test Infrastructure Scaffold + version: 1.0 + module: bmgd + agent: game-qa + + description: | + Scaffold complete E2E testing infrastructure for an existing game project. + Creates test fixtures, scenario builders, input simulators, and async + assertion utilities tailored to the project's architecture. + + triggers: + - "ES" + - "e2e-scaffold" + - "scaffold e2e" + - "e2e infrastructure" + - "setup e2e" + + preflight: + - "Test framework initialized (run `test-framework` workflow first)" + - "Game has identifiable state manager" + - "Main gameplay scene exists" + + # Paths are relative to this workflow file's location + knowledge_fragments: + - "../../../gametest/knowledge/e2e-testing.md" + - "../../../gametest/knowledge/unity-testing.md" + - "../../../gametest/knowledge/unreal-testing.md" + - "../../../gametest/knowledge/godot-testing.md" + + inputs: + game_state_class: + description: "Primary game state manager class name" + required: true + example: "GameStateManager" + + main_scene: + description: "Scene name where core gameplay occurs" + required: true + example: "GameScene" + + input_system: + description: "Input system in use" + required: false + default: "auto-detect" + options: + - "unity-input-system" + - "unity-legacy" + - "unreal-enhanced" + - "godot-input" + - "custom" + + # Output paths vary by engine. Generate files matching detected engine. + outputs: + unity: + condition: "engine == 'unity'" + infrastructure_files: + description: "Generated E2E infrastructure classes" + files: + - "Tests/PlayMode/E2E/Infrastructure/GameE2ETestFixture.cs" + - "Tests/PlayMode/E2E/Infrastructure/ScenarioBuilder.cs" + - "Tests/PlayMode/E2E/Infrastructure/InputSimulator.cs" + - "Tests/PlayMode/E2E/Infrastructure/AsyncAssert.cs" + assembly_definition: + description: "E2E test assembly configuration" + files: + - "Tests/PlayMode/E2E/E2E.asmdef" + example_test: + description: "Working example E2E test" + files: + - "Tests/PlayMode/E2E/ExampleE2ETest.cs" + documentation: + description: "E2E testing README" + files: + - "Tests/PlayMode/E2E/README.md" + + unreal: + condition: "engine == 'unreal'" + infrastructure_files: + description: "Generated E2E infrastructure classes" + files: + - "Source/{ProjectName}/Tests/E2E/GameE2ETestBase.h" + - "Source/{ProjectName}/Tests/E2E/GameE2ETestBase.cpp" + - "Source/{ProjectName}/Tests/E2E/ScenarioBuilder.h" + - "Source/{ProjectName}/Tests/E2E/ScenarioBuilder.cpp" + - "Source/{ProjectName}/Tests/E2E/InputSimulator.h" + - "Source/{ProjectName}/Tests/E2E/InputSimulator.cpp" + - "Source/{ProjectName}/Tests/E2E/AsyncAssert.h" + build_configuration: + description: "E2E test build configuration" + files: + - "Source/{ProjectName}/Tests/E2E/{ProjectName}E2ETests.Build.cs" + example_test: + description: "Working example E2E test" + files: + - "Source/{ProjectName}/Tests/E2E/ExampleE2ETest.cpp" + documentation: + description: "E2E testing README" + files: + - "Source/{ProjectName}/Tests/E2E/README.md" + + godot: + condition: "engine == 'godot'" + infrastructure_files: + description: "Generated E2E infrastructure classes" + files: + - "tests/e2e/infrastructure/game_e2e_test_fixture.gd" + - "tests/e2e/infrastructure/scenario_builder.gd" + - "tests/e2e/infrastructure/input_simulator.gd" + - "tests/e2e/infrastructure/async_assert.gd" + example_test: + description: "Working example E2E test" + files: + - "tests/e2e/scenarios/example_e2e_test.gd" + documentation: + description: "E2E testing README" + files: + - "tests/e2e/README.md" + + steps: + - id: analyze + name: "Analyze Game Architecture" + instruction_file: "instructions.md#step-1-analyze-game-architecture" + + - id: scaffold + name: "Generate Infrastructure" + instruction_file: "instructions.md#step-2-generate-infrastructure" + + - id: example + name: "Generate Example Test" + instruction_file: "instructions.md#step-3-generate-example-test" + + - id: document + name: "Generate Documentation" + instruction_file: "instructions.md#step-4-generate-documentation" + + - id: complete + name: "Output Summary" + instruction_file: "instructions.md#step-5-output-summary" + + validation: + checklist: "checklist.md" diff --git a/src/modules/bmgd/workflows/gametest/test-design/instructions.md b/src/modules/bmgd/workflows/gametest/test-design/instructions.md index b799dafe..96bf2869 100644 --- a/src/modules/bmgd/workflows/gametest/test-design/instructions.md +++ b/src/modules/bmgd/workflows/gametest/test-design/instructions.md @@ -91,6 +91,18 @@ Create comprehensive test scenarios for game projects, covering gameplay mechani | Performance | FPS, loading times | P1 | | Accessibility | Assist features | P1 | +### E2E Journey Testing + +**Knowledge Base Reference**: `knowledge/e2e-testing.md` + +| Category | Focus | Priority | +|----------|-------|----------| +| Core Loop | Complete gameplay cycle | P0 | +| Turn Lifecycle | Full turn from start to end | P0 | +| Save/Load Round-trip | Save → quit → load → resume | P0 | +| Scene Transitions | Menu → Game → Back | P1 | +| Win/Lose Paths | Victory and defeat conditions | P1 | + --- ## Step 3: Create Test Scenarios @@ -153,6 +165,39 @@ SCENARIO: Gameplay Under High Latency CATEGORY: multiplayer ``` +### E2E Scenario Format + +For player journey tests, use this extended format: +``` +E2E SCENARIO: [Player Journey Name] + GIVEN [Initial game state - use ScenarioBuilder terms] + WHEN [Sequence of player actions] + THEN [Observable outcomes] + TIMEOUT: [Expected max duration in seconds] + PRIORITY: P0/P1 + CATEGORY: e2e + INFRASTRUCTURE: [Required fixtures/builders] +``` + +### Example E2E Scenario +``` +E2E SCENARIO: Complete Combat Encounter + GIVEN game loaded with player unit adjacent to enemy + AND player unit has full health and actions + WHEN player selects unit + AND player clicks attack on enemy + AND player confirms attack + AND attack animation completes + AND enemy responds (if alive) + THEN enemy health is reduced OR enemy is defeated + AND turn state advances appropriately + AND UI reflects new state + TIMEOUT: 15 + PRIORITY: P0 + CATEGORY: e2e + INFRASTRUCTURE: ScenarioBuilder, InputSimulator, AsyncAssert +``` + --- ## Step 4: Prioritize Test Coverage @@ -161,12 +206,12 @@ SCENARIO: Gameplay Under High Latency **Knowledge Base Reference**: `knowledge/test-priorities.md` -| Priority | Criteria | Coverage Target | -| -------- | ---------------------------- | --------------- | -| P0 | Ship blockers, certification | 100% automated | -| P1 | Major features, common paths | 80% automated | -| P2 | Secondary features | 60% automated | -| P3 | Edge cases, polish | Manual only | +| Priority | Criteria | Unit | Integration | E2E | Manual | +|----------|----------|------|-------------|-----|--------| +| P0 | Ship blockers | 100% | 80% | Core flows | Smoke | +| P1 | Major features | 90% | 70% | Happy paths | Full | +| P2 | Secondary | 80% | 50% | - | Targeted | +| P3 | Edge cases | 60% | - | - | As needed | ### Risk-Based Ordering From 59e1b7067cdf9b2e38d22a5f4be4bc0e3ec17595 Mon Sep 17 00:00:00 2001 From: Eduard Voiculescu Date: Wed, 14 Jan 2026 22:04:43 -0500 Subject: [PATCH 20/22] remove remember the users name is {user_name}, it is already present in the activation-steps.txt (#1315) --- src/core/agents/bmad-master.agent.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/agents/bmad-master.agent.yaml b/src/core/agents/bmad-master.agent.yaml index f5d4e8a7..50debe2c 100644 --- a/src/core/agents/bmad-master.agent.yaml +++ b/src/core/agents/bmad-master.agent.yaml @@ -18,7 +18,6 @@ agent: critical_actions: - "Load into memory {project-root}/_bmad/core/config.yaml and set variable project_name, output_folder, user_name, communication_language" - - "Remember the users name is {user_name}" - "ALWAYS communicate in {communication_language}" menu: From 6d84a60a784a04f373ba251df4a5ddd165d4cad7 Mon Sep 17 00:00:00 2001 From: Murat K Ozcan <34237651+muratkeremozcan@users.noreply.github.com> Date: Wed, 14 Jan 2026 21:13:48 -0600 Subject: [PATCH 21/22] docs: tea entry points and resume tip (#1246) Co-authored-by: Brian --- src/modules/bmm/agents/tea.agent.yaml | 2 +- src/modules/bmm/workflows/workflow-status/instructions.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/bmm/agents/tea.agent.yaml b/src/modules/bmm/agents/tea.agent.yaml index fa42b41b..5d86f2ab 100644 --- a/src/modules/bmm/agents/tea.agent.yaml +++ b/src/modules/bmm/agents/tea.agent.yaml @@ -33,7 +33,7 @@ agent: menu: - trigger: WS or fuzzy match on workflow-status workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" - description: "[WS] Get workflow status or initialize a workflow if not already done (optional)" + description: "[WS] Start here or resume - show workflow status and next best step" - trigger: TF or fuzzy match on test-framework workflow: "{project-root}/_bmad/bmm/workflows/testarch/framework/workflow.yaml" diff --git a/src/modules/bmm/workflows/workflow-status/instructions.md b/src/modules/bmm/workflows/workflow-status/instructions.md index 6c25bdb1..785b5e54 100644 --- a/src/modules/bmm/workflows/workflow-status/instructions.md +++ b/src/modules/bmm/workflows/workflow-status/instructions.md @@ -121,6 +121,8 @@ Parse these fields from YAML comments and metadata: - {{workflow_name}} ({{agent}}) - {{status}} {{/each}} {{/if}} + +**Tip:** For guardrail tests, run TEA `*automate` after `dev-story`. If you lose context, TEA workflows resume from artifacts in `{{output_folder}}`. From dcd581c84ab007f8add753a178349f64227dec04 Mon Sep 17 00:00:00 2001 From: Kevin Heidt Date: Wed, 14 Jan 2026 22:16:23 -0500 Subject: [PATCH 22/22] Fix glob pattern to use forward slashes (#1241) Normalize source directory path for glob pattern compatibility. Reviewed-by: Alex Verkhovsky --- tools/cli/installers/lib/ide/shared/module-injections.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/cli/installers/lib/ide/shared/module-injections.js b/tools/cli/installers/lib/ide/shared/module-injections.js index 6e38ee10..fe3f999d 100644 --- a/tools/cli/installers/lib/ide/shared/module-injections.js +++ b/tools/cli/installers/lib/ide/shared/module-injections.js @@ -108,7 +108,10 @@ async function resolveSubagentFiles(handlerBaseDir, subagentConfig, subagentChoi const resolved = []; for (const file of filesToCopy) { - const pattern = path.join(sourceDir, '**', file); + // Use forward slashes for glob pattern (works on both Windows and Unix) + // Convert backslashes to forward slashes for glob compatibility + const normalizedSourceDir = sourceDir.replaceAll('\\', '/'); + const pattern = `${normalizedSourceDir}/**/${file}`; const matches = await glob(pattern); if (matches.length > 0) {