11 KiB
BMAD Workflow Improvements - Lessons from Batch Execution
Date: 2026-01-08 Context: Batch-super-dev tried to regenerate 14 skeleton stories but failed Root Cause: Agents cannot invoke workflows/skills in batch mode
Issue Summary
What Happened:
- Created 21 skeleton sub-story files (just headers + widget lists)
- Launched 14 agents via batch-super-dev to process them
- Agents correctly identified stories were incomplete (no tasks section)
- Agents correctly halted per super-dev-pipeline Step 1.4.5
- BUT: Batch-super-dev Step 2.5 says to "Invoke workflow: /bmad..." which agents can't do
- Result: 13/14 agents halted correctly, 1 somehow succeeded
The Problem:
- Workflows correctly validate and halt
- BUT batch-super-dev suggests agents can regenerate stories
- Agents CANNOT execute
/commands or invoke workflows autonomously - This creates false expectations
Proposed Fixes
Fix 1: Update batch-super-dev Step 2.5 (Story Validation)
Current Code (lines 82-99):
<ask>Create story file with gap analysis? (yes/no):</ask>
<check if="response == 'yes'">
<output>Creating story {{story_key}} with codebase gap analysis...</output>
<action>Invoke workflow: /bmad:bmm:workflows:create-story-with-gap-analysis</action>
<action>Parameters: story_key={{story_key}}</action>
Problem:
- "Invoke workflow: /bmad..." doesn't work for agents
- Agents can't run slash commands
- This will always fail in batch mode
Recommended Fix:
<ask>Create story file with gap analysis? (yes/no):</ask>
<check if="response == 'yes'">
<check if="batch mode">
<output>
⚠️ CANNOT CREATE STORIES IN BATCH MODE
Agents cannot invoke workflows autonomously.
**Required Action:**
1. Exit batch-super-dev
2. Run manually: /create-story-with-gap-analysis
3. Specify story key: {{story_key}}
4. Re-run batch-super-dev after story created
Skipping story {{story_key}} from batch.
</output>
<action>Mark story for removal from selection</action>
<action>Add to skipped_stories with reason: "Story creation requires manual workflow"</action>
</check>
<check if="interactive mode">
<output>Creating story {{story_key}} with codebase gap analysis...</output>
<output>
⚠️ IMPORTANT: Story creation requires /create-story-with-gap-analysis workflow
This workflow cannot be invoked from within another workflow.
**Please run:**
/create-story-with-gap-analysis
Then return to this workflow.
</output>
<action>HALT - Cannot auto-invoke create-story workflow</action>
</check>
</check>
Why This Works:
- ✅ Explicitly states agents can't create stories in batch
- ✅ Tells user exactly what to do
- ✅ Prevents false expectations
- ✅ Provides clear halt message
Fix 2: Add Agent Limitations Section to batch-super-dev
Add new section after line 5:
<workflow>
<agent-limitations critical="true">
<limitation n="1">
<title>Agents Cannot Invoke Workflows</title>
<description>
Task agents running in batch mode cannot execute slash commands (/)
or invoke other BMAD workflows. If a story requires creation or
regeneration, the batch must halt and user must handle manually.
</description>
<impact>
Stories without proper BMAD format (12 sections, tasks) will be skipped
in batch execution. User must run /create-story-with-gap-analysis first.
</impact>
</limitation>
<limitation n="2">
<title>Agents Cannot Prompt User Interactively</title>
<description>
Batch agents run autonomously. They cannot ask user questions mid-execution.
All decisions must be pre-configured or stories will be skipped.
</description>
<impact>
Optional steps are auto-skipped. Ambiguous requirements cause halt.
</impact>
</limitation>
<limitation n="3">
<title>Skeleton Stories Will Be Skipped</title>
<description>
If a story file has <12 BMAD sections or 0 tasks, super-dev-pipeline
will correctly halt with "Nothing to implement" message. This is NOT
a bug - it's correct behavior. User must regenerate story first.
</description>
<impact>
Batch execution requires ALL stories to be properly formatted BEFORE
running batch-super-dev. Do not attempt batch regeneration.
</impact>
</limitation>
</agent-limitations>
<step n="1" goal="Load and parse sprint-status.yaml">
...
Why This Helps:
- ✅ Sets clear expectations upfront
- ✅ Explains why stories get skipped
- ✅ Prevents users from making same mistake I did
- ✅ Documents known limitations explicitly
Fix 3: Enhance super-dev-pipeline Step 1.4.5 (Pre-Flight Bailout)
Current Code (lines 94-105):
If total_task_count == 0:
Display:
⚠️ EARLY BAILOUT: No Tasks Found
Story file exists but has no tasks in Tasks/Subtasks section.
- Story may be incomplete or malformed
- Run create-story or validate-create-story first
HALT - Nothing to implement
Recommended Enhancement:
If total_task_count == 0:
Display:
⚠️ EARLY BAILOUT: No Tasks Found
Story file exists but has no tasks in Tasks/Subtasks section.
**Common Causes:**
1. Story file is a skeleton/template (not generated by /create-story)
2. Story file is missing BMAD sections
3. Story file was manually created without proper format
**This is NOT a pipeline bug** - this is correct validation behavior.
**Required Action:**
{if batch mode}
- Story will be SKIPPED from batch execution
- User must regenerate: /create-story-with-gap-analysis
- Then re-run batch for this story
{else}
- Run: /create-story-with-gap-analysis
- Specify story key: {story_key}
- Then re-run super-dev-pipeline
{endif}
**IMPORTANT FOR AGENTS:**
Do NOT attempt to regenerate the story yourself. Agents cannot invoke
the /create-story-with-gap-analysis workflow. Document this issue and
halt gracefully.
HALT - Nothing to implement
Why This Helps:
- ✅ Explains this is CORRECT behavior, not a bug
- ✅ Explicitly tells agents NOT to try regenerating
- ✅ Provides clear user action steps
- ✅ Different guidance for batch vs interactive mode
- ✅ Sets correct expectations
Fix 4: Add Pre-Batch Validation Recommendations
Add new document: _bmad/bmm/workflows/4-implementation/batch-super-dev/BATCH-BEST-PRACTICES.md
# Batch Super-Dev Best Practices
## Pre-Batch Checklist
**BEFORE running /batch-super-dev, verify:**
### ✅ All Story Files Exist
```bash
# Check all ready-for-dev stories have files
for story in $(grep "ready-for-dev" docs/sprint-artifacts/sprint-status.yaml | cut -d: -f1); do
if [ ! -f "docs/sprint-artifacts/story-$story.md" ]; then
echo "❌ Missing: $story"
fi
done
✅ All Stories Have Proper BMAD Format
Run validation script:
./scripts/validate-bmad-format.sh docs/sprint-artifacts/story-*.md
Required: All stories must show "✅ All 12 sections present"
✅ All Stories Have Tasks
# Check all stories have at least 1 task
for file in docs/sprint-artifacts/story-*.md; do
task_count=$(grep -c "^- \[ \]" "$file" 2>/dev/null || echo "0")
if [ "$task_count" -eq 0 ]; then
echo "❌ No tasks: $(basename $file)"
fi
done
Required: All stories must have unchecked tasks (something to implement)
Common Mistakes
❌ Mistake 1: Batch Regeneration
Don't:
# Create 20 skeleton story files
# Run batch-super-dev expecting agents to regenerate them
Why: Agents cannot invoke /create-story-with-gap-analysis workflow
Do Instead:
# Regenerate stories one at a time
for story in story-20-13a-{1..5}; do
/create-story-with-gap-analysis # Interactive, per story
done
# THEN run batch-super-dev
/batch-super-dev
❌ Mistake 2: Mixed Story Quality
Don't:
- Mix properly generated stories with skeleton templates
- Assume agents will "fix" incomplete stories
- Launch batch without validating story format
Do:
- Validate ALL stories before batch
- Regenerate any incomplete ones
- Ensure consistent quality
❌ Mistake 3: Assuming Agents Can Run / Commands
Don't:
- Tell agents to "Run /create-story"
- Expect agents to invoke other workflows
- Assume agents can execute user CLI commands
Do:
- Pre-generate all stories before batch
- Use batch ONLY for implementation, not planning
- Keep story creation separate from story execution
Success Patterns
✅ Pattern 1: Manual Create → Batch Execute
# Step 1: Create all stories manually (1-2 days)
/create-story-with-gap-analysis # For each of 20 stories
# Step 2: Validate all stories
./scripts/validate-all-stories.sh
# Step 3: Batch execute (parallel, fast)
/batch-super-dev # Select all 20 stories, run 4 agents
✅ Pattern 2: Incremental Batch Execution
# Execute stories in small batches as you create them
/create-story-with-gap-analysis # Create 5 stories
/batch-super-dev # Execute those 5 (filter by epic)
/create-story-with-gap-analysis # Create 5 more
/batch-super-dev # Execute those 5
✅ Pattern 3: Validation Before Batch
# Add to your workflow
validate_stories() {
for story in $@; do
if ! ./scripts/validate-bmad-format.sh "$story"; then
echo "❌ Story $story is not ready for batch"
echo "Run: /create-story-with-gap-analysis"
exit 1
fi
done
echo "✅ All stories validated, ready for batch"
}
validate_stories docs/sprint-artifacts/story-20-13*.md
/batch-super-dev
When to Use Batch vs Individual
Use Batch When:
- ✅ All stories properly formatted (12 sections, tasks present)
- ✅ Stories are independent (no complex dependencies)
- ✅ You want parallel execution (2-4 stories at once)
- ✅ Stories are similar complexity (all ~1 day effort)
Use Individual (/dev-story) When:
- ✅ Story needs interactive decisions
- ✅ Story is complex (>3 days effort)
- ✅ Story has complex dependencies
- ✅ You want close monitoring/control
DON'T Use Batch When:
- ❌ Stories are skeleton templates (not generated)
- ❌ Stories missing BMAD sections
- ❌ Mixed quality (some good, some incomplete)
- ❌ Need to create/regenerate stories
---
## Key Takeaway
**Batch-super-dev is for EXECUTION, not CREATION.**
Story creation is an interactive, context-heavy process that requires:
- User input on requirements
- Codebase scanning
- Gap analysis decisions
- Template generation
This cannot be reliably automated in batch mode. Always create stories first,
then batch execute them.
Location: _bmad/bmm/workflows/4-implementation/batch-super-dev/BATCH-BEST-PRACTICES.md