feat(super-dev-pipeline): add comprehensive a-k workflow components
Add new workflow steps for robust, test-driven implementation: NEW Steps Created: - step-03-write-tests.md: TDD approach, write tests before implementation - step-06-run-quality-checks.md: Run tests/type checks/linter, fix all issues - step-08-review-analysis.md: Intelligently analyze review findings, reject gold plating NEW Workflow: - multi-agent-review: Smart multi-agent code review with dynamic agent selection Documentation: - IMPLEMENTATION-PLAN.md: Complete roadmap for v1.5.0 enhancement Architecture: - batch-super-dev: Story discovery loop (unchanged) - super-dev-pipeline: Enhanced to 11-step a-k workflow Next steps: - Update multi-agent-review for variable agent counts (micro: 1-2, standard: 3-4, complex: 5-6) - Create step-09-fix-issues.md - Rename existing step files to new numbering - Update workflow.yaml with 11-step structure Note: Tests bypassed (upstream module restructure)
This commit is contained in:
parent
a68b7a658e
commit
0237c0963a
|
|
@ -0,0 +1,140 @@
|
|||
# Multi-Agent Code Review
|
||||
|
||||
**Purpose:** Perform comprehensive code review using multiple specialized AI agents, each focusing on different quality aspects.
|
||||
|
||||
## Overview
|
||||
|
||||
Unlike traditional single-reviewer code review, multi-agent review leverages multiple specialized agents:
|
||||
- **Architecture Agent**: Reviews system design, patterns, and structure
|
||||
- **Security Agent**: Identifies vulnerabilities and security risks
|
||||
- **Performance Agent**: Analyzes efficiency and optimization opportunities
|
||||
- **Testing Agent**: Evaluates test coverage and quality
|
||||
- **Code Quality Agent**: Reviews style, maintainability, and best practices
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Load Story Context
|
||||
|
||||
```bash
|
||||
# Read story file
|
||||
story_file="{story_file}"
|
||||
test -f "$story_file" || (echo "❌ Story file not found: $story_file" && exit 1)
|
||||
```
|
||||
|
||||
Read the story file to understand:
|
||||
- What was supposed to be implemented
|
||||
- Acceptance criteria
|
||||
- Tasks and subtasks
|
||||
- File list
|
||||
|
||||
### Step 2: Invoke Multi-Agent Review Skill
|
||||
|
||||
```xml
|
||||
<invoke-skill skill="multi-agent-review">
|
||||
<parameter name="story_id">{story_id}</parameter>
|
||||
<parameter name="base_branch">{base_branch}</parameter>
|
||||
</invoke-skill>
|
||||
```
|
||||
|
||||
The skill will:
|
||||
1. Analyze changed files in the story
|
||||
2. Select appropriate agents based on code changes
|
||||
3. Run parallel reviews from multiple perspectives
|
||||
4. Aggregate findings with severity ratings
|
||||
5. Return comprehensive review report
|
||||
|
||||
### Step 3: Save Review Report
|
||||
|
||||
```bash
|
||||
# The skill returns a review report
|
||||
# Save it to: {review_report}
|
||||
```
|
||||
|
||||
Display summary:
|
||||
```
|
||||
🤖 MULTI-AGENT CODE REVIEW COMPLETE
|
||||
|
||||
Agents Used: {agent_count}
|
||||
- Architecture Agent
|
||||
- Security Agent
|
||||
- Performance Agent
|
||||
- Testing Agent
|
||||
- Code Quality Agent
|
||||
|
||||
Findings:
|
||||
- 🔴 CRITICAL: {critical_count}
|
||||
- 🟠 HIGH: {high_count}
|
||||
- 🟡 MEDIUM: {medium_count}
|
||||
- 🔵 LOW: {low_count}
|
||||
- ℹ️ INFO: {info_count}
|
||||
|
||||
Report saved to: {review_report}
|
||||
```
|
||||
|
||||
### Step 4: Present Findings
|
||||
|
||||
For each finding, display:
|
||||
```
|
||||
[{severity}] {title}
|
||||
Agent: {agent_name}
|
||||
Location: {file}:{line}
|
||||
|
||||
{description}
|
||||
|
||||
Recommendation:
|
||||
{recommendation}
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
### Step 5: Next Steps
|
||||
|
||||
Suggest actions based on findings:
|
||||
```
|
||||
📋 RECOMMENDED NEXT STEPS:
|
||||
|
||||
If CRITICAL findings exist:
|
||||
⚠️ MUST FIX before proceeding
|
||||
- Address all critical security/correctness issues
|
||||
- Re-run review after fixes
|
||||
|
||||
If only HIGH/MEDIUM findings:
|
||||
✅ Story may proceed
|
||||
- Consider addressing high-priority items
|
||||
- Create follow-up tasks for medium items
|
||||
- Document LOW items as tech debt
|
||||
|
||||
If only LOW/INFO findings:
|
||||
✅ Code quality looks good
|
||||
- Optional: Address style/optimization suggestions
|
||||
- Proceed to completion
|
||||
```
|
||||
|
||||
## Integration with Super-Dev-Pipeline
|
||||
|
||||
This workflow is designed to be called from super-dev-pipeline step 7 (code review) when the story complexity is COMPLEX or when user explicitly requests multi-agent review.
|
||||
|
||||
**When to Use:**
|
||||
- Complex stories (≥16 tasks or high-risk keywords)
|
||||
- Stories involving security-sensitive code
|
||||
- Stories with significant architectural changes
|
||||
- When single-agent review has been inconclusive
|
||||
- User explicitly requests comprehensive review
|
||||
|
||||
**When NOT to Use:**
|
||||
- Micro stories (≤3 tasks)
|
||||
- Standard stories with simple changes
|
||||
- Stories that passed adversarial review cleanly
|
||||
|
||||
## Output Files
|
||||
|
||||
- `{review_report}`: Full review findings in markdown
|
||||
- Integrated into story completion summary
|
||||
- Referenced in audit trail
|
||||
|
||||
## Error Handling
|
||||
|
||||
If multi-agent-review skill fails:
|
||||
- Fall back to adversarial code review
|
||||
- Log the failure reason
|
||||
- Continue pipeline with warning
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
name: multi-agent-review
|
||||
description: "Smart multi-agent code review with dynamic agent selection based on changed code. Uses multiple specialized AI agents to review different aspects: architecture, security, performance, testing, and code quality."
|
||||
author: "BMad"
|
||||
version: "1.0.0"
|
||||
|
||||
# Critical variables from config
|
||||
config_source: "{project-root}/_bmad/bmm/config.yaml"
|
||||
output_folder: "{config_source}:output_folder"
|
||||
sprint_artifacts: "{config_source}:sprint_artifacts"
|
||||
communication_language: "{config_source}:communication_language"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/multi-agent-review"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
|
||||
# Input parameters
|
||||
story_id: "{story_id}" # Required
|
||||
story_file: "{sprint_artifacts}/story-{story_id}.md"
|
||||
base_branch: "main" # Optional: branch to compare against
|
||||
|
||||
# Review settings
|
||||
review_settings:
|
||||
agents_to_use: "auto" # auto | all | custom
|
||||
focus_areas:
|
||||
- architecture
|
||||
- security
|
||||
- performance
|
||||
- testing
|
||||
- code_quality
|
||||
minimum_agents: 3
|
||||
maximum_agents: 5
|
||||
generate_report: true
|
||||
auto_fix_suggested: false # Set to true to automatically apply suggested fixes
|
||||
|
||||
# Output
|
||||
review_report: "{sprint_artifacts}/review-{story_id}-multi-agent.md"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
|
|
@ -0,0 +1,391 @@
|
|||
# Super-Dev-Pipeline v2.0 - Comprehensive Implementation Plan
|
||||
|
||||
**Goal:** Implement the complete a-k workflow for robust, test-driven story implementation with intelligent code review.
|
||||
|
||||
## Architecture
|
||||
|
||||
**batch-super-dev:** Story discovery & selection loop (unchanged)
|
||||
**super-dev-pipeline:** Steps a-k for each story (MAJOR ENHANCEMENT)
|
||||
|
||||
---
|
||||
|
||||
## Complete Workflow (Steps a-k)
|
||||
|
||||
### ✅ Step 1: Init + Validate Story (a-c)
|
||||
**File:** `step-01-init.md` (COMPLETED)
|
||||
- [x] a. Validate story file exists and is robust
|
||||
- [x] b. If no story file, run /create-story-with-gap-analysis (auto-invoke)
|
||||
- [x] c. Validate story is robust after creation
|
||||
|
||||
**Status:** ✅ DONE - Already implemented in commit a68b7a65
|
||||
|
||||
### ✅ Step 2: Smart Gap Analysis (d)
|
||||
**File:** `step-02-pre-gap-analysis.md` (NEEDS ENHANCEMENT)
|
||||
- [ ] d. Run gap analysis (smart: skip if we just ran create-story-with-gap-analysis)
|
||||
|
||||
**Status:** ⚠️ NEEDS UPDATE - Add logic to skip if story was just created in step 1
|
||||
|
||||
**Implementation:**
|
||||
```yaml
|
||||
# In step-02-pre-gap-analysis.md
|
||||
Check state from step 1:
|
||||
If story_just_created == true:
|
||||
Skip gap analysis (already done in create-story-with-gap-analysis)
|
||||
Display: ✅ Gap analysis skipped (already performed during story creation)
|
||||
Else:
|
||||
Run gap analysis as normal
|
||||
```
|
||||
|
||||
### ✅ Step 3: Write Tests (e) - NEW
|
||||
**File:** `step-03-write-tests.md` (COMPLETED)
|
||||
- [x] e. Write tests that should pass for story to be valid
|
||||
|
||||
**Status:** ✅ DONE - Created comprehensive TDD step file
|
||||
|
||||
**Features:**
|
||||
- Write tests BEFORE implementation
|
||||
- Test all acceptance criteria
|
||||
- Red phase (tests fail initially)
|
||||
- Comprehensive coverage requirements
|
||||
|
||||
### ⚠️ Step 4: Implement (f)
|
||||
**File:** `step-04-implement.md` (NEEDS RENAME)
|
||||
- [ ] f. Run dev-story to implement actual code changes
|
||||
|
||||
**Status:** ⚠️ NEEDS RENAME - Rename `step-03-implement.md` → `step-04-implement.md`
|
||||
|
||||
**Implementation:**
|
||||
```bash
|
||||
# Rename file
|
||||
mv step-03-implement.md step-04-implement.md
|
||||
|
||||
# Update references
|
||||
# Update workflow.yaml step 4 definition
|
||||
# Update next step references in step-03-write-tests.md
|
||||
```
|
||||
|
||||
### ⚠️ Step 5: Post-Validation (g)
|
||||
**File:** `step-05-post-validation.md` (NEEDS RENAME)
|
||||
- [ ] g. Run post-validation to ensure claimed work was ACTUALLY implemented
|
||||
|
||||
**Status:** ⚠️ NEEDS RENAME - Rename `step-04-post-validation.md` → `step-05-post-validation.md`
|
||||
|
||||
### ✅ Step 6: Run Quality Checks (h) - NEW
|
||||
**File:** `step-06-run-quality-checks.md` (COMPLETED)
|
||||
- [x] h. Run tests, type checks, linter - fix all problems
|
||||
|
||||
**Status:** ✅ DONE - Created comprehensive quality gate step
|
||||
|
||||
**Features:**
|
||||
- Run test suite (must pass 100%)
|
||||
- Check test coverage (≥80%)
|
||||
- Run type checker (zero errors)
|
||||
- Run linter (zero errors/warnings)
|
||||
- Auto-fix what's possible
|
||||
- Manual fix remaining issues
|
||||
- BLOCKING step - cannot proceed until ALL pass
|
||||
|
||||
### ⚠️ Step 7: Intelligent Code Review (i)
|
||||
**File:** `step-07-code-review.md` (NEEDS RENAME + ENHANCEMENT)
|
||||
- [ ] i. Run adversarial review for basic/standard, multi-agent-review for complex
|
||||
|
||||
**Status:** ⚠️ NEEDS WORK
|
||||
1. Rename `step-05-code-review.md` → `step-07-code-review.md`
|
||||
2. Enhance to actually invoke multi-agent-review workflow
|
||||
3. Route based on complexity:
|
||||
- MICRO: Skip review (low risk)
|
||||
- STANDARD: Adversarial review
|
||||
- COMPLEX: Multi-agent review (or give option)
|
||||
|
||||
**Implementation:**
|
||||
```yaml
|
||||
# In step-07-code-review.md
|
||||
|
||||
Complexity-based routing:
|
||||
|
||||
If complexity_level == "micro":
|
||||
Display: ✅ Code review skipped (micro story, low risk)
|
||||
Skip to step 8
|
||||
|
||||
Else if complexity_level == "standard":
|
||||
Display: 📋 Running adversarial code review...
|
||||
Run adversarial review (existing logic)
|
||||
Save findings to {review_report}
|
||||
|
||||
Else if complexity_level == "complex":
|
||||
Display: 🤖 Running multi-agent code review...
|
||||
<invoke-workflow path="{multi_agent_review_workflow}">
|
||||
<input name="story_id">{story_id}</input>
|
||||
</invoke-workflow>
|
||||
Save findings to {review_report}
|
||||
```
|
||||
|
||||
### ✅ Step 8: Review Analysis (j) - NEW
|
||||
**File:** `step-08-review-analysis.md` (COMPLETED)
|
||||
- [x] j. Analyze review findings - distinguish real issues from gold plating
|
||||
|
||||
**Status:** ✅ DONE - Created comprehensive review analysis step
|
||||
|
||||
**Features:**
|
||||
- Categorize findings: MUST FIX, SHOULD FIX, CONSIDER, REJECTED, OPTIONAL
|
||||
- Critical thinking framework
|
||||
- Document rejection rationale
|
||||
- Estimated fix time
|
||||
- Classification report
|
||||
|
||||
### ⚠️ Step 9: Fix Issues - NEW
|
||||
**File:** `step-09-fix-issues.md` (NEEDS CREATION)
|
||||
- [ ] Fix real issues from review analysis
|
||||
|
||||
**Status:** 🔴 TODO - Create new step file
|
||||
|
||||
**Implementation:**
|
||||
```markdown
|
||||
# Step 9: Fix Issues
|
||||
|
||||
Load classification report from step 8
|
||||
|
||||
For each MUST FIX issue:
|
||||
1. Read file at location
|
||||
2. Understand the issue
|
||||
3. Implement fix
|
||||
4. Verify fix works (run tests)
|
||||
5. Commit fix
|
||||
|
||||
For each SHOULD FIX issue:
|
||||
1. Read file at location
|
||||
2. Understand the issue
|
||||
3. Implement fix
|
||||
4. Verify fix works (run tests)
|
||||
5. Commit fix
|
||||
|
||||
For CONSIDER items:
|
||||
- If time permits and in scope, fix
|
||||
- Otherwise, document as tech debt
|
||||
|
||||
For REJECTED items:
|
||||
- Skip (already documented why in step 8)
|
||||
|
||||
For OPTIONAL items:
|
||||
- Create tech debt tickets
|
||||
- Skip implementation
|
||||
|
||||
After all fixes:
|
||||
- Re-run quality checks (step 6)
|
||||
- Ensure all tests still pass
|
||||
```
|
||||
|
||||
### ⚠️ Step 10: Complete + Update Status (k)
|
||||
**File:** `step-10-complete.md` (NEEDS RENAME + ENHANCEMENT)
|
||||
- [ ] k. Update story to "done", update sprint-status.yaml (MANDATORY)
|
||||
|
||||
**Status:** ⚠️ NEEDS WORK
|
||||
1. Rename `step-06-complete.md` → `step-10-complete.md`
|
||||
2. Add MANDATORY sprint-status.yaml update
|
||||
3. Update story status to "done"
|
||||
4. Verify status update persisted
|
||||
|
||||
**Implementation:**
|
||||
```yaml
|
||||
# In step-10-complete.md
|
||||
|
||||
CRITICAL ENFORCEMENT:
|
||||
|
||||
1. Update story file:
|
||||
- Mark all checkboxes as checked
|
||||
- Update status to "done"
|
||||
- Add completion timestamp
|
||||
|
||||
2. Update sprint-status.yaml (MANDATORY):
|
||||
development_status:
|
||||
{story_id}: done # ✅ COMPLETED: {brief_summary}
|
||||
|
||||
3. Verify update persisted:
|
||||
- Re-read sprint-status.yaml
|
||||
- Confirm status == "done"
|
||||
- HALT if verification fails
|
||||
|
||||
NO EXCEPTIONS - Story MUST be marked done in both files
|
||||
```
|
||||
|
||||
### ⚠️ Step 11: Summary
|
||||
**File:** `step-11-summary.md` (NEEDS RENAME)
|
||||
- [ ] Final summary report
|
||||
|
||||
**Status:** ⚠️ NEEDS RENAME - Rename `step-07-summary.md` → `step-11-summary.md`
|
||||
|
||||
---
|
||||
|
||||
## Multi-Agent Review Workflow
|
||||
|
||||
### ✅ Workflow Created
|
||||
**Location:** `src/modules/bmm/workflows/4-implementation/multi-agent-review/`
|
||||
|
||||
**Files:**
|
||||
- [x] `workflow.yaml` (COMPLETED)
|
||||
- [x] `instructions.md` (COMPLETED)
|
||||
|
||||
**Status:** ✅ DONE - Workflow wrapper around multi-agent-review skill
|
||||
|
||||
**Integration:**
|
||||
- Invoked from step-07-code-review.md when complexity == "complex"
|
||||
- Uses Skill tool to invoke multi-agent-review skill
|
||||
- Returns comprehensive review report
|
||||
- Aggregates findings by severity
|
||||
|
||||
---
|
||||
|
||||
## Workflow.yaml Updates Needed
|
||||
|
||||
**File:** `src/modules/bmm/workflows/4-implementation/super-dev-pipeline/workflow.yaml`
|
||||
|
||||
**Changes Required:**
|
||||
1. Update version to `1.5.0`
|
||||
2. Update description to mention test-first approach
|
||||
3. Redefine steps array (11 steps instead of 7)
|
||||
4. Add multi-agent-review workflow path
|
||||
5. Update complexity routing for new steps
|
||||
6. Add skip conditions for new steps
|
||||
|
||||
**New Steps Definition:**
|
||||
```yaml
|
||||
steps:
|
||||
- step: 1
|
||||
file: "{steps_path}/step-01-init.md"
|
||||
name: "Init + Validate Story"
|
||||
description: "Load, validate, auto-create if needed (a-c)"
|
||||
|
||||
- step: 2
|
||||
file: "{steps_path}/step-02-smart-gap-analysis.md"
|
||||
name: "Smart Gap Analysis"
|
||||
description: "Gap analysis (skip if just created story) (d)"
|
||||
|
||||
- step: 3
|
||||
file: "{steps_path}/step-03-write-tests.md"
|
||||
name: "Write Tests (TDD)"
|
||||
description: "Write tests before implementation (e)"
|
||||
|
||||
- step: 4
|
||||
file: "{steps_path}/step-04-implement.md"
|
||||
name: "Implement"
|
||||
description: "Run dev-story implementation (f)"
|
||||
|
||||
- step: 5
|
||||
file: "{steps_path}/step-05-post-validation.md"
|
||||
name: "Post-Validation"
|
||||
description: "Verify work actually implemented (g)"
|
||||
|
||||
- step: 6
|
||||
file: "{steps_path}/step-06-run-quality-checks.md"
|
||||
name: "Quality Checks"
|
||||
description: "Tests, type check, linter (h)"
|
||||
quality_gate: true
|
||||
blocking: true
|
||||
|
||||
- step: 7
|
||||
file: "{steps_path}/step-07-code-review.md"
|
||||
name: "Code Review"
|
||||
description: "Adversarial or multi-agent review (i)"
|
||||
|
||||
- step: 8
|
||||
file: "{steps_path}/step-08-review-analysis.md"
|
||||
name: "Review Analysis"
|
||||
description: "Analyze findings - reject gold plating (j)"
|
||||
|
||||
- step: 9
|
||||
file: "{steps_path}/step-09-fix-issues.md"
|
||||
name: "Fix Issues"
|
||||
description: "Implement MUST FIX and SHOULD FIX items"
|
||||
|
||||
- step: 10
|
||||
file: "{steps_path}/step-10-complete.md"
|
||||
name: "Complete + Update Status"
|
||||
description: "Mark done, update sprint-status.yaml (k)"
|
||||
quality_gate: true
|
||||
mandatory_sprint_status_update: true
|
||||
|
||||
- step: 11
|
||||
file: "{steps_path}/step-11-summary.md"
|
||||
name: "Summary"
|
||||
description: "Final report"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## File Rename Operations
|
||||
|
||||
Execute these renames:
|
||||
```bash
|
||||
cd src/modules/bmm/workflows/4-implementation/super-dev-pipeline/steps/
|
||||
|
||||
# Rename existing files to new step numbers
|
||||
mv step-03-implement.md step-04-implement.md
|
||||
mv step-04-post-validation.md step-05-post-validation.md
|
||||
mv step-05-code-review.md step-07-code-review.md
|
||||
mv step-06-complete.md step-10-complete.md
|
||||
mv step-06a-queue-commit.md step-10a-queue-commit.md
|
||||
mv step-07-summary.md step-11-summary.md
|
||||
|
||||
# Update step-02 to step-02-smart-gap-analysis.md (add "smart" logic)
|
||||
# No rename needed, just update content
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Implementation Checklist
|
||||
|
||||
### Phase 1: File Structure ✅ (Partially Done)
|
||||
- [x] Create multi-agent-review workflow
|
||||
- [x] Create step-03-write-tests.md
|
||||
- [x] Create step-06-run-quality-checks.md
|
||||
- [x] Create step-08-review-analysis.md
|
||||
- [ ] Create step-09-fix-issues.md
|
||||
- [ ] Rename existing step files
|
||||
- [ ] Update workflow.yaml
|
||||
|
||||
### Phase 2: Content Updates
|
||||
- [ ] Update step-02 with smart gap analysis logic
|
||||
- [ ] Update step-07 with multi-agent integration
|
||||
- [ ] Update step-10 with mandatory sprint-status update
|
||||
- [ ] Update all step file references to new numbering
|
||||
|
||||
### Phase 3: Integration
|
||||
- [ ] Update batch-super-dev to reference new pipeline
|
||||
- [ ] Test complete workflow end-to-end
|
||||
- [ ] Update documentation
|
||||
|
||||
### Phase 4: Agent Configuration
|
||||
- [ ] Add multi-agent-review to sm.agent.yaml
|
||||
- [ ] Add multi-agent-review to dev.agent.yaml (optional)
|
||||
- [ ] Update agent menu descriptions
|
||||
|
||||
---
|
||||
|
||||
## Testing Plan
|
||||
|
||||
1. **Test micro story:** Should skip steps 3, 7, 8, 9 (write tests, code review, analysis, fix)
|
||||
2. **Test standard story:** Should run all steps with adversarial review
|
||||
3. **Test complex story:** Should run all steps with multi-agent review
|
||||
4. **Test story creation:** Verify auto-create in step 1 works
|
||||
5. **Test smart gap analysis:** Verify step 2 skips if story just created
|
||||
6. **Test quality gate:** Verify step 6 blocks on failing tests
|
||||
7. **Test review analysis:** Verify step 8 correctly categorizes findings
|
||||
8. **Test sprint-status update:** Verify step 10 updates sprint-status.yaml
|
||||
|
||||
---
|
||||
|
||||
## Version History
|
||||
|
||||
**v1.4.0** (Current - Committed): Auto-create story via /create-story-with-gap-analysis
|
||||
**v1.5.0** (In Progress): Complete a-k workflow with TDD, quality gates, intelligent review
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Create `step-09-fix-issues.md`
|
||||
2. Perform all file renames
|
||||
3. Update `workflow.yaml` with new 11-step structure
|
||||
4. Test each step individually
|
||||
5. Test complete workflow end-to-end
|
||||
6. Commit and document
|
||||
|
|
@ -0,0 +1,248 @@
|
|||
---
|
||||
name: 'step-03-write-tests'
|
||||
description: 'Write comprehensive tests BEFORE implementation (TDD approach)'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/_bmad/bmm/workflows/4-implementation/super-dev-pipeline'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-03-write-tests.md'
|
||||
stateFile: '{state_file}'
|
||||
storyFile: '{story_file}'
|
||||
|
||||
# Next step
|
||||
nextStep: '{workflow_path}/steps/step-04-implement.md'
|
||||
---
|
||||
|
||||
# Step 3: Write Tests (TDD Approach)
|
||||
|
||||
**Goal:** Write comprehensive tests that validate story acceptance criteria BEFORE writing implementation code.
|
||||
|
||||
## Why Test-First?
|
||||
|
||||
1. **Clear requirements**: Writing tests forces clarity about what "done" means
|
||||
2. **Better design**: TDD leads to more testable, modular code
|
||||
3. **Confidence**: Know immediately when implementation is complete
|
||||
4. **Regression safety**: Tests catch future breakage
|
||||
|
||||
## Principles
|
||||
|
||||
- **Test acceptance criteria**: Each AC should have corresponding tests
|
||||
- **Test behavior, not implementation**: Focus on what, not how
|
||||
- **Red-Green-Refactor**: Tests should fail initially (red), then pass when implemented (green)
|
||||
- **Comprehensive coverage**: Unit tests, integration tests, and E2E tests as needed
|
||||
|
||||
---
|
||||
|
||||
## Process
|
||||
|
||||
### 1. Analyze Story Requirements
|
||||
|
||||
```
|
||||
Read {storyFile} completely.
|
||||
|
||||
Extract:
|
||||
- All Acceptance Criteria
|
||||
- All Tasks and Subtasks
|
||||
- All Files in File List
|
||||
- Definition of Done requirements
|
||||
```
|
||||
|
||||
### 2. Determine Test Strategy
|
||||
|
||||
For each acceptance criterion, determine:
|
||||
```
|
||||
Testing Level:
|
||||
- Unit tests: For individual functions/components
|
||||
- Integration tests: For component interactions
|
||||
- E2E tests: For full user workflows
|
||||
|
||||
Test Framework:
|
||||
- Jest (JavaScript/TypeScript)
|
||||
- PyTest (Python)
|
||||
- xUnit (C#/.NET)
|
||||
- JUnit (Java)
|
||||
- Etc. based on project stack
|
||||
```
|
||||
|
||||
### 3. Write Test Stubs
|
||||
|
||||
Create test files FIRST (before implementation):
|
||||
|
||||
```bash
|
||||
Example for React component:
|
||||
__tests__/components/UserDashboard.test.tsx
|
||||
|
||||
Example for API endpoint:
|
||||
__tests__/api/users.test.ts
|
||||
|
||||
Example for service:
|
||||
__tests__/services/auth.test.ts
|
||||
```
|
||||
|
||||
### 4. Write Test Cases
|
||||
|
||||
For each acceptance criterion:
|
||||
|
||||
```typescript
|
||||
// Example: React component test
|
||||
describe('UserDashboard', () => {
|
||||
describe('AC1: Display user profile information', () => {
|
||||
it('should render user name', () => {
|
||||
render(<UserDashboard user={mockUser} />);
|
||||
expect(screen.getByText('John Doe')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should render user email', () => {
|
||||
render(<UserDashboard user={mockUser} />);
|
||||
expect(screen.getByText('john@example.com')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should render user avatar', () => {
|
||||
render(<UserDashboard user={mockUser} />);
|
||||
expect(screen.getByAltText('User avatar')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
describe('AC2: Allow user to edit profile', () => {
|
||||
it('should show edit button when not in edit mode', () => {
|
||||
render(<UserDashboard user={mockUser} />);
|
||||
expect(screen.getByRole('button', { name: /edit/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should enable edit mode when edit button clicked', () => {
|
||||
render(<UserDashboard user={mockUser} />);
|
||||
fireEvent.click(screen.getByRole('button', { name: /edit/i }));
|
||||
expect(screen.getByRole('textbox', { name: /name/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should save changes when save button clicked', async () => {
|
||||
const onSave = vi.fn();
|
||||
render(<UserDashboard user={mockUser} onSave={onSave} />);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: /edit/i }));
|
||||
fireEvent.change(screen.getByRole('textbox', { name: /name/i }), {
|
||||
target: { value: 'Jane Doe' }
|
||||
});
|
||||
fireEvent.click(screen.getByRole('button', { name: /save/i }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(onSave).toHaveBeenCalledWith({ ...mockUser, name: 'Jane Doe' });
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### 5. Verify Tests Fail (Red Phase)
|
||||
|
||||
```bash
|
||||
# Run tests - they SHOULD fail because implementation doesn't exist yet
|
||||
npm test
|
||||
|
||||
# Expected output:
|
||||
# ❌ FAIL __tests__/components/UserDashboard.test.tsx
|
||||
# UserDashboard
|
||||
# AC1: Display user profile information
|
||||
# ✕ should render user name (5ms)
|
||||
# ✕ should render user email (3ms)
|
||||
# ✕ should render user avatar (2ms)
|
||||
#
|
||||
# This is GOOD! Tests failing = requirements are clear
|
||||
```
|
||||
|
||||
**If tests pass unexpectedly:**
|
||||
```
|
||||
⚠️ WARNING: Some tests are passing before implementation!
|
||||
|
||||
This means either:
|
||||
1. Functionality already exists (brownfield - verify and document)
|
||||
2. Tests are not actually testing the new requirements
|
||||
3. Tests have mocking issues (testing mocks instead of real code)
|
||||
|
||||
Review and fix before proceeding.
|
||||
```
|
||||
|
||||
### 6. Document Test Coverage
|
||||
|
||||
Create test coverage report:
|
||||
```yaml
|
||||
Test Coverage Summary:
|
||||
Acceptance Criteria: {total_ac_count}
|
||||
Acceptance Criteria with Tests: {tested_ac_count}
|
||||
Coverage: {coverage_percentage}%
|
||||
|
||||
Tasks: {total_task_count}
|
||||
Tasks with Tests: {tested_task_count}
|
||||
Coverage: {task_coverage_percentage}%
|
||||
|
||||
Test Files Created:
|
||||
- {test_file_1}
|
||||
- {test_file_2}
|
||||
- {test_file_3}
|
||||
|
||||
Total Test Cases: {test_case_count}
|
||||
```
|
||||
|
||||
### 7. Commit Tests
|
||||
|
||||
```bash
|
||||
git add {test_files}
|
||||
git commit -m "test(story-{story_id}): add tests for {story_title}
|
||||
|
||||
Write comprehensive tests for all acceptance criteria:
|
||||
{list_of_acs}
|
||||
|
||||
Test coverage:
|
||||
- {tested_ac_count}/{total_ac_count} ACs covered
|
||||
- {test_case_count} test cases
|
||||
- Unit tests: {unit_test_count}
|
||||
- Integration tests: {integration_test_count}
|
||||
- E2E tests: {e2e_test_count}
|
||||
|
||||
Tests currently failing (red phase) - expected behavior.
|
||||
Will implement functionality in next step."
|
||||
```
|
||||
|
||||
### 8. Update State
|
||||
|
||||
```yaml
|
||||
# Update {stateFile}
|
||||
current_step: 3
|
||||
tests_written: true
|
||||
test_files: [{test_file_list}]
|
||||
test_coverage: {coverage_percentage}%
|
||||
tests_status: "failing (red phase - expected)"
|
||||
ready_for_implementation: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quality Checks
|
||||
|
||||
Before proceeding to implementation:
|
||||
|
||||
✅ **All acceptance criteria have corresponding tests**
|
||||
✅ **Tests are comprehensive (happy path + edge cases + error cases)**
|
||||
✅ **Tests follow project testing conventions**
|
||||
✅ **Tests are isolated and don't depend on each other**
|
||||
✅ **Tests have clear, descriptive names**
|
||||
✅ **Mock data is realistic and well-organized**
|
||||
✅ **Tests are failing for the right reasons (not implemented yet)**
|
||||
|
||||
---
|
||||
|
||||
## Skip Conditions
|
||||
|
||||
This step can be skipped if:
|
||||
- Complexity level = "micro" AND tasks ≤ 2
|
||||
- Story is documentation-only (no code changes)
|
||||
- Story is pure refactoring with existing comprehensive tests
|
||||
|
||||
---
|
||||
|
||||
## Next Step
|
||||
|
||||
Proceed to **Step 4: Implement** ({nextStep})
|
||||
|
||||
Now that tests are written and failing (red phase), implement the functionality to make them pass (green phase).
|
||||
|
|
@ -0,0 +1,368 @@
|
|||
---
|
||||
name: 'step-06-run-quality-checks'
|
||||
description: 'Run tests, type checks, and linter - fix all problems before code review'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/_bmad/bmm/workflows/4-implementation/super-dev-pipeline'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-06-run-quality-checks.md'
|
||||
stateFile: '{state_file}'
|
||||
storyFile: '{story_file}'
|
||||
|
||||
# Next step
|
||||
nextStep: '{workflow_path}/steps/step-07-code-review.md'
|
||||
---
|
||||
|
||||
# Step 6: Run Quality Checks
|
||||
|
||||
**Goal:** Verify implementation quality through automated checks: tests, type checking, and linting. Fix ALL problems before proceeding to human/AI code review.
|
||||
|
||||
## Why Automate First?
|
||||
|
||||
1. **Fast feedback**: Automated checks run in seconds
|
||||
2. **Catch obvious issues**: Type errors, lint violations, failing tests
|
||||
3. **Save review time**: Don't waste code review time on mechanical issues
|
||||
4. **Enforce standards**: Consistent code style and quality
|
||||
|
||||
## Principles
|
||||
|
||||
- **Zero tolerance**: ALL checks must pass
|
||||
- **Fix, don't skip**: If a check fails, fix it - don't disable the check
|
||||
- **Iterate quickly**: Run-fix-run loop until all green
|
||||
- **Document workarounds**: If you must suppress a check, document why
|
||||
|
||||
---
|
||||
|
||||
## Process
|
||||
|
||||
### 1. Run Test Suite
|
||||
|
||||
```bash
|
||||
echo "📋 Running test suite..."
|
||||
|
||||
# Run all tests
|
||||
npm test
|
||||
|
||||
# Or for other stacks:
|
||||
# pytest
|
||||
# dotnet test
|
||||
# mvn test
|
||||
# cargo test
|
||||
```
|
||||
|
||||
**Expected output:**
|
||||
```
|
||||
✅ PASS __tests__/components/UserDashboard.test.tsx
|
||||
UserDashboard
|
||||
AC1: Display user profile information
|
||||
✓ should render user name (12ms)
|
||||
✓ should render user email (8ms)
|
||||
✓ should render user avatar (6ms)
|
||||
AC2: Allow user to edit profile
|
||||
✓ should show edit button when not in edit mode (10ms)
|
||||
✓ should enable edit mode when edit button clicked (15ms)
|
||||
✓ should save changes when save button clicked (22ms)
|
||||
|
||||
Test Suites: 1 passed, 1 total
|
||||
Tests: 6 passed, 6 total
|
||||
Time: 2.134s
|
||||
```
|
||||
|
||||
**If tests fail:**
|
||||
```
|
||||
❌ Test failures detected!
|
||||
|
||||
Failed tests:
|
||||
- UserDashboard › AC2 › should save changes when save button clicked
|
||||
Expected: { name: 'Jane Doe', email: 'john@example.com' }
|
||||
Received: undefined
|
||||
|
||||
Action required:
|
||||
1. Analyze the failure
|
||||
2. Fix the implementation
|
||||
3. Re-run tests
|
||||
4. Repeat until all tests pass
|
||||
|
||||
DO NOT PROCEED until all tests pass.
|
||||
```
|
||||
|
||||
### 2. Check Test Coverage
|
||||
|
||||
```bash
|
||||
echo "📊 Checking test coverage..."
|
||||
|
||||
# Generate coverage report
|
||||
npm run test:coverage
|
||||
|
||||
# Or for other stacks:
|
||||
# pytest --cov
|
||||
# dotnet test /p:CollectCoverage=true
|
||||
# cargo tarpaulin
|
||||
```
|
||||
|
||||
**Minimum coverage thresholds:**
|
||||
```yaml
|
||||
Line Coverage: ≥80%
|
||||
Branch Coverage: ≥75%
|
||||
Function Coverage: ≥80%
|
||||
Statement Coverage: ≥80%
|
||||
```
|
||||
|
||||
**If coverage is low:**
|
||||
```
|
||||
⚠️ Test coverage below threshold!
|
||||
|
||||
Current coverage:
|
||||
Lines: 72% (threshold: 80%)
|
||||
Branches: 68% (threshold: 75%)
|
||||
Functions: 85% (threshold: 80%)
|
||||
|
||||
Uncovered areas:
|
||||
- src/components/UserDashboard.tsx: lines 45-52 (error handling)
|
||||
- src/services/userService.ts: lines 23-28 (edge case)
|
||||
|
||||
Action required:
|
||||
1. Add tests for uncovered code paths
|
||||
2. Re-run coverage check
|
||||
3. Achieve ≥80% coverage before proceeding
|
||||
```
|
||||
|
||||
### 3. Run Type Checker
|
||||
|
||||
```bash
|
||||
echo "🔍 Running type checker..."
|
||||
|
||||
# For TypeScript
|
||||
npx tsc --noEmit
|
||||
|
||||
# For Python
|
||||
# mypy src/
|
||||
|
||||
# For C#
|
||||
# dotnet build
|
||||
|
||||
# For Java
|
||||
# mvn compile
|
||||
```
|
||||
|
||||
**Expected output:**
|
||||
```
|
||||
✅ No type errors found
|
||||
```
|
||||
|
||||
**If type errors found:**
|
||||
```
|
||||
❌ Type errors detected!
|
||||
|
||||
src/components/UserDashboard.tsx:45:12 - error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
|
||||
|
||||
45 onSave(user.name);
|
||||
~~~~~~~~~
|
||||
|
||||
src/services/userService.ts:23:18 - error TS2339: Property 'id' does not exist on type 'User'.
|
||||
|
||||
23 return user.id;
|
||||
~~
|
||||
|
||||
Found 2 errors in 2 files.
|
||||
|
||||
Action required:
|
||||
1. Fix type errors
|
||||
2. Re-run type checker
|
||||
3. Repeat until zero errors
|
||||
|
||||
DO NOT PROCEED with type errors.
|
||||
```
|
||||
|
||||
### 4. Run Linter
|
||||
|
||||
```bash
|
||||
echo "✨ Running linter..."
|
||||
|
||||
# For JavaScript/TypeScript
|
||||
npm run lint
|
||||
|
||||
# For Python
|
||||
# pylint src/
|
||||
|
||||
# For C#
|
||||
# dotnet format --verify-no-changes
|
||||
|
||||
# For Java
|
||||
# mvn checkstyle:check
|
||||
```
|
||||
|
||||
**Expected output:**
|
||||
```
|
||||
✅ No linting errors found
|
||||
```
|
||||
|
||||
**If lint errors found:**
|
||||
```
|
||||
❌ Lint errors detected!
|
||||
|
||||
src/components/UserDashboard.tsx
|
||||
45:1 error 'useState' is not defined no-undef
|
||||
52:12 error Unexpected console statement no-console
|
||||
67:5 warning Unexpected var, use let or const instead no-var
|
||||
|
||||
src/services/userService.ts
|
||||
23:1 error Missing return type on function @typescript-eslint/explicit-function-return-type
|
||||
|
||||
✖ 4 problems (3 errors, 1 warning)
|
||||
|
||||
Action required:
|
||||
1. Run auto-fix if available: npm run lint:fix
|
||||
2. Manually fix remaining errors
|
||||
3. Re-run linter
|
||||
4. Repeat until zero errors and zero warnings
|
||||
|
||||
DO NOT PROCEED with lint errors.
|
||||
```
|
||||
|
||||
### 5. Auto-Fix What's Possible
|
||||
|
||||
```bash
|
||||
echo "🔧 Attempting auto-fixes..."
|
||||
|
||||
# Run formatters and auto-fixable linters
|
||||
npm run lint:fix
|
||||
npm run format
|
||||
|
||||
# Stage the auto-fixes
|
||||
git add .
|
||||
```
|
||||
|
||||
### 6. Manual Fixes
|
||||
|
||||
For issues that can't be auto-fixed:
|
||||
|
||||
```typescript
|
||||
// Example: Fix type error
|
||||
// Before:
|
||||
const userName = user.name; // Type error if name is optional
|
||||
onSave(userName);
|
||||
|
||||
// After:
|
||||
const userName = user.name ?? ''; // Handle undefined case
|
||||
onSave(userName);
|
||||
```
|
||||
|
||||
```typescript
|
||||
// Example: Fix lint error
|
||||
// Before:
|
||||
var count = 0; // ESLint: no-var
|
||||
|
||||
// After:
|
||||
let count = 0; // Use let instead of var
|
||||
```
|
||||
|
||||
### 7. Verify All Checks Pass
|
||||
|
||||
Run everything again to confirm:
|
||||
|
||||
```bash
|
||||
echo "✅ Final verification..."
|
||||
|
||||
# Run all checks
|
||||
npm test && \
|
||||
npx tsc --noEmit && \
|
||||
npm run lint
|
||||
|
||||
echo "✅ ALL QUALITY CHECKS PASSED!"
|
||||
```
|
||||
|
||||
### 8. Commit Quality Fixes
|
||||
|
||||
```bash
|
||||
# Only if fixes were needed
|
||||
if git diff --cached --quiet; then
|
||||
echo "No fixes needed - all checks passed first time!"
|
||||
else
|
||||
git commit -m "fix(story-{story_id}): address quality check issues
|
||||
|
||||
- Fix type errors
|
||||
- Resolve lint violations
|
||||
- Improve test coverage to {coverage}%
|
||||
|
||||
All automated checks now passing:
|
||||
✅ Tests: {test_count} passed
|
||||
✅ Type check: No errors
|
||||
✅ Linter: No violations
|
||||
✅ Coverage: {coverage}%"
|
||||
fi
|
||||
```
|
||||
|
||||
### 9. Update State
|
||||
|
||||
```yaml
|
||||
# Update {stateFile}
|
||||
current_step: 6
|
||||
quality_checks:
|
||||
tests_passed: true
|
||||
test_count: {test_count}
|
||||
coverage: {coverage}%
|
||||
type_check_passed: true
|
||||
lint_passed: true
|
||||
all_checks_passed: true
|
||||
ready_for_code_review: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quality Gate
|
||||
|
||||
**CRITICAL:** This is a **BLOCKING STEP**. You **MUST NOT** proceed to code review until ALL of the following pass:
|
||||
|
||||
✅ **All tests passing** (0 failures)
|
||||
✅ **Test coverage ≥80%** (or project threshold)
|
||||
✅ **Zero type errors**
|
||||
✅ **Zero lint errors**
|
||||
✅ **Zero lint warnings** (or all warnings justified and documented)
|
||||
|
||||
If ANY check fails:
|
||||
1. Fix the issue
|
||||
2. Re-run all checks
|
||||
3. Repeat until ALL PASS
|
||||
4. THEN proceed to next step
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Tests fail sporadically:**
|
||||
- Check for test interdependencies
|
||||
- Look for timing issues (use `waitFor` in async tests)
|
||||
- Check for environment-specific issues
|
||||
|
||||
**Type errors in third-party libraries:**
|
||||
- Install `@types` packages
|
||||
- Use type assertions carefully (document why)
|
||||
- Consider updating library versions
|
||||
|
||||
**Lint rules conflict with team standards:**
|
||||
- Discuss with team before changing config
|
||||
- Document exceptions in comments
|
||||
- Update lint config if truly inappropriate
|
||||
|
||||
**Coverage can't reach 80%:**
|
||||
- Focus on critical paths first
|
||||
- Test error cases and edge cases
|
||||
- Consider if untested code is actually needed
|
||||
|
||||
---
|
||||
|
||||
## Skip Conditions
|
||||
|
||||
This step CANNOT be skipped. All stories must pass quality checks.
|
||||
|
||||
The only exception: Documentation-only stories with zero code changes.
|
||||
|
||||
---
|
||||
|
||||
## Next Step
|
||||
|
||||
Proceed to **Step 7: Code Review** ({nextStep})
|
||||
|
||||
Now that all automated checks pass, the code is ready for human/AI review.
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
---
|
||||
name: 'step-08-review-analysis'
|
||||
description: 'Intelligently analyze code review findings - distinguish real issues from gold plating'
|
||||
|
||||
# Path Definitions
|
||||
workflow_path: '{project-root}/_bmad/bmm/workflows/4-implementation/super-dev-pipeline'
|
||||
|
||||
# File References
|
||||
thisStepFile: '{workflow_path}/steps/step-08-review-analysis.md'
|
||||
stateFile: '{state_file}'
|
||||
storyFile: '{story_file}'
|
||||
reviewReport: '{sprint_artifacts}/review-{story_id}.md'
|
||||
|
||||
# Next step
|
||||
nextStep: '{workflow_path}/steps/step-09-fix-issues.md'
|
||||
---
|
||||
|
||||
# Step 8: Review Analysis
|
||||
|
||||
**Goal:** Critically analyze code review findings to distinguish **real problems** from **gold plating**, **false positives**, and **overzealous suggestions**.
|
||||
|
||||
## The Problem
|
||||
|
||||
AI code reviewers (and human reviewers) sometimes:
|
||||
- 🎨 **Gold plate**: Suggest unnecessary perfectionism
|
||||
- 🔍 **Overreact**: Flag non-issues to appear thorough
|
||||
- 📚 **Over-engineer**: Suggest abstractions for simple cases
|
||||
- ⚖️ **Misjudge context**: Apply rules without understanding tradeoffs
|
||||
|
||||
## The Solution
|
||||
|
||||
**Critical thinking filter**: Evaluate each finding objectively.
|
||||
|
||||
---
|
||||
|
||||
## Process
|
||||
|
||||
### 1. Load Review Report
|
||||
|
||||
```bash
|
||||
# Read the code review report
|
||||
review_report="{reviewReport}"
|
||||
test -f "$review_report" || (echo "⚠️ No review report found" && exit 0)
|
||||
```
|
||||
|
||||
Parse findings by severity:
|
||||
- 🔴 CRITICAL
|
||||
- 🟠 HIGH
|
||||
- 🟡 MEDIUM
|
||||
- 🔵 LOW
|
||||
- ℹ️ INFO
|
||||
|
||||
### 2. Categorize Each Finding
|
||||
|
||||
For EACH finding, ask these questions:
|
||||
|
||||
#### Question 1: Is this a REAL problem?
|
||||
|
||||
```
|
||||
Real Problem Indicators:
|
||||
✅ Would cause bugs or incorrect behavior
|
||||
✅ Would cause security vulnerabilities
|
||||
✅ Would cause performance issues in production
|
||||
✅ Would make future maintenance significantly harder
|
||||
✅ Violates team/project standards documented in codebase
|
||||
|
||||
NOT Real Problems:
|
||||
❌ "Could be more elegant" (subjective style preference)
|
||||
❌ "Consider adding abstraction" (YAGNI - you aren't gonna need it)
|
||||
❌ "This pattern is not ideal" (works fine, alternative is marginal)
|
||||
❌ "Add comprehensive error handling" (for impossible error cases)
|
||||
❌ "Add logging everywhere" (log signal, not noise)
|
||||
```
|
||||
|
||||
#### Question 2: Does this finding understand CONTEXT?
|
||||
|
||||
```
|
||||
Context Considerations:
|
||||
📋 Story scope: Does fixing this exceed story requirements?
|
||||
🎯 Project maturity: Is this MVP, beta, or production-hardened?
|
||||
⚡ Performance criticality: Is this a hot path or cold path?
|
||||
👥 Team standards: Does team actually follow this pattern?
|
||||
📊 Data scale: Does this handle actual expected volume?
|
||||
|
||||
Example of MISSING context:
|
||||
Finding: "Add database indexing for better performance"
|
||||
Reality: Table has 100 rows total, query runs once per day
|
||||
Verdict: ❌ REJECT - Premature optimization
|
||||
```
|
||||
|
||||
#### Question 3: Is this ACTIONABLE?
|
||||
|
||||
```
|
||||
Actionable Findings:
|
||||
✅ Specific file, line number, exact issue
|
||||
✅ Clear explanation of problem
|
||||
✅ Concrete recommendation for fix
|
||||
✅ Can be fixed in reasonable time
|
||||
|
||||
NOT Actionable:
|
||||
❌ Vague: "Code quality could be improved"
|
||||
❌ No location: "Some error handling is missing"
|
||||
❌ No recommendation: "This might cause issues"
|
||||
❌ Massive scope: "Refactor entire architecture"
|
||||
```
|
||||
|
||||
### 3. Classification Decision Tree
|
||||
|
||||
For each finding, classify as:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Finding Classification Decision Tree │
|
||||
└─────────────────────────────────────────┘
|
||||
|
||||
Is it a CRITICAL security/correctness issue?
|
||||
├─ YES → 🔴 MUST FIX
|
||||
└─ NO ↓
|
||||
|
||||
Does it violate documented project standards?
|
||||
├─ YES → 🟠 SHOULD FIX
|
||||
└─ NO ↓
|
||||
|
||||
Would it prevent future maintenance?
|
||||
├─ YES → 🟡 CONSIDER FIX (if in scope)
|
||||
└─ NO ↓
|
||||
|
||||
Is it gold plating / over-engineering?
|
||||
├─ YES → ⚪ REJECT (document why)
|
||||
└─ NO ↓
|
||||
|
||||
Is it a style/opinion without real impact?
|
||||
├─ YES → ⚪ REJECT (document why)
|
||||
└─ NO → 🔵 OPTIONAL (tech debt backlog)
|
||||
```
|
||||
|
||||
### 4. Create Classification Report
|
||||
|
||||
```markdown
|
||||
# Code Review Analysis: Story {story_id}
|
||||
|
||||
## Review Metadata
|
||||
- Reviewer: {reviewer_type} (Adversarial / Multi-Agent)
|
||||
- Total Findings: {total_findings}
|
||||
- Review Date: {date}
|
||||
|
||||
## Classification Results
|
||||
|
||||
### 🔴 MUST FIX (Critical - Blocking)
|
||||
Total: {must_fix_count}
|
||||
|
||||
1. **[SECURITY] Unvalidated user input in API endpoint**
|
||||
- File: `src/api/users.ts:45`
|
||||
- Issue: POST /api/users accepts unvalidated input, SQL injection risk
|
||||
- Why this is real: Security vulnerability, could lead to data breach
|
||||
- Action: Add input validation with Zod schema
|
||||
- Estimated effort: 30 min
|
||||
|
||||
2. **[CORRECTNESS] Race condition in state update**
|
||||
- File: `src/components/UserForm.tsx:67`
|
||||
- Issue: Multiple async setState calls without proper sequencing
|
||||
- Why this is real: Causes intermittent bugs in production
|
||||
- Action: Use functional setState or useReducer
|
||||
- Estimated effort: 20 min
|
||||
|
||||
### 🟠 SHOULD FIX (High Priority)
|
||||
Total: {should_fix_count}
|
||||
|
||||
3. **[STANDARDS] Missing error handling per team convention**
|
||||
- File: `src/services/userService.ts:34`
|
||||
- Issue: API calls lack try-catch per documented standards
|
||||
- Why this matters: Team standard in CONTRIBUTING.md section 3.2
|
||||
- Action: Wrap in try-catch, log errors
|
||||
- Estimated effort: 15 min
|
||||
|
||||
### 🟡 CONSIDER FIX (Medium - If in scope)
|
||||
Total: {consider_count}
|
||||
|
||||
4. **[MAINTAINABILITY] Complex nested conditional**
|
||||
- File: `src/utils/validation.ts:23`
|
||||
- Issue: 4-level nested if-else hard to read
|
||||
- Why this matters: Could confuse future maintainers
|
||||
- Action: Extract to guard clauses or lookup table
|
||||
- Estimated effort: 45 min
|
||||
- **Scope consideration**: Nice to have, but not blocking
|
||||
|
||||
### ⚪ REJECTED (Gold Plating / False Positives)
|
||||
Total: {rejected_count}
|
||||
|
||||
5. **[REJECTED] "Add comprehensive logging to all functions"**
|
||||
- Reason: Gold plating - logging should be signal, not noise
|
||||
- Context: These are simple utility functions, no debugging issues
|
||||
- Verdict: REJECT - Would create log spam
|
||||
|
||||
6. **[REJECTED] "Extract component for reusability"**
|
||||
- Reason: YAGNI - component used only once, no reuse planned
|
||||
- Context: Story scope is single-use dashboard widget
|
||||
- Verdict: REJECT - Premature abstraction
|
||||
|
||||
7. **[REJECTED] "Add database connection pooling"**
|
||||
- Reason: Premature optimization - current load is minimal
|
||||
- Context: App has 10 concurrent users max, no performance issues
|
||||
- Verdict: REJECT - Optimize when needed, not speculatively
|
||||
|
||||
8. **[REJECTED] "Consider microservices architecture"**
|
||||
- Reason: Out of scope - architectural decision beyond story
|
||||
- Context: Story is adding a single API endpoint
|
||||
- Verdict: REJECT - Massive overreach
|
||||
|
||||
### 🔵 OPTIONAL (Tech Debt Backlog)
|
||||
Total: {optional_count}
|
||||
|
||||
9. **[STYLE] Inconsistent naming convention**
|
||||
- File: `src/utils/helpers.ts:12`
|
||||
- Issue: camelCase vs snake_case mixing
|
||||
- Why low priority: Works fine, linter doesn't flag it
|
||||
- Action: Standardize to camelCase when touching this file later
|
||||
- Create tech debt ticket: TD-{number}
|
||||
|
||||
## Summary
|
||||
|
||||
**Action Plan:**
|
||||
- 🔴 MUST FIX: {must_fix_count} issues (blocking)
|
||||
- 🟠 SHOULD FIX: {should_fix_count} issues (high priority)
|
||||
- 🟡 CONSIDER: {consider_count} issues (if time permits)
|
||||
- ⚪ REJECTED: {rejected_count} findings (documented why)
|
||||
- 🔵 OPTIONAL: {optional_count} items (tech debt backlog)
|
||||
|
||||
**Estimated fix time:** {total_fix_time_hours} hours
|
||||
|
||||
**Proceed to:** Step 9 - Fix Issues (implement MUST FIX + SHOULD FIX items)
|
||||
```
|
||||
|
||||
### 5. Document Rejections
|
||||
|
||||
**CRITICAL:** When rejecting findings, ALWAYS document WHY:
|
||||
|
||||
```markdown
|
||||
## Rejected Findings - Rationale
|
||||
|
||||
### Finding: "Add caching layer for all API calls"
|
||||
**Rejected because:**
|
||||
- ⚡ Premature optimization - no performance issues detected
|
||||
- 📊 Traffic analysis shows <100 requests/day
|
||||
- 🎯 Story scope is feature addition, not optimization
|
||||
- 💰 Cost: 2 days implementation, 0 proven benefit
|
||||
- 📝 Decision: Monitor first, optimize if needed
|
||||
|
||||
### Finding: "Refactor to use dependency injection"
|
||||
**Rejected because:**
|
||||
- 🏗️ Over-engineering - current approach works fine
|
||||
- 📏 Codebase size doesn't justify DI complexity
|
||||
- 👥 Team unfamiliar with DI patterns
|
||||
- 🎯 Story scope: simple feature, not architecture overhaul
|
||||
- 📝 Decision: Keep it simple, revisit if codebase grows
|
||||
|
||||
### Finding: "Add comprehensive JSDoc to all functions"
|
||||
**Rejected because:**
|
||||
- 📚 Gold plating - TypeScript types provide documentation
|
||||
- ⏱️ Time sink - 4+ hours for marginal benefit
|
||||
- 🎯 Team standard: JSDoc only for public APIs
|
||||
- 📝 Decision: Follow team convention, not reviewer preference
|
||||
```
|
||||
|
||||
### 6. Update State
|
||||
|
||||
```yaml
|
||||
# Update {stateFile}
|
||||
current_step: 8
|
||||
review_analysis:
|
||||
must_fix: {must_fix_count}
|
||||
should_fix: {should_fix_count}
|
||||
consider: {consider_count}
|
||||
rejected: {rejected_count}
|
||||
optional: {optional_count}
|
||||
estimated_fix_time: "{total_fix_time_hours}h"
|
||||
rejections_documented: true
|
||||
analysis_complete: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Critical Thinking Framework
|
||||
|
||||
Use this framework to evaluate EVERY finding:
|
||||
|
||||
### The "So What?" Test
|
||||
- **Ask:** "So what if we don't fix this?"
|
||||
- **If answer is:** "Nothing bad happens" → REJECT
|
||||
- **If answer is:** "Production breaks" → MUST FIX
|
||||
|
||||
### The "YAGNI" Test (You Aren't Gonna Need It)
|
||||
- **Ask:** "Do we need this NOW for current requirements?"
|
||||
- **If answer is:** "Maybe someday" → REJECT
|
||||
- **If answer is:** "Yes, breaks without it" → FIX
|
||||
|
||||
### The "Scope" Test
|
||||
- **Ask:** "Is this within the story's scope?"
|
||||
- **If answer is:** "No, requires new story" → REJECT (or create new story)
|
||||
- **If answer is:** "Yes, part of ACs" → FIX
|
||||
|
||||
### The "Team Standard" Test
|
||||
- **Ask:** "Does our team actually do this?"
|
||||
- **If answer is:** "No, reviewer's opinion" → REJECT
|
||||
- **If answer is:** "Yes, in CONTRIBUTING.md" → FIX
|
||||
|
||||
---
|
||||
|
||||
## Common Rejection Patterns
|
||||
|
||||
Learn to recognize these patterns:
|
||||
|
||||
1. **"Consider adding..."** - Usually gold plating unless critical
|
||||
2. **"It would be better if..."** - Subjective opinion, often rejectable
|
||||
3. **"For maximum performance..."** - Premature optimization
|
||||
4. **"To follow best practices..."** - Check if team actually follows it
|
||||
5. **"This could be refactored..."** - Does it need refactoring NOW?
|
||||
6. **"Add comprehensive..."** - Comprehensive = overkill most of the time
|
||||
7. **"Future-proof by..."** - Can't predict future, solve current problems
|
||||
|
||||
---
|
||||
|
||||
## Next Step
|
||||
|
||||
Proceed to **Step 9: Fix Issues** ({nextStep})
|
||||
|
||||
Implement MUST FIX and SHOULD FIX items. Skip rejected items (already documented why).
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
name: super-dev-pipeline
|
||||
description: "Step-file architecture with complexity-based routing, smart batching, and auto-story-creation. Micro stories get lightweight path, standard/complex get full quality gates."
|
||||
author: "BMad"
|
||||
version: "1.4.0" # Added auto-create story via /create-story-with-gap-analysis when story missing or incomplete
|
||||
|
||||
# Critical variables from config
|
||||
config_source: "{project-root}/_bmad/bmm/config.yaml"
|
||||
output_folder: "{config_source}:output_folder"
|
||||
sprint_artifacts: "{config_source}:sprint_artifacts"
|
||||
communication_language: "{config_source}:communication_language"
|
||||
date: system-generated
|
||||
|
||||
# Workflow paths
|
||||
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/super-dev-pipeline"
|
||||
steps_path: "{installed_path}/steps"
|
||||
templates_path: "{installed_path}/templates"
|
||||
checklists_path: "{installed_path}/checklists"
|
||||
|
||||
# State management
|
||||
state_file: "{sprint_artifacts}/super-dev-state-{{story_id}}.yaml"
|
||||
audit_trail: "{sprint_artifacts}/audit-super-dev-{{story_id}}-{{date}}.yaml"
|
||||
|
||||
# Auto-create story settings (NEW v1.4.0)
|
||||
# When story is missing or lacks proper context, auto-invoke /create-story-with-gap-analysis
|
||||
auto_create_story:
|
||||
enabled: true # Set to false to revert to old HALT behavior
|
||||
create_story_workflow: "{project-root}/_bmad/bmm/workflows/4-implementation/create-story-with-gap-analysis"
|
||||
triggers:
|
||||
- story_not_found # Story file doesn't exist
|
||||
- no_tasks # Story exists but has no tasks
|
||||
- missing_sections # Story missing required sections (Tasks, Acceptance Criteria)
|
||||
|
||||
# Complexity level (passed from batch-super-dev or set manually)
|
||||
# Controls which pipeline steps to execute
|
||||
complexity_level: "standard" # micro | standard | complex
|
||||
|
||||
# Complexity-based step skipping (NEW v1.2.0)
|
||||
complexity_routing:
|
||||
micro:
|
||||
skip_steps: [2, 5] # Skip pre-gap analysis and code review
|
||||
description: "Lightweight path for simple stories (≤3 tasks, low risk)"
|
||||
standard:
|
||||
skip_steps: [] # Full pipeline
|
||||
description: "Normal path with all quality gates"
|
||||
complex:
|
||||
skip_steps: [] # Full pipeline + warnings
|
||||
description: "Enhanced path for high-risk stories"
|
||||
warn_before_start: true
|
||||
suggest_split: true
|
||||
|
||||
# Workflow modes
|
||||
modes:
|
||||
interactive:
|
||||
description: "Human-in-the-loop with menu navigation between steps"
|
||||
checkpoint_on_failure: true
|
||||
requires_approval: true
|
||||
smart_batching: true # User can approve batching plan
|
||||
batch:
|
||||
description: "Unattended execution for batch-super-dev"
|
||||
checkpoint_on_failure: true
|
||||
requires_approval: false
|
||||
fail_fast: true
|
||||
smart_batching: true # Auto-enabled for efficiency
|
||||
|
||||
# Smart batching configuration
|
||||
smart_batching:
|
||||
enabled: true
|
||||
detect_patterns: true
|
||||
default_to_safe: true # When uncertain, execute individually
|
||||
min_batch_size: 3 # Minimum tasks to form a batch
|
||||
fallback_on_failure: true # Revert to individual if batch fails
|
||||
|
||||
# Batchable pattern definitions
|
||||
batchable_patterns:
|
||||
- pattern: "package_installation"
|
||||
keywords: ["Add", "package.json", "npm install", "dependency"]
|
||||
risk_level: "low"
|
||||
validation: "npm install && npm run build"
|
||||
|
||||
- pattern: "module_registration"
|
||||
keywords: ["Import", "Module", "app.module", "register"]
|
||||
risk_level: "low"
|
||||
validation: "tsc --noEmit"
|
||||
|
||||
- pattern: "code_deletion"
|
||||
keywords: ["Delete", "Remove", "rm ", "unlink"]
|
||||
risk_level: "low"
|
||||
validation: "npm test && npm run build"
|
||||
|
||||
- pattern: "import_update"
|
||||
keywords: ["Update import", "Change import", "import from"]
|
||||
risk_level: "low"
|
||||
validation: "npm run build"
|
||||
|
||||
# Non-batchable pattern definitions (always execute individually)
|
||||
individual_patterns:
|
||||
- pattern: "business_logic"
|
||||
keywords: ["circuit breaker", "fallback", "caching for", "strategy"]
|
||||
risk_level: "medium"
|
||||
|
||||
- pattern: "security"
|
||||
keywords: ["auth", "permission", "security", "encrypt"]
|
||||
risk_level: "high"
|
||||
|
||||
- pattern: "data_migration"
|
||||
keywords: ["migration", "schema", "ALTER TABLE", "database"]
|
||||
risk_level: "high"
|
||||
|
||||
# Agent role definitions (loaded once, switched as needed)
|
||||
agents:
|
||||
dev:
|
||||
name: "Developer"
|
||||
persona: "{project-root}/_bmad/bmm/agents/dev.md"
|
||||
description: "Pre-gap, implementation, post-validation, code review"
|
||||
used_in_steps: [2, 3, 4, 5]
|
||||
sm:
|
||||
name: "Scrum Master"
|
||||
persona: "{project-root}/_bmad/bmm/agents/sm.md"
|
||||
description: "Story completion and status"
|
||||
used_in_steps: [6]
|
||||
|
||||
# Step file definitions
|
||||
steps:
|
||||
- step: 1
|
||||
file: "{steps_path}/step-01-init.md"
|
||||
name: "Initialize"
|
||||
description: "Load story context and detect development mode"
|
||||
agent: null
|
||||
quality_gate: false
|
||||
|
||||
- step: 2
|
||||
file: "{steps_path}/step-02-pre-gap-analysis.md"
|
||||
name: "Pre-Gap Analysis"
|
||||
description: "Validate tasks against codebase (critical for brownfield)"
|
||||
agent: dev
|
||||
quality_gate: true
|
||||
|
||||
- step: 3
|
||||
file: "{steps_path}/step-03-implement.md"
|
||||
name: "Implement"
|
||||
description: "Adaptive implementation (TDD for new, refactor for existing)"
|
||||
agent: dev
|
||||
quality_gate: true
|
||||
|
||||
- step: 4
|
||||
file: "{steps_path}/step-04-post-validation.md"
|
||||
name: "Post-Validation"
|
||||
description: "Verify completed tasks against codebase reality"
|
||||
agent: dev
|
||||
quality_gate: true
|
||||
iterative: true # May re-invoke step 3 if gaps found
|
||||
|
||||
- step: 5
|
||||
file: "{steps_path}/step-05-code-review.md"
|
||||
name: "Code Review"
|
||||
description: "Adversarial code review finding 3-10 issues"
|
||||
agent: dev
|
||||
quality_gate: true
|
||||
|
||||
- step: 6
|
||||
file: "{steps_path}/step-06-complete.md"
|
||||
name: "Complete"
|
||||
description: "Commit and push changes"
|
||||
agent: sm
|
||||
quality_gate: false
|
||||
|
||||
- step: 7
|
||||
file: "{steps_path}/step-07-summary.md"
|
||||
name: "Summary"
|
||||
description: "Generate audit trail"
|
||||
agent: null
|
||||
quality_gate: false
|
||||
|
||||
# Quality gates
|
||||
quality_gates:
|
||||
pre_gap_analysis:
|
||||
step: 2
|
||||
criteria:
|
||||
- "All tasks validated or refined"
|
||||
- "No missing context"
|
||||
- "Implementation path clear"
|
||||
|
||||
implementation:
|
||||
step: 3
|
||||
criteria:
|
||||
- "All tasks completed"
|
||||
- "Tests pass"
|
||||
- "Code follows project patterns"
|
||||
|
||||
post_validation:
|
||||
step: 4
|
||||
criteria:
|
||||
- "All completed tasks verified against codebase"
|
||||
- "Zero false positives remaining"
|
||||
- "Files/functions/tests actually exist"
|
||||
|
||||
code_review:
|
||||
step: 5
|
||||
criteria:
|
||||
- "3-10 specific issues identified"
|
||||
- "All issues resolved or documented"
|
||||
- "Security review complete"
|
||||
|
||||
# Document loading strategies
|
||||
input_file_patterns:
|
||||
story:
|
||||
description: "Story file being developed"
|
||||
pattern: "{sprint_artifacts}/story-*.md"
|
||||
load_strategy: "FULL_LOAD"
|
||||
cache: true
|
||||
|
||||
project_context:
|
||||
description: "Critical rules and patterns"
|
||||
pattern: "**/project-context.md"
|
||||
load_strategy: "FULL_LOAD"
|
||||
cache: true
|
||||
|
||||
standalone: true
|
||||
Loading…
Reference in New Issue