Compare commits

...

7 Commits

Author SHA1 Message Date
Brian Madison ddaefa3284 use sprint plan for al workflow level 4 implementations 2025-10-21 23:03:46 -05:00
Brian Madison abaa24513a sprint status helpers, remove workflow integration from phase 4 items in prep of using sprint-planning status 2025-10-21 22:25:26 -05:00
Brian Madison 71330b6aac updates to the paths 2025-10-21 20:37:59 -05:00
Brian Madison 949d818db8 sprint status story location relative 2025-10-21 18:41:40 -05:00
Brian Madison 1b1947d240 sprint-planning placeholder for future integration with jira linear and trello 2025-10-21 18:13:34 -05:00
Brian Madison 419043e704 sprint planning 2025-10-21 08:24:02 -05:00
Brian Madison b8db0806ed architecture name standardization 2025-10-20 19:01:18 -05:00
71 changed files with 4325 additions and 1203 deletions

View File

@ -207,7 +207,7 @@ User runs: npm run install:bmad
--- ---
## Proposed Solution Architecture ## Proposed Architecture
### New Command: `install-module` ### New Command: `install-module`

View File

@ -0,0 +1,431 @@
# Workflow Audit Report
**Workflow:** tech-spec
**Audit Date:** 2025-10-21
**Auditor:** Audit Workflow (BMAD v6)
**Workflow Type:** Document (template-based)
**Workflow Path:** /Users/brianmadison/dev/BMAD-METHOD/src/modules/bmm/workflows/4-implementation/epic-tech-context
---
## Executive Summary
**Overall Status:** ⚠️ ISSUES FOUND - Requires fixes before production use
**Issue Breakdown:**
- Critical Issues: **2**
- Important Issues: **1**
- Cleanup Recommendations: **4**
**Primary Concerns:**
1. Web bundle missing critical workflow dependencies
2. Output path hardcoded instead of using config variable
3. Configuration bloat (40% unused variables)
---
## 1. Standard Config Block Validation
### ✅ Status: PASS
All required standard config variables are present and correctly formatted:
**Required Variables:**
- ✅ `config_source: "{project-root}/bmad/bmm/config.yaml"`
- ✅ `output_folder: "{config_source}:output_folder"`
- ✅ `user_name: "{config_source}:user_name"`
- ✅ `communication_language: "{config_source}:communication_language"`
- ✅ `date: system-generated`
**Additional Config Variables Found:**
- ⚠️ `document_output_language` (non-standard, potentially unused)
- ⚠️ `user_skill_level` (non-standard, potentially unused)
**Recommendation:** Verify usage of additional config variables or remove if unused.
---
## 2. YAML/Instruction/Template Alignment
### ❌ Issues Found: Configuration Bloat
**Variables Analyzed:** 5 custom fields
**Used in Instructions:** 3
**Used in Template:** N/A (config variables)
**Unused (Bloat):** 2
### Unused Variables (BLOAT):
1. **`document_output_language`**
- Location: workflow.yaml line 10
- Status: Defined but never referenced in instructions.md or template.md
- Impact: Configuration bloat
- **Action Required:** Remove from yaml
2. **`user_skill_level`**
- Location: workflow.yaml line 11
- Status: Defined but never referenced in instructions.md or template.md
- Impact: Configuration bloat
- **Action Required:** Remove from yaml
### Properly Used Variables:
- ✅ `output_folder` → Used in instructions.md (lines 12, 129)
- ✅ `user_name` → Used in instructions.md (lines 143, 166) and template.md (line 4)
- ✅ `communication_language` → Used in instructions.md (line 6)
- ✅ `date` → Used in template.md (line 3) and output file naming
- ✅ `non_interactive` → Used in instructions.md (lines 8, 66, 68)
**Bloat Metrics:**
- Total custom yaml fields: 5
- Used fields: 3
- Unused fields: 2
- **Bloat Percentage: 40%**
---
## 3. Config Variable Usage
### Overall Status: ⚠️ IMPORTANT ISSUE FOUND
**Communication Language:**
- ✅ Properly used on line 6: `Communicate all responses in {communication_language}`
- ✅ No inappropriate usage in template headers
- Status: **CORRECT**
**User Name:**
- ✅ Used for personalization on lines 143, 166
- ✅ Optional metadata usage in template (line 4)
- Status: **CORRECT**
**Output Folder:**
- ✅ Properly used for file searches (lines 12, 129)
- ❌ **ISSUE:** `default_output_file` hardcodes path instead of using variable
- Current: `"{project-root}/docs/tech-spec-epic-{{epic_id}}.md"`
- Should be: `"{output_folder}/tech-spec-epic-{{epic_id}}.md"`
- Impact: Ignores user's configured output folder preference
- Severity: **IMPORTANT**
**Date:**
- ✅ System-generated and available
- ✅ Used in template metadata (line 3)
- ✅ Used in output file naming
- Status: **CORRECT**
### Action Required:
**Fix default_output_file in workflow.yaml:**
```yaml
# Current (line 29):
default_output_file: "{project-root}/docs/tech-spec-epic-{{epic_id}}.md"
# Should be:
default_output_file: "{output_folder}/tech-spec-epic-{{epic_id}}.md"
```
---
## 4. Web Bundle Validation
### 🚨 Status: CRITICAL ISSUES FOUND
**Current Web Bundle Configuration:**
```yaml
web_bundle:
name: 'tech-spec'
description: '...'
author: 'BMAD BMM'
web_bundle_files:
- 'bmad/bmm/workflows/4-implementation/epic-tech-context/template.md'
- 'bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md'
- 'bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md'
```
### Path Validation:
- ✅ All paths use bmad/-relative format (NOT {project-root})
- ✅ No {config_source} variables in web_bundle section
- ✅ Paths match actual file locations
### Completeness Check:
- ✅ instructions.md listed
- ✅ template.md listed (document workflow)
- ✅ checklist.md listed
### 🚨 Critical Issues:
**Issue 1: Missing Workflow Dependency**
- Severity: **CRITICAL**
- Location: instructions.md line 133
- Problem: Workflow invokes `workflow-status` but dependency not in web_bundle_files
- Invocation: `<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">`
- Missing files:
- `bmad/bmm/workflows/workflow-status/workflow.yaml`
- `bmad/bmm/workflows/workflow-status/instructions.md` (if exists)
**Issue 2: Missing existing_workflows Field**
- Severity: **CRITICAL**
- Problem: When `<invoke-workflow>` calls exist, web_bundle MUST include `existing_workflows` field
- Current: Field not present
- Required: Mapping of workflow variables to paths
### Required Fix:
```yaml
web_bundle:
name: 'tech-spec'
description: 'Generate a comprehensive Technical Specification from PRD and Architecture with acceptance criteria and traceability mapping'
author: 'BMAD BMM'
existing_workflows:
- workflow_status: 'bmad/bmm/workflows/workflow-status/workflow.yaml'
web_bundle_files:
- 'bmad/bmm/workflows/4-implementation/epic-tech-context/template.md'
- 'bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md'
- 'bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md'
- 'bmad/bmm/workflows/workflow-status/workflow.yaml'
- 'bmad/bmm/workflows/workflow-status/instructions.md'
```
**Web Bundle Status:**
- Web Bundle Present: ✅ Yes
- Files Listed: 3
- Missing Files: 2+
- Completeness: ❌ **INCOMPLETE**
---
## 5. Bloat Detection
### Bloat Summary
**Unused YAML Fields: 2**
1. `document_output_language`
- Type: Config variable
- Usage: Not referenced anywhere
- Recommendation: **Remove**
2. `user_skill_level`
- Type: Config variable
- Usage: Not referenced anywhere
- Recommendation: **Remove**
**Hardcoded Values: 1**
3. `default_output_file` path
- Current: `{project-root}/docs/tech-spec-epic-{{epic_id}}.md`
- Should use: `{output_folder}`
- Impact: Ignores user configuration
- Recommendation: **Fix to use {output_folder}**
**Redundant Configuration: 3 fields**
4. Metadata duplication between top-level and web_bundle:
- `name` appears on yaml line 1 AND web_bundle line 36
- `description` appears on yaml line 2 AND web_bundle line 37
- `author` appears on yaml line 3 AND web_bundle line 38
- Recommendation: **Remove duplication** (keep in one location)
### Bloat Metrics:
- Total custom yaml fields analyzed: 5
- Used fields: 3
- Unused fields: 2
- **Bloat Percentage: 40%**
- Redundant metadata fields: 3
- **Cleanup Potential: HIGH** (~30% configuration reduction possible)
---
## 6. Template Variable Mapping
### ✅ Status: EXCELLENT - No Issues
**Template Variables:** 20
**Mapped via template-output:** 15
**Config Variables:** 2
**Runtime Variables:** 3
**Missing Mappings:** 0
**Orphaned Outputs:** 0
### All Template Variables Accounted For:
**Generated via template-output (15):**
- overview, objectives_scope, system_arch_alignment
- services_modules, data_models, apis_interfaces, workflows_sequencing
- nfr_performance, nfr_security, nfr_reliability, nfr_observability
- dependencies_integrations
- acceptance_criteria, traceability_mapping
- risks_assumptions_questions, test_strategy
**Standard Config Variables (2):**
- date (system-generated)
- user_name (from config)
**Runtime/Extracted Variables (3):**
- epic_title (extracted from PRD)
- epic_id (extracted from PRD)
### Validation:
- ✅ All variables use snake_case naming
- ✅ Variable names are descriptive and clear
- ✅ Logical grouping in template-output sections
- ✅ No orphaned template-output tags
- ✅ Complete 1:1 mapping coverage
**No action required** - Template variable mapping is exemplary.
---
## Recommendations
### 🚨 Critical (Fix Immediately)
**Priority 1: Fix Web Bundle Dependencies**
- Add `existing_workflows` field to web_bundle section
- Include workflow-status workflow files in web_bundle_files
- Impact: Without this, workflow cannot be bundled for web use
- File: `workflow.yaml` lines 35-43
**Priority 2: Add Missing Workflow Files**
- Include: `bmad/bmm/workflows/workflow-status/workflow.yaml`
- Include: `bmad/bmm/workflows/workflow-status/instructions.md` (if exists)
- Impact: Web bundle incomplete, workflow invocations will fail
- File: `workflow.yaml` web_bundle_files section
---
### ⚠️ Important (Address Soon)
**Priority 3: Fix Output Path Configuration**
- Change `default_output_file` to use `{output_folder}` variable
- Current: `{project-root}/docs/tech-spec-epic-{{epic_id}}.md`
- Fixed: `{output_folder}/tech-spec-epic-{{epic_id}}.md`
- Impact: Respects user's configured output preferences
- File: `workflow.yaml` line 29
---
### 🧹 Cleanup (Nice to Have)
**Priority 4: Remove Unused Config Variables**
- Remove: `document_output_language` (line 10)
- Remove: `user_skill_level` (line 11)
- Impact: Reduces configuration bloat by 40%
- File: `workflow.yaml` config section
**Priority 5: Eliminate Metadata Duplication**
- Remove duplicate `name`, `description`, `author` from either top-level or web_bundle
- Keep metadata in one location only
- Impact: Cleaner configuration, easier maintenance
- File: `workflow.yaml` lines 1-3 or 36-38
---
## Validation Checklist
Use this checklist to verify fixes:
- [ ] **Web Bundle:** existing_workflows field added with workflow_status mapping
- [ ] **Web Bundle:** workflow-status/workflow.yaml added to web_bundle_files
- [ ] **Config:** default_output_file uses {output_folder} instead of hardcoded path
- [ ] **Bloat:** document_output_language removed from yaml
- [ ] **Bloat:** user_skill_level removed from yaml
- [ ] **Redundancy:** Metadata duplication eliminated
- [ ] **Re-test:** Workflow executes successfully after fixes
- [ ] **Re-audit:** Run audit-workflow again to verify all issues resolved
---
## Workflow Structure Assessment
### Strengths:
- ✅ Excellent template variable mapping (20 variables, 0 orphans)
- ✅ Proper use of standard config variables
- ✅ Clear step-by-step instructions with proper XML structure
- ✅ Good integration with workflow-status for progress tracking
- ✅ Comprehensive validation checklist
- ✅ Non-interactive mode support (#yolo mode)
### Areas for Improvement:
- ❌ Web bundle configuration incomplete (missing dependencies)
- ❌ Output path doesn't respect user configuration
- ⚠️ Configuration bloat (40% unused variables)
- ⚠️ Metadata duplication
---
## Next Steps
### Immediate Actions:
1. **Fix Critical Issues** (Est. 15 minutes)
- Add existing_workflows field to web_bundle
- Add workflow-status files to web_bundle_files
- Verify workflow-status workflow exists at specified path
2. **Fix Important Issues** (Est. 5 minutes)
- Update default_output_file to use {output_folder}
- Test output file creation with different config values
3. **Cleanup Configuration** (Est. 10 minutes)
- Remove document_output_language from yaml
- Remove user_skill_level from yaml
- Eliminate metadata duplication
4. **Verify Fixes** (Est. 10 minutes)
- Re-run audit-workflow to confirm all issues resolved
- Test workflow execution end-to-end
- Verify web bundle generation works
### Recommended Testing:
```bash
# After fixes, test the workflow
/bmad:bmm:workflows:tech-spec
# Re-audit to verify
/bmad:bmb:agents:bmad-builder -> *audit-workflow
```
---
## Conclusion
The **tech-spec** workflow has a solid foundation with excellent template variable mapping and proper instruction structure. However, **critical web bundle issues** must be resolved before production use, and the hardcoded output path should be fixed to respect user configuration.
**Estimated Fix Time:** 30-40 minutes
**Recommended Priority:** HIGH - Address critical issues before next release
---
**Audit Complete** ✅
Generated by: audit-workflow v1.0
Powered by: BMAD Core v6-alpha

97
docs/sprint-status.yaml Normal file
View File

@ -0,0 +1,97 @@
# generated: 2025-10-21
# project: MyPlantFamily
# project_key: MyPlantFamily
# tracking_system: file-system
# story_location: {project-root}/docs/stories
# STATUS DEFINITIONS:
# ==================
# Epic Status:
# - backlog: Epic exists in epic file but not contexted
# - contexted: Epic tech context created (required before drafting stories)
#
# Story Status:
# - backlog: Story only exists in epic file
# - drafted: Story file created in stories folder
# - ready-for-dev: Draft approved and story context created
# - in-progress: Developer actively working on implementation
# - review: Under SM review (via review-story workflow)
# - done: Story completed
#
# Retrospective Status:
# - optional: Can be completed but not required
# - completed: Retrospective has been done
#
# WORKFLOW NOTES:
# ===============
# - Epics should be 'contexted' before stories can be 'drafted'
# - Stories can be worked in parallel if team capacity allows
# - SM typically drafts next story after previous one is 'done' to incorporate learnings
# - Dev moves story to 'review', SM reviews, then Dev moves to 'done'
generated: 2025-10-21
project: MyPlantFamily
project_key: MyPlantFamily
tracking_system: file-system
story_location: "{project-root}/docs/stories"
development_status:
# Epic 1: Foundation & Core Plant Management
epic-1: backlog
1-1-project-foundation-development-environment: backlog
1-2-app-shell-navigation-framework: backlog
1-3-user-authentication-account-management: backlog
1-4-plant-data-model-species-database: backlog
1-5-add-plant-manual-species-selection: backlog
1-6-plant-photo-identification-integration: backlog
1-7-plant-naming-profile-creation: backlog
1-8-plant-collection-home-screen: backlog
1-9-plant-detail-view: backlog
1-10-cloud-photo-storage-display: backlog
epic-1-retrospective: optional
# Epic 2: AI Personality System & Engagement Loop
epic-2: backlog
2-1-personality-system-data-model: backlog
2-2-personality-prototype-testing: backlog
2-3-llm-integration-api-setup: backlog
2-4-chat-interface-ui: backlog
2-5-conversational-ai-system: backlog
2-6-graceful-degradation-library: backlog
2-7-response-caching-cost-optimization: backlog
2-8-personality-driven-care-reminders: backlog
2-9-push-notification-system: backlog
2-10-reminder-intelligence-adaptation: backlog
2-11-mood-system-visual-indicators: backlog
2-12-mood-calculation-logic-time-based: backlog
2-13-personality-introduction-onboarding: backlog
2-14-personality-tone-testing-calibration: backlog
2-15-emergency-tone-adjustment-system: backlog
2-16-api-reliability-monitoring-alerts: backlog
epic-2-retrospective: optional
# Epic 3: Care Scheduling, Photos & Growth Tracking
epic-3: backlog
3-1-care-schedule-data-model: backlog
3-2-auto-generated-care-schedules: backlog
3-3-manual-care-logging: backlog
3-4-care-history-view: backlog
3-5-customizable-care-schedules: backlog
3-6-photo-timeline-tracking: backlog
3-7-health-status-visualization: backlog
3-8-enhanced-mood-calculation-care-data: backlog
epic-3-retrospective: optional
# Epic 4: Social Sharing & Premium Monetization
epic-4: backlog
4-1-shareable-content-card-design-system: backlog
4-2-share-plant-profile: backlog
4-3-share-conversation-snippets: backlog
4-4-share-growth-progress: backlog
4-5-share-care-achievements: backlog
4-6-freemium-tier-definition-enforcement: backlog
4-7-premium-upgrade-flow-paywall: backlog
4-8-payment-processing-subscription-management: backlog
4-9-premium-analytics-dashboard: backlog
4-10-trial-conversion-optimization: backlog
epic-4-retrospective: optional

View File

@ -43,7 +43,7 @@ The heart of BMM - structured workflows for the four development phases:
- `story-ready` - Approve story for development (SM agent) - `story-ready` - Approve story for development (SM agent)
- `story-context` - Expertise injection (SM agent) - `story-context` - Expertise injection (SM agent)
- `dev-story` - Implementation (DEV agent) - `dev-story` - Implementation (DEV agent)
- `story-approved` - Mark story done (DEV agent) - `story-done` - Mark story done (DEV agent)
- `review-story` - Quality validation (DEV/SR agent) - `review-story` - Quality validation (DEV/SR agent)
- `correct-course` - Issue resolution - `correct-course` - Issue resolution
- `retrospective` - Continuous improvement - `retrospective` - Continuous improvement
@ -101,7 +101,7 @@ BACKLOG → TODO → IN PROGRESS → DONE
- **IN PROGRESS**: Single story approved for DEV to implement - **IN PROGRESS**: Single story approved for DEV to implement
- **DONE**: Completed stories with dates and points - **DONE**: Completed stories with dates and points
Agents never search for "next story" - they always read the exact story from the status file. Simple workflows (`story-ready`, `story-approved`) advance the queue automatically. Agents never search for "next story" - they always read the exact story from the status file. Simple workflows (`story-ready`, `story-done`) advance the queue automatically.
### Context Injection ### Context Injection

View File

@ -34,8 +34,8 @@ agent:
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml" workflow: "{project-root}/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml"
description: "Execute Dev Story workflow, implementing tasks and tests, or performing updates to the story" description: "Execute Dev Story workflow, implementing tasks and tests, or performing updates to the story"
- trigger: story-approved - trigger: story-done
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-approved/workflow.yaml" workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-done/workflow.yaml"
description: Mark story done after DoD complete description: Mark story done after DoD complete
- trigger: review - trigger: review

View File

@ -25,6 +25,10 @@ agent:
workflow: "{project-root}/bmad/bmm/workflows/workflow-status/workflow.yaml" workflow: "{project-root}/bmad/bmm/workflows/workflow-status/workflow.yaml"
description: Check workflow status and get recommendations description: Check workflow status and get recommendations
- trigger: sprint-planning
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml"
description: Generate or update sprint-status.yaml from epic files
- trigger: create-story - trigger: create-story
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml" workflow: "{project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml"
description: Create a Draft Story with Context description: Create a Draft Story with Context

View File

@ -139,7 +139,7 @@ This complexity **requires specialized documentation** (this guide), **extensive
<details> <details>
<summary>Worked Example “Nova CRM” Greenfield Feature</summary> <summary>Worked Example “Nova CRM” Greenfield Feature</summary>
1. **Planning:** Analyst runs `*product-brief`; PM executes `*plan-project` to produce PRD and epics; Architect completes `*solution-architecture` for the new module. 1. **Planning:** Analyst runs `*product-brief`; PM executes `*plan-project` to produce PRD and epics; Architect completes `*create-architecture` for the new module.
2. **Setup:** TEA checks harness via `*framework`, configures `*ci`, and runs `*test-design` to capture risk/coverage plans. 2. **Setup:** TEA checks harness via `*framework`, configures `*ci`, and runs `*test-design` to capture risk/coverage plans.
3. **Story Prep:** Scrum Master generates the story via `*create-story`; PO validates using `*solutioning-gate-check`. 3. **Story Prep:** Scrum Master generates the story via `*create-story`; PO validates using `*solutioning-gate-check`.
4. **Implementation:** TEA optionally runs `*atdd`; Dev implements with guidance from failing tests and the plan. 4. **Implementation:** TEA optionally runs `*atdd`; Dev implements with guidance from failing tests and the plan.
@ -174,7 +174,7 @@ This complexity **requires specialized documentation** (this guide), **extensive
<details> <details>
<summary>Worked Example “Atlas Payments” Brownfield Story</summary> <summary>Worked Example “Atlas Payments” Brownfield Story</summary>
1. **Context Refresh:** Analyst reruns `*product-brief`; PM executes `*plan-project` to update PRD, analysis, and `epics.md`; Architect triggers `*solution-architecture` capturing legacy payment flows. 1. **Context Refresh:** Analyst reruns `*product-brief`; PM executes `*plan-project` to update PRD, analysis, and `epics.md`; Architect triggers `*create-architecture` capturing legacy payment flows.
2. **Baseline Coverage:** TEA executes `*trace` to record current coverage in `docs/qa/assessments/atlas-payment-trace.md`. 2. **Baseline Coverage:** TEA executes `*trace` to record current coverage in `docs/qa/assessments/atlas-payment-trace.md`.
3. **Risk and Design:** `*test-design` flags settlement edge cases, plans mitigations, and allocates new API/E2E scenarios with P0 priorities. 3. **Risk and Design:** `*test-design` flags settlement edge cases, plans mitigations, and allocates new API/E2E scenarios with P0 priorities.
4. **Story Prep:** Scrum Master generates `stories/story-1.1.md` via `*create-story`, automatically pulling updated context. 4. **Story Prep:** Scrum Master generates `stories/story-1.1.md` via `*create-story`, automatically pulling updated context.

View File

@ -4,7 +4,7 @@ last-redoc-date: 2025-10-01
# Project Brainstorming Workflow # Project Brainstorming Workflow
This workflow facilitates structured ideation for non-game software projects through systematic exploration of problem spaces, solution architectures, and implementation strategies. Unlike traditional requirement gathering, it employs creative techniques to uncover non-obvious approaches and identify innovative solutions that address core business needs while considering technical constraints and organizational capabilities. This workflow facilitates structured ideation for non-game software projects through systematic exploration of problem spaces, architectures, and implementation strategies. Unlike traditional requirement gathering, it employs creative techniques to uncover non-obvious approaches and identify innovative solutions that address core business needs while considering technical constraints and organizational capabilities.
The workflow operates through a project-specific context framework that captures business objectives, technical environment, stakeholder needs, and organizational constraints. It generates multiple solution vectors through parallel ideation tracks: architectural approaches, user experience paradigms, integration patterns, and value delivery mechanisms. Each track produces concrete proposals that are evaluated against feasibility, impact, and alignment with strategic objectives. The workflow operates through a project-specific context framework that captures business objectives, technical environment, stakeholder needs, and organizational constraints. It generates multiple solution vectors through parallel ideation tracks: architectural approaches, user experience paradigms, integration patterns, and value delivery mechanisms. Each track produces concrete proposals that are evaluated against feasibility, impact, and alignment with strategic objectives.
@ -23,7 +23,7 @@ bmad bmm 1-analysis brainstorm-project
## Outputs ## Outputs
- **Solution Architecture Proposals**: Multiple technical approaches with trade-off analysis and feasibility assessments - **Architecture Proposals**: Multiple technical approaches with trade-off analysis and feasibility assessments
- **Value Delivery Framework**: Prioritized feature concepts aligned with business objectives and user needs - **Value Delivery Framework**: Prioritized feature concepts aligned with business objectives and user needs
- **Risk and Opportunity Analysis**: Identified technical dependencies, integration challenges, and innovation opportunities - **Risk and Opportunity Analysis**: Identified technical dependencies, integration challenges, and innovation opportunities
- **Strategic Recommendation**: Synthesized direction with rationale and implementation considerations - **Strategic Recommendation**: Synthesized direction with rationale and implementation considerations

View File

@ -27,25 +27,25 @@ The workflow routes to different planning approaches based on project level:
**Planning:** PRD (product-focused) + Tech-spec (technical planning) **Planning:** PRD (product-focused) + Tech-spec (technical planning)
**Output:** `PRD.md`, `epics.md`, `tech-spec.md` **Output:** `PRD.md`, `epics.md`, `tech-spec.md`
**Next Phase:** Tech-spec workflow (lightweight solutioning), then implementation (Phase 4) **Next Phase:** Tech-spec workflow (lightweight solutioning), then implementation (Phase 4)
**Note:** Level 2 uses tech-spec instead of full solution-architecture to keep planning lightweight **Note:** Level 2 uses tech-spec instead of full architecture to keep planning lightweight
### Level 3 - Medium Project (15-40 stories, 2-5 epics) ### Level 3 - Medium Project (15-40 stories, 2-5 epics)
**Planning:** PRD (strategic product document) **Planning:** PRD (strategic product document)
**Output:** `PRD.md`, `epics.md` **Output:** `PRD.md`, `epics.md`
**Next Phase:** Solution-architecture workflow (Phase 3), then implementation (Phase 4) **Next Phase:** create-architecture workflow (Phase 3), then implementation (Phase 4)
### Level 4 - Large/Enterprise Project (40-100+ stories, 5-10 epics) ### Level 4 - Large/Enterprise Project (40-100+ stories, 5-10 epics)
**Planning:** PRD (comprehensive product specification) **Planning:** PRD (comprehensive product specification)
**Output:** `PRD.md`, `epics.md` **Output:** `PRD.md`, `epics.md`
**Next Phase:** Solution-architecture workflow (Phase 3), then implementation (Phase 4) **Next Phase:** create-architecture workflow (Phase 3), then implementation (Phase 4)
**Critical Distinction:** **Critical Distinction:**
- **Levels 0-1:** No PRD, tech-spec only - **Levels 0-1:** No PRD, tech-spec only
- **Level 2:** PRD + tech-spec (skips full architecture) - **Level 2:** PRD + tech-spec (skips full architecture)
- **Levels 3-4:** PRD → full solution-architecture workflow - **Levels 3-4:** PRD → full create-architecture workflow
Critical to v6's flow improvement is this workflow's integration with the bmm-workflow-status.md tracking document, which maintains project state across sessions, tracks which agents participate in each phase, and provides continuity for multi-session planning efforts. The workflow can resume from any point, intelligently detecting existing artifacts and determining next steps without redundant work. For UX-heavy projects, it can generate standalone UX specifications or AI frontend prompts from existing specs. Critical to v6's flow improvement is this workflow's integration with the bmm-workflow-status.md tracking document, which maintains project state across sessions, tracks which agents participate in each phase, and provides continuity for multi-session planning efforts. The workflow can resume from any point, intelligently detecting existing artifacts and determining next steps without redundant work. For UX-heavy projects, it can generate standalone UX specifications or AI frontend prompts from existing specs.
@ -138,7 +138,7 @@ The workflow adapts automatically based on project assessment, but key configura
- PRD workflow (comprehensive product specification) - PRD workflow (comprehensive product specification)
- Generates `PRD.md` and `epics.md` - Generates `PRD.md` and `epics.md`
- Hands off to Phase 3 (solution-architecture workflow) - Hands off to Phase 3 (create-architecture workflow)
- Full architecture design before implementation - Full architecture design before implementation
### Phase 3: Validation and Handoff (Final steps) ### Phase 3: Validation and Handoff (Final steps)
@ -177,7 +177,7 @@ The workflow adapts automatically based on project assessment, but key configura
- `PRD.md` - Comprehensive product specification - `PRD.md` - Comprehensive product specification
- `epics.md` - Complete epic/story breakdown - `epics.md` - Complete epic/story breakdown
- Hands off to solution-architecture workflow (Phase 3) - Hands off to create-architecture workflow (Phase 3)
- `architecture.md` - Generated by architect workflow - `architecture.md` - Generated by architect workflow
- Then to implementation - Then to implementation

View File

@ -390,10 +390,10 @@ Since this is a Level {{project_level}} game project, you need solutioning for p
<action>Generate comprehensive checklist based on project analysis</action> <action>Generate comprehensive checklist based on project analysis</action>
### Phase 1: Solution Architecture and Engine Selection ### Phase 1: Architecture and Engine Selection
- [ ] **Run solutioning workflow** (REQUIRED) - [ ] **Run solutioning workflow** (REQUIRED)
- Command: `workflow solution-architecture` - Command: `workflow create-architecture`
- Input: GDD.md, bmm-workflow-status.md - Input: GDD.md, bmm-workflow-status.md
- Output: architecture.md with engine/platform specifics - Output: architecture.md with engine/platform specifics
- Note: Registry.csv will provide engine-specific guidance - Note: Registry.csv will provide engine-specific guidance

View File

@ -84,7 +84,7 @@
### If Level 3-4: ### If Level 3-4:
- [ ] PRD provides sufficient context for solution-architecture workflow - [ ] PRD provides sufficient context for create-architecture workflow
- [ ] Epic structure supports phased delivery approach - [ ] Epic structure supports phased delivery approach
- [ ] Clear value delivery path through epic sequence - [ ] Clear value delivery path through epic sequence

View File

@ -438,7 +438,7 @@ For each epic from the epic list, expand with full story details:
{{#if project_level >= 3}} {{#if project_level >= 3}}
- Review PRD and epics with stakeholders - Review PRD and epics with stakeholders
- **Next:** Run `solution-architecture` for full technical design - **Next:** Run `create-architecture` for full technical design
- Then proceed to implementation - Then proceed to implementation
{{/if}} {{/if}}

View File

@ -1,6 +1,6 @@
# Product Requirements Document (PRD) Workflow # Product Requirements Document (PRD) Workflow
name: prd name: prd
description: "Unified PRD workflow for project levels 2-4. Produces strategic PRD and tactical epic breakdown. Hands off to solution-architecture workflow for technical design. Note: Level 0-1 use tech-spec workflow." description: "Unified PRD workflow for project levels 2-4. Produces strategic PRD and tactical epic breakdown. Hands off to architecture workflow for technical design. Note: Level 0-1 use tech-spec workflow."
author: "BMad" author: "BMad"
# Critical variables from config # Critical variables from config
@ -35,7 +35,7 @@ recommended_inputs:
web_bundle: web_bundle:
name: "prd" name: "prd"
description: "Unified PRD workflow for project levels 2-4. Produces strategic PRD and tactical epic breakdown. Hands off to solution-architecture workflow for technical design. Note: Level 0-1 use tech-spec workflow." description: "Unified PRD workflow for project levels 2-4. Produces strategic PRD and tactical epic breakdown. Hands off to architecture workflow for technical design. Note: Level 0-1 use tech-spec workflow."
author: "BMad" author: "BMad"
instructions: "bmad/bmm/workflows/2-plan-workflows/prd/instructions.md" instructions: "bmad/bmm/workflows/2-plan-workflows/prd/instructions.md"
web_bundle_files: web_bundle_files:

View File

@ -8,7 +8,7 @@
<critical>The goal is ARCHITECTURAL DECISIONS that prevent AI agent conflicts, not detailed implementation specs</critical> <critical>The goal is ARCHITECTURAL DECISIONS that prevent AI agent conflicts, not detailed implementation specs</critical>
<critical>Communicate all responses in {communication_language} and tailor to {user_skill_level}</critical> <critical>Communicate all responses in {communication_language} and tailor to {user_skill_level}</critical>
<critical>Generate all documents in {document_output_language}</critical> <critical>Generate all documents in {document_output_language}</critical>
<critical>This workflow replaces solution-architecture with a conversation-driven approach</critical> <critical>This workflow replaces architecture with a conversation-driven approach</critical>
<step n="0" goal="Validate workflow and extract project configuration"> <step n="0" goal="Validate workflow and extract project configuration">

View File

@ -85,7 +85,7 @@ Step 12: Final review and update workflow status
- **checklist.md** - Validation requirements for the output document - **checklist.md** - Validation requirements for the output document
- **architecture-template.md** - Strict format for the final document - **architecture-template.md** - Strict format for the final document
## How It's Different from Old Solution-Architecture ## How It's Different from Old architecture
| Aspect | Old Workflow | New Workflow | | Aspect | Old Workflow | New Workflow |
| -------------------- | -------------------------------------------- | ----------------------------------------------- | | -------------------- | -------------------------------------------- | ----------------------------------------------- |
@ -266,9 +266,9 @@ This workflow assumes:
- AI agents need clear constraints to prevent conflicts - AI agents need clear constraints to prevent conflicts
- The architecture document is for agents, not humans - The architecture document is for agents, not humans
## Migration from solution-architecture ## Migration from architecture
Projects using the old `solution-architecture` workflow should: Projects using the old `architecture` workflow should:
1. Complete any in-progress architecture work 1. Complete any in-progress architecture work
2. Use `architecture` for new projects 2. Use `architecture` for new projects
@ -315,4 +315,4 @@ Projects using the old `solution-architecture` workflow should:
- Starter decisions are documented as "PROVIDED BY STARTER" - Starter decisions are documented as "PROVIDED BY STARTER"
- First implementation story uses starter initialization command - First implementation story uses starter initialization command
1.0.0 - Initial release replacing solution-architecture workflow 1.0.0 - Initial release replacing architecture workflow

View File

@ -39,7 +39,7 @@ default_output_file: "{output_folder}/architecture.md"
# Workflow metadata # Workflow metadata
version: "1.3.2" version: "1.3.2"
replaces: "solution-architecture" replaces: "architecture"
paradigm: "facilitation-driven" paradigm: "facilitation-driven"
execution_time: "30-90 minutes depending on user skill level" execution_time: "30-90 minutes depending on user skill level"
features: features:

View File

@ -0,0 +1,221 @@
# Phase 4: Implementation
## Overview
Phase 4 is where planning transitions into actual development. This phase manages the iterative implementation of stories defined in the epic files, tracking their progress through a well-defined status workflow.
## Status Definitions
### Epic Status
Epics progress through a simple two-state flow:
| Status | Description | Next Status |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| **backlog** | Epic exists in epic file but technical context has not been created | contexted |
| **contexted** | Epic technical context has been created via `epic-tech-context` workflow. This is a prerequisite before any stories in the epic can be drafted. | - |
**File Indicators:**
- `backlog`: No `epic-{n}-context.md` file exists
- `contexted`: `{output_folder}/epic-{n}-context.md` file exists
### Story Status
Stories progress through a six-state flow representing their journey from idea to implementation:
| Status | Description | Set By | Next Status |
| ----------------- | ---------------------------------------------------------------------------------- | ------------- | ------------- |
| **backlog** | Story only exists in the epic file, no work has begun | Initial state | drafted |
| **drafted** | Story file has been created via `create-story` workflow | SM Agent | ready-for-dev |
| **ready-for-dev** | Story has been drafted, approved, and context created via `story-context` workflow | SM Agent | in-progress |
| **in-progress** | Developer is actively implementing the story | Dev Agent | review |
| **review** | Implementation complete, under SM review via `review-story` workflow | Dev Agent | done |
| **done** | Story has been reviewed and completed | Dev Agent | - |
**File Indicators:**
- `backlog`: No story file exists
- `drafted`: `{story_dir}/{story-key}.md` file exists (e.g., `1-1-user-auth.md`)
- `ready-for-dev`: Both story file and context exist (e.g., `1-1-user-auth-context.md`)
- `in-progress`, `review`, `done`: Manual status updates in sprint-status.yaml
### Retrospective Status
Optional retrospectives can be completed after an epic:
| Status | Description |
| ------------- | -------------------------------------------------- |
| **optional** | Retrospective can be completed but is not required |
| **completed** | Retrospective has been completed |
## Status Transitions
### Epic Flow
```mermaid
graph LR
backlog --> contexted[contexted via epic-tech-context]
```
### Story Flow
```mermaid
graph LR
backlog --> drafted[drafted via create-story]
drafted --> ready[ready-for-dev via story-context]
ready --> progress[in-progress - dev starts]
progress --> review[review via review-story]
review --> done[done - dev completes]
```
## Sprint Status Management
The `sprint-status.yaml` file is the single source of truth for tracking all work items. It contains:
- All epics with their current status
- All stories with their current status
- Retrospective placeholders for each epic
- Clear documentation of status definitions
### Example Sprint Status File
```yaml
development_status:
epic-1: contexted
1-1-project-foundation: done
1-2-app-shell: done
1-3-user-authentication: in-progress
1-4-plant-data-model: ready-for-dev
1-5-add-plant-manual: drafted
1-6-photo-identification: backlog
1-7-plant-naming: backlog
epic-1-retrospective: optional
epic-2: backlog
2-1-personality-system: backlog
2-2-chat-interface: backlog
2-3-llm-integration: backlog
epic-2-retrospective: optional
```
## Workflows in Phase 4
### Core Workflows
| Workflow | Purpose | Updates Status |
| --------------------- | -------------------------------------------------- | ----------------------------------- |
| **sprint-planning** | Generate/update sprint-status.yaml from epic files | Auto-detects file-based statuses |
| **epic-tech-context** | Create technical context for an epic | epic: backlog → contexted |
| **create-story** | Draft a story from epics/PRD | story: backlog → drafted |
| **story-context** | Add implementation context to story | story: drafted → ready-for-dev |
| **dev-story** | Developer implements the story | story: ready-for-dev → in-progress |
| **review-story** | SM reviews implementation | story: in-progress → review |
| **retrospective** | Conduct epic retrospective | retrospective: optional → completed |
| **correct-course** | Course correction when needed | Various status updates |
### Sprint Planning Workflow
The `sprint-planning` workflow is the foundation of Phase 4. It:
1. **Parses all epic files** (`epic*.md` or `epics.md`)
2. **Extracts all epics and stories** maintaining their order
3. **Auto-detects current status** based on existing files:
- Checks for epic context files
- Checks for story files
- Checks for story context files
4. **Generates sprint-status.yaml** with current reality
5. **Preserves manual status updates** (won't downgrade statuses)
Run this workflow:
- Initially after Phase 3 completion
- After creating epic contexts
- Periodically to sync file-based status
- To verify current project state
### Workflow Guidelines
1. **Epic Context First**: Epics should be contexted before drafting their stories
2. **Flexible Parallelism**: Multiple stories can be in-progress based on team capacity
3. **Sequential Default**: Stories within an epic are typically worked in order
4. **Learning Transfer**: SM drafts next story after previous is done, incorporating learnings
5. **Review Flow**: Dev moves to review, SM reviews, Dev moves to done
## Agent Responsibilities
### SM (Scrum Master) Agent
- Run `sprint-planning` to generate initial status
- Create epic contexts (`epic-tech-context`)
- Draft stories (`create-story`)
- Create story contexts (`story-context`)
- Review completed work (`review-story`)
- Update status in sprint-status.yaml
### Developer Agent
- Check sprint-status.yaml for `ready-for-dev` stories
- Update status to `in-progress` when starting
- Implement stories (`dev-story`)
- Move to `review` when complete
- Address review feedback
- Update to `done` after approval
### Test Architect
- Monitor stories entering `review` status
- Track epic progress
- Identify when retrospectives needed
- Validate implementation quality
## Best Practices
1. **Always run sprint-planning first** to establish current state
2. **Update status immediately** as work progresses
3. **Check sprint-status.yaml** before starting any work
4. **Preserve learning** by drafting stories sequentially when possible
5. **Document decisions** in story and context files
## Naming Conventions
### Story File Naming
- Format: `{epic}-{story}-{kebab-title}.md`
- Example: `1-1-user-authentication.md`
- Avoids YAML float parsing issues (1.1 vs 1.10)
- Makes files self-descriptive
### Git Branch Naming
- Format: `feat/{epic}-{story}-{kebab-title}`
- Example: `feat/1-1-user-authentication`
- Consistent with story file naming
- Clean for branch management
## File Structure
```
{output_folder}/
├── sprint-status.yaml # Sprint status tracking
├── epic*.md or epics.md # Epic definitions
├── epic-1-context.md # Epic technical contexts
├── epic-2-context.md
└── stories/
├── 1-1-user-authentication.md # Story drafts
├── 1-1-user-authentication-context.md # Story contexts
├── 1-2-account-management.md
├── 1-2-account-management-context.md
└── ...
```
## Next Steps
After Phase 4 implementation, projects typically move to:
- Deployment and release
- User acceptance testing
- Production monitoring
- Maintenance and updates
The sprint-status.yaml file provides a complete audit trail of the development process and can be used for project reporting and retrospectives.

View File

@ -9,15 +9,6 @@
<workflow> <workflow>
<step n="0" goal="Check project status" optional="true">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: init-check</param>
</invoke-workflow>
<output>Running correct-course workflow for sprint change management.
{{#if status_exists}}Status tracking enabled.{{else}}Note: No status file - running standalone.{{/if}}</output>
</step>
<step n="1" goal="Initialize Change Navigation"> <step n="1" goal="Initialize Change Navigation">
<action>Confirm change trigger and gather user description of the issue</action> <action>Confirm change trigger and gather user description of the issue</action>
<action>Ask: "What specific issue or change has been identified that requires navigation?"</action> <action>Ask: "What specific issue or change has been identified that requires navigation?"</action>

View File

@ -7,8 +7,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/correct-course" installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/correct-course"

View File

@ -4,7 +4,7 @@ validation-target: 'Newly generated story markdown file'
required-inputs: required-inputs:
- 'epics.md (preferred) or PRD' - 'epics.md (preferred) or PRD'
optional-inputs: optional-inputs:
- 'solution-architecture document for architecture context' - 'architecture document for architecture context'
validation-rules: validation-rules:
- 'Story structure matches sections: Status, Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Change Log, Dev Agent Record' - 'Story structure matches sections: Status, Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Change Log, Dev Agent Record'
- 'Dev Notes include Project Structure Notes and References subsections' - 'Dev Notes include Project Structure Notes and References subsections'

View File

@ -3,12 +3,9 @@
```xml ```xml
<critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical> <critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical> <critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
<critical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}</critical>
<critical>Generate all documents in {document_output_language}</critical> <critical>Generate all documents in {document_output_language}</critical>
<critical>This workflow creates or updates the next user story from epics/PRD and architecture context, saving to the configured stories directory and optionally invoking Story Context.</critical> <critical>This workflow creates or updates the next user story from epics/PRD and architecture context, saving to the configured stories directory and optionally invoking Story Context.</critical>
<critical>Default execution mode: #yolo (minimal prompts). Only elicit if absolutely required and {{non_interactive}} == false.</critical> <critical>DOCUMENT OUTPUT: Concise, technical, actionable story specifications. Use tables/lists for acceptance criteria and tasks.</critical>
<critical>DOCUMENT OUTPUT: Concise, technical, actionable story specifications. Use tables/lists for acceptance criteria and tasks. User skill level ({user_skill_level}) affects conversation style ONLY, not document content.</critical>
<workflow> <workflow>
@ -16,7 +13,7 @@
<action>Resolve variables from config_source: story_dir (dev_story_location), output_folder, user_name, communication_language. If story_dir missing and {{non_interactive}} == false → ASK user to provide a stories directory and update variable. If {{non_interactive}} == true and missing, HALT with a clear message.</action> <action>Resolve variables from config_source: story_dir (dev_story_location), output_folder, user_name, communication_language. If story_dir missing and {{non_interactive}} == false → ASK user to provide a stories directory and update variable. If {{non_interactive}} == true and missing, HALT with a clear message.</action>
<action>Create {{story_dir}} if it does not exist</action> <action>Create {{story_dir}} if it does not exist</action>
<action>Resolve installed component paths from workflow.yaml: template, instructions, validation</action> <action>Resolve installed component paths from workflow.yaml: template, instructions, validation</action>
<action>Resolve recommended inputs if present: epics_file, prd_file, solution-architecture_file</action> <action>Resolve recommended inputs if present: epics_file, prd_file, architecture_file</action>
</step> </step>
<step n="2" goal="Discover and load source documents"> <step n="2" goal="Discover and load source documents">
@ -25,51 +22,54 @@
1) tech_spec_file (epic-scoped) 1) tech_spec_file (epic-scoped)
2) epics_file (acceptance criteria and breakdown) 2) epics_file (acceptance criteria and breakdown)
3) prd_file (business requirements and constraints) 3) prd_file (business requirements and constraints)
4) solution-architecture_file (architecture constraints) 4) architecture_file (architecture constraints)
5) Architecture docs under docs/ and output_folder/: tech-stack.md, unified-project-structure.md, coding-standards.md, testing-strategy.md, backend-architecture.md, frontend-architecture.md, data-models.md, database-schema.md, rest-api-spec.md, external-apis.md (include if present) 5) Architecture docs under docs/ and output_folder/: tech-stack.md, unified-project-structure.md, coding-standards.md, testing-strategy.md, backend-architecture.md, frontend-architecture.md, data-models.md, database-schema.md, rest-api-spec.md, external-apis.md (include if present)
</action> </action>
<action>READ COMPLETE FILES for all items found in the prioritized set. Store content and paths for citation.</action> <action>READ COMPLETE FILES for all items found in the prioritized set. Store content and paths for citation.</action>
</step> </step>
<step n="2.5" goal="Get story to draft from status file"> <step n="3" goal="Determine target story from sprint status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status"> <action>Query sprint-status for next backlog story:</action>
<param>mode: data</param>
<param>data_request: next_story</param> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_next_story</param>
<param>filter_status: backlog</param>
</invoke-workflow> </invoke-workflow>
<check if="status_exists == true AND todo_story_id != ''"> <check if="{{result_found}} == false">
<action>Use extracted story information:</action> <output>📋 No backlog stories found in sprint-status.yaml
- {{todo_story_id}}: The story ID to draft
- {{todo_story_title}}: The story title
- {{todo_story_file}}: The exact story file path to create
<critical>This is the PRIMARY source - DO NOT search or guess</critical> All stories are either already drafted or completed.
<action>Set {{story_path}} = {story_dir}/{{todo_story_file}}</action> **Options:**
<action>Skip legacy discovery in Step 3</action> 1. Run sprint-planning to refresh story tracking
2. Load PM agent and run correct-course to add more stories
3. Check if current sprint is complete
</output>
<action>HALT</action>
</check> </check>
<check if="status_exists == false OR todo_story_id == ''"> <action>Parse {{result_story_key}} to extract epic_num, story_num, and story_title
<action>Fall back to legacy story discovery in Step 3</action> Example: "1-2-user-authentication" → epic_num=1, story_num=2, title="user-authentication"
</check> </action>
</step> <action>Set {{story_id}} = "{{epic_num}}.{{story_num}}"</action>
<step n="3" goal="Determine target story (do not prompt in #yolo)"> <action>Verify story is enumerated in {{epics_file}}. If not found, HALT with message:</action>
<action>List existing story markdown files in {{story_dir}} matching pattern: "story-<epic>.<story>.md"</action> <action>"Story {{result_story_key}} not found in epics.md. Please load PM agent and run correct-course to sync epics, then rerun create-story."</action>
<check>If none found → Set {{epic_num}}=1 and {{story_num}}=1</check>
<check>If files found → Parse epic_num and story_num; pick the highest pair</check> <action>Check if story file already exists at expected path in {{story_dir}}</action>
<action>Open the latest story (if exists) and read Status</action> <check if="story file exists">
<check>If Status != Done/Approved and {{non_interactive}} == true → TARGET the latest story for update (do not create a new one)</check> <output> Story file already exists: {{story_file_path}}
<check>If Status == Done/Approved → Candidate next story is {{epic_num}}.{{story_num+1}}</check>
<action>If creating a new story candidate: VERIFY planning in {{epics_file}}. Confirm that epic {{epic_num}} explicitly enumerates a next story matching {{story_num+1}} (or an equivalent next planned story entry). If epics.md is missing or does not enumerate another story for this epic, HALT with message:</action> Will update existing story file rather than creating new one.
<action>"No planned next story found in epics.md for epic {{epic_num}}. Please load either PM (Product Manager) agent at {project-root}/bmad/bmm/agents/pm.md or SM (Scrum Master) agent at {project-root}/bmad/bmm/agents/sm.md and run `*correct-course` to add/modify epic stories, then rerun create-story."</action> </output>
<check>If verification passes → Set {{story_num}} = {{story_num}} + 1</check> <action>Set update_mode = true</action>
<ask optional="true" if="{{non_interactive}} == false">If starting a new epic and {{non_interactive}} == false, ASK for {{epic_num}} and reset {{story_num}} to 1. In {{non_interactive}} == true, do NOT auto-advance epic; stay within current epic and continue incrementing story_num.</ask> </check>
</step> </step>
<step n="4" goal="Extract requirements and derive story statement"> <step n="4" goal="Extract requirements and derive story statement">
<action>From tech_spec_file (preferred) or epics_file: extract epic {{epic_num}} title/summary, acceptance criteria for the next story, and any component references. If not present, fall back to PRD sections mapping to this epic/story.</action> <action>From tech_spec_file (preferred) or epics_file: extract epic {{epic_num}} title/summary, acceptance criteria for the next story, and any component references. If not present, fall back to PRD sections mapping to this epic/story.</action>
<action>From solution-architecture and architecture docs: extract constraints, patterns, component boundaries, and testing guidance relevant to the extracted ACs. ONLY capture information that directly informs implementation of this story.</action> <action>From architecture and architecture docs: extract constraints, patterns, component boundaries, and testing guidance relevant to the extracted ACs. ONLY capture information that directly informs implementation of this story.</action>
<action>Derive a clear user story statement (role, action, benefit) grounded strictly in the above sources. If ambiguous and {{non_interactive}} == false → ASK user to clarify. If {{non_interactive}} == true → generate the best grounded statement WITHOUT inventing domain facts.</action> <action>Derive a clear user story statement (role, action, benefit) grounded strictly in the above sources. If ambiguous and {{non_interactive}} == false → ASK user to clarify. If {{non_interactive}} == true → generate the best grounded statement WITHOUT inventing domain facts.</action>
<template-output file="{default_output_file}">requirements_context_summary</template-output> <template-output file="{default_output_file}">requirements_context_summary</template-output>
</step> </step>
@ -100,58 +100,37 @@
<step n="8" goal="Validate, save, and optionally generate context"> <step n="8" goal="Validate, save, and optionally generate context">
<invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task> <invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task>
<action>Save document unconditionally (non-interactive default). In interactive mode, allow user confirmation.</action> <action>Save document unconditionally (non-interactive default). In interactive mode, allow user confirmation.</action>
<check>If {{auto_run_context}} == true → <invoke-workflow path="{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml">Pass {{story_path}} = {default_output_file}</invoke-workflow></check>
<action>Report created/updated story path</action>
</step>
<step n="9" goal="Update status file on completion"> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action> <param>action: update_story_status</param>
<action>Find the most recent file (by date in filename)</action> <param>story_key: {{result_story_key}}</param>
<param>new_status: drafted</param>
<check if="status file exists"> <param>validate: true</param>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: update</param>
<param>action: set_current_workflow</param>
<param>workflow_name: create-story</param>
</invoke-workflow> </invoke-workflow>
<check if="success == true"> <check if="{{result_success}} == false">
<output>✅ Status updated: Story {{story_id}} drafted</output> <output>⚠️ Could not update story status: {{result_error}}
Story file was created successfully, but sprint-status.yaml was not updated.
You may need to run sprint-planning to refresh tracking.
</output>
</check> </check>
<check>If {{auto_run_context}} == true → <invoke-workflow path="{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml">Pass {{story_path}} = {default_output_file}</invoke-workflow></check>
<action>Report created/updated story path</action>
<output>**✅ Story Created Successfully, {user_name}!** <output>**✅ Story Created Successfully, {user_name}!**
**Story Details:** **Story Details:**
- Story ID: {{story_id}} - Story ID: {{story_id}}
- Story Key: {{result_story_key}}
- File: {{story_file}} - File: {{story_file}}
- Status: Draft (needs review) - Status: {{result_new_status}} (was {{result_old_status}})
**Status file updated:**
- Current step: create-story (Story {{story_id}}) ✓
- Progress: {{new_progress_percentage}}%
**Next Steps:** **Next Steps:**
1. Review the drafted story in {{story_file}} 1. Review the drafted story in {{story_file}}
2. When satisfied, run `story-ready` to approve for development 2. When satisfied, run `story-ready` to approve for development
3. Or edit the story file and re-run `create-story` to update 3. Or edit the story file and re-run `create-story` to update
Check status anytime with: `workflow-status`
</output> </output>
</check>
<check if="status file not found">
<output>**✅ Story Created Successfully, {user_name}!**
**Story Details:**
- Story ID: {{story_id}}
- File: {{story_file}}
- Status: Draft
Note: Running in standalone mode (no status file).
To track progress across workflows, run `workflow-status` first.
</output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -7,8 +7,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Workflow components # Workflow components
@ -22,7 +20,7 @@ variables:
story_dir: "{config_source}:dev_story_location" # Directory where stories are stored story_dir: "{config_source}:dev_story_location" # Directory where stories are stored
epics_file: "{output_folder}/epics.md" # Preferred source for epic/story breakdown epics_file: "{output_folder}/epics.md" # Preferred source for epic/story breakdown
prd_file: "{output_folder}/PRD.md" # Fallback for requirements prd_file: "{output_folder}/PRD.md" # Fallback for requirements
solution-architecture_file: "{output_folder}/architecture.md" # Optional architecture context architecture_file: "{output_folder}/architecture.md" # Optional architecture context
tech_spec_file: "" # Will be auto-discovered from docs as tech-spec-epic-{{epic_num}}-*.md tech_spec_file: "" # Will be auto-discovered from docs as tech-spec-epic-{{epic_num}}-*.md
tech_spec_search_dir: "{project-root}/docs" tech_spec_search_dir: "{project-root}/docs"
tech_spec_glob_template: "tech-spec-epic-{{epic_num}}*.md" tech_spec_glob_template: "tech-spec-epic-{{epic_num}}*.md"
@ -44,6 +42,6 @@ default_output_file: "{story_dir}/story-{{epic_num}}.{{story_num}}.md"
recommended_inputs: recommended_inputs:
- epics: "Epic breakdown (epics.md)" - epics: "Epic breakdown (epics.md)"
- prd: "PRD document" - prd: "PRD document"
- solution-architecture: "Solution Architecture (optional)" - architecture: "Architecture (optional)"
web_bundle: false web_bundle: false

View File

@ -15,32 +15,38 @@
<workflow> <workflow>
<step n="1" goal="Load story from status file IN PROGRESS section"> <step n="1" goal="Locate and load story from sprint status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status"> <check if="{{story_path}} is provided">
<param>mode: data</param> <action>Use {{story_path}} directly</action>
<param>data_request: next_story</param> <action>Read COMPLETE story file</action>
<action>Extract story_key from filename or metadata</action>
<goto>task_check</goto>
</check>
<action>Query sprint-status for ready stories:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_next_story</param>
<param>filter_status: ready-for-dev</param>
</invoke-workflow> </invoke-workflow>
<check if="status_exists == true AND in_progress_story != ''"> <check if="{{result_found}} == false">
<action>Use IN PROGRESS story from status:</action> <output>📋 No ready-for-dev stories found in sprint-status.yaml
- {{in_progress_story}}: Current story ID
- Story file path derived from ID format
<critical>DO NOT SEARCH - status file provides exact story</critical> **Options:**
1. Run `story-ready` to mark drafted stories as ready
<action>Determine story file path from in_progress_story ID</action> 2. Run `create-story` if no stories are drafted yet
<action>Set {{story_path}} = {story_dir}/{{derived_story_file}}</action> 3. Check sprint-status.yaml to see current story states
</output>
<action>HALT</action>
</check> </check>
<check if="status_exists == false OR in_progress_story == ''"> <action>Use {{result_story_key}} to find story file in {{story_dir}}</action>
<action>Fall back to legacy auto-discovery:</action> <action>Read COMPLETE story file from discovered path</action>
<action>If {{story_path}} explicitly provided → use it</action> <action>Store {{result_story_key}} for later status updates</action>
<action>Otherwise list story-*.md files from {{story_dir}}, sort by modified time</action>
<ask optional="true" if="{{non_interactive}} == false">Select story or enter path</ask> <anchor id="task_check" />
<action if="{{non_interactive}} == true">Auto-select most recent</action>
</check>
<action>Read COMPLETE story file from {{story_path}}</action>
<action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action> <action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action>
<action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</action> <action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</action>
@ -49,6 +55,34 @@
<check>If task requirements ambiguous → ASK user to clarify or HALT</check> <check>If task requirements ambiguous → ASK user to clarify or HALT</check>
</step> </step>
<step n="1.5" goal="Mark story in-progress in sprint status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_story_status</param>
<param>story_key: {{result_story_key}}</param>
</invoke-workflow>
<check if="{{result_status}} == 'ready-for-dev'">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{result_story_key}}</param>
<param>new_status: in-progress</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == true">
<output>🚀 Starting work on story {{result_story_key}}
Status updated: {{result_old_status}} → {{result_new_status}}
</output>
</check>
</check>
<check if="{{result_status}} == 'in-progress'">
<output>⏯️ Resuming work on story {{result_story_key}}
Story is already marked in-progress
</output>
</check>
</step>
<step n="2" goal="Plan and implement task"> <step n="2" goal="Plan and implement task">
<action>Review acceptance criteria and dev notes for the selected task</action> <action>Review acceptance criteria and dev notes for the selected task</action>
<action>Plan implementation steps and edge cases; write down a brief plan in Dev Agent Record → Debug Log</action> <action>Plan implementation steps and edge cases; write down a brief plan in Dev Agent Record → Debug Log</action>
@ -95,6 +129,21 @@
<action>Confirm File List includes every changed file</action> <action>Confirm File List includes every changed file</action>
<action>Execute story definition-of-done checklist, if the story includes one</action> <action>Execute story definition-of-done checklist, if the story includes one</action>
<action>Update the story Status to: Ready for Review</action> <action>Update the story Status to: Ready for Review</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{result_story_key}}</param>
<param>new_status: review</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Story file updated, but sprint-status update failed: {{result_error}}
Story is marked Ready for Review in file, but sprint-status.yaml may be out of sync.
</output>
</check>
<check>If any task is incomplete → Return to step 1 to complete remaining work (Do NOT finish with partial progress)</check> <check>If any task is incomplete → Return to step 1 to complete remaining work (Do NOT finish with partial progress)</check>
<check>If regression failures exist → STOP and resolve before completing</check> <check>If regression failures exist → STOP and resolve before completing</check>
<check>If File List is incomplete → Update it before completing</check> <check>If File List is incomplete → Update it before completing</check>
@ -104,58 +153,21 @@
<action>Optionally run the workflow validation task against the story using {project-root}/bmad/core/tasks/validate-workflow.xml</action> <action>Optionally run the workflow validation task against the story using {project-root}/bmad/core/tasks/validate-workflow.xml</action>
<action>Prepare a concise summary in Dev Agent Record → Completion Notes</action> <action>Prepare a concise summary in Dev Agent Record → Completion Notes</action>
<action>Communicate that the story is Ready for Review</action> <action>Communicate that the story is Ready for Review</action>
</step>
<step n="8" goal="Update status file on completion">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action>
<action>Find the most recent file (by date in filename)</action>
<check if="status file exists">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: update</param>
<param>action: set_current_workflow</param>
<param>workflow_name: dev-story</param>
</invoke-workflow>
<check if="success == true">
<output>✅ Status updated: Story {{current_story_id}} ready for review</output>
</check>
<output>**✅ Story Implementation Complete, {user_name}!** <output>**✅ Story Implementation Complete, {user_name}!**
**Story Details:** **Story Details:**
- Story ID: {{current_story_id}} - Story ID: {{current_story_id}}
- Story Key: {{result_story_key}}
- Title: {{current_story_title}} - Title: {{current_story_title}}
- File: {{story_path}} - File: {{story_path}}
- Status: Ready for Review - Status: {{result_new_status}} (was {{result_old_status}})
**Status file updated:**
- Current step: dev-story (Story {{current_story_id}}) ✓
- Progress: {{new_progress_percentage}}%
**Next Steps:** **Next Steps:**
1. Review the implemented story and test the changes 1. Review the implemented story and test the changes
2. Verify all acceptance criteria are met 2. Verify all acceptance criteria are met
3. When satisfied, run `story-approved` to mark story complete and advance the queue 3. Run `review-story` workflow for senior developer review
4. When review passes, run `story-done` to mark complete
Or check status anytime with: `workflow-status`
</output> </output>
</check>
<check if="status file not found">
<output>**✅ Story Implementation Complete, {user_name}!**
**Story Details:**
- Story ID: {{current_story_id}}
- Title: {{current_story_title}}
- File: {{story_path}}
- Status: Ready for Review
Note: Running in standalone mode (no status file).
To track progress across workflows, run `workflow-status` first.
</output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -7,8 +7,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Workflow components # Workflow components

View File

@ -2,7 +2,7 @@
## Overview ## Overview
Generate a comprehensive Technical Specification for a single epic from PRD, Epics file and Solution Architecture to produce a document with full acceptance criteria and traceability mapping. Creates detailed implementation guidance that bridges business requirements with technical execution. Generate a comprehensive Technical Specification for a single epic from PRD, Epics file and Architecture to produce a document with full acceptance criteria and traceability mapping. Creates detailed implementation guidance that bridges business requirements with technical execution.
## Key Features ## Key Features
@ -35,7 +35,7 @@ workflow tech-spec --input PRD.md --input architecture.md --input front-end-spec
- **output_folder**: Location for generated technical specification - **output_folder**: Location for generated technical specification
- **epic_id**: Used in output filename (extracted from PRD or prompted) - **epic_id**: Used in output filename (extracted from PRD or prompted)
- **recommended_inputs**: PRD, solution-architecture, front-end spec, brownfield notes - **recommended_inputs**: PRD, architecture, front-end spec, brownfield notes
## Workflow Structure ## Workflow Structure
@ -104,7 +104,7 @@ tech-spec/
### Output Structure ### Output Structure
1. **Overview and Scope** - Project context and boundaries 1. **Overview and Scope** - Project context and boundaries
2. **System Architecture Alignment** - Connection to solution-architecture 2. **System Architecture Alignment** - Connection to architecture
3. **Detailed Design** - Services, data models, APIs, and workflows 3. **Detailed Design** - Services, data models, APIs, and workflows
4. **Non-Functional Requirements** - Performance, security, reliability, observability 4. **Non-Functional Requirements** - Performance, security, reliability, observability
5. **Dependencies and Integrations** - External systems and technical dependencies 5. **Dependencies and Integrations** - External systems and technical dependencies
@ -116,7 +116,7 @@ tech-spec/
## Requirements ## Requirements
- **PRD Document**: Product Requirements Document with clear acceptance criteria - **PRD Document**: Product Requirements Document with clear acceptance criteria
- **Architecture Document**: solution-architecture or technical design - **Architecture Document**: architecture or technical design
- **Repository Access**: For dependency analysis and framework detection - **Repository Access**: For dependency analysis and framework detection
- **Epic Context**: Clear epic identification and scope definition - **Epic Context**: Clear epic identification and scope definition

View File

@ -5,73 +5,41 @@
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical> <critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
<critical>Communicate all responses in {communication_language}</critical> <critical>Communicate all responses in {communication_language}</critical>
<critical>This workflow generates a comprehensive Technical Specification from PRD and Architecture, including detailed design, NFRs, acceptance criteria, and traceability mapping.</critical> <critical>This workflow generates a comprehensive Technical Specification from PRD and Architecture, including detailed design, NFRs, acceptance criteria, and traceability mapping.</critical>
<critical>Default execution mode: #yolo (non-interactive). If required inputs cannot be auto-discovered and {{non_interactive}} == true, HALT with a clear message listing missing documents; do not prompt.</critical> <critical>If required inputs cannot be auto-discovered HALT with a clear message listing missing documents, allow user to provide them to proceed.</critical>
<workflow> <workflow>
<step n="1" goal="Check and load workflow status file"> <step n="1" goal="Collect inputs and initialize">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action>
<action>Find the most recent file (by date in filename: bmm-workflow-status.md)</action>
<check if="exists">
<action>Load the status file</action>
<action>Extract key information:</action>
- current_step: What workflow was last run
- next_step: What workflow should run next
- planned_workflow: The complete workflow journey table
- progress_percentage: Current progress
- project_level: Project complexity level (0-4)
<action>Set status_file_found = true</action>
<action>Store status_file_path for later updates</action>
<check if="project_level < 3">
<ask>**⚠️ Project Level Notice**
Status file shows project_level = {{project_level}}.
Tech-spec workflow is typically only needed for Level 3-4 projects.
For Level 0-2, solution-architecture usually generates tech specs automatically.
Options:
1. Continue anyway (manual tech spec generation)
2. Exit (check if solution-architecture already generated tech specs)
3. Run workflow-status to verify project configuration
What would you like to do?</ask>
<action>If user chooses exit → HALT with message: "Check docs/ folder for existing tech-spec files"</action>
</check>
</check>
<check if="not exists">
<ask>**No workflow status file found.**
The status file tracks progress across all workflows and stores project configuration.
Note: This workflow is typically invoked automatically by solution-architecture, or manually for JIT epic tech specs.
Options:
1. Run workflow-status first to create the status file (recommended)
2. Continue in standalone mode (no progress tracking)
3. Exit
What would you like to do?</ask>
<action>If user chooses option 1 → HALT with message: "Please run workflow-status first, then return to tech-spec"</action>
<action>If user chooses option 2 → Set standalone_mode = true and continue</action>
<action>If user chooses option 3 → HALT</action>
</check>
</step>
<step n="2" goal="Collect inputs and initialize">
<action>Identify PRD and Architecture documents from recommended_inputs. Attempt to auto-discover at default paths.</action> <action>Identify PRD and Architecture documents from recommended_inputs. Attempt to auto-discover at default paths.</action>
<ask optional="true" if="{{non_interactive}} == false">If inputs are missing, ask the user for file paths.</ask> <ask if="inputs are missing">ask the user for file paths. HALT and wait for docs to proceed with the rest of step 2</ask>
<check if="inputs are missing and {{non_interactive}} == true">HALT with a clear message listing missing documents and do not proceed until user provides sufficient documents to proceed.</check> <action>Extract {{epic_title}} and {{epic_id}} from PRD.</action>
<action>Extract {{epic_title}} and {{epic_id}} from PRD (or ASK if not present).</action>
<action>Resolve output file path using workflow variables and initialize by writing the template.</action> <action>Resolve output file path using workflow variables and initialize by writing the template.</action>
</step> </step>
<step n="3" goal="Overview and scope"> <step n="1.5" goal="Validate epic in sprint status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_epic_status</param>
<param>epic_id: {{epic_id}}</param>
</invoke-workflow>
<check if="{{result_found}} == false">
<output>⚠️ Epic {{epic_id}} not found in sprint-status.yaml
This epic hasn't been registered in the sprint plan yet.
Run sprint-planning workflow to initialize epic tracking.
</output>
<action>HALT</action>
</check>
<check if="{{result_status}} == 'contexted'">
<output> Epic {{epic_id}} already marked as contexted
Continuing to regenerate tech spec...
</output>
</check>
</step>
<step n="2" goal="Overview and scope">
<action>Read COMPLETE PRD and Architecture files.</action> <action>Read COMPLETE PRD and Architecture files.</action>
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Replace {{overview}} with a concise 1-2 paragraph summary referencing PRD context and goals Replace {{overview}} with a concise 1-2 paragraph summary referencing PRD context and goals
@ -80,8 +48,8 @@ What would you like to do?</ask>
</template-output> </template-output>
</step> </step>
<step n="4" goal="Detailed design"> <step n="3" goal="Detailed design">
<action>Derive concrete implementation specifics from Architecture and PRD (NO invention).</action> <action>Derive concrete implementation specifics from Architecture and PRD (CRITICAL: NO invention).</action>
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Replace {{services_modules}} with a table or bullets listing services/modules with responsibilities, inputs/outputs, and owners Replace {{services_modules}} with a table or bullets listing services/modules with responsibilities, inputs/outputs, and owners
Replace {{data_models}} with normalized data model definitions (entities, fields, types, relationships); include schema snippets where available Replace {{data_models}} with normalized data model definitions (entities, fields, types, relationships); include schema snippets where available
@ -90,7 +58,7 @@ What would you like to do?</ask>
</template-output> </template-output>
</step> </step>
<step n="5" goal="Non-functional requirements"> <step n="4" goal="Non-functional requirements">
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Replace {{nfr_performance}} with measurable targets (latency, throughput); link to any performance requirements in PRD/Architecture Replace {{nfr_performance}} with measurable targets (latency, throughput); link to any performance requirements in PRD/Architecture
Replace {{nfr_security}} with authn/z requirements, data handling, threat notes; cite source sections Replace {{nfr_security}} with authn/z requirements, data handling, threat notes; cite source sections
@ -99,14 +67,14 @@ What would you like to do?</ask>
</template-output> </template-output>
</step> </step>
<step n="6" goal="Dependencies and integrations"> <step n="5" goal="Dependencies and integrations">
<action>Scan repository for dependency manifests (e.g., package.json, pyproject.toml, go.mod, Unity Packages/manifest.json).</action> <action>Scan repository for dependency manifests (e.g., package.json, pyproject.toml, go.mod, Unity Packages/manifest.json).</action>
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Replace {{dependencies_integrations}} with a structured list of dependencies and integration points with version or commit constraints when known Replace {{dependencies_integrations}} with a structured list of dependencies and integration points with version or commit constraints when known
</template-output> </template-output>
</step> </step>
<step n="7" goal="Acceptance criteria and traceability"> <step n="6" goal="Acceptance criteria and traceability">
<action>Extract acceptance criteria from PRD; normalize into atomic, testable statements.</action> <action>Extract acceptance criteria from PRD; normalize into atomic, testable statements.</action>
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Replace {{acceptance_criteria}} with a numbered list of testable acceptance criteria Replace {{acceptance_criteria}} with a numbered list of testable acceptance criteria
@ -114,30 +82,24 @@ What would you like to do?</ask>
</template-output> </template-output>
</step> </step>
<step n="8" goal="Risks and test strategy"> <step n="7" goal="Risks and test strategy">
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Replace {{risks_assumptions_questions}} with explicit list (each item labeled as Risk/Assumption/Question) with mitigation or next step Replace {{risks_assumptions_questions}} with explicit list (each item labeled as Risk/Assumption/Question) with mitigation or next step
Replace {{test_strategy}} with a brief plan (test levels, frameworks, coverage of ACs, edge cases) Replace {{test_strategy}} with a brief plan (test levels, frameworks, coverage of ACs, edge cases)
</template-output> </template-output>
</step> </step>
<step n="9" goal="Validate"> <step n="8" goal="Validate and complete">
<invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task> <invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task>
</step>
<step n="10" goal="Update status file on completion"> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action> <param>action: update_epic_status</param>
<action>Find the most recent file (by date in filename)</action> <param>epic_id: {{epic_id}}</param>
<param>new_status: contexted</param>
<check if="status file exists">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: update</param>
<param>action: complete_workflow</param>
<param>workflow_name: tech-spec</param>
</invoke-workflow> </invoke-workflow>
<check if="success == true"> <check if="{{result_success}} == false">
<output>✅ Status updated for Epic {{epic_id}} tech-spec</output> <output>⚠️ Could not update epic status: {{result_error}}</output>
</check> </check>
<output>**✅ Tech Spec Generated Successfully, {user_name}!** <output>**✅ Tech Spec Generated Successfully, {user_name}!**
@ -146,37 +108,15 @@ What would you like to do?</ask>
- Epic ID: {{epic_id}} - Epic ID: {{epic_id}}
- Epic Title: {{epic_title}} - Epic Title: {{epic_title}}
- Tech Spec File: {{default_output_file}} - Tech Spec File: {{default_output_file}}
- Epic Status: {{result_new_status}} (was {{result_old_status}})
**Status file updated:** **Note:** This is a JIT (Just-In-Time) workflow - run again for other epics as needed.
- Current step: tech-spec (Epic {{epic_id}}) ✓
- Progress: {{new_progress_percentage}}%
**Note:** This is a JIT (Just-In-Time) workflow.
- Run again for other epics that need detailed tech specs
- Or proceed to Phase 4 (Implementation) if all tech specs are complete
**Next Steps:** **Next Steps:**
1. If more epics need tech specs: Run tech-spec again with different epic_id 1. If more epics need tech specs: Run tech-spec again with different epic_id
2. If all tech specs complete: Proceed to Phase 4 implementation 2. If all tech specs complete: Proceed to Phase 4 implementation
3. Check status anytime with: `workflow-status` - Load SM agent and run `create-story` to begin implementing stories
</output> </output>
</check>
<check if="status file not found">
<output>**✅ Tech Spec Generated Successfully, {user_name}!**
**Epic Details:**
- Epic ID: {{epic_id}}
- Epic Title: {{epic_title}}
- Tech Spec File: {{default_output_file}}
Note: Running in standalone mode (no status file).
To track progress across workflows, run `workflow-status` first.
**Note:** This is a JIT workflow - run again for other epics as needed.
</output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -7,8 +7,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Inputs expected ( check output_folder or ask user if missing) # Inputs expected ( check output_folder or ask user if missing)
@ -26,17 +24,6 @@ instructions: "{installed_path}/instructions.md"
validation: "{installed_path}/checklist.md" validation: "{installed_path}/checklist.md"
# Output configuration # Output configuration
default_output_file: "{project-root}/docs/tech-spec-epic-{{epic_id}}.md" default_output_file: "{output_folder}/tech-spec-epic-{{epic_id}}.md"
# Variables web_bundle: false
variables:
non_interactive: true
web_bundle:
name: "tech-spec"
description: "Generate a comprehensive Technical Specification from PRD and Architecture with acceptance criteria and traceability mapping"
author: "BMAD BMM"
web_bundle_files:
- "bmad/bmm/workflows/4-implementation/epic-tech-context/template.md"
- "bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md"
- "bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md"

View File

@ -20,27 +20,54 @@ FACILITATION NOTES:
<workflow> <workflow>
<step n="1" goal="Check workflow status"> <step n="1" goal="Epic Context Discovery">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: init-check</param>
</invoke-workflow>
<check if="status_exists == false">
<output>⚠️ {{suggestion}}
Running in standalone mode - no progress tracking.</output>
<action>Set standalone_mode = true</action>
</check>
<action>Store {{status_file_path}} for later updates (if exists)</action>
</step>
<step n="2" goal="Epic Context Discovery">
<action>Help the user identify which epic was just completed through natural conversation</action> <action>Help the user identify which epic was just completed through natural conversation</action>
<action>Attempt to auto-detect by checking {output_folder}/stories/ for the highest numbered completed story and extracting the epic number</action> <action>Attempt to auto-detect by checking {output_folder}/stories/ for the highest numbered completed story and extracting the epic number</action>
<action>If auto-detection succeeds, confirm with user: "It looks like Epic {{epic_number}} was just completed - is that correct?"</action> <action>If auto-detection succeeds, confirm with user: "It looks like Epic {{epic_number}} was just completed - is that correct?"</action>
<action>If auto-detection fails or user indicates different epic, ask them to share which epic they just completed</action> <action>If auto-detection fails or user indicates different epic, ask them to share which epic they just completed</action>
<action>Verify epic completion status in sprint-status:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: check_epic_complete</param>
<param>epic_id: {{epic_number}}</param>
</invoke-workflow>
<check if="{{result_complete}} == false">
<output>⚠️ Epic {{epic_number}} is not yet complete for retrospective
**Epic Status:**
- Total Stories: {{result_total_stories}}
- Completed (Done): {{result_done_stories}}
- Pending: {{result_total_stories - result_done_stories}}
**Pending Stories:**
{{result_pending_stories}}
**Options:**
1. Complete remaining stories before running retrospective
2. Continue with partial retrospective (not recommended)
3. Run sprint-planning to refresh story tracking
</output>
<ask if="{{non_interactive}} == false">Epic is incomplete. Continue anyway? (yes/no)</ask>
<check if="user says no">
<action>HALT</action>
</check>
<action if="user says yes">Set {{partial_retrospective}} = true</action>
</check>
<check if="{{result_complete}} == true">
<output>✅ Epic {{epic_number}} is complete - all {{result_done_stories}} stories done!
Ready to proceed with retrospective.
</output>
</check>
<action>Load the completed epic from: {output_folder}/prd/epic-{{epic_number}}.md</action> <action>Load the completed epic from: {output_folder}/prd/epic-{{epic_number}}.md</action>
<action>Extract epic details: <action>Extract epic details:
@ -376,67 +403,49 @@ See you at sprint planning once prep work is done!"
``` ```
<action>Save retrospective summary to: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md</action> <action>Save retrospective summary to: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md</action>
<action>Confirm all action items have been captured</action>
<action>Remind user to schedule prep sprint if needed</action>
</step>
<step n="9" goal="Update status file on completion"> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action> <param>action: complete_retrospective</param>
<action>Find the most recent file (by date in filename)</action> <param>epic_id: {{completed_number}}</param>
</invoke-workflow>
<check if="status file exists"> <check if="{{result_success}} == true">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status"> <output>✅ Retrospective marked as completed in sprint-status.yaml
<param>mode: update</param>
<param>action: complete_workflow</param>
<param>workflow_name: retrospective</param>
</invoke-workflow>
<check if="success == true"> Retrospective key: {{result_retro_key}}
<output>✅ Status updated: Retrospective complete for Epic {{completed_number}}</output> Status: {{result_old_status}} → {{result_new_status}}
</check> </output>
</check> </check>
<output>**✅ Retrospective Complete** <check if="{{result_success}} == false">
<output>⚠️ Could not update retrospective status: {{result_error}}
Retrospective document was saved, but sprint-status.yaml may need manual update.
</output>
</check>
<action>Confirm all action items have been captured</action>
<action>Remind user to schedule prep sprint if needed</action>
<output>**✅ Retrospective Complete, {user_name}!**
**Epic Review:** **Epic Review:**
- Epic {{completed_number}}: {{epic_title}} reviewed - Epic {{completed_number}}: {{epic_title}} reviewed
- Retrospective Status: {{result_new_status}}
- Retrospective saved: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md
- Action Items: {{action_count}} - Action Items: {{action_count}}
- Preparation Tasks: {{prep_task_count}} - Preparation Tasks: {{prep_task_count}}
- Critical Path Items: {{critical_count}} - Critical Path Items: {{critical_count}}
**Status file updated:**
- Current step: retrospective (Epic {{completed_number}}) ✓
- Progress: {{new_progress_percentage}}%
**Next Steps:** **Next Steps:**
1. Review retrospective summary: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md 1. Review retrospective summary: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md
2. Execute preparation sprint (Est: {{prep_days}} days) 2. Execute preparation sprint (Est: {{prep_days}} days)
3. Complete critical path items before Epic {{next_number}} 3. Complete critical path items before Epic {{next_number}}
4. Begin Epic {{next_number}} planning when preparation complete 4. Begin Epic {{next_number}} planning when preparation complete
- Load PM agent and run `epic-tech-context` for next epic
Check status anytime with: `workflow-status` - Or continue with existing contexted epics
</output>
</check>
<check if="status file not found">
<output>**✅ Retrospective Complete, {user_name}!**
**Epic Review:**
- Epic {{completed_number}}: {{epic_title}} reviewed
- Retrospective saved: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md
Note: Running in standalone mode (no status file).
**Next Steps:**
1. Execute preparation sprint
2. Begin Epic {{next_number}} planning
</output> </output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -7,8 +7,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/retrospective" installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/retrospective"

View File

@ -14,27 +14,50 @@
<workflow> <workflow>
<step n="1" goal="Check workflow status"> <step n="1" goal="Locate story and verify review status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status"> <check if="{{story_path}} is provided">
<param>mode: init-check</param> <action>Use {{story_path}} directly</action>
</invoke-workflow> <action>Read COMPLETE file and parse sections</action>
<action>Extract story_key from filename or story metadata</action>
<check if="status_exists == false"> <goto>verify_status</goto>
<output>⚠️ {{suggestion}}
Running in standalone mode - no progress tracking.</output>
<action>Set standalone_mode = true</action>
</check> </check>
<action>Store {{status_file_path}} for later updates (if exists)</action> <action>Query sprint-status for review stories:</action>
</step>
<step n="2" goal="Locate story and verify review status"> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<action>If {{story_path}} was provided → use it. Else auto-discover from {{story_dir}} by listing files matching pattern: "story-*.md" (recursive), sort by last modified (newest first), present top {{story_selection_limit}}.</action> <param>action: list_stories</param>
<ask optional="true" if="{{non_interactive}} == false">Select a story (1-{{story_selection_limit}}) or enter a path:</ask> <param>filter_status: review</param>
<action>Resolve {{story_path}} and read the COMPLETE file.</action> <param>limit: 10</param>
<action>Extract {{epic_num}} and {{story_num}} from filename (e.g., story-2.3.*.md) and story metadata if available.</action> </invoke-workflow>
<action>Parse sections: Status, Story, Acceptance Criteria, Tasks/Subtasks (and completion states), Dev Notes, Dev Agent Record (Context Reference, Completion Notes, File List), Change Log.</action>
<check if="{{result_count}} == 0">
<output>📋 No stories in review status found
**Options:**
1. Run `dev-story` to implement and mark stories ready for review
2. Check sprint-status.yaml for current story states
</output>
<action>HALT</action>
</check>
<action>Display available review stories:
**Stories Ready for Review ({{result_count}} found):**
{{result_story_list}}
</action>
<ask if="{{non_interactive}} == false">Select story to review (enter story key or number):</ask>
<action if="{{non_interactive}} == true">Auto-select first story from result_stories</action>
<action>Resolve selected story_key and find file path in {{story_dir}}</action>
<action>Resolve {{story_path}} and read the COMPLETE file</action>
<anchor id="verify_status" />
<action>Extract {{epic_num}} and {{story_num}} from filename (e.g., story-2.3.*.md) and story metadata if available</action>
<action>Parse sections: Status, Story, Acceptance Criteria, Tasks/Subtasks (and completion states), Dev Notes, Dev Agent Record (Context Reference, Completion Notes, File List), Change Log</action>
<action if="Status is not one of {{allow_status_values}}">HALT with message: "Story status must be 'Ready for Review' to proceed" (accept 'Review' as equivalent).</action> <action if="Status is not one of {{allow_status_values}}">HALT with message: "Story status must be 'Ready for Review' to proceed" (accept 'Review' as equivalent).</action>
<action if="story cannot be read">HALT.</action> <action if="story cannot be read">HALT.</action>
</step> </step>
@ -95,6 +118,32 @@ Running in standalone mode - no progress tracking.</output>
<action>Save the story file.</action> <action>Save the story file.</action>
</step> </step>
<step n="7.5" goal="Update sprint-status based on review outcome">
<action>Determine target status based on review outcome:
- If {{outcome}} == "Approve" → target_status = "done"
- If {{outcome}} == "Changes Requested" → target_status = "in-progress"
- If {{outcome}} == "Blocked" → target_status = "review" (stay in review)
</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{story_key}}</param>
<param>new_status: {{target_status}}</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == true">
<output>✅ Sprint status updated: {{result_old_status}} → {{result_new_status}}</output>
</check>
<check if="{{result_success}} == false">
<output>⚠️ Could not update sprint-status: {{result_error}}
Review was saved to story file, but sprint-status.yaml may be out of sync.
</output>
</check>
</step>
<step n="8" goal="Persist action items to tasks/backlog/epic"> <step n="8" goal="Persist action items to tasks/backlog/epic">
<action>Normalize Action Items into a structured list: description, severity (High/Med/Low), type (Bug/TechDebt/Enhancement), suggested owner (if known), related AC/file references.</action> <action>Normalize Action Items into a structured list: description, severity (High/Med/Low), type (Bug/TechDebt/Enhancement), suggested owner (if known), related AC/file references.</action>
<action if="{{persist_action_items}} == true and 'story_tasks' in {{persist_targets}}"> <action if="{{persist_action_items}} == true and 'story_tasks' in {{persist_targets}}">
@ -115,131 +164,21 @@ Running in standalone mode - no progress tracking.</output>
<step n="9" goal="Validation and completion"> <step n="9" goal="Validation and completion">
<invoke-task>Run validation checklist at {installed_path}/checklist.md using {project-root}/bmad/core/tasks/validate-workflow.xml</invoke-task> <invoke-task>Run validation checklist at {installed_path}/checklist.md using {project-root}/bmad/core/tasks/validate-workflow.xml</invoke-task>
<action>Report workflow completion.</action> <action>Report workflow completion.</action>
</step> <step n="1" goal="Locate story and verify review status">
<action>If {{story_path}} was provided → use it. Else auto-discover from {{story_dir}} by listing files matching pattern: "story-*.md" (recursive), sort by last modified (newest first), present top {{story_selection_limit}}.</action>
<ask optional="true" if="{{non_interactive}} == false">Select a story (1-{{story_selection_limit}}) or enter a path:</ask>
<action>Resolve {{story_path}} and read the COMPLETE file.</action>
<action>Extract {{epic_num}} and {{story_num}} from filename (e.g., story-2.3.*.md) and story metadata if available.</action>
<action>Parse sections: Status, Story, Acceptance Criteria, Tasks/Subtasks (and completion states), Dev Notes, Dev Agent Record (Context Reference, Completion Notes, File List), Change Log.</action>
<action if="Status is not one of {{allow_status_values}}">HALT with message: "Story status must be 'Ready for Review' to proceed" (accept 'Review' as equivalent).</action>
<action if="story cannot be read">HALT.</action>
</step>
<step n="2" goal="Resolve context and specification inputs">
<action>Locate Story Context: Under Dev Agent Record → Context Reference, read referenced path(s). If missing and {{auto_discover_context}}: search {{output_folder}} for files named "story-context-{{epic_num}}.{{story_num}}*.xml"; pick the most recent.</action>
<action if="no context found">Continue but record a WARNING in review notes: "No Story Context found".</action>
<action>Locate Epic Tech Spec: If {{auto_discover_tech_spec}}, search {{tech_spec_search_dir}} with glob {{tech_spec_glob_template}} (resolve {{epic_num}}); else use provided input.</action>
<action if="no tech spec found">Continue but record a WARNING in review notes: "No Tech Spec found for epic {{epic_num}}".</action>
<action>Load architecture/standards docs: For each file name in {{arch_docs_file_names}} within {{arch_docs_search_dirs}}, read if exists. Collect any testing, coding standards, security, and architectural patterns.</action>
</step>
<step n="3" goal="Detect tech stack and establish best-practice reference set">
<action>Detect primary ecosystem(s) by scanning for manifests (e.g., package.json, pyproject.toml, go.mod, Dockerfile). Record key frameworks (e.g., Node/Express, React/Vue, Python/FastAPI, etc.).</action>
<action>If {{enable_mcp_doc_search}} and MCP servers are available → Use them to search for up-to-date best practices, security advisories, and framework-specific guidance relevant to the detected stack and the story's domain.</action>
<action>If MCP is unavailable or insufficient and {{enable_web_fallback}} → Perform targeted web searches and fetch authoritative references (framework docs, OWASP, language style guides). Prefer official documentation and widely-recognized standards.</action>
<action>Synthesize a concise "Best-Practices and References" note capturing any updates or considerations that should influence the review (cite links and versions if available).</action>
</step>
<step n="4" goal="Assess implementation against acceptance criteria and specs">
<action>From the story, read Acceptance Criteria and Tasks/Subtasks with their completion state.</action>
<action>From Dev Agent Record → File List, compile list of changed/added files. If File List is missing or clearly incomplete, search repo for recent changes relevant to the story scope (heuristics: filenames matching components/services/routes/tests inferred from ACs/tasks).</action>
<action>Cross-check epic tech-spec requirements and architecture constraints against the implementation intent in files.</action>
<action>For each acceptance criterion, verify there is evidence of implementation and corresponding tests (unit/integration/E2E as applicable). Note any gaps explicitly.</action>
<action if="critical architecture constraints are violated (e.g., layering, dependency rules)">flag as High severity finding.</action>
</step>
<step n="5" goal="Perform code quality and risk review">
<action>For each changed file, skim for common issues appropriate to the stack: error handling, input validation, logging, dependency injection, thread-safety/async correctness, resource cleanup, performance anti-patterns.</action>
<action>Perform security review: injection risks, authZ/authN handling, secret management, unsafe defaults, unvalidated redirects, CORS misconfig, dependency vulnerabilities (based on manifests).</action>
<action>Check tests quality: assertions are meaningful, edge cases covered, deterministic behavior, proper fixtures, no flakiness patterns.</action>
<action>Capture concrete, actionable suggestions with severity (High/Med/Low) and rationale. When possible, suggest specific code-level changes (filenames + line ranges) without rewriting large sections.</action>
</step>
<step n="6" goal="Decide review outcome and prepare notes">
<action>Determine outcome: Approve, Changes Requested, or Blocked.</action>
<action>Prepare a structured review report with sections: Summary, Outcome, Key Findings (by severity), Acceptance Criteria Coverage, Test Coverage and Gaps, Architectural Alignment, Security Notes, Best-Practices and References, Action Items.</action>
<action>For Action Items, use imperative phrasing and map each to related ACs or files. Include suggested owners if clear.</action>
</step>
<step n="7" goal="Append review to story and update metadata">
<action>Open {{story_path}} and append a new section at the end titled exactly: "Senior Developer Review (AI)".</action>
<action>Insert subsections:
- Reviewer: {{user_name}}
- Date: {{date}}
- Outcome: (Approve | Changes Requested | Blocked)
- Summary
- Key Findings
- Acceptance Criteria Coverage
- Test Coverage and Gaps
- Architectural Alignment
- Security Notes
- Best-Practices and References (with links)
- Action Items
</action>
<action>Add a Change Log entry with date, version bump if applicable, and description: "Senior Developer Review notes appended".</action>
<action>If {{update_status_on_result}} is true: update Status to {{status_on_approve}} when approved; to {{status_on_changes_requested}} when changes requested; otherwise leave unchanged.</action>
<action>Save the story file.</action>
</step>
<step n="8" goal="Follow-up options" optional="true">
<action>If action items are straightforward and within safety bounds, ASK whether to create corresponding unchecked items under "Tasks / Subtasks" so the `dev-story` workflow can implement them next. If approved, append them under an Action Items subsection.</action>
<action>Optionally invoke tests or linters to verify quick fixes if any were applied as part of review (requires user approval for any dependency changes).</action>
</step>
<step n="9" goal="Validation and completion">
<invoke-task>Run validation checklist at {installed_path}/checklist.md using {project-root}/bmad/core/tasks/validate-workflow.xml</invoke-task>
<action>Report workflow completion.</action>
</step>
<step n="10" goal="Update status file on completion">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action>
<action>Find the most recent file (by date in filename)</action>
<check if="status file exists">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: update</param>
<param>action: set_current_workflow</param>
<param>workflow_name: review-story</param>
</invoke-workflow>
<check if="success == true">
<output>✅ Status updated: Story {{epic_num}}.{{story_num}} reviewed</output>
</check>
<output>**✅ Story Review Complete, {user_name}!** <output>**✅ Story Review Complete, {user_name}!**
**Story Details:** **Story Details:**
- Story: {{epic_num}}.{{story_num}} - Story: {{epic_num}}.{{story_num}}
- Story Key: {{story_key}}
- Review Outcome: {{outcome}} - Review Outcome: {{outcome}}
- Sprint Status: {{result_new_status}}
- Action Items: {{action_item_count}} - Action Items: {{action_item_count}}
**Status file updated:**
- Current step: review-story (Story {{epic_num}}.{{story_num}}) ✓
- Progress: {{new_progress_percentage}}%
**Next Steps:** **Next Steps:**
1. Review the Senior Developer Review notes appended to story 1. Review the Senior Developer Review notes appended to story
2. Address any action items or changes requested 2. If approved: Story is marked done, continue with next story
3. When ready, run `story-approved` to mark story complete 3. If changes requested: Address action items and re-run `dev-story`
4. If blocked: Resolve blockers before proceeding
Check status anytime with: `workflow-status`
</output> </output>
</check>
<check if="status file not found">
<output>**✅ Story Review Complete, {user_name}!**
**Story Details:**
- Story: {{epic_num}}.{{story_num}}
- Review Outcome: {{outcome}}
Note: Running in standalone mode (no status file).
**Next Steps:**
1. Review the Senior Developer Review notes
2. Address any action items
</output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -8,8 +8,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Workflow components # Workflow components

View File

@ -0,0 +1,156 @@
# Sprint Planning Workflow
## Overview
The sprint-planning workflow generates and manages the sprint status tracking file that serves as the single source of truth for Phase 4 implementation. It extracts all epics and stories from epic files and tracks their progress through the development lifecycle.
In Agile terminology, this workflow facilitates **Sprint Planning** or **Sprint 0 Kickoff** - the transition from planning/architecture into actual development execution.
## Purpose
This workflow creates a `sprint-status.yaml` file that:
- Lists all epics, stories, and retrospectives in order
- Tracks the current status of each item
- Provides a clear view of what needs to be worked on next
- Ensures only one story is in progress at a time
- Maintains the development flow from backlog to done
## When to Use
Run this workflow:
1. **Initially** - After Phase 3 (solutioning) is complete and epics are finalized
2. **After epic context creation** - To update epic status to 'contexted'
3. **Periodically** - To auto-detect newly created story files
4. **For status checks** - To see overall project progress
## Status State Machine
### Epic Flow
```
backlog → contexted
```
### Story Flow
```
backlog → drafted → ready-for-dev → in-progress → review → done
```
### Retrospective Flow
```
optional ↔ completed
```
## Key Guidelines
1. **Epic Context Recommended**: Epics should be `contexted` before their stories can be `drafted`
2. **Flexible Parallelism**: Multiple stories can be `in-progress` based on team capacity
3. **Sequential Default**: Stories within an epic are typically worked in order, but parallel work is supported
4. **Review Flow**: Stories should go through `review` before `done`
5. **Learning Transfer**: SM typically drafts next story after previous is `done`, incorporating learnings
## File Locations
### Input Files
- **Epic Files**: `{output_folder}/epic*.md` or `{output_folder}/epics.md`
- **Epic Context**: `{output_folder}/epic-{n}-context.md`
- **Story Files**: `{story_dir}/{epic}-{story}-{title}.md`
- Example: `stories/1-1-user-authentication.md`
- **Story Context**: `{story_dir}/{epic}-{story}-{title}-context.md`
- Example: `stories/1-1-user-authentication-context.md`
### Output File
- **Status File**: `{output_folder}/sprint-status.yaml`
## Usage by Agents
### SM (Scrum Master) Agent
```yaml
Tasks:
- Check sprint-status.yaml for stories in 'done' status
- Identify next 'backlog' story to draft
- Run create-story workflow
- Update status to 'drafted'
- Create story context
- Update status to 'ready-for-dev'
```
### Developer Agent
```yaml
Tasks:
- Find stories with 'ready-for-dev' status
- Update to 'in-progress' when starting
- Implement the story
- Update to 'review' when complete
- Address review feedback
- Update to 'done' after review
```
### Test Architect
```yaml
Tasks:
- Monitor stories entering 'review'
- Track epic progress
- Identify when retrospectives are needed
```
## Example Output
```yaml
# Sprint Status
# Generated: 2025-01-20
# Project: MyPlantFamily
development_status:
epic-1: contexted
1-1-project-foundation: done
1-2-app-shell: done
1-3-user-authentication: in-progress
1-4-plant-data-model: ready-for-dev
1-5-add-plant-manual: drafted
1-6-photo-identification: backlog
epic-1-retrospective: optional
epic-2: contexted
2-1-personality-system: in-progress
2-2-chat-interface: drafted
2-3-llm-integration: backlog
2-4-reminder-system: backlog
epic-2-retrospective: optional
```
## Integration with BMM Workflow
This workflow is part of Phase 4 (Implementation) and integrates with:
1. **epic-tech-context** - Creates technical context for epics
2. **create-story** - Drafts individual story files
3. **story-context** - Adds implementation context to stories
4. **dev-story** - Developer implements the story
5. **review-story** - SM reviews implementation
6. **retrospective** - Optional epic retrospective
## Benefits
- **Clear Visibility**: Everyone knows what's being worked on
- **Flexible Capacity**: Supports both sequential and parallel work patterns
- **Learning Transfer**: SM can incorporate learnings when drafting next story
- **Progress Tracking**: Easy to see overall project status
- **Automation Friendly**: Simple YAML format for agent updates
## Tips
1. **Initial Generation**: Run immediately after epics are finalized
2. **Regular Updates**: Agents should update status as they work
3. **Manual Override**: You can manually edit the file if needed
4. **Backup First**: The workflow backs up existing status before regenerating
5. **Validation**: The workflow validates legal status transitions

View File

@ -0,0 +1,33 @@
# Sprint Planning Validation Checklist
## Core Validation
### Complete Coverage Check
- [ ] Every epic found in epic\*.md files appears in sprint-status.yaml
- [ ] Every story found in epic\*.md files appears in sprint-status.yaml
- [ ] Every epic has a corresponding retrospective entry
- [ ] No items in sprint-status.yaml that don't exist in epic files
### Parsing Verification
Compare epic files against generated sprint-status.yaml:
```
Epic Files Contains: Sprint Status Contains:
✓ Epic 1 ✓ epic-1: [status]
✓ Story 1.1: User Auth ✓ 1-1-user-auth: [status]
✓ Story 1.2: Account Mgmt ✓ 1-2-account-mgmt: [status]
✓ Story 1.3: Plant Naming ✓ 1-3-plant-naming: [status]
✓ epic-1-retrospective: [status]
✓ Epic 2 ✓ epic-2: [status]
✓ Story 2.1: Personality Model ✓ 2-1-personality-model: [status]
✓ Story 2.2: Chat Interface ✓ 2-2-chat-interface: [status]
✓ epic-2-retrospective: [status]
```
### Final Check
- [ ] Total count of epics matches
- [ ] Total count of stories matches
- [ ] All items are in the expected order (epic, stories, retrospective)

View File

@ -0,0 +1,221 @@
# Sprint Planning - Sprint Status Generator
<critical>The workflow execution engine is governed by: {project-root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {project-root}/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml</critical>
<workflow>
<step n="1" goal="Parse epic files and extract all work items">
<action>Communicate in {communication_language} with {user_name}</action>
<action>Look for all files matching `{epics_pattern}` in {epics_location}</action>
<action>Could be a single `epics.md` file or multiple `epic-1.md`, `epic-2.md` files</action>
<action>For each epic file found, extract:</action>
- Epic numbers from headers like `## Epic 1:` or `## Epic 2:`
- Story IDs and titles from patterns like `### Story 1.1: User Authentication`
- Convert story format from `Epic.Story: Title` to kebab-case key: `epic-story-title`
**Story ID Conversion Rules:**
- Original: `### Story 1.1: User Authentication`
- Replace period with dash: `1-1`
- Convert title to kebab-case: `user-authentication`
- Final key: `1-1-user-authentication`
<action>Build complete inventory of all epics and stories from all epic files</action>
</step>
<step n="2" goal="Build sprint status structure">
<action>For each epic found, create entries in this order:</action>
1. **Epic entry** - Key: `epic-{num}`, Default status: `backlog`
2. **Story entries** - Key: `{epic}-{story}-{title}`, Default status: `backlog`
3. **Retrospective entry** - Key: `epic-{num}-retrospective`, Default status: `optional`
**Example structure:**
```yaml
development_status:
epic-1: backlog
1-1-user-authentication: backlog
1-2-account-management: backlog
epic-1-retrospective: optional
```
</step>
<step n="3" goal="Apply intelligent status detection">
<action>For each epic, check if tech context file exists:</action>
- Check: `{output_folder}/epic-{num}-context.md`
- If exists → set epic status to `contexted`
- Else → keep as `backlog`
<action>For each story, detect current status by checking files:</action>
**Story file detection:**
- Check: `{story_location_absolute}/{story-key}.md` (e.g., `stories/1-1-user-authentication.md`)
- If exists → upgrade status to at least `drafted`
**Story context detection:**
- Check: `{story_location_absolute}/{story-key}-context.md` (e.g., `stories/1-1-user-authentication-context.md`)
- If exists → upgrade status to at least `ready-for-dev`
**Preservation rule:**
- If existing `{status_file}` exists and has more advanced status, preserve it
- Never downgrade status (e.g., don't change `done` to `drafted`)
**Status Flow Reference:**
- Epic: `backlog``contexted`
- Story: `backlog``drafted``ready-for-dev``in-progress``review``done`
- Retrospective: `optional``completed`
</step>
<step n="4" goal="Generate sprint status file">
<action>Create or update {status_file} with:</action>
**File Structure:**
```yaml
# generated: {date}
# project: {project_name}
# project_key: {project_key}
# tracking_system: {tracking_system}
# story_location: {story_location}
# STATUS DEFINITIONS:
# ==================
# Epic Status:
# - backlog: Epic exists in epic file but not contexted
# - contexted: Epic tech context created (required before drafting stories)
#
# Story Status:
# - backlog: Story only exists in epic file
# - drafted: Story file created in stories folder
# - ready-for-dev: Draft approved and story context created
# - in-progress: Developer actively working on implementation
# - review: Under SM review (via review-story workflow)
# - done: Story completed
#
# Retrospective Status:
# - optional: Can be completed but not required
# - completed: Retrospective has been done
#
# WORKFLOW NOTES:
# ===============
# - Epics should be 'contexted' before stories can be 'drafted'
# - Stories can be worked in parallel if team capacity allows
# - SM typically drafts next story after previous one is 'done' to incorporate learnings
# - Dev moves story to 'review', SM reviews, then Dev moves to 'done'
generated: { date }
project: { project_name }
project_key: { project_key }
tracking_system: { tracking_system }
story_location: { story_location }
development_status:
# All epics, stories, and retrospectives in order
```
<action>Write the complete sprint status YAML to {status_file}</action>
<action>CRITICAL: For story_location field, write the variable value EXACTLY as defined in workflow.yaml: "{project-root}/docs/stories"</action>
<action>CRITICAL: Do NOT resolve {project-root} to an absolute path - keep it as the literal string "{project-root}/docs/stories"</action>
<action>CRITICAL: Metadata appears TWICE - once as comments (#) for documentation, once as YAML key:value fields for parsing</action>
<action>Ensure all items are ordered: epic, its stories, its retrospective, next epic...</action>
</step>
<step n="5" goal="Validate and report">
<action>Perform validation checks:</action>
- [ ] Every epic in epic files appears in sprint-status.yaml
- [ ] Every story in epic files appears in sprint-status.yaml
- [ ] Every epic has a corresponding retrospective entry
- [ ] No items in sprint-status.yaml that don't exist in epic files
- [ ] All status values are legal (match state machine definitions)
- [ ] File is valid YAML syntax
<action>Count totals:</action>
- Total epics: {{epic_count}}
- Total stories: {{story_count}}
- Epics contexted: {{contexted_count}}
- Stories in progress: {{in_progress_count}}
- Stories done: {{done_count}}
<action>Display completion summary to {user_name} in {communication_language}:</action>
**Sprint Status Generated Successfully**
- **File Location:** {status_file}
- **Total Epics:** {{epic_count}}
- **Total Stories:** {{story_count}}
- **Contexted Epics:** {{contexted_count}}
- **Stories In Progress:** {{in_progress_count}}
- **Stories Completed:** {{done_count}}
**Next Steps:**
1. Review the generated sprint-status.yaml
2. Use this file to track development progress
3. Agents will update statuses as they work
4. Re-run this workflow to refresh auto-detected statuses
</step>
</workflow>
## Additional Documentation
### Status State Machine
**Epic Status Flow:**
```
backlog → contexted
```
- **backlog**: Epic exists in epic file but tech context not created
- **contexted**: Epic tech context has been generated (prerequisite for story drafting)
**Story Status Flow:**
```
backlog → drafted → ready-for-dev → in-progress → review → done
```
- **backlog**: Story only exists in epic file
- **drafted**: Story file created (e.g., `stories/1-3-plant-naming.md`)
- **ready-for-dev**: Draft approved + story context created
- **in-progress**: Developer actively working
- **review**: Under SM review (via review-story workflow)
- **done**: Completed
**Retrospective Status:**
```
optional ↔ completed
```
- **optional**: Can be done but not required
- **completed**: Retrospective has been completed
### Guidelines
1. **Epic Context Recommended**: Epics should be `contexted` before stories can be `drafted`
2. **Sequential Default**: Stories are typically worked in order, but parallel work is supported
3. **Parallel Work Supported**: Multiple stories can be `in-progress` if team capacity allows
4. **Review Before Done**: Stories should pass through `review` before `done`
5. **Learning Transfer**: SM typically drafts next story after previous one is `done` to incorporate learnings
### Error Handling
- If epic file can't be parsed, report specific file and continue with others
- If existing status file is malformed, backup and regenerate
- Log warnings for duplicate story IDs across epics
- Validate status transitions are legal (can't go from `backlog` to `done`)

View File

@ -0,0 +1,56 @@
# Sprint Status Template
# This is an EXAMPLE showing the expected format
# The actual file will be generated with all epics/stories from your epic files
# generated: {date}
# project: {project_name}
# project_key: {project_key}
# tracking_system: {tracking_system}
# story_location: {story_location}
# STATUS DEFINITIONS:
# ==================
# Epic Status:
# - backlog: Epic exists in epic file but not contexted
# - contexted: Epic tech context created (required before drafting stories)
#
# Story Status:
# - backlog: Story only exists in epic file
# - drafted: Story file created in stories folder
# - ready-for-dev: Draft approved and story context created
# - in-progress: Developer actively working on implementation
# - review: Under SM review (via review-story workflow)
# - done: Story completed
#
# Retrospective Status:
# - optional: Can be completed but not required
# - completed: Retrospective has been done
#
# WORKFLOW NOTES:
# ===============
# - Epics should be 'contexted' before stories can be 'drafted'
# - Stories can be worked in parallel if team capacity allows
# - SM typically drafts next story after previous one is 'done' to incorporate learnings
# - Dev moves story to 'review', SM reviews, then Dev moves to 'done'
# EXAMPLE STRUCTURE (your actual epics/stories will replace these):
generated: 05-06-2-2025 21:30
project: My Awesome Project
project_key: jira-1234
tracking_system: file-system
story_location: "{project-root}/docs/stories"
development_status:
epic-1: contexted
1-1-user-authentication: done
1-2-account-management: drafted
1-3-plant-data-model: backlog
1-4-add-plant-manual: backlog
epic-1-retrospective: optional
epic-2: backlog
2-1-personality-system: backlog
2-2-chat-interface: backlog
2-3-llm-integration: backlog
epic-2-retrospective: optional

View File

@ -0,0 +1,39 @@
name: sprint-planning
description: "Generate and manage the sprint status tracking file for Phase 4 implementation, extracting all epics and stories from epic files and tracking their status through the development lifecycle"
author: "BMad"
# Critical variables from config
config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language"
date: system-generated
# Workflow components
installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/sprint-planning"
instructions: "{installed_path}/instructions.md"
template: "{installed_path}/sprint-status-template.yaml"
validation: "{installed_path}/checklist.md"
# Variables and inputs
variables:
# Project identification
project_name: "{config_source}:project_name"
project_key: "{config_source}:project_name" # Future: Jira project key, Linear workspace ID, etc.
# Tracking system configuration
tracking_system: "file-system" # Options: file-system, Future will support other options from config of mcp such as jira, linear, trello
story_location: "{project-root}/docs/stories" # Relative path for file-system, Future will support URL for Jira/Linear/Trello
story_location_absolute: "{config_source}:dev_story_location" # Absolute path for file operations
# Source files (file-system only)
epics_location: "{output_folder}" # Directory containing epic*.md files
epics_pattern: "epic*.md" # Pattern to find epic files
# Output configuration
status_file: "{output_folder}/sprint-status.yaml"
# Output configuration
default_output_file: "{status_file}"
web_bundle: false

View File

@ -1,161 +0,0 @@
# Story Approved Workflow Instructions (DEV Agent)
<critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
<critical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}</critical>
<critical>Generate all documents in {document_output_language}</critical>
<workflow>
<critical>This workflow is run by DEV agent AFTER user confirms a story is approved (Definition of Done is complete)</critical>
<critical>NO SEARCHING - DEV agent reads status file IN PROGRESS section to know which story was being worked on</critical>
<critical>Workflow: Update story file status, move story IN PROGRESS → DONE, move TODO → IN PROGRESS, move BACKLOG → TODO</critical>
<step n="1" goal="Get story queue from status file">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: data</param>
<param>data_request: all</param>
</invoke-workflow>
<check if="status_exists == false OR in_progress_story == ''">
<output>❌ No status file or no IN PROGRESS story found.
This workflow requires an active status file with an IN PROGRESS story.
Run `workflow-status` to check your project state.</output>
<action>Exit workflow</action>
</check>
<action>Use extracted story queue:</action>
- {{in_progress_story}}: Current story to mark done
- {{todo_story_id}}: Next story (move to IN PROGRESS)
- {{stories_sequence}}: All stories
- {{stories_done}}: Completed stories
- {{status_file_path}}: Status file to update
</step>
<step n="2" goal="Update the current story file status to Done">
<action>Read the story file: {story_dir}/{current_story_file}</action>
<action>Find the "Status:" line (usually at the top)</action>
<action>Update story file:</action>
- Change: `Status: Ready` or `Status: In Review`
- To: `Status: Done`
<action>Add completion notes if Dev Agent Record section exists:</action>
Find "## Dev Agent Record" section and add:
```
### Completion Notes
**Completed:** {{date}}
**Definition of Done:** All acceptance criteria met, code reviewed, tests passing, deployed
```
<action>Save the story file</action>
</step>
<step n="3" goal="Update status file - advance story queue">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: update</param>
<param>action: complete_story</param>
</invoke-workflow>
<check if="success == false">
<output>⚠️ Failed to update status: {{error}}</output>
<output>Story file was updated, but status file update failed.</output>
</check>
<check if="success == true">
<output>Status updated: Story {{completed_story}} marked done.</output>
<check if="all_complete == true">
<output>🎉 All stories complete! Phase 4 done!</output>
</check>
<check if="all_complete == false">
<output>{{stories_remaining}} stories remaining.</output>
</check>
</check>
</step>
<step n="4" goal="Confirm completion to user">
<action>Display summary</action>
**Story Approved and Marked Done, {user_name}!**
✅ Story file updated: `{{current_story_file}}` → Status: Done
✅ Status file updated: Story moved IN PROGRESS → DONE
{{#if todo_story}}✅ Next story moved: TODO → IN PROGRESS ({{todo_story_id}}: {{todo_story_title}}){{/if}}
{{#if next_backlog_story}}✅ Next story moved: BACKLOG → TODO ({{next_backlog_story_id}}: {{next_backlog_story_title}}){{/if}}
**Completed Story:**
- **ID:** {{current_story_id}}
- **Title:** {{current_story_title}}
- **File:** `{{current_story_file}}`
- **Points:** {{current_story_points}}
- **Completed:** {{date}}
**Progress Summary:**
- **Stories Completed:** {{done_count}} / {{total_stories}}
- **Points Completed:** {{done_points}} / {{total_points}}
- **Progress:** {{progress_percentage}}%
{{#if all_stories_complete}}
**🎉 ALL STORIES COMPLETE!**
Congratulations! You have completed all stories for this project.
**Next Steps:**
1. Run `retrospective` workflow with SM agent to review the project
2. Close out the project
3. Celebrate! 🎊
{{/if}}
{{#if todo_story}}
**Next Story (IN PROGRESS):**
- **ID:** {{todo_story_id}}
- **Title:** {{todo_story_title}}
- **File:** `{{todo_story_file}}`
- **Status:** {{todo_story_status}}
**Next Steps:**
{{#if todo_story_status == 'Draft'}}
1. Review the drafted story {{todo_story_file}}
2. Load SM agent and run `story-ready` workflow to approve it
3. Then return to DEV agent to implement
{{else}}
4. Stay with DEV agent and run `dev-story` workflow
5. Implement story {{todo_story_id}}
{{/if}}
{{/if}}
{{#if backlog_not_empty AND todo_empty}}
**Next Story (TODO):**
- **ID:** {{next_backlog_story_id}}
- **Title:** {{next_backlog_story_title}}
**Next Steps:**
1. Load SM agent
2. Run `create-story` workflow to draft story {{next_backlog_story_id}}
{{/if}}
</step>
</workflow>
```

View File

@ -11,25 +11,7 @@
<critical>DOCUMENT OUTPUT: Technical XML context file. Concise, structured, project-relative paths only. User skill level ({user_skill_level}) affects conversation style ONLY, not context content.</critical> <critical>DOCUMENT OUTPUT: Technical XML context file. Concise, structured, project-relative paths only. User skill level ({user_skill_level}) affects conversation style ONLY, not context content.</critical>
<workflow> <workflow>
<step n="1" goal="Validate workflow sequence"> <step n="1" goal="Locate story and initialize output">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: validate</param>
<param>calling_workflow: story-context</param>
</invoke-workflow>
<check if="warning != ''">
<output>{{warning}}</output>
<ask>Continue with story-context anyway? (y/n)</ask>
<check if="n">
<output>{{suggestion}}</output>
<action>Exit workflow</action>
</check>
</check>
<action>Store {{status_file_path}} for later updates</action>
</step>
<step n="2" goal="Locate story and initialize output">
<action>If {{story_path}} provided and valid → use it; else auto-discover from {{story_dir}}.</action> <action>If {{story_path}} provided and valid → use it; else auto-discover from {{story_dir}}.</action>
<action>Auto-discovery: read {{story_dir}} (dev_story_location). If invalid/missing or contains no .md files, ASK for a story file path or directory to scan.</action> <action>Auto-discovery: read {{story_dir}} (dev_story_location). If invalid/missing or contains no .md files, ASK for a story file path or directory to scan.</action>
<action>If a directory is provided, list markdown files named "story-*.md" recursively; sort by last modified time; display top {{story_selection_limit}} with index, filename, path, modified time.</action> <action>If a directory is provided, list markdown files named "story-*.md" recursively; sort by last modified time; display top {{story_selection_limit}} with index, filename, path, modified time.</action>
@ -45,7 +27,7 @@
<template-output file="{default_output_file}">so_that</template-output> <template-output file="{default_output_file}">so_that</template-output>
</step> </step>
<step n="3" goal="Collect relevant documentation"> <step n="2" goal="Collect relevant documentation">
<action>Scan docs and src module docs for items relevant to this story's domain: search keywords from story title, ACs, and tasks.</action> <action>Scan docs and src module docs for items relevant to this story's domain: search keywords from story title, ACs, and tasks.</action>
<action>Prefer authoritative sources: PRD, Architecture, Front-end Spec, Testing standards, module-specific docs.</action> <action>Prefer authoritative sources: PRD, Architecture, Front-end Spec, Testing standards, module-specific docs.</action>
<action>For each discovered document: convert absolute paths to project-relative format by removing {project-root} prefix. Store only relative paths (e.g., "docs/prd.md" not "/Users/.../docs/prd.md").</action> <action>For each discovered document: convert absolute paths to project-relative format by removing {project-root} prefix. Store only relative paths (e.g., "docs/prd.md" not "/Users/.../docs/prd.md").</action>
@ -58,7 +40,7 @@
</template-output> </template-output>
</step> </step>
<step n="4" goal="Analyze existing code, interfaces, and constraints"> <step n="3" goal="Analyze existing code, interfaces, and constraints">
<action>Search source tree for modules, files, and symbols matching story intent and AC keywords (controllers, services, components, tests).</action> <action>Search source tree for modules, files, and symbols matching story intent and AC keywords (controllers, services, components, tests).</action>
<action>Identify existing interfaces/APIs the story should reuse rather than recreate.</action> <action>Identify existing interfaces/APIs the story should reuse rather than recreate.</action>
<action>Extract development constraints from Dev Notes and architecture (patterns, layers, testing requirements).</action> <action>Extract development constraints from Dev Notes and architecture (patterns, layers, testing requirements).</action>
@ -83,7 +65,7 @@
</template-output> </template-output>
</step> </step>
<step n="5" goal="Gather dependencies and frameworks"> <step n="4" goal="Gather dependencies and frameworks">
<action>Detect dependency manifests and frameworks in the repo: <action>Detect dependency manifests and frameworks in the repo:
- Node: package.json (dependencies/devDependencies) - Node: package.json (dependencies/devDependencies)
- Python: pyproject.toml/requirements.txt - Python: pyproject.toml/requirements.txt
@ -95,7 +77,7 @@
</template-output> </template-output>
</step> </step>
<step n="6" goal="Testing standards and ideas"> <step n="5" goal="Testing standards and ideas">
<action>From Dev Notes, architecture docs, testing docs, and existing tests, extract testing standards (frameworks, patterns, locations).</action> <action>From Dev Notes, architecture docs, testing docs, and existing tests, extract testing standards (frameworks, patterns, locations).</action>
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
Populate tests.standards with a concise paragraph Populate tests.standards with a concise paragraph
@ -104,32 +86,15 @@
</template-output> </template-output>
</step> </step>
<step n="7" goal="Validate and save"> <step n="6" goal="Validate and save">
<action>Validate output XML structure and content.</action> <action>Validate output XML structure and content.</action>
<invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task> <invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task>
</step> </step>
<step n="8" goal="Update story status and context reference"> <step n="7" goal="Update story status and context reference">
<action>Open {{story_path}}; if Status == 'Draft' then set to 'ContextReadyDraft'; otherwise leave unchanged.</action> <action>Open {{story_path}}; if Status == 'Draft' then set to 'ContextReadyDraft'; otherwise leave unchanged.</action>
<action>Under 'Dev Agent Record' → 'Context Reference' (create if missing), add or update a list item for {default_output_file}.</action> <action>Under 'Dev Agent Record' → 'Context Reference' (create if missing), add or update a list item for {default_output_file}.</action>
<action>Save the story file.</action> <action>Save the story file.</action>
</step>
<step n="9" goal="Update status file on completion">
<action>Search {output_folder}/ for files matching pattern: bmm-workflow-status.md</action>
<action>Find the most recent file (by date in filename)</action>
<check if="status file exists">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status">
<param>mode: update</param>
<param>action: set_current_workflow</param>
<param>workflow_name: story-context</param>
</invoke-workflow>
<check if="success == true">
<output>✅ Status updated: Context generated for Story {{story_id}}</output>
</check>
<output>**✅ Story Context Generated Successfully, {user_name}!** <output>**✅ Story Context Generated Successfully, {user_name}!**
**Story Details:** **Story Details:**
@ -137,35 +102,11 @@
- Title: {{story_title}} - Title: {{story_title}}
- Context File: {{default_output_file}} - Context File: {{default_output_file}}
**Status file updated:**
- Current step: story-context (Story {{story_id}}) ✓
- Progress: {{new_progress_percentage}}%
**Next Steps:** **Next Steps:**
1. Load DEV agent (bmad/bmm/agents/dev.md) 1. Load DEV agent (bmad/bmm/agents/dev.md)
2. Run `dev-story` workflow to implement the story 2. Run `dev-story` workflow to implement the story
3. The context file will provide comprehensive implementation guidance 3. The context file will provide comprehensive implementation guidance
Check status anytime with: `workflow-status`
</output> </output>
</check>
<check if="status file not found">
<output>**✅ Story Context Generated Successfully, {user_name}!**
**Story Details:**
- Story ID: {{story_id}}
- Title: {{story_title}}
- Context File: {{default_output_file}}
Note: Running in standalone mode (no status file).
To track progress across workflows, run `workflow-status` first.
**Next Steps:**
1. Load DEV agent and run `dev-story` to implement
</output>
</check>
</step> </step>
</workflow> </workflow>

View File

@ -8,8 +8,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Workflow components # Workflow components
@ -21,7 +19,6 @@ validation: "{installed_path}/checklist.md"
# Variables and inputs # Variables and inputs
variables: variables:
story_path: "" # Explicit story path; auto-discovered if empty story_path: "" # Explicit story path; auto-discovered if empty
auto_update_status: false
story_dir: "{config_source}:dev_story_location" story_dir: "{config_source}:dev_story_location"
story_selection_limit: 10 story_selection_limit: 10
tech_spec_search_dir: "{project-root}/docs" tech_spec_search_dir: "{project-root}/docs"

View File

@ -0,0 +1,117 @@
# Story Approved Workflow Instructions (DEV Agent)
<critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
<critical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}</critical>
<critical>Generate all documents in {document_output_language}</critical>
<workflow>
<critical>This workflow is run by DEV agent AFTER user confirms a story is approved (Definition of Done is complete)</critical>
<critical>Workflow: Update story file status to Done</critical>
<step n="1" goal="Find reviewed story and mark done">
<action>If {{story_path}} is provided → use it directly; extract story_key from filename or metadata; GOTO mark_done</action>
<action>Otherwise query sprint-status for reviewed stories:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: list_stories</param>
<param>filter_status: review</param>
<param>limit: 10</param>
</invoke-workflow>
<check if="{{result_count}} == 0">
<output>📋 No stories in review status found
All stories are either still in development or already done.
**Options:**
1. Run `dev-story` to implement stories
2. Run `review-story` if stories need review first
3. Check sprint-status.yaml for current story states
</output>
<action>HALT</action>
</check>
<action>Display available reviewed stories:
**Stories Ready to Mark Done ({{result_count}} found):**
{{result_story_list}}
</action>
<ask>Select the story to mark as Done (enter story key or number):</ask>
<action>Resolve selected story_key from user input</action>
<action>Find matching story file in {{story_dir}} using story_key pattern</action>
<anchor id="mark_done" />
<action>Read the story file from resolved path</action>
<action>Extract story_id and story_title from the file</action>
<action>Find the "Status:" line (usually at the top)</action>
<action>Update story file: Change Status to "Done"</action>
<action>Add completion notes to Dev Agent Record section:</action>
<action>Find "## Dev Agent Record" section and add:
```
### Completion Notes
**Completed:** {{date}}
**Definition of Done:** All acceptance criteria met, code reviewed, tests passing
```
</action>
<action>Save the story file</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{story_key}}</param>
<param>new_status: done</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Story file updated, but could not update sprint-status: {{result_error}}
Story is marked Done in file, but sprint-status.yaml may be out of sync.
</output>
</check>
</step>
<step n="2" goal="Confirm completion to user">
<output>**Story Approved and Marked Done, {user_name}!**
✅ Story file updated: `{{story_file}}` → Status: Done
✅ Sprint status updated: {{result_old_status}} → {{result_new_status}}
**Completed Story:**
- **ID:** {{story_id}}
- **Key:** {{story_key}}
- **Title:** {{story_title}}
- **File:** `{{story_file}}`
- **Completed:** {{date}}
**Next Steps:**
1. Continue with next story in your backlog
- Run `create-story` for next backlog story
- Or run `dev-story` if ready stories exist
2. Check epic completion status
- Run `retrospective` workflow to check if epic is complete
- Epic retrospective will verify all stories are done
</output>
</step>
</workflow>
```

View File

@ -1,5 +1,5 @@
# Story Approved Workflow (DEV Agent) # Story Done Workflow (DEV Agent)
name: story-approved name: story-done
description: "Marks a story as done (DoD complete) and moves it from IN PROGRESS → DONE in the status file. Advances the story queue. Simple status-update workflow with no searching required." description: "Marks a story as done (DoD complete) and moves it from IN PROGRESS → DONE in the status file. Advances the story queue. Simple status-update workflow with no searching required."
author: "BMad" author: "BMad"
@ -8,19 +8,16 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Workflow components # Workflow components
installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/story-approved" installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/story-done"
instructions: "{installed_path}/instructions.md" instructions: "{installed_path}/instructions.md"
# Variables and inputs # Variables and inputs
variables: variables:
story_path: "" # Explicit path to story file
story_dir: "{config_source}:dev_story_location" # Directory where stories are stored story_dir: "{config_source}:dev_story_location" # Directory where stories are stored
status_file: "{output_folder}/bmm-workflow-status.md" # Status file to update
auto_update_status: true # Always update status file
# Output configuration - no output file, just status updates # Output configuration - no output file, just status updates
default_output_file: "" default_output_file: ""

View File

@ -8,86 +8,85 @@
<workflow> <workflow>
<critical>This workflow is run by SM agent AFTER user reviews a drafted story and confirms it's ready for development</critical> <critical>This workflow is run by SM agent AFTER user reviews a drafted story and confirms it's ready for development</critical>
<critical>NO SEARCHING - SM agent reads status file TODO section to know which story was drafted</critical> <critical>Simple workflow: Update story file status to Ready</critical>
<critical>Simple workflow: Update story file status, move story TODO → IN PROGRESS, move next story BACKLOG → TODO</critical>
<step n="1" goal="Get TODO story from status file"> <step n="1" goal="Find drafted story and mark as ready">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status"> <action>If {{story_path}} is provided → use it directly; extract story_key from filename or metadata; GOTO mark_ready</action>
<param>mode: data</param>
<param>data_request: next_story</param> <action>Otherwise query sprint-status for drafted stories:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: list_stories</param>
<param>filter_status: drafted</param>
<param>limit: 10</param>
</invoke-workflow> </invoke-workflow>
<check if="status_exists == false OR todo_story_id == ''"> <check if="{{result_count}} == 0">
<output>❌ No status file or no TODO story found. <output>📋 No drafted stories found in sprint-status.yaml
This workflow requires an active status file with a TODO story. All stories are either still in backlog or already marked ready/in-progress/done.
Run `workflow-status` to check your project state.</output> **Options:**
<action>Exit workflow</action>
</check>
<action>Use extracted story information:</action> 1. Run `create-story` to draft more stories
2. Run `sprint-planning` to refresh story tracking
</output>
<action>HALT</action>
</check>
- {{todo_story_id}}: Story to mark ready <action>Display available drafted stories:
- {{todo_story_title}}: Story title
- {{todo_story_file}}: Story file path
- {{status_file_path}}: Status file to update
</step> **Drafted Stories Available ({{result_count}} found):**
<step n="2" goal="Update the story file status"> {{result_story_list}}
<action>Read the story file: {story_dir}/{todo_story_file}</action> </action>
<ask if="{{non_interactive}} == false">Select the drafted story to mark as Ready (enter story key or number):</ask>
<action if="{{non_interactive}} == true">Auto-select first story from result_stories</action>
<action>Resolve selected story_key from user input or auto-selection</action>
<action>Find matching story file in {{story_dir}} using story_key pattern</action>
<anchor id="mark_ready" />
<action>Read the story file from resolved path</action>
<action>Extract story_id and story_title from the file</action>
<action>Find the "Status:" line (usually at the top)</action> <action>Find the "Status:" line (usually at the top)</action>
<action>Update story file: Change Status to "Ready"</action>
<action>Update story file:</action>
- Change: `Status: Draft`
- To: `Status: Ready`
<action>Save the story file</action> <action>Save the story file</action>
</step> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<step n="3" goal="Update status file - move story TODO → IN PROGRESS"> <param>story_key: {{story_key}}</param>
<param>new_status: ready-for-dev</param>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/workflow-status"> <param>validate: true</param>
<param>mode: update</param>
<param>action: start_story</param>
</invoke-workflow> </invoke-workflow>
<check if="success == false"> <check if="{{result_success}} == false">
<output>⚠️ Failed to update status: {{error}}</output> <output>⚠️ Story file updated, but could not update sprint-status: {{result_error}}
<output>Story file was updated, but status file update failed.</output>
</check>
<check if="success == true"> You may need to run sprint-planning to refresh tracking.
<output>Status updated: Story {{in_progress_story}} ready for development.</output> </output>
<check if="next_todo != ''">
<output>Next TODO: {{next_todo}}</output>
</check>
</check> </check>
</step> </step>
<step n="4" goal="Confirm completion to user"> <step n="2" goal="Confirm completion to user">
<action>Display summary</action> <output>**Story Marked Ready for Development, {user_name}!**
**Story Marked Ready for Development, {user_name}!** ✅ Story file updated: `{{story_file}}` → Status: Ready
✅ Sprint status updated: {{result_old_status}} → {{result_new_status}}
✅ Story file updated: `{{todo_story_file}}` → Status: Ready **Story Details:**
✅ Status file updated: Story moved TODO → IN PROGRESS
{{#if next_story}}✅ Next story moved: BACKLOG → TODO ({{next_story_id}}: {{next_story_title}}){{/if}}
{{#if no_more_stories}}✅ All stories have been drafted - backlog is empty{{/if}}
**Current Story (IN PROGRESS):** - **ID:** {{story_id}}
- **Key:** {{story_key}}
- **ID:** {{todo_story_id}} - **Title:** {{story_title}}
- **Title:** {{todo_story_title}} - **File:** `{{story_file}}`
- **File:** `{{todo_story_file}}`
- **Status:** Ready for development - **Status:** Ready for development
**Next Steps:** **Next Steps:**

View File

@ -8,8 +8,6 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
# Workflow components # Workflow components
@ -18,9 +16,8 @@ instructions: "{installed_path}/instructions.md"
# Variables and inputs # Variables and inputs
variables: variables:
story_path: "" # Explicit path to story file
story_dir: "{config_source}:dev_story_location" # Directory where stories are stored story_dir: "{config_source}:dev_story_location" # Directory where stories are stored
status_file: "{output_folder}/bmm-workflow-status.md" # Status file to update
auto_update_status: true # Always update status file
# Output configuration - no output file, just status updates # Output configuration - no output file, just status updates
default_output_file: "" default_output_file: ""

View File

@ -0,0 +1,93 @@
# generated: 2025-10-21
# project: todo1
# project_key: todo1
# tracking_system: file-system
# story_location: {project-root}/docs/stories
# STATUS DEFINITIONS:
# ==================
# Epic Status:
# - backlog: Epic exists in epic file but not contexted
# - contexted: Epic tech context created (required before drafting stories)
#
# Story Status:
# - backlog: Story only exists in epic file
# - drafted: Story file created in stories folder
# - ready-for-dev: Draft approved and story context created
# - in-progress: Developer actively working on implementation
# - review: Under SM review (via review-story workflow)
# - done: Story completed
#
# Retrospective Status:
# - optional: Can be completed but not required
# - completed: Retrospective has been done
#
# WORKFLOW NOTES:
# ===============
# - Epics should be 'contexted' before stories can be 'drafted'
# - Stories can be worked in parallel if team capacity allows
# - SM typically drafts next story after previous one is 'done' to incorporate learnings
# - Dev moves story to 'review', SM reviews, then Dev moves to 'done'
generated: 2025-10-21
project: todo1
project_key: todo1
tracking_system: file-system
story_location: "{project-root}/docs/stories"
development_status:
epic-1: backlog
1-1-project-foundation-development-environment: backlog
1-2-app-shell-navigation-framework: backlog
1-3-user-authentication-account-management: backlog
1-4-plant-data-model-species-database: backlog
1-5-add-plant-manual-species-selection: backlog
1-6-plant-photo-identification-integration: backlog
1-7-plant-naming-profile-creation: backlog
1-8-plant-collection-home-screen: backlog
1-9-plant-detail-view: backlog
1-10-cloud-photo-storage-display: backlog
epic-1-retrospective: optional
epic-2: backlog
2-1-personality-system-data-model: backlog
2-2-personality-prototype-testing: backlog
2-3-llm-integration-api-setup: backlog
2-4-chat-interface-ui: backlog
2-5-conversational-ai-system: backlog
2-6-graceful-degradation-library: backlog
2-7-response-caching-cost-optimization: backlog
2-8-personality-driven-care-reminders: backlog
2-9-push-notification-system: backlog
2-10-reminder-intelligence-adaptation: backlog
2-11-mood-system-visual-indicators: backlog
2-12-mood-calculation-logic-time-based: backlog
2-13-personality-introduction-onboarding: backlog
2-14-personality-tone-testing-calibration: backlog
2-15-emergency-tone-adjustment-system: backlog
2-16-api-reliability-monitoring-alerts: backlog
epic-2-retrospective: optional
epic-3: backlog
3-1-care-schedule-data-model: backlog
3-2-auto-generated-care-schedules: backlog
3-3-manual-care-logging: backlog
3-4-care-history-view: backlog
3-5-customizable-care-schedules: backlog
3-6-photo-timeline-tracking: backlog
3-7-health-status-visualization: backlog
3-8-enhanced-mood-calculation-care-data: backlog
epic-3-retrospective: optional
epic-4: backlog
4-1-shareable-content-card-design-system: backlog
4-2-share-plant-profile: backlog
4-3-share-conversation-snippets: backlog
4-4-share-growth-progress: backlog
4-5-share-care-achievements: backlog
4-6-freemium-tier-definition-enforcement: backlog
4-7-premium-upgrade-flow-paywall: backlog
4-8-payment-processing-subscription-management: backlog
4-9-premium-analytics-dashboard: backlog
4-10-trial-conversion-optimization: backlog
epic-4-retrospective: optional

View File

@ -0,0 +1,65 @@
# BMM Workflow Status
## Project Configuration
PROJECT_NAME: todo1
PROJECT_TYPE: software
PROJECT_LEVEL: 3
FIELD_TYPE: greenfield
START_DATE: 2025-10-18
WORKFLOW_PATH: greenfield-level-3.yaml
## Current State
CURRENT_PHASE: 4-implementation
CURRENT_WORKFLOW: tech-spec
CURRENT_AGENT: architect
PHASE_1_COMPLETE: true
PHASE_2_COMPLETE: true
PHASE_3_COMPLETE: true
PHASE_4_COMPLETE: false
## Next Action
NEXT_ACTION: Create technical specification for Epic 1 (Foundation & Core Plant Management)
NEXT_COMMAND: /bmad:bmm:agents:architect then run \*tech-spec for Epic 1
NEXT_AGENT: architect
## Story Backlog
**Epic 1:** 10 stories - Foundation & Core Plant Management
**Epic 2:** 16 stories - AI Personality System & Engagement Loop
**Epic 3:** 8 stories - Care Scheduling, Photos & Growth Tracking
**Epic 4:** 10 stories - Social Sharing & Premium Monetization
**Total: 44 stories** (see epics.md for detailed breakdown)
## Workflow Progress
**Phase 1 - Analysis:**
- ✅ Brainstorm Project (2025-10-18)
- ⬜ Research (optional - skipped)
- ✅ Product Brief (2025-10-18)
**Phase 2 - Planning:**
- ✅ PRD (2025-10-19) - 44 stories across 4 epics defined
- ✅ UX Spec (2025-10-19) - Comprehensive design system, user flows, components
**Phase 3 - Architecture (Required for Level 3):**
- ✅ Architecture (2025-10-19)
- ✅ Assess Project Ready (2025-10-19)
**Phase 4 - Implementation:**
- 🎯 Tech Spec for Epic 1 (next up)
- Per Epic: Tech Spec (JIT) → Stories
- Per Story: Create → Context → Validate → Ready → Develop → Review → Approved
- Epic Retrospectives after each epic
---
_Last Updated: 2025-10-19 (Phase 3 Complete - Starting Implementation Phase)_
_Status Version: 6.0_

View File

@ -174,7 +174,7 @@ workflow-status determines routing:
└─→ Level 3-4 → bmad pm prd └─→ Level 3-4 → bmad pm prd
└─→ Validates status file + level └─→ Validates status file + level
└─→ Generates PRD.md + epics.md └─→ Generates PRD.md + epics.md
└─→ Then: Phase 3 (solution-architecture) └─→ Then: Phase 3 (architecture)
└─→ Then: Phase 4 (implementation) └─→ Then: Phase 4 (implementation)
GAME PROJECTS: GAME PROJECTS:
@ -250,7 +250,7 @@ BACKLOG → TODO → IN PROGRESS → DONE
- Story status is "Ready" or "In Review" - Story status is "Ready" or "In Review"
- **DONE**: Completed stories with dates and points - **DONE**: Completed stories with dates and points
- Moved here by `story-approved` workflow after DoD complete - Moved here by `story-done` workflow after DoD complete
- Immutable record of completed work - Immutable record of completed work
**Key Innovation**: Agents never search for "next story" - they always read the exact story from the status file. **Key Innovation**: Agents never search for "next story" - they always read the exact story from the status file.
@ -294,7 +294,7 @@ Phase Transition (Phase 2 or 3 → Phase 4)
┌─────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────┐
│ User reviews implementation (DoD check) │ │ User reviews implementation (DoD check) │
│ ↓ │ │ ↓ │
│ DEV: story-approved (marks story done) │ │ DEV: story-done (marks story done) │
│ Actions: IN PROGRESS → DONE │ │ Actions: IN PROGRESS → DONE │
│ TODO → IN PROGRESS (if exists) │ │ TODO → IN PROGRESS (if exists) │
│ BACKLOG → TODO (if exists) │ │ BACKLOG → TODO (if exists) │
@ -319,7 +319,7 @@ Phase Transition (Phase 2 or 3 → Phase 4)
| **story-ready** | SM | Approve drafted story for development | TODO → IN PROGRESS | Reads TODO section | | **story-ready** | SM | Approve drafted story for development | TODO → IN PROGRESS | Reads TODO section |
| **story-context** | SM | Generate expertise injection XML | (No state change) | Reads IN PROGRESS | | **story-context** | SM | Generate expertise injection XML | (No state change) | Reads IN PROGRESS |
| **dev-story** | DEV | Implement story | (No state change) | Reads IN PROGRESS | | **dev-story** | DEV | Implement story | (No state change) | Reads IN PROGRESS |
| **story-approved** | DEV | Mark story done after DoD complete | IN PROGRESS → DONE | Reads IN PROGRESS | | **story-done** | DEV | Mark story done after DoD complete | IN PROGRESS → DONE | Reads IN PROGRESS |
| **review-story** | SR/DEV | Quality validation (optional) | (No state change) | Manual story selection | | **review-story** | SR/DEV | Quality validation (optional) | (No state change) | Manual story selection |
| **correct-course** | SM | Handle issues/changes | (Adaptive) | Manual story selection | | **correct-course** | SM | Handle issues/changes | (Adaptive) | Manual story selection |
| **retrospective** | SM | Capture epic learnings | (No state change) | Manual or epic-triggered | | **retrospective** | SM | Capture epic learnings | (No state change) | Manual or epic-triggered |
@ -335,7 +335,7 @@ Status: Ready (User approved via story-ready, ready for implementation)
Status: In Review (Implementation complete, awaiting final approval) Status: In Review (Implementation complete, awaiting final approval)
Status: Done (User approved via story-approved, DoD complete) Status: Done (User approved via story-done, DoD complete)
``` ```
**Status File Position vs Story File Status:** **Status File Position vs Story File Status:**
@ -475,7 +475,7 @@ bmad architect tech-spec # Level 0-1 software projects
bmad pm gdd # Game projects bmad pm gdd # Game projects
# Phase 3: Solutioning (L3-4) # Phase 3: Solutioning (L3-4)
bmad architect solution-architecture bmad architect architecture
bmad architect tech-spec # Per epic, JIT bmad architect tech-spec # Per epic, JIT
# Phase 4: Implementation # Phase 4: Implementation
@ -483,7 +483,7 @@ bmad sm create-story # Draft story from TODO section
bmad sm story-ready # Approve story for development (after user review) bmad sm story-ready # Approve story for development (after user review)
bmad sm story-context # Generate context XML (optional but recommended) bmad sm story-context # Generate context XML (optional but recommended)
bmad dev dev-story # Implement story from IN PROGRESS section bmad dev dev-story # Implement story from IN PROGRESS section
bmad dev story-approved # Mark story done (after user confirms DoD) bmad dev story-done # Mark story done (after user confirms DoD)
bmad dev review-story # Quality validation (optional) bmad dev review-story # Quality validation (optional)
bmad sm correct-course # If issues arise bmad sm correct-course # If issues arise
bmad sm retrospective # After epic complete bmad sm retrospective # After epic complete

View File

@ -0,0 +1,292 @@
# Sprint Status Helper
**Purpose:** Utility workflow for reading and updating `sprint-status.yaml` tracking file used across Phase 4 implementation workflows.
**Location:** `src/modules/bmm/workflows/helpers/sprint-status/`
**Status File:** `{output_folder}/sprint-status.yaml` (created by sprint-planning workflow)
---
## Quick Reference
### Usage Pattern
```xml
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: ACTION_NAME</param>
<param>PARAM_NAME: value</param>
<!-- Optional params -->
</invoke-workflow>
<!-- Use returned variables -->
<action>Do something with {{result_*}} variables</action>
```
---
## Available Actions
### Read Operations
| Action | Purpose | Key Parameters | Key Returns |
| --------------------- | ---------------------------- | --------------------------------------- | ----------------------------------------------------------------------------- |
| `get_next_story` | Find first story by status | `filter_status`, `epic_filter` | `result_found`, `result_story_key`, `result_epic_id`, `result_story_id` |
| `list_stories` | Get all matching stories | `filter_status`, `epic_filter`, `limit` | `result_count`, `result_stories`, `result_story_list` |
| `get_story_status` | Check story's current status | `story_key` | `result_found`, `result_status` |
| `get_epic_status` | Check epic status + stats | `epic_id` | `result_status`, `result_story_count`, `result_done_count`, `result_complete` |
| `check_epic_complete` | Verify all stories done | `epic_id` | `result_complete`, `result_pending_stories` |
| `get_metadata` | Get project info from file | none | `result_project`, `result_story_location`, `result_generated_date` |
| `get_file_path` | Get file location | none | `result_file_path`, `result_exists` |
### Write Operations
| Action | Purpose | Key Parameters | Key Returns |
| ------------------------ | ---------------------- | ------------------------------------- | ---------------------------------------------------------- |
| `update_story_status` | Change story status | `story_key`, `new_status`, `validate` | `result_success`, `result_old_status`, `result_new_status` |
| `update_epic_status` | Mark epic as contexted | `epic_id`, `new_status` | `result_success`, `result_old_status`, `result_new_status` |
| `complete_retrospective` | Mark epic retro done | `epic_id` | `result_success`, `result_retro_key` |
### Utility Operations
| Action | Purpose | Key Parameters | Key Returns |
| --------------------- | ------------------------------- | -------------------------- | --------------------------------------------------------- |
| `validate_transition` | Check if status change is legal | `from_status`, `to_status` | `result_valid`, `result_message`, `result_suggested_path` |
---
## Status Flow Reference
**Epic Status:**
```
backlog → contexted
```
**Story Status:**
```
backlog → drafted → ready-for-dev → in-progress → review → done
↑_________ Corrections allowed (backward movement) ________
```
**Retrospective Status:**
```
optional ↔ completed
```
---
## Common Patterns
### Pattern 1: Find and Update Next Story
```xml
<!-- Find next backlog story -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_next_story</param>
<param>filter_status: backlog</param>
</invoke-workflow>
<check if="{{result_found}} == true">
<action>Work on story: {{result_story_key}}</action>
<!-- Update status after work -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{result_story_key}}</param>
<param>new_status: drafted</param>
</invoke-workflow>
</check>
<check if="{{result_found}} == false">
<output>No backlog stories available</output>
</check>
```
### Pattern 2: List Stories for User Selection
```xml
<!-- Get all drafted stories -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: list_stories</param>
<param>filter_status: drafted</param>
<param>limit: 10</param>
</invoke-workflow>
<check if="{{result_count}} > 0">
<output>Available drafted stories ({{result_count}} found):
{{result_story_list}}
</output>
<ask>Select a story to work on:</ask>
</check>
```
### Pattern 3: Check Epic Completion Before Retrospective
```xml
<!-- Verify epic is complete -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: check_epic_complete</param>
<param>epic_id: 1</param>
</invoke-workflow>
<check if="{{result_complete}} == true">
<output>Epic 1 is complete! Ready for retrospective.</output>
<!-- Mark retrospective as completed -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: complete_retrospective</param>
<param>epic_id: 1</param>
</invoke-workflow>
</check>
<check if="{{result_complete}} == false">
<output>Epic 1 has {{result_total_stories - result_done_stories}} pending stories:
{{result_pending_stories}}
</output>
</check>
```
### Pattern 4: Validate Before Update
```xml
<!-- Check if transition is legal first -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: validate_transition</param>
<param>from_status: drafted</param>
<param>to_status: in-progress</param>
</invoke-workflow>
<check if="{{result_valid}} == false">
<output>Cannot transition directly from drafted to in-progress.
{{result_suggested_path}}
</output>
<action>HALT</action>
</check>
```
### Pattern 5: Mark Epic Contexted
```xml
<!-- After creating epic tech context -->
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_epic_status</param>
<param>epic_id: {{epic_num}}</param>
<param>new_status: contexted</param>
</invoke-workflow>
```
---
## Return Variables
**All actions return:**
- `result_success`: `true` | `false`
- `result_error`: Error message (if `result_success == false`)
**Common additional returns:**
- `result_found`: `true` | `false` (for query operations)
- `result_status`: Current status value
- `result_old_status`: Previous status (for updates)
- `result_new_status`: Updated status (for updates)
- `result_story_key`: Story key like "1-1-story-name"
- `result_epic_id`: Epic number extracted from key
- `result_story_id`: Story number extracted from key
---
## Error Handling
**File Not Found:**
```xml
<check if="{{result_error}} == 'file_not_found'">
<output>Sprint status file not found.
Run sprint-planning workflow first to initialize tracking.
</output>
<action>HALT</action>
</check>
```
**Story Not Found:**
```xml
<check if="{{result_found}} == false">
<output>Story {{story_key}} not found in sprint-status.yaml.
Run sprint-planning to refresh tracking.
</output>
</check>
```
**Invalid Transition:**
```xml
<check if="{{result_success}} == false AND {{result_validation_message}} != ''">
<output>{{result_error}}
{{result_validation_message}}
</output>
</check>
```
---
## Options
| Parameter | Default | Description |
| ------------- | ------- | ---------------------------------------------------------- |
| `validate` | `true` | Enforce legal status transitions for `update_story_status` |
| `dry_run` | `false` | Test update without saving (for debugging) |
| `show_output` | `true` | Helper displays status messages (✅/❌/📋) |
---
## Integration Checklist
When adding sprint-status helper to a workflow:
- [ ] Add `sprint_status_file` variable to workflow.yaml if needed
- [ ] Use `invoke-workflow` with correct action parameter
- [ ] Check `result_success` and `result_found` before proceeding
- [ ] Handle `result_error == 'file_not_found'` case
- [ ] Use returned `result_*` variables in workflow logic
- [ ] Update status at appropriate workflow steps
---
## Workflow Integration Map
| Workflow | Actions Used | When |
| --------------------- | ------------------------------------------------- | ------------------------------------------- |
| **epic-tech-context** | `get_epic_status`<br>`update_epic_status` | Check epic exists → Mark contexted |
| **create-story** | `get_next_story`<br>`update_story_status` | Find backlog → Mark drafted |
| **story-ready** | `list_stories`<br>`update_story_status` | List drafted → Mark ready-for-dev |
| **story-context** | `get_next_story` | Find drafted (read-only) |
| **dev-story** | `get_next_story`<br>`update_story_status` (2x) | Find ready → Mark in-progress → Mark review |
| **review-story** | `list_stories`<br>`update_story_status` | List review → Update based on outcome |
| **story-done** | `list_stories`<br>`update_story_status` | List review → Mark done |
| **retrospective** | `check_epic_complete`<br>`complete_retrospective` | Verify complete → Mark retro done |
---
## Notes
- **Source of Truth:** File system is authoritative. Sprint-planning regenerates from epics + file detection.
- **Refresh Strategy:** Re-run sprint-planning anytime to resync tracking with actual files.
- **Concurrency:** Not designed for concurrent access. Single-user CLI workflow execution.
- **Alpha Status:** No backward compatibility. Re-run sprint-planning with latest version before using.
---
## Examples in Context
See individual workflow instructions in `src/modules/bmm/workflows/4-implementation/` for integration examples.
**Helper Files:**
- `workflow.yaml` - Interface definition
- `instructions.md` - Action implementation logic
- `README.md` - This file

View File

@ -0,0 +1,542 @@
# Sprint Status Helper - Workflow Instructions
<critical>The workflow execution engine is governed by: {project-root}/bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
<critical>Communicate all responses in {communication_language}</critical>
<critical>This is a HELPER workflow - it performs operations on sprint-status.yaml and returns results to the calling workflow via variables</critical>
<workflow>
<step n="1" goal="Validate action parameter and load sprint status file">
<action>Check if {{action}} parameter is provided and not empty</action>
<check if="{{action}} is empty or not provided">
<action>Set result_success = false</action>
<action>Set result_error = "Action parameter is required. See workflow.yaml for supported actions."</action>
<output>❌ Sprint Status Helper Error: No action specified</output>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Check if sprint status file exists at {status_file}</action>
<check if="file does not exist">
<action>Set result_success = false</action>
<action>Set result_error = "file_not_found"</action>
<action>Set result_file_path = {status_file}</action>
<check if="{{show_output}} == true">
<output>❌ Sprint status file not found at: {status_file}
Please run the sprint-planning workflow first to initialize tracking.
</output>
</check>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Read complete sprint status file from {status_file}</action>
<action>Parse YAML structure into memory</action>
<action>Extract metadata fields: generated, project, project_key, tracking_system, story_location</action>
<action>Extract development_status map: all epic and story keys with their current status values</action>
<check if="YAML parsing fails">
<action>Set result_success = false</action>
<action>Set result_error = "Invalid YAML format in sprint-status.yaml"</action>
<output>❌ Sprint status file is malformed. Run sprint-planning to regenerate.</output>
<action>HALT - return to calling workflow with error</action>
</check>
</step>
<step n="2" goal="Dispatch to action handler">
<action>Route to appropriate action handler based on {{action}} value</action>
<check if="{{action}} == 'get_next_story'">
<goto step="3">Get Next Story</goto>
</check>
<check if="{{action}} == 'list_stories'">
<goto step="4">List Stories</goto>
</check>
<check if="{{action}} == 'get_story_status'">
<goto step="5">Get Story Status</goto>
</check>
<check if="{{action}} == 'get_epic_status'">
<goto step="6">Get Epic Status</goto>
</check>
<check if="{{action}} == 'check_epic_complete'">
<goto step="7">Check Epic Complete</goto>
</check>
<check if="{{action}} == 'update_story_status'">
<goto step="8">Update Story Status</goto>
</check>
<check if="{{action}} == 'update_epic_status'">
<goto step="9">Update Epic Status</goto>
</check>
<check if="{{action}} == 'complete_retrospective'">
<goto step="10">Complete Retrospective</goto>
</check>
<check if="{{action}} == 'validate_transition'">
<goto step="11">Validate Transition</goto>
</check>
<check if="{{action}} == 'get_metadata'">
<goto step="12">Get Metadata</goto>
</check>
<check if="{{action}} == 'get_file_path'">
<goto step="13">Get File Path</goto>
</check>
<check if="action does not match any handler">
<action>Set result_success = false</action>
<action>Set result_error = "Unknown action: {{action}}"</action>
<output>❌ Unknown action: {{action}}
Supported actions: get_next_story, list_stories, get_story_status, get_epic_status, check_epic_complete, update_story_status, update_epic_status, complete_retrospective, validate_transition, get_metadata, get_file_path
</output>
<action>HALT - return to calling workflow with error</action>
</check>
</step>
<!-- ========================================
ACTION HANDLERS - READ OPERATIONS
======================================== -->
<step n="3" goal="Action: get_next_story">
<action>Filter development_status map to find stories (keys matching pattern: number-number-name, not epic-X or epic-X-retrospective)</action>
<check if="{{filter_status}} is provided and not empty">
<action>Further filter to only stories where status == {{filter_status}}</action>
</check>
<check if="{{epic_filter}} is provided and not empty">
<action>Further filter to only stories from epic {{epic_filter}} (keys starting with "{{epic_filter}}-")</action>
</check>
<action>From filtered list, select the FIRST story (stories are in order in the file)</action>
<check if="story found">
<action>Extract story key (e.g., "1-1-user-authentication")</action>
<action>Parse epic_id from key (first number before dash)</action>
<action>Parse story_id from key (second number after first dash)</action>
<action>Get current status value from development_status map</action>
<action>Set result_found = true</action>
<action>Set result_story_key = extracted story key</action>
<action>Set result_story_status = current status</action>
<action>Set result_epic_id = extracted epic id</action>
<action>Set result_story_id = extracted story id</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📋 Next {{filter_status}} story: {{result_story_key}} (Epic {{result_epic_id}}, Story {{result_story_id}})</output>
</check>
</check>
<check if="no story found">
<action>Set result_found = false</action>
<action>Set result_story_key = ""</action>
<action>Set result_story_status = ""</action>
<action>Set result_epic_id = ""</action>
<action>Set result_story_id = ""</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output> No {{filter_status}} stories found{{#if epic_filter}} in {{epic_filter}}{{/if}}</output>
</check>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="4" goal="Action: list_stories">
<action>Filter development_status map to find all stories (keys matching pattern: number-number-name)</action>
<check if="{{filter_status}} is provided and not empty">
<action>Further filter to only stories where status == {{filter_status}}</action>
</check>
<check if="{{epic_filter}} is provided and not empty">
<action>Further filter to only stories from epic {{epic_filter}}</action>
</check>
<action>Collect all matching story keys into an array</action>
<action>Apply limit: if more than {{limit}} stories, take first {{limit}} only</action>
<action>Set result_count = number of stories found (before limit applied)</action>
<action>Set result_stories = array of story keys ["1-1-auth", "1-2-nav", ...]</action>
<action>Set result_story_list = comma-separated string of keys "1-1-auth, 1-2-nav, ..."</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📋 Found {{result_count}} {{filter_status}} stories{{#if epic_filter}} in {{epic_filter}}{{/if}}{{#if result_count > limit}} (showing first {{limit}}){{/if}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="5" goal="Action: get_story_status">
<action>Validate {{story_key}} is provided</action>
<check if="{{story_key}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "story_key parameter required for get_story_status"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Look up {{story_key}} in development_status map</action>
<check if="story key found">
<action>Get status value from map</action>
<action>Set result_found = true</action>
<action>Set result_status = status value</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📋 Story {{story_key}} status: {{result_status}}</output>
</check>
</check>
<check if="story key not found">
<action>Set result_found = false</action>
<action>Set result_status = ""</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>⚠️ Story {{story_key}} not found in sprint-status.yaml</output>
</check>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="6" goal="Action: get_epic_status">
<action>Validate {{epic_id}} is provided</action>
<check if="{{epic_id}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "epic_id parameter required for get_epic_status"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Construct epic key: "epic-{{epic_id}}" (e.g., "epic-1")</action>
<action>Look up epic key in development_status map</action>
<check if="epic key found">
<action>Get status value from map</action>
<action>Count total stories in this epic (keys starting with "{{epic_id}}-")</action>
<action>Count done stories in this epic (keys starting with "{{epic_id}}-" where status == "done")</action>
<action>Determine if complete: true if done_count == story_count AND all stories exist</action>
<action>Set result_found = true</action>
<action>Set result_status = epic status value</action>
<action>Set result_story_count = total story count</action>
<action>Set result_done_count = done story count</action>
<action>Set result_complete = true/false based on completion check</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📋 Epic {{epic_id}} status: {{result_status}} ({{result_done_count}}/{{result_story_count}} stories done)</output>
</check>
</check>
<check if="epic key not found">
<action>Set result_found = false</action>
<action>Set result_status = ""</action>
<action>Set result_story_count = 0</action>
<action>Set result_done_count = 0</action>
<action>Set result_complete = false</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>⚠️ Epic {{epic_id}} not found in sprint-status.yaml</output>
</check>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="7" goal="Action: check_epic_complete">
<action>Validate {{epic_id}} is provided</action>
<check if="{{epic_id}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "epic_id parameter required for check_epic_complete"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Find all stories for epic {{epic_id}} (keys starting with "{{epic_id}}-")</action>
<action>Count total stories found</action>
<action>Count stories with status == "done"</action>
<action>Collect list of pending stories (status != "done")</action>
<action>Determine complete: true if all stories are done, false otherwise</action>
<action>Set result_complete = true/false</action>
<action>Set result_total_stories = total count</action>
<action>Set result_done_stories = done count</action>
<action>Set result_pending_stories = array of pending story keys</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📊 Epic {{epic_id}}: {{result_done_stories}}/{{result_total_stories}} stories complete{{#if result_complete}} ✅{{/if}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<!-- ========================================
ACTION HANDLERS - WRITE OPERATIONS
======================================== -->
<step n="8" goal="Action: update_story_status">
<action>Validate {{story_key}} is provided</action>
<action>Validate {{new_status}} is provided</action>
<check if="{{story_key}} is empty OR {{new_status}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "story_key and new_status parameters required for update_story_status"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Look up {{story_key}} in development_status map</action>
<check if="story key not found">
<action>Set result_success = false</action>
<action>Set result_error = "Story {{story_key}} not found in sprint-status.yaml"</action>
<check if="{{show_output}} == true">
<output>❌ Story {{story_key}} not found in tracking file</output>
</check>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Get current status (old_status) from map</action>
<check if="{{validate}} == true">
<action>Check if transition from old_status → {{new_status}} is legal</action>
<action>Define legal transitions:
- backlog → drafted
- drafted → ready-for-dev OR drafted (re-edit)
- ready-for-dev → in-progress OR drafted (corrections)
- in-progress → review OR in-progress (continue work)
- review → done OR in-progress (corrections needed)
- done → done (idempotent)
</action>
<check if="transition is NOT legal">
<action>Set result_success = false</action>
<action>Set result_error = "Invalid transition: {{old_status}} → {{new_status}}"</action>
<action>Set result_validation_message = "Stories must follow workflow: backlog → drafted → ready-for-dev → in-progress → review → done"</action>
<check if="{{show_output}} == true">
<output>❌ Invalid status transition for {{story_key}}: {{old_status}} → {{new_status}}
Legal workflow path: backlog → drafted → ready-for-dev → in-progress → review → done
Stories can move backward for corrections (e.g., review → in-progress)
</output>
</check>
<action>HALT - return to calling workflow with error</action>
</check>
</check>
<check if="{{dry_run}} == false">
<action>Update development_status map: set {{story_key}} = {{new_status}}</action>
<action>Write updated YAML back to {status_file}</action>
<action>Preserve all metadata and comments in file</action>
<action>Maintain story order in development_status section</action>
</check>
<action>Set result_success = true</action>
<action>Set result_old_status = old_status</action>
<action>Set result_new_status = {{new_status}}</action>
<action>Set result_story_key = {{story_key}}</action>
<check if="{{show_output}} == true">
<output>✅ Updated sprint-status: {{story_key}} → {{new_status}}{{#if dry_run}} (DRY RUN - not saved){{/if}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="9" goal="Action: update_epic_status">
<action>Validate {{epic_id}} is provided</action>
<action>Validate {{new_status}} is provided</action>
<check if="{{epic_id}} is empty OR {{new_status}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "epic_id and new_status parameters required for update_epic_status"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Construct epic key: "epic-{{epic_id}}"</action>
<action>Look up epic key in development_status map</action>
<check if="epic key not found">
<action>Set result_success = false</action>
<action>Set result_error = "Epic {{epic_id}} not found in sprint-status.yaml"</action>
<check if="{{show_output}} == true">
<output>❌ Epic {{epic_id}} not found in tracking file</output>
</check>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Get current status (old_status) from map</action>
<check if="{{dry_run}} == false">
<action>Update development_status map: set "epic-{{epic_id}}" = {{new_status}}</action>
<action>Write updated YAML back to {status_file}</action>
</check>
<action>Set result_success = true</action>
<action>Set result_old_status = old_status</action>
<action>Set result_new_status = {{new_status}}</action>
<check if="{{show_output}} == true">
<output>✅ Updated sprint-status: epic-{{epic_id}} → {{new_status}}{{#if dry_run}} (DRY RUN - not saved){{/if}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="10" goal="Action: complete_retrospective">
<action>Validate {{epic_id}} is provided</action>
<check if="{{epic_id}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "epic_id parameter required for complete_retrospective"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Construct retrospective key: "epic-{{epic_id}}-retrospective"</action>
<action>Look up retrospective key in development_status map</action>
<check if="retrospective key not found">
<action>Set result_success = false</action>
<action>Set result_error = "Retrospective for epic {{epic_id}} not found in sprint-status.yaml"</action>
<check if="{{show_output}} == true">
<output>❌ Epic {{epic_id}} retrospective not found in tracking file</output>
</check>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Get current status (old_status) from map</action>
<check if="{{dry_run}} == false">
<action>Update development_status map: set "epic-{{epic_id}}-retrospective" = "completed"</action>
<action>Write updated YAML back to {status_file}</action>
</check>
<action>Set result_success = true</action>
<action>Set result_retro_key = "epic-{{epic_id}}-retrospective"</action>
<action>Set result_old_status = old_status</action>
<action>Set result_new_status = "completed"</action>
<check if="{{show_output}} == true">
<output>✅ Updated sprint-status: epic-{{epic_id}}-retrospective → completed{{#if dry_run}} (DRY RUN - not saved){{/if}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<!-- ========================================
ACTION HANDLERS - UTILITY OPERATIONS
======================================== -->
<step n="11" goal="Action: validate_transition">
<action>Validate {{from_status}} and {{to_status}} are provided</action>
<check if="{{from_status}} is empty OR {{to_status}} is empty">
<action>Set result_success = false</action>
<action>Set result_error = "from_status and to_status parameters required for validate_transition"</action>
<action>HALT - return to calling workflow with error</action>
</check>
<action>Check if transition {{from_status}} → {{to_status}} is legal</action>
<action>Legal transitions for stories: - backlog → drafted: ✓ - drafted → ready-for-dev: ✓ - drafted → drafted: ✓ (re-edit) - ready-for-dev → in-progress: ✓ - ready-for-dev → drafted: ✓ (corrections) - in-progress → review: ✓ - in-progress → in-progress: ✓ (continue) - review → done: ✓ - review → in-progress: ✓ (corrections needed) - done → done: ✓ (idempotent) - All other transitions: ✗
</action>
<check if="transition is legal">
<action>Set result_valid = true</action>
<action>Set result_message = "Legal transition: {{from_status}} → {{to_status}}"</action>
<action>Set result_success = true</action>
</check>
<check if="transition is NOT legal">
<action>Set result_valid = false</action>
<action>Set result_message = "Invalid transition: {{from_status}} → {{to_status}}"</action>
<action>Set result_suggested_path = "backlog → drafted → ready-for-dev → in-progress → review → done"</action>
<action>Set result_success = true</action>
</check>
<check if="{{show_output}} == true">
<output>{{#if result_valid}}✅{{else}}❌{{/if}} {{result_message}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="12" goal="Action: get_metadata">
<action>Extract metadata from loaded sprint status file</action>
<action>Set result_project = metadata.project value</action>
<action>Set result_project_key = metadata.project_key value</action>
<action>Set result_tracking_system = metadata.tracking_system value</action>
<action>Set result_story_location = metadata.story_location value</action>
<action>Set result_generated_date = metadata.generated value</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📋 Sprint Status Metadata:
- Project: {{result_project}}
- Tracking: {{result_tracking_system}}
- Stories: {{result_story_location}}
- Generated: {{result_generated_date}}
</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
<step n="13" goal="Action: get_file_path">
<action>This action was already completed in step 1 when we loaded the file</action>
<action>Set result_file_path = {status_file}</action>
<action>Set result_exists = true (because we successfully loaded it in step 1)</action>
<action>Set result_success = true</action>
<check if="{{show_output}} == true">
<output>📁 Sprint status file: {{result_file_path}}</output>
</check>
<action>COMPLETE - return to calling workflow</action>
</step>
</workflow>

View File

@ -0,0 +1,53 @@
name: sprint-status
description: "Helper workflow for reading and updating sprint-status.yaml tracking file. Provides query and update operations for Phase 4 implementation workflows."
author: "BMad Method"
# Critical variables
config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder"
communication_language: "{config_source}:communication_language"
date: system-generated
# Workflow components
installed_path: "{project-root}/bmad/bmm/workflows/helpers/sprint-status"
instructions: "{installed_path}/instructions.md"
template: false
# Sprint status file location
status_file: "{output_folder}/sprint-status.yaml"
# Input parameters (provided by calling workflow)
# Action is REQUIRED - all others depend on the action type
variables:
action: "" # REQUIRED: get_next_story | list_stories | get_story_status | get_epic_status | check_epic_complete | update_story_status | update_epic_status | complete_retrospective | validate_transition | get_metadata | get_file_path
# Query parameters
story_key: "" # For: get_story_status, update_story_status
epic_id: "" # For: get_epic_status, check_epic_complete, update_epic_status, complete_retrospective
filter_status: "" # For: get_next_story, list_stories - values: backlog | drafted | ready-for-dev | in-progress | review | done
epic_filter: "" # For: get_next_story, list_stories - limit to specific epic (e.g., "epic-1")
limit: 10 # For: list_stories - max results to return
# Update parameters
new_status: "" # For: update_story_status, update_epic_status - target status
# Validation parameters
from_status: "" # For: validate_transition
to_status: "" # For: validate_transition
# Options
validate: true # For: update_story_status - enforce legal transitions
dry_run: false # For: update operations - test without saving
show_output: true # Show helper messages (caller can override)
# Output variables (returned to calling workflow)
# All results are prefixed with result_* for clarity
# Specific variables depend on action - see instructions.md for details
# Common returns (most actions):
# result_success: true | false
# result_error: error message (if failed)
#
# Action-specific returns documented in instructions.md
web_bundle: false

View File

@ -664,7 +664,7 @@ npm run test:e2e -- user-authentication.spec.ts --debug
2. Run failing tests to confirm RED phase: `npm run test:e2e` 2. Run failing tests to confirm RED phase: `npm run test:e2e`
3. Begin implementation using checklist as guide 3. Begin implementation using checklist as guide
4. Share progress in daily standup 4. Share progress in daily standup
5. When all tests pass, run `bmad sm story-approved` to move story to DONE 5. When all tests pass, run `bmad sm story-done` to move story to DONE
``` ```

View File

@ -296,7 +296,7 @@ test('should do something', async ({ {fixtureName} }) => {
4. **Work one test at a time** (red → green for each) 4. **Work one test at a time** (red → green for each)
5. **Share progress** in daily standup 5. **Share progress** in daily standup
6. **When all tests pass**, refactor code for quality 6. **When all tests pass**, refactor code for quality
7. **When refactoring complete**, run `bmad sm story-approved` to move story to DONE 7. **When refactoring complete**, run `bmad sm story-done` to move story to DONE
--- ---

View File

@ -141,7 +141,7 @@ Automatically consults TEA knowledge base:
**Coordinates with:** **Coordinates with:**
- **solution-architecture** (Phase 3): Aligns test structure with system architecture - **architecture** (Phase 3): Aligns test structure with system architecture
- **tech-spec**: Uses technical specifications to inform test configuration - **tech-spec**: Uses technical specifications to inform test configuration
**Updates:** **Updates:**

View File

@ -305,7 +305,7 @@ Automatically consults TEA knowledge base:
**Before test-design:** **Before test-design:**
- **plan-project** (Phase 2): Creates PRD and epics - **plan-project** (Phase 2): Creates PRD and epics
- **solution-architecture** (Phase 3): Defines technical approach - **architecture** (Phase 3): Defines technical approach
- **tech-spec** (Phase 3): Implementation details - **tech-spec** (Phase 3): Implementation details
**After test-design:** **After test-design:**

View File

@ -786,7 +786,7 @@ Use for: Alpha/beta releases, internal tools, proof-of-concept
- `bmad tea *automate` - Expand regression suite based on gaps - `bmad tea *automate` - Expand regression suite based on gaps
- `bmad tea *nfr-assess` - Validate non-functional requirements (for gate) - `bmad tea *nfr-assess` - Validate non-functional requirements (for gate)
- `bmad tea *test-review` - Review test quality issues flagged by trace - `bmad tea *test-review` - Review test quality issues flagged by trace
- `bmad sm story-approved` - Mark story as complete (triggers gate) - `bmad sm story-done` - Mark story as complete (triggers gate)
--- ---

View File

@ -9,7 +9,7 @@
<step n="1" goal="Scan for existing work"> <step n="1" goal="Scan for existing work">
<action>Search {output_folder}/ for existing BMM artifacts:</action> <action>Search {output_folder}/ for existing BMM artifacts:</action>
- PRD files (*prd*.md) - PRD files (*prd*.md)
- Architecture docs (architecture*.md, solution-architecture*.md, architecture/*) - Architecture docs (architecture*.md, architecture*.md, architecture/*)
- Briefs (*brief*.md) - Briefs (*brief*.md)
- Brainstorming docs (brainstorm*.md) - Brainstorming docs (brainstorm*.md)
- Research docs (*research*.md) - Research docs (*research*.md)

View File

@ -61,8 +61,6 @@ Parse these fields:
- FIELD_TYPE - FIELD_TYPE
- CURRENT_PHASE - CURRENT_PHASE
- CURRENT_WORKFLOW - CURRENT_WORKFLOW
- TODO_STORY
- IN_PROGRESS_STORY
- NEXT_ACTION - NEXT_ACTION
- NEXT_COMMAND - NEXT_COMMAND
- NEXT_AGENT - NEXT_AGENT
@ -204,27 +202,6 @@ Your choice:</ask>
<action>Parse status file completely</action> <action>Parse status file completely</action>
<template-output>status_exists = true</template-output> <template-output>status_exists = true</template-output>
<check if="data_request == next_story">
<action>Extract from Development Queue section</action>
<template-output>todo_story_id = {{TODO_STORY}}</template-output>
<template-output>todo_story_title = {{TODO_TITLE}}</template-output>
<template-output>in_progress_story = {{IN_PROGRESS_STORY}}</template-output>
<template-output>stories_sequence = {{STORIES_SEQUENCE}}</template-output>
<template-output>stories_done = {{STORIES_DONE}}</template-output>
<action>Determine story file path based on ID format</action>
<check if='todo_story_id matches "N.M" format'>
<template-output>todo_story_file = "story-{{N}}.{{M}}.md"</template-output>
</check>
<check if='todo_story_id matches "slug-N" format'>
<template-output>todo_story_file = "story-{{slug}}-{{N}}.md"</template-output>
</check>
<check if='todo_story_id matches "slug" format'>
<template-output>todo_story_file = "story-{{slug}}.md"</template-output>
</check>
</check>
<check if="data_request == project_config"> <check if="data_request == project_config">
<template-output>project_name = {{PROJECT_NAME}}</template-output> <template-output>project_name = {{PROJECT_NAME}}</template-output>
<template-output>project_type = {{PROJECT_TYPE}}</template-output> <template-output>project_type = {{PROJECT_TYPE}}</template-output>
@ -305,10 +282,6 @@ Your choice:</ask>
- Update PHASE_X_COMPLETE to true - Update PHASE_X_COMPLETE to true
- Update CURRENT_PHASE to next phase (if applicable) - Update CURRENT_PHASE to next phase (if applicable)
<check if="populate_stories_from parameter provided">
<action>Trigger story population (see populate_stories action below)</action>
</check>
<action>Update LAST_UPDATED to {{date}}</action> <action>Update LAST_UPDATED to {{date}}</action>
<action>Save status file</action> <action>Save status file</action>
@ -319,140 +292,6 @@ Your choice:</ask>
</check> </check>
<!-- ============================================= -->
<!-- ACTION: populate_stories -->
<!-- ============================================= -->
<check if="action == populate_stories">
<action>Get {{epics_file}} parameter (required - path to epics.md)</action>
<action>Read {{epics_file}} completely</action>
<action>Parse all story definitions from epic sections</action>
<action>Extract story IDs in sequential order (e.g., story-1.1, story-1.2, story-2.1...)</action>
<action>Extract story titles for each ID</action>
<action>Build ordered story list:</action>
- Format: JSON array or comma-separated
- Example: ["story-1.1", "story-1.2", "story-1.3", "story-2.1"]
<action>Update status file:</action>
- STORIES_SEQUENCE: {{ordered_story_list}}
- TODO_STORY: {{first_story_id}}
- TODO_TITLE: {{first_story_title}}
- IN_PROGRESS_STORY: (empty)
- IN_PROGRESS_TITLE: (empty)
- STORIES_DONE: []
<action>Update LAST_UPDATED to {{date}}</action>
<action>Save status file</action>
<template-output>success = true</template-output>
<template-output>total_stories = {{count}}</template-output>
<template-output>first_story = {{first_story_id}}</template-output>
</check>
<!-- ============================================= -->
<!-- ACTION: start_story (TODO → IN PROGRESS) -->
<!-- ============================================= -->
<check if="action == start_story">
<action>Get current TODO_STORY from status file</action>
<check if="TODO_STORY is empty">
<template-output>success = false</template-output>
<template-output>error = "No TODO story to start"</template-output>
<action>Return to calling workflow</action>
</check>
<action>Move TODO → IN PROGRESS:</action>
- IN_PROGRESS_STORY: {{current TODO_STORY}}
- IN_PROGRESS_TITLE: {{current TODO_TITLE}}
<action>Find next story in STORIES_SEQUENCE after current TODO_STORY</action>
<check if="next story found">
<action>Move next story to TODO:</action>
- TODO_STORY: {{next_story_id}}
- TODO_TITLE: {{next_story_title}}
</check>
<check if="no next story">
<action>Clear TODO:</action>
- TODO_STORY: (empty)
- TODO_TITLE: (empty)
</check>
<action>Update NEXT_ACTION and NEXT_COMMAND:</action>
- NEXT_ACTION: "Implement story {{IN_PROGRESS_STORY}}"
- NEXT_COMMAND: "dev-story"
- NEXT_AGENT: "dev"
<action>Update LAST_UPDATED to {{date}}</action>
<action>Save status file</action>
<template-output>success = true</template-output>
<template-output>in_progress_story = {{IN_PROGRESS_STORY}}</template-output>
<template-output>next_todo = {{TODO_STORY or empty}}</template-output>
</check>
<!-- ============================================= -->
<!-- ACTION: complete_story (IN PROGRESS → DONE) -->
<!-- ============================================= -->
<check if="action == complete_story">
<action>Get current IN_PROGRESS_STORY from status file</action>
<check if="IN_PROGRESS_STORY is empty">
<template-output>success = false</template-output>
<template-output>error = "No IN PROGRESS story to complete"</template-output>
<action>Return to calling workflow</action>
</check>
<action>Move IN PROGRESS → DONE:</action>
- Add {{IN_PROGRESS_STORY}} to STORIES_DONE list
<action>Move TODO → IN PROGRESS:</action>
- IN_PROGRESS_STORY: {{current TODO_STORY}}
- IN_PROGRESS_TITLE: {{current TODO_TITLE}}
<action>Find next story in STORIES_SEQUENCE after current TODO_STORY</action>
<check if="next story found">
<action>Move next story to TODO:</action>
- TODO_STORY: {{next_story_id}}
- TODO_TITLE: {{next_story_title}}
</check>
<check if="no next story">
<action>Clear TODO:</action>
- TODO_STORY: (empty)
- TODO_TITLE: (empty)
</check>
<check if="all stories complete (STORIES_DONE == STORIES_SEQUENCE)">
<action>Mark Phase 4 complete:</action>
- PHASE_4_COMPLETE: true
- CURRENT_WORKFLOW: "Complete"
- NEXT_ACTION: "All stories complete!"
- NEXT_COMMAND: (empty)
</check>
<check if="stories remain">
<action>Update NEXT_ACTION:</action>
- If IN_PROGRESS_STORY exists: "Implement story {{IN_PROGRESS_STORY}}"
- If only TODO_STORY exists: "Draft story {{TODO_STORY}}"
- NEXT_COMMAND: "dev-story" or "create-story"
</check>
<action>Update LAST_UPDATED to {{date}}</action>
<action>Save status file</action>
<template-output>success = true</template-output>
<template-output>completed_story = {{completed_story_id}}</template-output>
<template-output>stories_remaining = {{count}}</template-output>
<template-output>all_complete = {{true/false}}</template-output>
</check>
<!-- ============================================= --> <!-- ============================================= -->
<!-- ACTION: set_current_workflow (manual override) --> <!-- ACTION: set_current_workflow (manual override) -->
<!-- ============================================= --> <!-- ============================================= -->
@ -481,7 +320,7 @@ Your choice:</ask>
<!-- ============================================= --> <!-- ============================================= -->
<check if="action not recognized"> <check if="action not recognized">
<template-output>success = false</template-output> <template-output>success = false</template-output>
<template-output>error = "Unknown action: {{action}}. Valid actions: complete_workflow, populate_stories, start_story, complete_story, set_current_workflow"</template-output> <template-output>error = "Unknown action: {{action}}. Valid actions: complete_workflow, set_current_workflow"</template-output>
</check> </check>
</check> </check>

View File

@ -44,6 +44,12 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
workflows: workflows:
- id: "create-story" - id: "create-story"
required: true required: true
@ -58,10 +64,10 @@ phases:
required: true required: true
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
story_naming: "story-<short-title>.md" story_naming: "story-<short-title>.md"
story_example: "story-fix-auth-bug.md" story_example: "story-fix-auth-bug.md"

View File

@ -48,6 +48,13 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
story_loop: "for_each_story"
workflows: workflows:
- id: "create-story" - id: "create-story"
required: true required: true
@ -66,10 +73,10 @@ phases:
optional: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
story_naming: "story-<short-title>.md" story_naming: "story-<short-title>.md"
story_example: "story-add-auth.md, story-update-dashboard.md" story_example: "story-add-auth.md, story-update-dashboard.md"

View File

@ -62,6 +62,13 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
story_loop: "for_each_story"
workflows: workflows:
- id: "create-story" - id: "create-story"
required: true required: true
@ -81,13 +88,13 @@ phases:
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "review-story" - id: "review-story"
recommended: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
story_naming: "story-<short-title>.md" story_naming: "story-<short-title>.md"
story_example: "story-user-dashboard.md, story-api-integration.md" story_example: "story-user-dashboard.md, story-api-integration.md"

View File

@ -77,13 +77,21 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
epic_loop: "for_each_epic" epic_loop: "for_each_epic"
epic_workflows: epic_iteration:
setup_workflows:
- id: "tech-spec" - id: "tech-spec"
required: true required: true
agent: "architect" agent: "architect"
command: "tech-spec" command: "tech-spec"
note: "Must respect existing patterns" note: "Must respect existing patterns"
story_loop: "for_each_story_in_epic" story_loop: "for_each_story_in_epic"
story_workflows: story_workflows:
- id: "create-story" - id: "create-story"
@ -96,12 +104,12 @@ phases:
command: "story-context" command: "story-context"
note: "Heavy emphasis on existing code context" note: "Heavy emphasis on existing code context"
- id: "validate-story-context" - id: "validate-story-context"
required: true optional: true
agent: "sm" agent: "sm"
command: "validate-story-context" command: "validate-story-context"
note: "Ensure no breaking changes" note: "Ensure no breaking changes"
- id: "story-ready" - id: "story-ready"
recommended: true optional: true
agent: "sm" agent: "sm"
command: "story-ready" command: "story-ready"
- id: "dev-story" - id: "dev-story"
@ -109,19 +117,16 @@ phases:
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "review-story" - id: "review-story"
required: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
note: "Check integration points" note: "Check integration points"
- id: "correct-course" - id: "story-done"
conditional: "if_review_fails"
agent: "dev"
command: "correct-course"
- id: "story-approved"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
epic_completion:
completion_workflows:
- id: "integration-test" - id: "integration-test"
required: true required: true
agent: "dev" agent: "dev"

View File

@ -71,13 +71,21 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
epic_loop: "for_each_epic" epic_loop: "for_each_epic"
epic_workflows: epic_iteration:
setup_workflows:
- id: "tech-spec" - id: "tech-spec"
required: true required: true
agent: "sm" agent: "sm"
command: "tech-spec" command: "tech-spec"
note: "JIT per epic - creates stories considering existing code" note: "JIT per epic - creates stories considering existing code"
story_loop: "for_each_story_in_epic" story_loop: "for_each_story_in_epic"
story_workflows: story_workflows:
- id: "create-story" - id: "create-story"
@ -90,11 +98,11 @@ phases:
command: "story-context" command: "story-context"
note: "Extensive existing code context required" note: "Extensive existing code context required"
- id: "validate-story-context" - id: "validate-story-context"
required: true optional: true
agent: "sm" agent: "sm"
command: "validate-story-context" command: "validate-story-context"
- id: "story-ready" - id: "story-ready"
required: true optional: true
agent: "sm" agent: "sm"
command: "story-ready" command: "story-ready"
- id: "dev-story" - id: "dev-story"
@ -102,24 +110,21 @@ phases:
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "review-story" - id: "review-story"
required: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
note: "Rigorous review for enterprise changes" note: "Rigorous review for enterprise changes"
- id: "correct-course"
conditional: "if_review_fails"
agent: "dev"
command: "correct-course"
- id: "integration-test" - id: "integration-test"
required: true optional: true
agent: "dev" agent: "dev"
command: "integration-test" command: "integration-test"
note: "Test integration with existing systems" note: "Test integration with existing systems"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
epic_completion:
completion_workflows:
- id: "retrospective" - id: "retrospective"
required: true required: true
agent: "sm" agent: "sm"

View File

@ -58,6 +58,12 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
note: "Implementation varies by game complexity" note: "Implementation varies by game complexity"
level_based_implementation: level_based_implementation:
level_0_1: level_0_1:
@ -72,7 +78,7 @@ phases:
- id: "dev-story" - id: "dev-story"
required: true required: true
agent: "dev" agent: "dev"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
level_2_4: level_2_4:
@ -99,7 +105,7 @@ phases:
- id: "review-story" - id: "review-story"
recommended: true recommended: true
agent: "dev" agent: "dev"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
feature_completion: feature_completion:

View File

@ -37,6 +37,12 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
workflows: workflows:
- id: "create-story" - id: "create-story"
required: true required: true
@ -50,10 +56,10 @@ phases:
required: true required: true
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
story_naming: "story-<short-title>.md" story_naming: "story-<short-title>.md"
story_example: "story-fix-login.md" story_example: "story-fix-login.md"

View File

@ -41,7 +41,13 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
loop_type: "for_each_story" phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
story_loop: "for_each_story"
workflows: workflows:
- id: "create-story" - id: "create-story"
required: true required: true
@ -63,10 +69,10 @@ phases:
optional: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
story_naming: "story-<title>-<n>.md" story_naming: "story-<title>-<n>.md"
story_example: "story-oauth-integration-1.md" story_example: "story-oauth-integration-1.md"

View File

@ -62,7 +62,13 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
loop_type: "for_each_story" phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
story_loop: "for_each_story"
workflows: workflows:
- id: "create-story" - id: "create-story"
required: true required: true
@ -88,10 +94,10 @@ phases:
optional: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
- id: "story-approved" - id: "story-done"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
epic_completion: epic_completion:
- id: "retrospective" - id: "retrospective"
optional: true optional: true

View File

@ -57,13 +57,21 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
epic_loop: "for_each_epic" epic_loop: "for_each_epic"
epic_workflows: epic_iteration:
setup_workflows:
- id: "tech-spec" - id: "tech-spec"
required: true required: true
agent: "architect" agent: "architect"
command: "tech-spec" command: "tech-spec"
note: "JIT per epic - creates stories for that epic" note: "JIT per epic - creates stories for that epic"
story_loop: "for_each_story_in_epic" story_loop: "for_each_story_in_epic"
story_workflows: story_workflows:
- id: "create-story" - id: "create-story"
@ -75,7 +83,7 @@ phases:
agent: "sm" agent: "sm"
command: "story-context" command: "story-context"
- id: "validate-story-context" - id: "validate-story-context"
recommended: true optional: true
agent: "sm" agent: "sm"
command: "validate-story-context" command: "validate-story-context"
- id: "story-ready" - id: "story-ready"
@ -87,18 +95,15 @@ phases:
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "review-story" - id: "review-story"
recommended: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
- id: "correct-course" - id: "story-done"
conditional: "if_review_fails"
agent: "dev"
command: "correct-course"
- id: "story-approved"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
epic_completion:
completion_workflows:
- id: "retrospective" - id: "retrospective"
recommended: true recommended: true
agent: "sm" agent: "sm"

View File

@ -59,13 +59,21 @@ phases:
- phase: 4 - phase: 4
name: "Implementation" name: "Implementation"
required: true required: true
phase_initialization:
- id: "sprint-planning"
required: true
agent: "sm"
command: "sprint-planning"
note: "Initialize sprint tracking - run once when entering Phase 4"
epic_loop: "for_each_epic" epic_loop: "for_each_epic"
epic_workflows: epic_iteration:
setup_workflows:
- id: "tech-spec" - id: "tech-spec"
required: true required: true
agent: "architect" agent: "architect"
command: "tech-spec" command: "tech-spec"
note: "JIT per epic - creates stories for that epic" note: "JIT per epic - creates stories for that epic"
story_loop: "for_each_story_in_epic" story_loop: "for_each_story_in_epic"
story_workflows: story_workflows:
- id: "create-story" - id: "create-story"
@ -77,11 +85,11 @@ phases:
agent: "sm" agent: "sm"
command: "story-context" command: "story-context"
- id: "validate-story-context" - id: "validate-story-context"
required: true optional: true
agent: "sm" agent: "sm"
command: "validate-story-context" command: "validate-story-context"
- id: "story-ready" - id: "story-ready"
recommended: true optional: true
agent: "sm" agent: "sm"
command: "story-ready" command: "story-ready"
- id: "dev-story" - id: "dev-story"
@ -89,18 +97,15 @@ phases:
agent: "dev" agent: "dev"
command: "dev-story" command: "dev-story"
- id: "review-story" - id: "review-story"
required: true optional: true
agent: "dev" agent: "dev"
command: "review-story" command: "review-story"
- id: "correct-course" - id: "story-done"
conditional: "if_review_fails"
agent: "dev"
command: "correct-course"
- id: "story-approved"
required: true required: true
agent: "dev" agent: "dev"
command: "story-approved" command: "story-done"
epic_completion:
completion_workflows:
- id: "retrospective" - id: "retrospective"
required: true required: true
agent: "sm" agent: "sm"

View File

@ -31,7 +31,7 @@ levels:
title: "Complex System" title: "Complex System"
stories: "12-40 stories" stories: "12-40 stories"
description: "Subsystems, integrations, full architecture" description: "Subsystems, integrations, full architecture"
documentation: "PRD + solution architecture + JIT tech specs" documentation: "PRD + architecture + JIT tech specs"
architecture: true architecture: true
4: 4:

View File

@ -19,15 +19,6 @@ PHASE_2_COMPLETE: {{phase_2_complete}}
PHASE_3_COMPLETE: {{phase_3_complete}} PHASE_3_COMPLETE: {{phase_3_complete}}
PHASE_4_COMPLETE: {{phase_4_complete}} PHASE_4_COMPLETE: {{phase_4_complete}}
## Development Queue
STORIES_SEQUENCE: {{ordered_story_list}}
TODO_STORY: {{todo_story}}
TODO_TITLE: {{todo_title}}
IN_PROGRESS_STORY: {{in_progress_story}}
IN_PROGRESS_TITLE: {{in_progress_title}}
STORIES_DONE: {{completed_story_list}}
## Next Action ## Next Action
NEXT_ACTION: {{next_action}} NEXT_ACTION: {{next_action}}

View File

@ -18,6 +18,7 @@ Aside from stability and bug fixes found during the alpha period - the main focu
--- done --- --- done ---
- Done - Sprint Status Workflow to generate the story status tracker
- Done - Brownfield v6 integrated into the workflow. - Done - Brownfield v6 integrated into the workflow.
- Done - Full workflow single file tracking. - Done - Full workflow single file tracking.
- Done - BoMB Tooling included with module install - Done - BoMB Tooling included with module install