BMAD-METHOD/docs/improvements/epic-workflows-v1.md

366 lines
9.6 KiB
Markdown

---
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`
```bash
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-approval` mode 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:**
```bash
# 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:**
```bash
# 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:
```bash
$(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:**
```bash
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:**
```bash
# 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:**
```bash
# 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:
```bash
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:
```bash
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:
```bash
# 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-permissions` risks
### Phase 2: Reliability
- [ ] Implement rollback mechanism
- [ ] Wire up configuration file
- [ ] Fix or remove `--parallel` flag
### 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 `--interactive` mode 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.sh`
- `scripts/epic-chain.sh`