Initial commit
This commit is contained in:
495
commands/fix.md
Normal file
495
commands/fix.md
Normal file
@@ -0,0 +1,495 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user