9.6 KiB
| title |
|---|
| Epic Workflows Improvement Plan v1 |
Epic Workflows Improvement Plan v1
Date: 2026-01-02 Workflows Reviewed: epic-execute, epic-chain Status: Active
Overview
This document captures the review findings and improvement roadmap for the epic-execute and epic-chain workflows. These workflows automate story execution with context isolation between development and review phases.
What's Working Well
1. Context Isolation Architecture
The decision to run dev and review in separate Claude contexts is the key innovation:
- Prevents reviewer bias from seeing implementation struggles
- Maximizes context window for each phase
- Simulates real code review where reviewers see code "cold"
- Uses git staging as the communication medium between phases
2. Severity-Based Fix Policy
The issue severity system (HIGH/MEDIUM/LOW) with threshold-based fixing is pragmatic:
- Prevents over-engineering on minor issues
- Ensures critical issues always get fixed
- Documents low-severity for future cleanup sprints
Location: step-03-code-review.md:17-27
3. Structured Documentation Trail
The Dev Agent Record and Code Review Record sections create an auditable history:
- Understanding why decisions were made
- Debugging issues later
- Training/improving the workflow
4. Chain Dependency Analysis
Epic-chain's analysis phase detecting both explicit and implicit dependencies shows good foresight.
Location: instructions.md:57-88
5. Shell Scripts Quality
- Clean argument parsing
- Proper error handling with
set -e - Good logging with timestamps
- Flexible story discovery (multiple naming conventions)
- Resume capability with
--start-from
Improvement Areas
HIGH Priority
1. Security: --dangerously-skip-permissions Flag
Location: epic-execute.sh:291-292
result=$(claude --dangerously-skip-permissions -p "$dev_prompt" 2>&1) || true
Problem: This bypasses safety checks and is concerning for production use.
Proposed Fix:
- Document the security implications clearly in README
- Add a
--require-approvalmode that doesn't use this flag - Have the script detect and prompt for dangerous operations
- Consider environment variable to explicitly opt-in:
BMAD_ALLOW_DANGEROUS=true
2. Missing Test Execution Validation
Location: epic-execute.sh (dev phase)
Problem: The dev prompt says "Run tests and fix any failures" but the shell script doesn't verify tests actually passed. The completion signal (IMPLEMENTATION COMPLETE) is trusted without validation.
Proposed Fix:
# After dev phase, before review
execute_test_verification() {
local test_cmd="${TEST_COMMAND:-npm test}"
log ">>> VERIFYING TESTS"
if ! $test_cmd 2>&1; then
log_error "Tests failing after dev phase"
return 1
fi
log_success "Tests passing"
return 0
}
3. Add Pre-flight Confirmation
Location: epic-execute.sh (after story discovery)
Problem: No validation step shows the user which stories will be executed before starting.
Proposed Fix:
# After discovering stories, before execution
display_execution_plan() {
echo ""
log "Execution Plan:"
for story in "${STORIES[@]}"; do
echo " - $(basename "$story")"
done
echo ""
if [ "$AUTO_APPROVE" != true ]; then
read -p "Proceed with execution? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log "Execution cancelled by user"
exit 0
fi
fi
}
MEDIUM Priority
4. Context Handoff is Placeholder
Location: epic-chain.sh:411-432
Problem: Current handoff only lists files changed:
$(git diff --name-only HEAD~${story_count} HEAD 2>/dev/null | head -20)
The documented template in instructions.md:288-312 describes rich context (patterns, decisions, gotchas) but this isn't generated.
Proposed Fix:
generate_rich_handoff() {
local epic_id="$1"
local next_epic="$2"
local handoff_file="$3"
local handoff_prompt="You are generating a context handoff document.
## Task
Create a handoff from Epic $epic_id to Epic $next_epic.
## Recently Modified Files
$(git diff --name-only HEAD~${story_count} HEAD 2>/dev/null)
## Epic Content
$(cat "${EPIC_FILES_LIST[$current_idx]}")
## Generate a handoff document with:
1. Patterns Established - coding conventions, architectural decisions
2. Key Decisions - major technical choices with rationale
3. Gotchas & Lessons Learned - issues encountered, workarounds
4. Files to Reference - key files that establish patterns
5. Test Patterns - testing conventions used
Output as markdown."
claude -p "$handoff_prompt" > "$handoff_file"
}
5. No Rollback Mechanism
Problem: If review fails or execution gets interrupted mid-story, there's no easy way to rollback.
Proposed Fix:
# At start of epic execution
create_checkpoint() {
CHECKPOINT=$(git rev-parse HEAD)
echo "$CHECKPOINT" > "/tmp/bmad-checkpoint-$EPIC_ID"
log "Checkpoint created: $CHECKPOINT"
}
# On failure or user abort
rollback_to_checkpoint() {
if [ -f "/tmp/bmad-checkpoint-$EPIC_ID" ]; then
local checkpoint=$(cat "/tmp/bmad-checkpoint-$EPIC_ID")
read -p "Rollback to checkpoint $checkpoint? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
git reset --hard "$checkpoint"
log_success "Rolled back to checkpoint"
fi
fi
}
6. Wire Up Configuration File
Location: config/default-config.yaml exists but isn't used
Problem: The configuration documented in workflow.md:104-122 isn't actually loaded by the shell script.
Proposed Fix:
# Load configuration
load_config() {
local config_file="$BMAD_DIR/_cfg/epic-execute.yaml"
if [ -f "$config_file" ]; then
# Parse YAML (requires yq or similar)
AUTO_COMMIT=$(yq '.auto_commit // true' "$config_file")
RUN_TESTS_BEFORE_REVIEW=$(yq '.run_tests_before_review // true' "$config_file")
REVIEW_MODE=$(yq '.review_mode // "standard"' "$config_file")
log "Loaded config from $config_file"
else
# Defaults
AUTO_COMMIT=true
RUN_TESTS_BEFORE_REVIEW=true
REVIEW_MODE="standard"
fi
}
7. Remove or Implement --parallel Flag
Location: epic-execute.sh:11, 93-96
Problem: The --parallel flag exists in argument parsing but isn't implemented.
Proposed Fix: Either:
- Remove the flag entirely until implemented
- Add a clear error:
log_error "--parallel not yet implemented" - Implement parallel execution for independent stories
LOW Priority
8. Prompt Duplication
Problem: Prompts are duplicated between step files (documentation) and shell script (execution).
Proposed Fix: Source prompts from step files:
build_dev_prompt() {
local story_file="$1"
local template="$WORKFLOW_DIR/steps/step-02-dev-story.md"
# Extract prompt template section
# Substitute variables
export story_id=$(basename "$story_file" .md)
export story_file_contents=$(cat "$story_file")
cat "$template" | envsubst
}
9. Missing sprint-status.yaml Update
Location: workflow.md:73 mentions this but it's not implemented
Proposed Fix: Add after successful completion:
update_sprint_status() {
local status_file="$PROJECT_ROOT/docs/sprints/sprint-status.yaml"
if [ -f "$status_file" ]; then
# Update epic status to completed
# This requires yq or similar YAML tool
yq -i ".epics.\"$EPIC_ID\".status = \"done\"" "$status_file"
yq -i ".epics.\"$EPIC_ID\".completed_at = \"$(date -Iseconds)\"" "$status_file"
fi
}
10. Story Discovery Edge Cases
Location: epic-execute.sh:181-206
Problem:
- Relies on consistent naming conventions
- Content grep could false-positive
- No warning when stories found in unexpected locations
Proposed Fix: Add source tracking and validation:
# Track where each story was found
declare -A STORY_SOURCES
for story in "${STORIES[@]}"; do
source_dir=$(dirname "$story")
STORY_SOURCES["$story"]="$source_dir"
done
# Warn about unexpected locations
for story in "${STORIES[@]}"; do
if [[ "${STORY_SOURCES[$story]}" != "$STORIES_DIR" ]]; then
log_warn "Story found in non-standard location: $story"
fi
done
Implementation Roadmap
Phase 1: Critical Fixes
- Add test verification step
- Add pre-flight confirmation
- Document
--dangerously-skip-permissionsrisks
Phase 2: Reliability
- Implement rollback mechanism
- Wire up configuration file
- Fix or remove
--parallelflag
Phase 3: Quality of Life
- Generate rich context handoffs
- Source prompts from step files
- Add sprint-status.yaml updates
Phase 4: Advanced Features
- Implement parallel story execution
- Add
--interactivemode for step-by-step approval - Track execution metrics (time per story, fix rate)
Ratings Summary
| Aspect | Rating | Notes |
|---|---|---|
| Architecture | Excellent | Context isolation is the right approach |
| Documentation | Very Good | Clear workflow diagrams, step files |
| Shell Scripts | Good | Well-structured, needs hardening |
| Error Handling | Fair | Basic coverage, needs rollback |
| Security | Needs Work | --dangerously-skip-permissions |
| Completeness | Good | Some features documented but not implemented |
References
src/modules/bmm/workflows/4-implementation/epic-execute/src/modules/bmm/workflows/4-implementation/epic-chain/scripts/epic-execute.shscripts/epic-chain.sh