feat: add planning-time gap analysis and parallel execution enhancements
- Add create-story-with-gap-analysis workflow for verified codebase scanning at planning time - Fix autonomous-epic to support parallel execution (no auto-branch creation) - Fix autonomous-epic and super-dev-story to auto-accept gap analysis in autonomous mode - Fix push-all to support targeted file commits (safe for parallel agents) - Update dev-story and super-dev-story to pass auto_accept_gap_analysis parameter - Add explicit autonomous mode instructions to workflows Breaking changes: None - all enhancements are backward compatible
This commit is contained in:
parent
5b3f3479c8
commit
949a8c3236
|
|
@ -96,6 +96,40 @@ autonomous_settings:
|
|||
max_retry_per_story: 2 # Retry failed stories
|
||||
create_git_commits: true # Commit after each story
|
||||
git_branch_prefix: "auto-epic-" # Branch: auto-epic-{epic_num}
|
||||
|
||||
# Task-based completion verification (NEW)
|
||||
completion_verification:
|
||||
task_based_completion: true # Check actual tasks, not just status
|
||||
process_review_with_unchecked: true # Process "review" stories with unchecked tasks
|
||||
process_done_with_unchecked: true # Process "done" stories if tasks remain
|
||||
verify_after_development: true # Re-check after each story
|
||||
strict_epic_completion: true # Epic only done when ALL tasks complete
|
||||
```
|
||||
|
||||
### Task-Based Completion (Important!)
|
||||
|
||||
**The autonomous epic workflow now uses TASK-BASED completion**, not just status-based:
|
||||
|
||||
| What Changed | Old Behavior | New Behavior |
|
||||
|--------------|--------------|--------------|
|
||||
| "review" status | ⏭️ Skipped | ✅ Processed if unchecked tasks exist |
|
||||
| "done" status | ⏭️ Skipped | ✅ Verified, processed if tasks remain |
|
||||
| Completion check | Status-based | Task-based (count `- [ ]`) |
|
||||
| Epic marked done | When all stories "done" | When ALL tasks `- [x]` |
|
||||
|
||||
**Why this matters:** Code reviews often add new tasks (CR-1, CR-2, etc.) that need implementation. The old workflow would skip these stories because they were marked "review". Now we scan for actual unchecked tasks.
|
||||
|
||||
```
|
||||
📊 Epic 4 Status (Task-Based Analysis)
|
||||
|
||||
By Actual Task Completion:
|
||||
- ✅ Truly Done: 0 (all tasks checked, will skip)
|
||||
- 🔧 Needs Work: 7 (has unchecked tasks)
|
||||
4-1: 6 unchecked (CR tasks)
|
||||
4-2: 4 unchecked (original work)
|
||||
4-3: 7 unchecked (CR tasks)
|
||||
...
|
||||
- 📝 Backlog: 0 (will create + develop)
|
||||
```
|
||||
|
||||
### Per-Epic Override
|
||||
|
|
|
|||
|
|
@ -4,6 +4,21 @@
|
|||
<critical>Communicate all responses in {communication_language}</critical>
|
||||
<critical>🤖 AUTONOMOUS EPIC PROCESSING - Full automation of epic completion!</critical>
|
||||
<critical>This workflow orchestrates create-story and super-dev-story for each story in an epic</critical>
|
||||
<critical>TASK-BASED COMPLETION: A story is ONLY complete when it has ZERO unchecked tasks (- [ ])</critical>
|
||||
|
||||
<!-- AUTONOMOUS MODE INSTRUCTIONS - READ THESE CAREFULLY -->
|
||||
<critical>⚡ AUTONOMOUS MODE: When auto_accept_gap_analysis=true in workflow.yaml, you MUST:
|
||||
- NEVER ask the user to approve gap analysis refinements
|
||||
- AUTOMATICALLY accept all gap analysis proposals
|
||||
- PROCEED immediately without waiting for user input on gap analysis
|
||||
- Only ask for user input at the START of the workflow (epic selection, Y/D/n choice)
|
||||
</critical>
|
||||
<critical>⚡ INVOKING SUB-WORKFLOWS: When you see invoke-workflow, you must:
|
||||
1. Load the referenced workflow.yaml file
|
||||
2. Load its instructions.xml file
|
||||
3. Execute that workflow completely
|
||||
4. Return to this workflow and continue
|
||||
</critical>
|
||||
|
||||
<step n="1" goal="Initialize and validate epic">
|
||||
<output>🤖 **Autonomous Epic Processing**
|
||||
|
|
@ -11,8 +26,12 @@
|
|||
This workflow will automatically:
|
||||
1. Create each story just-in-time (using create-story)
|
||||
2. Develop each story (using super-dev-story or dev-story)
|
||||
3. Commit and push after each story (integrated in super-dev)
|
||||
4. Generate epic completion report
|
||||
3. **Verify completion** by checking ALL tasks are done (- [x])
|
||||
4. Commit and push after each story (integrated in super-dev)
|
||||
5. Generate epic completion report
|
||||
|
||||
**Key Improvement:** Stories in "review" status with unchecked tasks
|
||||
WILL be processed - we check actual task completion, not just status!
|
||||
|
||||
**Time Estimate:** Varies by epic size
|
||||
- Small epic (3-5 stories): 3-6 hours
|
||||
|
|
@ -42,26 +61,45 @@
|
|||
<anchor id="validate_epic" />
|
||||
|
||||
<action>Load {{sprint_status}} file</action>
|
||||
<action>Find epic-{{epic_num}} entry</action>
|
||||
<action>Count stories by status (backlog, ready-for-dev, in-progress, review, done)</action>
|
||||
<action>Find epic-{{epic_num}} entry and all story entries for this epic</action>
|
||||
|
||||
<!-- TASK-BASED ANALYSIS: Scan actual story files for unchecked tasks -->
|
||||
<action>For each story in epic:
|
||||
1. Read the story file from {{story_dir}}/{{story_key}}.md
|
||||
2. Count unchecked tasks: grep -c "^- \[ \]" or regex match "- \[ \]"
|
||||
3. Count checked tasks: grep -c "^- \[x\]" or regex match "- \[x\]"
|
||||
4. Categorize story:
|
||||
- "truly_done": status=done AND unchecked_tasks=0
|
||||
- "needs_work": unchecked_tasks > 0 (regardless of status)
|
||||
- "backlog": status=backlog (file may not exist yet)
|
||||
</action>
|
||||
|
||||
<output>
|
||||
📊 **Epic {{epic_num}} Status**
|
||||
📊 **Epic {{epic_num}} Status (Task-Based Analysis)**
|
||||
|
||||
Total stories: {{total_story_count}}
|
||||
- Backlog: {{backlog_count}} (will create + develop)
|
||||
- Ready-for-dev: {{ready_count}} (will develop)
|
||||
- In-progress: {{inprogress_count}} (will resume)
|
||||
- Review/Done: {{done_count}} (will skip)
|
||||
|
||||
**Work Remaining:** {{work_count}} stories
|
||||
**By Actual Task Completion:**
|
||||
- ✅ Truly Done: {{truly_done_count}} (all tasks checked, will skip)
|
||||
- 🔧 Needs Work: {{needs_work_count}} (has unchecked tasks)
|
||||
{{list_needs_work_with_task_counts}}
|
||||
- 📝 Backlog: {{backlog_count}} (will create + develop)
|
||||
|
||||
**By Status (for reference):**
|
||||
- done: {{done_status_count}}
|
||||
- review: {{review_status_count}}
|
||||
- in-progress: {{inprogress_status_count}}
|
||||
- ready-for-dev: {{ready_status_count}}
|
||||
- backlog: {{backlog_status_count}}
|
||||
|
||||
**Work Remaining:** {{work_count}} stories with {{total_unchecked_tasks}} unchecked tasks
|
||||
**Estimated Time:** {{estimated_hours}} hours
|
||||
**Estimated Tokens:** ~{{estimated_tokens}}K
|
||||
</output>
|
||||
|
||||
<ask>**Proceed with autonomous processing?**
|
||||
|
||||
[Y] Yes - Use super-dev-story (comprehensive validation)
|
||||
[Y] Yes - Use super-dev-story (comprehensive validation + code review)
|
||||
[D] Dev-story - Faster, less validation
|
||||
[n] No - Cancel
|
||||
</ask>
|
||||
|
|
@ -80,10 +118,17 @@
|
|||
</check>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Create git branch and initialize tracking">
|
||||
<action>Get current branch name</action>
|
||||
<action>Create new branch: auto-epic-{{epic_num}}</action>
|
||||
<output>📝 Created branch: auto-epic-{{epic_num}}</output>
|
||||
<step n="2" goal="Initialize tracking (optionally create branch)">
|
||||
<action>Get current branch name and store as {{current_branch}}</action>
|
||||
|
||||
<check if="{{create_epic_branch}} == true">
|
||||
<action>Create new branch: auto-epic-{{epic_num}}</action>
|
||||
<output>📝 Created branch: auto-epic-{{epic_num}}</output>
|
||||
</check>
|
||||
|
||||
<check if="{{create_epic_branch}} == false">
|
||||
<output>📝 Staying on current branch: {{current_branch}} (parallel epic mode)</output>
|
||||
</check>
|
||||
|
||||
<action>Initialize progress tracking file:
|
||||
- epic_num
|
||||
|
|
@ -96,23 +141,28 @@
|
|||
</step>
|
||||
|
||||
<step n="3" goal="Process all stories in epic">
|
||||
<critical>🔄 STORY LOOP - Create and develop each story</critical>
|
||||
<critical>🔄 STORY LOOP - Create and develop each story until ALL tasks complete</critical>
|
||||
|
||||
<action>Find all stories in epic {{epic_num}} needing work</action>
|
||||
<action>Sort by story number (ascending)</action>
|
||||
<action>Build ordered list of stories needing work:
|
||||
1. All stories with unchecked tasks (regardless of status)
|
||||
2. All backlog stories
|
||||
3. Sort by story number (ascending)
|
||||
</action>
|
||||
<action>Initialize counters: success=0, failure=0</action>
|
||||
|
||||
<!-- STORY LOOP -->
|
||||
<loop foreach="{{stories_needing_work}}">
|
||||
<action>Set {{current_story}}</action>
|
||||
<action>Read story file and count unchecked tasks</action>
|
||||
|
||||
<output>
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Story {{counter}}/{{work_count}}: {{current_story.key}}
|
||||
Status: {{current_story.status}} | Unchecked Tasks: {{unchecked_count}}
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
</output>
|
||||
|
||||
<!-- CREATE STORY IF NEEDED -->
|
||||
<!-- CREATE STORY IF NEEDED (only for backlog) -->
|
||||
<check if="status == 'backlog'">
|
||||
<output>📝 Creating story...</output>
|
||||
|
||||
|
|
@ -131,38 +181,62 @@
|
|||
</catch>
|
||||
</check>
|
||||
|
||||
<!-- DEVELOP STORY -->
|
||||
<output>💻 Developing with {{dev_workflow}}...</output>
|
||||
<!-- DEVELOP STORY (for any story with unchecked tasks) -->
|
||||
<check if="{{unchecked_count}} > 0">
|
||||
<output>💻 Developing {{unchecked_count}} remaining tasks with {{dev_workflow}}...</output>
|
||||
|
||||
<try>
|
||||
<check if="{{dev_workflow}} == 'super-dev-story'">
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/super-dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{current_story_file}}" />
|
||||
<note>Includes: dev + post-gap + review + push-all</note>
|
||||
</invoke-workflow>
|
||||
</check>
|
||||
<try>
|
||||
<check if="{{dev_workflow}} == 'super-dev-story'">
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/super-dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{current_story_file}}" />
|
||||
<input name="auto_accept_gap_analysis" value="true" />
|
||||
<note>Includes: dev + post-gap + review + push-all (auto-accepting gap analysis)</note>
|
||||
</invoke-workflow>
|
||||
</check>
|
||||
|
||||
<check if="{{dev_workflow}} == 'dev-story'">
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{current_story_file}}" />
|
||||
</invoke-workflow>
|
||||
<check if="{{dev_workflow}} == 'dev-story'">
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{current_story_file}}" />
|
||||
<input name="auto_accept_gap_analysis" value="true" />
|
||||
</invoke-workflow>
|
||||
|
||||
<!-- Push after dev-story -->
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/push-all/workflow.yaml">
|
||||
<note>Commit and push story changes</note>
|
||||
</invoke-workflow>
|
||||
</check>
|
||||
<!-- Extract File List from story for targeted commit -->
|
||||
<action>Read story file and extract "File List" section</action>
|
||||
<action>Parse all file paths, include the story file itself</action>
|
||||
<action>Store as {{story_files}} - space-separated list</action>
|
||||
|
||||
<output>✅ Story complete and pushed</output>
|
||||
<action>Increment success_count</action>
|
||||
<action>Update progress file</action>
|
||||
</try>
|
||||
<!-- Push after dev-story (targeted to this story's files only) -->
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/push-all/workflow.yaml">
|
||||
<input name="target_files" value="{{story_files}}" />
|
||||
<input name="story_key" value="{{current_story.key}}" />
|
||||
<note>Only commit files from this story (parallel-agent safe)</note>
|
||||
</invoke-workflow>
|
||||
</check>
|
||||
|
||||
<catch>
|
||||
<output>❌ Story failed: {{error}}</output>
|
||||
<action>Add to failed_stories, continue</action>
|
||||
<action>Increment failure_count</action>
|
||||
</catch>
|
||||
<!-- VERIFY COMPLETION: Re-check for unchecked tasks -->
|
||||
<action>Re-read story file and count unchecked tasks</action>
|
||||
|
||||
<check if="{{remaining_unchecked}} > 0">
|
||||
<output>⚠️ Story still has {{remaining_unchecked}} unchecked tasks after development</output>
|
||||
<action>Log incomplete tasks for review</action>
|
||||
<action>Mark as partial success</action>
|
||||
</check>
|
||||
|
||||
<check if="{{remaining_unchecked}} == 0">
|
||||
<output>✅ Story complete - all tasks checked!</output>
|
||||
<action>Update story status to "done" in sprint-status.yaml</action>
|
||||
</check>
|
||||
|
||||
<action>Increment success_count</action>
|
||||
<action>Update progress file</action>
|
||||
</try>
|
||||
|
||||
<catch>
|
||||
<output>❌ Story failed: {{error}}</output>
|
||||
<action>Add to failed_stories with error details</action>
|
||||
<action>Increment failure_count</action>
|
||||
</catch>
|
||||
</check>
|
||||
|
||||
<output>Progress: {{success_count}} ✅ | {{failure_count}} ❌ | {{remaining}} pending</output>
|
||||
</loop>
|
||||
|
|
@ -171,24 +245,39 @@
|
|||
</step>
|
||||
|
||||
<step n="4" goal="Epic completion and reporting">
|
||||
<!-- Final verification: scan all stories for unchecked tasks -->
|
||||
<action>Re-scan all epic stories for unchecked tasks</action>
|
||||
<action>Calculate: total_remaining_tasks across all stories</action>
|
||||
|
||||
<output>
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🎉 EPIC {{epic_num}} COMPLETE!
|
||||
🎉 EPIC {{epic_num}} PROCESSING COMPLETE!
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
**Results:**
|
||||
✅ Stories completed: {{success_count}}/{{total_count}}
|
||||
✅ Stories processed: {{success_count}}/{{total_count}}
|
||||
{{if_failures}}❌ Stories failed: {{failure_count}}{{endif}}
|
||||
|
||||
**Branch:** auto-epic-{{epic_num}}
|
||||
**All changes pushed to remote**
|
||||
**Task Completion:**
|
||||
- Total tasks in epic: {{total_tasks}}
|
||||
- Completed: {{completed_tasks}} ✅
|
||||
- Remaining: {{remaining_tasks}} ⏳
|
||||
|
||||
{{if_all_success}}
|
||||
**Epic {{epic_num}} marked complete in sprint-status.yaml**
|
||||
**Branch:** {{current_branch}}
|
||||
**All changes committed**
|
||||
|
||||
{{if_all_tasks_complete}}
|
||||
✅ **All tasks complete! Epic {{epic_num}} marked done in sprint-status.yaml**
|
||||
{{endif}}
|
||||
|
||||
{{if_tasks_remaining}}
|
||||
⚠️ **{{remaining_tasks}} tasks still unchecked - epic NOT marked complete**
|
||||
Stories with remaining work:
|
||||
{{list_incomplete_stories}}
|
||||
{{endif}}
|
||||
|
||||
**Next Steps:**
|
||||
1. Review the work on branch auto-epic-{{epic_num}}
|
||||
1. Review the work on branch {{current_branch}}
|
||||
2. Run human code review
|
||||
3. Merge when approved
|
||||
|
||||
|
|
@ -198,7 +287,7 @@
|
|||
{{endif}}
|
||||
</output>
|
||||
|
||||
<check if="{{success_count}} == {{total_count}}">
|
||||
<check if="{{remaining_tasks}} == 0 AND {{failure_count}} == 0">
|
||||
<action>Update sprint-status: epic-{{epic_num}} = "done"</action>
|
||||
</check>
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,29 @@ autonomous_settings:
|
|||
halt_on_error: false # Continue even if story fails
|
||||
max_retry_per_story: 2 # Retry failed stories
|
||||
create_git_commits: true # Commit after each story
|
||||
git_branch_prefix: "auto-epic-" # Branch name format: auto-epic-{epic_num}
|
||||
create_epic_branch: false # When false, stay on current branch (good for parallel epics)
|
||||
git_branch_prefix: "auto-epic-" # Branch name format: auto-epic-{epic_num} (only used if create_epic_branch=true)
|
||||
|
||||
# TASK-BASED COMPLETION SETTINGS (NEW)
|
||||
# These settings ensure stories are truly complete, not just marked as such
|
||||
completion_verification:
|
||||
# Use task-based completion instead of status-based
|
||||
# A story is ONLY complete when it has ZERO unchecked tasks (- [ ])
|
||||
task_based_completion: true
|
||||
|
||||
# Include stories in "review" status if they have unchecked tasks
|
||||
# This catches code review findings that were added but not implemented
|
||||
process_review_with_unchecked: true
|
||||
|
||||
# Include stories in "done" status if they have unchecked tasks
|
||||
# This catches stories incorrectly marked done
|
||||
process_done_with_unchecked: true
|
||||
|
||||
# Verify completion after each story by re-scanning for unchecked tasks
|
||||
verify_after_development: true
|
||||
|
||||
# Only mark epic as "done" if ALL stories have ZERO unchecked tasks
|
||||
strict_epic_completion: true
|
||||
|
||||
standalone: true
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,170 @@
|
|||
# Create Story With Gap Analysis
|
||||
|
||||
**Custom Workflow by Jonah Schulte**
|
||||
**Created:** December 24, 2025
|
||||
**Purpose:** Generate stories with SYSTEMATIC codebase gap analysis (not inference-based)
|
||||
|
||||
---
|
||||
|
||||
## Problem This Solves
|
||||
|
||||
**Standard `/create-story` workflow:**
|
||||
- ❌ Reads previous stories and git commits (passive)
|
||||
- ❌ Infers what probably exists (guessing)
|
||||
- ❌ Gap analysis quality varies by agent thoroughness
|
||||
- ❌ Checkboxes may not reflect reality
|
||||
|
||||
**This custom workflow:**
|
||||
- ✅ Actively scans codebase with Glob/Read tools
|
||||
- ✅ Verifies file existence (not inference)
|
||||
- ✅ Reads key files to check implementation depth (mocked vs real)
|
||||
- ✅ Generates TRUTHFUL gap analysis
|
||||
- ✅ Checkboxes are FACTS verified by file system
|
||||
|
||||
---
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/create-story-with-gap-analysis
|
||||
|
||||
# Or via Skill tool:
|
||||
Skill: "create-story-with-gap-analysis"
|
||||
Args: "1.9" (epic.story number)
|
||||
```
|
||||
|
||||
**Workflow will:**
|
||||
1. Load existing story + epic context
|
||||
2. **SCAN codebase systematically** (Glob for files, Read to verify implementation)
|
||||
3. Generate gap analysis with verified ✅/❌/⚠️ status
|
||||
4. Update story file with truthful checkboxes
|
||||
5. Save to docs/sprint-artifacts/
|
||||
|
||||
---
|
||||
|
||||
## What It Scans
|
||||
|
||||
**For each story, the workflow:**
|
||||
|
||||
1. **Identifies target directories** (from story title/requirements)
|
||||
- Example: "admin-user-service" → apps/backend/admin-user-service/
|
||||
|
||||
2. **Globs for all files**
|
||||
- `{target}/src/**/*.ts` - Find all TypeScript files
|
||||
- `{target}/src/**/*.spec.ts` - Find all tests
|
||||
|
||||
3. **Checks specific required files**
|
||||
- Based on ACs, check if files exist
|
||||
- Example: `src/auth/controllers/bridgeid-auth.controller.ts` → ❌ MISSING
|
||||
|
||||
4. **Reads key files to verify depth**
|
||||
- Check if mocked: Search for "MOCK" string
|
||||
- Check if incomplete: Search for "TODO"
|
||||
- Verify real implementation exists
|
||||
|
||||
5. **Checks package.json**
|
||||
- Verify required dependencies are installed
|
||||
- Identify missing packages
|
||||
|
||||
6. **Counts tests**
|
||||
- How many test files exist
|
||||
- Coverage for each component
|
||||
|
||||
---
|
||||
|
||||
## Output Format
|
||||
|
||||
**Generates story with:**
|
||||
|
||||
1. ✅ Standard BMAD 5 sections (Story, AC, Tasks, Dev Notes, Dev Agent Record)
|
||||
2. ✅ Enhanced Dev Notes with verified gap analysis subsections:
|
||||
- Gap Analysis: Current State vs Requirements
|
||||
- Library/Framework Requirements (from package.json)
|
||||
- File Structure Requirements (from Glob results)
|
||||
- Testing Requirements (from test file count)
|
||||
- Architecture Compliance
|
||||
- Previous Story Intelligence
|
||||
|
||||
3. ✅ Truthful checkboxes based on verified file existence
|
||||
|
||||
---
|
||||
|
||||
## Difference from Standard /create-story
|
||||
|
||||
| Feature | /create-story | /create-story-with-gap-analysis |
|
||||
|---------|---------------|--------------------------------|
|
||||
| Reads previous story | ✅ | ✅ |
|
||||
| Reads git commits | ✅ | ✅ |
|
||||
| Loads epic context | ✅ | ✅ |
|
||||
| **Scans codebase with Glob** | ❌ | ✅ SYSTEMATIC |
|
||||
| **Verifies files exist** | ❌ | ✅ VERIFIED |
|
||||
| **Reads files to check depth** | ❌ | ✅ MOCKED vs REAL |
|
||||
| **Checks package.json** | ❌ | ✅ DEPENDENCIES |
|
||||
| **Counts test coverage** | ❌ | ✅ COVERAGE |
|
||||
| Gap analysis quality | Variable (agent-dependent) | Systematic (tool-verified) |
|
||||
| Checkbox accuracy | Inference-based | File-existence-based |
|
||||
|
||||
---
|
||||
|
||||
## When to Use
|
||||
|
||||
**This workflow (planning-time gap analysis):**
|
||||
- Use when regenerating/auditing stories
|
||||
- Use when you want verified checkboxes upfront
|
||||
- Best for stories that will be implemented immediately
|
||||
- Manual verification at planning time
|
||||
|
||||
**Standard /create-story + /dev-story (dev-time gap analysis):**
|
||||
- Recommended for most workflows
|
||||
- Stories start as DRAFT, validated when dev begins
|
||||
- Prevents staleness in batch planning
|
||||
- Automatic verification at development time
|
||||
|
||||
**Use standard /create-story when:**
|
||||
- Greenfield project (nothing exists yet)
|
||||
- Backlog stories (won't be implemented for months)
|
||||
- Epic planning phase (just sketching ideas)
|
||||
|
||||
**Tip:** Both approaches are complementary. You can use this workflow to regenerate stories, then use `/dev-story` which will re-validate at dev-time.
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
**Regenerating Story 1.9:**
|
||||
```bash
|
||||
/create-story-with-gap-analysis
|
||||
|
||||
Choice: 1.9
|
||||
|
||||
# Workflow will:
|
||||
# 1. Load existing 1-9-admin-user-service-bridgeid-rbac.md
|
||||
# 2. Identify target: apps/backend/admin-user-service/
|
||||
# 3. Glob: apps/backend/admin-user-service/src/**/*.ts (finds 47 files)
|
||||
# 4. Check: src/auth/controllers/bridgeid-auth.controller.ts → ❌ MISSING
|
||||
# 5. Read: src/bridgeid/services/bridgeid-client.service.ts → ⚠️ MOCKED
|
||||
# 6. Read: package.json → axios ❌ NOT INSTALLED
|
||||
# 7. Generate gap analysis with verified status
|
||||
# 8. Write story with truthful checkboxes
|
||||
```
|
||||
|
||||
**Result:** Story with verified gap analysis showing:
|
||||
- ✅ 7 components IMPLEMENTED (verified file existence)
|
||||
- ❌ 6 components MISSING (verified file not found)
|
||||
- ⚠️ 1 component PARTIAL (file exists but contains "MOCK")
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
This workflow is auto-discovered when BMAD is installed.
|
||||
|
||||
**To use:**
|
||||
```bash
|
||||
/bmad:bmm:workflows:create-story-with-gap-analysis
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** December 27, 2025
|
||||
**Status:** Integrated into BMAD-METHOD
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
# Step 1: Initialize and Extract Story Requirements
|
||||
|
||||
## Goal
|
||||
Load epic context and identify what needs to be scanned in the codebase.
|
||||
|
||||
## Execution
|
||||
|
||||
### 1. Determine Story to Create
|
||||
|
||||
**Ask user:**
|
||||
```
|
||||
Which story should I regenerate with gap analysis?
|
||||
|
||||
Options:
|
||||
1. Provide story number (e.g., "1.9" or "1-9")
|
||||
2. Provide story filename (e.g., "1-9-admin-user-service-bridgeid-rbac.md")
|
||||
|
||||
Your choice:
|
||||
```
|
||||
|
||||
**Parse input:**
|
||||
- Extract epic_num (e.g., "1")
|
||||
- Extract story_num (e.g., "9")
|
||||
- Locate story file: `docs/sprint-artifacts/{epic_num}-{story_num}-*.md`
|
||||
|
||||
### 2. Load Existing Story Content
|
||||
|
||||
```bash
|
||||
Read: docs/sprint-artifacts/{epic_num}-{story_num}-*.md
|
||||
```
|
||||
|
||||
**Extract from existing story:**
|
||||
- Story title
|
||||
- User story text (As a... I want... So that...)
|
||||
- Acceptance criteria (the requirements, not checkboxes)
|
||||
- Any existing Dev Notes or technical context
|
||||
|
||||
**Store for later use.**
|
||||
|
||||
### 3. Load Epic Context
|
||||
|
||||
```bash
|
||||
Glob: docs/archive/planning-round-1-greenfield/epics/epic-{epic_num}-*.md
|
||||
Read: [found epic file]
|
||||
```
|
||||
|
||||
**Extract from epic:**
|
||||
- Epic business objectives
|
||||
- This story's original requirements
|
||||
- Technical constraints
|
||||
- Dependencies on other stories
|
||||
|
||||
### 4. Determine Target Directories
|
||||
|
||||
**From story title and requirements, identify:**
|
||||
- Which service/app this story targets
|
||||
- Which directories to scan
|
||||
|
||||
**Examples:**
|
||||
- "admin-user-service" → `apps/backend/admin-user-service/`
|
||||
- "Widget Batch 1" → `packages/widgets/`
|
||||
- "POE Integration" → `apps/frontend/web/`
|
||||
|
||||
**Store target directories for Step 2 codebase scan.**
|
||||
|
||||
### 5. Ready for Codebase Scan
|
||||
|
||||
**Output:**
|
||||
```
|
||||
✅ Story Context Loaded
|
||||
|
||||
Story: {epic_num}.{story_num} - {title}
|
||||
Target directories identified:
|
||||
- {directory_1}
|
||||
- {directory_2}
|
||||
|
||||
Ready to scan codebase for gap analysis.
|
||||
|
||||
[C] Continue to Codebase Scan
|
||||
```
|
||||
|
||||
**WAIT for user to select Continue.**
|
||||
|
|
@ -0,0 +1,184 @@
|
|||
# Step 2: Systematic Codebase Gap Analysis
|
||||
|
||||
## Goal
|
||||
VERIFY what code actually exists vs what's missing using Glob and Read tools.
|
||||
|
||||
## CRITICAL
|
||||
This step uses ACTUAL file system tools to generate TRUTHFUL gap analysis.
|
||||
No guessing. No inference. VERIFY with tools.
|
||||
|
||||
## Execution
|
||||
|
||||
### 1. Scan Target Directories
|
||||
|
||||
**For each target directory identified in Step 1:**
|
||||
|
||||
```bash
|
||||
# List all TypeScript files
|
||||
Glob: {target_dir}/src/**/*.ts
|
||||
Glob: {target_dir}/src/**/*.tsx
|
||||
|
||||
# Store file list
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```
|
||||
📁 Codebase Scan Results for {target_dir}
|
||||
|
||||
Found {count} TypeScript files:
|
||||
- {file1}
|
||||
- {file2}
|
||||
...
|
||||
```
|
||||
|
||||
### 2. Check for Specific Required Components
|
||||
|
||||
**Based on story Acceptance Criteria, check if required files exist:**
|
||||
|
||||
**Example for Auth Story:**
|
||||
```bash
|
||||
# Check for OAuth endpoints
|
||||
Glob: {target_dir}/src/auth/controllers/*bridgeid*.ts
|
||||
Result: ❌ MISSING (0 files found)
|
||||
|
||||
# Check for BridgeID client
|
||||
Glob: {target_dir}/src/bridgeid/**/*.ts
|
||||
Result: ✅ EXISTS (found: bridgeid-client.service.ts, bridgeid-sync.service.ts)
|
||||
|
||||
# Check for permission guards
|
||||
Glob: {target_dir}/src/auth/guards/permissions*.ts
|
||||
Result: ❌ MISSING (0 files found)
|
||||
|
||||
# Check for decorators
|
||||
Glob: {target_dir}/src/auth/decorators/*permission*.ts
|
||||
Result: ❌ MISSING (0 files found)
|
||||
```
|
||||
|
||||
### 3. Verify Implementation Depth
|
||||
|
||||
**For files that exist, read them to check if MOCKED or REAL:**
|
||||
|
||||
```bash
|
||||
# Read key implementation file
|
||||
Read: {target_dir}/src/bridgeid/services/bridgeid-client.service.ts
|
||||
|
||||
# Search for indicators:
|
||||
- Contains "MOCK" or "mock" → ⚠️ MOCKED (needs real implementation)
|
||||
- Contains "TODO" → ⚠️ INCOMPLETE
|
||||
- Contains real HTTP client (axios) → ✅ IMPLEMENTED
|
||||
```
|
||||
|
||||
### 4. Check Dependencies
|
||||
|
||||
```bash
|
||||
# Read package.json
|
||||
Read: {target_dir}/package.json
|
||||
|
||||
# Verify required dependencies exist:
|
||||
Required: axios
|
||||
Found in package.json? → ❌ NO (needs to be added)
|
||||
|
||||
Required: @aws-sdk/client-secrets-manager
|
||||
Found in package.json? → ❌ NO (needs to be added)
|
||||
```
|
||||
|
||||
### 5. Check Test Coverage
|
||||
|
||||
```bash
|
||||
# Find test files
|
||||
Glob: {target_dir}/src/**/*.spec.ts
|
||||
Glob: {target_dir}/test/**/*.test.ts
|
||||
|
||||
# Count tests
|
||||
Found {test_count} test files
|
||||
|
||||
# Check for specific test coverage
|
||||
Glob: {target_dir}/src/**/*bridgeid*.spec.ts
|
||||
Result: ✅ EXISTS (found 3 test files)
|
||||
```
|
||||
|
||||
### 6. Generate Truthful Gap Analysis
|
||||
|
||||
**Create structured gap analysis:**
|
||||
|
||||
```markdown
|
||||
## Gap Analysis: Current State vs Requirements
|
||||
|
||||
**✅ IMPLEMENTED (Verified by Codebase Scan):**
|
||||
|
||||
1. **BridgeID Client Infrastructure** - MOCKED (needs real HTTP)
|
||||
- File: src/bridgeid/services/bridgeid-client.service.ts ✅ EXISTS
|
||||
- Implementation: Mock user data with circuit breaker
|
||||
- Status: ⚠️ PARTIAL - Ready for real HTTP client
|
||||
- Tests: 15 tests passing ✅
|
||||
|
||||
2. **User Synchronization Service**
|
||||
- File: src/bridgeid/services/bridgeid-sync.service.ts ✅ EXISTS
|
||||
- Implementation: Bulk sync BridgeID → admin_users
|
||||
- Status: ✅ COMPLETE
|
||||
- Tests: 6 tests passing ✅
|
||||
|
||||
3. **Role Mapping Logic**
|
||||
- File: src/bridgeid/constants/role-mapping.constants.ts ✅ EXISTS
|
||||
- Implementation: 7-tier role mapping with priority selection
|
||||
- Status: ✅ COMPLETE
|
||||
- Tests: 10 tests passing ✅
|
||||
|
||||
**❌ MISSING (Required for AC Completion):**
|
||||
|
||||
1. **BridgeID OAuth Endpoints**
|
||||
- File: src/auth/controllers/bridgeid-auth.controller.ts ❌ NOT FOUND
|
||||
- Need: POST /api/auth/bridgeid/login endpoint
|
||||
- Need: GET /api/auth/bridgeid/callback endpoint
|
||||
- Status: ❌ NOT IMPLEMENTED
|
||||
|
||||
2. **Permission Guards**
|
||||
- File: src/auth/guards/permissions.guard.ts ❌ NOT FOUND
|
||||
- File: src/auth/decorators/require-permissions.decorator.ts ❌ NOT FOUND
|
||||
- Status: ❌ NOT IMPLEMENTED
|
||||
|
||||
3. **Real OAuth HTTP Client**
|
||||
- Package: axios ❌ NOT in package.json
|
||||
- Package: @aws-sdk/client-secrets-manager ❌ NOT in package.json
|
||||
- Status: ❌ DEPENDENCIES NOT ADDED
|
||||
```
|
||||
|
||||
### 7. Update Acceptance Criteria Checkboxes
|
||||
|
||||
**Based on verified gap analysis, mark checkboxes:**
|
||||
|
||||
```markdown
|
||||
### AC1: BridgeID OAuth Integration
|
||||
- [ ] OAuth login endpoint (VERIFIED MISSING - file not found)
|
||||
- [ ] OAuth callback endpoint (VERIFIED MISSING - file not found)
|
||||
- [ ] Client configuration (VERIFIED PARTIAL - exists but mocked)
|
||||
|
||||
### AC3: RBAC Permission System
|
||||
- [x] Role mapping defined (VERIFIED COMPLETE - file exists, tests pass)
|
||||
- [ ] Permission guard (VERIFIED MISSING - file not found)
|
||||
- [ ] Permission decorator (VERIFIED MISSING - file not found)
|
||||
```
|
||||
|
||||
**Checkboxes are now FACTS, not guesses.**
|
||||
|
||||
### 8. Present Gap Analysis
|
||||
|
||||
**Output:**
|
||||
```
|
||||
✅ Codebase Scan Complete
|
||||
|
||||
Scanned: apps/backend/admin-user-service/
|
||||
Files found: 47 TypeScript files
|
||||
Tests found: 31 test files
|
||||
|
||||
Gap Analysis Generated:
|
||||
✅ 7 components IMPLEMENTED (verified)
|
||||
❌ 6 components MISSING (verified)
|
||||
⚠️ 1 component PARTIAL (needs completion)
|
||||
|
||||
Story checkboxes updated based on verified file existence.
|
||||
|
||||
[C] Continue to Story Generation
|
||||
```
|
||||
|
||||
**WAIT for user to continue.**
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
# Step 3: Generate Story with Verified Gap Analysis
|
||||
|
||||
## Goal
|
||||
Generate complete 7-section story file using verified gap analysis from Step 2.
|
||||
|
||||
## Execution
|
||||
|
||||
### 1. Load Template
|
||||
|
||||
```bash
|
||||
Read: _bmad/custom/workflows/create-story-with-gap-analysis/template.md
|
||||
```
|
||||
|
||||
### 2. Fill Template Variables
|
||||
|
||||
**Basic Story Info:**
|
||||
- `{{epic_num}}` - from Step 1
|
||||
- `{{story_num}}` - from Step 1
|
||||
- `{{story_title}}` - from existing story or epic
|
||||
- `{{priority}}` - from epic (P0, P1, P2)
|
||||
- `{{effort}}` - from epic or estimate
|
||||
|
||||
**Story Section:**
|
||||
- `{{role}}` - from existing story
|
||||
- `{{action}}` - from existing story
|
||||
- `{{benefit}}` - from existing story
|
||||
|
||||
**Business Context:**
|
||||
- `{{business_value}}` - from epic context
|
||||
- `{{scale_requirements}}` - from epic/architecture
|
||||
- `{{compliance_requirements}}` - from epic/architecture
|
||||
- `{{urgency}}` - from epic priority
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- `{{acceptance_criteria}}` - from epic + existing story
|
||||
- Update checkboxes based on Step 2 gap analysis:
|
||||
- [x] = Component verified EXISTS
|
||||
- [ ] = Component verified MISSING
|
||||
- [~] = Component verified PARTIAL (optional notation)
|
||||
|
||||
**Tasks / Subtasks:**
|
||||
- `{{tasks_subtasks}}` - from epic + existing story
|
||||
- Add "✅ DONE", "⚠️ PARTIAL", "❌ TODO" markers based on gap analysis
|
||||
|
||||
**Gap Analysis Section:**
|
||||
- `{{implemented_components}}` - from Step 2 codebase scan (verified ✅)
|
||||
- `{{missing_components}}` - from Step 2 codebase scan (verified ❌)
|
||||
- `{{partial_components}}` - from Step 2 codebase scan (verified ⚠️)
|
||||
|
||||
**Architecture Compliance:**
|
||||
- `{{architecture_patterns}}` - from architecture doc + playbooks
|
||||
- Multi-tenant isolation requirements
|
||||
- Caching strategies
|
||||
- Error handling patterns
|
||||
- Performance requirements
|
||||
|
||||
**Library/Framework Requirements:**
|
||||
- `{{current_dependencies}}` - from Step 2 package.json scan
|
||||
- `{{required_dependencies}}` - missing deps identified in Step 2
|
||||
|
||||
**File Structure:**
|
||||
- `{{existing_files}}` - from Step 2 Glob results (verified ✅)
|
||||
- `{{required_files}}` - from gap analysis (verified ❌)
|
||||
|
||||
**Testing Requirements:**
|
||||
- `{{test_count}}` - from Step 2 test file count
|
||||
- `{{required_tests}}` - based on missing components
|
||||
- `{{coverage_target}}` - from architecture or default 90%
|
||||
|
||||
**Dev Agent Guardrails:**
|
||||
- `{{guardrails}}` - from playbooks + previous story lessons
|
||||
- What NOT to do
|
||||
- Common mistakes to avoid
|
||||
|
||||
**Previous Story Intelligence:**
|
||||
- `{{previous_story_learnings}}` - from Step 1 previous story Dev Agent Record
|
||||
|
||||
**Project Structure Notes:**
|
||||
- `{{structure_alignment}}` - from architecture compliance
|
||||
|
||||
**References:**
|
||||
- `{{references}}` - Links to epic, architecture, playbooks, related stories
|
||||
|
||||
**Definition of Done:**
|
||||
- Standard DoD checklist with story-specific coverage target
|
||||
|
||||
### 3. Generate Complete Story
|
||||
|
||||
**Write filled template:**
|
||||
```bash
|
||||
Write: docs/sprint-artifacts/{{epic_num}}-{{story_num}}-{{slug}}.md
|
||||
[Complete 7-section story with verified gap analysis]
|
||||
```
|
||||
|
||||
### 4. Validate Generated Story
|
||||
|
||||
```bash
|
||||
# Check section count
|
||||
grep "^## " docs/sprint-artifacts/{{story_file}} | wc -l
|
||||
# Should output: 7
|
||||
|
||||
# Check for gap analysis
|
||||
grep -q "Gap Analysis.*Current State" docs/sprint-artifacts/{{story_file}}
|
||||
# Should find it
|
||||
|
||||
# Run custom validation
|
||||
./scripts/validate-bmad-format.sh docs/sprint-artifacts/{{story_file}}
|
||||
# Update script to expect 7 sections + gap analysis subsection
|
||||
```
|
||||
|
||||
### 5. Update Sprint Status
|
||||
|
||||
```bash
|
||||
Read: docs/sprint-artifacts/sprint-status.yaml
|
||||
|
||||
# Find story entry
|
||||
# Update status to "ready-for-dev" if was "backlog"
|
||||
# Preserve all comments and structure
|
||||
|
||||
Write: docs/sprint-artifacts/sprint-status.yaml
|
||||
```
|
||||
|
||||
### 6. Report Completion
|
||||
|
||||
**Output:**
|
||||
```
|
||||
✅ Story {{epic_num}}.{{story_num}} Regenerated with Gap Analysis
|
||||
|
||||
File: docs/sprint-artifacts/{{story_file}}
|
||||
Sections: 7/7 ✅
|
||||
Gap Analysis: VERIFIED with codebase scan
|
||||
|
||||
Summary:
|
||||
✅ {{implemented_count}} components IMPLEMENTED (verified by file scan)
|
||||
❌ {{missing_count}} components MISSING (verified file not found)
|
||||
⚠️ {{partial_count}} components PARTIAL (file exists but mocked/incomplete)
|
||||
|
||||
Checkboxes in ACs and Tasks reflect VERIFIED status (not guesses).
|
||||
|
||||
Next Steps:
|
||||
1. Review story file for accuracy
|
||||
2. Use /dev-story to implement missing components
|
||||
3. Story provides complete context for flawless implementation
|
||||
|
||||
Story is ready for development. 🚀
|
||||
```
|
||||
|
||||
### 7. Cleanup
|
||||
|
||||
**Ask user:**
|
||||
```
|
||||
Story regeneration complete!
|
||||
|
||||
Would you like to:
|
||||
[N] Regenerate next story ({{next_story_num}})
|
||||
[Q] Quit workflow
|
||||
[R] Review generated story first
|
||||
|
||||
Your choice:
|
||||
```
|
||||
|
||||
**If N selected:** Loop back to Step 1 with next story number
|
||||
**If Q selected:** End workflow
|
||||
**If R selected:** Display story file, then show menu again
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
**Story generation succeeds when:**
|
||||
1. ✅ 7 top-level ## sections present
|
||||
2. ✅ Gap Analysis subsection exists with ✅/❌/⚠️ verified status
|
||||
3. ✅ Checkboxes match codebase reality (spot-checked)
|
||||
4. ✅ Dev Notes has all mandatory subsections
|
||||
5. ✅ Definition of Done checklist included
|
||||
6. ✅ File saved to correct location
|
||||
7. ✅ Sprint status updated
|
||||
|
||||
---
|
||||
|
||||
**WORKFLOW COMPLETE - Ready to execute.**
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
# Story {{epic_num}}.{{story_num}}: {{story_title}}
|
||||
|
||||
**Status:** ready-for-dev
|
||||
**Epic:** {{epic_num}}
|
||||
**Priority:** {{priority}}
|
||||
**Estimated Effort:** {{effort}}
|
||||
|
||||
---
|
||||
|
||||
## Story
|
||||
|
||||
As a **{{role}}**,
|
||||
I want to **{{action}}**,
|
||||
So that **{{benefit}}**.
|
||||
|
||||
---
|
||||
|
||||
## Business Context
|
||||
|
||||
### Why This Matters
|
||||
|
||||
{{business_value}}
|
||||
|
||||
### Production Reality
|
||||
|
||||
{{scale_requirements}}
|
||||
{{compliance_requirements}}
|
||||
{{urgency}}
|
||||
|
||||
---
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
{{acceptance_criteria}}
|
||||
|
||||
---
|
||||
|
||||
## Tasks / Subtasks
|
||||
|
||||
{{tasks_subtasks}}
|
||||
|
||||
---
|
||||
|
||||
## Dev Notes
|
||||
|
||||
### Gap Analysis: Current State vs Requirements
|
||||
|
||||
**✅ IMPLEMENTED (Verified by Codebase Scan):**
|
||||
|
||||
{{implemented_components}}
|
||||
|
||||
**❌ MISSING (Required for AC Completion):**
|
||||
|
||||
{{missing_components}}
|
||||
|
||||
**⚠️ PARTIAL (Needs Enhancement):**
|
||||
|
||||
{{partial_components}}
|
||||
|
||||
### Architecture Compliance
|
||||
|
||||
{{architecture_patterns}}
|
||||
|
||||
### Library/Framework Requirements
|
||||
|
||||
**Current Dependencies:**
|
||||
```json
|
||||
{{current_dependencies}}
|
||||
```
|
||||
|
||||
**Required Additions:**
|
||||
```json
|
||||
{{required_dependencies}}
|
||||
```
|
||||
|
||||
### File Structure Requirements
|
||||
|
||||
**Completed Files:**
|
||||
```
|
||||
{{existing_files}}
|
||||
```
|
||||
|
||||
**Required New Files:**
|
||||
```
|
||||
{{required_files}}
|
||||
```
|
||||
|
||||
### Testing Requirements
|
||||
|
||||
**Current Test Coverage:** {{test_count}} tests passing
|
||||
|
||||
**Required Additional Tests:**
|
||||
{{required_tests}}
|
||||
|
||||
**Target:** {{coverage_target}}
|
||||
|
||||
### Dev Agent Guardrails
|
||||
|
||||
{{guardrails}}
|
||||
|
||||
### Previous Story Intelligence
|
||||
|
||||
{{previous_story_learnings}}
|
||||
|
||||
### Project Structure Notes
|
||||
|
||||
{{structure_alignment}}
|
||||
|
||||
### References
|
||||
|
||||
{{references}}
|
||||
|
||||
---
|
||||
|
||||
## Definition of Done
|
||||
|
||||
### Code Quality (BLOCKING)
|
||||
- [ ] Type check passes: `pnpm type-check` (zero errors)
|
||||
- [ ] Zero `any` types in new code
|
||||
- [ ] Lint passes: `pnpm lint` (zero errors in new code)
|
||||
- [ ] Build succeeds: `pnpm build`
|
||||
|
||||
### Testing (BLOCKING)
|
||||
- [ ] Unit tests: {{coverage_target}} coverage
|
||||
- [ ] Integration tests: Key workflows validated
|
||||
- [ ] All tests pass: New + existing (zero regressions)
|
||||
|
||||
### Security (BLOCKING)
|
||||
- [ ] Dependency scan: `pnpm audit` (zero high/critical)
|
||||
- [ ] No hardcoded secrets
|
||||
- [ ] Input validation on all endpoints
|
||||
- [ ] Auth checks on protected endpoints
|
||||
- [ ] Audit logging on mutations
|
||||
|
||||
### Architecture Compliance (BLOCKING)
|
||||
- [ ] Multi-tenant isolation: dealerId in all queries
|
||||
- [ ] Cache namespacing: Cache keys include siteId
|
||||
- [ ] Performance: External APIs cached, no N+1 queries
|
||||
- [ ] Error handling: No silent failures
|
||||
- [ ] Follows patterns from playbooks
|
||||
|
||||
### Deployment Validation (BLOCKING)
|
||||
- [ ] Service starts: `pnpm dev` runs successfully
|
||||
- [ ] Health check: `/health` returns 200
|
||||
- [ ] Smoke test: Primary functionality verified
|
||||
|
||||
### Documentation (BLOCKING)
|
||||
- [ ] API docs: Swagger decorators on endpoints
|
||||
- [ ] Inline comments: Complex logic explained
|
||||
- [ ] Story file: Dev Agent Record complete
|
||||
|
||||
---
|
||||
|
||||
## Dev Agent Record
|
||||
|
||||
### Agent Model Used
|
||||
|
||||
(To be filled by dev agent)
|
||||
|
||||
### Implementation Summary
|
||||
|
||||
(To be filled by dev agent)
|
||||
|
||||
### File List
|
||||
|
||||
(To be filled by dev agent)
|
||||
|
||||
### Test Results
|
||||
|
||||
(To be filled by dev agent)
|
||||
|
||||
### Completion Notes
|
||||
|
||||
(To be filled by dev agent)
|
||||
|
||||
---
|
||||
|
||||
**Generated by:** /create-story-with-gap-analysis
|
||||
**Date:** {{date}}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
name: create-story-with-gap-analysis
|
||||
description: "Create/regenerate story with SYSTEMATIC codebase gap analysis using verified file scanning (Glob/Read tools)"
|
||||
author: "Jonah Schulte"
|
||||
|
||||
# Critical variables from config
|
||||
config_source: "{project-root}/_bmad/bmm/config.yaml"
|
||||
user_name: "{config_source}:user_name"
|
||||
communication_language: "{config_source}:communication_language"
|
||||
date: system-generated
|
||||
implementation_artifacts: "{config_source}:implementation_artifacts"
|
||||
output_folder: "{implementation_artifacts}"
|
||||
story_dir: "{implementation_artifacts}"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/create-story-with-gap-analysis"
|
||||
template: "{installed_path}/template.md"
|
||||
instructions: "{installed_path}/step-01-initialize.md"
|
||||
|
||||
# Variables and inputs
|
||||
variables:
|
||||
sprint_status: "{implementation_artifacts}/sprint-status.yaml"
|
||||
epics_file: "{output_folder}/epics.md"
|
||||
prd_file: "{output_folder}/PRD.md"
|
||||
|
||||
# Project context
|
||||
project_context: "**/project-context.md"
|
||||
|
||||
default_output_file: "{story_dir}/{{story_key}}.md"
|
||||
|
||||
# Workflow steps (processed in order)
|
||||
steps:
|
||||
- step-01-initialize.md
|
||||
- step-02-codebase-scan.md
|
||||
- step-03-generate-story.md
|
||||
|
||||
standalone: true
|
||||
|
||||
web_bundle: false
|
||||
|
|
@ -217,6 +217,20 @@
|
|||
|
||||
</output>
|
||||
|
||||
<!-- CHECK FOR AUTONOMOUS MODE - Skip prompt if auto_accept_gap_analysis is true -->
|
||||
<check if="{{auto_accept_gap_analysis}} == true">
|
||||
<output>⚡ **Auto-accepting gap analysis refinements** (autonomous mode)</output>
|
||||
<action>Update story file with refined tasks in Tasks/Subtasks section</action>
|
||||
<action>Add new "Gap Analysis" section to story file with findings:
|
||||
- Scan timestamp
|
||||
- What Exists summary
|
||||
- What's Missing summary
|
||||
- Task changes applied
|
||||
</action>
|
||||
<action>Add Change Log entry: "Tasks refined based on codebase gap analysis - auto-accepted ({{date}})"</action>
|
||||
<goto step="2" />
|
||||
</check>
|
||||
|
||||
<ask>**Approve these task updates?**
|
||||
|
||||
Options:
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ implementation_artifacts: "{config_source}:implementation_artifacts"
|
|||
sprint_status: "{implementation_artifacts}/sprint-status.yaml"
|
||||
project_context: "**/project-context.md"
|
||||
|
||||
# Autonomous mode settings (passed from parent workflow like autonomous-epic)
|
||||
auto_accept_gap_analysis: false # When true, skip gap analysis approval prompt
|
||||
|
||||
standalone: true
|
||||
|
||||
web_bundle: false
|
||||
|
|
|
|||
|
|
@ -2,8 +2,19 @@
|
|||
<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>📝 PUSH-ALL - Stage, commit, and push all changes with comprehensive safety validation</critical>
|
||||
<critical>⚠️ Use with caution - commits ALL repository changes</critical>
|
||||
<critical>📝 PUSH-ALL - Stage, commit, and push changes with comprehensive safety validation</critical>
|
||||
|
||||
<!-- TARGETED vs ALL FILES MODE -->
|
||||
<critical>⚡ PARALLEL AGENT MODE: When {{target_files}} is provided:
|
||||
- ONLY stage and commit the specified files
|
||||
- Do NOT use `git add .` or `git add -A`
|
||||
- Use `git add [specific files]` instead
|
||||
- This prevents committing work from other parallel agents
|
||||
</critical>
|
||||
<critical>📋 ALL FILES MODE: When {{target_files}} is empty:
|
||||
- Stage ALL changes with `git add .`
|
||||
- Original behavior for single-agent execution
|
||||
</critical>
|
||||
|
||||
<step n="1" goal="Analyze repository changes">
|
||||
<output>🔄 **Analyzing Repository Changes**
|
||||
|
|
@ -257,14 +268,34 @@
|
|||
</step>
|
||||
|
||||
<step n="4" goal="Stage changes">
|
||||
<action>Execute: git add .</action>
|
||||
<action>Execute: git status</action>
|
||||
<!-- TARGETED MODE: Only stage specified files -->
|
||||
<check if="{{target_files}} is provided and not empty">
|
||||
<output>📎 **Targeted Commit Mode** (parallel agent safe)
|
||||
|
||||
<output>✅ **All Changes Staged**
|
||||
Staging only files from this story/task:
|
||||
{{target_files}}
|
||||
</output>
|
||||
<action>Execute: git add {{target_files}}</action>
|
||||
<action>Execute: git status</action>
|
||||
<output>✅ **Targeted Files Staged**
|
||||
|
||||
Ready for commit:
|
||||
{{list_staged_files}}
|
||||
</output>
|
||||
Ready for commit ({{target_file_count}} files):
|
||||
{{list_staged_files}}
|
||||
|
||||
Note: Other uncommitted changes in repo are NOT included.
|
||||
</output>
|
||||
</check>
|
||||
|
||||
<!-- ALL FILES MODE: Original behavior -->
|
||||
<check if="{{target_files}} is empty or not provided">
|
||||
<action>Execute: git add .</action>
|
||||
<action>Execute: git status</action>
|
||||
<output>✅ **All Changes Staged**
|
||||
|
||||
Ready for commit:
|
||||
{{list_staged_files}}
|
||||
</output>
|
||||
</check>
|
||||
</step>
|
||||
|
||||
<step n="5" goal="Generate commit message">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
name: push-all
|
||||
description: "Stage all changes, create commit with safety checks, and push to remote - use with caution"
|
||||
description: "Stage changes, create commit with safety checks, and push to remote"
|
||||
author: "BMad"
|
||||
|
||||
# Critical variables from config
|
||||
|
|
@ -11,6 +11,12 @@ communication_language: "{config_source}:communication_language"
|
|||
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/push-all"
|
||||
instructions: "{installed_path}/instructions.xml"
|
||||
|
||||
# Target files to commit (for parallel agent execution)
|
||||
# When empty/not provided: commits ALL changes (original behavior)
|
||||
# When provided: only commits the specified files (safe for parallel agents)
|
||||
target_files: "" # Space-separated list of file paths, or empty for all
|
||||
story_key: "" # Optional: story identifier for commit message context
|
||||
|
||||
standalone: true
|
||||
|
||||
web_bundle: false
|
||||
|
|
|
|||
|
|
@ -75,10 +75,33 @@ development_status:
|
|||
- Check: `{story_location_absolute}/{story-key}.md` (e.g., `stories/1-1-user-authentication.md`)
|
||||
- If exists → upgrade status to at least `ready-for-dev`
|
||||
|
||||
**Story file status sync (CRITICAL):**
|
||||
|
||||
- If story file exists, read the `Status:` field from the story markdown header
|
||||
- Common status field patterns: `Status: done`, `Status: review`, `Status: in-progress`
|
||||
- If story file has a more advanced status than current sprint-status entry:
|
||||
- Update sprint-status to match the story file status
|
||||
- This ensures sprint-status stays in sync when stories are manually marked done
|
||||
|
||||
**Status priority order** (lowest to highest):
|
||||
1. `backlog` (no story file)
|
||||
2. `ready-for-dev` (story file exists)
|
||||
3. `in-progress` (developer working)
|
||||
4. `review` (code review pending)
|
||||
5. `done` (story complete)
|
||||
|
||||
**Preservation rule:**
|
||||
|
||||
- If existing `{status_file}` exists and has more advanced status, preserve it
|
||||
- Never downgrade status (e.g., don't change `done` to `ready-for-dev`)
|
||||
- Story file status is the **source of truth** - always sync from story file to sprint-status
|
||||
|
||||
**Epic status auto-detection:**
|
||||
|
||||
- After syncing all story statuses, calculate epic status:
|
||||
- If ALL stories in epic are `done` → set epic to `done`
|
||||
- If ANY story is `in-progress`, `review`, or `done` → set epic to `in-progress`
|
||||
- Otherwise → keep epic as `backlog`
|
||||
|
||||
**Status Flow Reference:**
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,8 @@
|
|||
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{story_file}}" />
|
||||
<note>Pass through any user-provided story file path</note>
|
||||
<input name="auto_accept_gap_analysis" value="{{auto_accept_gap_analysis}}" />
|
||||
<note>Pass through any user-provided story file path and auto-accept setting</note>
|
||||
</invoke-workflow>
|
||||
|
||||
<check if="dev-story completed successfully">
|
||||
|
|
@ -113,6 +114,7 @@
|
|||
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{story_file}}" />
|
||||
<input name="auto_accept_gap_analysis" value="{{auto_accept_gap_analysis}}" />
|
||||
<note>Resume with added tasks for missing work</note>
|
||||
</invoke-workflow>
|
||||
|
||||
|
|
@ -167,6 +169,7 @@
|
|||
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{story_file}}" />
|
||||
<input name="auto_accept_gap_analysis" value="{{auto_accept_gap_analysis}}" />
|
||||
<note>Fix code review issues</note>
|
||||
</invoke-workflow>
|
||||
|
||||
|
|
@ -186,6 +189,7 @@
|
|||
<action>Add review findings as tasks</action>
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml">
|
||||
<input name="story_file" value="{{story_file}}" />
|
||||
<input name="auto_accept_gap_analysis" value="{{auto_accept_gap_analysis}}" />
|
||||
</invoke-workflow>
|
||||
</check>
|
||||
|
||||
|
|
@ -208,16 +212,28 @@
|
|||
<!-- STEP 4: PUSH ALL CHANGES (Super-Dev Enhancement) -->
|
||||
<!-- ═══════════════════════════════════════════════════════════════ -->
|
||||
|
||||
<step n="4" goal="Commit and push all changes">
|
||||
<step n="4" goal="Commit and push story changes">
|
||||
<critical>📝 PUSH-ALL - Stage, commit, and push with safety validation</critical>
|
||||
<critical>⚡ TARGETED COMMIT: Only commit files from THIS story's File List (safe for parallel agents)</critical>
|
||||
|
||||
<output>📝 **Committing and Pushing Story Changes**
|
||||
<!-- Extract File List from story file -->
|
||||
<action>Read story file and extract the "File List" section</action>
|
||||
<action>Parse all file paths listed (relative to repo root)</action>
|
||||
<action>Also include the story file itself in the list</action>
|
||||
<action>Store as {{story_files}} - space-separated list of all files</action>
|
||||
|
||||
Running push-all workflow with safety checks...
|
||||
<output>📝 **Committing Story Changes**
|
||||
|
||||
Files from this story:
|
||||
{{story_files}}
|
||||
|
||||
Running push-all with targeted file list (parallel-agent safe)...
|
||||
</output>
|
||||
|
||||
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/4-implementation/push-all/workflow.yaml">
|
||||
<note>Commit and push all story changes</note>
|
||||
<input name="target_files" value="{{story_files}}" />
|
||||
<input name="story_key" value="{{story_key}}" />
|
||||
<note>Only commit files changed by this story</note>
|
||||
</invoke-workflow>
|
||||
|
||||
<check if="push-all succeeded">
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ super_dev_settings:
|
|||
fail_on_critical_issues: true
|
||||
max_fix_iterations: 3
|
||||
|
||||
# Autonomous mode settings (passed from parent workflow like autonomous-epic)
|
||||
auto_accept_gap_analysis: false # When true, skip gap analysis approval prompt
|
||||
|
||||
standalone: true
|
||||
|
||||
web_bundle: false
|
||||
|
|
|
|||
Loading…
Reference in New Issue