496 lines
14 KiB
Markdown
496 lines
14 KiB
Markdown
---
|
|
description: Fix bugs with test-driven approach and automatic retry - simplified bugfix workflow
|
|
args:
|
|
- name: bug_description
|
|
description: Natural language description of the bug to fix
|
|
required: true
|
|
- name: --regression-test
|
|
description: Create failing test first (TDD approach - recommended)
|
|
required: false
|
|
- name: --hotfix
|
|
description: Use expedited hotfix workflow for production issues
|
|
required: false
|
|
- name: --max-retries
|
|
description: Maximum fix retry attempts (default 2)
|
|
required: false
|
|
---
|
|
|
|
## User Input
|
|
|
|
```text
|
|
$ARGUMENTS
|
|
```
|
|
|
|
You **MUST** consider the user input before proceeding (if not empty).
|
|
|
|
## Goal
|
|
|
|
Fix bugs using a test-driven approach with automatic retry logic for failed fixes.
|
|
|
|
**Purpose**: Streamline bug fixing by combining bugfix workflow with retry logic and optional regression testing.
|
|
|
|
**Workflow**:
|
|
- **Standard**: Bugfix → Verify → (Retry if needed)
|
|
- **With --regression-test**: Create Test → Verify Fails → Bugfix → Verify Passes
|
|
- **With --hotfix**: Expedited workflow for production issues
|
|
|
|
**User Experience**:
|
|
- Single command instead of manual bugfix + validation
|
|
- Automatic retry if fix doesn't work
|
|
- Test-first approach ensures regression prevention
|
|
- Ready for final merge with `/specswarm:ship`
|
|
|
|
---
|
|
|
|
## Pre-Flight Checks
|
|
|
|
```bash
|
|
# Parse arguments
|
|
BUG_DESC=""
|
|
REGRESSION_TEST=false
|
|
HOTFIX=false
|
|
MAX_RETRIES=2
|
|
|
|
# Extract bug description (first non-flag argument)
|
|
for arg in $ARGUMENTS; do
|
|
if [ "${arg:0:2}" != "--" ] && [ -z "$BUG_DESC" ]; then
|
|
BUG_DESC="$arg"
|
|
elif [ "$arg" = "--regression-test" ]; then
|
|
REGRESSION_TEST=true
|
|
elif [ "$arg" = "--hotfix" ]; then
|
|
HOTFIX=true
|
|
elif [ "$arg" = "--max-retries" ]; then
|
|
shift
|
|
MAX_RETRIES="$1"
|
|
fi
|
|
done
|
|
|
|
# Validate bug description
|
|
if [ -z "$BUG_DESC" ]; then
|
|
echo "❌ Error: Bug description required"
|
|
echo ""
|
|
echo "Usage: /specswarm:fix \"bug description\" [--regression-test] [--hotfix] [--max-retries N]"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " /specswarm:fix \"Login fails with special characters in password\""
|
|
echo " /specswarm:fix \"Cart total incorrect with discounts\" --regression-test"
|
|
echo " /specswarm:fix \"Production API timeout\" --hotfix"
|
|
echo " /specswarm:fix \"Memory leak in dashboard\" --regression-test --max-retries 3"
|
|
exit 1
|
|
fi
|
|
|
|
# Get project root
|
|
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
|
echo "❌ Error: Not in a git repository"
|
|
exit 1
|
|
fi
|
|
|
|
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
cd "$REPO_ROOT"
|
|
```
|
|
|
|
---
|
|
|
|
## Environment Detection
|
|
|
|
Detect available capabilities before starting workflow:
|
|
|
|
```bash
|
|
# Get plugin directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Detect web project and Chrome DevTools MCP availability
|
|
CHROME_DEVTOOLS_MODE="disabled"
|
|
WEB_FRAMEWORK=""
|
|
|
|
if [ -f "$PLUGIN_DIR/lib/web-project-detector.sh" ]; then
|
|
source "$PLUGIN_DIR/lib/web-project-detector.sh"
|
|
|
|
# Check if Chrome DevTools MCP should be used
|
|
if should_use_chrome_devtools "$REPO_ROOT"; then
|
|
CHROME_DEVTOOLS_MODE="enabled"
|
|
elif is_web_project "$REPO_ROOT"; then
|
|
CHROME_DEVTOOLS_MODE="fallback"
|
|
fi
|
|
fi
|
|
```
|
|
|
|
---
|
|
|
|
## Execution Steps
|
|
|
|
### Step 1: Display Welcome Banner
|
|
|
|
```bash
|
|
if [ "$HOTFIX" = true ]; then
|
|
echo "🚨 SpecSwarm Fix - HOTFIX Mode (Expedited)"
|
|
else
|
|
echo "🔧 SpecSwarm Fix - Test-Driven Bug Resolution"
|
|
fi
|
|
echo "══════════════════════════════════════════"
|
|
echo ""
|
|
echo "Bug: $BUG_DESC"
|
|
echo ""
|
|
|
|
if [ "$HOTFIX" = true ]; then
|
|
echo "⚡ HOTFIX MODE: Expedited workflow for production issues"
|
|
echo ""
|
|
echo "This workflow will:"
|
|
echo " 1. Analyze bug and identify root cause"
|
|
echo " 2. Implement fix immediately"
|
|
echo " 3. Verify fix works"
|
|
echo " 4. Skip comprehensive testing (fast path)"
|
|
echo ""
|
|
elif [ "$REGRESSION_TEST" = true ]; then
|
|
echo "✅ Test-Driven Mode: Creating regression test first"
|
|
echo ""
|
|
echo "This workflow will:"
|
|
echo " 1. Create failing test that reproduces bug"
|
|
echo " 2. Verify test fails (confirms bug exists)"
|
|
echo " 3. Implement fix"
|
|
echo " 4. Verify test passes (confirms fix works)"
|
|
echo " 5. Run full test suite"
|
|
echo " 6. Retry up to $MAX_RETRIES times if fix fails"
|
|
echo ""
|
|
else
|
|
echo "This workflow will:"
|
|
echo " 1. Analyze bug and identify root cause"
|
|
echo " 2. Implement fix"
|
|
echo " 3. Verify fix works"
|
|
echo " 4. Run test suite to catch regressions"
|
|
echo " 5. Retry up to $MAX_RETRIES times if fix fails"
|
|
echo ""
|
|
fi
|
|
|
|
# Show Chrome DevTools MCP status for web projects
|
|
if [ "$CHROME_DEVTOOLS_MODE" = "enabled" ]; then
|
|
echo "🌐 Web project detected ($WEB_FRAMEWORK)"
|
|
echo "🎯 Chrome DevTools MCP: Enhanced browser debugging available"
|
|
echo ""
|
|
elif [ "$CHROME_DEVTOOLS_MODE" = "fallback" ]; then
|
|
echo "🌐 Web project detected ($WEB_FRAMEWORK)"
|
|
echo "📦 Using Playwright for browser automation"
|
|
echo ""
|
|
fi
|
|
|
|
read -p "Press Enter to start, or Ctrl+C to cancel..."
|
|
echo ""
|
|
```
|
|
|
|
---
|
|
|
|
### Step 2: Phase 1 - Regression Test (Optional)
|
|
|
|
**IF --regression-test flag was provided:**
|
|
|
|
```bash
|
|
if [ "$REGRESSION_TEST" = true ]; then
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🧪 Phase 1: Creating Regression Test"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "Creating a test that reproduces the bug..."
|
|
echo ""
|
|
fi
|
|
```
|
|
|
|
**YOU MUST create a failing test that reproduces the bug:**
|
|
|
|
If REGRESSION_TEST = true:
|
|
1. Analyze the bug description
|
|
2. Identify the component/module affected
|
|
3. Create a test file (e.g., `bug-NNN.test.ts`)
|
|
4. Write a test that reproduces the bug behavior
|
|
5. The test should FAIL before the fix
|
|
|
|
```bash
|
|
if [ "$REGRESSION_TEST" = true ]; then
|
|
# Run the new test to verify it fails
|
|
# (This confirms the bug actually exists)
|
|
|
|
echo "Running test to verify it fails..."
|
|
# Detect test runner and run test
|
|
|
|
echo ""
|
|
echo "✅ Test created and verified (currently failing as expected)"
|
|
echo ""
|
|
fi
|
|
```
|
|
|
|
---
|
|
|
|
### Step 3: Phase 2 - Implement Fix
|
|
|
|
**YOU MUST NOW run the bugfix command using the SlashCommand tool:**
|
|
|
|
```bash
|
|
if [ "$HOTFIX" = true ]; then
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "⚡ Phase 2: Implementing Hotfix"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
else
|
|
PHASE_NUM=2
|
|
if [ "$REGRESSION_TEST" = true ]; then
|
|
PHASE_NUM=2
|
|
fi
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🔧 Phase $PHASE_NUM: Implementing Fix"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
fi
|
|
echo ""
|
|
```
|
|
|
|
**Use the appropriate command:**
|
|
|
|
```
|
|
IF HOTFIX = true:
|
|
Use the SlashCommand tool to execute: /specswarm:hotfix "$BUG_DESC"
|
|
ELSE:
|
|
Use the SlashCommand tool to execute: /specswarm:bugfix "$BUG_DESC"
|
|
```
|
|
|
|
Wait for fix to be implemented.
|
|
|
|
```bash
|
|
echo ""
|
|
echo "✅ Fix implemented"
|
|
echo ""
|
|
```
|
|
|
|
---
|
|
|
|
### Step 4: Phase 3 - Verify Fix Works
|
|
|
|
**YOU MUST NOW verify the fix works:**
|
|
|
|
```bash
|
|
PHASE_NUM=3
|
|
if [ "$REGRESSION_TEST" = true ]; then
|
|
PHASE_NUM=3
|
|
fi
|
|
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "✓ Phase $PHASE_NUM: Verifying Fix"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
```
|
|
|
|
**Verification steps:**
|
|
|
|
1. If REGRESSION_TEST = true:
|
|
- Run the regression test again
|
|
- It should now PASS
|
|
- If it still FAILS, fix didn't work
|
|
|
|
2. Run full test suite:
|
|
- Detect test runner (npm test, pytest, etc.)
|
|
- Run all tests
|
|
- Check for any new failures
|
|
|
|
3. Store result as FIX_SUCCESSFUL (true/false)
|
|
|
|
```bash
|
|
# Detect and run test suite
|
|
if [ -f "package.json" ]; then
|
|
if grep -q "\"test\":" package.json; then
|
|
echo "Running test suite..."
|
|
npm test
|
|
TEST_RESULT=$?
|
|
fi
|
|
fi
|
|
|
|
if [ $TEST_RESULT -eq 0 ]; then
|
|
FIX_SUCCESSFUL=true
|
|
echo ""
|
|
echo "✅ All tests passing - fix verified!"
|
|
echo ""
|
|
else
|
|
FIX_SUCCESSFUL=false
|
|
echo ""
|
|
echo "❌ Tests failing - fix may not be complete"
|
|
echo ""
|
|
fi
|
|
```
|
|
|
|
---
|
|
|
|
### Step 5: Phase 4 - Retry Logic (If Needed)
|
|
|
|
**IF fix failed and retries remaining:**
|
|
|
|
```bash
|
|
RETRY_COUNT=0
|
|
|
|
while [ "$FIX_SUCCESSFUL" = false ] && [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
|
|
RETRY_COUNT=$((RETRY_COUNT + 1))
|
|
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🔄 Retry $RETRY_COUNT/$MAX_RETRIES: Attempting Another Fix"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "Previous fix didn't resolve all test failures."
|
|
echo "Analyzing test failures and implementing improved fix..."
|
|
echo ""
|
|
|
|
# Show Chrome DevTools diagnostics availability for web projects
|
|
if [ "$CHROME_DEVTOOLS_MODE" = "enabled" ]; then
|
|
echo "🌐 Chrome DevTools MCP available for enhanced failure diagnostics"
|
|
echo " (console errors, network failures, runtime state inspection)"
|
|
echo ""
|
|
fi
|
|
```
|
|
|
|
**YOU MUST re-run bugfix with additional context:**
|
|
|
|
```
|
|
Use the SlashCommand tool to execute: /specswarm:bugfix "Fix failed tests from previous attempt: $BUG_DESC. Test failures: [extract failure details from test output]"
|
|
```
|
|
|
|
**Re-verify:**
|
|
- Run tests again
|
|
- Update FIX_SUCCESSFUL based on results
|
|
|
|
```bash
|
|
# Re-run tests
|
|
npm test
|
|
TEST_RESULT=$?
|
|
|
|
if [ $TEST_RESULT -eq 0 ]; then
|
|
FIX_SUCCESSFUL=true
|
|
echo ""
|
|
echo "✅ Fix successful on retry $RETRY_COUNT!"
|
|
echo ""
|
|
break
|
|
else
|
|
echo ""
|
|
echo "❌ Still failing after retry $RETRY_COUNT"
|
|
echo ""
|
|
fi
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
### Step 6: Final Report
|
|
|
|
**Display completion summary:**
|
|
|
|
```bash
|
|
echo ""
|
|
echo "══════════════════════════════════════════"
|
|
|
|
if [ "$FIX_SUCCESSFUL" = true ]; then
|
|
echo "🎉 BUG FIX COMPLETE"
|
|
echo "══════════════════════════════════════════"
|
|
echo ""
|
|
echo "Bug: $BUG_DESC"
|
|
echo ""
|
|
if [ $RETRY_COUNT -gt 0 ]; then
|
|
echo "✅ Fix implemented (succeeded on retry $RETRY_COUNT)"
|
|
else
|
|
echo "✅ Fix implemented"
|
|
fi
|
|
if [ "$REGRESSION_TEST" = true ]; then
|
|
echo "✅ Regression test created and passing"
|
|
fi
|
|
echo "✅ All tests passing"
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "📝 NEXT STEPS"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "1. 🧪 Manual Testing"
|
|
echo " - Test the bug fix in your app"
|
|
echo " - Verify the original issue is resolved"
|
|
echo " - Check for any side effects"
|
|
echo ""
|
|
echo "2. 🚢 Ship When Ready"
|
|
echo " Run: /specswarm:ship"
|
|
echo ""
|
|
echo " This will:"
|
|
echo " - Validate code quality"
|
|
echo " - Merge to parent branch if passing"
|
|
echo " - Complete the bugfix workflow"
|
|
echo ""
|
|
else
|
|
echo "⚠️ BUG FIX INCOMPLETE"
|
|
echo "══════════════════════════════════════════"
|
|
echo ""
|
|
echo "Bug: $BUG_DESC"
|
|
echo ""
|
|
echo "❌ Fix attempted $((RETRY_COUNT + 1)) time(s) but tests still failing"
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🔧 RECOMMENDED ACTIONS"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "1. Review test failure output above"
|
|
echo "2. Bug may be more complex than initially analyzed"
|
|
echo "3. Consider:"
|
|
echo " - Manual investigation of root cause"
|
|
echo " - Breaking into smaller sub-bugs"
|
|
echo " - Requesting code review for insights"
|
|
echo ""
|
|
echo "4. Re-run with more retries:"
|
|
echo " /specswarm:fix \"$BUG_DESC\" --max-retries 5"
|
|
echo ""
|
|
echo "5. Or fix manually and run tests:"
|
|
echo " npm test"
|
|
echo ""
|
|
fi
|
|
|
|
echo "══════════════════════════════════════════"
|
|
```
|
|
|
|
---
|
|
|
|
## Error Handling
|
|
|
|
If any step fails:
|
|
|
|
1. **Bugfix/hotfix command fails**: Display error, suggest reviewing bug description
|
|
2. **Test creation fails**: Display error, suggest creating test manually
|
|
3. **All retries exhausted**: Display final report with recommended actions (see Step 6)
|
|
|
|
**All errors should report clearly and suggest remediation.**
|
|
|
|
---
|
|
|
|
## Design Philosophy
|
|
|
|
**Test-Driven**: Optional --regression-test ensures bug won't resurface
|
|
|
|
**Resilient**: Automatic retry logic handles incomplete fixes
|
|
|
|
**Fast Path**: --hotfix for production emergencies
|
|
|
|
**User Experience**: Clear progress indicators, retry feedback, actionable next steps
|
|
|
|
---
|
|
|
|
## Comparison to Manual Workflow
|
|
|
|
**Before** (Manual):
|
|
```bash
|
|
/specswarm:bugfix "bug description"
|
|
# [Manually check if fix worked]
|
|
# [If failed, manually re-run bugfix]
|
|
# [Manually run tests]
|
|
/specswarm:complete
|
|
```
|
|
**3-5+ commands**, manual verification and retry logic
|
|
|
|
**After** (Fix):
|
|
```bash
|
|
/specswarm:fix "bug description" --regression-test
|
|
# [Automatic verification and retry]
|
|
/specswarm:ship
|
|
```
|
|
**2 commands**, automatic retry, regression test included
|
|
|
|
**Benefits**:
|
|
- Automatic retry eliminates manual orchestration
|
|
- Regression test prevents future regressions
|
|
- Clear success/failure reporting with next steps
|