Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:39:24 +08:00
commit 7e16d8a2a1
40 changed files with 16981 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
{
"name": "specswarm",
"description": "Complete software development toolkit: spec-driven workflows, autonomous orchestration, lifecycle management (bugfix/modify/refactor), quality validation, and performance monitoring. v3.5.0: 5th core workflow (modify) + README simplification (670→400 lines) + comprehensive docs (COMMANDS.md, SETUP.md, FEATURES.md). v3.4.0: Confidence-based auto-execution. v3.3.9: MANDATORY/ALWAYS directive descriptions.",
"version": "3.5.0",
"author": {
"name": "Marty Bonacci",
"url": "https://github.com/MartyBonacci"
},
"skills": [
"./skills"
],
"commands": [
"./commands"
]
}

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# specswarm
Complete software development toolkit: spec-driven workflows, autonomous orchestration, lifecycle management (bugfix/modify/refactor), quality validation, and performance monitoring. v3.5.0: 5th core workflow (modify) + README simplification (670→400 lines) + comprehensive docs (COMMANDS.md, SETUP.md, FEATURES.md). v3.4.0: Confidence-based auto-execution. v3.3.9: MANDATORY/ALWAYS directive descriptions.

481
commands/analyze-quality.md Normal file
View File

@@ -0,0 +1,481 @@
---
description: Comprehensive codebase quality analysis with prioritized recommendations
---
<!--
ATTRIBUTION CHAIN:
1. Original: SpecLab plugin by Marty Bonacci & Claude Code (2025)
2. Phase 2 Enhancement: Comprehensive quality analysis feature
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Perform comprehensive codebase quality analysis to identify improvement opportunities and generate prioritized recommendations.
**Key Capabilities**:
1. **Test Coverage Gaps**: Find files without tests
2. **Architecture Issues**: Detect anti-patterns and violations
3. **Missing Documentation**: Identify undocumented code
4. **Performance Issues**: Find optimization opportunities
5. **Security Issues**: Detect vulnerabilities
6. **Quality Scoring**: Calculate module-level quality scores
**Coverage**: Provides holistic codebase health assessment
---
## Execution Steps
### 1. Initialize Analysis Context
**YOU MUST NOW initialize the analysis using the Bash tool:**
1. **Get repository root:**
```bash
git rev-parse --show-toplevel 2>/dev/null || pwd
```
Store as REPO_ROOT.
2. **Display analysis banner:**
```
📊 Codebase Quality Analysis
============================
Analyzing: {REPO_ROOT}
Started: {TIMESTAMP}
```
3. **Detect project type** by reading package.json:
- Framework: Vite, Next.js, Remix, CRA, or Generic
- Language: JavaScript, TypeScript, Python, Go, etc.
- Test framework: Vitest, Jest, Pytest, etc.
---
### 2. Test Coverage Gap Analysis
**YOU MUST NOW analyze test coverage gaps:**
1. **Find all source files** using Bash:
```bash
find ${REPO_ROOT} -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) \
-not -path "*/node_modules/*" \
-not -path "*/dist/*" \
-not -path "*/build/*" \
-not -path "*/.next/*" \
-not -path "*/test/*" \
-not -path "*/tests/*" \
-not -path "*/__tests__/*"
```
Store count as TOTAL_SOURCE_FILES.
2. **Find all test files** using Bash:
```bash
find ${REPO_ROOT} -type f \( \
-name "*.test.ts" -o -name "*.test.tsx" -o -name "*.test.js" -o -name "*.test.jsx" -o \
-name "*.spec.ts" -o -name "*.spec.tsx" -o -name "*.spec.js" -o -name "*.spec.jsx" \
\) -not -path "*/node_modules/*"
```
Store count as TOTAL_TEST_FILES.
3. **Calculate test coverage ratio:**
```
TEST_RATIO = (TOTAL_TEST_FILES / TOTAL_SOURCE_FILES) * 100
```
4. **Find files without corresponding tests:**
- For each source file in app/, src/, lib/
- Check if corresponding test file exists
- Add to UNTESTED_FILES list if no test found
5. **Display test coverage gaps:**
```
📋 Test Coverage Gaps
=====================
Source Files: {TOTAL_SOURCE_FILES}
Test Files: {TOTAL_TEST_FILES}
Test Ratio: {TEST_RATIO}%
Files Without Tests ({COUNT}):
{TOP_10_UNTESTED_FILES}
Priority: {HIGH/MEDIUM/LOW}
Impact: Missing tests for {COUNT} files
```
---
### 3. Architecture Pattern Analysis
**YOU MUST NOW analyze architectural patterns:**
1. **Run SSR pattern validator** using Bash:
```bash
bash ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/specswarm/lib/ssr-validator.sh
```
Capture issues count and details.
2. **Scan for common anti-patterns** using Grep:
a. **useEffect with fetch** (should use loaders):
```bash
grep -rn "useEffect.*fetch" app/ src/ --include="*.tsx" --include="*.ts"
```
b. **Client-side state for server data** (should use loader data):
```bash
grep -rn "useState.*fetch\|useState.*axios" app/ src/ --include="*.tsx"
```
c. **Class components** (should use functional):
```bash
grep -rn "class.*extends React.Component" app/ src/ --include="*.tsx" --include="*.jsx"
```
d. **Inline styles** (should use Tailwind/CSS modules):
```bash
grep -rn "style={{" app/ src/ --include="*.tsx" --include="*.jsx"
```
3. **Display architecture issues:**
```
🏗️ Architecture Issues
======================
SSR Patterns: {SSR_ISSUES} issues
- Hardcoded URLs: {COUNT}
- Relative URLs in SSR: {COUNT}
React Anti-Patterns: {REACT_ISSUES} issues
- useEffect with fetch: {COUNT}
- Client-side state: {COUNT}
- Class components: {COUNT}
Styling Issues: {STYLE_ISSUES} issues
- Inline styles: {COUNT}
Priority: {CRITICAL/HIGH/MEDIUM/LOW}
Impact: Architectural debt in {TOTAL_ISSUES} locations
```
---
### 4. Documentation Gap Analysis
**YOU MUST NOW analyze documentation gaps:**
1. **Find functions without JSDoc** using Grep:
```bash
grep -rn "^function\|^export function\|^const.*= (" app/ src/ --include="*.ts" --include="*.tsx" | \
while read line; do
# Check if previous line has /** comment
done
```
2. **Find components without prop types:**
```bash
grep -rn "export.*function.*Component\|export.*const.*Component" app/ src/ --include="*.tsx"
```
Check if they have TypeScript interface/type definitions.
3. **Find API endpoints without OpenAPI/comments:**
```bash
find app/routes/ app/api/ -name "*.ts" -o -name "*.tsx"
```
Check for route handler documentation.
4. **Display documentation gaps:**
```
📚 Documentation Gaps
=====================
Functions without JSDoc: {COUNT}
Components without prop types: {COUNT}
API endpoints without docs: {COUNT}
Priority: {MEDIUM/LOW}
Impact: {COUNT} undocumented items
```
---
### 5. Performance Issue Detection
**YOU MUST NOW detect performance issues:**
1. **Run bundle size analyzer** (Phase 3 Enhancement) using Bash:
```bash
bash ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/speclabs/lib/bundle-size-monitor.sh ${REPO_ROOT}
```
Capture:
- Total bundle size
- List of large bundles (>500KB)
- List of critical bundles (>1MB)
- Bundle size score (0-20 points)
2. **Find missing lazy loading:**
```bash
grep -rn "import.*from" app/pages/ app/routes/ --include="*.tsx" | \
grep -v "React.lazy\|lazy("
```
3. **Find unoptimized images:**
```bash
find public/ static/ app/ -type f \( -name "*.jpg" -o -name "*.png" \) -size +100k
```
4. **Display performance issues:**
```
⚡ Performance Issues
=====================
Bundle Sizes (Phase 3):
- Total: {TOTAL_SIZE}
- Large bundles (>500KB): {COUNT}
- Critical bundles (>1MB): {COUNT}
- Top offenders:
* {LARGEST_BUNDLE_1}
* {LARGEST_BUNDLE_2}
- Score: {SCORE}/20 points
Missing Lazy Loading: {COUNT} routes
Unoptimized Images: {COUNT} files (>{SIZE})
Priority: {HIGH/MEDIUM}
Impact: Page load performance degraded by {TOTAL_SIZE}
```
---
### 6. Security Issue Detection
**YOU MUST NOW detect security issues:**
1. **Find exposed secrets** using Grep:
```bash
grep -rn "API_KEY\|SECRET\|PASSWORD.*=" app/ src/ --include="*.ts" --include="*.tsx" | \
grep -v "process.env\|import.meta.env"
```
2. **Find missing input validation:**
```bash
grep -rn "formData.get\|request.body\|params\." app/routes/ app/api/ --include="*.ts"
```
Check if followed by validation logic.
3. **Find potential XSS vulnerabilities:**
```bash
grep -rn "dangerouslySetInnerHTML\|innerHTML" app/ src/ --include="*.tsx" --include="*.jsx"
```
4. **Display security issues:**
```
🔒 Security Issues
==================
Exposed Secrets: {COUNT} potential leaks
Missing Input Validation: {COUNT} endpoints
XSS Vulnerabilities: {COUNT} locations
Priority: {CRITICAL if >0, else LOW}
Impact: Security risk in {COUNT} locations
```
---
### 7. Module-Level Quality Scoring
**YOU MUST NOW calculate quality scores per module:**
1. **Group files by module/directory:**
- app/pages/
- app/components/
- app/utils/
- src/services/
- etc.
2. **For each module, calculate score:**
- Test Coverage: Has tests? (+25 points)
- Documentation: Has JSDoc/types? (+15 points)
- No Anti-Patterns: Clean architecture? (+20 points)
- No Security Issues: Secure? (+20 points)
- Performance: Optimized? (+20 points)
- Total: 0-100 points
3. **Display module scores:**
```
📊 Module Quality Scores
========================
app/pages/: 75/100 ████████████████░░░░ (Good)
- Test Coverage: ✓ 25/25
- Documentation: ✓ 15/15
- Architecture: ⚠️ 15/20 (2 anti-patterns)
- Security: ✓ 20/20
- Performance: ✗ 0/20 (missing lazy load)
app/components/: 45/100 ██████████░░░░░░░░░░ (Needs Improvement)
- Test Coverage: ✗ 0/25 (no tests)
- Documentation: ⚠️ 10/15 (missing prop types)
- Architecture: ✓ 20/20
- Security: ✓ 20/20
- Performance: ⚠️ 10/20 (large bundle)
Overall Codebase Score: {AVERAGE}/100
```
---
### 8. Prioritized Recommendations
**YOU MUST NOW generate prioritized recommendations:**
1. **Critical Priority** (security, production failures):
- Exposed secrets
- SSR pattern violations
- Security vulnerabilities
2. **High Priority** (quality, maintainability):
- Missing test coverage for core modules
- Major architecture anti-patterns
- Large bundle sizes
3. **Medium Priority** (improvement opportunities):
- Missing documentation
- Minor anti-patterns
- Missing lazy loading
4. **Low Priority** (nice-to-have):
- Additional JSDoc
- Inline style cleanup
- Image optimization
5. **Display recommendations:**
```
📈 Prioritized Recommendations
===============================
🔴 CRITICAL (Fix Immediately):
1. Remove 3 exposed API keys from client code
Impact: Security breach risk
Files: app/config.ts:12, app/utils/api.ts:45, src/client.ts:8
Fix: Move to environment variables
2. Fix 11 hardcoded URLs in SSR contexts
Impact: Production deployment will fail
Files: See SSR validation report
Fix: Use getApiUrl() helper
🟠 HIGH (Fix This Week):
3. Add tests for 15 untested core modules
Impact: No regression protection
Modules: app/pages/, app/components/Auth/
Fix: Generate test templates
4. Reduce bundle size by 2.5MB
Impact: Slow page loads
Files: dist/main.js (3.2MB), dist/vendor.js (1.8MB)
Fix: Implement code splitting and lazy loading
🟡 MEDIUM (Fix This Sprint):
5. Add JSDoc to 45 functions
Impact: Maintainability
Fix: Use IDE code generation
6. Replace 12 useEffect fetches with loaders
Impact: Architecture consistency
Fix: Migrate to React Router loaders
🟢 LOW (Nice to Have):
7. Optimize 8 large images
Impact: Minor performance gain
Fix: Use next/image or image optimization service
Estimated Impact: Fixing critical + high items would increase quality score from {CURRENT}/100 → {PROJECTED}/100
```
---
### 9. Generate Analysis Report
**YOU MUST NOW generate final report:**
1. **Create summary:**
```
═══════════════════════════════════════════════
Quality Analysis Report
═══════════════════════════════════════════════
Overall Quality Score: {SCORE}/100 {STATUS_EMOJI}
Breakdown:
- Test Coverage: {SCORE}/100
- Architecture: {SCORE}/100
- Documentation: {SCORE}/100
- Performance: {SCORE}/100
- Security: {SCORE}/100
Issues Found:
- Critical: {COUNT} 🔴
- High: {COUNT} 🟠
- Medium: {COUNT} 🟡
- Low: {COUNT} 🟢
Total Issues: {TOTAL}
```
2. **Save report** to file:
- Write to: `.specswarm/quality-analysis-{TIMESTAMP}.md`
- Include all sections above
- Add file-by-file details
- Include fix commands/examples
3. **Display next steps:**
```
📋 Next Steps
=============
1. Review full report: .specswarm/quality-analysis-{TIMESTAMP}.md
2. Fix critical issues first (security + SSR)
3. Run quality validation: /specswarm:implement --validate-only
4. Track improvements in metrics.json
Commands:
- View detailed SSR issues: bash plugins/specswarm/lib/ssr-validator.sh
- Generate test templates: /specswarm:implement {feature}
- Re-run analysis: /specswarm:analyze-quality
```
---
## Success Criteria
✅ All analysis sections completed
✅ Issues categorized by priority
✅ Recommendations generated with impact estimates
✅ Report saved to .specswarm/
✅ Next steps provided
---
## Operating Principles
1. **Comprehensive**: Scan entire codebase, not just recent changes
2. **Prioritized**: Critical issues first, nice-to-haves last
3. **Actionable**: Provide specific fixes, not just problems
4. **Impact-Aware**: Estimate quality score improvement
5. **Automated**: Runnable without user interaction
6. **Repeatable**: Track improvements over time
---
**Note**: This command provides a holistic view of codebase quality. Use it before major releases, after adding new features, or when quality scores decline.

192
commands/analyze.md Normal file
View File

@@ -0,0 +1,192 @@
---
description: Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Identify inconsistencies, duplications, ambiguities, and underspecified items across the three core artifacts (`spec.md`, `plan.md`, `tasks.md`) before implementation. This command MUST run only after `/tasks` has successfully produced a complete `tasks.md`.
## Operating Constraints
**STRICTLY READ-ONLY**: Do **not** modify any files. Output a structured analysis report. Offer an optional remediation plan (user must explicitly approve before any follow-up editing commands would be invoked manually).
**Constitution Authority**: The project constitution (`.specswarm/constitution.md`) is **non-negotiable** within this analysis scope. Constitution conflicts are automatically CRITICAL and require adjustment of the spec, plan, or tasks—not dilution, reinterpretation, or silent ignoring of the principle. If a principle itself needs to change, that must occur in a separate, explicit constitution update outside `/analyze`.
## Execution Steps
### 1. Initialize Analysis Context
Locate the feature directory by searching for `spec.md`, `plan.md`, and `tasks.md` files in the repository. Derive absolute paths:
- SPEC = FEATURE_DIR/spec.md
- PLAN = FEATURE_DIR/plan.md
- TASKS = FEATURE_DIR/tasks.md
Abort with an error message if any required file is missing (instruct the user to run missing prerequisite command).
### 2. Load Artifacts (Progressive Disclosure)
Load only the minimal necessary context from each artifact:
**From spec.md:**
- Overview/Context
- Functional Requirements
- Non-Functional Requirements
- User Stories
- Edge Cases (if present)
**From plan.md:**
- Architecture/stack choices
- Data Model references
- Phases
- Technical constraints
**From tasks.md:**
- Task IDs
- Descriptions
- Phase grouping
- Parallel markers [P]
- Referenced file paths
**From constitution:**
- Load `.specswarm/constitution.md` for principle validation
### 3. Build Semantic Models
Create internal representations (do not include raw artifacts in output):
- **Requirements inventory**: Each functional + non-functional requirement with a stable key (derive slug based on imperative phrase; e.g., "User can upload file" → `user-can-upload-file`)
- **User story/action inventory**: Discrete user actions with acceptance criteria
- **Task coverage mapping**: Map each task to one or more requirements or stories (inference by keyword / explicit reference patterns like IDs or key phrases)
- **Constitution rule set**: Extract principle names and MUST/SHOULD normative statements
### 4. Detection Passes (Token-Efficient Analysis)
Focus on high-signal findings. Limit to 50 findings total; aggregate remainder in overflow summary.
#### A. Duplication Detection
- Identify near-duplicate requirements
- Mark lower-quality phrasing for consolidation
#### B. Ambiguity Detection
- Flag vague adjectives (fast, scalable, secure, intuitive, robust) lacking measurable criteria
- Flag unresolved placeholders (TODO, TKTK, ???, `<placeholder>`, etc.)
#### C. Underspecification
- Requirements with verbs but missing object or measurable outcome
- User stories missing acceptance criteria alignment
- Tasks referencing files or components not defined in spec/plan
#### D. Constitution Alignment
- Any requirement or plan element conflicting with a MUST principle
- Missing mandated sections or quality gates from constitution
#### E. Coverage Gaps
- Requirements with zero associated tasks
- Tasks with no mapped requirement/story
- Non-functional requirements not reflected in tasks (e.g., performance, security)
#### F. Inconsistency
- Terminology drift (same concept named differently across files)
- Data entities referenced in plan but absent in spec (or vice versa)
- Task ordering contradictions (e.g., integration tasks before foundational setup tasks without dependency note)
- Conflicting requirements (e.g., one requires Next.js while other specifies Vue)
### 5. Severity Assignment
Use this heuristic to prioritize findings:
- **CRITICAL**: Violates constitution MUST, missing core spec artifact, or requirement with zero coverage that blocks baseline functionality
- **HIGH**: Duplicate or conflicting requirement, ambiguous security/performance attribute, untestable acceptance criterion
- **MEDIUM**: Terminology drift, missing non-functional task coverage, underspecified edge case
- **LOW**: Style/wording improvements, minor redundancy not affecting execution order
### 6. Produce Compact Analysis Report
Output a Markdown report (no file writes) with the following structure:
## Specification Analysis Report
| ID | Category | Severity | Location(s) | Summary | Recommendation |
|----|----------|----------|-------------|---------|----------------|
| A1 | Duplication | HIGH | spec.md:L120-134 | Two similar requirements ... | Merge phrasing; keep clearer version |
(Add one row per finding; generate stable IDs prefixed by category initial.)
**Coverage Summary Table:**
| Requirement Key | Has Task? | Task IDs | Notes |
|-----------------|-----------|----------|-------|
**Constitution Alignment Issues:** (if any)
**Unmapped Tasks:** (if any)
**Metrics:**
- Total Requirements
- Total Tasks
- Coverage % (requirements with >=1 task)
- Ambiguity Count
- Duplication Count
- Critical Issues Count
### 7. Provide Next Actions
At end of report, output a concise Next Actions block:
- If CRITICAL issues exist: Recommend resolving before `/implement`
- If only LOW/MEDIUM: User may proceed, but provide improvement suggestions
- Provide explicit command suggestions: e.g., "Run /specify with refinement", "Run /plan to adjust architecture", "Manually edit tasks.md to add coverage for 'performance-metrics'"
### 8. Offer Remediation
Ask the user: "Would you like me to suggest concrete remediation edits for the top N issues?" (Do NOT apply them automatically.)
## Operating Principles
### Context Efficiency
- **Minimal high-signal tokens**: Focus on actionable findings, not exhaustive documentation
- **Progressive disclosure**: Load artifacts incrementally; don't dump all content into analysis
- **Token-efficient output**: Limit findings table to 50 rows; summarize overflow
- **Deterministic results**: Rerunning without changes should produce consistent IDs and counts
### Analysis Guidelines
- **NEVER modify files** (this is read-only analysis)
- **NEVER hallucinate missing sections** (if absent, report them accurately)
- **Prioritize constitution violations** (these are always CRITICAL)
- **Use examples over exhaustive rules** (cite specific instances, not generic patterns)
- **Report zero issues gracefully** (emit success report with coverage statistics)
## Context
{ARGS}

1166
commands/bugfix.md Normal file

File diff suppressed because it is too large Load Diff

441
commands/build.md Normal file
View File

@@ -0,0 +1,441 @@
---
description: Build complete feature from specification to implementation - simplified workflow
args:
- name: feature_description
description: Natural language description of the feature to build
required: true
- name: --validate
description: Run browser validation with Playwright after implementation
required: false
- name: --quality-gate
description: Set minimum quality score (default 80)
required: false
---
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Build a complete feature from natural language description through implementation and quality validation.
**Purpose**: Simplify feature development by orchestrating the complete workflow in a single command.
**Workflow**: Specify → Clarify → Plan → Tasks → Implement → (Validate) → Quality Analysis
**User Experience**:
- Single command instead of 7+ manual steps
- Interactive clarification (only pause point)
- Autonomous execution through implementation
- Quality validated automatically
- Ready for final merge with `/specswarm:ship`
---
## Pre-Flight Checks
```bash
# Parse arguments
FEATURE_DESC=""
RUN_VALIDATE=false
QUALITY_GATE=80
# Extract feature description (first non-flag argument)
for arg in $ARGUMENTS; do
if [ "${arg:0:2}" != "--" ] && [ -z "$FEATURE_DESC" ]; then
FEATURE_DESC="$arg"
elif [ "$arg" = "--validate" ]; then
RUN_VALIDATE=true
elif [ "$arg" = "--quality-gate" ]; then
shift
QUALITY_GATE="$1"
fi
done
# Validate feature description
if [ -z "$FEATURE_DESC" ]; then
echo "❌ Error: Feature description required"
echo ""
echo "Usage: /specswarm:build \"feature description\" [--validate] [--quality-gate N]"
echo ""
echo "Examples:"
echo " /specswarm:build \"Add user authentication with email/password\""
echo " /specswarm:build \"Implement dark mode toggle\" --validate"
echo " /specswarm:build \"Add shopping cart\" --validate --quality-gate 85"
exit 1
fi
# Get project root
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "❌ Error: Not in a git repository"
echo ""
echo "SpecSwarm requires an existing git repository to manage feature branches."
echo ""
echo "If you're starting a new project, scaffold it first:"
echo ""
echo " # React + Vite"
echo " npm create vite@latest my-app -- --template react-ts"
echo ""
echo " # Next.js"
echo " npx create-next-app@latest"
echo ""
echo " # Astro"
echo " npm create astro@latest"
echo ""
echo " # Vue"
echo " npm create vue@latest"
echo ""
echo "Then initialize git and SpecSwarm:"
echo " cd my-app"
echo " git init"
echo " git add ."
echo " git commit -m \"Initial project scaffold\""
echo " /specswarm:init"
echo ""
echo "For existing projects, initialize git:"
echo " git init"
echo " git add ."
echo " git commit -m \"Initial commit\""
echo ""
exit 1
fi
REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT"
```
---
## Execution Steps
### Step 1: Display Welcome Banner
```bash
echo "🏗️ SpecSwarm Build - Complete Feature Development"
echo "══════════════════════════════════════════"
echo ""
echo "Feature: $FEATURE_DESC"
echo ""
echo "This workflow will:"
echo " 1. Create detailed specification"
echo " 2. Ask clarification questions (interactive)"
echo " 3. Generate implementation plan"
echo " 4. Generate task breakdown"
echo " 5. Implement all tasks"
if [ "$RUN_VALIDATE" = true ]; then
echo " 6. Run browser validation (Playwright)"
echo " 7. Analyze code quality"
else
echo " 6. Analyze code quality"
fi
echo ""
echo "You'll only be prompted during Step 2 (clarification)."
echo "All other steps run automatically."
echo ""
read -p "Press Enter to start, or Ctrl+C to cancel..."
echo ""
```
---
### Step 2: Phase 1 - Specification
**YOU MUST NOW run the specify command using the SlashCommand tool:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📋 Phase 1: Creating Specification"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
```
Use the SlashCommand tool to execute: /specswarm:specify "$FEATURE_DESC"
```
Wait for completion. Verify spec.md was created.
```bash
echo ""
echo "✅ Specification created"
echo ""
```
---
### Step 3: Phase 2 - Clarification (INTERACTIVE)
**YOU MUST NOW run the clarify command using the SlashCommand tool:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "❓ Phase 2: Clarification Questions"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "⚠️ INTERACTIVE: Please answer the clarification questions."
echo ""
```
```
Use the SlashCommand tool to execute: /specswarm:clarify
```
**IMPORTANT**: This step is interactive. Wait for user to answer questions.
```bash
echo ""
echo "✅ Clarification complete"
echo ""
```
---
### Step 4: Phase 3 - Planning
**YOU MUST NOW run the plan command using the SlashCommand tool:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🗺️ Phase 3: Generating Implementation Plan"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
```
Use the SlashCommand tool to execute: /specswarm:plan
```
Wait for plan.md to be generated.
```bash
echo ""
echo "✅ Implementation plan created"
echo ""
```
---
### Step 5: Phase 4 - Task Generation
**YOU MUST NOW run the tasks command using the SlashCommand tool:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 Phase 4: Generating Task Breakdown"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
```
Use the SlashCommand tool to execute: /specswarm:tasks
```
Wait for tasks.md to be generated.
```bash
# Count tasks
TASK_COUNT=$(grep -c '^###[[:space:]]*T[0-9]' tasks.md 2>/dev/null || echo "0")
echo ""
echo "✅ Task breakdown created ($TASK_COUNT tasks)"
echo ""
```
---
### Step 6: Phase 5 - Implementation
**YOU MUST NOW run the implement command using the SlashCommand tool:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "⚙️ Phase 5: Implementing Feature"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "This will execute all $TASK_COUNT tasks automatically."
echo "Estimated time: 2-5 minutes per task"
echo ""
```
```
Use the SlashCommand tool to execute: /specswarm:implement
```
Wait for implementation to complete.
```bash
echo ""
echo "✅ Implementation complete"
echo ""
```
---
### Step 7: Phase 6 - Browser Validation (Optional)
**IF --validate flag was provided, run validation:**
```bash
if [ "$RUN_VALIDATE" = true ]; then
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🌐 Phase 6: Browser Validation"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Running AI-powered interaction flow validation with Playwright..."
echo ""
fi
```
**IF RUN_VALIDATE = true, use the SlashCommand tool:**
```
Use the SlashCommand tool to execute: /specswarm:validate
```
```bash
if [ "$RUN_VALIDATE" = true ]; then
echo ""
echo "✅ Validation complete"
echo ""
fi
```
---
### Step 8: Phase 7 - Quality Analysis
**YOU MUST NOW run the quality analysis using the SlashCommand tool:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 Phase 7: Code Quality Analysis"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
```
Use the SlashCommand tool to execute: /specswarm:analyze-quality
```
Wait for quality analysis to complete. Extract the quality score.
Store quality score as QUALITY_SCORE.
---
### Step 9: Final Report
**Display completion summary:**
```bash
echo ""
echo "══════════════════════════════════════════"
echo "🎉 FEATURE BUILD COMPLETE"
echo "══════════════════════════════════════════"
echo ""
echo "Feature: $FEATURE_DESC"
echo ""
echo "✅ Specification created"
echo "✅ Clarification completed"
echo "✅ Plan generated"
echo "✅ Tasks generated ($TASK_COUNT tasks)"
echo "✅ Implementation complete"
if [ "$RUN_VALIDATE" = true ]; then
echo "✅ Browser validation passed"
fi
echo "✅ Quality analyzed (Score: ${QUALITY_SCORE}%)"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 NEXT STEPS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "1. 🧪 Manual Testing"
echo " - Test the feature in your browser/app"
echo " - Verify all functionality works as expected"
echo " - Check edge cases and error handling"
echo ""
echo "2. 🔍 Code Review (Optional)"
echo " - Review generated code for best practices"
echo " - Check for security issues"
echo " - Verify tech stack compliance"
echo ""
echo "3. 🚢 Ship When Ready"
echo " Run: /specswarm:ship"
echo ""
echo " This will:"
echo " - Validate quality meets threshold ($QUALITY_GATE%)"
echo " - Merge to parent branch if passing"
echo " - Complete the feature workflow"
echo ""
if [ "$QUALITY_SCORE" -lt "$QUALITY_GATE" ]; then
echo "⚠️ WARNING: Quality score (${QUALITY_SCORE}%) below threshold (${QUALITY_GATE}%)"
echo " Consider addressing quality issues before shipping."
echo " Review the quality analysis output above for specific improvements."
echo ""
fi
echo "══════════════════════════════════════════"
```
---
## Error Handling
If any phase fails:
1. **Specify fails**: Display error, suggest checking feature description clarity
2. **Clarify fails**: Display error, suggest re-running clarify separately
3. **Plan fails**: Display error, suggest reviewing spec.md for completeness
4. **Tasks fails**: Display error, suggest reviewing plan.md
5. **Implement fails**: Display error, suggest re-running implement or using bugfix
6. **Validate fails**: Display validation errors, suggest fixing and re-validating
7. **Quality analysis fails**: Display error, continue (quality optional for build)
**All errors should report clearly and suggest remediation.**
---
## Design Philosophy
**Simplicity**: 1 command instead of 7+ manual steps
**Efficiency**: Autonomous execution except for clarification (user only pauses once)
**Quality**: Built-in quality analysis ensures code standards
**Flexibility**: Optional validation and configurable quality gates
**User Experience**: Clear progress indicators and final next steps
---
## Comparison to Manual Workflow
**Before** (Manual):
```bash
/specswarm:specify "feature description"
/specswarm:clarify
/specswarm:plan
/specswarm:tasks
/specswarm:implement
/specswarm:analyze-quality
/specswarm:complete
```
**7 commands**, ~5 minutes of manual orchestration
**After** (Build):
```bash
/specswarm:build "feature description" --validate
# [Answer clarification questions]
# [Wait for completion]
/specswarm:ship
```
**2 commands**, 1 interactive pause, fully automated execution
**Time Savings**: 85-90% reduction in manual orchestration overhead

313
commands/checklist.md Normal file
View File

@@ -0,0 +1,313 @@
---
description: Generate a custom checklist for the current feature based on user requirements.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## Checklist Purpose: "Unit Tests for English"
**CRITICAL CONCEPT**: Checklists are **UNIT TESTS FOR REQUIREMENTS WRITING** - they validate the quality, clarity, and completeness of requirements in a given domain.
**NOT for verification/testing**:
- ❌ NOT "Verify the button clicks correctly"
- ❌ NOT "Test error handling works"
- ❌ NOT "Confirm the API returns 200"
- ❌ NOT checking if code/implementation matches the spec
**FOR requirements quality validation**:
- ✅ "Are visual hierarchy requirements defined for all card types?" (completeness)
- ✅ "Is 'prominent display' quantified with specific sizing/positioning?" (clarity)
- ✅ "Are hover state requirements consistent across all interactive elements?" (consistency)
- ✅ "Are accessibility requirements defined for keyboard navigation?" (coverage)
- ✅ "Does the spec define what happens when logo image fails to load?" (edge cases)
**Metaphor**: If your spec is code written in English, the checklist is its unit test suite. You're testing whether the requirements are well-written, complete, unambiguous, and ready for implementation - NOT whether the implementation works.
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Execution Steps
1. **Discover Feature Context**:
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
get_features_dir "$REPO_ROOT"
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
FEATURE_NUM=$(echo "$BRANCH" | grep -oE '^[0-9]{3}')
[ -z "$FEATURE_NUM" ] && FEATURE_NUM=$(list_features "$REPO_ROOT" | grep -oE '^[0-9]{3}' | sort -nr | head -1)
find_feature_dir "$FEATURE_NUM" "$REPO_ROOT"
# FEATURE_DIR is now set by find_feature_dir
```
2. **Clarify intent (dynamic)**: Derive up to THREE initial contextual clarifying questions (no pre-baked catalog). They MUST:
- Be generated from the user's phrasing + extracted signals from spec/plan/tasks
- Only ask about information that materially changes checklist content
- Be skipped individually if already unambiguous in `$ARGUMENTS`
- Prefer precision over breadth
Generation algorithm:
1. Extract signals: feature domain keywords (e.g., auth, latency, UX, API), risk indicators ("critical", "must", "compliance"), stakeholder hints ("QA", "review", "security team"), and explicit deliverables ("a11y", "rollback", "contracts").
2. Cluster signals into candidate focus areas (max 4) ranked by relevance.
3. Identify probable audience & timing (author, reviewer, QA, release) if not explicit.
4. Detect missing dimensions: scope breadth, depth/rigor, risk emphasis, exclusion boundaries, measurable acceptance criteria.
5. Formulate questions chosen from these archetypes:
- Scope refinement (e.g., "Should this include integration touchpoints with X and Y or stay limited to local module correctness?")
- Risk prioritization (e.g., "Which of these potential risk areas should receive mandatory gating checks?")
- Depth calibration (e.g., "Is this a lightweight pre-commit sanity list or a formal release gate?")
- Audience framing (e.g., "Will this be used by the author only or peers during PR review?")
- Boundary exclusion (e.g., "Should we explicitly exclude performance tuning items this round?")
- Scenario class gap (e.g., "No recovery flows detected—are rollback / partial failure paths in scope?")
Question formatting rules:
- If presenting options, generate a compact table with columns: Option | Candidate | Why It Matters
- Limit to AE options maximum; omit table if a free-form answer is clearer
- Never ask the user to restate what they already said
- Avoid speculative categories (no hallucination). If uncertain, ask explicitly: "Confirm whether X belongs in scope."
Defaults when interaction impossible:
- Depth: Standard
- Audience: Reviewer (PR) if code-related; Author otherwise
- Focus: Top 2 relevance clusters
Output the questions (label Q1/Q2/Q3). After answers: if ≥2 scenario classes (Alternate / Exception / Recovery / Non-Functional domain) remain unclear, you MAY ask up to TWO more targeted followups (Q4/Q5) with a one-line justification each (e.g., "Unresolved recovery path risk"). Do not exceed five total questions. Skip escalation if user explicitly declines more.
3. **Understand user request**: Combine `$ARGUMENTS` + clarifying answers:
- Derive checklist theme (e.g., security, review, deploy, ux)
- Consolidate explicit must-have items mentioned by user
- Map focus selections to category scaffolding
- Infer any missing context from spec/plan/tasks (do NOT hallucinate)
4. **Load feature context**: Read from FEATURE_DIR:
- spec.md: Feature requirements and scope
- plan.md (if exists): Technical details, dependencies
- tasks.md (if exists): Implementation tasks
**Context Loading Strategy**:
- Load only necessary portions relevant to active focus areas (avoid full-file dumping)
- Prefer summarizing long sections into concise scenario/requirement bullets
- Use progressive disclosure: add follow-on retrieval only if gaps detected
- If source docs are large, generate interim summary items instead of embedding raw text
5. **Generate checklist** - Create "Unit Tests for Requirements":
- Create `FEATURE_DIR/checklists/` directory if it doesn't exist
- Generate unique checklist filename:
- Use short, descriptive name based on domain (e.g., `ux.md`, `api.md`, `security.md`)
- Format: `[domain].md`
- If file exists, append to existing file
- Number items sequentially starting from CHK001
- Each `/speckit.checklist` run creates a NEW file (never overwrites existing checklists)
**CORE PRINCIPLE - Test the Requirements, Not the Implementation**:
Every checklist item MUST evaluate the REQUIREMENTS THEMSELVES for:
- **Completeness**: Are all necessary requirements present?
- **Clarity**: Are requirements unambiguous and specific?
- **Consistency**: Do requirements align with each other?
- **Measurability**: Can requirements be objectively verified?
- **Coverage**: Are all scenarios/edge cases addressed?
**Category Structure** - Group items by requirement quality dimensions:
- **Requirement Completeness** (Are all necessary requirements documented?)
- **Requirement Clarity** (Are requirements specific and unambiguous?)
- **Requirement Consistency** (Do requirements align without conflicts?)
- **Acceptance Criteria Quality** (Are success criteria measurable?)
- **Scenario Coverage** (Are all flows/cases addressed?)
- **Edge Case Coverage** (Are boundary conditions defined?)
- **Non-Functional Requirements** (Performance, Security, Accessibility, etc. - are they specified?)
- **Dependencies & Assumptions** (Are they documented and validated?)
- **Ambiguities & Conflicts** (What needs clarification?)
**HOW TO WRITE CHECKLIST ITEMS - "Unit Tests for English"**:
❌ **WRONG** (Testing implementation):
- "Verify landing page displays 3 episode cards"
- "Test hover states work on desktop"
- "Confirm logo click navigates home"
✅ **CORRECT** (Testing requirements quality):
- "Are the exact number and layout of featured episodes specified?" [Completeness]
- "Is 'prominent display' quantified with specific sizing/positioning?" [Clarity]
- "Are hover state requirements consistent across all interactive elements?" [Consistency]
- "Are keyboard navigation requirements defined for all interactive UI?" [Coverage]
- "Is the fallback behavior specified when logo image fails to load?" [Edge Cases]
- "Are loading states defined for asynchronous episode data?" [Completeness]
- "Does the spec define visual hierarchy for competing UI elements?" [Clarity]
**ITEM STRUCTURE**:
Each item should follow this pattern:
- Question format asking about requirement quality
- Focus on what's WRITTEN (or not written) in the spec/plan
- Include quality dimension in brackets [Completeness/Clarity/Consistency/etc.]
- Reference spec section `[Spec §X.Y]` when checking existing requirements
- Use `[Gap]` marker when checking for missing requirements
**EXAMPLES BY QUALITY DIMENSION**:
Completeness:
- "Are error handling requirements defined for all API failure modes? [Gap]"
- "Are accessibility requirements specified for all interactive elements? [Completeness]"
- "Are mobile breakpoint requirements defined for responsive layouts? [Gap]"
Clarity:
- "Is 'fast loading' quantified with specific timing thresholds? [Clarity, Spec §NFR-2]"
- "Are 'related episodes' selection criteria explicitly defined? [Clarity, Spec §FR-5]"
- "Is 'prominent' defined with measurable visual properties? [Ambiguity, Spec §FR-4]"
Consistency:
- "Do navigation requirements align across all pages? [Consistency, Spec §FR-10]"
- "Are card component requirements consistent between landing and detail pages? [Consistency]"
Coverage:
- "Are requirements defined for zero-state scenarios (no episodes)? [Coverage, Edge Case]"
- "Are concurrent user interaction scenarios addressed? [Coverage, Gap]"
- "Are requirements specified for partial data loading failures? [Coverage, Exception Flow]"
Measurability:
- "Are visual hierarchy requirements measurable/testable? [Acceptance Criteria, Spec §FR-1]"
- "Can 'balanced visual weight' be objectively verified? [Measurability, Spec §FR-2]"
**Scenario Classification & Coverage** (Requirements Quality Focus):
- Check if requirements exist for: Primary, Alternate, Exception/Error, Recovery, Non-Functional scenarios
- For each scenario class, ask: "Are [scenario type] requirements complete, clear, and consistent?"
- If scenario class missing: "Are [scenario type] requirements intentionally excluded or missing? [Gap]"
- Include resilience/rollback when state mutation occurs: "Are rollback requirements defined for migration failures? [Gap]"
**Traceability Requirements**:
- MINIMUM: ≥80% of items MUST include at least one traceability reference
- Each item should reference: spec section `[Spec §X.Y]`, or use markers: `[Gap]`, `[Ambiguity]`, `[Conflict]`, `[Assumption]`
- If no ID system exists: "Is a requirement & acceptance criteria ID scheme established? [Traceability]"
**Surface & Resolve Issues** (Requirements Quality Problems):
Ask questions about the requirements themselves:
- Ambiguities: "Is the term 'fast' quantified with specific metrics? [Ambiguity, Spec §NFR-1]"
- Conflicts: "Do navigation requirements conflict between §FR-10 and §FR-10a? [Conflict]"
- Assumptions: "Is the assumption of 'always available podcast API' validated? [Assumption]"
- Dependencies: "Are external podcast API requirements documented? [Dependency, Gap]"
- Missing definitions: "Is 'visual hierarchy' defined with measurable criteria? [Gap]"
**Content Consolidation**:
- Soft cap: If raw candidate items > 40, prioritize by risk/impact
- Merge near-duplicates checking the same requirement aspect
- If >5 low-impact edge cases, create one item: "Are edge cases X, Y, Z addressed in requirements? [Coverage]"
**🚫 ABSOLUTELY PROHIBITED** - These make it an implementation test, not a requirements test:
- ❌ Any item starting with "Verify", "Test", "Confirm", "Check" + implementation behavior
- ❌ References to code execution, user actions, system behavior
- ❌ "Displays correctly", "works properly", "functions as expected"
- ❌ "Click", "navigate", "render", "load", "execute"
- ❌ Test cases, test plans, QA procedures
- ❌ Implementation details (frameworks, APIs, algorithms)
**✅ REQUIRED PATTERNS** - These test requirements quality:
- ✅ "Are [requirement type] defined/specified/documented for [scenario]?"
- ✅ "Is [vague term] quantified/clarified with specific criteria?"
- ✅ "Are requirements consistent between [section A] and [section B]?"
- ✅ "Can [requirement] be objectively measured/verified?"
- ✅ "Are [edge cases/scenarios] addressed in requirements?"
- ✅ "Does the spec define [missing aspect]?"
6. **Structure Reference**: Generate the checklist following the canonical template in `templates/checklist-template.md` for title, meta section, category headings, and ID formatting. If template is unavailable, use: H1 title, purpose/created meta lines, `##` category sections containing `- [ ] CHK### <requirement item>` lines with globally incrementing IDs starting at CHK001.
7. **Report**: Output full path to created checklist, item count, and remind user that each run creates a new file. Summarize:
- Focus areas selected
- Depth level
- Actor/timing
- Any explicit user-specified must-have items incorporated
**Important**: Each `/speckit.checklist` command invocation creates a checklist file using short, descriptive names unless file already exists. This allows:
- Multiple checklists of different types (e.g., `ux.md`, `test.md`, `security.md`)
- Simple, memorable filenames that indicate checklist purpose
- Easy identification and navigation in the `checklists/` folder
To avoid clutter, use descriptive types and clean up obsolete checklists when done.
## Example Checklist Types & Sample Items
**UX Requirements Quality:** `ux.md`
Sample items (testing the requirements, NOT the implementation):
- "Are visual hierarchy requirements defined with measurable criteria? [Clarity, Spec §FR-1]"
- "Is the number and positioning of UI elements explicitly specified? [Completeness, Spec §FR-1]"
- "Are interaction state requirements (hover, focus, active) consistently defined? [Consistency]"
- "Are accessibility requirements specified for all interactive elements? [Coverage, Gap]"
- "Is fallback behavior defined when images fail to load? [Edge Case, Gap]"
- "Can 'prominent display' be objectively measured? [Measurability, Spec §FR-4]"
**API Requirements Quality:** `api.md`
Sample items:
- "Are error response formats specified for all failure scenarios? [Completeness]"
- "Are rate limiting requirements quantified with specific thresholds? [Clarity]"
- "Are authentication requirements consistent across all endpoints? [Consistency]"
- "Are retry/timeout requirements defined for external dependencies? [Coverage, Gap]"
- "Is versioning strategy documented in requirements? [Gap]"
**Performance Requirements Quality:** `performance.md`
Sample items:
- "Are performance requirements quantified with specific metrics? [Clarity]"
- "Are performance targets defined for all critical user journeys? [Coverage]"
- "Are performance requirements under different load conditions specified? [Completeness]"
- "Can performance requirements be objectively measured? [Measurability]"
- "Are degradation requirements defined for high-load scenarios? [Edge Case, Gap]"
**Security Requirements Quality:** `security.md`
Sample items:
- "Are authentication requirements specified for all protected resources? [Coverage]"
- "Are data protection requirements defined for sensitive information? [Completeness]"
- "Is the threat model documented and requirements aligned to it? [Traceability]"
- "Are security requirements consistent with compliance obligations? [Consistency]"
- "Are security failure/breach response requirements defined? [Gap, Exception Flow]"
## Anti-Examples: What NOT To Do
**❌ WRONG - These test implementation, not requirements:**
```markdown
- [ ] CHK001 - Verify landing page displays 3 episode cards [Spec §FR-001]
- [ ] CHK002 - Test hover states work correctly on desktop [Spec §FR-003]
- [ ] CHK003 - Confirm logo click navigates to home page [Spec §FR-010]
- [ ] CHK004 - Check that related episodes section shows 3-5 items [Spec §FR-005]
```
**✅ CORRECT - These test requirements quality:**
```markdown
- [ ] CHK001 - Are the number and layout of featured episodes explicitly specified? [Completeness, Spec §FR-001]
- [ ] CHK002 - Are hover state requirements consistently defined for all interactive elements? [Consistency, Spec §FR-003]
- [ ] CHK003 - Are navigation requirements clear for all clickable brand elements? [Clarity, Spec §FR-010]
- [ ] CHK004 - Is the selection criteria for related episodes documented? [Gap, Spec §FR-005]
- [ ] CHK005 - Are loading state requirements defined for asynchronous episode data? [Gap]
- [ ] CHK006 - Can "visual hierarchy" requirements be objectively measured? [Measurability, Spec §FR-001]
```
**Key Differences:**
- Wrong: Tests if the system works correctly
- Correct: Tests if the requirements are written correctly
- Wrong: Verification of behavior
- Correct: Validation of requirement quality
- Wrong: "Does it do X?"
- Correct: "Is X clearly specified?"

189
commands/clarify.md Normal file
View File

@@ -0,0 +1,189 @@
---
description: Identify underspecified areas in the current feature spec by asking up to 5 highly targeted clarification questions and encoding answers back into the spec.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
Goal: Detect and reduce ambiguity or missing decision points in the active feature specification and record the clarifications directly in the spec file.
Note: This clarification workflow is expected to run (and be completed) BEFORE invoking `/speckit.plan`. If the user explicitly states they are skipping clarification (e.g., exploratory spike), you may proceed, but must warn that downstream rework risk increases.
Execution steps:
1. **Discover Feature Context**:
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
get_features_dir "$REPO_ROOT"
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
FEATURE_NUM=$(echo "$BRANCH" | grep -oE '^[0-9]{3}')
[ -z "$FEATURE_NUM" ] && FEATURE_NUM=$(list_features "$REPO_ROOT" | grep -oE '^[0-9]{3}' | sort -nr | head -1)
find_feature_dir "$FEATURE_NUM" "$REPO_ROOT"
# FEATURE_DIR is now set by find_feature_dir
FEATURE_SPEC="${FEATURE_DIR}/spec.md"
```
Validate: If FEATURE_SPEC doesn't exist, ERROR: "No spec found. Run `/specify` first."
2. Load the current spec file. Perform a structured ambiguity & coverage scan using this taxonomy. For each category, mark status: Clear / Partial / Missing. Produce an internal coverage map used for prioritization (do not output raw map unless no questions will be asked).
Functional Scope & Behavior:
- Core user goals & success criteria
- Explicit out-of-scope declarations
- User roles / personas differentiation
Domain & Data Model:
- Entities, attributes, relationships
- Identity & uniqueness rules
- Lifecycle/state transitions
- Data volume / scale assumptions
Interaction & UX Flow:
- Critical user journeys / sequences
- Error/empty/loading states
- Accessibility or localization notes
Non-Functional Quality Attributes:
- Performance (latency, throughput targets)
- Scalability (horizontal/vertical, limits)
- Reliability & availability (uptime, recovery expectations)
- Observability (logging, metrics, tracing signals)
- Security & privacy (authN/Z, data protection, threat assumptions)
- Compliance / regulatory constraints (if any)
Integration & External Dependencies:
- External services/APIs and failure modes
- Data import/export formats
- Protocol/versioning assumptions
Edge Cases & Failure Handling:
- Negative scenarios
- Rate limiting / throttling
- Conflict resolution (e.g., concurrent edits)
Constraints & Tradeoffs:
- Technical constraints (language, storage, hosting)
- Explicit tradeoffs or rejected alternatives
Terminology & Consistency:
- Canonical glossary terms
- Avoided synonyms / deprecated terms
Completion Signals:
- Acceptance criteria testability
- Measurable Definition of Done style indicators
Misc / Placeholders:
- TODO markers / unresolved decisions
- Ambiguous adjectives ("robust", "intuitive") lacking quantification
For each category with Partial or Missing status, add a candidate question opportunity unless:
- Clarification would not materially change implementation or validation strategy
- Information is better deferred to planning phase (note internally)
3. Generate (internally) a prioritized queue of candidate clarification questions (maximum 5). Do NOT output them all at once. Apply these constraints:
- Maximum of 10 total questions across the whole session.
- Each question must be answerable with EITHER:
* A short multiplechoice selection (25 distinct, mutually exclusive options), OR
* A one-word / shortphrase answer (explicitly constrain: "Answer in <=5 words").
- Only include questions whose answers materially impact architecture, data modeling, task decomposition, test design, UX behavior, operational readiness, or compliance validation.
- Ensure category coverage balance: attempt to cover the highest impact unresolved categories first; avoid asking two low-impact questions when a single high-impact area (e.g., security posture) is unresolved.
- Exclude questions already answered, trivial stylistic preferences, or plan-level execution details (unless blocking correctness).
- Favor clarifications that reduce downstream rework risk or prevent misaligned acceptance tests.
- If more than 5 categories remain unresolved, select the top 5 by (Impact * Uncertainty) heuristic.
4. Sequential questioning loop (interactive):
- Present EXACTLY ONE question at a time.
- For multiplechoice questions render options as a Markdown table:
| Option | Description |
|--------|-------------|
| A | <Option A description> |
| B | <Option B description> |
| C | <Option C description> | (add D/E as needed up to 5)
| Short | Provide a different short answer (<=5 words) | (Include only if free-form alternative is appropriate)
- For shortanswer style (no meaningful discrete options), output a single line after the question: `Format: Short answer (<=5 words)`.
- After the user answers:
* Validate the answer maps to one option or fits the <=5 word constraint.
* If ambiguous, ask for a quick disambiguation (count still belongs to same question; do not advance).
* Once satisfactory, record it in working memory (do not yet write to disk) and move to the next queued question.
- Stop asking further questions when:
* All critical ambiguities resolved early (remaining queued items become unnecessary), OR
* User signals completion ("done", "good", "no more"), OR
* You reach 5 asked questions.
- Never reveal future queued questions in advance.
- If no valid questions exist at start, immediately report no critical ambiguities.
5. Integration after EACH accepted answer (incremental update approach):
- Maintain in-memory representation of the spec (loaded once at start) plus the raw file contents.
- For the first integrated answer in this session:
* Ensure a `## Clarifications` section exists (create it just after the highest-level contextual/overview section per the spec template if missing).
* Under it, create (if not present) a `### Session YYYY-MM-DD` subheading for today.
- Append a bullet line immediately after acceptance: `- Q: <question> → A: <final answer>`.
- Then immediately apply the clarification to the most appropriate section(s):
* Functional ambiguity → Update or add a bullet in Functional Requirements.
* User interaction / actor distinction → Update User Stories or Actors subsection (if present) with clarified role, constraint, or scenario.
* Data shape / entities → Update Data Model (add fields, types, relationships) preserving ordering; note added constraints succinctly.
* Non-functional constraint → Add/modify measurable criteria in Non-Functional / Quality Attributes section (convert vague adjective to metric or explicit target).
* Edge case / negative flow → Add a new bullet under Edge Cases / Error Handling (or create such subsection if template provides placeholder for it).
* Terminology conflict → Normalize term across spec; retain original only if necessary by adding `(formerly referred to as "X")` once.
- If the clarification invalidates an earlier ambiguous statement, replace that statement instead of duplicating; leave no obsolete contradictory text.
- Save the spec file AFTER each integration to minimize risk of context loss (atomic overwrite).
- Preserve formatting: do not reorder unrelated sections; keep heading hierarchy intact.
- Keep each inserted clarification minimal and testable (avoid narrative drift).
6. Validation (performed after EACH write plus final pass):
- Clarifications session contains exactly one bullet per accepted answer (no duplicates).
- Total asked (accepted) questions ≤ 5.
- Updated sections contain no lingering vague placeholders the new answer was meant to resolve.
- No contradictory earlier statement remains (scan for now-invalid alternative choices removed).
- Markdown structure valid; only allowed new headings: `## Clarifications`, `### Session YYYY-MM-DD`.
- Terminology consistency: same canonical term used across all updated sections.
7. Write the updated spec back to `FEATURE_SPEC`.
8. Report completion (after questioning loop ends or early termination):
- Number of questions asked & answered.
- Path to updated spec.
- Sections touched (list names).
- Coverage summary table listing each taxonomy category with Status: Resolved (was Partial/Missing and addressed), Deferred (exceeds question quota or better suited for planning), Clear (already sufficient), Outstanding (still Partial/Missing but low impact).
- If any Outstanding or Deferred remain, recommend whether to proceed to `/speckit.plan` or run `/speckit.clarify` again later post-plan.
- Suggested next command.
Behavior rules:
- If no meaningful ambiguities found (or all potential questions would be low-impact), respond: "No critical ambiguities detected worth formal clarification." and suggest proceeding.
- If spec file missing, instruct user to run `/speckit.specify` first (do not create a new spec here).
- Never exceed 5 total asked questions (clarification retries for a single question do not count as new questions).
- Avoid speculative tech stack questions unless the absence blocks functional clarity.
- Respect user early termination signals ("stop", "done", "proceed").
- If no questions asked due to full coverage, output a compact coverage summary (all categories Clear) then suggest advancing.
- If quota reached with unresolved high-impact categories remaining, explicitly flag them under Deferred with rationale.
Context for prioritization: {ARGS}

778
commands/complete.md Normal file
View File

@@ -0,0 +1,778 @@
---
description: Complete feature or bugfix workflow and merge to parent branch
---
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Complete feature or bugfix workflow by cleaning up, validating, committing, and merging to parent branch.
**Purpose**: Provide a clean, guided completion process for features and bugfixes developed with SpecSwarm workflows.
**Scope**: Handles cleanup → validation → commit → merge → branch deletion
**NEW**: Supports individual feature branches with auto-merge to parent branch (not just main)
---
## Pre-Flight Checks
```bash
# Ensure we're in a git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "❌ Error: Not in a git repository"
echo ""
echo "This command must be run from within a git repository."
exit 1
fi
# Get repository root
REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT"
```
---
## Execution Steps
### Step 1: Detect Workflow Context
```bash
echo "🎯 Feature Completion Workflow"
echo "══════════════════════════════════════════"
echo ""
# Detect current branch
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
# Extract feature/bug number from branch name
# Patterns: NNN-*, feature/NNN-*, bugfix/NNN-*, fix/NNN-*
FEATURE_NUM=$(echo "$CURRENT_BRANCH" | grep -oE '^[0-9]{3}' || \
echo "$CURRENT_BRANCH" | grep -oE '(feature|bugfix|fix)/([0-9]{3})' | grep -oE '[0-9]{3}' || \
echo "")
# If no number found, check user arguments
if [ -z "$FEATURE_NUM" ] && [ -n "$ARGUMENTS" ]; then
# Try to extract number from arguments
FEATURE_NUM=$(echo "$ARGUMENTS" | grep -oE '\b[0-9]{3}\b' | head -1)
fi
# If still no number, ask user
if [ -z "$FEATURE_NUM" ]; then
echo "⚠️ Could not detect feature/bug number from branch: $CURRENT_BRANCH"
echo ""
read -p "Enter feature or bug number (e.g., 915): " FEATURE_NUM
if [ -z "$FEATURE_NUM" ]; then
echo "❌ Error: Feature number required"
exit 1
fi
# Pad to 3 digits
FEATURE_NUM=$(printf "%03d" $FEATURE_NUM)
fi
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
get_features_dir "$REPO_ROOT"
# Determine workflow type from branch or directory
if echo "$CURRENT_BRANCH" | grep -qE '^(bugfix|bug|fix)/'; then
WORKFLOW_TYPE="bugfix"
elif echo "$CURRENT_BRANCH" | grep -qE '^(feature|feat)/'; then
WORKFLOW_TYPE="feature"
else
# Check if feature directory exists
if find_feature_dir "$FEATURE_NUM" "$REPO_ROOT" 2>/dev/null; then
WORKFLOW_TYPE="feature"
else
# Ask user
read -p "Is this a feature or bugfix? (feature/bugfix): " WORKFLOW_TYPE
fi
fi
# Find feature directory (re-find since condition above may not have set it)
find_feature_dir "$FEATURE_NUM" "$REPO_ROOT" 2>/dev/null
if [ -z "$FEATURE_DIR" ]; then
echo "⚠️ Warning: Feature directory not found for ${WORKFLOW_TYPE} ${FEATURE_NUM}"
echo ""
echo "Continuing without feature artifacts..."
FEATURE_DIR=""
STORED_PARENT_BRANCH=""
else
# Get feature title from spec
if [ -f "$FEATURE_DIR/spec.md" ]; then
FEATURE_TITLE=$(grep -m1 '^# Feature' "$FEATURE_DIR/spec.md" | sed 's/^# Feature [0-9]*: //' || echo "Feature $FEATURE_NUM")
# Extract parent branch from YAML frontmatter (v2.1.1+)
STORED_PARENT_BRANCH=$(grep -A 10 '^---$' "$FEATURE_DIR/spec.md" 2>/dev/null | grep '^parent_branch:' | sed 's/^parent_branch: *//' | tr -d '\r' || echo "")
else
FEATURE_TITLE="Feature $FEATURE_NUM"
STORED_PARENT_BRANCH=""
fi
fi
# Display detected context
echo "Detected: $(echo "$WORKFLOW_TYPE" | sed 's/\b\(.\)/\u\1/') $FEATURE_NUM"
if [ -n "$FEATURE_TITLE" ]; then
echo "Title: $FEATURE_TITLE"
fi
echo "Branch: $CURRENT_BRANCH"
if [ -n "$FEATURE_DIR" ]; then
echo "Directory: $FEATURE_DIR"
fi
echo ""
```
---
### Step 1b: Detect Parent Branch Strategy
```bash
echo "🔍 Analyzing git workflow..."
echo ""
# Detect main branch name
MAIN_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
if [ -z "$MAIN_BRANCH" ]; then
# Fallback: try common names or use git's default branch
if git show-ref --verify --quiet refs/heads/main; then
MAIN_BRANCH="main"
elif git show-ref --verify --quiet refs/heads/master; then
MAIN_BRANCH="master"
else
# Use current branch as fallback
MAIN_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo "⚠️ Warning: Could not detect main branch, using current branch: $MAIN_BRANCH"
fi
fi
# Detect if we're in a sequential upgrade branch workflow
SEQUENTIAL_BRANCH=false
PARENT_BRANCH="$MAIN_BRANCH"
if [ "$CURRENT_BRANCH" != "$MAIN_BRANCH" ]; then
# Check if current branch contains multiple feature directories
# Check both old (features/) and new (.specswarm/features/) locations
FEATURE_DIRS_ON_BRANCH=$(git log "$CURRENT_BRANCH" --not "$MAIN_BRANCH" --name-only --pretty=format: 2>/dev/null | \
grep -E '^(features/|\.specswarm/features/)[0-9]\{3\}-' | sed 's#^\.specswarm/##' | cut -d'/' -f2 | sort -u | wc -l || echo "0")
if [ "$FEATURE_DIRS_ON_BRANCH" -gt 1 ]; then
SEQUENTIAL_BRANCH=true
PARENT_BRANCH="$CURRENT_BRANCH"
echo "Detected: Sequential branch workflow"
echo " This branch contains $FEATURE_DIRS_ON_BRANCH features"
echo " Features will be marked complete without merging"
echo ""
fi
fi
# If not sequential, determine parent branch
if [ "$SEQUENTIAL_BRANCH" = "false" ]; then
# Check for stored parent branch (v2.1.1+)
echo "Determining parent branch..."
echo " Stored parent branch: ${STORED_PARENT_BRANCH:-<empty>}"
if [ -n "$STORED_PARENT_BRANCH" ] && [ "$STORED_PARENT_BRANCH" != "unknown" ]; then
PARENT_BRANCH="$STORED_PARENT_BRANCH"
echo "✓ Using parent branch from spec.md: $PARENT_BRANCH"
echo ""
else
echo "⚠️ No valid parent branch in spec.md, checking fallback options..."
# Fallback: Check if there's a previous feature branch this might merge into
PREV_FEATURE_NUM=$(printf "%03d" $((10#$FEATURE_NUM - 1)))
PREV_FEATURE_BRANCH=$(git branch -a 2>/dev/null | grep -E "^ (remotes/origin/)?${PREV_FEATURE_NUM}-" | head -1 | sed 's/^[* ]*//' | sed 's/remotes\/origin\///' || echo "")
if [ -n "$PREV_FEATURE_BRANCH" ] && git show-ref --verify --quiet "refs/heads/$PREV_FEATURE_BRANCH" 2>/dev/null; then
echo "Found previous feature branch: $PREV_FEATURE_BRANCH"
echo ""
read -p "Merge into $PREV_FEATURE_BRANCH instead of $MAIN_BRANCH? (y/n): " merge_into_prev
if [ "$merge_into_prev" = "y" ]; then
PARENT_BRANCH="$PREV_FEATURE_BRANCH"
echo "✓ Will merge to: $PARENT_BRANCH"
else
echo "✓ Will merge to: $MAIN_BRANCH"
fi
echo ""
else
echo "✓ Will merge to: $MAIN_BRANCH (default)"
echo ""
fi
fi
fi
```
---
### Step 2: Cleanup Diagnostic Files
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Phase 1: Cleanup"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Patterns for diagnostic files
DIAGNOSTIC_PATTERNS=(
"check-*.ts"
"check-*.js"
"check_*.ts"
"check_*.js"
"diagnose-*.ts"
"diagnose-*.js"
"debug-*.ts"
"debug-*.js"
"temp-*.ts"
"temp-*.js"
)
# Find matching files
DIAGNOSTIC_FILES=()
for pattern in "${DIAGNOSTIC_PATTERNS[@]}"; do
while IFS= read -r file; do
if [ -f "$file" ]; then
DIAGNOSTIC_FILES+=("$file")
fi
done < <(find "$REPO_ROOT" -maxdepth 1 -name "$pattern" 2>/dev/null)
done
if [ ${#DIAGNOSTIC_FILES[@]} -eq 0 ]; then
echo "✓ No diagnostic files to clean up"
else
echo "📂 Diagnostic Files Found:"
for file in "${DIAGNOSTIC_FILES[@]}"; do
basename_file=$(basename "$file")
size=$(du -h "$file" 2>/dev/null | cut -f1 || echo "?")
echo " - $basename_file ($size)"
done
echo ""
echo "What should I do with these files?"
echo " 1. Delete all (recommended)"
echo " 2. Move to .claude/debug/ (keep for review)"
echo " 3. Keep as-is (will be committed if staged)"
echo " 4. Manual selection"
echo ""
read -p "Choice (1-4): " cleanup_choice
case $cleanup_choice in
1)
for file in "${DIAGNOSTIC_FILES[@]}"; do
rm -f "$file"
done
echo "✓ Deleted ${#DIAGNOSTIC_FILES[@]} diagnostic files"
;;
2)
mkdir -p "$REPO_ROOT/.claude/debug"
for file in "${DIAGNOSTIC_FILES[@]}"; do
mv "$file" "$REPO_ROOT/.claude/debug/"
done
echo "✓ Moved ${#DIAGNOSTIC_FILES[@]} files to .claude/debug/"
;;
3)
echo "✓ Keeping diagnostic files"
;;
4)
for file in "${DIAGNOSTIC_FILES[@]}"; do
read -p "Delete $(basename "$file")? (y/n): " delete_choice
if [ "$delete_choice" = "y" ]; then
rm -f "$file"
echo " ✓ Deleted"
else
echo " ✓ Kept"
fi
done
;;
*)
echo "✓ Skipping cleanup"
;;
esac
fi
echo ""
```
---
### Step 3: Pre-Merge Validation
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Phase 2: Pre-Merge Validation"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Running validation checks..."
echo ""
VALIDATION_PASSED=true
# Check if package.json exists (indicates Node.js project)
if [ -f "package.json" ]; then
# Run tests if test script exists
if grep -q '"test"' package.json; then
echo " Running tests..."
if npm test --silent 2>&1 | grep -qE "(passing|All tests passed)"; then
TEST_OUTPUT=$(npm test --silent 2>&1 | grep -oE '[0-9]+ passing' | head -1)
echo " ✓ Tests passing ($TEST_OUTPUT)"
else
echo " ⚠️ Some tests may have failed (check manually)"
fi
fi
# TypeScript check if tsconfig.json exists
if [ -f "tsconfig.json" ]; then
echo " Checking TypeScript..."
if npx tsc --noEmit 2>&1 | grep -qE "error TS[0-9]+"; then
echo " ❌ TypeScript errors found"
VALIDATION_PASSED=false
else
echo " ✓ No TypeScript errors"
fi
fi
# Build check if build script exists
if grep -q '"build"' package.json; then
echo " Checking build..."
if npm run build --silent 2>&1 | grep -qEi "(error|failed)"; then
echo " ⚠️ Build may have issues (check manually)"
else
echo " ✓ Build successful"
fi
fi
fi
# Feature completion check
if [ -n "$FEATURE_DIR" ] && [ -f "$FEATURE_DIR/tasks.md" ]; then
TOTAL_TASKS=$(grep -cE '^### T[0-9]{3}:' "$FEATURE_DIR/tasks.md" 2>/dev/null || echo "0")
COMPLETED_TASKS=$(grep -cE '^### T[0-9]{3}:.*\[x\]' "$FEATURE_DIR/tasks.md" 2>/dev/null || echo "0")
if [ "$TOTAL_TASKS" -gt "0" ]; then
echo " ✓ Feature progress ($COMPLETED_TASKS/$TOTAL_TASKS tasks)"
fi
fi
# Bug resolution check
if [ -n "$FEATURE_DIR" ] && [ -f "$FEATURE_DIR/bugfix.md" ]; then
BUG_COUNT=$(grep -cE '^## Bug [0-9]{3}:' "$FEATURE_DIR/bugfix.md" 2>/dev/null || echo "0")
if [ "$BUG_COUNT" -gt "0" ]; then
echo " ✓ Bugs addressed ($BUG_COUNT bugs)"
fi
fi
echo ""
if [ "$VALIDATION_PASSED" = "false" ]; then
echo "⚠️ Validation issues detected"
echo ""
read -p "Continue anyway? (y/n): " continue_choice
if [ "$continue_choice" != "y" ]; then
echo "❌ Completion cancelled"
echo ""
echo "Fix the issues above and run /specswarm:complete again"
exit 1
fi
echo ""
fi
echo "Ready to commit and merge!"
echo ""
```
---
### Step 4: Commit Changes
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Phase 3: Commit Changes"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Check if there are changes to commit
if git diff --quiet && git diff --cached --quiet; then
echo "✓ No changes to commit (working tree clean)"
echo ""
SKIP_COMMIT=true
else
SKIP_COMMIT=false
# Show files to be committed
echo "Files to commit:"
git status --short | head -20
echo ""
# Determine commit type
if [ "$WORKFLOW_TYPE" = "bugfix" ]; then
COMMIT_TYPE="fix"
else
COMMIT_TYPE="feat"
fi
# Generate commit message
COMMIT_MSG="${COMMIT_TYPE}: ${FEATURE_TITLE}
"
# Add description from spec if available
if [ -n "$FEATURE_DIR" ] && [ -f "$FEATURE_DIR/spec.md" ]; then
DESCRIPTION=$(grep -A 5 '^## Summary' "$FEATURE_DIR/spec.md" 2>/dev/null | tail -n +2 | head -3 | sed '/^$/d' || echo "")
if [ -n "$DESCRIPTION" ]; then
COMMIT_MSG+="${DESCRIPTION}
"
fi
fi
# Add bug fixes if any
if [ -n "$FEATURE_DIR" ] && [ -f "$FEATURE_DIR/bugfix.md" ]; then
BUG_NUMBERS=$(grep -oE 'Bug [0-9]{3}' "$FEATURE_DIR/bugfix.md" 2>/dev/null | grep -oE '[0-9]{3}' | sort -u || echo "")
if [ -n "$BUG_NUMBERS" ]; then
COMMIT_MSG+="Fixes:
"
while IFS= read -r bug; do
COMMIT_MSG+="- Bug $bug
"
done <<< "$BUG_NUMBERS"
COMMIT_MSG+="
"
fi
fi
# Add generated footer
COMMIT_MSG+="🤖 Generated with SpecSwarm
Co-Authored-By: Claude <noreply@anthropic.com>"
# Show commit message
echo "Suggested commit message:"
echo "┌────────────────────────────────────────────┐"
echo "$COMMIT_MSG" | sed 's/^/│ /'
echo "└────────────────────────────────────────────┘"
echo ""
read -p "Edit commit message? (y/n): " edit_choice
if [ "$edit_choice" = "y" ]; then
# Create temp file for editing
TEMP_MSG_FILE=$(mktemp)
echo "$COMMIT_MSG" > "$TEMP_MSG_FILE"
${EDITOR:-nano} "$TEMP_MSG_FILE"
COMMIT_MSG=$(cat "$TEMP_MSG_FILE")
rm -f "$TEMP_MSG_FILE"
fi
# Stage all changes
git add -A
# Commit
echo "$COMMIT_MSG" | git commit -F -
echo "✓ Changes committed to feature branch"
echo ""
# Push
read -p "Push to remote? (y/n): " push_choice
if [ "$push_choice" = "y" ]; then
git push
echo "✓ Pushed to remote"
else
echo "⚠️ Changes not pushed (you can push manually later)"
fi
echo ""
fi
```
---
### Step 5: Merge to Parent Branch
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Phase 4: Merge to Parent Branch"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Skip merge for sequential branches
if [ "$SEQUENTIAL_BRANCH" = "true" ]; then
echo "✓ Sequential branch workflow - NO MERGE"
echo ""
echo "This feature is part of a sequential upgrade branch."
echo "Features will be merged together after the entire sequence completes."
echo ""
# Create completion tag for tracking
TAG_NAME="feature-${FEATURE_NUM}-complete"
if ! git tag -l | grep -q "^${TAG_NAME}$"; then
git tag "$TAG_NAME"
echo "✓ Created completion tag: $TAG_NAME"
fi
echo ""
SKIP_MERGE=true
elif [ "$CURRENT_BRANCH" = "$PARENT_BRANCH" ]; then
echo "✓ Already on $PARENT_BRANCH branch"
echo "✓ No merge needed"
echo ""
SKIP_MERGE=true
else
SKIP_MERGE=false
# Validation: Show merge details
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Merge Plan"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Source branch: $CURRENT_BRANCH"
echo " Target branch: $PARENT_BRANCH"
if [ -n "$STORED_PARENT_BRANCH" ]; then
echo " Source: spec.md parent_branch field"
elif [ -n "$PREV_FEATURE_BRANCH" ]; then
echo " Source: Previous feature branch detected"
else
echo " Source: Default main branch"
fi
echo ""
if [ "$PARENT_BRANCH" != "$MAIN_BRANCH" ]; then
echo " Note: Merging into '$PARENT_BRANCH' (not $MAIN_BRANCH)"
echo " This is an intermediate merge in a feature branch hierarchy."
fi
echo ""
echo "⚠️ IMPORTANT: This will merge your changes to $PARENT_BRANCH."
echo " Make sure you've tested the feature thoroughly."
echo " If the target branch looks wrong, press 'n' and check spec.md"
echo ""
read -p "Proceed with merge? (y/n): " merge_choice
if [ "$merge_choice" != "y" ]; then
echo ""
echo "❌ Merge cancelled"
echo ""
echo "You're still on branch: $CURRENT_BRANCH"
echo ""
echo "When ready to merge, run:"
echo " /specswarm:complete"
echo ""
echo "Or merge manually:"
echo " git checkout $PARENT_BRANCH"
echo " git merge --no-ff $CURRENT_BRANCH"
exit 0
fi
echo ""
echo "Checking out $PARENT_BRANCH..."
git checkout "$PARENT_BRANCH"
echo "Pulling latest changes..."
git pull
echo "$PARENT_BRANCH branch up to date"
echo ""
echo "Merging feature branch (no-ff)..."
MERGE_MSG="Merge ${WORKFLOW_TYPE}: ${FEATURE_TITLE}
Feature $FEATURE_NUM complete
🤖 Generated with SpecSwarm"
if git merge --no-ff "$CURRENT_BRANCH" -m "$MERGE_MSG"; then
echo "✓ Merge successful"
# Create completion tag
TAG_NAME="feature-${FEATURE_NUM}-complete"
if ! git tag -l | grep -q "^${TAG_NAME}$"; then
git tag "$TAG_NAME"
echo "✓ Created completion tag: $TAG_NAME"
fi
else
echo "❌ Merge conflicts detected"
echo ""
echo "Please resolve conflicts manually:"
echo " 1. Fix conflicts in your editor"
echo " 2. git add <resolved-files>"
echo " 3. git merge --continue"
echo " 4. /specswarm:complete --continue"
echo ""
exit 1
fi
echo ""
read -p "Push to remote? (y/n): " push_main_choice
if [ "$push_main_choice" = "y" ]; then
echo "Pushing to remote..."
git push --follow-tags
echo "$PARENT_BRANCH branch updated"
else
echo "⚠️ Not pushed (you can push manually later)"
fi
echo ""
fi
```
---
### Step 6: Branch Cleanup
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Phase 5: Cleanup"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [ "$SKIP_MERGE" = "true" ] && [ "$SEQUENTIAL_BRANCH" = "false" ]; then
echo "✓ No branch cleanup needed (already on $PARENT_BRANCH)"
elif [ "$SEQUENTIAL_BRANCH" = "true" ]; then
echo "✓ Sequential branch - keeping feature branch for remaining features"
else
read -p "Delete feature branch '$CURRENT_BRANCH'? (y/n): " delete_choice
if [ "$delete_choice" = "y" ]; then
# Delete local branch
if git branch -d "$CURRENT_BRANCH" 2>/dev/null; then
echo "✓ Deleted local branch: $CURRENT_BRANCH"
else
echo "⚠️ Could not delete local branch (may have unmerged commits)"
read -p "Force delete? (y/n): " force_choice
if [ "$force_choice" = "y" ]; then
git branch -D "$CURRENT_BRANCH"
echo "✓ Force deleted local branch: $CURRENT_BRANCH"
fi
fi
# Delete remote branch
read -p "Delete remote branch? (y/n): " delete_remote_choice
if [ "$delete_remote_choice" = "y" ]; then
if git push origin --delete "$CURRENT_BRANCH" 2>/dev/null; then
echo "✓ Deleted remote branch: origin/$CURRENT_BRANCH"
else
echo "⚠️ Could not delete remote branch (may not exist)"
fi
fi
else
echo "✓ Keeping feature branch"
fi
fi
fi
# Update feature status
if [ -n "$FEATURE_DIR" ] && [ -f "$FEATURE_DIR/spec.md" ]; then
sed -i 's/^Status:.*/Status: Complete/' "$FEATURE_DIR/spec.md" 2>/dev/null || true
echo "✓ Updated feature status: Complete"
fi
echo ""
```
---
## Final Output
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🎉 $(echo "$WORKFLOW_TYPE" | sed 's/\b\(.\)/\u\1/') Complete!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "$(echo "$WORKFLOW_TYPE" | sed 's/\b\(.\)/\u\1/') $FEATURE_NUM: $FEATURE_TITLE"
if [ "$SKIP_COMMIT" = "false" ]; then
echo "✓ Changes committed"
fi
if [ "$SEQUENTIAL_BRANCH" = "true" ]; then
echo "✓ Feature marked complete (sequential workflow)"
echo "✓ Tag created: feature-${FEATURE_NUM}-complete"
echo ""
echo " This is part of a sequential upgrade branch."
echo " Continue with remaining features, then merge the entire branch to main."
elif [ "$SKIP_MERGE" = "false" ]; then
echo "✓ Merged to: $PARENT_BRANCH"
if [ "$PARENT_BRANCH" != "$MAIN_BRANCH" ]; then
echo " Note: This is an intermediate merge. Complete $PARENT_BRANCH next."
fi
if [ "${delete_choice:-}" = "y" ]; then
echo "✓ Branch: Deleted"
fi
fi
if [ -n "$FEATURE_DIR" ]; then
echo ""
echo "📂 Feature Archive:"
echo " $FEATURE_DIR"
fi
echo ""
echo "🚀 Next Steps:"
if [ "$SEQUENTIAL_BRANCH" = "true" ]; then
echo " - Continue with next feature in sequence"
echo " - After all features complete, merge branch to main"
echo " - Test the complete upgrade sequence"
elif [ "$PARENT_BRANCH" != "$MAIN_BRANCH" ] && [ "$SKIP_MERGE" = "false" ]; then
echo " - Complete the parent branch: /specswarm:complete"
echo " - This will merge $PARENT_BRANCH to main"
else
if grep -q '"deploy' package.json 2>/dev/null; then
echo " - Deploy to staging: npm run deploy"
fi
if grep -q '"test:e2e' package.json 2>/dev/null; then
echo " - Run E2E tests: npm run test:e2e"
fi
echo " - Monitor production for issues"
echo " - Update project documentation if needed"
fi
echo ""
```
---
## Error Handling
**If not in git repository:**
- Exit with clear error message
**If validation fails:**
- Show issues
- Offer to continue anyway or cancel
**If merge conflicts:**
- Provide clear resolution instructions
- Suggest --continue flag for resume
**If branch deletion fails:**
- Offer force delete option
- Allow keeping branch if user prefers
---
## Operating Principles
1. **User Guidance**: Clear, step-by-step process with explanations
2. **Safety First**: Confirm before destructive operations (merge, delete)
3. **Flexibility**: Allow skipping steps or customizing behavior
4. **Cleanup**: Remove temporary files, update documentation
5. **Validation**: Check tests, build, TypeScript before merging
6. **Transparency**: Show what's being done at each step
---
## Success Criteria
✅ Diagnostic files cleaned up
✅ Pre-merge validation passed (or user acknowledged issues)
✅ Changes committed with proper message
✅ Merged to main branch
✅ Feature branch deleted (optional)
✅ Feature status updated to Complete
---
**Workflow Coverage**: Completes ~100% of feature/bugfix lifecycle
**User Experience**: Guided, safe, transparent completion process

90
commands/constitution.md Normal file
View File

@@ -0,0 +1,90 @@
---
description: Create or update the project constitution from interactive or provided principle inputs, ensuring all dependent templates stay in sync.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
You are updating the project constitution at `.specswarm/constitution.md`. This file is a TEMPLATE containing placeholder tokens in square brackets (e.g. `[PROJECT_NAME]`, `[PRINCIPLE_1_NAME]`). Your job is to (a) collect/derive concrete values, (b) fill the template precisely, and (c) propagate any amendments across dependent artifacts.
Follow this execution flow:
1. Load the existing constitution template at `.specswarm/constitution.md`.
- Identify every placeholder token of the form `[ALL_CAPS_IDENTIFIER]`.
**IMPORTANT**: The user might require less or more principles than the ones used in the template. If a number is specified, respect that - follow the general template. You will update the doc accordingly.
2. Collect/derive values for placeholders:
- **First, read README.md for project context** (if it exists):
* Use the Read tool to read `README.md`
* Extract project name from first heading (e.g., `# My Project` → "My Project")
* Extract project description from first paragraph after title
* Look for sections like "Goals", "Vision", "Purpose", "Standards", "Conventions" for principle guidance
* If README.md doesn't exist or lacks content, skip this step
- If user input (conversation) supplies a value, use it (takes priority over README).
- Otherwise infer from README context (gathered above) or prior constitution versions if embedded.
- For governance dates: `RATIFICATION_DATE` is the original adoption date (if unknown ask or mark TODO), `LAST_AMENDED_DATE` is today if changes are made, otherwise keep previous.
- `CONSTITUTION_VERSION` must increment according to semantic versioning rules:
* MAJOR: Backward incompatible governance/principle removals or redefinitions.
* MINOR: New principle/section added or materially expanded guidance.
* PATCH: Clarifications, wording, typo fixes, non-semantic refinements.
- If version bump type ambiguous, propose reasoning before finalizing.
3. Draft the updated constitution content:
- Replace every placeholder with concrete text (no bracketed tokens left except intentionally retained template slots that the project has chosen not to define yet—explicitly justify any left).
- Preserve heading hierarchy and comments can be removed once replaced unless they still add clarifying guidance.
- Ensure each Principle section: succinct name line, paragraph (or bullet list) capturing nonnegotiable rules, explicit rationale if not obvious.
- Ensure Governance section lists amendment procedure, versioning policy, and compliance review expectations.
4. Consistency propagation checklist (convert prior checklist into active validations):
- Read `/templates/plan-template.md` and ensure any "Constitution Check" or rules align with updated principles.
- Read `/templates/spec-template.md` for scope/requirements alignment—update if constitution adds/removes mandatory sections or constraints.
- Read `/templates/tasks-template.md` and ensure task categorization reflects new or removed principle-driven task types (e.g., observability, versioning, testing discipline).
- Read each command file in `/templates/commands/*.md` (including this one) to verify no outdated references (agent-specific names like CLAUDE only) remain when generic guidance is required.
- Read any runtime guidance docs (e.g., `docs/quickstart.md`, or agent-specific guidance files if present). Update references to principles changed. Note: README.md is already read in Step 2.
5. Produce a Sync Impact Report (prepend as an HTML comment at top of the constitution file after update):
- Version change: old → new
- List of modified principles (old title → new title if renamed)
- Added sections
- Removed sections
- Templates requiring updates (✅ updated / ⚠ pending) with file paths
- Follow-up TODOs if any placeholders intentionally deferred.
6. Validation before final output:
- No remaining unexplained bracket tokens.
- Version line matches report.
- Dates ISO format YYYY-MM-DD.
- Principles are declarative, testable, and free of vague language ("should" → replace with MUST/SHOULD rationale where appropriate).
7. Write the completed constitution back to `.specswarm/constitution.md` (overwrite).
8. Output a final summary to the user with:
- New version and bump rationale.
- Any files flagged for manual follow-up.
- Suggested commit message (e.g., `docs: amend constitution to vX.Y.Z (principle additions + governance update)`).
Formatting & Style Requirements:
- Use Markdown headings exactly as in the template (do not demote/promote levels).
- Wrap long rationale lines to keep readability (<100 chars ideally) but do not hard enforce with awkward breaks.
- Keep a single blank line between sections.
- Avoid trailing whitespace.
If the user supplies partial updates (e.g., only one principle revision), still perform validation and version decision steps.
If critical info missing (e.g., ratification date truly unknown), insert `TODO(<FIELD_NAME>): explanation` and include in the Sync Impact Report under deferred items.
Do not create a new template; always operate on the existing `.specswarm/constitution.md` file.

570
commands/coordinate.md Normal file
View File

@@ -0,0 +1,570 @@
---
description: Coordinate complex debugging workflows with logging, monitoring, and agent orchestration
---
<!--
ATTRIBUTION:
Debug Coordinate Plugin
by Marty Bonacci & Claude Code (2025)
Based on: docs/learnings/2025-10-14-orchestrator-missed-opportunity.md
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute systematic debugging coordination workflow:
1. **Discovery Phase** - Add logging and collect data
2. **Analysis Phase** - Correlate patterns and identify root causes
3. **Orchestration Phase** - Spawn specialist agents and coordinate fixes
4. **Integration Phase** - Verify fixes work together
**Usage**: `/debug:coordinate <problem-description>`
**Example**:
```bash
/debug:coordinate "navbar not updating after sign-in, sign-out not working, like button blank page"
```
---
## Pre-Coordination Hook
```bash
echo "🐛 Debug Coordinator"
echo "==================="
echo ""
echo "Systematic debugging with logging, monitoring, and agent orchestration"
echo ""
# Record start time
COORD_START_TIME=$(date +%s)
# Get repository root
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
```
---
## Execution Steps
### Step 1: Parse Problem Description
```bash
# Get problem description from arguments
PROBLEM_DESC="$ARGUMENTS"
if [ -z "$PROBLEM_DESC" ]; then
echo "❌ Error: Problem description required"
echo ""
echo "Usage: /debug:coordinate <problem-description>"
echo ""
echo "Example:"
echo "/debug:coordinate \"navbar not updating, sign-out broken, like button error\""
exit 1
fi
echo "📋 Problem: $PROBLEM_DESC"
echo ""
```
---
### Step 2: Discovery Phase - Initial Analysis
Analyze the problem description to identify:
- How many distinct issues are mentioned
- Which domains might be affected
- Whether orchestration is appropriate
```bash
echo "🔍 Phase 1: Discovery & Analysis"
echo "================================"
echo ""
# Count potential bugs (look for separators like commas, "and", bullet points)
BUG_COUNT=$(echo "$PROBLEM_DESC" | tr ',' '\n' | tr ';' '\n' | grep -v '^$' | wc -l)
echo "Analyzing problem description..."
echo " • Identified $BUG_COUNT potential issue(s)"
echo ""
# Create debug session directory
DEBUG_SESSION_ID=$(date +%Y%m%d-%H%M%S)
DEBUG_DIR="${REPO_ROOT}/.debug-sessions/${DEBUG_SESSION_ID}"
mkdir -p "$DEBUG_DIR"
echo "Created debug session: $DEBUG_SESSION_ID"
echo "Directory: $DEBUG_DIR"
echo ""
# Write problem description to session
cat > "$DEBUG_DIR/problem-description.md" <<EOF
# Debug Session: $DEBUG_SESSION_ID
**Created**: $(date)
**Problem Description**: $PROBLEM_DESC
## Issues Identified
EOF
# Parse individual issues
ISSUE_NUM=1
echo "$PROBLEM_DESC" | tr ',' '\n' | tr ';' '\n' | grep -v '^$' | while read -r ISSUE; do
ISSUE_TRIMMED=$(echo "$ISSUE" | sed 's/^ *//g' | sed 's/ *$//g')
if [ -n "$ISSUE_TRIMMED" ]; then
echo "$ISSUE_NUM. $ISSUE_TRIMMED" >> "$DEBUG_DIR/problem-description.md"
ISSUE_NUM=$((ISSUE_NUM + 1))
fi
done
echo "✅ Problem analysis complete"
echo ""
```
---
### Step 3: Determine Debugging Strategy
Based on the number of issues, decide whether to use orchestration:
```bash
echo "🎯 Determining debugging strategy..."
echo ""
if [ "$BUG_COUNT" -ge 3 ]; then
STRATEGY="orchestrated"
echo "Strategy: ORCHESTRATED (multi-bug scenario)"
echo ""
echo "Rationale:"
echo "$BUG_COUNT distinct issues detected"
echo " • Parallel investigation will be faster"
echo " • Orchestrator recommended for 3+ bugs"
echo ""
else
STRATEGY="sequential"
echo "Strategy: SEQUENTIAL (1-2 bugs)"
echo ""
echo "Rationale:"
echo "$BUG_COUNT issue(s) detected"
echo " • Sequential debugging is efficient for small sets"
echo ""
fi
# Save strategy to session
echo "**Strategy**: $STRATEGY" >> "$DEBUG_DIR/problem-description.md"
echo "" >> "$DEBUG_DIR/problem-description.md"
```
---
### Step 4: Discovery Phase - Add Logging Strategy
Generate a logging strategy document that identifies where to add instrumentation:
```markdown
Create a logging strategy specification:
Analyze the problem description and generate a comprehensive logging plan.
For each suspected issue:
1. Identify likely affected files/components
2. Specify logging points to add
3. Define what data to capture
4. Determine monitoring approach
**Output**: Create `$DEBUG_DIR/logging-strategy.md` with:
- Files to instrument
- Logging statements to add
- Data to capture
- Monitoring commands
```
**Logging Strategy Template**:
```markdown
# Logging Strategy
## Issue 1: [Issue Description]
### Suspected Files
- `path/to/file1.ts` - [reason]
- `path/to/file2.ts` - [reason]
### Logging Points
**File**: `path/to/file1.ts`
**Location**: Line XX (in function `functionName`)
**Log Statement**:
```typescript
console.log('[DEBUG-1] FunctionName:', { variable1, variable2, context })
```
**Purpose**: Capture state at critical point
### Monitoring
- Watch for: `[DEBUG-1]` in console
- Expected output: Values should be X
- Error indicators: null, undefined, unexpected values
---
## Issue 2: [Issue Description]
...
```
```bash
echo "📝 Phase 2: Logging Strategy"
echo "============================"
echo ""
echo "Generating logging strategy..."
echo ""
echo "ACTION REQUIRED: Analyze the problem and create logging strategy"
echo ""
echo "Create file: $DEBUG_DIR/logging-strategy.md"
echo ""
echo "For each issue in the problem description:"
echo " 1. Identify suspected files/components"
echo " 2. Determine strategic logging points"
echo " 3. Specify what data to capture"
echo " 4. Define monitoring approach"
echo ""
echo "Use template from: plugins/debug-coordinate/templates/logging-strategy-template.md"
echo ""
```
After logging strategy is created, proceed to implementation:
```bash
echo "After creating logging strategy, implement the logging:"
echo ""
echo " 1. Add logging statements to suspected files"
echo " 2. Ensure logs are easily searchable (use prefixes like [DEBUG-1])"
echo " 3. Capture relevant context (variables, state, params)"
echo " 4. Commit logging additions (so they can be reverted later)"
echo ""
```
---
### Step 5: Analysis Phase - Run & Monitor
```bash
echo "📊 Phase 3: Monitor & Analyze"
echo "============================="
echo ""
echo "Next steps:"
echo " 1. Start the application (if not running)"
echo " 2. Reproduce each issue"
echo " 3. Capture log output to: $DEBUG_DIR/logs/"
echo " 4. Analyze patterns and identify root causes"
echo ""
echo "Monitoring commands:"
echo " • Save logs: [command] 2>&1 | tee $DEBUG_DIR/logs/session.log"
echo " • Watch specific pattern: tail -f [logfile] | grep DEBUG"
echo " • Filter errors: grep -E 'ERROR|WARN|DEBUG' [logfile]"
echo ""
```
Create analysis template:
```bash
cat > "$DEBUG_DIR/analysis-template.md" <<'EOF'
# Debug Analysis
## Issue 1: [Description]
### Log Evidence
```
[Paste relevant log output]
```
### Root Cause
[What is causing this issue?]
**File**: path/to/file.ts
**Line**: XX
**Problem**: [Specific issue - e.g., variable undefined, wrong condition, etc.]
### Domain
- [ ] Backend
- [ ] Frontend
- [ ] Database
- [ ] Config
- [ ] Testing
### Fix Strategy
[How to fix this issue]
---
## Issue 2: [Description]
...
---
## Summary
**Total Issues**: X
**Domains Affected**: [list]
**Orchestration Recommended**: Yes/No
EOF
echo "Created analysis template: $DEBUG_DIR/analysis-template.md"
echo ""
echo "Fill in this template as you analyze logs and identify root causes"
echo ""
```
---
### Step 6: Orchestration Phase - Generate Fix Plan
Once root causes are identified, generate orchestration plan:
```bash
echo "🎯 Phase 4: Orchestration Planning"
echo "==================================="
echo ""
if [ "$STRATEGY" = "orchestrated" ]; then
echo "Generating orchestration plan for parallel fixes..."
echo ""
cat > "$DEBUG_DIR/orchestration-plan.md" <<'EOF'
# Orchestration Plan
## Execution Strategy
**Mode**: Parallel
**Agents**: [Number based on domains]
---
## Agent Assignments
### Agent 1: [Domain] Track
**Responsibility**: [Description]
**Issues**: #1, #3
**Files to Modify**:
- path/to/file1.ts
- path/to/file2.ts
**Changes Required**:
1. [Specific change 1]
2. [Specific change 2]
**Dependencies**: None (can run in parallel)
---
### Agent 2: [Domain] Track
**Responsibility**: [Description]
**Issues**: #2, #4
**Files to Modify**:
- path/to/file3.tsx
- path/to/file4.tsx
**Changes Required**:
1. [Specific change 1]
2. [Specific change 2]
**Dependencies**: None (can run in parallel)
---
## Coordination Points
### Server Restarts
- After Agent 1 completes (backend changes)
- After Agent 2 completes (if needed)
### Integration Testing
- After all agents complete
- Run full test suite
- Manual verification of each fix
---
## Success Criteria
- [ ] All issues resolved
- [ ] No new regressions
- [ ] Tests pass
- [ ] Application works as expected
EOF
echo "✅ Orchestration plan template created: $DEBUG_DIR/orchestration-plan.md"
echo ""
echo "ACTION REQUIRED: Fill in orchestration plan based on analysis"
echo ""
echo "Then launch orchestrator:"
echo " /project-orchestrator:debug --plan=$DEBUG_DIR/orchestration-plan.md"
echo ""
else
echo "Sequential debugging workflow (1-2 bugs)"
echo ""
echo "Fix issues sequentially using /speclab:bugfix for each"
echo ""
fi
```
---
### Step 7: Integration Phase - Verification
```bash
echo "✅ Phase 5: Integration & Verification"
echo "======================================="
echo ""
echo "After fixes are implemented:"
echo ""
echo "1. Run integration tests"
echo "2. Manually verify each issue is fixed"
echo "3. Check for new regressions"
echo "4. Remove debug logging (or keep if useful)"
echo "5. Document learnings"
echo ""
echo "Verification checklist: $DEBUG_DIR/verification-checklist.md"
echo ""
cat > "$DEBUG_DIR/verification-checklist.md" <<'EOF'
# Verification Checklist
## Issue Verification
- [ ] Issue 1: [Description] - FIXED
- [ ] Issue 2: [Description] - FIXED
- [ ] Issue 3: [Description] - FIXED
## Regression Testing
- [ ] Existing tests still pass
- [ ] No new errors in console
- [ ] No performance degradation
- [ ] All user flows work correctly
## Cleanup
- [ ] Remove temporary debug logging (or commit if useful)
- [ ] Update documentation
- [ ] Create regression tests for each fix
- [ ] Document learnings
## Metrics
**Debugging Time**: [X hours]
**Number of Issues Fixed**: [X]
**Strategy Used**: [Sequential/Orchestrated]
**Time Savings** (if orchestrated): [X%]
EOF
echo "Created verification checklist"
echo ""
```
---
## Post-Coordination Hook
```bash
echo ""
echo "📊 Debug Coordination Summary"
echo "=============================="
echo ""
# Calculate duration
COORD_END_TIME=$(date +%s)
COORD_DURATION=$((COORD_END_TIME - COORD_START_TIME))
COORD_MINUTES=$((COORD_DURATION / 60))
echo "Session ID: $DEBUG_SESSION_ID"
echo "Duration: ${COORD_MINUTES}m ${COORD_DURATION}s"
echo "Strategy: $STRATEGY"
echo "Issues: $BUG_COUNT"
echo ""
echo "Artifacts Created:"
echo "$DEBUG_DIR/problem-description.md"
echo "$DEBUG_DIR/logging-strategy.md"
echo "$DEBUG_DIR/analysis-template.md"
if [ "$STRATEGY" = "orchestrated" ]; then
echo "$DEBUG_DIR/orchestration-plan.md"
fi
echo "$DEBUG_DIR/verification-checklist.md"
echo ""
echo "📈 Next Steps:"
echo ""
if [ "$STRATEGY" = "orchestrated" ]; then
echo "ORCHESTRATED WORKFLOW:"
echo " 1. Fill in logging-strategy.md"
echo " 2. Implement logging and run application"
echo " 3. Analyze logs and complete analysis-template.md"
echo " 4. Fill in orchestration-plan.md"
echo " 5. Launch orchestrator: /project-orchestrator:debug --plan=$DEBUG_DIR/orchestration-plan.md"
echo " 6. Verify all fixes with verification-checklist.md"
else
echo "SEQUENTIAL WORKFLOW:"
echo " 1. Fill in logging-strategy.md"
echo " 2. Implement logging and run application"
echo " 3. Analyze logs and identify root causes"
echo " 4. Fix issues one by one using /speclab:bugfix"
echo " 5. Verify with verification-checklist.md"
fi
echo ""
echo "💡 Tip: This structured approach ensures:"
echo " • Systematic investigation (not random debugging)"
echo " • Clear documentation of findings"
echo " • Efficient parallelization (when possible)"
echo " • Verifiable results"
echo ""
```
---
## Success Criteria
✅ Problem description parsed
✅ Debug session created
✅ Strategy determined (sequential vs orchestrated)
✅ Logging strategy template created
✅ Analysis template created
✅ Orchestration plan template created (if needed)
✅ Verification checklist created
✅ Clear next steps provided
---
## Error Handling
**If no problem description provided**:
- Display usage example
- Exit with error
**If repository not detected**:
- Create debug session in current directory
- Warn user about missing git context
---
## Design Philosophy
Based on learnings from [2025-10-14-orchestrator-missed-opportunity.md](../../../docs/learnings/2025-10-14-orchestrator-missed-opportunity.md):
1. **Systematic Over Random**: Structured phases prevent random debugging
2. **Logging First**: Add instrumentation before making changes
3. **Parallel When Possible**: 3+ bugs → orchestrate
4. **Document Everything**: Create audit trail for learnings
5. **Verify Thoroughly**: Checklists ensure nothing missed
---
**This plugin transforms chaotic debugging into systematic investigation with clear orchestration opportunities.**

568
commands/deprecate.md Normal file
View File

@@ -0,0 +1,568 @@
---
description: Phased feature sunset workflow with migration guidance
---
<!--
ATTRIBUTION CHAIN:
1. Original methodology: spec-kit-extensions by Marty Bonacci (2025)
2. Adapted: SpecLab plugin by Marty Bonacci & Claude Code (2025)
3. Based on: GitHub spec-kit | MIT License
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute phased deprecation workflow to safely sunset features while providing migration guidance to users.
**Key Principles**:
1. **Phased Approach**: Announce → Migrate → Remove
2. **Migration Guidance**: Provide clear alternatives
3. **User Support**: Help users migrate
4. **Track Adoption**: Monitor migration progress
5. **Safe Removal**: Only remove when migration complete
**Phases**: Announce deprecation, user migration support, feature removal
**Coverage**: Addresses ~5% of development work (feature evolution)
---
## Smart Integration
```bash
SPECSWARM_INSTALLED=$(claude plugin list | grep -q "specswarm" && echo "true" || echo "false")
SPECTEST_INSTALLED=$(claude plugin list | grep -q "spectest" && echo "true" || echo "false")
if [ "$SPECTEST_INSTALLED" = "true" ]; then
ENABLE_HOOKS=true
ENABLE_METRICS=true
fi
```
---
## Execution Steps
### 1. Discover Deprecation Context
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
DEPRECATE_NUM=$(echo "$CURRENT_BRANCH" | grep -oE 'deprecate/([0-9]{3})' | grep -oE '[0-9]{3}')
if [ -z "$DEPRECATE_NUM" ]; then
echo "📉 Deprecate Workflow"
echo "Provide deprecation number:"
read -p "Deprecation number: " DEPRECATE_NUM
DEPRECATE_NUM=$(printf "%03d" $DEPRECATE_NUM)
fi
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
ensure_features_dir "$REPO_ROOT"
FEATURE_DIR="${FEATURES_DIR}/${DEPRECATE_NUM}-deprecate"
mkdir -p "$FEATURE_DIR"
DEPRECATE_SPEC="${FEATURE_DIR}/deprecate.md"
MIGRATION_GUIDE="${FEATURE_DIR}/migration-guide.md"
TASKS_FILE="${FEATURE_DIR}/tasks.md"
```
---
### 2. Identify Feature to Deprecate
```
📉 Feature Deprecation
Which feature are you deprecating?
[User input or scan codebase]
Feature to deprecate: [name]
Reason for deprecation: [reason]
Alternative/replacement: [what users should use instead]
```
---
### 3. Create Deprecation Specification
```markdown
# Deprecation ${DEPRECATE_NUM}: [Feature Name]
**Status**: Active
**Created**: YYYY-MM-DD
**Feature**: [Feature to deprecate]
**Replacement**: [Alternative feature/approach]
---
## Deprecation Rationale
**Why Deprecating**:
- Reason 1
- Reason 2
- Reason 3
**Timeline Decision**: [Why now?]
---
## Current Usage Analysis
**Users Affected**: [Estimated N users/systems]
**Usage Patterns**: [How is it currently used?]
**Dependencies**:
| Dependent System | Usage Level | Migration Complexity |
|------------------|-------------|----------------------|
| [System 1] | [High/Med/Low] | [High/Med/Low] |
---
## Replacement Strategy
**Recommended Alternative**: [Feature/approach]
**Why Better**:
- Benefit 1
- Benefit 2
**Migration Effort**: [Low/Medium/High]
**Migration Time Estimate**: [timeframe per user]
---
## Deprecation Timeline
### Phase 1: Announcement (Month 1)
**Duration**: [timeframe]
**Activities**:
- [ ] Announce deprecation publicly
- [ ] Add deprecation warnings to feature
- [ ] Publish migration guide
- [ ] Email affected users
- [ ] Update documentation
**Deliverables**:
- Deprecation announcement
- Migration guide
- Updated docs
---
### Phase 2: Migration Support (Months 2-3)
**Duration**: [timeframe]
**Activities**:
- [ ] Monitor adoption of alternative
- [ ] Provide migration support to users
- [ ] Track usage of deprecated feature
- [ ] Address migration blockers
- [ ] Send migration reminders
**Success Criteria**:
- ≥80% of users migrated to alternative
- No critical dependencies remaining
---
### Phase 3: Removal (Month 4+)
**Duration**: [timeframe]
**Activities**:
- [ ] Final migration reminder (2 weeks notice)
- [ ] Disable feature in production
- [ ] Remove code
- [ ] Cleanup tests and documentation
- [ ] Archive feature artifacts
**Prerequisites**:
- ≥90% user migration
- All critical dependencies resolved
- Stakeholder approval
---
## Migration Blockers
**Known Blockers**:
| Blocker | Impact | Resolution Plan |
|---------|--------|-----------------|
| [Blocker 1] | [High/Med/Low] | [How to resolve] |
---
## Communication Plan
**Channels**:
- [ ] Blog post / changelog
- [ ] Email to affected users
- [ ] In-app deprecation warning
- [ ] Documentation update
- [ ] Support ticket template
**Messaging**:
- Clear deprecation timeline
- Migration guide link
- Support resources
- Benefits of alternative
---
## Rollback Plan
**If Migration Fails**:
- Extend timeline
- Provide additional support resources
- Reconsider deprecation if alternative insufficient
---
## Success Metrics
| Metric | Target | Current |
|--------|--------|---------|
| User Migration Rate | ≥90% | [%] |
| Alternative Adoption | ≥80% | [%] |
| Support Tickets | <10 | [N] |
| Migration Blockers | 0 | [N] |
---
## Metadata
**Workflow**: Deprecate (Phased Sunset)
**Created By**: SpecLab Plugin v1.0.0
```
Write to `$DEPRECATE_SPEC`.
---
### 4. Create Migration Guide
```markdown
# Migration Guide: Deprecation ${DEPRECATE_NUM}
**Feature Deprecated**: [Feature name]
**Recommended Alternative**: [Alternative]
**Migration Deadline**: [Date]
---
## Why This Change?
[Brief explanation of deprecation rationale]
**Benefits of Migration**:
- Benefit 1
- Benefit 2
---
## Migration Steps
### Step 1: [Action]
**What**: [Description]
**Before** (deprecated):
```
[Code example using old feature]
```
**After** (recommended):
```
[Code example using alternative]
```
### Step 2: [Action]
[Repeat pattern for each migration step]
---
## Migration Checklist
- [ ] Update code to use alternative
- [ ] Update tests
- [ ] Update documentation
- [ ] Test in development
- [ ] Deploy to production
- [ ] Verify functionality
- [ ] Remove deprecated feature usage
---
## Common Migration Scenarios
### Scenario 1: [Use Case]
**Old Approach**:
```
[Code]
```
**New Approach**:
```
[Code]
```
[Repeat for common scenarios]
---
## Troubleshooting
### Issue 1: [Common Problem]
**Symptom**: [What users see]
**Solution**: [How to fix]
[Repeat for common issues]
---
## Support Resources
- Migration guide: [link]
- API documentation: [link]
- Support channel: [link]
- Example migration: [link to example code]
**Need Help?**
- Email: [support email]
- Slack: [support channel]
- Office hours: [time]
---
## Timeline
- **Now**: Feature deprecated, warnings active
- **[Date]**: Migration support ends
- **[Date]**: Feature removed from production
**Don't wait! Migrate today.**
```
Write to `$MIGRATION_GUIDE`.
---
### 5. Generate Tasks
```markdown
# Tasks: Deprecation ${DEPRECATE_NUM}
**Workflow**: Deprecate (Phased Sunset)
---
## Phase 1: Announcement Tasks
### T001: Add Deprecation Warnings
**Description**: Add warnings to deprecated feature code
**Files**: [list]
**Warning Message**: "This feature is deprecated. Migrate to [alternative]. See [migration guide link]."
### T002: [P] Publish Migration Guide
**Description**: Publish migration guide
**Output**: ${MIGRATION_GUIDE}
**Parallel**: [P]
### T003: [P] Update Documentation
**Description**: Mark feature as deprecated in docs
**Files**: [doc files]
**Parallel**: [P]
### T004: [P] Announce Deprecation
**Description**: Communicate deprecation via all channels
**Channels**: Blog, email, in-app
**Parallel**: [P]
---
## Phase 2: Migration Support Tasks
### T005: Monitor Adoption
**Description**: Track usage of deprecated vs alternative
**Metrics**: [usage metrics]
**Frequency**: Weekly
**Duration**: [Phase 2 duration]
### T006: Provide User Support
**Description**: Help users migrate
**Activities**: Answer questions, resolve blockers
**Duration**: [Phase 2 duration]
### T007: Send Migration Reminders
**Description**: Remind users to migrate
**Schedule**: [reminder schedule]
**Content**: Progress update, deadline reminder
---
## Phase 3: Removal Tasks
### T008: Final Migration Check
**Description**: Verify ≥90% user migration
**Validation**: Usage metrics, stakeholder approval
### T009: Disable Feature
**Description**: Turn off deprecated feature in production
**Rollback Plan**: [how to re-enable if needed]
### T010: Remove Code
**Description**: Delete deprecated feature code
**Files**: [list all files to remove]
**Validation**: Tests still pass
### T011: [P] Cleanup Tests
**Description**: Remove tests for deprecated feature
**Files**: [test files]
**Parallel**: [P]
### T012: [P] Cleanup Documentation
**Description**: Remove deprecated feature from docs
**Files**: [doc files]
**Parallel**: [P]
### T013: Archive Artifacts
**Description**: Archive feature artifacts for historical reference
**Location**: [archive location]
---
## Summary
**Total Tasks**: 13
**Phase 1 (Announce)**: T001-T004 (4 tasks, [N] parallel)
**Phase 2 (Migrate)**: T005-T007 (3 tasks, ongoing)
**Phase 3 (Remove)**: T008-T013 (6 tasks, [N] parallel)
**Total Timeline**: [estimated timeline]
**Success Criteria**:
- ✅ Deprecation announced to all users
- ✅ Migration guide published
- ✅ ≥90% users migrated
- ✅ Feature removed safely
- ✅ Documentation updated
```
Write to `$TASKS_FILE`.
---
### 6. Execute Phased Deprecation
Execute across three phases:
```
📉 Executing Deprecation Workflow
Phase 1: Announcement (Month 1)
T001: Add Deprecation Warnings
✓ Warnings added to code
T002-T004: [Parallel] Publish Migration Guide, Update Docs, Announce
⚡ Executing 3 tasks in parallel...
✓ Migration guide published
✓ Documentation updated
✓ Deprecation announced
Phase 2: Migration Support (Months 2-3)
T005: Monitor Adoption
Week 1: 15% migrated
Week 2: 32% migrated
Week 4: 58% migrated
Week 6: 78% migrated
Week 8: 91% migrated ✅
T006: Provide User Support
✓ 12 support tickets resolved
✓ 3 migration blockers fixed
T007: Send Migration Reminders
✓ Weekly reminders sent
Phase 3: Removal (Month 4)
T008: Final Migration Check
✓ 91% users migrated
✓ Stakeholder approval received
T009: Disable Feature
✓ Feature disabled in production
✓ No issues reported
T010-T012: [Parallel] Remove Code, Cleanup Tests, Cleanup Docs
⚡ Executing 3 tasks in parallel...
✓ All cleanup tasks complete
T013: Archive Artifacts
✓ Artifacts archived
```
---
## Final Output
```
✅ Deprecation Workflow Complete - Deprecation ${DEPRECATE_NUM}
📊 Deprecation Results:
- Users migrated: 91% ✅
- Alternative adopted: 87% ✅
- Support tickets: 12 (all resolved) ✅
- Timeline: Completed on schedule ✅
📋 Artifacts:
- ${DEPRECATE_SPEC}
- ${MIGRATION_GUIDE}
- ${TASKS_FILE}
⏱️ Total Timeline: [duration]
✅ Feature Safely Removed:
- Code deleted and archived
- Documentation updated
- Users successfully migrated
📈 Next Steps:
- Monitor alternative feature adoption
- Archive learnings for future deprecations
```
---
## Operating Principles
1. **Phased Approach**: Announce → Migrate → Remove
2. **User-Centric**: Help users migrate successfully
3. **Communication**: Over-communicate timeline and alternatives
4. **Track Progress**: Monitor migration adoption
5. **Safe Removal**: Only remove when migration complete
---
## Success Criteria
✅ Deprecation announced to all affected users
✅ Migration guide published and accessible
✅ ≥90% user migration achieved
✅ Migration blockers resolved
✅ Feature removed safely
✅ Documentation and code cleanup complete
✅ Artifacts archived
---
**Workflow Coverage**: Addresses ~5% of development work (feature evolution)

495
commands/fix.md Normal file
View 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

477
commands/hotfix.md Normal file
View File

@@ -0,0 +1,477 @@
---
description: Expedited emergency response workflow for critical production issues
---
<!--
ATTRIBUTION CHAIN:
1. Original methodology: spec-kit-extensions (https://github.com/MartyBonacci/spec-kit-extensions)
by Marty Bonacci (2025)
2. Adapted: SpecLab plugin by Marty Bonacci & Claude Code (2025)
3. Based on: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute expedited emergency response workflow for critical production issues requiring immediate resolution.
**Key Principles**:
1. **Speed First**: Minimal process overhead, maximum velocity
2. **Safety**: Despite speed, maintain essential safeguards
3. **Rollback Ready**: Always have rollback plan
4. **Post-Mortem**: After fire is out, analyze and learn
5. **Communication**: Keep stakeholders informed
**Use Cases**: Critical bugs, security vulnerabilities, data corruption, service outages
**Coverage**: Addresses ~10-15% of development work (emergencies)
---
## Smart Integration Detection
```bash
# Check for SpecSwarm (tech stack enforcement) - OPTIONAL in hotfix
SPECSWARM_INSTALLED=$(claude plugin list | grep -q "specswarm" && echo "true" || echo "false")
# Check for SpecTest (parallel execution, hooks, metrics)
SPECTEST_INSTALLED=$(claude plugin list | grep -q "spectest" && echo "true" || echo "false")
# In hotfix mode, integration is OPTIONAL - speed is priority
if [ "$SPECTEST_INSTALLED" = "true" ]; then
ENABLE_METRICS=true
echo "🎯 SpecTest detected (metrics enabled, but minimal overhead)"
fi
if [ "$SPECSWARM_INSTALLED" = "true" ]; then
TECH_VALIDATION_AVAILABLE=true
echo "🎯 SpecSwarm detected (tech validation available if time permits)"
fi
```
**Note**: In hotfix mode, speed takes precedence. Tech validation and hooks are OPTIONAL.
---
## Pre-Workflow Hook (if SpecTest installed)
```bash
if [ "$ENABLE_METRICS" = "true" ]; then
echo "🎣 Pre-Hotfix Hook (minimal overhead mode)"
WORKFLOW_START_TIME=$(date +%s)
echo "✓ Emergency metrics tracking initialized"
echo ""
fi
```
---
## Execution Steps
### 1. Discover Hotfix Context
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
# Try to extract hotfix number from branch (hotfix/NNN-*)
HOTFIX_NUM=$(echo "$CURRENT_BRANCH" | grep -oE 'hotfix/([0-9]{3})' | grep -oE '[0-9]{3}')
if [ -z "$HOTFIX_NUM" ]; then
echo "🚨 HOTFIX WORKFLOW - EMERGENCY MODE"
echo ""
echo "No hotfix branch detected. Provide hotfix number:"
read -p "Hotfix number: " HOTFIX_NUM
HOTFIX_NUM=$(printf "%03d" $HOTFIX_NUM)
fi
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
ensure_features_dir "$REPO_ROOT"
FEATURE_DIR="${FEATURES_DIR}/${HOTFIX_NUM}-hotfix"
mkdir -p "$FEATURE_DIR"
HOTFIX_SPEC="${FEATURE_DIR}/hotfix.md"
TASKS_FILE="${FEATURE_DIR}/tasks.md"
```
Output:
```
🚨 Hotfix Workflow - EMERGENCY MODE - Hotfix ${HOTFIX_NUM}
✓ Branch: ${CURRENT_BRANCH}
✓ Feature directory: ${FEATURE_DIR}
⚡ Expedited process active (minimal overhead)
```
---
### 2. Create Minimal Hotfix Specification
Create `$HOTFIX_SPEC` with ESSENTIAL details only:
```markdown
# Hotfix ${HOTFIX_NUM}: [Title]
**🚨 EMERGENCY**: [Critical/High Priority]
**Created**: YYYY-MM-DD HH:MM
**Status**: Active
---
## Emergency Summary
**What's Broken**: [Brief description]
**Impact**:
- Users affected: [scope]
- Service status: [degraded/down]
- Data at risk: [Yes/No]
**Urgency**: [Immediate/Within hours/Within day]
---
## Immediate Actions
**1. Mitigation** (if applicable):
- [Temporary mitigation in place? Describe]
**2. Hotfix Scope**:
- [What needs to be fixed immediately]
**3. Rollback Plan**:
- [How to rollback if hotfix fails]
---
## Technical Details
**Root Cause** (if known):
- [Quick analysis]
**Fix Approach**:
- [Minimal changes to resolve emergency]
**Files Affected**:
- [List critical files]
**Testing Strategy**:
- [Minimal essential tests - what MUST pass?]
---
## Deployment Plan
**Target**: Production
**Rollout**: [Immediate/Phased]
**Rollback Trigger**: [When to rollback]
---
## Post-Mortem Required
**After Emergency Resolved**:
- [ ] Root cause analysis
- [ ] Permanent fix (if hotfix is temporary)
- [ ] Process improvements
- [ ] Documentation updates
- [ ] Team retrospective
---
## Metadata
**Workflow**: Hotfix (Emergency Response)
**Created By**: SpecLab Plugin v1.0.0
```
**Prompt user for:**
- Emergency summary
- Impact assessment
- Rollback plan
Write to `$HOTFIX_SPEC`.
Output:
```
📋 Hotfix Specification (Minimal)
✓ Created: ${HOTFIX_SPEC}
✓ Emergency documented
✓ Rollback plan defined
⚡ Ready for immediate action
```
---
### 3. Generate Minimal Tasks
Create `$TASKS_FILE` with ESSENTIAL tasks only:
```markdown
# Tasks: Hotfix ${HOTFIX_NUM} - EMERGENCY
**Workflow**: Hotfix (Expedited)
**Status**: Active
**Created**: YYYY-MM-DD HH:MM
---
## ⚡ EMERGENCY MODE - MINIMAL PROCESS
**Speed Priority**: Essential tasks only
**Tech Validation**: ${TECH_VALIDATION_AVAILABLE} (OPTIONAL - use if time permits)
**Metrics**: ${ENABLE_METRICS} (lightweight tracking)
---
## Emergency Tasks
### T001: Implement Hotfix
**Description**: [Minimal fix to resolve emergency]
**Files**: [list]
**Validation**: [Essential test only]
**Parallel**: No (focused fix)
### T002: Essential Testing
**Description**: Verify hotfix resolves emergency
**Test Scope**: MINIMAL (critical path only)
**Expected**: Emergency resolved
**Parallel**: No
### T003: Deploy to Production
**Description**: Emergency deployment
**Rollback Plan**: ${ROLLBACK_PLAN}
**Validation**: Service restored
**Parallel**: No
### T004: Monitor Post-Deployment
**Description**: Watch metrics, error rates, user reports
**Duration**: [monitoring period]
**Escalation**: [when to rollback]
**Parallel**: No
---
## Post-Emergency Tasks (After Fire Out)
### T005: Root Cause Analysis
**Description**: Deep dive into why emergency occurred
**Output**: Root cause doc
**Timeline**: Within 24-48 hours
### T006: Permanent Fix (if hotfix is temporary)
**Description**: Replace hotfix with proper solution
**Workflow**: Use /speclab:bugfix for permanent fix
**Timeline**: [timeframe]
### T007: Post-Mortem
**Description**: Team retrospective and process improvements
**Timeline**: Within 1 week
---
## Summary
**Emergency Tasks**: 4 (T001-T004)
**Post-Emergency Tasks**: 3 (T005-T007)
**Estimated Time to Resolution**: <1-2 hours (emergency tasks only)
**Success Criteria**:
- ✅ Emergency resolved
- ✅ Service restored
- ✅ No data loss
- ✅ Rollback plan tested (if triggered)
```
Write to `$TASKS_FILE`.
Output:
```
📊 Emergency Tasks Generated
✓ Created: ${TASKS_FILE}
✓ 4 emergency tasks (immediate resolution)
✓ 3 post-emergency tasks (learning and improvement)
⚡ Estimated resolution time: <1-2 hours
```
---
### 4. Execute Emergency Tasks
**Execute T001-T004 with MAXIMUM SPEED**:
```
🚨 Executing Hotfix Workflow - EMERGENCY MODE
⚡ T001: Implement Hotfix
[Execute minimal fix]
${TECH_VALIDATION_IF_TIME_PERMITS}
⚡ T002: Essential Testing
[Run critical path tests only]
⚡ T003: Deploy to Production
[Emergency deployment]
✓ Deployed
⏱️ Monitoring...
⚡ T004: Monitor Post-Deployment
[Watch metrics for N minutes]
${MONITORING_RESULTS}
${EMERGENCY_RESOLVED_OR_ROLLBACK}
```
**If Emergency Resolved**:
```
✅ EMERGENCY RESOLVED
📊 Resolution:
- Time to fix: [duration]
- Service status: Restored
- Impact: Mitigated
📋 Post-Emergency Actions Required:
- T005: Root cause analysis (within 24-48h)
- T006: Permanent fix (if hotfix is temporary)
- T007: Post-mortem (within 1 week)
Schedule these using normal workflows when appropriate.
```
**If Rollback Triggered**:
```
🔄 ROLLBACK INITIATED
Reason: [rollback trigger hit]
Status: Rolling back hotfix
[Execute rollback plan from hotfix.md]
✅ Rollback Complete
Service status: [current status]
⚠️ Hotfix failed - need alternative approach
Recommend: Escalate to senior engineer / architect
```
---
## Post-Workflow Hook (if SpecTest installed)
```bash
if [ "$ENABLE_METRICS" = "true" ]; then
echo ""
echo "🎣 Post-Hotfix Hook"
WORKFLOW_END_TIME=$(date +%s)
WORKFLOW_DURATION=$((WORKFLOW_END_TIME - WORKFLOW_START_TIME))
WORKFLOW_MINUTES=$(echo "scale=0; $WORKFLOW_DURATION / 60" | bc)
echo "✓ Emergency resolved"
echo "⏱️ Time to Resolution: ${WORKFLOW_MINUTES} minutes"
# Update metrics
METRICS_FILE=".specswarm/workflow-metrics.json"
echo "📊 Emergency metrics saved: ${METRICS_FILE}"
echo ""
echo "📋 Post-Emergency Actions:"
echo "- Complete T005-T007 in normal hours"
echo "- Schedule post-mortem"
echo "- Document learnings"
fi
```
---
## Final Output
```
✅ Hotfix Workflow Complete - Hotfix ${HOTFIX_NUM}
🚨 Emergency Status: RESOLVED
📋 Artifacts Created:
- ${HOTFIX_SPEC}
- ${TASKS_FILE}
📊 Results:
- Emergency resolved in: ${RESOLUTION_TIME}
- Service status: Restored
- Rollback triggered: [Yes/No]
⏱️ Time to Resolution: ${WORKFLOW_DURATION}
📋 Post-Emergency Actions Required:
1. Root cause analysis (T005) - within 24-48h
2. Permanent fix (T006) - if hotfix is temporary
3. Post-mortem (T007) - within 1 week
📈 Next Steps:
- Monitor production metrics closely
- Schedule post-mortem meeting
- Plan permanent fix: /speclab:bugfix (if hotfix is temporary)
```
---
## Error Handling
**If hotfix fails**:
- Execute rollback plan immediately
- Escalate to senior engineer
- Document failure for post-mortem
**If rollback fails**:
- CRITICAL: Manual intervention required
- Alert on-call engineer
- Document all actions taken
**If emergency worsens**:
- Stop hotfix attempt
- Consider service shutdown / maintenance mode
- Escalate to incident commander
---
## Operating Principles
1. **Speed Over Process**: Minimize overhead, maximize velocity
2. **Essential Only**: Skip non-critical validations
3. **Rollback Ready**: Always have escape hatch
4. **Monitor Closely**: Watch post-deployment metrics
5. **Learn After**: Post-mortem is mandatory
6. **Communicate**: Keep stakeholders informed
7. **Temporary OK**: Hotfix can be temporary (permanent fix later)
---
## Success Criteria
✅ Emergency resolved quickly (<2 hours)
✅ Service restored to normal operation
✅ No data loss or corruption
✅ Rollback plan tested (if needed)
✅ Post-emergency tasks scheduled
✅ Incident documented for learning
---
**Workflow Coverage**: Addresses ~10-15% of development work (emergencies)
**Speed**: ~45-90 minutes average time to resolution
**Integration**: Optional SpecSwarm/SpecTest (speed takes priority)
**Graduation Path**: Proven workflow will graduate to SpecSwarm stable

196
commands/impact.md Normal file
View File

@@ -0,0 +1,196 @@
---
description: Standalone impact analysis for any feature or change
---
## User Input
```text
$ARGUMENTS
```
## Goal
Perform standalone impact analysis for any feature or change to identify affected components, dependencies, and risks.
**Use Cases**:
- Pre-planning impact assessment
- Architecture review
- Risk analysis before major changes
- Dependency mapping
- Used by `/speclab:modify` workflow
---
## Execution Steps
### 1. Parse Target
```bash
TARGET=$ARGUMENTS
if [ -z "$TARGET" ]; then
echo "🔍 Impact Analysis"
echo ""
echo "What feature/component do you want to analyze?"
echo "Examples:"
echo " - Feature number: 018"
echo " - File/module: app/models/user.ts"
echo " - API endpoint: /api/v1/users"
read -p "Target: " TARGET
fi
echo "🔍 Analyzing Impact for: ${TARGET}"
```
---
### 2. Analyze Dependencies
```bash
# Search codebase for references
echo "Scanning codebase..."
# Find direct references
# - Import statements
# - Function calls
# - Type usage
# - API endpoint calls
# Find indirect references
# - Components using direct dependencies
# - Services consuming APIs
# Generate dependency graph
echo "Building dependency graph..."
```
---
### 3. Generate Impact Report
```markdown
# Impact Analysis: ${TARGET}
**Analysis Date**: YYYY-MM-DD
**Scope**: [Feature/Module/API/Component]
---
## Target Summary
**Type**: [Feature/API/Module/Component]
**Location**: [path]
**Current Purpose**: [description]
---
## Direct Dependencies
Components that directly depend on this target:
| Component | Type | Usage Pattern | Impact Level |
|-----------|------|---------------|--------------|
| [Component 1] | [Service/UI/API] | [How it's used] | [High/Med/Low] |
| [Component 2] | [Service/UI/API] | [How it's used] | [High/Med/Low] |
**Total Direct Dependencies**: [N]
---
## Indirect Dependencies
Components that depend on direct dependencies:
| Component | Via | Impact Level |
|-----------|-----|--------------|
| [Component 1] | [Direct Dep] | [High/Med/Low] |
**Total Indirect Dependencies**: [N]
---
## Dependency Graph
```
[Target]
├── Direct Dep 1
│ ├── Indirect Dep 1a
│ └── Indirect Dep 1b
├── Direct Dep 2
│ └── Indirect Dep 2a
└── Direct Dep 3
```
---
## Risk Assessment
### Change Impact Level: [Low/Medium/High/Critical]
**Risk Factors**:
| Factor | Level | Rationale |
|--------|-------|-----------|
| Number of Dependencies | [High/Med/Low] | [N direct, M indirect] |
| Criticality | [High/Med/Low] | [Critical systems affected?] |
| Test Coverage | [High/Med/Low] | [Coverage %] |
| Change Complexity | [High/Med/Low] | [Simple/Complex] |
**Overall Risk Score**: [N/10]
---
## Recommendations
### If Modifying This Target:
1. **Review all [N] dependencies** before making changes
2. **Test strategy**: [recommendation]
3. **Communication**: [notify teams owning dependent systems]
4. **Rollout**: [Big bang / Phased / Feature flag]
### Consideration for Breaking Changes:
- **Compatibility layer**: [Yes - recommended / Not needed]
- **Migration plan**: [Required / Not required]
- **Deprecation timeline**: [timeframe]
---
## Next Steps
Based on this analysis:
- **For modifications**: Use `/speclab:modify ${TARGET}`
- **For bugfixes**: Use `/speclab:bugfix` if issues found
- **For refactoring**: Use `/speclab:refactor ${TARGET}` if quality issues
- **For deprecation**: Use `/speclab:deprecate ${TARGET}` if sunset planned
```
---
### 4. Output Report
```
🔍 Impact Analysis Complete
📊 Analysis Results:
- Target: ${TARGET}
- Direct dependencies: [N]
- Indirect dependencies: [M]
- Risk level: [Low/Medium/High/Critical]
📋 Full report available (above)
📈 Recommended Next Steps:
- [Recommendation based on findings]
```
---
## Success Criteria
✅ Target identified and analyzed
✅ All direct dependencies mapped
✅ Indirect dependencies identified
✅ Risk level assessed
✅ Recommendations provided

993
commands/implement.md Normal file
View File

@@ -0,0 +1,993 @@
---
description: Execute the implementation plan by processing and executing all tasks defined in tasks.md
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
1. **Discover Feature Context**:
**YOU MUST NOW discover the feature context using the Bash tool:**
a. **Get repository root** by executing:
```bash
git rev-parse --show-toplevel 2>/dev/null || pwd
```
Store the result as REPO_ROOT.
b. **Get current branch name** by executing:
```bash
git rev-parse --abbrev-ref HEAD 2>/dev/null
```
Store the result as BRANCH.
c. **Extract feature number from branch name** by executing:
```bash
echo "$BRANCH" | grep -oE '^[0-9]{3}'
```
Store the result as FEATURE_NUM.
d. **Initialize features directory and find feature**:
```bash
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
get_features_dir "$REPO_ROOT"
# If feature number is empty, find latest feature
if [ -z "$FEATURE_NUM" ]; then
FEATURE_NUM=$(list_features "$REPO_ROOT" | grep -oE '^[0-9]{3}' | sort -nr | head -1)
fi
# Find feature directory
find_feature_dir "$FEATURE_NUM" "$REPO_ROOT"
# FEATURE_DIR is now set by find_feature_dir
```
f. **Display to user:**
```
📁 Feature Context
✓ Repository: {REPO_ROOT}
✓ Branch: {BRANCH}
✓ Feature: {FEATURE_NUM}
✓ Directory: {FEATURE_DIR}
```
2. **Check checklists status** (if FEATURE_DIR/checklists/ exists):
- Scan all checklist files in the checklists/ directory
- For each checklist, count:
* Total items: All lines matching `- [ ]` or `- [X]` or `- [x]`
* Completed items: Lines matching `- [X]` or `- [x]`
* Incomplete items: Lines matching `- [ ]`
- Create a status table:
```
| Checklist | Total | Completed | Incomplete | Status |
|-----------|-------|-----------|------------|--------|
| ux.md | 12 | 12 | 0 | ✓ PASS |
| test.md | 8 | 5 | 3 | ✗ FAIL |
| security.md | 6 | 6 | 0 | ✓ PASS |
```
- Calculate overall status:
* **PASS**: All checklists have 0 incomplete items
* **FAIL**: One or more checklists have incomplete items
- **If any checklist is incomplete**:
* Display the table with incomplete item counts
* **STOP** and ask: "Some checklists are incomplete. Do you want to proceed with implementation anyway? (yes/no)"
* Wait for user response before continuing
* If user says "no" or "wait" or "stop", halt execution
* If user says "yes" or "proceed" or "continue", proceed to step 3
- **If all checklists are complete**:
* Display the table showing all checklists passed
* Automatically proceed to step 3
3. Load and analyze the implementation context:
- **REQUIRED**: Read tasks.md for the complete task list and execution plan
- **REQUIRED**: Read plan.md for tech stack, architecture, and file structure
- **IF EXISTS**: Read data-model.md for entities and relationships
- **IF EXISTS**: Read contracts/ for API specifications and test requirements
- **IF EXISTS**: Read research.md for technical decisions and constraints
- **IF EXISTS**: Read quickstart.md for integration scenarios
- **IF EXISTS**: Read `.specswarm/tech-stack.md` for runtime validation (SpecSwarm)
<!-- ========== TECH STACK VALIDATION (SpecSwarm Enhancement) ========== -->
<!-- Added by Marty Bonacci & Claude Code (2025) -->
3b. **Pre-Implementation Tech Stack Validation** (if tech-stack.md exists):
**Purpose**: Runtime validation before writing any code or imports
**YOU MUST NOW perform tech stack validation using these steps:**
1. **Check if tech-stack.md exists** using the Read tool:
- Try to read `.specswarm/tech-stack.md`
- If file doesn't exist: Skip this entire section (3b)
- If file exists: Continue with validation
2. **Load Tech Stack Compliance Report** from plan.md using the Read tool:
- Read `${FEATURE_DIR}/plan.md`
- Search for "Tech Stack Compliance Report" section
- If section does NOT exist: Skip validation (plan created before SpecSwarm)
- If section DOES exist: Continue to step 3
3. **Verify All Conflicts Resolved** using the Grep tool:
a. Search for conflicts:
```bash
grep -q "⚠️ Conflicting Technologies" "${FEATURE_DIR}/plan.md"
```
b. If conflicts found, check if unresolved:
```bash
grep -q "**Your choice**: _\[" "${FEATURE_DIR}/plan.md"
```
c. If unresolved choices found:
- **HALT** implementation
- Display error: "❌ Tech stack conflicts still unresolved"
- Display message: "Cannot implement until all conflicts in plan.md are resolved"
- Stop execution
4. **Verify No Prohibited Technologies in Plan** using the Grep tool:
a. Search for prohibited techs:
```bash
grep -q "❌ Prohibited Technologies" "${FEATURE_DIR}/plan.md"
```
b. If found, check if blocking:
```bash
grep -q "**Cannot proceed**" "${FEATURE_DIR}/plan.md"
```
c. If blocking issues found:
- **HALT** implementation
- Display error: "❌ Prohibited technologies still present in plan.md"
- Display message: "Remove or replace prohibited technologies before implementing"
- Stop execution
4. **Load Prohibited Technologies List**:
```bash
# Extract all prohibited technologies from tech-stack.md
PROHIBITED_TECHS=()
APPROVED_ALTERNATIVES=()
while IFS= read -r line; do
if [[ $line =~ ^-\ ❌\ (.*)\ \(use\ (.*)\ instead\) ]]; then
PROHIBITED_TECHS+=("${BASH_REMATCH[1]}")
APPROVED_ALTERNATIVES+=("${BASH_REMATCH[2]}")
fi
done < <(grep "❌" "${REPO_ROOT}.specswarm/tech-stack.md")
```
5. **Runtime Import/Dependency Validation**:
**BEFORE writing ANY file that contains imports or dependencies:**
```bash
# For each import statement or dependency about to be written:
check_technology_compliance() {
local TECH_NAME="$1"
local FILE_PATH="$2"
local LINE_CONTENT="$3"
# Check if technology is prohibited
for i in "${!PROHIBITED_TECHS[@]}"; do
PROHIBITED="${PROHIBITED_TECHS[$i]}"
APPROVED="${APPROVED_ALTERNATIVES[$i]}"
if echo "$TECH_NAME" | grep -qi "$PROHIBITED"; then
ERROR "Prohibited technology detected: $PROHIBITED"
MESSAGE "File: $FILE_PATH"
MESSAGE "Line: $LINE_CONTENT"
MESSAGE "❌ Cannot use: $PROHIBITED"
MESSAGE "✅ Must use: $APPROVED"
MESSAGE "See .specswarm/tech-stack.md for details"
HALT
fi
done
# Check if technology is unapproved (warn but allow)
if ! grep -qi "$TECH_NAME" "${REPO_ROOT}.specswarm/tech-stack.md" 2>/dev/null; then
WARNING "Unapproved technology: $TECH_NAME"
MESSAGE "File: $FILE_PATH"
MESSAGE "This library is not in tech-stack.md"
PROMPT "Continue anyway? (yes/no)"
read -r RESPONSE
if [[ ! "$RESPONSE" =~ ^[Yy] ]]; then
MESSAGE "Halting. Please add $TECH_NAME to tech-stack.md or choose approved alternative"
HALT
fi
fi
}
```
6. **Validation Triggers**:
**JavaScript/TypeScript**:
- Before writing: `import ... from '...'`
- Before writing: `require('...')`
- Before writing: `npm install ...` or `yarn add ...`
- Extract library name and validate
**Python**:
- Before writing: `import ...` or `from ... import ...`
- Before writing: `pip install ...`
- Extract module name and validate
**Go**:
- Before writing: `import "..."`
- Before executing: `go get ...`
- Extract package name and validate
**General**:
- Before writing any `package.json` dependencies
- Before writing any `requirements.txt` entries
- Before writing any `go.mod` require statements
- Before writing any `composer.json` dependencies
7. **Pattern Validation**:
Check for prohibited patterns (not just libraries):
```bash
validate_code_pattern() {
local FILE_CONTENT="$1"
local FILE_PATH="$2"
# Check for prohibited patterns from tech-stack.md
# Example: "Class components" prohibited
if echo "$FILE_CONTENT" | grep -q "class.*extends React.Component"; then
ERROR "Prohibited pattern: Class components"
MESSAGE "File: $FILE_PATH"
MESSAGE "Use functional components instead"
HALT
fi
# Example: "Redux" prohibited
if echo "$FILE_CONTENT" | grep -qi "createStore\|configureStore.*@reduxjs"; then
ERROR "Prohibited library: Redux"
MESSAGE "File: $FILE_PATH"
MESSAGE "Use React Router loaders/actions instead"
HALT
fi
}
```
8. **Continuous Validation**:
- Run validation before EVERY file write operation
- Run validation before EVERY package manager command
- Run validation before EVERY import statement
- Accumulate violations and report at end if in batch mode
<!-- ========== END TECH STACK VALIDATION ========== -->
4. **Project Setup Verification**:
- **REQUIRED**: Create/verify ignore files based on actual project setup:
**Detection & Creation Logic**:
- Check if the following command succeeds to determine if the repository is a git repo (create/verify .gitignore if so):
```sh
git rev-parse --git-dir 2>/dev/null
```
- Check if Dockerfile* exists or Docker in plan.md → create/verify .dockerignore
- Check if .eslintrc* or eslint.config.* exists → create/verify .eslintignore
- Check if .prettierrc* exists → create/verify .prettierignore
- Check if .npmrc or package.json exists → create/verify .npmignore (if publishing)
- Check if terraform files (*.tf) exist → create/verify .terraformignore
- Check if .helmignore needed (helm charts present) → create/verify .helmignore
**If ignore file already exists**: Verify it contains essential patterns, append missing critical patterns only
**If ignore file missing**: Create with full pattern set for detected technology
**Common Patterns by Technology** (from plan.md tech stack):
- **Node.js/JavaScript**: `node_modules/`, `dist/`, `build/`, `*.log`, `.env*`
- **Python**: `__pycache__/`, `*.pyc`, `.venv/`, `venv/`, `dist/`, `*.egg-info/`
- **Java**: `target/`, `*.class`, `*.jar`, `.gradle/`, `build/`
- **C#/.NET**: `bin/`, `obj/`, `*.user`, `*.suo`, `packages/`
- **Go**: `*.exe`, `*.test`, `vendor/`, `*.out`
- **Universal**: `.DS_Store`, `Thumbs.db`, `*.tmp`, `*.swp`, `.vscode/`, `.idea/`
**Tool-Specific Patterns**:
- **Docker**: `node_modules/`, `.git/`, `Dockerfile*`, `.dockerignore`, `*.log*`, `.env*`, `coverage/`
- **ESLint**: `node_modules/`, `dist/`, `build/`, `coverage/`, `*.min.js`
- **Prettier**: `node_modules/`, `dist/`, `build/`, `coverage/`, `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`
- **Terraform**: `.terraform/`, `*.tfstate*`, `*.tfvars`, `.terraform.lock.hcl`
5. Parse tasks.md structure and extract:
- **Task phases**: Setup, Tests, Core, Integration, Polish
- **Task dependencies**: Sequential vs parallel execution rules
- **Task details**: ID, description, file paths, parallel markers [P]
- **Execution flow**: Order and dependency requirements
6. Execute implementation following the task plan:
- **Phase-by-phase execution**: Complete each phase before moving to the next
- **Respect dependencies**: Run sequential tasks in order, parallel tasks [P] can run together
- **Follow TDD approach**: Execute test tasks before their corresponding implementation tasks
- **File-based coordination**: Tasks affecting the same files must run sequentially
- **Validation checkpoints**: Verify each phase completion before proceeding
7. Implementation execution rules:
- **Setup first**: Initialize project structure, dependencies, configuration
- **Tests before code**: If you need to write tests for contracts, entities, and integration scenarios
- **Core development**: Implement models, services, CLI commands, endpoints
- **Integration work**: Database connections, middleware, logging, external services
- **Polish and validation**: Unit tests, performance optimization, documentation
8. Progress tracking and error handling:
- Report progress after each completed task
- Halt execution if any non-parallel task fails
- For parallel tasks [P], continue with successful tasks, report failed ones
- Provide clear error messages with context for debugging
- Suggest next steps if implementation cannot proceed
- **IMPORTANT** For completed tasks, make sure to mark the task off as [X] in the tasks file.
9. Completion validation:
- Verify all required tasks are completed
- Check that implemented features match the original specification
- Validate that tests pass and coverage meets requirements
- Confirm the implementation follows the technical plan
- Report final status with summary of completed work
<!-- ========== SSR PATTERN VALIDATION ========== -->
<!-- Added by Marty Bonacci & Claude Code (2025-10-15) -->
9b. **SSR Architecture Validation** - Prevent Bug 913-type issues:
**Purpose**: Detect hardcoded URLs and relative URLs in server-side rendering contexts
**YOU MUST NOW run SSR pattern validation using the Bash tool:**
1. **Execute SSR validator:**
```bash
cd ${REPO_ROOT} && bash ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/specswarm/lib/ssr-validator.sh
```
2. **Parse validation results:**
- Exit code 0: No issues found (✓ PASS)
- Exit code 1: Issues detected (⚠️ FAIL)
3. **If issues detected:**
a. **Display issue summary** from validator output
b. **Ask user for action:**
```
⚠️ SSR Pattern Issues Detected
================================
Would you like me to:
1. Auto-fix common issues (create getApiUrl helper, update imports)
2. Show detailed issues and fix manually
3. Skip (continue anyway - NOT RECOMMENDED)
Choose (1/2/3):
```
c. **If user chooses option 1 (Auto-fix):**
- Check if app/utils/api.ts exists
- If not, create it with getApiUrl() helper:
```typescript
export function getApiUrl(path: string): string {
const base = typeof window !== 'undefined'
? ''
: process.env.API_BASE_URL || 'http://localhost:3000';
return `${base}${path}`;
}
```
- Scan all files with hardcoded URLs using Grep tool
- For each file:
* Add import: `import { getApiUrl } from '../utils/api';`
* Replace `fetch('http://localhost:3000/api/...')` with `fetch(getApiUrl('/api/...'))`
* Replace `fetch('/api/...')` in loaders/actions with `fetch(getApiUrl('/api/...'))`
- Re-run SSR validator to confirm fixes
- Display: "✅ Auto-fix complete. All SSR patterns corrected."
d. **If user chooses option 2 (Manual fix):**
- Display detailed issue list from validator
- Display recommendations
- Wait for user to fix manually
- Offer to re-run validator: "Type 'validate' to re-check or 'continue' to proceed"
e. **If user chooses option 3 (Skip):**
- Display warning: "⚠️ Skipping SSR validation. Production deployment may fail."
- Continue to next step
4. **If no issues found:**
- Display: "✅ SSR patterns validated - No architectural issues detected"
- Continue to next step
**IMPORTANT**: This validation prevents production failures from Bug 913-type issues (relative URLs in SSR contexts).
<!-- ========== END SSR PATTERN VALIDATION ========== -->
<!-- ========== QUALITY VALIDATION (SpecSwarm Phase 1) ========== -->
<!-- Added by Marty Bonacci & Claude Code (2025) -->
10. **Quality Validation** - CRITICAL STEP, MUST EXECUTE:
**Purpose**: Automated quality assurance before merge
**YOU MUST NOW CHECK FOR AND RUN QUALITY VALIDATION:**
1. **First**, check if quality standards file exists by reading the file at `${REPO_ROOT}.specswarm/quality-standards.md` using the Read tool.
2. **If the file does NOT exist:**
- Display this message to the user:
```
Quality Validation
====================
No quality standards defined. Skipping automated validation.
To enable quality gates:
1. Create .specswarm/quality-standards.md
2. Define minimum coverage and quality score
3. Configure test requirements
See: plugins/specswarm/templates/quality-standards-template.md
```
- Then proceed directly to Step 11 (Git Workflow)
3. **If the file EXISTS, you MUST execute the full quality validation workflow using the Bash tool:**
a. **Display header** by outputting directly to the user:
```
🧪 Running Quality Validation
=============================
```
b. **Detect test frameworks** using the Bash tool:
```bash
cd ${REPO_ROOT} && bash ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/specswarm/lib/test-framework-detector.sh
```
Parse the JSON output to extract:
- List of all detected frameworks
- Primary framework (highest priority)
- Framework count
Store primary framework for use in tests.
c. **Run unit tests** using the detected framework:
**YOU MUST NOW run tests using the Bash tool:**
1. **Source the test detector library:**
```bash
source ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/specswarm/lib/test-framework-detector.sh
```
2. **Run tests for primary framework:**
```bash
run_tests "{PRIMARY_FRAMEWORK}" ${REPO_ROOT}
```
3. **Parse test results:**
```bash
parse_test_results "{PRIMARY_FRAMEWORK}" "{TEST_OUTPUT}"
```
Extract: total, passed, failed, skipped counts
4. **Display results to user:**
```
1. Unit Tests ({FRAMEWORK_NAME})
✓ Total: {TOTAL}
✓ Passed: {PASSED} ({PASS_RATE}%)
✗ Failed: {FAILED}
⊘ Skipped: {SKIPPED}
```
d. **Measure code coverage** (if coverage tool available):
**YOU MUST NOW measure coverage using the Bash tool:**
1. **Check for coverage tool:**
```bash
source ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/specswarm/lib/test-framework-detector.sh
detect_coverage_tool "{PRIMARY_FRAMEWORK}" ${REPO_ROOT}
```
2. **If coverage tool detected, run coverage:**
```bash
run_coverage "{PRIMARY_FRAMEWORK}" ${REPO_ROOT}
```
Parse coverage percentage from output.
3. **Calculate proportional coverage score (Phase 2 Enhancement):**
- Read min_coverage from quality-standards.md (default 80%)
- Calculate score using proportional formula:
* Coverage >= 90%: 25 points (full credit)
* Coverage 80-89%: 20-24 points (proportional)
* Coverage 70-79%: 15-19 points (proportional)
* Coverage 60-69%: 10-14 points (proportional)
* Coverage 50-59%: 5-9 points (proportional)
* Coverage < 50%: 0-4 points (proportional)
Formula: `score = min(25, (coverage / 90) * 25)`
4. **Display results to user:**
```
3. Code Coverage
Coverage: {COVERAGE}%
Target: {TARGET}%
Score: {SCORE}/25 points
Status: {EXCELLENT/GOOD/ACCEPTABLE/NEEDS IMPROVEMENT/INSUFFICIENT}
```
5. **If no coverage tool:**
- Display: "Coverage measurement not configured (0 points)"
- Score: 0 points
e. **Detect browser test framework**:
```bash
cd ${REPO_ROOT} && source ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/specswarm/lib/quality-gates.sh && detect_browser_test_framework
```
f. **Run browser tests** (if Playwright/Cypress detected):
- For Playwright: `npx playwright test 2>&1 | tail -30`
- For Cypress: `npx cypress run 2>&1 | tail -30`
- Parse results (passed/failed/total)
- Display with "4. Browser Tests" header
- If no browser framework: Display "No browser test framework detected - Skipping"
f2. **Analyze bundle sizes** (Phase 3 Enhancement):
**YOU MUST NOW analyze bundle sizes using the Bash tool:**
1. **Run bundle size monitor:**
```bash
cd ${REPO_ROOT} && bash ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/speclabs/lib/bundle-size-monitor.sh
```
2. **Parse bundle analysis results:**
- Exit code 0: All bundles within budget (✓ PASS)
- Exit code 1: Large bundles detected (⚠️ WARNING)
- Exit code 2: Critical bundle size exceeded (🔴 CRITICAL)
3. **Extract bundle metrics:**
- Total bundle size (in KB)
- Number of large bundles (>500KB)
- Number of critical bundles (>1MB)
- List of top 5 largest bundles
4. **Calculate bundle size score:**
- < 500KB total: 20 points (excellent)
- 500-750KB: 15 points (good)
- 750-1000KB: 10 points (acceptable)
- 1000-2000KB: 5 points (poor)
- > 2000KB: 0 points (critical)
5. **Display results to user:**
```
5. Bundle Size Performance
Total Size: {TOTAL_SIZE}
Largest Bundle: {LARGEST_BUNDLE}
Score: {SCORE}/20 points
Status: {EXCELLENT/GOOD/ACCEPTABLE/POOR/CRITICAL}
```
6. **If no build directory found:**
- Display: "No build artifacts found - Run build first (0 points)"
- Score: 0 points
- Note: Bundle size analysis requires a production build
7. **Track bundle size in metrics:**
- Add bundle_size_kb to metrics.json
- Enables bundle size tracking over time
f3. **Enforce performance budgets** (Phase 3 Enhancement - Optional):
**YOU MUST NOW check if performance budgets are defined:**
1. **Check for budget configuration:**
- Read quality-standards.md using Read tool
- Look for budget settings:
* max_bundle_size (KB)
* max_initial_load (KB)
* enforce_budgets (true/false)
2. **If enforce_budgets is true, run enforcement:**
```bash
cd ${REPO_ROOT} && bash ~/.claude/plugins/marketplaces/specswarm-marketplace/plugins/speclabs/lib/performance-budget-enforcer.sh
```
3. **Parse enforcement results:**
- Exit code 0: All budgets met (✓ PASS)
- Exit code 1: Budgets violated (❌ FAIL)
4. **If budgets violated:**
a. **Display violations** from enforcer output
b. **Check block_merge setting:**
- If block_merge_on_budget_violation is true: HALT
- If false: Warn and ask user "Continue anyway? (yes/no)"
5. **Display budget status:**
```
⚡ Performance Budget Status
- Bundle Size: {PASS/FAIL}
- Initial Load: {PASS/FAIL}
Overall: {PASS/FAIL}
```
6. **If no budgets configured:**
- Skip enforcement
- Note: "Performance budgets not configured (optional)"
g. **Calculate quality score** using proportional scoring (Phase 2 & 3 Enhancement):
**YOU MUST NOW calculate scores for each component:**
1. **Unit Tests** (0-25 points - proportional by pass rate):
- 100% passing: 25 points
- 90-99% passing: 20-24 points (proportional)
- 80-89% passing: 15-19 points (proportional)
- 70-79% passing: 10-14 points (proportional)
- 60-69% passing: 5-9 points (proportional)
- <60% passing: 0-4 points (proportional)
Formula: `score = min(25, (pass_rate / 100) * 25)`
2. **Code Coverage** (0-25 points - proportional by coverage %):
- >=90% coverage: 25 points
- 80-89% coverage: 20-24 points (proportional)
- 70-79% coverage: 15-19 points (proportional)
- 60-69% coverage: 10-14 points (proportional)
- 50-59% coverage: 5-9 points (proportional)
- <50% coverage: 0-4 points (proportional)
Formula: `score = min(25, (coverage / 90) * 25)`
3. **Integration Tests** (0-15 points - proportional):
- 100% passing: 15 points
- Proportional for <100%
- 0 points if not detected
Formula: `score = min(15, (pass_rate / 100) * 15)`
4. **Browser Tests** (0-15 points - proportional):
- 100% passing: 15 points
- Proportional for <100%
- 0 points if not detected
Formula: `score = min(15, (pass_rate / 100) * 15)`
5. **Bundle Size** (0-20 points - Phase 3 feature):
- < 500KB total: 20 points
- 500-750KB: 15 points
- 750-1000KB: 10 points
- 1000-2000KB: 5 points
- > 2000KB: 0 points
- No build found: 0 points
6. **Visual Alignment** (0-15 points - Phase 3 future):
- Set to 0 for now (screenshot analysis not yet implemented)
**Total possible: 115 points** (but scaled to 100 for display)
**Scoring Note**: When Visual Alignment is implemented, adjust other components to maintain 100-point scale.
**Example Calculation:**
- Unit Tests: 106/119 passing (89%) → 22.25 points
- Coverage: 75% → 20.83 points
- Integration Tests: Not detected → 0 points
- Browser Tests: Not configured → 0 points
- Bundle Size: 450KB → 20 points
- Visual Alignment: Not implemented → 0 points
- **Total: 63.08/115 points** (scaled to ~55/100)
h. **Display quality report** with proportional scoring details:
```
Quality Validation Results
==========================
1. Unit Tests ({FRAMEWORK}): {SCORE}/25 points
✓ Passed: {PASSED}/{TOTAL} ({PASS_RATE}%)
✗ Failed: {FAILED}
Status: {EXCELLENT/GOOD/ACCEPTABLE/NEEDS IMPROVEMENT}
2. Code Coverage: {SCORE}/25 points
Coverage: {COVERAGE}% (target: {TARGET}%)
Status: {EXCELLENT/GOOD/ACCEPTABLE/NEEDS IMPROVEMENT/INSUFFICIENT}
3. Integration Tests: {SCORE}/15 points
{DETAILS or "Not detected"}
4. Browser Tests: {SCORE}/15 points
{DETAILS or "Not configured"}
5. Bundle Size: {SCORE}/20 points
Total: {TOTAL_SIZE} | Largest: {LARGEST_BUNDLE}
Status: {EXCELLENT/GOOD/ACCEPTABLE/POOR/CRITICAL}
6. Visual Alignment: 0/15 points
Status: Not yet implemented (Phase 3 future)
════════════════════════════════════════
Raw Score: {RAW_SCORE}/115 points
Scaled Score: {SCALED_SCORE}/100 points
════════════════════════════════════════
Status: {PASS/FAIL} (threshold: {THRESHOLD}/100)
Score Breakdown:
████████████████░░░░░░░░ {SCALED_SCORE}% ({VISUAL_BAR})
Note: Score scaled from 115-point system to 100-point display
```
i. **Check quality gates** from quality-standards.md:
- Read min_quality_score (default 80)
- Read block_merge_on_failure (default false)
- If score < minimum:
- If block_merge_on_failure is true: HALT and show error
- If block_merge_on_failure is false: Show warning and ask user "Continue with merge anyway? (yes/no)"
- If score >= minimum: Display "✅ Quality validation passed!"
j. **Save quality metrics** by updating `${REPO_ROOT}.specswarm/metrics.json`:
- Add entry for current feature number
- Include quality score, coverage, test results
- Use Write tool to update the JSON file
**IMPORTANT**: You MUST execute this step if quality-standards.md exists. Do NOT skip it. Use the Bash tool to run all commands and parse the results.
4. **Proactive Quality Improvements** - If quality score < 80/100:
**YOU MUST NOW offer to improve the quality score:**
a. **Check for missing coverage tool:**
- If Vitest was detected but coverage measurement showed 0% or "not configured":
- Display to user:
```
⚡ Coverage Tool Not Installed
=============================
Installing @vitest/coverage-v8 would add +25 points to your quality score.
Current: {CURRENT_SCORE}/100
With coverage: {CURRENT_SCORE + 25}/100
Would you like me to:
1. Install coverage tool and re-run validation
2. Skip (continue without coverage)
Choose (1 or 2):
```
- If user chooses 1:
- Run: `npm install --save-dev @vitest/coverage-v8`
- Check if vitest.config.ts exists using Read tool
- If exists, update it to add coverage configuration
- If not exists, create vitest.config.ts with coverage config
- Re-run quality validation (step 3 above)
- Display new score
b. **Check for missing E2E tests:**
- If Playwright was detected but no tests were found:
- Display to user:
```
⚡ No E2E Tests Found
=====================
Writing basic E2E tests would add +15 points to your quality score.
Current: {CURRENT_SCORE}/100
With E2E tests: {CURRENT_SCORE + 15}/100
Would you like me to:
1. Generate basic Playwright test templates
2. Skip (continue without E2E tests)
Choose (1 or 2):
```
- If user chooses 1:
- Create tests/e2e/ directory if not exists
- Generate basic test file with:
* Login flow test (if authentication exists)
* Main feature flow test (based on spec.md)
* Basic smoke test
- Run: `npx playwright test`
- Re-run quality validation
- Display new score
c. **Display final improvement summary:**
```
📊 Quality Score Improvement
============================
Before improvements: {ORIGINAL_SCORE}/100
After improvements: {FINAL_SCORE}/100
Increase: +{INCREASE} points
{STATUS_EMOJI} Quality Status: {PASS/FAIL}
```
**Note**: This proactive improvement step can increase quality scores from 25/100 to 65/100+ automatically.
<!-- ========== END QUALITY VALIDATION ========== -->
11. **Git Workflow Completion** (if git repository):
**Purpose**: Handle feature branch merge and cleanup after successful implementation
**INSTRUCTIONS FOR CLAUDE:**
1. **Check if in a git repository** using Bash tool:
```bash
git rev-parse --git-dir 2>/dev/null
```
If this fails, skip git workflow entirely.
2. **Get current and main branch names** using Bash:
```bash
git rev-parse --abbrev-ref HEAD
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'
```
3. **Only proceed if on a feature branch** (not main/master). If already on main, display "Already on main branch" and stop.
4. **Display git workflow options** to the user:
```
🌳 Git Workflow
===============
Current branch: {CURRENT_BRANCH}
Main branch: {MAIN_BRANCH}
Feature implementation complete! What would you like to do?
1. Merge to {MAIN_BRANCH} and delete feature branch (recommended)
2. Stay on {CURRENT_BRANCH} for additional work
3. Switch to {MAIN_BRANCH} without merging (keep branch)
Choose (1/2/3):
```
5. **Wait for user choice** and proceed based on their selection.
**OPTION 1: Merge and Delete Branch**
a. **Check for uncommitted changes** using Bash:
```bash
git diff-index --quiet HEAD --
```
If exit code is non-zero, there are uncommitted changes.
b. **If there are uncommitted changes:**
- Display: `git status --short` to show changes
- Ask user: "Commit these changes first? (yes/no)"
c. **If user wants to commit, intelligently stage ONLY source files:**
**CRITICAL - Smart Git Staging (Project-Aware):**
**YOU MUST NOW perform smart file staging using these steps:**
1. **Detect project type** by checking for files:
- Read package.json using Read tool
- Check for framework indicators:
* Vite: `vite.config.ts` or `"vite"` in package.json
* Next.js: `next.config.js` or `"next"` in package.json
* Remix: `remix.config.js` or `"@remix-run"` in package.json
* Create React App: `react-scripts` in package.json
* Node.js generic: package.json exists but no specific framework
- Store detected type for use in exclusions
2. **Build exclusion patterns based on project type:**
a. **Base exclusions (all projects):**
```
':!node_modules/' ':!.pnpm-store/' ':!.yarn/'
':!*.log' ':!coverage/' ':!.nyc_output/'
```
b. **Project-specific exclusions:**
- Vite: `':!dist/' ':!build/'`
- Next.js: `':!.next/' ':!out/'`
- Remix: `':!build/' ':!public/build/'`
- CRA: `':!build/'`
c. **Parse .gitignore** using Read tool:
- Read .gitignore if it exists
- Extract patterns (lines not starting with #)
- Convert to pathspec format: `:!{pattern}`
- Add to exclusion list
3. **Check for large files** using Bash:
```bash
git status --porcelain | cut -c4- | while read file; do
if [ -f "$file" ] && [ $(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null) -gt 1048576 ]; then
echo "$file ($(du -h "$file" | cut -f1))"
fi
done
```
a. **If large files found:**
- Display warning:
```
⚠️ Large Files Detected
======================
The following files are >1MB:
- {file1} ({size1})
- {file2} ({size2})
These may not belong in git. Add to .gitignore?
1. Add to .gitignore and skip
2. Commit anyway
3. Cancel commit
Choose (1/2/3):
```
- If option 1: Append to .gitignore, exclude from staging
- If option 2: Include in staging
- If option 3: Cancel commit, return to main flow
4. **Stage files with exclusions** using Bash:
```bash
git add . {BASE_EXCLUSIONS} {PROJECT_EXCLUSIONS} {GITIGNORE_EXCLUSIONS}
```
Example for Vite project:
```bash
git add . ':!node_modules/' ':!dist/' ':!build/' ':!*.log' ':!coverage/'
```
5. **Verify staging** using Bash:
```bash
git diff --cached --name-only
```
a. **Check if any excluded patterns appear:**
- If `dist/`, `build/`, `.next/`, etc. appear in staged files
- Display error: "❌ Build artifacts detected in staging"
- Ask user: "Unstage and retry? (yes/no)"
- If yes: `git reset` and retry with stricter patterns
6. **Commit with message** using Bash:
```bash
git commit -m "{USER_PROVIDED_MESSAGE}"
```
**IMPORTANT**: This project-aware staging prevents build artifacts and large files from being committed.
d. **Merge to main branch:**
- Test merge first (dry run): `git merge --no-commit --no-ff {CURRENT_BRANCH}`
- If successful: abort test, do real merge with message
- If conflicts: abort, show manual resolution steps, stay on feature branch
e. **Delete feature branch** if merge succeeded:
```bash
git branch -d {CURRENT_BRANCH}
```
**OPTION 2: Stay on Current Branch**
- Display message about when/how to merge later
- No git commands needed
**OPTION 3: Switch to Main (Keep Branch)**
- Switch to main: `git checkout {MAIN_BRANCH}`
- Keep feature branch for later
**IMPORTANT**: When staging files for commit, NEVER use `git add .` - always filter out build artifacts!
Note: This command assumes a complete task breakdown exists in tasks.md. If tasks are incomplete or missing, suggest running `/tasks` first to regenerate the task list.

570
commands/init.md Normal file
View File

@@ -0,0 +1,570 @@
---
description: Interactive project initialization - creates constitution, tech stack, and quality standards
args:
- name: --skip-detection
description: Skip automatic technology detection
required: false
- name: --minimal
description: Use minimal defaults without interactive questions
required: false
---
## User Input
```text
$ARGUMENTS
```
## Goal
Initialize a new project with SpecSwarm by creating three foundation files:
1. `.specswarm/constitution.md` - Project governance and coding principles
2. `.specswarm/tech-stack.md` - Approved technologies and prohibited patterns
3. `.specswarm/quality-standards.md` - Quality gates and performance budgets
This command streamlines project setup from 3 manual steps to a single interactive workflow.
---
## Execution Steps
### Step 1: Check for Existing Files
```bash
echo "🔍 Checking for existing SpecSwarm configuration..."
echo ""
EXISTING_FILES=()
if [ -f ".specswarm/constitution.md" ]; then
EXISTING_FILES+=("constitution.md")
fi
if [ -f ".specswarm/tech-stack.md" ]; then
EXISTING_FILES+=("tech-stack.md")
fi
if [ -f ".specswarm/quality-standards.md" ]; then
EXISTING_FILES+=("quality-standards.md")
fi
if [ ${#EXISTING_FILES[@]} -gt 0 ]; then
echo "⚠️ Found existing configuration files:"
for file in "${EXISTING_FILES[@]}"; do
echo " - .specswarm/$file"
done
echo ""
fi
```
If existing files found, use **AskUserQuestion** tool:
```
Question: "Existing configuration files detected. What would you like to do?"
Header: "Existing Files"
Options:
1. "Update existing files"
Description: "Merge new settings with existing configuration"
2. "Backup and recreate"
Description: "Save existing files to .backup/ and create fresh configuration"
3. "Cancel initialization"
Description: "Abort and keep existing configuration unchanged"
```
Store response in `$EXISTING_ACTION`.
If `$EXISTING_ACTION` == "Cancel", exit with message.
If `$EXISTING_ACTION` == "Backup and recreate", create backups:
```bash
mkdir -p .specswarm/.backup/$(date +%Y%m%d-%H%M%S)
for file in "${EXISTING_FILES[@]}"; do
cp ".specswarm/$file" ".specswarm/.backup/$(date +%Y%m%d-%H%M%S)/$file"
done
echo "✅ Backed up existing files to .specswarm/.backup/"
```
---
### Step 2: Auto-Detect Technology Stack
**Skip this step if `--skip-detection` flag is present.**
```bash
echo "🔍 Auto-detecting technology stack..."
echo ""
# Source the multi-language detector
PLUGIN_DIR="$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
source "${PLUGIN_DIR}/lib/language-detector.sh"
# Attempt to detect tech stack
if detect_tech_stack "$(pwd)"; then
AUTO_DETECT=true
# Display detected stack
display_detected_stack
else
# No config file detected - manual configuration mode
echo " No configuration file detected - auto-detection disabled"
echo ""
echo "📋 Supported configuration files:"
echo " • package.json (JavaScript/TypeScript)"
echo " • requirements.txt / pyproject.toml (Python)"
echo " • composer.json (PHP)"
echo " • go.mod (Go)"
echo " • Gemfile (Ruby)"
echo " • Cargo.toml (Rust)"
echo ""
echo "💡 Starting a new project?"
echo ""
echo " Consider scaffolding your project first for automatic setup:"
echo ""
echo " # JavaScript/TypeScript"
echo " npm create vite@latest . -- --template react-ts # React + Vite"
echo " npx create-next-app@latest . # Next.js"
echo " npm create astro@latest . # Astro"
echo " npm create vue@latest . # Vue"
echo ""
echo " # Python"
echo " pip install flask && flask init # Flask"
echo " django-admin startproject myproject . # Django"
echo " pip install fastapi && touch main.py # FastAPI"
echo ""
echo " # PHP"
echo " composer create-project laravel/laravel . # Laravel"
echo ""
echo " # Go"
echo " go mod init github.com/username/project # Go"
echo ""
echo " # Ruby"
echo " rails new . --skip-bundle # Rails"
echo ""
echo " # Rust"
echo " cargo init # Rust"
echo ""
echo " Then re-run /specswarm:init for automatic detection."
echo ""
echo "⚠️ Continuing with manual tech stack configuration..."
echo ""
read -p "Press Enter to continue with manual setup, or Ctrl+C to scaffold first..."
echo ""
AUTO_DETECT=false
fi
```
---
### Step 3: Interactive Configuration (if not --minimal)
**Skip this step if `--minimal` flag is present. Use detected values or sensible defaults.**
Use **AskUserQuestion** tool for configuration:
```
Question 1: "What is your project name?"
Header: "Project"
Options:
- Auto-detected from package.json "name" field or current directory name
- Allow custom input via "Other" option
```
Store in `$PROJECT_NAME`.
```
Question 2 (if AUTO_DETECT=true): "We detected your tech stack. Is this correct?"
Header: "Tech Stack"
Options:
1. "Yes, looks good"
Description: "Use detected technologies as-is"
2. "Let me modify"
Description: "Adjust the detected stack"
3. "Start from scratch"
Description: "Manually specify all technologies"
```
Store in `$TECH_CONFIRM`.
If `$TECH_CONFIRM` == "Let me modify" or "Start from scratch" or AUTO_DETECT=false:
```
Question 3: "What is your primary framework?"
Header: "Framework"
Options:
1. "React"
2. "Vue"
3. "Angular"
4. "Next.js"
5. "Node.js (backend)"
6. "Other" (allow custom input)
```
```
Question 4: "What testing framework do you use?"
Header: "Testing"
multiSelect: true
Options:
1. "Vitest (unit)"
2. "Jest (unit)"
3. "Playwright (e2e)"
4. "Cypress (e2e)"
5. "Testing Library"
6. "Other" (allow custom input)
```
```
Question 5: "What quality thresholds do you want?"
Header: "Quality"
Options:
1. "Standard (80% coverage, 80 quality score)"
Description: "Recommended for most projects"
2. "Strict (90% coverage, 90 quality score)"
Description: "For mission-critical applications"
3. "Relaxed (70% coverage, 70 quality score)"
Description: "For prototypes and experiments"
4. "Custom" (allow custom input)
```
Store in `$QUALITY_LEVEL`.
Parse quality thresholds:
- Standard: min_quality_score=80, min_test_coverage=80
- Strict: min_quality_score=90, min_test_coverage=90
- Relaxed: min_quality_score=70, min_test_coverage=70
```
Question 6: "Do you want to use default coding principles?"
Header: "Principles"
Options:
1. "Yes, use defaults"
Description: "DRY, SOLID, type safety, test coverage, documentation"
2. "Let me provide custom principles"
Description: "Define your own 3-5 principles"
```
Store in `$PRINCIPLES_CHOICE`.
If `$PRINCIPLES_CHOICE` == "Let me provide custom":
Ask for custom principles (text input via "Other" option or multiple questions)
---
### Step 4: Create .specswarm/constitution.md
Use the **SlashCommand** tool to execute the existing constitution command with the gathered information:
```bash
echo "📝 Creating .specswarm/constitution.md..."
# If custom principles provided, pass them to constitution command
if [ "$PRINCIPLES_CHOICE" = "custom" ]; then
# Use SlashCommand tool to run:
# /specswarm:constitution with custom principles
else
# Use SlashCommand tool to run:
# /specswarm:constitution (will use defaults)
fi
echo "✅ Created .specswarm/constitution.md"
```
Use the **SlashCommand** tool:
```
/specswarm:constitution
```
---
### Step 5: Create .specswarm/tech-stack.md
```bash
echo "📝 Creating .specswarm/tech-stack.md..."
# Read template
TEMPLATE=$(cat plugins/specswarm/templates/tech-stack.template.md)
# Replace placeholders
OUTPUT="$TEMPLATE"
OUTPUT="${OUTPUT//\[PROJECT_NAME\]/$PROJECT_NAME}"
OUTPUT="${OUTPUT//\[DATE\]/$(date +%Y-%m-%d)}"
OUTPUT="${OUTPUT//\[AUTO_GENERATED\]/$([[ $AUTO_DETECT == true ]] && echo "Yes" || echo "No")}"
OUTPUT="${OUTPUT//\[FRAMEWORK\]/$FRAMEWORK}"
OUTPUT="${OUTPUT//\[VERSION\]/$FRAMEWORK_VERSION}"
OUTPUT="${OUTPUT//\[FRAMEWORK_NOTES\]/"Functional components only (if React), composition API (if Vue)"}"
OUTPUT="${OUTPUT//\[LANGUAGE\]/$LANGUAGE}"
OUTPUT="${OUTPUT//\[LANGUAGE_VERSION\]/$LANGUAGE_VERSION}"
OUTPUT="${OUTPUT//\[BUILD_TOOL\]/$BUILD_TOOL}"
OUTPUT="${OUTPUT//\[BUILD_TOOL_VERSION\]/$BUILD_TOOL_VERSION}"
# State management section
if [ -n "$STATE_MGMT" ]; then
STATE_SECTION="- **$STATE_MGMT**
- Purpose: Application state management
- Notes: Preferred over alternatives"
else
STATE_SECTION="- No state management library detected
- Recommendation: Use React Context for simple state, Zustand for complex state"
fi
OUTPUT="${OUTPUT//\[STATE_MANAGEMENT_SECTION\]/$STATE_SECTION}"
# Styling section
if [ -n "$STYLING" ]; then
STYLE_SECTION="- **$STYLING**
- Purpose: Component styling
- Notes: Follow established patterns in codebase"
else
STYLE_SECTION="- No styling framework detected
- Recommendation: Consider Tailwind CSS for utility-first styling"
fi
OUTPUT="${OUTPUT//\[STYLING_SECTION\]/$STYLE_SECTION}"
# Testing section
UNIT_SECTION="${UNIT_TEST:-"Not configured - recommended: Vitest"}"
E2E_SECTION="${E2E_TEST:-"Not configured - recommended: Playwright"}"
OUTPUT="${OUTPUT//\[UNIT_TEST_FRAMEWORK\]/$UNIT_SECTION}"
OUTPUT="${OUTPUT//\[E2E_TEST_FRAMEWORK\]/$E2E_SECTION}"
OUTPUT="${OUTPUT//\[INTEGRATION_TEST_FRAMEWORK\]/${UNIT_TEST:-"Same as unit testing"}}"
# Approved libraries section
APPROVED_SECTION="### Data Validation
- Zod v4+ (runtime type validation)
### Utilities
- date-fns (date manipulation)
- lodash-es (utility functions, tree-shakeable)
### Forms (if applicable)
- React Hook Form (if using React)
- Zod validation integration
*Add project-specific approved libraries here*"
OUTPUT="${OUTPUT//\[APPROVED_LIBRARIES_SECTION\]/$APPROVED_SECTION}"
# Prohibited section
PROHIBITED_SECTION="### State Management
- ❌ Redux (use Zustand or Context API instead)
- ❌ MobX (prefer simpler alternatives)
### Deprecated Patterns
- ❌ Class components (use functional components with hooks)
- ❌ PropTypes (use TypeScript instead)
- ❌ Moment.js (use date-fns instead - smaller bundle)
*Add project-specific prohibited patterns here*"
OUTPUT="${OUTPUT//\[PROHIBITED_SECTION\]/$PROHIBITED_SECTION}"
# Notes section
NOTES_SECTION="- This file was ${AUTO_DETECT:+auto-detected from package.json and }created by \`/specswarm:init\`
- Update this file when adding new technologies or patterns
- Run \`/specswarm:init\` again to update with new detections"
OUTPUT="${OUTPUT//\[NOTES_SECTION\]/$NOTES_SECTION}"
# Write file
mkdir -p /memory
echo "$OUTPUT" > .specswarm/tech-stack.md
echo "✅ Created .specswarm/tech-stack.md"
```
---
### Step 6: Create .specswarm/quality-standards.md
```bash
echo "📝 Creating .specswarm/quality-standards.md..."
# Read template
TEMPLATE=$(cat plugins/specswarm/templates/quality-standards.template.md)
# Replace placeholders based on quality level
OUTPUT="$TEMPLATE"
OUTPUT="${OUTPUT//\[PROJECT_NAME\]/$PROJECT_NAME}"
OUTPUT="${OUTPUT//\[DATE\]/$(date +%Y-%m-%d)}"
OUTPUT="${OUTPUT//\[AUTO_GENERATED\]/Yes}"
# Quality thresholds
case "$QUALITY_LEVEL" in
"Standard")
MIN_QUALITY=80
MIN_COVERAGE=80
;;
"Strict")
MIN_QUALITY=90
MIN_COVERAGE=90
;;
"Relaxed")
MIN_QUALITY=70
MIN_COVERAGE=70
;;
"Custom")
# Would be provided by user
MIN_QUALITY="${CUSTOM_QUALITY:-80}"
MIN_COVERAGE="${CUSTOM_COVERAGE:-80}"
;;
*)
MIN_QUALITY=80
MIN_COVERAGE=80
;;
esac
OUTPUT="${OUTPUT//\[MIN_QUALITY_SCORE\]/$MIN_QUALITY}"
OUTPUT="${OUTPUT//\[MIN_TEST_COVERAGE\]/$MIN_COVERAGE}"
OUTPUT="${OUTPUT//\[ENFORCE_GATES\]/true}"
# Performance budgets
OUTPUT="${OUTPUT//\[ENFORCE_BUDGETS\]/true}"
OUTPUT="${OUTPUT//\[MAX_BUNDLE_SIZE\]/500}"
OUTPUT="${OUTPUT//\[MAX_INITIAL_LOAD\]/1000}"
OUTPUT="${OUTPUT//\[MAX_CHUNK_SIZE\]/200}"
# Code quality
OUTPUT="${OUTPUT//\[COMPLEXITY_THRESHOLD\]/10}"
OUTPUT="${OUTPUT//\[MAX_FILE_LINES\]/300}"
OUTPUT="${OUTPUT//\[MAX_FUNCTION_LINES\]/50}"
OUTPUT="${OUTPUT//\[MAX_FUNCTION_PARAMS\]/5}"
# Testing
OUTPUT="${OUTPUT//\[REQUIRE_TESTS\]/true}"
# Code review
OUTPUT="${OUTPUT//\[REQUIRE_CODE_REVIEW\]/true}"
OUTPUT="${OUTPUT//\[MIN_REVIEWERS\]/1}"
# CI/CD
OUTPUT="${OUTPUT//\[BLOCK_MERGE_ON_FAILURE\]/true}"
# Custom checks section
CUSTOM_CHECKS="### Performance Monitoring
- Monitor Core Web Vitals (LCP, FID, CLS)
- Set performance budgets in CI/CD
### Accessibility
- WCAG 2.1 Level AA compliance
- Automated a11y testing with axe-core
*Add project-specific checks here*"
OUTPUT="${OUTPUT//\[CUSTOM_CHECKS_SECTION\]/$CUSTOM_CHECKS}"
# Exemptions section
EXEMPTIONS="*No exemptions currently granted. Request exemptions via team discussion.*"
OUTPUT="${OUTPUT//\[EXEMPTIONS_SECTION\]/$EXEMPTIONS}"
# Notes section
NOTES="- Quality level: $QUALITY_LEVEL
- Created by \`/specswarm:init\`
- Enforced by \`/specswarm:ship\` before merge
- Review and adjust these standards for your team's needs"
OUTPUT="${OUTPUT//\[NOTES_SECTION\]/$NOTES}"
# Write file
echo "$OUTPUT" > .specswarm/quality-standards.md
echo "✅ Created .specswarm/quality-standards.md"
```
---
### Step 7: Summary and Next Steps
```bash
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " ✅ PROJECT INITIALIZATION COMPLETE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📁 Created Configuration Files:"
echo " ✓ .specswarm/constitution.md (governance & principles)"
echo " ✓ .specswarm/tech-stack.md (approved technologies)"
echo " ✓ .specswarm/quality-standards.md (quality gates)"
echo ""
echo "📊 Configuration Summary:"
echo " Project: $PROJECT_NAME"
echo " Framework: $FRAMEWORK $FRAMEWORK_VERSION"
echo " Language: $LANGUAGE"
echo " Quality Level: $QUALITY_LEVEL"
echo " Min Quality: $MIN_QUALITY/100"
echo " Min Coverage: $MIN_COVERAGE%"
echo ""
echo "📚 Next Steps:"
echo ""
echo " 1. Review the created files in .specswarm/"
echo " 2. Customize as needed for your team"
echo " 3. Build your first feature:"
echo " /specswarm:build \"your feature description\""
echo " 4. Ship when ready:"
echo " /specswarm:ship"
echo ""
echo "💡 Tips:"
echo " • Run /specswarm:suggest for workflow recommendations"
echo " • Tech stack enforcement prevents drift across features"
echo " • Quality gates ensure consistent code quality"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
```
---
## Important Notes
### Auto-Detection Accuracy
The auto-detection logic parses `package.json` to identify:
- Framework (React, Vue, Angular, Next.js)
- Language (TypeScript vs JavaScript)
- Build tool (Vite, Webpack, built-in)
- State management (Zustand, Redux Toolkit, Jotai)
- Styling (Tailwind, Styled Components, Emotion)
- Testing frameworks (Vitest, Jest, Playwright, Cypress)
Detection is **best-effort** - users can always modify or override detected values.
### File Conflict Handling
If configuration files already exist:
- **Update**: Merges new values with existing (preserves custom edits)
- **Backup**: Saves to `.specswarm/.backup/[timestamp]/` before recreating
- **Cancel**: Aborts initialization, keeps existing files
### Template Customization
Templates are located at:
- `plugins/specswarm/templates/tech-stack.template.md`
- `plugins/specswarm/templates/quality-standards.template.md`
Teams can customize these templates for organization-specific standards.
### Integration with Existing Commands
Once initialized, other commands reference these files:
- `/specswarm:build` - Enforces tech stack
- `/specswarm:ship` - Enforces quality gates
- `/specswarm:analyze-quality` - Reports against standards
- `/specswarm:upgrade` - Updates tech-stack.md
---
## Example Usage
### Basic Initialization
```bash
/specswarm:init
# Interactive questions, auto-detect tech stack
```
### Minimal Setup (No Questions)
```bash
/specswarm:init --minimal
# Uses all detected values and defaults
```
### Manual Tech Stack (No Auto-Detection)
```bash
/specswarm:init --skip-detection
# Asks for all technologies manually
```
### Update Existing Configuration
```bash
/specswarm:init
# Detects existing files, offers to update
```

326
commands/metrics-export.md Normal file
View File

@@ -0,0 +1,326 @@
---
description: Display orchestration metrics and performance analytics across all feature sessions
args:
- name: --session-id
description: Show detailed metrics for a specific session
required: false
- name: --recent
description: Number of recent sessions to show (default 10)
required: false
- name: --export
description: Export metrics to CSV file
required: false
---
# SpecLabs Orchestration Metrics Dashboard
```bash
echo "📊 SpecLabs Orchestration Metrics Dashboard"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Parse arguments
SESSION_ID=""
RECENT_COUNT=10
EXPORT_CSV=false
while [[ $# -gt 0 ]]; do
case "$1" in
--session-id) SESSION_ID="$2"; shift 2 ;;
--recent) RECENT_COUNT="$2"; shift 2 ;;
--export) EXPORT_CSV=true; shift ;;
*) shift ;;
esac
done
# Define paths (use environment variable or default)
SPECSWARM_ROOT="${SPECSWARM_ROOT:-$HOME/code-projects/specswarm}"
MEMORY_DIR="${SPECSWARM_ROOT}/memory"
ORCHESTRATOR_SESSIONS="${MEMORY_DIR}/orchestrator/sessions"
FEATURE_SESSIONS="${MEMORY_DIR}/feature-orchestrator/sessions"
# Check if session directories exist
if [ ! -d "$ORCHESTRATOR_SESSIONS" ] && [ ! -d "$FEATURE_SESSIONS" ]; then
echo "⚠️ No orchestration sessions found"
echo ""
echo "Sessions will be created when you run:"
echo " - /speclabs:orchestrate"
echo " - /speclabs:orchestrate-feature"
echo ""
exit 0
fi
```
## Metrics Overview
```bash
# Count total sessions
TOTAL_ORCHESTRATE=$(ls -1 "$ORCHESTRATOR_SESSIONS"/*.json 2>/dev/null | wc -l || echo "0")
TOTAL_FEATURE=$(ls -1 "$FEATURE_SESSIONS"/*.json 2>/dev/null | wc -l || echo "0")
TOTAL_SESSIONS=$((TOTAL_ORCHESTRATE + TOTAL_FEATURE))
echo "### Overall Statistics"
echo ""
echo "**Total Orchestration Sessions**: $TOTAL_SESSIONS"
echo " - Task-level orchestrations: $TOTAL_ORCHESTRATE"
echo " - Feature-level orchestrations: $TOTAL_FEATURE"
echo ""
if [ "$TOTAL_SESSIONS" -eq 0 ]; then
echo "No sessions to analyze. Run an orchestration command to generate metrics."
exit 0
fi
```
## Session-Specific Metrics
```bash
if [ -n "$SESSION_ID" ]; then
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "### Detailed Metrics: $SESSION_ID"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Find session file
SESSION_FILE=""
if [ -f "${ORCHESTRATOR_SESSIONS}/${SESSION_ID}.json" ]; then
SESSION_FILE="${ORCHESTRATOR_SESSIONS}/${SESSION_ID}.json"
elif [ -f "${FEATURE_SESSIONS}/${SESSION_ID}.json" ]; then
SESSION_FILE="${FEATURE_SESSIONS}/${SESSION_ID}.json"
else
echo "❌ Session not found: $SESSION_ID"
exit 1
fi
# Parse session data
SESSION_TYPE=$(jq -r '.type // "orchestrator"' "$SESSION_FILE")
STATUS=$(jq -r '.status' "$SESSION_FILE")
CREATED=$(jq -r '.created_at' "$SESSION_FILE")
COMPLETED=$(jq -r '.completed_at // "In Progress"' "$SESSION_FILE")
echo "**Session Type**: $SESSION_TYPE"
echo "**Status**: $STATUS"
echo "**Created**: $CREATED"
echo "**Completed**: $COMPLETED"
echo ""
# Feature-specific metrics
if [ "$SESSION_TYPE" = "feature_orchestrator" ]; then
FEATURE_DESC=$(jq -r '.feature_description' "$SESSION_FILE")
TOTAL_TASKS=$(jq -r '.implementation.total_count // 0' "$SESSION_FILE")
COMPLETED_TASKS=$(jq -r '.implementation.completed_count // 0' "$SESSION_FILE")
FAILED_TASKS=$(jq -r '.implementation.failed_count // 0' "$SESSION_FILE")
QUALITY=$(jq -r '.metrics.quality_score // "N/A"' "$SESSION_FILE")
echo "**Feature**: $FEATURE_DESC"
echo "**Tasks**: $COMPLETED_TASKS / $TOTAL_TASKS completed"
echo "**Failed**: $FAILED_TASKS"
echo "**Quality Score**: $QUALITY"
echo ""
# Show phase breakdown
echo "#### Phase Breakdown:"
echo ""
SPEC_DURATION=$(jq -r '.phases.specify.duration // "N/A"' "$SESSION_FILE")
PLAN_DURATION=$(jq -r '.phases.plan.duration // "N/A"' "$SESSION_FILE")
IMPL_DURATION=$(jq -r '.phases.implementation.duration // "N/A"' "$SESSION_FILE")
echo "- Specify: $SPEC_DURATION"
echo "- Plan: $PLAN_DURATION"
echo "- Implementation: $IMPL_DURATION"
echo ""
else
# Task-level orchestration metrics
WORKFLOW=$(jq -r '.workflow_file // "N/A"' "$SESSION_FILE")
ATTEMPTS=$(jq -r '.total_attempts // 1' "$SESSION_FILE")
SUCCESS=$(jq -r '.result.success // false' "$SESSION_FILE")
echo "**Workflow**: $WORKFLOW"
echo "**Attempts**: $ATTEMPTS"
echo "**Success**: $SUCCESS"
echo ""
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
exit 0
fi
```
## Recent Sessions Summary
```bash
echo "### Recent Sessions (Last $RECENT_COUNT)"
echo ""
# Get recent sessions from both directories
RECENT_SESSIONS=$(
(ls -t "$ORCHESTRATOR_SESSIONS"/*.json 2>/dev/null || true; \
ls -t "$FEATURE_SESSIONS"/*.json 2>/dev/null || true) | \
head -n "$RECENT_COUNT"
)
if [ -z "$RECENT_SESSIONS" ]; then
echo "No sessions found."
exit 0
fi
# Table header
printf "%-25s %-15s %-20s %-10s %-15s\n" "Session ID" "Type" "Status" "Tasks" "Quality"
printf "%-25s %-15s %-20s %-10s %-15s\n" "-------------------------" "---------------" "--------------------" "----------" "---------------"
# Initialize counters for aggregates
TOTAL_SUCCESS=0
TOTAL_FAILED=0
TOTAL_TASK_COUNT=0
TOTAL_COMPLETED_TASKS=0
QUALITY_SUM=0
QUALITY_COUNT=0
# Process each session
for SESSION_FILE in $RECENT_SESSIONS; do
SESSION_ID=$(basename "$SESSION_FILE" .json)
TYPE=$(jq -r '.type // "orchestrator"' "$SESSION_FILE")
STATUS=$(jq -r '.status' "$SESSION_FILE")
# Determine type label
if [ "$TYPE" = "feature_orchestrator" ]; then
TYPE_LABEL="feature"
TOTAL_TASKS=$(jq -r '.implementation.total_count // 0' "$SESSION_FILE")
COMPLETED=$(jq -r '.implementation.completed_count // 0' "$SESSION_FILE")
TASKS_DISPLAY="$COMPLETED/$TOTAL_TASKS"
QUALITY=$(jq -r '.metrics.quality_score // ""' "$SESSION_FILE")
TOTAL_TASK_COUNT=$((TOTAL_TASK_COUNT + TOTAL_TASKS))
TOTAL_COMPLETED_TASKS=$((TOTAL_COMPLETED_TASKS + COMPLETED))
if [ -n "$QUALITY" ] && [ "$QUALITY" != "null" ] && [ "$QUALITY" != "N/A" ]; then
QUALITY_SUM=$(echo "$QUALITY_SUM + $QUALITY" | bc 2>/dev/null || echo "$QUALITY_SUM")
QUALITY_COUNT=$((QUALITY_COUNT + 1))
QUALITY_DISPLAY="${QUALITY}/100"
else
QUALITY_DISPLAY="N/A"
fi
else
TYPE_LABEL="task"
TASKS_DISPLAY="1/1"
QUALITY_DISPLAY="N/A"
fi
# Count successes/failures
SUCCESS=$(jq -r '.result.success // false' "$SESSION_FILE")
if [ "$SUCCESS" = "true" ]; then
TOTAL_SUCCESS=$((TOTAL_SUCCESS + 1))
else
TOTAL_FAILED=$((TOTAL_FAILED + 1))
fi
# Truncate session ID if too long
SHORT_ID="${SESSION_ID:0:24}"
printf "%-25s %-15s %-20s %-10s %-15s\n" "$SHORT_ID" "$TYPE_LABEL" "$STATUS" "$TASKS_DISPLAY" "$QUALITY_DISPLAY"
done
echo ""
```
## Aggregate Metrics
```bash
echo "### Aggregate Metrics"
echo ""
SUCCESS_RATE=0
if [ "$TOTAL_SESSIONS" -gt 0 ]; then
SUCCESS_RATE=$(echo "scale=1; ($TOTAL_SUCCESS * 100) / $TOTAL_SESSIONS" | bc 2>/dev/null || echo "0")
fi
AVG_QUALITY="N/A"
if [ "$QUALITY_COUNT" -gt 0 ]; then
AVG_QUALITY=$(echo "scale=1; $QUALITY_SUM / $QUALITY_COUNT" | bc 2>/dev/null || echo "N/A")
fi
TASK_COMPLETION_RATE="N/A"
if [ "$TOTAL_TASK_COUNT" -gt 0 ]; then
TASK_COMPLETION_RATE=$(echo "scale=1; ($TOTAL_COMPLETED_TASKS * 100) / $TOTAL_TASK_COUNT" | bc 2>/dev/null || echo "0")
fi
echo "**Success Rate**: ${SUCCESS_RATE}% ($TOTAL_SUCCESS/$TOTAL_SESSIONS)"
echo "**Failed Sessions**: $TOTAL_FAILED"
echo "**Task Completion Rate**: ${TASK_COMPLETION_RATE}%"
echo "**Average Quality Score**: $AVG_QUALITY/100"
echo ""
```
## Export to CSV
```bash
if [ "$EXPORT_CSV" = "true" ]; then
EXPORT_FILE="${MEMORY_DIR}/metrics-export-$(date +%Y%m%d-%H%M%S).csv"
echo "📄 Exporting metrics to CSV..."
# CSV header
echo "session_id,type,status,total_tasks,completed_tasks,quality_score,created_at,completed_at" > "$EXPORT_FILE"
# Export all sessions
ALL_SESSIONS=$(
(ls -t "$ORCHESTRATOR_SESSIONS"/*.json 2>/dev/null || true; \
ls -t "$FEATURE_SESSIONS"/*.json 2>/dev/null || true)
)
for SESSION_FILE in $ALL_SESSIONS; do
SESSION_ID=$(basename "$SESSION_FILE" .json)
TYPE=$(jq -r '.type // "orchestrator"' "$SESSION_FILE")
STATUS=$(jq -r '.status' "$SESSION_FILE")
CREATED=$(jq -r '.created_at' "$SESSION_FILE")
COMPLETED=$(jq -r '.completed_at // ""' "$SESSION_FILE")
if [ "$TYPE" = "feature_orchestrator" ]; then
TOTAL=$(jq -r '.implementation.total_count // 0' "$SESSION_FILE")
COMP=$(jq -r '.implementation.completed_count // 0' "$SESSION_FILE")
QUAL=$(jq -r '.metrics.quality_score // ""' "$SESSION_FILE")
else
TOTAL=1
COMP=$(jq -r '.result.success // false' "$SESSION_FILE" | grep -q "true" && echo "1" || echo "0")
QUAL=""
fi
echo "$SESSION_ID,$TYPE,$STATUS,$TOTAL,$COMP,$QUAL,$CREATED,$COMPLETED" >> "$EXPORT_FILE"
done
echo "✅ Metrics exported to: $EXPORT_FILE"
echo ""
fi
```
---
## Usage Examples
```
# Show dashboard with recent sessions
/speclabs:metrics
# Show detailed metrics for a specific session
/speclabs:metrics --session-id feature-20251026-123456
# Show last 20 sessions
/speclabs:metrics --recent 20
# Export all metrics to CSV
/speclabs:metrics --export
```
---
**Purpose**: Track orchestration performance, quality metrics, and success rates across all SpecLabs workflows. Use this dashboard to identify patterns, monitor improvement, and analyze orchestration effectiveness.
**Key Metrics**:
- Success rate across all orchestrations
- Task completion rates for feature-level orchestrations
- Average quality scores
- Phase duration breakdowns
- Session history and trends
**Data Source**: Orchestration session data stored in `.specswarm/orchestrator/sessions/` and `.specswarm/feature-orchestrator/sessions/`

395
commands/metrics.md Normal file
View File

@@ -0,0 +1,395 @@
---
name: feature-metrics
description: 'Feature-level orchestration metrics and analytics. Analyzes completed features from actual project artifacts (spec.md, tasks.md) rather than orchestration sessions. Shows completion rates, test metrics, and git history. v2.8.0: Initial release with feature detection and comprehensive analytics.'
command_type: project
---
# Feature-Level Metrics Dashboard
```bash
#!/bin/bash
# Parse arguments
PROJECT_PATH=""
RECENT_COUNT=10
EXPORT_FILE=""
FEATURE_NUMBER=""
SPRINT_FILTER=""
SHOW_DETAILS=false
while [[ $# -gt 0 ]]; do
case $1 in
--recent)
RECENT_COUNT="$2"
shift 2
;;
--export)
EXPORT_FILE="${2:-feature-metrics-$(date +%Y%m%d_%H%M%S).csv}"
shift 2
;;
--feature)
FEATURE_NUMBER="$2"
shift 2
;;
--sprint)
SPRINT_FILTER="$2"
shift 2
;;
--details)
SHOW_DETAILS=true
shift
;;
--path)
PROJECT_PATH="$2"
shift 2
;;
*)
if [ -z "$PROJECT_PATH" ] && [ -d "$1" ]; then
PROJECT_PATH="$1"
fi
shift
;;
esac
done
# Default to current directory if no path specified
PROJECT_PATH="${PROJECT_PATH:-$(pwd)}"
# Source the feature metrics collector library
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
PLUGIN_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "$PLUGIN_ROOT/lib/feature-metrics-collector.sh"
# Set project root for library
export PROJECT_ROOT="$PROJECT_PATH"
echo "📊 SpecLabs Feature-Level Metrics Dashboard"
echo "============================================"
echo ""
echo "Project: $PROJECT_PATH"
echo ""
# Collect all feature data
echo "🔍 Scanning for features..."
features_json=$(fm_analyze_all_features "$PROJECT_PATH")
# Check if any features found
total_features=$(echo "$features_json" | jq 'length')
if [ "$total_features" -eq 0 ]; then
echo ""
echo " No features found in $PROJECT_PATH"
echo ""
echo "Features are detected by the presence of spec.md files."
echo "Make sure you're in a project directory with SpecSwarm features."
echo ""
echo "Searched for:"
echo " - */spec.md"
echo " - features/*/spec.md"
echo " - .features/*/spec.md"
echo ""
exit 0
fi
echo "✅ Found $total_features features"
echo ""
# Calculate aggregates
aggregates=$(fm_calculate_aggregates "$features_json")
# Display based on requested view
if [ -n "$FEATURE_NUMBER" ]; then
#==========================================================================
# SINGLE FEATURE DETAILS
#==========================================================================
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Feature $FEATURE_NUMBER Details"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Find the feature
feature=$(echo "$features_json" | jq --arg num "$FEATURE_NUMBER" \
'.[] | select(.metadata.feature_number == $num)')
if [ -z "$feature" ] || [ "$feature" = "null" ]; then
echo "❌ Feature $FEATURE_NUMBER not found"
exit 1
fi
# Display metadata
echo "📋 Metadata"
echo "───────────"
echo "$feature" | jq -r '" Name: \(.metadata.feature_name)
Status: \(.metadata.status)
Parent Branch: \(.metadata.parent_branch)
Created: \(.metadata.created_at)
Completed: \(.metadata.completed_at // "N/A")
Directory: \(.metadata.feature_dir)"'
echo ""
# Display task stats
echo "✅ Tasks"
echo "────────"
echo "$feature" | jq -r '" Total: \(.tasks.total)
Completed: \(.tasks.completed) (\(.tasks.completion_rate)%)
Failed: \(.tasks.failed)
Pending: \(.tasks.pending)"'
echo ""
# Display test stats
if [ "$(echo "$feature" | jq '.tests.total_tests')" -gt 0 ]; then
echo "🧪 Tests"
echo "────────"
echo "$feature" | jq -r '" Total: \(.tests.total_tests)
Passing: \(.tests.passing_tests) (\(.tests.pass_rate)%)
Failing: \(.tests.failing_tests)"'
echo ""
fi
# Display git stats
echo "🔀 Git History"
echo "──────────────"
echo "$feature" | jq -r '" Branch: \(.git.branch)
Commits: \(.git.commits)
Merged: \(.git.merged)
Merge Date: \(.git.merge_date // "N/A")"'
echo ""
elif [ -n "$SPRINT_FILTER" ]; then
#==========================================================================
# SPRINT AGGREGATE VIEW
#==========================================================================
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Sprint: $SPRINT_FILTER"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Filter features for this sprint
sprint_features=$(fm_filter_features "$features_json" "metadata.parent_branch" "$SPRINT_FILTER")
sprint_count=$(echo "$sprint_features" | jq 'length')
if [ "$sprint_count" -eq 0 ]; then
echo " No features found for sprint: $SPRINT_FILTER"
exit 0
fi
# Calculate sprint aggregates
sprint_aggregates=$(fm_calculate_aggregates "$sprint_features")
echo "📊 Sprint Statistics"
echo "────────────────────"
echo "$sprint_aggregates" | jq -r '" Total Features: \(.features.total)
Completed: \(.features.completed)
In Progress: \(.features.in_progress)
Total Tasks: \(.tasks.total)
Completed: \(.tasks.completed)
Failed: \(.tasks.failed)
Avg Completion Rate: \(.tasks.avg_completion_rate)%
Total Tests: \(.tests.total)
Passing: \(.tests.passing) (\(.tests.avg_pass_rate)%)
Failing: \(.tests.failing)"'
echo ""
echo "📝 Features in $SPRINT_FILTER"
echo "─────────────────────────────"
echo "$sprint_features" | jq -r '.[] | " [\(.metadata.feature_number)] \(.metadata.feature_name)
Status: \(.metadata.status) | Tasks: \(.tasks.completed)/\(.tasks.total) | Tests: \(.tests.passing_tests)/\(.tests.total_tests)\n"'
echo ""
else
#==========================================================================
# DASHBOARD SUMMARY VIEW
#==========================================================================
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Overall Statistics"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📊 Features"
echo "───────────"
echo "$aggregates" | jq -r '" Total: \(.features.total)
Completed: \(.features.completed)
In Progress: \(.features.in_progress)"'
echo ""
echo "✅ Tasks"
echo "────────"
echo "$aggregates" | jq -r '" Total: \(.tasks.total)
Completed: \(.tasks.completed)
Failed: \(.tasks.failed)
Avg Completion Rate: \(.tasks.avg_completion_rate)%"'
echo ""
echo "🧪 Tests"
echo "────────"
if [ "$(echo "$aggregates" | jq '.tests.total')" -gt 0 ]; then
echo "$aggregates" | jq -r '" Total: \(.tests.total)
Passing: \(.tests.passing) (\(.tests.avg_pass_rate)%)
Failing: \(.tests.failing)"'
else
echo " No test data found"
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Recent Features (Last $RECENT_COUNT)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Get recent features
recent_features=$(fm_get_recent "$features_json" "$RECENT_COUNT")
# Display recent features table
echo "$recent_features" | jq -r '.[] |
"[\(.metadata.feature_number)] \(.metadata.feature_name)
Status: \(.metadata.status) | Parent: \(.metadata.parent_branch)
Tasks: \(.tasks.completed)/\(.tasks.total) (\(.tasks.completion_rate)%) | Tests: \(.tests.passing_tests)/\(.tests.total_tests) (\(.tests.pass_rate)%)
Created: \(.metadata.created_at)
"'
# Sprint breakdown
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Features by Sprint/Parent Branch"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Group by parent branch
echo "$features_json" | jq -r 'group_by(.metadata.parent_branch) |
.[] |
"[\(.[0].metadata.parent_branch)]
Features: \(length)
Tasks Completed: \([.[].tasks.completed] | add)/\([.[].tasks.total] | add)
"'
fi
# Export to CSV if requested
if [ -n "$EXPORT_FILE" ]; then
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Exporting to CSV"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
exported_file=$(fm_export_csv "$features_json" "$EXPORT_FILE")
echo "✅ Metrics exported to: $exported_file"
echo ""
echo "Total rows: $((total_features + 1))" # +1 for header
echo ""
fi
# Help message for next steps
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Available Commands"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo " /speclabs:feature-metrics Dashboard summary"
echo " /speclabs:feature-metrics --recent 20 Show last 20 features"
echo " /speclabs:feature-metrics --feature 015 Feature 015 details"
echo " /speclabs:feature-metrics --sprint sprint-4 Sprint aggregates"
echo " /speclabs:feature-metrics --export Export to CSV"
echo " /speclabs:feature-metrics --path /project Analyze specific project"
echo ""
```
This command provides comprehensive feature-level metrics by analyzing actual project artifacts instead of orchestration sessions.
## What It Tracks
**Feature Detection**:
- Scans for spec.md files to identify features
- Works with any feature directory structure
- No orchestration session required
**Metrics Collected**:
1. **Feature Metadata** (from spec.md YAML):
- Feature number, name, status
- Parent branch, created/completed dates
- Directory location
2. **Task Statistics** (from tasks.md):
- Total, completed, failed, pending tasks
- Completion rate percentage
- Status markers (✅ COMPLETED, ❌ FAILED)
3. **Test Metrics** (from validation/testing docs):
- Total tests, passing, failing
- Pass rate percentage
- Extracted from validation summaries
4. **Git History**:
- Branch information
- Commit counts
- Merge status and dates
## Usage Examples
### Dashboard Summary
```bash
/speclabs:feature-metrics
```
Shows overall statistics and recent features.
### Feature Details
```bash
/speclabs:feature-metrics --feature 015
```
Complete metrics for Feature 015.
### Sprint Analysis
```bash
/speclabs:feature-metrics --sprint sprint-4
```
Aggregated metrics for all features in sprint-4.
### Export to CSV
```bash
/speclabs:feature-metrics --export
/speclabs:feature-metrics --export metrics-2025-11.csv
```
### Analyze Different Project
```bash
/speclabs:feature-metrics --path /home/user/projects/myapp
```
## Key Features
**No Session Required**: Analyzes actual feature artifacts, works with v2.6.1+ features that use `/specswarm:implement`
**Sprint Tracking**: Group features by parent branch for sprint-level analytics
**Export Capabilities**: CSV export for spreadsheet analysis
**Git Integration**: Tracks merge status and commit history
**Comprehensive**: Combines metadata, tasks, tests, and git data in one view
## Difference from `/speclabs:metrics`
| Feature | /speclabs:metrics | /speclabs:feature-metrics |
|---------|-------------------|---------------------------|
| Data Source | Orchestration sessions | Project artifacts (spec.md, tasks.md) |
| Workflow | Pre-v2.6.1 (per-task orchestration) | v2.6.1+ (specswarm implement) |
| Use Case | Task-level automation tracking | Feature-level completion analytics |
| Requires Session | Yes | No |
## Feature 015 Example
Feature 015 (Testing Infrastructure) metrics would show:
- 76 total tasks
- 76 completed tasks (100%)
- 136 total tests
- 131 passing tests (96.3%)
- Parent branch: sprint-4
- Status: Complete
- Git: Merged to sprint-4
This data comes from reading Feature 015's actual files, not orchestration sessions.

1032
commands/modify.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,486 @@
---
description: Orchestrate complete feature lifecycle from specification to implementation using autonomous agent
args:
- name: feature_description
description: Natural language description of the feature to build
required: true
- name: project_path
description: Path to the target project (defaults to current working directory)
required: false
- name: --skip-specify
description: Skip the specify phase (spec.md already exists)
required: false
- name: --skip-clarify
description: Skip the clarify phase
required: false
- name: --skip-plan
description: Skip the plan phase (plan.md already exists)
required: false
- name: --max-retries
description: Maximum retries per task (default 3)
required: false
- name: --audit
description: Run comprehensive code audit phase after implementation (compatibility, security, best practices)
required: false
- name: --validate
description: Run AI-powered interaction flow validation with Playwright (analyzes feature artifacts, generates intelligent test flows, executes user-defined + AI flows, monitors browser console + terminal, auto-fixes errors, kills dev server when done)
required: false
pre_orchestration_hook: |
#!/bin/bash
echo "🎯 Feature Orchestrator v2.7.3 - Truly Silent Autonomous Execution"
echo ""
echo "This orchestrator launches an autonomous agent that handles:"
echo " 1. SpecSwarm Planning: specify → clarify → plan → tasks"
echo " 2. SpecLabs Execution: automatically execute all tasks"
echo " 3. Intelligent Bugfix: Auto-fix failures with /specswarm:bugfix"
echo " 4. Code Audit: Comprehensive quality validation (if --audit)"
echo " 5. Completion Report: Full summary with next steps"
echo ""
# Parse arguments
FEATURE_DESC="$1"
shift
# Check if next arg is a path (doesn't start with --)
if [ -n "$1" ] && [ "${1:0:2}" != "--" ]; then
PROJECT_PATH="$1"
shift
else
PROJECT_PATH="$(pwd)"
fi
SKIP_SPECIFY=false
SKIP_CLARIFY=false
SKIP_PLAN=false
MAX_RETRIES=3
RUN_AUDIT=false
RUN_VALIDATE=false
while [[ $# -gt 0 ]]; do
case "$1" in
--skip-specify) SKIP_SPECIFY=true; shift ;;
--skip-clarify) SKIP_CLARIFY=true; shift ;;
--skip-plan) SKIP_PLAN=true; shift ;;
--max-retries) MAX_RETRIES="$2"; shift 2 ;;
--audit) RUN_AUDIT=true; shift ;;
--validate) RUN_VALIDATE=true; shift ;;
*) shift ;;
esac
done
# Validate project path
if [ ! -d "$PROJECT_PATH" ]; then
echo "❌ Error: Project path does not exist: $PROJECT_PATH"
echo " (Tip: Provide an explicit path or run from your project directory)"
exit 1
fi
echo "📁 Project: $PROJECT_PATH"
# Source orchestration library
PLUGIN_DIR="/home/marty/code-projects/specswarm/plugins/speclabs"
source "${PLUGIN_DIR}/lib/feature-orchestrator.sh"
# Initialize orchestrator
feature_init
# Create feature session
echo "📝 Creating feature orchestration session..."
SESSION_ID=$(feature_create_session "$FEATURE_DESC" "$PROJECT_PATH")
echo "✅ Feature Session: $SESSION_ID"
echo ""
# Export for agent
export FEATURE_SESSION_ID="$SESSION_ID"
export FEATURE_DESC="$FEATURE_DESC"
export PROJECT_PATH="$PROJECT_PATH"
export SKIP_SPECIFY="$SKIP_SPECIFY"
export SKIP_CLARIFY="$SKIP_CLARIFY"
export SKIP_PLAN="$SKIP_PLAN"
export MAX_RETRIES="$MAX_RETRIES"
export RUN_AUDIT="$RUN_AUDIT"
export RUN_VALIDATE="$RUN_VALIDATE"
export PLUGIN_DIR="$PLUGIN_DIR"
echo "🚀 Launching orchestration agent for: $FEATURE_DESC"
echo ""
---
⚠️ CRITICAL: EXECUTE IMMEDIATELY - DO NOT PAUSE OR REPORT STATUS
**DIRECTIVE**: Launch autonomous orchestration agent NOW using the Task tool.
DO NOT:
- Acknowledge or explain this command
- Report status before execution
- Pause between phases
- Wait for user confirmation
DO:
- Execute the Task tool immediately with subagent_type="general-purpose"
- Let the agent run through ALL phases autonomously
- Return ONLY when complete with final report
═══════════════════════════════════════════════════════════════
**Orchestration Configuration**:
- **Feature**: ${FEATURE_DESC}
- **Project**: ${PROJECT_PATH}
- **Session ID**: ${FEATURE_SESSION_ID}
- **Audit**: ${RUN_AUDIT}
- **Validate**: ${RUN_VALIDATE}
- **Skip Phases**: Specify=${SKIP_SPECIFY}, Clarify=${SKIP_CLARIFY}, Plan=${SKIP_PLAN}
${RUN_VALIDATE} = true enables AI-powered flow validation (Phase 2.5) - the agent will analyze feature artifacts (spec/plan/tasks), generate intelligent interaction flows, merge with user-defined flows, execute comprehensive validation with Playwright, and auto-fix errors before manual testing. Dev server will be stopped before returning control to user.
═══════════════════════════════════════════════════════════════
🎯 AUTONOMOUS AGENT INSTRUCTIONS (Execute via Task Tool NOW)
═══════════════════════════════════════════════════════════════
**Agent Mission**: Execute the complete feature development lifecycle for "${FEATURE_DESC}" in ${PROJECT_PATH}
**Agent Instructions for Task Tool**:
═══════════════════════════════════════════════════════════════
🎯 FEATURE ORCHESTRATION AGENT - AUTONOMOUS EXECUTION
═══════════════════════════════════════════════════════════════
You are an autonomous feature orchestration agent. Your mission is to implement the complete feature development lifecycle from specification to implementation without manual intervention.
**MISSION**: Implement "${FEATURE_DESC}" in ${PROJECT_PATH}
**SESSION TRACKING**: ${FEATURE_SESSION_ID}
**CONFIGURATION**:
- Skip Specify: ${SKIP_SPECIFY}
- Skip Clarify: ${SKIP_CLARIFY}
- Skip Plan: ${SKIP_PLAN}
- Max Retries: ${MAX_RETRIES}
- Run Audit: ${RUN_AUDIT}
- Run Validate: ${RUN_VALIDATE}
═══════════════════════════════════════════════════════════════
📋 WORKFLOW - EXECUTE IN ORDER
═══════════════════════════════════════════════════════════════
## PHASE 1: PLANNING (Automatic)
### Step 1.1: Specification
IF ${SKIP_SPECIFY} = false:
- Use the SlashCommand tool to execute: `/specswarm:specify "${FEATURE_DESC}"`
- Wait for completion
- Verify spec.md created in features/ directory
- Update session: feature_complete_specswarm_phase "${FEATURE_SESSION_ID}" "specify"
ELSE:
- Skip this step (spec.md already exists)
### Step 1.2: Clarification
IF ${SKIP_CLARIFY} = false:
- Use the SlashCommand tool to execute: `/specswarm:clarify`
- Answer any clarification questions if prompted
- Wait for completion
- Update session: feature_complete_specswarm_phase "${FEATURE_SESSION_ID}" "clarify"
ELSE:
- Skip this step
### Step 1.3: Planning
IF ${SKIP_PLAN} = false:
- Use the SlashCommand tool to execute: `/specswarm:plan`
- Wait for plan.md generation
- Review plan for implementation phases
- Update session: feature_complete_specswarm_phase "${FEATURE_SESSION_ID}" "plan"
ELSE:
- Skip this step (plan.md already exists)
### Step 1.4: Task Generation
- Use the SlashCommand tool to execute: `/specswarm:tasks`
- Wait for tasks.md generation
- Update session: feature_complete_specswarm_phase "${FEATURE_SESSION_ID}" "tasks"
### Step 1.5: Parse Tasks (Silent)
- Use the Read tool to read ${PROJECT_PATH}/features/*/tasks.md
- Count total tasks (look for task IDs like T001, T002, etc.)
- Extract task list
- Store total as ${total_tasks}
- DO NOT report task count
- Silently proceed to Phase 2
═══════════════════════════════════════════════════════════════
🔨 PHASE 2: IMPLEMENTATION (SpecSwarm Implement)
═══════════════════════════════════════════════════════════════
### Step 2.1: Execute All Tasks with SpecSwarm
⚠️ CRITICAL: Execute slash command WITHOUT explaining or reporting
- Update session: feature_start_implementation "${FEATURE_SESSION_ID}"
- Execute SlashCommand: `/specswarm:implement`
- DO NOT explain what implement will do
- DO NOT report "SpecSwarm will..."
- DO NOT describe the process
- WAIT SILENTLY for implement to complete and return results
- Once results returned, THEN parse them in Step 2.2
### Step 2.2: Parse Implementation Results (Silent)
⚠️ DO NOT REPORT - Only parse for decision-making
- Use Read tool to read ${PROJECT_PATH}/features/*/tasks.md
- Parse task completion status from tasks.md:
- Look for task status markers (✅ completed, ❌ failed, ⏳ in progress)
- Count completed tasks
- Count failed tasks
- Extract error messages for failed tasks
- Store counts in variables (${completed}, ${failed}, ${total})
- DO NOT report statistics to user
- DO NOT display task counts
- Silently proceed to Step 2.3
### Step 2.3: Update Session (Silent)
- Update session: feature_complete_implementation "${FEATURE_SESSION_ID}" "${completed}" "${failed}"
- Determine next phase based on results:
- If failed > 0: Proceed to Phase 3 (Bugfix)
- If ${RUN_VALIDATE} = true: Proceed to Phase 2.5 (Validation)
- Otherwise: Proceed to Phase 5 (Completion Report)
- DO NOT report to user
- Silently continue to next phase
═══════════════════════════════════════════════════════════════
🔍 PHASE 2.5: INTERACTIVE ERROR DETECTION (Conditional - If ${RUN_VALIDATE}=true)
═══════════════════════════════════════════════════════════════
IF ${RUN_VALIDATE} = true:
### Step 2.5.1: Initialize Validation Phase (Silent)
- Update session: feature_start_validation "${FEATURE_SESSION_ID}"
- DO NOT report to user
- Silently proceed to Step 2.5.2
### Step 2.5.2: Delegate to Standalone Validator
⚠️ CRITICAL: Execute validation WITHOUT explaining or reporting
- Execute SlashCommand:
```bash
/speclabs:validate-feature ${PROJECT_PATH} --session-id ${FEATURE_SESSION_ID}
```
- DO NOT report "Detected project type..."
- DO NOT explain what validation orchestrator will do
- DO NOT describe the validation process
- WAIT SILENTLY for validation to complete and return results
- Once results returned, THEN parse them in Step 2.5.3
### Step 2.5.3: Parse Validation Results from Session (Silent)
⚠️ DO NOT REPORT - Only parse for Phase 5
- Use Bash tool to read validation results:
```bash
source ${PLUGIN_DIR}/lib/feature-orchestrator.sh
SESSION_FILE="${FEATURE_SESSION_DIR}/${FEATURE_SESSION_ID}.json"
validation_status=$(jq -r '.validation.status' "$SESSION_FILE")
validation_type=$(jq -r '.validation.type' "$SESSION_FILE")
total_flows=$(jq -r '.validation.summary.total_flows' "$SESSION_FILE")
passed_flows=$(jq -r '.validation.summary.passed_flows' "$SESSION_FILE")
failed_flows=$(jq -r '.validation.summary.failed_flows' "$SESSION_FILE")
error_count=$(jq -r '.validation.error_count' "$SESSION_FILE")
```
- Store validation results in variables
- DO NOT display validation results
- DO NOT report status to user
- Results will be included in Phase 5 final report
- Silently proceed to next phase (Phase 3 if bugs, else Phase 5)
ELSE:
- Skip interactive error detection (--validate not specified)
- DO NOT report to user
- Silently proceed to next phase
═══════════════════════════════════════════════════════════════
🔧 PHASE 2.5.1: WEBAPP VALIDATOR FEATURES (Informational)
═══════════════════════════════════════════════════════════════
The standalone /speclabs:validate-feature command provides:
**Automatic Project Type Detection:**
- Webapp: React, Vite, Next.js, React Router apps
- Android: AndroidManifest.xml projects (validator planned for v2.7.1)
- REST API: OpenAPI/Swagger specs (validator planned for v2.7.2)
- Desktop GUI: Electron apps (validator planned for v2.7.3)
**Intelligent Flow Generation (Webapp v2.7.0):**
- AI-Powered: Analyzes spec.md, plan.md, tasks.md to generate context-aware flows
- Feature Type Detection: Identifies shopping_cart, social_feed, auth, forms, CRUD patterns
- User-Defined: Parses YAML frontmatter from spec.md for custom flows
- Smart Merging: Combines user + AI flows with deduplication
**Interactive Error Detection (Webapp v2.7.0):**
- Playwright Browser Automation with Chromium
- Real-time console/exception monitoring during interactions
- Terminal output monitoring for compilation errors
- Auto-fix retry loop (up to 3 attempts)
- Development server lifecycle management (auto start + guaranteed cleanup)
**Standardized Results:**
- JSON output matching validator interface
- Rich metadata: duration, retry attempts, flow counts
- Artifacts: screenshots, logs, detailed reports
- Automatic session integration
═══════════════════════════════════════════════════════════════
🔧 PHASE 3: BUGFIX (Conditional - If Tasks Failed)
═══════════════════════════════════════════════════════════════
IF ${failed} > 0:
### Step 3.1: Execute Bugfix
- Update session: feature_start_bugfix "${FEATURE_SESSION_ID}"
- Use the SlashCommand tool to execute: `/specswarm:bugfix`
- Wait for bugfix completion
- Review bugfix results
### Step 3.2: Re-Verify Failed Tasks
- Check if previously failed tasks are now fixed
- Update success/failure counts
- Update session: feature_complete_bugfix "${FEATURE_SESSION_ID}" "${fixed_count}"
═══════════════════════════════════════════════════════════════
🔍 PHASE 4: AUDIT (Conditional - If ${RUN_AUDIT}=true)
═══════════════════════════════════════════════════════════════
IF ${RUN_AUDIT} = true:
### Step 4.1: Initialize Audit
- Create audit directory: ${PROJECT_PATH}/.speclabs/audit/
- Update session: feature_start_audit "${FEATURE_SESSION_ID}"
- Prepare audit report file
### Step 4.2: Run Audit Checks
**Compatibility Audit**:
- Check for deprecated patterns
- Verify language version compatibility
- Check library compatibility
**Security Audit**:
- Scan for hardcoded secrets
- Check for SQL injection vulnerabilities
- Verify XSS prevention
- Look for dangerous functions (eval, exec, etc.)
**Best Practices Audit**:
- Check for TODO/FIXME comments
- Verify error handling
- Check for debug logging in production
- Verify code organization
### Step 4.3: Calculate Quality Score
- Count warnings and errors across all checks
- Calculate score: 100 - (warnings + errors*2)
- Minimum score: 0
### Step 4.4: Generate Audit Report
- Create comprehensive markdown report
- Include all findings with file locations and line numbers
- Add quality score
- Save to: ${PROJECT_PATH}/.speclabs/audit/audit-report-${DATE}.md
- Update session: feature_complete_audit "${FEATURE_SESSION_ID}" "${AUDIT_REPORT_PATH}" "${QUALITY_SCORE}"
═══════════════════════════════════════════════════════════════
📊 PHASE 5: COMPLETION REPORT
═══════════════════════════════════════════════════════════════
### Step 5.1: Generate Final Report
Create comprehensive completion report with:
**Planning Artifacts**:
- ✅ Specification: ${SPEC_FILE_PATH}
- ✅ Plan: ${PLAN_FILE_PATH}
- ✅ Tasks: ${TASKS_FILE_PATH}
**Implementation Results**:
- ✅ Total Tasks: ${total}
- ✅ Completed Successfully: ${completed}
- ❌ Failed: ${failed}
- ⚠️ Fixed in Bugfix: ${fixed} (if bugfix ran)
**Quality Assurance**:
- Bugfix Phase: ${RAN_BUGFIX ? "✅ Executed" : "⏭️ Skipped (no failures)"}
- Audit Phase: ${RUN_AUDIT ? "✅ Executed (Score: ${QUALITY_SCORE}/100)" : "⏭️ Skipped (--audit not specified)"}
- Audit Report: ${AUDIT_REPORT_PATH} (if audit ran)
**Session Information**:
- Session ID: ${FEATURE_SESSION_ID}
- Session File: .specswarm/feature-orchestrator/sessions/${FEATURE_SESSION_ID}.json
- Feature Branch: ${BRANCH_NAME}
**Next Steps**:
1. Review implementation changes: `git diff`
2. Test manually: Run application and verify feature works
3. Complete feature: Run `/specswarm:complete` to finalize with git workflow
### Step 5.2: Update Session Status
- Update session: feature_complete "${FEATURE_SESSION_ID}" "true" "Orchestration complete"
- Mark session as ready for completion
### Step 5.3: Return Report
Return the complete report to the main Claude instance.
═══════════════════════════════════════════════════════════════
⚠️ ERROR HANDLING
═══════════════════════════════════════════════════════════════
**If Any Phase Fails**:
1. Document the failure point clearly
2. Include full error messages in report
3. Recommend manual intervention steps
4. Update session status to "failed"
5. DO NOT continue to next phase
6. Return error report immediately
**Retry Logic**:
- Individual task failures: Continue to next task (bugfix will handle)
- Planning phase failures: Stop immediately (cannot proceed without plan)
- Bugfix failures: Note in report but continue to audit
- Audit failures: Note in report but continue to completion
═══════════════════════════════════════════════════════════════
✅ SUCCESS CRITERIA
═══════════════════════════════════════════════════════════════
Orchestration is successful when:
- ✅ All planning phases complete (or skipped if --skip flags)
- ✅ All tasks executed (track success/failure counts)
- ✅ Bugfix ran if needed
- ✅ Audit completed if --audit flag set
- ✅ Comprehensive final report generated
- ✅ Session tracking file created and updated
- ✅ User receives clear next steps
═══════════════════════════════════════════════════════════════
🚀 BEGIN ORCHESTRATION - EXECUTE NOW
═══════════════════════════════════════════════════════════════
⚠️ CRITICAL EXECUTION DIRECTIVE:
You MUST execute the Task tool with the above instructions IMMEDIATELY.
DO NOT:
- Explain what you're about to do
- Summarize the workflow
- Report status before launching
- Ask for confirmation
- Pause to think
DO:
- Launch the Task tool RIGHT NOW with subagent_type="general-purpose"
- Use the complete agent instructions above as the prompt
- Let the autonomous agent execute all phases end-to-end
- The agent will report back when complete
═══════════════════════════════════════════════════════════════
**EXECUTE THE TASK TOOL NOW**

View File

@@ -0,0 +1,413 @@
---
description: Run validation suite on target project (browser, terminal, visual analysis)
---
<!--
ATTRIBUTION:
Project Orchestrator Plugin
by Marty Bonacci & Claude Code (2025)
Based on learnings from Test 4A and Test Orchestrator Agent concept
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Run comprehensive validation on a target project using:
1. **Browser Automation** (Playwright) - Navigate app, capture errors
2. **Visual Analysis** (Claude Vision API) - Analyze screenshots for UI issues
3. **Terminal Monitoring** - Check dev server output for errors
**Usage**: `/speclabs:orchestrate-validate <project-path> [url]`
**Examples**:
```bash
# Validate project at specific path
/speclabs:orchestrate-validate /home/marty/code-projects/tweeter-spectest
# Validate with custom URL
/speclabs:orchestrate-validate /home/marty/code-projects/tweeter-spectest http://localhost:5173
```
---
## Pre-Validation Hook
```bash
echo "🎯 Project Orchestrator - Validation Suite"
echo ""
echo "Phase 0: Research & De-Risk"
echo "Testing: Browser automation + Visual analysis"
echo ""
# Record start time
VALIDATION_START_TIME=$(date +%s)
```
---
## Execution Steps
### Step 1: Parse Arguments
```bash
# Get arguments
ARGS="$ARGUMENTS"
# Parse project path (required)
PROJECT_PATH=$(echo "$ARGS" | awk '{print $1}')
# Parse URL (optional, default to http://localhost:5173)
URL=$(echo "$ARGS" | awk '{print $2}')
if [ -z "$URL" ]; then
URL="http://localhost:5173"
fi
# Validate project path
if [ -z "$PROJECT_PATH" ]; then
echo "❌ Error: Project path required"
echo ""
echo "Usage: /speclabs:orchestrate-validate <project-path> [url]"
echo ""
echo "Example:"
echo "/speclabs:orchestrate-validate /home/marty/code-projects/tweeter-spectest"
exit 1
fi
if [ ! -d "$PROJECT_PATH" ]; then
echo "❌ Error: Project path does not exist: $PROJECT_PATH"
exit 1
fi
echo "📁 Project: $PROJECT_PATH"
echo "🌐 URL: $URL"
echo ""
```
---
### Step 2: Check If Dev Server Is Running
```bash
echo "🔍 Checking if dev server is running..."
echo ""
# Try to connect to URL
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$URL" 2>/dev/null || echo "000")
if [ "$HTTP_STATUS" = "000" ]; then
echo "⚠️ Dev server not running at $URL"
echo ""
echo "Please start dev server first:"
echo " cd $PROJECT_PATH"
echo " npm run dev"
echo ""
exit 1
fi
echo "✅ Dev server responding (HTTP $HTTP_STATUS)"
echo ""
```
---
### Step 3: Browser Validation (Playwright)
**NOTE**: For Phase 0, we'll create a simple Node.js script to run Playwright validation.
First, check if Playwright is available in the project:
```bash
echo "📱 Running Browser Validation..."
echo ""
# Check if Playwright is installed in project
cd "$PROJECT_PATH"
if [ ! -d "node_modules/playwright" ]; then
echo "⚠️ Playwright not installed in project"
echo ""
echo "Installing Playwright..."
npm install --save-dev playwright
if [ $? -ne 0 ]; then
echo "❌ Failed to install Playwright"
exit 1
fi
echo "✅ Playwright installed"
echo ""
fi
```
Now create and run validation script:
```typescript
// Create temporary validation script
const validationScript = `
const { chromium } = require('playwright');
(async () => {
console.log('🚀 Launching browser...');
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
// Track console errors
const consoleErrors = [];
page.on('console', msg => {
if (msg.type() === 'error') {
consoleErrors.push(msg.text());
}
});
// Track network errors
const networkErrors = [];
page.on('response', response => {
if (response.status() >= 400) {
networkErrors.push({
url: response.url(),
status: response.status()
});
}
});
try {
// Navigate to app
console.log('🌐 Navigating to ${URL}...');
await page.goto('${URL}', { waitUntil: 'networkidle', timeout: 30000 });
// Wait for any dynamic content
await page.waitForTimeout(2000);
// Capture screenshot
console.log('📸 Capturing screenshot...');
await page.screenshot({
path: '/tmp/orchestrator-validation-screenshot.png',
fullPage: true
});
// Get page title
const title = await page.title();
console.log('');
console.log('✅ Browser Validation Complete');
console.log('');
console.log('Page Title:', title);
console.log('Console Errors:', consoleErrors.length);
console.log('Network Errors:', networkErrors.length);
console.log('');
if (consoleErrors.length > 0) {
console.log('🔴 Console Errors:');
consoleErrors.forEach((err, i) => {
console.log(\` \${i + 1}. \${err}\`);
});
console.log('');
}
if (networkErrors.length > 0) {
console.log('🔴 Network Errors:');
networkErrors.forEach((err, i) => {
console.log(\` \${i + 1}. \${err.status} - \${err.url}\`);
});
console.log('');
}
if (consoleErrors.length === 0 && networkErrors.length === 0) {
console.log('✅ No errors detected!');
console.log('');
}
// Export results as JSON
const results = {
success: true,
url: '${URL}',
title: title,
consoleErrors: consoleErrors,
networkErrors: networkErrors,
screenshotPath: '/tmp/orchestrator-validation-screenshot.png',
timestamp: new Date().toISOString()
};
require('fs').writeFileSync(
'/tmp/orchestrator-validation-results.json',
JSON.stringify(results, null, 2)
);
} catch (error) {
console.error('❌ Browser validation failed:', error.message);
const results = {
success: false,
error: error.message,
timestamp: new Date().toISOString()
};
require('fs').writeFileSync(
'/tmp/orchestrator-validation-results.json',
JSON.stringify(results, null, 2)
);
process.exit(1);
} finally {
await browser.close();
}
})();
`;
```
Write and execute the script:
```bash
# Write validation script
echo "$validationScript" > /tmp/orchestrator-validate.js
# Run validation
cd "$PROJECT_PATH"
node /tmp/orchestrator-validate.js
PLAYWRIGHT_EXIT_CODE=$?
# Check results
if [ $PLAYWRIGHT_EXIT_CODE -ne 0 ]; then
echo "❌ Browser validation failed"
exit 1
fi
```
---
### Step 4: Visual Analysis (Claude Vision API - Phase 0 Manual)
For Phase 0, we'll use the Read tool to view the screenshot, since we're already in Claude Code context:
```bash
echo "👁️ Visual Analysis..."
echo ""
echo "Screenshot saved to: /tmp/orchestrator-validation-screenshot.png"
echo ""
echo "To analyze the screenshot, use:"
echo "Read tool with: /tmp/orchestrator-validation-screenshot.png"
echo ""
```
**ACTION REQUIRED**: Use the Read tool to view `/tmp/orchestrator-validation-screenshot.png` and provide visual analysis:
- Is the layout correct?
- Are there any visual bugs (overlapping elements, missing content)?
- Is styling applied correctly?
- Any UX issues?
---
### Step 5: Generate Validation Report
```bash
echo "📊 Validation Report"
echo "===================="
echo ""
echo "Project: $PROJECT_PATH"
echo "URL: $URL"
echo ""
# Read results
if [ -f "/tmp/orchestrator-validation-results.json" ]; then
# Parse JSON results (simplified for Phase 0)
TITLE=$(cat /tmp/orchestrator-validation-results.json | grep '"title"' | sed 's/.*: "\(.*\)",/\1/')
CONSOLE_ERRORS=$(cat /tmp/orchestrator-validation-results.json | grep -c '"consoleErrors"')
NETWORK_ERRORS=$(cat /tmp/orchestrator-validation-results.json | grep -c '"networkErrors"')
echo "✅ Browser Validation: PASSED"
echo " Page Title: $TITLE"
echo " Console Errors: (check results JSON)"
echo " Network Errors: (check results JSON)"
echo ""
echo "📄 Full results: /tmp/orchestrator-validation-results.json"
echo "📸 Screenshot: /tmp/orchestrator-validation-screenshot.png"
echo ""
fi
```
---
## Post-Validation Hook
```bash
echo ""
echo "🎣 Post-Validation Hook"
echo ""
# Calculate duration
VALIDATION_END_TIME=$(date +%s)
VALIDATION_DURATION=$((VALIDATION_END_TIME - VALIDATION_START_TIME))
echo "⏱️ Validation Duration: ${VALIDATION_DURATION}s"
echo ""
# Cleanup temporary files (optional)
# rm -f /tmp/orchestrator-validate.js
echo "✅ Validation Complete"
echo ""
echo "📈 Next Steps:"
echo "1. Review screenshot: /tmp/orchestrator-validation-screenshot.png"
echo "2. Review full results: /tmp/orchestrator-validation-results.json"
echo "3. If validation passed, ready for orchestrate"
echo ""
```
---
## Error Handling
**If project path is invalid**:
- Display usage example
- Exit with error
**If dev server not running**:
- Display instructions to start dev server
- Exit gracefully
**If Playwright installation fails**:
- Display error message
- Exit with error
**If browser navigation fails**:
- Capture error details in results JSON
- Display error message
- Exit with error code
---
## Success Criteria
✅ Playwright browser automation works
✅ Can navigate to target app
✅ Console errors captured
✅ Network errors captured
✅ Screenshot captured successfully
✅ Results exported as JSON
✅ Validation report generated
---
## Phase 0 Notes
**Current Limitations**:
- Manual visual analysis (using Read tool)
- Basic error detection
- Single URL validation
- No retry logic
**Phase 1 Enhancements**:
- Automated Claude Vision API integration
- User flow validation (multi-step)
- Retry logic with refinement
- Comparison with previous screenshots
- Integration with test workflow orchestration

741
commands/orchestrate.md Normal file
View File

@@ -0,0 +1,741 @@
---
description: Run automated workflow orchestration with agent execution and validation
---
<!--
ATTRIBUTION:
Project Orchestrator Plugin
by Marty Bonacci & Claude Code (2025)
Based on learnings from Test 4A and Test Orchestrator Agent concept
PHASE 1b FULL AUTOMATION - 2025-10-16
This command now includes full autonomous orchestration with zero manual steps:
COMPONENTS (Phase 1a):
- State Manager: Session persistence and tracking
- Decision Maker: Intelligent complete/retry/escalate logic
- Prompt Refiner: Context-injected prompts on retry
- Metrics Tracker: Session analytics and continuous improvement
- Failure Analysis: 9 failure types categorized
AUTOMATION (Phase 1b):
- Automatic Agent Launch: Uses Task tool automatically
- Automatic Validation: Runs orchestrate-validate automatically
- True Retry Loop: Up to 3 automatic retries with refined prompts
- Automatic Decision Making: Complete/retry/escalate without user input
- Full End-to-End: Zero manual steps during orchestration
BENEFITS:
- 10x faster testing and iteration
- Real validation data (Playwright, console, network)
- Comprehensive metrics on every run
- Rapid refinement and improvement
All session state persisted to: .specswarm/orchestrator/sessions/
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute autonomous workflow orchestration:
1. **Parse Workflow** - Read workflow specification
2. **Generate Comprehensive Prompt** - Create detailed agent instructions
3. **Launch Agent** - Use Task tool to execute in target project
4. **Validate Results** - Run validation suite
5. **Report Outcome** - Summarize results and next steps
**Usage**: `/speclabs:orchestrate <workflow-file> <project-path>`
**Example**:
```bash
/speclabs:orchestrate features/001-fix-bug/workflow.md /home/marty/code-projects/tweeter-spectest
```
---
## Pre-Orchestration Hook
```bash
echo "🎯 Project Orchestrator - Fully Autonomous Execution"
echo ""
echo "Phase 1b: Full Automation (Zero Manual Steps)"
echo "Components: State Manager + Decision Maker + Prompt Refiner + Validation + Metrics"
echo "Automation: Agent Launch + Validation + Retry Loop"
echo ""
# Record start time
ORCHESTRATION_START_TIME=$(date +%s)
# Source Phase 1a/1b components
PLUGIN_DIR="/home/marty/code-projects/specswarm/plugins/speclabs"
source "${PLUGIN_DIR}/lib/state-manager.sh"
source "${PLUGIN_DIR}/lib/decision-maker.sh"
source "${PLUGIN_DIR}/lib/prompt-refiner.sh"
source "${PLUGIN_DIR}/lib/metrics-tracker.sh"
echo "✅ All components loaded"
echo "✅ Full automation enabled"
echo ""
```
---
## Execution Steps
### Step 1: Parse Arguments
```bash
# Get arguments
ARGS="$ARGUMENTS"
# Parse test workflow file (required)
TEST_WORKFLOW=$(echo "$ARGS" | awk '{print $1}')
# Parse project path (required)
PROJECT_PATH=$(echo "$ARGS" | awk '{print $2}')
# Validate arguments
if [ -z "$TEST_WORKFLOW" ] || [ -z "$PROJECT_PATH" ]; then
echo "❌ Error: Missing required arguments"
echo ""
echo "Usage: /speclabs:orchestrate <workflow-file> <project-path>"
echo ""
echo "Example:"
echo "/speclabs:orchestrate features/001-fix-bug/workflow.md /home/marty/code-projects/tweeter-spectest"
exit 1
fi
# Check files exist
if [ ! -f "$TEST_WORKFLOW" ]; then
echo "❌ Error: Test workflow file not found: $TEST_WORKFLOW"
exit 1
fi
if [ ! -d "$PROJECT_PATH" ]; then
echo "❌ Error: Project path does not exist: $PROJECT_PATH"
exit 1
fi
echo "📋 Test Workflow: $TEST_WORKFLOW"
echo "📁 Project: $PROJECT_PATH"
echo ""
```
---
### Step 2: Parse Test Workflow
Read the test workflow file and extract:
- Task description
- Files to modify
- Expected outcome
- Validation criteria
**Test Workflow Format** (Markdown):
```markdown
# Test: [Task Name]
## Description
[What needs to be done]
## Files to Modify
- path/to/file1.ts
- path/to/file2.ts
## Changes Required
[Detailed description of changes]
## Expected Outcome
[What should happen after changes]
## Validation
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Criterion 3
## Test URL
http://localhost:5173/[path]
```
```bash
echo "📖 Parsing Test Workflow..."
echo ""
# Read workflow file
WORKFLOW_CONTENT=$(cat "$TEST_WORKFLOW")
# Extract task name (first heading)
TASK_NAME=$(echo "$WORKFLOW_CONTENT" | grep "^# Test:" | head -1 | sed 's/^# Test: //')
if [ -z "$TASK_NAME" ]; then
echo "❌ Error: Invalid workflow format (missing '# Test:' heading)"
exit 1
fi
echo "✅ Task: $TASK_NAME"
echo ""
# Create orchestration session
echo "📝 Creating orchestration session..."
SESSION_ID=$(state_create_session "$TEST_WORKFLOW" "$PROJECT_PATH" "$TASK_NAME")
echo "✅ Session: $SESSION_ID"
echo ""
```
---
### Step 3: Generate Comprehensive Prompt
This is the CORE of Project Orchestrator - generating effective prompts for agents.
**Prompt Template**:
```markdown
# Task: [TASK_NAME]
## Context
You are working on project: [PROJECT_PATH]
This is an autonomous development task executed by Project Orchestrator (Phase 0).
## Your Mission
[TASK_DESCRIPTION from workflow]
## Files to Modify
[FILES_LIST from workflow]
## Detailed Requirements
[CHANGES_REQUIRED from workflow]
## Success Criteria
[VALIDATION_CRITERIA from workflow]
## Technical Guidelines
- Make ALL changes in [PROJECT_PATH] directory
- Follow existing code patterns and conventions
- Ensure all changes are complete and functional
- Run tests if applicable
- Report any blockers or issues
## Validation
After completing your work, the orchestrator will:
1. Run browser validation with Playwright
2. Check console for errors
3. Analyze UI with Claude Vision API
4. Verify success criteria
## Execution Instructions
1. Read the workflow file to understand requirements
2. Analyze existing code in target files
3. Make necessary changes
4. Verify changes work correctly
5. Report completion with summary
Work autonomously. Only escalate if you encounter blockers that prevent completion.
---
**Test Workflow File**: [WORKFLOW_FILE_PATH]
Please read this file first to understand the full requirements, then proceed with implementation.
```
Generate the actual prompt:
```bash
echo "✍️ Generating comprehensive prompt..."
echo ""
# Create prompt (simplified for Phase 0 - just reference the workflow file)
AGENT_PROMPT="# Task: ${TASK_NAME}
## Context
You are working on project: ${PROJECT_PATH}
This is an autonomous development task executed by Project Orchestrator (Phase 0 POC).
## Your Mission
Read and execute the test workflow specified in: ${TEST_WORKFLOW}
## Technical Guidelines
- Make ALL changes in ${PROJECT_PATH} directory
- Follow existing code patterns and conventions
- Ensure all changes are complete and functional
- Run tests if applicable
- Report any blockers or issues
## Execution Instructions
1. Read the workflow file: ${TEST_WORKFLOW}
2. Understand all requirements and validation criteria
3. Analyze existing code in target files
4. Make necessary changes
5. Verify changes work correctly
6. Report completion with summary
Work autonomously. Only escalate if you encounter blockers that prevent completion.
---
**IMPORTANT**: All file operations must be in the ${PROJECT_PATH} directory.
"
echo "✅ Prompt generated ($(echo "$AGENT_PROMPT" | wc -w) words)"
echo ""
```
---
### Step 4: Automated Orchestration with Intelligent Retry
**Phase 1b Full Automation**: Agent launch + Validation + Retry loop - all automatic!
```bash
echo "🔄 Starting Automated Orchestration (max 3 attempts)..."
echo ""
# Configuration
MAX_RETRIES=3
```
I will now execute the orchestration with automatic retry logic:
**For each attempt (up to 3):**
1. Check current retry count from state
2. Select prompt (original on first attempt, refined on retries)
3. Launch agent automatically using Task tool
4. Run validation automatically using orchestrate-validate
5. Parse validation results and update state
6. Make decision (complete/retry/escalate)
7. If retry needed: Resume state and loop back to step 1
8. If complete or escalate: Exit loop and proceed to report
**Automatic Loop Implementation:**
Let me execute the retry loop automatically...
```bash
# This will be executed by Claude Code in the loop
echo "Orchestration loop will execute automatically..."
echo ""
```
#### Orchestration Loop Execution
I'll now begin the automatic orchestration loop. For each attempt:
**Attempt Execution:**
1. **Check State & Select Prompt**
```bash
# Get current retry count
RETRY_COUNT=$(state_get "$SESSION_ID" "retries.count")
ATTEMPT_NUM=$((RETRY_COUNT + 1))
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📍 Attempt $ATTEMPT_NUM of $MAX_RETRIES"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [ "$RETRY_COUNT" -eq 0 ]; then
# First attempt - use original prompt
CURRENT_PROMPT="$AGENT_PROMPT"
echo "📝 Using original prompt ($(echo "$CURRENT_PROMPT" | wc -w) words)"
else
# Retry attempt - use refined prompt with failure context
echo "🔧 Generating refined prompt with failure analysis..."
CURRENT_PROMPT=$(prompt_refine "$SESSION_ID" "$AGENT_PROMPT")
prompt_save "$SESSION_ID" "$CURRENT_PROMPT"
echo "✅ Refined prompt generated ($(echo "$CURRENT_PROMPT" | wc -w) words)"
# Show what changed
prompt_diff "$SESSION_ID" "$AGENT_PROMPT" "$CURRENT_PROMPT" | head -20
fi
echo ""
# Update state for this attempt
state_update "$SESSION_ID" "agent.status" '"running"'
state_update "$SESSION_ID" "agent.started_at" "\"$(date -Iseconds)\""
# Save prompt for this attempt
PROMPT_FILE="/tmp/orchestrate-prompt-${SESSION_ID}-attempt-${ATTEMPT_NUM}.md"
echo "$CURRENT_PROMPT" > "$PROMPT_FILE"
echo "🚀 Launching agent for ${PROJECT_PATH}..."
echo ""
```
2. **Launch Agent** - I'll use the Task tool to launch a general-purpose agent with the current prompt:
```bash
# Agent will be launched by Claude Code using Task tool
echo "Agent launch: Task tool with prompt from $PROMPT_FILE"
echo "Working directory: $PROJECT_PATH"
echo ""
```
3. **Agent Execution** - Wait for agent to complete the task...
4. **Update Agent Status**
```bash
echo "✅ Agent completed execution"
echo ""
# Update state
state_update "$SESSION_ID" "agent.status" '"completed"'
state_update "$SESSION_ID" "agent.completed_at" "\"$(date -Iseconds)\""
```
5. **Run Validation** - I'll execute the validation suite automatically:
```bash
echo "🔍 Running Automated Validation Suite..."
echo ""
# Update validation status
state_update "$SESSION_ID" "validation.status" '"running"'
```
Execute validation: `/speclabs:orchestrate-validate ${PROJECT_PATH}`
6. **Parse Validation Results**
```bash
# Parse validation output and update state
# (Validation results will be captured from orchestrate-validate output)
echo ""
echo "📊 Validation Results:"
echo "- Playwright: [from validation output]"
echo "- Console Errors: [from validation output]"
echo "- Network Errors: [from validation output]"
echo "- Vision API: [from validation output]"
echo ""
```
7. **Make Decision**
```bash
echo "🧠 Decision Maker Analysis..."
echo ""
# Make decision based on state
DECISION=$(decision_make "$SESSION_ID")
RETRY_COUNT=$(state_get "$SESSION_ID" "retries.count")
echo "Decision: $DECISION (after attempt $ATTEMPT_NUM)"
echo ""
```
8. **Process Decision**
```bash
case "$DECISION" in
complete)
echo "✅ COMPLETE - Task successful!"
# Record decision
decision_record "$SESSION_ID" "complete" "Agent completed successfully and validation passed"
# Mark session complete
state_complete "$SESSION_ID" "success"
# Track metrics
metrics_track_completion "$SESSION_ID"
echo ""
echo "🎉 Orchestration Complete (success on attempt $ATTEMPT_NUM)"
# Exit loop
SHOULD_EXIT_LOOP=true
;;
retry)
echo "🔄 RETRY - Will attempt again with refined prompt"
# Get detailed decision with reasoning
DETAILED_DECISION=$(decision_make_detailed "$SESSION_ID")
REASON=$(echo "$DETAILED_DECISION" | jq -r '.reason')
echo "Reason: $REASON"
echo ""
# Analyze failure
FAILURE_ANALYSIS=$(decision_analyze_failure "$SESSION_ID")
FAILURE_TYPE=$(echo "$FAILURE_ANALYSIS" | jq -r '.failure_type')
echo "Failure Type: $FAILURE_TYPE"
# Generate retry strategy
RETRY_STRATEGY=$(decision_generate_retry_strategy "$SESSION_ID")
BASE_STRATEGY=$(echo "$RETRY_STRATEGY" | jq -r '.base_strategy')
echo "Retry Strategy: $BASE_STRATEGY"
echo ""
# Record decision
decision_record "$SESSION_ID" "retry" "$REASON"
# Resume session for retry
state_resume "$SESSION_ID"
# Track retry
metrics_track_retry "$SESSION_ID" "$FAILURE_TYPE"
# Check if we should continue
NEW_RETRY_COUNT=$(state_get "$SESSION_ID" "retries.count")
if [ "$NEW_RETRY_COUNT" -ge "$MAX_RETRIES" ]; then
echo "⚠️ Maximum retries reached. Escalating..."
SHOULD_EXIT_LOOP=true
else
echo "↻ Continuing to next attempt..."
echo ""
# Loop will continue automatically
SHOULD_EXIT_LOOP=false
fi
;;
escalate)
echo "⚠️ ESCALATE - Human intervention required"
# Get escalation message
ESCALATION_MSG=$(decision_get_escalation_message "$SESSION_ID")
echo ""
echo "$ESCALATION_MSG"
echo ""
# Record decision
decision_record "$SESSION_ID" "escalate" "Max retries exceeded or unrecoverable error"
# Mark session escalated
state_complete "$SESSION_ID" "escalated"
# Track escalation
metrics_track_escalation "$SESSION_ID"
echo "🎯 Escalation Actions Required:"
echo "1. Review session state: state_print_summary $SESSION_ID"
echo "2. Examine failure history"
echo "3. Manually fix issues or adjust workflow"
echo "4. Re-run orchestration if needed"
echo ""
# Exit loop
SHOULD_EXIT_LOOP=true
;;
esac
echo ""
```
**Loop Control:** After each attempt, I'll check if we should continue:
- If decision is "complete" or "escalate" → Exit loop, proceed to report
- If decision is "retry" and retries < max → Continue to next attempt
- If decision is "retry" but retries >= max → Escalate and exit
I'll now execute this loop automatically, making up to 3 attempts with intelligent retry logic.
---
### Step 5: Generate Orchestration Report
```bash
echo "📊 Orchestration Report"
echo "======================="
echo ""
# Print session summary using State Manager
state_print_summary "$SESSION_ID"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Get final state
FINAL_STATUS=$(state_get "$SESSION_ID" "status")
RETRY_COUNT=$(state_get "$SESSION_ID" "retries.count")
FINAL_DECISION=$(state_get "$SESSION_ID" "decision.action")
echo "Final Status: $FINAL_STATUS"
echo "Decision: $FINAL_DECISION"
echo "Retry Count: $RETRY_COUNT"
echo ""
# Calculate duration
ORCHESTRATION_END_TIME=$(date +%s)
ORCHESTRATION_DURATION=$((ORCHESTRATION_END_TIME - ORCHESTRATION_START_TIME))
ORCHESTRATION_MINUTES=$((ORCHESTRATION_DURATION / 60))
ORCHESTRATION_SECONDS=$((ORCHESTRATION_DURATION % 60))
echo "⏱️ Total Duration: ${ORCHESTRATION_MINUTES}m ${ORCHESTRATION_SECONDS}s"
# Update metrics in state
state_update "$SESSION_ID" "metrics.total_time_seconds" "$ORCHESTRATION_DURATION"
echo ""
echo "📁 Session Directory: $(state_get_session_dir $SESSION_ID)"
echo ""
```
---
## Post-Orchestration Hook
```bash
echo "🎣 Post-Orchestration Hook"
echo ""
echo "✅ Orchestration Complete"
echo ""
# Show next steps based on final decision
FINAL_DECISION=$(state_get "$SESSION_ID" "decision.action")
case "$FINAL_DECISION" in
complete)
echo "📈 Next Steps (Success):"
echo "1. Review agent's changes in: ${PROJECT_PATH}"
echo "2. Test manually in browser"
echo "3. Commit changes if satisfied"
echo "4. Review metrics: metrics_get_summary"
;;
retry)
echo "📈 Next Steps (Retry Needed):"
echo "1. Review failure analysis in session state"
echo "2. Optionally adjust workflow or requirements"
echo "3. Re-run orchestration to retry automatically"
echo "4. Or manually fix and test"
;;
escalate)
echo "📈 Next Steps (Escalated):"
echo "1. Review escalation message above"
echo "2. Examine session state: state_print_summary $SESSION_ID"
echo "3. Manually investigate and fix issues"
echo "4. Update workflow if needed"
echo "5. Re-run orchestration after fixes"
;;
*)
echo "📈 Next Steps:"
echo "1. Review session state: state_print_summary $SESSION_ID"
echo "2. Check agent output in: ${PROJECT_PATH}"
echo "3. Review metrics: metrics_get_summary"
;;
esac
echo ""
echo "📊 Phase 1a Metrics:"
echo "- Session ID: $SESSION_ID"
echo "- Session Dir: $(state_get_session_dir $SESSION_ID)"
echo "- View all sessions: state_list_sessions"
echo "- View metrics: metrics_get_summary"
echo ""
```
---
## Error Handling
**If workflow file is invalid**:
- Display error message with format requirements
- Exit with error
**If agent fails to complete**:
- Capture agent's error/blocker message
- Display summary
- Suggest manual intervention
**If validation fails**:
- Display validation errors
- Suggest fixes or retry
---
## Success Criteria
**Phase 1a Implementation**:
✅ Test workflow parsed successfully
✅ Orchestration session created and tracked
✅ Phase 1a components loaded (State Manager, Decision Maker, Prompt Refiner, Metrics)
✅ Comprehensive prompt generated
✅ Agent launched with appropriate prompt (original or refined)
✅ Agent status tracked in state
✅ Validation executed (manual for now, automated in Phase 1b)
✅ Decision made (complete/retry/escalate)
✅ Retry logic with refined prompt (up to 3 attempts)
✅ Failure analysis performed
✅ Escalation handling when needed
✅ Metrics tracked and reported
✅ Orchestration report generated with Phase 1a data
✅ Session state persisted to .specswarm/orchestrator/
---
## Learning Objectives
**Phase 1a Questions**:
1. Does intelligent retry logic improve success rate?
2. How effective is failure analysis categorization?
3. Do refined prompts reduce repeated failures?
4. What failure types are most common?
5. How many retries before escalation is typical?
6. Is decision maker accurate (correct complete/retry/escalate)?
7. Do agents improve on retry attempts?
8. What prompt refinements are most effective?
**Phase 1a Metrics Tracked**:
- Session status (success/failure/escalated)
- Retry count per session
- Failure type distribution
- Time per attempt (agent + validation)
- Total orchestration time
- Success rate by attempt number
- Escalation rate
- Decision accuracy
- Prompt refinement effectiveness
---
## Phase 1b Status: IMPLEMENTED ✅
**Implemented Features** (Phase 1b - Full Automation):
-**State Manager** - Session persistence and tracking
-**Decision Maker** - Intelligent complete/retry/escalate logic
-**Prompt Refiner** - Context-injected prompts on retry
-**Automatic Agent Launch** - No manual Task tool usage required
-**Automatic Validation** - Orchestrate-validate runs automatically
-**True Retry Loop** - Automatic retry with refined prompts (up to 3 attempts)
-**Failure Analysis** - 9 failure types categorized
-**Escalation Handling** - Automatic human escalation when needed
-**Metrics Tracking** - Session analytics and metrics
-**State Persistence** - All state saved to .specswarm/orchestrator/
-**Full Automation** - No manual steps during orchestration
**Key Phase 1b Improvements**:
- 🚀 **10x Faster Testing** - Automated execution vs manual steps
- 🔄 **True Retry Loop** - Automatic continuation without user intervention
- 📊 **Real Validation Data** - Actual Playwright/console/network results
-**Rapid Iteration** - Test cases run in 2-5 minutes vs 15-30 minutes
**Phase 1c Enhancements** (Planned):
- Real Vision API integration (vs mock)
- Multiple workflow parallel execution
- Advanced metrics dashboards
- Cross-session learning
**Phase 2 Enhancements** (Future):
- Multi-agent coordination
- Dynamic prompt optimization with ML
- Self-healing workflows
- Predictive failure prevention
- Autonomous workflow generation

455
commands/plan.md Normal file
View File

@@ -0,0 +1,455 @@
---
description: Execute the implementation planning workflow using the plan template to generate design artifacts.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
1. **Discover Feature Context**:
a. **Find Repository Root and Initialize Features Directory**:
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory (handles migration if needed)
get_features_dir "$REPO_ROOT"
```
b. **Get Current Feature**:
```bash
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
FEATURE_NUM=$(echo "$BRANCH" | grep -oE '^[0-9]{3}')
# Fallback for non-git
if [ -z "$FEATURE_NUM" ]; then
FEATURE_NUM=$(list_features "$REPO_ROOT" | grep -oE '^[0-9]{3}' | sort -nr | head -1)
fi
```
c. **Locate Feature Directory**:
```bash
find_feature_dir "$FEATURE_NUM" "$REPO_ROOT"
# FEATURE_DIR is now set by find_feature_dir
```
d. **Set Path Variables**:
```bash
FEATURE_SPEC="${FEATURE_DIR}/spec.md"
IMPL_PLAN="${FEATURE_DIR}/plan.md"
RESEARCH_FILE="${FEATURE_DIR}/research.md"
DATA_MODEL_FILE="${FEATURE_DIR}/data-model.md"
CONTRACTS_DIR="${FEATURE_DIR}/contracts"
```
e. **Validate Prerequisites**:
- Check that `spec.md` exists
- If missing: ERROR "No specification found. Run `/specify` first."
2. **Load context**:
- Read FEATURE_SPEC (spec.md)
- Read `.specswarm/constitution.md` if it exists
- Check for `.specswarm/tech-stack.md`
- Load plan template from `templates/plan-template.md` or use embedded template
<!-- ========== TECH STACK MANAGEMENT (SpecSwarm Enhancement) ========== -->
<!-- Added by Marty Bonacci & Claude Code (2025) -->
2a. **Tech Stack File Initialization** (first-time setup):
**Check if tech stack file exists**:
```bash
if [ ! -f "${REPO_ROOT}.specswarm/tech-stack.md" ]; then
FIRST_FEATURE=true
else
FIRST_FEATURE=false
fi
```
**If FIRST_FEATURE=true** (no tech-stack.md exists):
1. **Detect project technologies** (scan existing files):
```bash
# Check for package managers and extract dependencies
if [ -f "${REPO_ROOT}/package.json" ]; then
# Node.js/TypeScript project
LANGUAGE=$(grep -q "typescript" "${REPO_ROOT}/package.json" && echo "TypeScript" || echo "JavaScript")
RUNTIME="Node.js"
# Extract frameworks and libraries from dependencies
elif [ -f "${REPO_ROOT}/composer.json" ]; then
# PHP project
LANGUAGE="PHP"
elif [ -f "${REPO_ROOT}/requirements.txt" ] || [ -f "${REPO_ROOT}/pyproject.toml" ]; then
# Python project
LANGUAGE="Python"
elif [ -f "${REPO_ROOT}/go.mod" ]; then
# Go project
LANGUAGE="Go"
elif [ -f "${REPO_ROOT}/Gemfile" ]; then
# Ruby project
LANGUAGE="Ruby"
fi
```
2. **Generate tech-stack.md** using template:
- Use `/templates/tech-stack-template.md` if exists
- Otherwise use embedded template with detected technologies
- Populate Core Technologies section from detection
- Populate Standard Libraries from package files
- Leave Prohibited Technologies section with TODO marker and common examples
3. **Present to user for confirmation**:
```
🎯 TECH STACK FILE CREATED
This is your FIRST feature using SpecSwarm. I've created `.specswarm/tech-stack.md`
based on your project files and plan.md Technical Context.
**Detected Stack:**
- Language: {detected_language}
- Framework: {detected_framework}
- Database: {detected_database}
- Key Libraries: {detected_libraries}
**Action Required:**
1. Review `.specswarm/tech-stack.md`
2. Add any PROHIBITED technologies (important for drift prevention!)
3. Confirm accuracy of detected stack
⚠️ This file will be used to validate ALL future features.
**Options:**
- Type "continue" to accept and proceed with planning
- Type "edit" to pause while you refine tech-stack.md
- Provide corrections: "Language should be JavaScript, not TypeScript"
```
4. **Wait for user response**:
- If "continue": Proceed to section 2b (Tech Stack Validation)
- If "edit": PAUSE with message "Run `/specswarm:plan` again when ready"
- If corrections provided: Update tech-stack.md, show updated version, ask for confirmation again
5. **Add reminder to constitution** (if constitution exists):
- Append note to constitution.md suggesting Principle 5 formalization
- Message: "💡 Consider running `/specswarm:constitution` to formalize tech stack enforcement as Principle 5"
**If FIRST_FEATURE=false** (tech-stack.md already exists):
- Skip initialization entirely
- Proceed directly to section 2b (Tech Stack Validation)
**If auto-detection fails** (no package files found):
- Prompt user for manual input:
```
🎯 TECH STACK FILE NEEDED
Cannot auto-detect technologies. Please provide:
1. Programming language and version (e.g., "TypeScript 5.x")
2. Main framework (e.g., "React Router v7")
3. Database (e.g., "PostgreSQL 17")
4. 3-5 key libraries
Example: "TypeScript 5, React Router v7, PostgreSQL 17, Drizzle ORM, Zod"
```
- Wait for response, generate tech-stack.md from input
2b. **Tech Stack Validation** (runs for all features after first):
**If tech-stack.md does NOT exist**:
- Skip validation (handled by section 2a above)
**If tech-stack.md exists**:
1. **Extract technologies from plan.md Technical Context**:
- Parse all mentioned libraries, frameworks, tools from Technical Context section
- Create list: NEW_TECHNOLOGIES[] (technologies mentioned in current plan)
- Read and parse: APPROVED_STACK[] (from tech-stack.md approved sections)
- Read and parse: PROHIBITED_STACK[] (from tech-stack.md prohibited section)
2. **Classify each NEW technology**:
```bash
for TECH in "${NEW_TECHNOLOGIES[@]}"; do
# Check 1: Is it PROHIBITED?
if grep -qi "❌.*${TECH}" "${REPO_ROOT}.specswarm/tech-stack.md"; then
TECH_STATUS[$TECH]="PROHIBITED"
CONFLICTS_WITH[$TECH]=$(grep "❌.*${TECH}" "${REPO_ROOT}.specswarm/tech-stack.md" | sed 's/.*use \(.*\) instead.*/\1/')
continue
fi
# Check 2: Is it already APPROVED?
if grep -qi "${TECH}" "${REPO_ROOT}.specswarm/tech-stack.md" | grep -v "❌"; then
TECH_STATUS[$TECH]="APPROVED"
continue
fi
# Check 3: Does it CONFLICT with existing tech?
# Extract PURPOSE tag from tech-stack.md for conflict detection
TECH_PURPOSE=$(get_library_purpose "${TECH}")
if [ -n "$TECH_PURPOSE" ]; then
EXISTING_WITH_PURPOSE=$(grep -i "PURPOSE:${TECH_PURPOSE}" "${REPO_ROOT}.specswarm/tech-stack.md" | grep -v "❌" | head -1)
if [ -n "$EXISTING_WITH_PURPOSE" ]; then
TECH_STATUS[$TECH]="CONFLICT"
CONFLICTS_WITH[$TECH]="${EXISTING_WITH_PURPOSE}"
continue
fi
fi
# Check 4: No conflict = AUTO_ADD candidate
TECH_STATUS[$TECH]="AUTO_ADD"
done
```
3. **Generate Tech Stack Compliance Report** in plan.md:
Create a new section in the plan.md file:
```markdown
## Tech Stack Compliance Report
<!-- Auto-generated by SpecSwarm tech stack validation -->
### ✅ Approved Technologies (already in stack)
{list of technologies with APPROVED status}
### New Technologies (auto-added)
{list of technologies with AUTO_ADD status}
For each:
- **{Technology Name}**
- Purpose: {detected_purpose}
- No conflicts detected
- Added to: {section_name}
- Version updated: {old_version} → {new_version}
### ⚠️ Conflicting Technologies (require approval)
{list of technologies with CONFLICT status}
For each:
- **{Technology Name}**
- Purpose: {detected_purpose}
- ❌ CONFLICT: Project uses `{existing_tech}` ({purpose})
- **Action Required**: Choose one:
| Option | Choice | Implications |
|--------|--------|--------------|
| A | Use {existing_tech} (keep existing) | Remove {new_tech} from plan, update Technical Context |
| B | Replace {existing_tech} with {new_tech} | Update tech-stack.md (MAJOR version), refactor existing code |
| C | Use both (justify overlap) | Document why both needed in research.md, add note to tech-stack.md |
**Your choice**: _[Wait for user response]_
### ❌ Prohibited Technologies (cannot use)
{list of technologies with PROHIBITED status}
For each:
- **{Technology Name}**
- ❌ PROHIBITED in tech-stack.md
- Reason: "{reason from tech-stack.md}"
- **Must use**: {approved_alternative}
- **Cannot proceed** until plan.md updated
```
4. **Handle Each Status**:
**APPROVED** → Continue silently (no action needed)
**AUTO_ADD** →
```bash
# For each AUTO_ADD technology:
1. Determine appropriate section (Data Layer, UI Layer, Utilities, etc.)
2. Add entry to tech-stack.md:
- {Technology} v{version} ({purpose}) <!-- Auto-added: Feature {FEATURE_NUM}, {DATE} -->
3. Bump tech-stack.md MINOR version:
OLD_VERSION=$(grep "^\*\*Version\*\*:" "${REPO_ROOT}.specswarm/tech-stack.md" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
MAJOR=$(echo $OLD_VERSION | cut -d. -f1)
MINOR=$(echo $OLD_VERSION | cut -d. -f2)
PATCH=$(echo $OLD_VERSION | cut -d. -f3)
NEW_MINOR=$((MINOR + 1))
NEW_VERSION="${MAJOR}.${NEW_MINOR}.0"
sed -i "s/\*\*Version\*\*: ${OLD_VERSION}/\*\*Version\*\*: ${NEW_VERSION}/" "${REPO_ROOT}.specswarm/tech-stack.md"
4. Update version history section
5. Notify user in compliance report
6. Continue with plan generation
```
**CONFLICT** →
```bash
1. STOP planning process
2. Show conflict details with options table (see report format above)
3. WAIT for user response (A, B, or C)
4. Based on choice:
Option A (keep existing):
- Remove conflicting tech from plan.md Technical Context
- Continue with plan generation
Option B (replace):
- Remove existing tech from tech-stack.md
- Add new tech to tech-stack.md
- Bump MAJOR version (breaking change)
- Add to research.md: justification for replacement
- Continue with plan generation
Option C (use both):
- Require research.md justification section
- Add new tech to tech-stack.md with overlap note
- Bump MINOR version
- Continue with plan generation
5. Document decision in plan.md under "Tech Stack Compliance"
```
**PROHIBITED** →
```bash
1. ERROR: Cannot proceed with planning
2. Show prohibited tech details and approved alternative
3. Show amendment process:
```
To use prohibited technology:
1. Document compelling business justification in research.md
2. Update .specswarm/constitution.md (requires constitutional amendment)
3. Remove from Prohibited section in tech-stack.md
4. Add to Approved section with justification comment
5. Bump tech-stack.md MAJOR version (breaking constitutional change)
6. Re-run /specswarm:plan
```
4. HALT planning until issue resolved
```
5. **Update tech-stack.md file** (for AUTO_ADD technologies):
- Automatically write changes to tech-stack.md
- Update version and version history
- Add auto-generated comment with feature number and date
<!-- ========== END TECH STACK MANAGEMENT ========== -->
3. **Execute plan workflow**: Follow the structure in IMPL_PLAN template to:
- Fill Technical Context (mark unknowns as "NEEDS CLARIFICATION")
- Fill Constitution Check section from constitution
- Evaluate gates (ERROR if violations unjustified)
- Phase 0: Generate research.md (resolve all NEEDS CLARIFICATION)
- Phase 1: Generate data-model.md, contracts/, quickstart.md
- Phase 1: Update agent context by running the agent script
- Re-evaluate Constitution Check post-design
4. **Stop and report**: Command ends after Phase 2 planning. Report branch, IMPL_PLAN path, and generated artifacts.
## Phases
### Phase 0: Outline & Research
1. **Extract unknowns from Technical Context** above:
- For each NEEDS CLARIFICATION → research task
- For each dependency → best practices task
- For each integration → patterns task
2. **Generate and dispatch research agents**:
```
For each unknown in Technical Context:
Task: "Research {unknown} for {feature context}"
For each technology choice:
Task: "Find best practices for {tech} in {domain}"
```
3. **Consolidate findings** in `research.md` using format:
- Decision: [what was chosen]
- Rationale: [why chosen]
- Alternatives considered: [what else evaluated]
**Output**: research.md with all NEEDS CLARIFICATION resolved
### Phase 1: Design & Contracts
**Prerequisites:** `research.md` complete
1. **Extract entities from feature spec** → `data-model.md`:
- Entity name, fields, relationships
- Validation rules from requirements
- State transitions if applicable
2. **Generate API contracts** from functional requirements:
- For each user action → endpoint
- Use standard REST/GraphQL patterns
- Output OpenAPI/GraphQL schema to `/contracts/`
3. **Agent context update** (optional):
a. **Detect Agent Type**:
```bash
# Check which agent context files exist
if [ -d "${REPO_ROOT}/.claude" ]; then
AGENT="claude"
CONTEXT_FILE=".claude/context.md"
elif [ -f "${REPO_ROOT}/.cursorrules" ]; then
AGENT="cursor"
CONTEXT_FILE=".cursorrules"
elif [ -f "${REPO_ROOT}/.github/copilot-instructions.md" ]; then
AGENT="copilot"
CONTEXT_FILE=".github/copilot-instructions.md"
else
# No agent context file found - skip this step
AGENT="none"
fi
```
b. **Extract Tech Stack from plan.md**:
- Language (e.g., Python, TypeScript, Go)
- Framework (e.g., React, FastAPI, Express)
- Database (e.g., PostgreSQL, MongoDB)
- Key libraries and tools
c. **Update Agent Context File** (Enhanced by SpecSwarm):
<!-- Tech stack enforcement added by Marty Bonacci & Claude Code (2025) -->
- Read existing CONTEXT_FILE (if exists)
- **Read `.specswarm/tech-stack.md` if exists** (SpecSwarm enhancement)
- Look for markers like `<!-- AUTO-GENERATED-START -->` and `<!-- AUTO-GENERATED-END -->`
- Replace content between markers with enhanced format:
- If no markers exist, append new section
- Preserve all manual edits outside markers
- **Enhanced format** (includes CRITICAL CONSTRAINTS from tech-stack.md):
```markdown
<!-- AUTO-GENERATED-START -->
## Tech Stack (from plan.md)
- **Language**: {language}
- **Framework**: {framework}
- **Database**: {database}
- **Key Libraries**: {libraries}
## CRITICAL CONSTRAINTS (from tech-stack.md)
⚠️ **BEFORE suggesting ANY library, framework, or pattern:**
1. Read `.specswarm/tech-stack.md`
2. Verify your suggestion is APPROVED
3. If PROHIBITED, suggest approved alternative
4. If UNAPPROVED, warn user and require justification
**Prohibited Technologies** (NEVER suggest these):
{list of ❌ technologies from tech-stack.md with approved alternatives}
Example format:
- ❌ Axios → Use: fetch API
- ❌ Class components → Use: Functional components
- ❌ Redux → Use: React Router loaders/actions
**Violation = Constitution violation** (see `.specswarm/constitution.md` Principle 5)
**Auto-Addition:** Non-conflicting new libraries will be auto-added during `/specswarm:plan`
<!-- AUTO-GENERATED-END -->
```
**Output**: data-model.md, /contracts/*, quickstart.md, (optional) agent context file
## Key rules
- Use absolute paths
- ERROR on gate failures or unresolved clarifications

427
commands/refactor.md Normal file
View File

@@ -0,0 +1,427 @@
---
description: Metrics-driven code quality improvement with behavior preservation
---
<!--
ATTRIBUTION CHAIN:
1. Original methodology: spec-kit-extensions by Marty Bonacci (2025)
2. Adapted: SpecLab plugin by Marty Bonacci & Claude Code (2025)
3. Based on: GitHub spec-kit | MIT License
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute metrics-driven refactoring workflow to improve code quality while preserving behavior.
**Key Principles**:
1. **Metrics First**: Establish baseline before refactoring
2. **Behavior Preservation**: No functional changes
3. **Testable**: Verify identical behavior before/after
4. **Measurable Improvement**: Quantify quality gains
5. **Incremental**: Small, safe refactoring steps
**Refactoring Types**: Extract function/module, reduce complexity, eliminate duplication, improve naming, optimize performance
**Coverage**: Addresses ~10% of development work (quality improvement)
---
## Smart Integration
```bash
SPECSWARM_INSTALLED=$(claude plugin list | grep -q "specswarm" && echo "true" || echo "false")
SPECTEST_INSTALLED=$(claude plugin list | grep -q "spectest" && echo "true" || echo "false")
if [ "$SPECTEST_INSTALLED" = "true" ]; then
EXECUTION_MODE="parallel"
ENABLE_HOOKS=true
ENABLE_METRICS=true
echo "🎯 SpecTest detected (parallel execution, hooks, metrics enabled)"
elif [ "$SPECSWARM_INSTALLED" = "true" ]; then
ENABLE_TECH_VALIDATION=true
echo "🎯 SpecSwarm detected (tech stack enforcement enabled)"
fi
```
---
## Execution Steps
### 1. Discover Refactor Context
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
REFACTOR_NUM=$(echo "$CURRENT_BRANCH" | grep -oE 'refactor/([0-9]{3})' | grep -oE '[0-9]{3}')
if [ -z "$REFACTOR_NUM" ]; then
echo "♻️ Refactor Workflow"
echo "Provide refactor number:"
read -p "Refactor number: " REFACTOR_NUM
REFACTOR_NUM=$(printf "%03d" $REFACTOR_NUM)
fi
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
ensure_features_dir "$REPO_ROOT"
FEATURE_DIR="${FEATURES_DIR}/${REFACTOR_NUM}-refactor"
mkdir -p "$FEATURE_DIR"
REFACTOR_SPEC="${FEATURE_DIR}/refactor.md"
BASELINE_METRICS="${FEATURE_DIR}/baseline-metrics.md"
TASKS_FILE="${FEATURE_DIR}/tasks.md"
```
---
### 2. Establish Baseline Metrics
Analyze target code and establish baseline:
```markdown
# Baseline Metrics: Refactor ${REFACTOR_NUM}
**Target**: [File/module/function to refactor]
**Analysis Date**: YYYY-MM-DD
---
## Code Metrics
### Complexity Metrics
- **Cyclomatic Complexity**: [N] (target: <10)
- **Cognitive Complexity**: [N] (target: <15)
- **Nesting Depth**: [N] (target: <4)
- **Function Length**: [N lines] (target: <50)
### Quality Metrics
- **Code Duplication**: [N%] (target: <3%)
- **Test Coverage**: [N%] (target: >80%)
- **Maintainability Index**: [N/100] (target: >65)
### Performance Metrics (if applicable)
- **Execution Time**: [duration]
- **Memory Usage**: [MB]
- **Database Queries**: [N]
---
## Identified Issues
| Issue | Severity | Metric | Current | Target |
|-------|----------|--------|---------|--------|
| [Issue 1] | High | [Metric] | [Value] | [Value] |
| [Issue 2] | Medium | [Metric] | [Value] | [Value] |
---
## Refactoring Opportunities
### Opportunity 1: [Type - e.g., Extract Function]
**Location**: [file:line]
**Issue**: [What's wrong]
**Approach**: [How to refactor]
**Expected Improvement**: [Metric improvement]
[Repeat for each opportunity]
---
## Behavior Preservation Tests
**Existing Tests**: [N tests]
**Coverage**: [N%]
**Additional Tests Needed**: [Y/N - list if yes]
**Test Strategy**:
- Run full test suite before refactoring
- Verify 100% pass rate
- Run same tests after each refactor step
- Verify identical results
---
## Success Criteria
**Metrics Improvement Targets**:
- Complexity: [current] → [target]
- Duplication: [current] → [target]
- Test Coverage: [current] → [target]
- Maintainability: [current] → [target]
**Non-Negotiables**:
- ✅ All tests pass (before and after)
- ✅ No functional changes
- ✅ No performance regression
```
Write to `$BASELINE_METRICS`.
---
### 3. Create Refactor Specification
```markdown
# Refactor ${REFACTOR_NUM}: [Title]
**Status**: Active
**Created**: YYYY-MM-DD
**Baseline Metrics**: ${BASELINE_METRICS}
---
## Refactoring Goal
**What We're Improving**: [Brief description]
**Why**: [Motivation]
- Pain point 1
- Pain point 2
**Type**: [Extract Function/Reduce Complexity/Eliminate Duplication/Improve Naming/Optimize Performance]
---
## Target Code
**Location**: [file:line range]
**Current Issues**:
- Issue 1
- Issue 2
---
## Refactoring Plan
### Step 1: [Refactor Action]
**What**: [Description]
**Files**: [list]
**Validation**: [How to verify]
### Step 2: [Refactor Action]
[Repeat pattern]
---
## Behavior Preservation
**Critical**: No functional changes allowed
**Validation Strategy**:
1. Capture test suite results (before)
2. Apply refactoring step
3. Run test suite (after)
4. Compare results (must be identical)
5. Repeat for each step
---
## Expected Improvements
**Metrics**:
| Metric | Before | After | Improvement |
|--------|--------|-------|-------------|
| Complexity | [N] | [Target] | [%] |
| Duplication | [N%] | [Target] | [%] |
| Maintainability | [N] | [Target] | [%] |
---
## Risks
| Risk | Mitigation |
|------|------------|
| [Risk 1] | [Mitigation] |
---
## Tech Stack Compliance
${TECH_STACK_VALIDATION}
```
Write to `$REFACTOR_SPEC`.
---
### 4. Generate Tasks
```markdown
# Tasks: Refactor ${REFACTOR_NUM}
**Workflow**: Refactor (Metrics-Driven, Behavior-Preserving)
---
## Phase 1: Baseline Establishment
### T001: Establish Baseline Metrics
**Description**: Run code analysis tools, capture metrics
**Validation**: Baseline documented in ${BASELINE_METRICS}
### T002: Run Full Test Suite (Baseline)
**Description**: Capture test results before refactoring
**Expected**: 100% pass rate (or document failures)
**Parallel**: No
---
## Phase 2: Incremental Refactoring
[For each refactoring step, create task sequence:]
### T003: Refactor Step 1 - [Description]
**Description**: [What's changing]
**Files**: [list]
**Validation**: Code compiles, no functional changes
**Parallel**: No (incremental steps)
### T004: Test Step 1
**Description**: Run test suite after step 1
**Expected**: Identical results to baseline
**Parallel**: No (depends on T003)
[Repeat T00N/T00N+1 pattern for each refactor step]
---
## Phase 3: Validation and Metrics
### T00N: Run Full Test Suite (Final)
**Description**: Verify all tests still pass
**Expected**: 100% pass rate, identical to baseline
### T00N+1: Measure Final Metrics
**Description**: Capture metrics after refactoring
**Expected**: Measurable improvement in target metrics
**Parallel**: [P]
### T00N+2: Compare Metrics
**Description**: Generate before/after comparison
**Expected**: Improvements meet success criteria
**Parallel**: No
---
## Summary
**Total Tasks**: [N]
**Refactoring Steps**: [N]
**Estimated Time**: [time]
**Success Criteria**:
- ✅ All tests pass (identical results before/after)
- ✅ Measurable metrics improvement
- ✅ No functional changes
- ✅ No performance regression
```
Write to `$TASKS_FILE`.
---
### 5. Execute Refactoring Workflow
Execute tasks incrementally with test validation after each step:
```
♻️ Executing Refactor Workflow
Phase 1: Baseline Establishment
T001: Establish Baseline Metrics
[Analyze code, capture metrics]
✓ Baseline: Complexity=45, Duplication=12%, Maintainability=52
T002: Run Full Test Suite (Baseline)
[Run tests]
✓ 247 tests passed
Phase 2: Incremental Refactoring
T003: Extract Function - processUserData
[Apply refactoring]
T004: Test Step 1
[Run tests]
✓ 247 tests passed (identical to baseline)
[Repeat for each refactoring step]
Phase 3: Validation and Metrics
T00N: Run Full Test Suite (Final)
✓ 247 tests passed (100% identical to baseline)
T00N+1: Measure Final Metrics
✓ Complexity=12 (was 45) - 73% improvement ✅
✓ Duplication=2% (was 12%) - 83% improvement ✅
✓ Maintainability=78 (was 52) - 50% improvement ✅
T00N+2: Compare Metrics
✓ All success criteria met
```
---
## Final Output
```
✅ Refactor Workflow Complete - Refactor ${REFACTOR_NUM}
📊 Metrics Improvement:
| Metric | Before | After | Improvement |
|--------|--------|-------|-------------|
| Complexity | [N] | [N] | [%] ✅ |
| Duplication | [N%] | [N%] | [%] ✅ |
| Maintainability | [N] | [N] | [%] ✅ |
✅ Behavior Preservation:
- All tests passed (before and after)
- Identical test results
- No functional changes
- No performance regression
⏱️ Time to Refactor: ${DURATION}
📈 Next Steps:
1. Review: ${REFACTOR_SPEC}
2. Commit refactoring
3. Share metrics improvements with team
```
---
## Operating Principles
1. **Metrics First**: Establish measurable baseline
2. **Incremental**: Small, safe refactoring steps
3. **Test After Each Step**: Verify behavior preservation
4. **Measurable**: Quantify quality improvements
5. **No Functional Changes**: Behavior must be identical
6. **Tech Compliance**: Validate against tech stack
---
## Success Criteria
✅ Baseline metrics established
✅ Incremental refactoring steps completed
✅ All tests pass (before and after)
✅ Identical test results (behavior preserved)
✅ Measurable metrics improvement
✅ No performance regression
✅ Tech stack compliant
---
**Workflow Coverage**: Addresses ~10% of development work (quality improvement)

944
commands/release.md Normal file
View File

@@ -0,0 +1,944 @@
---
description: Comprehensive release preparation workflow including quality gates, security audit, changelog generation, version bumping, tagging, and publishing
args:
- name: --patch
description: Create patch release (bug fixes, 1.0.0 → 1.0.1)
required: false
- name: --minor
description: Create minor release (new features, 1.0.0 → 1.1.0)
required: false
- name: --major
description: Create major release (breaking changes, 1.0.0 → 2.0.0)
required: false
- name: --skip-audit
description: Skip security audit (not recommended for production)
required: false
---
## Goal
Orchestrate a complete release workflow with quality gates, version bumping, and publishing automation.
## User Input
```text
$ARGUMENTS
```
---
## What This Command Does
`/specswarm:release` orchestrates a complete release workflow:
1. **Pre-Release Validation** - Checks git status, branch protection, uncommitted changes
2. **Quality Gates** - Runs tests, linting, type checking, build verification
3. **Security Audit** - Optional security scan (recommended for production releases)
4. **Version Bumping** - Semantic versioning (patch/minor/major)
5. **Changelog Generation** - Auto-generates changelog from git commits
6. **Git Tagging** - Creates annotated git tags
7. **Artifact Building** - Builds production-ready artifacts
8. **Publishing** - Optional npm publish and GitHub release creation
---
## When to Use This Command
- Preparing production releases
- Creating new package versions
- Publishing to npm registry
- Creating GitHub releases
- After completing a feature milestone
- Before deploying to production
---
## Prerequisites
- Git repository with clean working directory
- On a release-ready branch (main/master or release branch)
- All tests passing
- package.json exists (for version bumping)
- npm credentials configured (if publishing to npm)
- GitHub CLI installed (if creating GitHub releases)
---
## Usage
```bash
/specswarm:release
```
**Options** (via interactive prompts):
- Release type (patch/minor/major)
- Run security audit (yes/no)
- Publish to npm (yes/no)
- Create GitHub release (yes/no)
- Push to remote (yes/no)
---
## Output
1. Updated `package.json` with new version
2. Generated/updated `CHANGELOG.md`
3. Git tag (e.g., `v1.2.3`)
4. Built artifacts (in `dist/` or `build/`)
5. Optional: Published npm package
6. Optional: GitHub release with notes
---
## Implementation
```bash
#!/bin/bash
set -euo pipefail
# ============================================================================
# RELEASE COMMAND - v3.1.0
# ============================================================================
echo "📦 SpecSwarm Release Workflow"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# ============================================================================
# CONFIGURATION
# ============================================================================
RELEASE_TYPE="patch"
RUN_SECURITY_AUDIT="no"
PUBLISH_TO_NPM="no"
CREATE_GITHUB_RELEASE="no"
PUSH_TO_REMOTE="yes"
DRY_RUN="no"
CURRENT_VERSION=""
NEW_VERSION=""
CHANGELOG_FILE="CHANGELOG.md"
TAG_NAME=""
# ============================================================================
# HELPER FUNCTIONS
# ============================================================================
log_section() {
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "$1"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
}
log_check() {
local check_name=$1
local status=$2
local message=$3
if [ "$status" = "pass" ]; then
echo "$check_name: $message"
elif [ "$status" = "warn" ]; then
echo "⚠️ $check_name: $message"
else
echo "$check_name: $message"
fi
}
semver_bump() {
local version=$1
local bump_type=$2
# Parse version (e.g., "1.2.3" -> major=1, minor=2, patch=3)
local major minor patch
IFS='.' read -r major minor patch <<< "${version#v}"
case "$bump_type" in
major)
major=$((major + 1))
minor=0
patch=0
;;
minor)
minor=$((minor + 1))
patch=0
;;
patch)
patch=$((patch + 1))
;;
esac
echo "${major}.${minor}.${patch}"
}
generate_changelog_entry() {
local version=$1
local previous_tag=$2
local date=$(date +%Y-%m-%d)
echo "## [$version] - $date"
echo ""
# Get commits since last tag
if [ -n "$previous_tag" ]; then
commits=$(git log "$previous_tag..HEAD" --pretty=format:"- %s" --no-merges 2>/dev/null || echo "- Initial release")
else
commits=$(git log --pretty=format:"- %s" --no-merges 2>/dev/null || echo "- Initial release")
fi
# Categorize commits
echo "### Added"
echo "$commits" | grep -i "^- \(feat\|add\|new\)" || echo "- No new features"
echo ""
echo "### Fixed"
echo "$commits" | grep -i "^- \(fix\|bugfix\|patch\)" || echo "- No bug fixes"
echo ""
echo "### Changed"
echo "$commits" | grep -i "^- \(update\|change\|refactor\|improve\)" || echo "- No changes"
echo ""
echo "### Deprecated"
echo "- None"
echo ""
echo "### Removed"
echo "- None"
echo ""
echo "### Security"
echo "- Security audit passed"
echo ""
}
# ============================================================================
# PREFLIGHT CHECKS
# ============================================================================
log_section "Preflight Checks"
# Check 1: Git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
log_check "Git Repository" "fail" "Not in a git repository"
exit 1
fi
log_check "Git Repository" "pass" "Valid git repository"
# Check 2: Clean working directory
DIRTY=$(git status --porcelain 2>/dev/null)
if [ -n "$DIRTY" ]; then
log_check "Working Directory" "fail" "Uncommitted changes detected"
echo ""
git status --short
echo ""
echo "Please commit or stash changes before releasing"
exit 1
fi
log_check "Working Directory" "pass" "Clean working directory"
# Check 3: Current branch
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
log_check "Current Branch" "pass" "$CURRENT_BRANCH"
RELEASE_BRANCHES=("main" "master" "develop" "release")
IS_RELEASE_BRANCH=false
for branch in "${RELEASE_BRANCHES[@]}"; do
if [ "$CURRENT_BRANCH" = "$branch" ] || [[ "$CURRENT_BRANCH" == release/* ]]; then
IS_RELEASE_BRANCH=true
break
fi
done
if [ "$IS_RELEASE_BRANCH" = false ]; then
log_check "Branch Validation" "warn" "Not on a typical release branch (main/master/develop/release/*)"
echo " Current branch: $CURRENT_BRANCH"
echo " You may want to merge to a release branch first"
fi
# Check 4: package.json exists
if [ ! -f "package.json" ]; then
log_check "package.json" "fail" "No package.json found"
echo " Release command requires package.json for version management"
exit 1
fi
log_check "package.json" "pass" "Found package.json"
# Check 5: Get current version
CURRENT_VERSION=$(jq -r '.version' package.json)
if [ "$CURRENT_VERSION" = "null" ] || [ -z "$CURRENT_VERSION" ]; then
log_check "Version" "fail" "No version in package.json"
exit 1
fi
log_check "Current Version" "pass" "$CURRENT_VERSION"
# Check 6: Remote repository
if git remote -v | grep -q "origin"; then
REMOTE_URL=$(git remote get-url origin)
log_check "Remote Repository" "pass" "$REMOTE_URL"
HAS_REMOTE=true
else
log_check "Remote Repository" "warn" "No remote 'origin' configured"
HAS_REMOTE=false
fi
# Check 7: GitHub CLI (for GitHub releases)
if command -v gh > /dev/null 2>&1; then
log_check "GitHub CLI" "pass" "gh available"
HAS_GH_CLI=true
else
log_check "GitHub CLI" "warn" "gh not installed (GitHub releases disabled)"
HAS_GH_CLI=false
fi
# ============================================================================
# QUALITY GATES
# ============================================================================
log_section "Quality Gates"
# Check for quality-standards.md
QUALITY_GATES_ENFORCED=false
if [ -f ".specswarm/quality-standards.md" ]; then
log_check "Quality Standards" "pass" "Found quality-standards.md"
QUALITY_GATES_ENFORCED=true
# Extract quality gate settings
if grep -q "enforce_gates: true" .specswarm/quality-standards.md 2>/dev/null; then
echo " Quality gates are enforced"
fi
else
log_check "Quality Standards" "warn" "No quality-standards.md (run /specswarm:init)"
fi
# Run tests if available
if jq -e '.scripts.test' package.json > /dev/null 2>&1; then
echo ""
echo "Running tests..."
if npm test 2>&1 | tee /tmp/test-output.txt; then
log_check "Tests" "pass" "All tests passed"
else
log_check "Tests" "fail" "Tests failed"
echo ""
echo "Cannot release with failing tests"
exit 1
fi
else
log_check "Tests" "warn" "No test script defined"
fi
# Run linting if available
if jq -e '.scripts.lint' package.json > /dev/null 2>&1; then
echo ""
echo "Running linter..."
if npm run lint 2>&1 | tee /tmp/lint-output.txt; then
log_check "Linting" "pass" "Linting passed"
else
log_check "Linting" "fail" "Linting failed"
echo ""
echo "Cannot release with linting errors"
exit 1
fi
else
log_check "Linting" "warn" "No lint script defined"
fi
# Run type checking if available (TypeScript)
if jq -e '.scripts["type-check"]' package.json > /dev/null 2>&1; then
echo ""
echo "Running type check..."
if npm run type-check 2>&1 | tee /tmp/typecheck-output.txt; then
log_check "Type Check" "pass" "Type checking passed"
else
log_check "Type Check" "fail" "Type errors found"
echo ""
echo "Cannot release with type errors"
exit 1
fi
else
log_check "Type Check" "warn" "No type-check script defined"
fi
# Run build if available
if jq -e '.scripts.build' package.json > /dev/null 2>&1; then
echo ""
echo "Running build..."
if npm run build 2>&1 | tee /tmp/build-output.txt; then
log_check "Build" "pass" "Build successful"
else
log_check "Build" "fail" "Build failed"
echo ""
echo "Cannot release with build errors"
exit 1
fi
else
log_check "Build" "warn" "No build script defined"
fi
echo ""
echo "✅ All quality gates passed"
# ============================================================================
# INTERACTIVE CONFIGURATION
# ============================================================================
log_section "Release Configuration"
# Question 1: Release type
cat << 'EOF_QUESTION_1' | claude --question
{
"questions": [
{
"question": "What type of release is this?",
"header": "Release type",
"multiSelect": false,
"options": [
{
"label": "Patch (bug fixes)",
"description": "Patch release - bug fixes and minor updates (1.0.0 → 1.0.1)"
},
{
"label": "Minor (new features)",
"description": "Minor release - new features, backward compatible (1.0.0 → 1.1.0)"
},
{
"label": "Major (breaking changes)",
"description": "Major release - breaking changes or major features (1.0.0 → 2.0.0)"
}
]
}
]
}
EOF_QUESTION_1
# Parse release type
if echo "$CLAUDE_ANSWERS" | jq -e '.["Release type"] == "Minor (new features)"' > /dev/null 2>&1; then
RELEASE_TYPE="minor"
elif echo "$CLAUDE_ANSWERS" | jq -e '.["Release type"] == "Major (breaking changes)"' > /dev/null 2>&1; then
RELEASE_TYPE="major"
else
RELEASE_TYPE="patch"
fi
# Calculate new version
NEW_VERSION=$(semver_bump "$CURRENT_VERSION" "$RELEASE_TYPE")
TAG_NAME="v${NEW_VERSION}"
echo "Current version: $CURRENT_VERSION"
echo "New version: $NEW_VERSION ($RELEASE_TYPE)"
echo "Tag name: $TAG_NAME"
# Question 2: Security audit
cat << 'EOF_QUESTION_2' | claude --question
{
"questions": [
{
"question": "Run security audit before releasing?",
"header": "Security",
"multiSelect": false,
"options": [
{
"label": "Yes, run audit",
"description": "Recommended for production releases - scans dependencies and code"
},
{
"label": "No, skip audit",
"description": "Skip security audit (not recommended for production)"
}
]
}
]
}
EOF_QUESTION_2
# Parse security audit answer
if echo "$CLAUDE_ANSWERS" | jq -e '.["Security"] == "Yes, run audit"' > /dev/null 2>&1; then
RUN_SECURITY_AUDIT="yes"
fi
echo "Security audit: $RUN_SECURITY_AUDIT"
# Question 3: Publishing options
PUBLISH_OPTIONS=()
# Always ask about npm publishing
PUBLISH_OPTIONS+='{
"label": "Publish to npm",
"description": "Publish package to npm registry (requires npm credentials)"
}'
# Add GitHub release option if gh CLI is available
if [ "$HAS_GH_CLI" = true ]; then
PUBLISH_OPTIONS+='{
"label": "Create GitHub release",
"description": "Create GitHub release with auto-generated notes"
}'
fi
# Add push to remote option if remote exists
if [ "$HAS_REMOTE" = true ]; then
PUBLISH_OPTIONS+='{
"label": "Push to remote",
"description": "Push commits and tags to remote repository"
}'
fi
# Build JSON array for options
PUBLISH_OPTIONS_JSON=$(printf '%s\n' "${PUBLISH_OPTIONS[@]}" | jq -s .)
cat << EOF_QUESTION_3 | claude --question
{
"questions": [
{
"question": "Select publishing and deployment options:",
"header": "Publishing",
"multiSelect": true,
"options": $PUBLISH_OPTIONS_JSON
}
]
}
EOF_QUESTION_3
# Parse publishing options
if echo "$CLAUDE_ANSWERS" | jq -e '.["Publishing"]' | grep -q "Publish to npm"; then
PUBLISH_TO_NPM="yes"
fi
if echo "$CLAUDE_ANSWERS" | jq -e '.["Publishing"]' | grep -q "Create GitHub release"; then
CREATE_GITHUB_RELEASE="yes"
fi
if echo "$CLAUDE_ANSWERS" | jq -e '.["Publishing"]' | grep -q "Push to remote"; then
PUSH_TO_REMOTE="yes"
else
PUSH_TO_REMOTE="no"
fi
echo "Publish to npm: $PUBLISH_TO_NPM"
echo "Create GitHub release: $CREATE_GITHUB_RELEASE"
echo "Push to remote: $PUSH_TO_REMOTE"
# ============================================================================
# SECURITY AUDIT (OPTIONAL)
# ============================================================================
if [ "$RUN_SECURITY_AUDIT" = "yes" ]; then
log_section "Security Audit"
echo "Running security audit..."
# Note: This would call /specswarm:security-audit in production
# For now, we'll run npm audit directly
if command -v npm > /dev/null 2>&1; then
if npm audit --audit-level=moderate 2>&1 | tee /tmp/audit-output.txt; then
log_check "Security Audit" "pass" "No moderate+ vulnerabilities"
else
log_check "Security Audit" "fail" "Vulnerabilities found"
echo ""
echo "Security audit failed. Fix vulnerabilities before releasing."
echo "Run: npm audit fix"
exit 1
fi
else
log_check "Security Audit" "warn" "npm not available, skipping audit"
fi
fi
# ============================================================================
# VERSION BUMPING
# ============================================================================
log_section "Version Bumping"
echo "Updating version in package.json..."
# Update package.json version
jq --arg version "$NEW_VERSION" '.version = $version' package.json > package.json.tmp
mv package.json.tmp package.json
log_check "package.json" "pass" "Updated to $NEW_VERSION"
# Update package-lock.json if it exists
if [ -f "package-lock.json" ]; then
jq --arg version "$NEW_VERSION" '.version = $version' package-lock.json > package-lock.json.tmp
mv package-lock.json.tmp package-lock.json
log_check "package-lock.json" "pass" "Updated to $NEW_VERSION"
fi
# ============================================================================
# CHANGELOG GENERATION
# ============================================================================
log_section "Changelog Generation"
# Get previous tag
PREVIOUS_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$PREVIOUS_TAG" ]; then
echo "Previous tag: $PREVIOUS_TAG"
else
echo "No previous tags found (first release)"
fi
# Generate changelog entry
CHANGELOG_ENTRY=$(generate_changelog_entry "$NEW_VERSION" "$PREVIOUS_TAG")
# Update or create CHANGELOG.md
if [ -f "$CHANGELOG_FILE" ]; then
echo "Updating $CHANGELOG_FILE..."
# Prepend new entry to existing changelog
{
echo "# Changelog"
echo ""
echo "$CHANGELOG_ENTRY"
echo ""
tail -n +2 "$CHANGELOG_FILE"
} > "${CHANGELOG_FILE}.tmp"
mv "${CHANGELOG_FILE}.tmp" "$CHANGELOG_FILE"
else
echo "Creating $CHANGELOG_FILE..."
cat > "$CHANGELOG_FILE" << EOF
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
$CHANGELOG_ENTRY
EOF
fi
log_check "Changelog" "pass" "Updated $CHANGELOG_FILE"
# ============================================================================
# GIT COMMIT & TAG
# ============================================================================
log_section "Git Commit & Tag"
# Stage changes
git add package.json package-lock.json "$CHANGELOG_FILE" 2>/dev/null || true
# Create commit
COMMIT_MESSAGE="chore(release): v${NEW_VERSION}
🚀 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>"
git commit -m "$COMMIT_MESSAGE"
log_check "Git Commit" "pass" "Created release commit"
# Create annotated tag
TAG_MESSAGE="Release v${NEW_VERSION}
$(echo "$CHANGELOG_ENTRY" | head -n 30)
🚀 Generated with [Claude Code](https://claude.com/claude-code)"
git tag -a "$TAG_NAME" -m "$TAG_MESSAGE"
log_check "Git Tag" "pass" "Created tag $TAG_NAME"
# ============================================================================
# BUILD ARTIFACTS
# ============================================================================
if jq -e '.scripts.build' package.json > /dev/null 2>&1; then
log_section "Building Artifacts"
echo "Running production build..."
if npm run build; then
log_check "Build" "pass" "Production artifacts built"
else
log_check "Build" "fail" "Build failed"
echo ""
echo "Build failed after version bump. Please fix and retry."
exit 1
fi
fi
# ============================================================================
# PUSH TO REMOTE
# ============================================================================
if [ "$PUSH_TO_REMOTE" = "yes" ] && [ "$HAS_REMOTE" = true ]; then
log_section "Push to Remote"
echo "Pushing to remote..."
git push origin "$CURRENT_BRANCH"
log_check "Push Branch" "pass" "Pushed $CURRENT_BRANCH"
git push origin "$TAG_NAME"
log_check "Push Tag" "pass" "Pushed $TAG_NAME"
fi
# ============================================================================
# NPM PUBLISHING
# ============================================================================
if [ "$PUBLISH_TO_NPM" = "yes" ]; then
log_section "NPM Publishing"
echo "Publishing to npm..."
# Check if logged in to npm
if npm whoami > /dev/null 2>&1; then
NPM_USER=$(npm whoami)
echo "Logged in as: $NPM_USER"
# Publish to npm
if npm publish; then
log_check "npm publish" "pass" "Published to npm registry"
else
log_check "npm publish" "fail" "npm publish failed"
echo ""
echo "npm publish failed. Check credentials and package.json configuration."
exit 1
fi
else
log_check "npm auth" "fail" "Not logged in to npm"
echo ""
echo "Please run: npm login"
exit 1
fi
fi
# ============================================================================
# GITHUB RELEASE
# ============================================================================
if [ "$CREATE_GITHUB_RELEASE" = "yes" ] && [ "$HAS_GH_CLI" = true ]; then
log_section "GitHub Release"
echo "Creating GitHub release..."
# Create release notes
RELEASE_NOTES=$(cat << EOF
$CHANGELOG_ENTRY
---
**Full Changelog**: https://github.com/$(git remote get-url origin | sed 's/.*github.com[:/]\(.*\)\.git/\1/')/compare/${PREVIOUS_TAG}...${TAG_NAME}
🚀 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)
# Create GitHub release
if gh release create "$TAG_NAME" \
--title "Release $TAG_NAME" \
--notes "$RELEASE_NOTES"; then
log_check "GitHub Release" "pass" "Created release $TAG_NAME"
else
log_check "GitHub Release" "fail" "Failed to create GitHub release"
echo ""
echo "GitHub release creation failed. Check gh CLI authentication."
fi
fi
# ============================================================================
# SUMMARY
# ============================================================================
log_section "Release Complete"
echo "🎉 Successfully released version $NEW_VERSION!"
echo ""
echo "Summary:"
echo " Previous version: $CURRENT_VERSION"
echo " New version: $NEW_VERSION"
echo " Release type: $RELEASE_TYPE"
echo " Git tag: $TAG_NAME"
echo " Branch: $CURRENT_BRANCH"
echo ""
if [ "$PUBLISH_TO_NPM" = "yes" ]; then
echo " 📦 Published to npm: https://www.npmjs.com/package/$(jq -r '.name' package.json)"
fi
if [ "$CREATE_GITHUB_RELEASE" = "yes" ]; then
REPO_URL=$(git remote get-url origin | sed 's/\.git$//' | sed 's/git@github.com:/https:\/\/github.com\//')
echo " 🚀 GitHub release: ${REPO_URL}/releases/tag/${TAG_NAME}"
fi
echo ""
echo "Next steps:"
if [ "$PUSH_TO_REMOTE" = "no" ]; then
echo " - Push changes: git push origin $CURRENT_BRANCH --tags"
fi
if [ "$PUBLISH_TO_NPM" = "no" ]; then
echo " - Publish to npm: npm publish"
fi
echo " - Deploy to production environments"
echo " - Update documentation if needed"
echo " - Notify stakeholders of the release"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
```
---
## Examples
### Example 1: Patch Release (Bug Fixes)
```bash
/specswarm:release
# Select: Patch (bug fixes)
# Select: Yes, run audit
# Select: Push to remote
# Result: v1.0.1 released with security audit
```
### Example 2: Minor Release (New Features)
```bash
/specswarm:release
# Select: Minor (new features)
# Select: Yes, run audit
# Select: Publish to npm, Create GitHub release, Push to remote
# Result: v1.1.0 published to npm and GitHub
```
### Example 3: Major Release (Breaking Changes)
```bash
/specswarm:release
# Select: Major (breaking changes)
# Select: Yes, run audit
# Select: All publishing options
# Result: v2.0.0 with full publishing workflow
```
---
## Release Checklist
The command automatically handles:
- ✅ Verify clean working directory
- ✅ Run all tests
- ✅ Run linting
- ✅ Run type checking (if TypeScript)
- ✅ Run production build
- ✅ Optional security audit
- ✅ Bump version in package.json
- ✅ Update/create CHANGELOG.md
- ✅ Create git commit
- ✅ Create annotated git tag
- ✅ Push to remote
- ✅ Optional: Publish to npm
- ✅ Optional: Create GitHub release
---
## Semantic Versioning
The command follows [Semantic Versioning](https://semver.org/):
- **Patch** (1.0.0 → 1.0.1): Bug fixes, minor updates
- **Minor** (1.0.0 → 1.1.0): New features, backward compatible
- **Major** (1.0.0 → 2.0.0): Breaking changes
---
## Changelog Format
Generated changelogs follow [Keep a Changelog](https://keepachangelog.com/) format:
```markdown
## [1.2.0] - 2025-01-15
### Added
- feat: new user dashboard
- add: dark mode support
### Fixed
- fix: authentication bug
- bugfix: memory leak
### Changed
- update: API endpoint structure
- refactor: database queries
```
---
## CI/CD Integration
Integrate with GitHub Actions:
```yaml
# .github/workflows/release.yml
name: Release
on:
workflow_dispatch:
inputs:
release_type:
description: 'Release type'
required: true
type: choice
options:
- patch
- minor
- major
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: /specswarm:release
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
---
## Notes
- **Protected Branches**: Some quality gates may be skipped on feature branches
- **npm Credentials**: Run `npm login` before publishing to npm
- **GitHub Releases**: Requires `gh` CLI and authentication
- **Rollback**: Use `/specswarm:rollback` if release fails
- **Dry Run**: The command always shows what it will do before making changes
---
## Troubleshooting
**Build Fails**:
- Check build scripts in package.json
- Verify all dependencies are installed
- Review build logs in `/tmp/build-output.txt`
**npm Publish Fails**:
- Verify npm login: `npm whoami`
- Check package name availability
- Ensure version hasn't been published before
**GitHub Release Fails**:
- Verify gh CLI: `gh auth status`
- Check repository permissions
- Ensure remote URL is correct
---
## See Also
- `/specswarm:security-audit` - Run security audit separately
- `/specswarm:rollback` - Rollback failed releases
- `/specswarm:analyze-quality` - Check quality before releasing
- `/specswarm:ship` - Complete feature workflow with merge
---
**Version**: 3.1.0
**Category**: Release Management
**Estimated Time**: 3-10 minutes (depending on build and publishing)

576
commands/rollback.md Normal file
View File

@@ -0,0 +1,576 @@
---
description: Safely rollback a failed or unwanted feature with automatic artifact cleanup
args:
- name: --dry-run
description: Show what would be rolled back without executing
required: false
- name: --keep-artifacts
description: Backup artifacts instead of deleting them
required: false
- name: --force
description: Skip confirmation prompts (dangerous!)
required: false
---
## User Input
```text
$ARGUMENTS
```
## Goal
Safely rollback a feature that failed or is no longer wanted, including:
1. Reverting all code changes since branch creation
2. Cleaning up feature artifacts (spec.md, plan.md, tasks.md)
3. Optionally deleting the feature branch
4. Switching back to the parent branch
Provides two rollback strategies with comprehensive safety checks.
---
## Execution Steps
### Step 1: Safety Checks
```bash
echo "🔍 Performing safety checks..."
echo ""
# Check 1: Get current branch
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [ -z "$CURRENT_BRANCH" ]; then
echo "❌ Error: Not in a git repository"
exit 1
fi
# Check 2: Prevent rollback of main/master/develop
PROTECTED_BRANCHES=("main" "master" "develop" "production")
for protected in "${PROTECTED_BRANCHES[@]}"; do
if [ "$CURRENT_BRANCH" = "$protected" ]; then
echo "❌ Error: Cannot rollback protected branch '$CURRENT_BRANCH'"
echo ""
echo "💡 Rollback is designed for feature branches only."
echo " If you need to revert changes on $CURRENT_BRANCH, use:"
echo " git revert <commit-hash>"
exit 1
fi
done
# Check 3: Check for uncommitted changes
DIRTY=$(git status --porcelain 2>/dev/null)
if [ -n "$DIRTY" ]; then
echo "❌ Error: Uncommitted changes detected"
echo ""
echo "You have uncommitted changes. Please commit or stash them first:"
git status --short
echo ""
echo "To commit:"
echo " git add ."
echo " git commit -m \"WIP: save before rollback\""
echo ""
echo "To stash:"
echo " git stash push -m \"Before rollback\""
exit 1
fi
# Check 4: Detect parent branch
# First try git config
PARENT_BRANCH=$(git config "branch.$CURRENT_BRANCH.parent" 2>/dev/null)
# Fallback to common parent branches
if [ -z "$PARENT_BRANCH" ]; then
for candidate in "develop" "development" "dev" "main" "master"; do
if git show-ref --verify --quiet "refs/heads/$candidate"; then
PARENT_BRANCH="$candidate"
break
fi
done
fi
# Last resort: ask user
if [ -z "$PARENT_BRANCH" ]; then
echo "⚠️ Could not auto-detect parent branch"
PARENT_BRANCH="main" # default
fi
echo "✅ Safety checks passed"
echo ""
```
---
### Step 2: Gather Rollback Information
```bash
echo "📊 Analyzing feature branch: $CURRENT_BRANCH"
echo ""
# Find divergence point from parent
DIVERGE_POINT=$(git merge-base "$CURRENT_BRANCH" "$PARENT_BRANCH" 2>/dev/null)
if [ -z "$DIVERGE_POINT" ]; then
echo "❌ Error: Could not find divergence point with $PARENT_BRANCH"
echo " Please specify the correct parent branch."
exit 1
fi
# Count commits to rollback
COMMIT_COUNT=$(git rev-list --count "$DIVERGE_POINT..$CURRENT_BRANCH" 2>/dev/null)
COMMITS=$(git log --oneline "$DIVERGE_POINT..$CURRENT_BRANCH" 2>/dev/null)
# Check if already merged to parent
MERGED=$(git branch --merged "$PARENT_BRANCH" | grep -w "$CURRENT_BRANCH" || true)
# Check for feature artifacts
FEATURE_DIR=".feature"
ARTIFACTS_FOUND=false
ARTIFACT_LIST=()
if [ -d "$FEATURE_DIR" ]; then
if [ -f "$FEATURE_DIR/spec.md" ]; then
ARTIFACTS_FOUND=true
ARTIFACT_LIST+=("spec.md ($(wc -l < "$FEATURE_DIR/spec.md" 2>/dev/null || echo "0") lines)")
fi
if [ -f "$FEATURE_DIR/plan.md" ]; then
ARTIFACTS_FOUND=true
ARTIFACT_LIST+=("plan.md ($(wc -l < "$FEATURE_DIR/plan.md" 2>/dev/null || echo "0") lines)")
fi
if [ -f "$FEATURE_DIR/tasks.md" ]; then
ARTIFACTS_FOUND=true
TASK_COUNT=$(grep -c "^-" "$FEATURE_DIR/tasks.md" 2>/dev/null || echo "0")
TASK_COMPLETE=$(grep -c "^- \[x\]" "$FEATURE_DIR/tasks.md" 2>/dev/null || echo "0")
ARTIFACT_LIST+=("tasks.md ($TASK_COUNT tasks, $TASK_COMPLETE completed)")
fi
fi
# Check remote tracking
REMOTE_TRACKING=$(git rev-parse --abbrev-ref --symbolic-full-name "@{u}" 2>/dev/null || echo "")
# Display information
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " ROLLBACK ANALYSIS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Branch Information:"
echo " Current Branch: $CURRENT_BRANCH"
echo " Parent Branch: $PARENT_BRANCH"
echo " Commits: $COMMIT_COUNT"
echo " Merged Status: $([[ -n "$MERGED" ]] && echo "Already merged to $PARENT_BRANCH" || echo "Not merged")"
echo " Remote Tracking: ${REMOTE_TRACKING:-"None (local only)"}"
echo ""
if [ "$COMMIT_COUNT" -gt 0 ]; then
echo "Commits to Rollback:"
echo "$COMMITS" | head -5
if [ "$COMMIT_COUNT" -gt 5 ]; then
echo " ... and $((COMMIT_COUNT - 5)) more"
fi
echo ""
fi
if [ "$ARTIFACTS_FOUND" = true ]; then
echo "Feature Artifacts Found:"
for artifact in "${ARTIFACT_LIST[@]}"; do
echo "$artifact"
done
echo ""
fi
if [ -n "$MERGED" ]; then
echo "⚠️ WARNING: This branch has already been merged to $PARENT_BRANCH"
echo " Rollback will create revert commits on $PARENT_BRANCH"
echo ""
fi
if [ -n "$REMOTE_TRACKING" ]; then
echo "⚠️ WARNING: This branch is pushed to remote ($REMOTE_TRACKING)"
echo " Other collaborators may have checked out this branch"
echo ""
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
---
### Step 3: Dry Run Mode
**If `--dry-run` flag is present, show what would happen and exit:**
```bash
if echo "$ARGUMENTS" | grep -q "\-\-dry-run"; then
echo "🔍 DRY RUN MODE - No changes will be made"
echo ""
echo "The following actions WOULD be performed:"
echo ""
echo "1. Rollback Strategy: (User would choose)"
echo " Option A: Soft rollback (create $COMMIT_COUNT revert commits)"
echo " Option B: Hard rollback (reset to $PARENT_BRANCH)"
echo ""
echo "2. Artifact Cleanup:"
if [ "$ARTIFACTS_FOUND" = true ]; then
echo " - Delete or backup: ${ARTIFACT_LIST[*]}"
else
echo " - No artifacts to clean up"
fi
echo ""
echo "3. Branch Cleanup:"
echo " - Optionally delete branch: $CURRENT_BRANCH"
echo ""
echo "4. Final State:"
echo " - Switch to: $PARENT_BRANCH"
echo ""
echo "Run without --dry-run to execute rollback."
exit 0
fi
```
---
### Step 4: Interactive Rollback Configuration (if not --force)
**Skip if `--force` flag is present (use soft rollback defaults).**
Use **AskUserQuestion** tool:
```
Question 1: "Choose rollback strategy"
Header: "Strategy"
Options:
1. "Soft rollback (revert commits)"
Description: "Creates revert commits, preserves history (RECOMMENDED)"
2. "Hard rollback (reset to parent)"
Description: "Deletes all commits, rewrites history (DANGEROUS)"
3. "Cancel rollback"
Description: "Abort and keep current state"
```
Store in `$ROLLBACK_STRATEGY`.
If `$ROLLBACK_STRATEGY` == "Cancel rollback", exit with message.
```
Question 2: "Delete feature branch after rollback?"
Header: "Branch Cleanup"
Options:
1. "Yes, delete branch"
Description: "Remove $CURRENT_BRANCH completely"
2. "No, keep branch"
Description: "Keep branch for reference (can delete later)"
```
Store in `$DELETE_BRANCH`.
```
Question 3 (if ARTIFACTS_FOUND=true): "What should we do with feature artifacts?"
Header: "Artifacts"
Options:
1. "Delete artifacts"
Description: "Remove spec.md, plan.md, tasks.md permanently"
2. "Backup artifacts"
Description: "Move to .feature.backup/$(date +%Y%m%d-%H%M%S)/"
3. "Keep artifacts"
Description: "Leave artifacts in place (not recommended)"
```
Store in `$ARTIFACT_ACTION`.
```
Question 4: "Final confirmation - Type 'rollback' to proceed"
Header: "Confirm"
Options:
- Text input required
- Must type exactly "rollback" (case-sensitive)
```
Store in `$CONFIRMATION`.
```bash
if [ "$CONFIRMATION" != "rollback" ]; then
echo "❌ Rollback cancelled - confirmation text did not match"
echo " You must type exactly: rollback"
exit 1
fi
```
---
### Step 5: Execute Rollback
```bash
echo ""
echo "🔄 Executing rollback..."
echo ""
# Step 5a: Handle artifacts first (before git operations)
if [ "$ARTIFACTS_FOUND" = true ]; then
case "$ARTIFACT_ACTION" in
"Delete artifacts")
echo "🗑️ Deleting feature artifacts..."
rm -rf "$FEATURE_DIR"
echo "✅ Deleted artifacts"
;;
"Backup artifacts")
BACKUP_DIR=".feature.backup/$(date +%Y%m%d-%H%M%S)"
echo "💾 Backing up artifacts to $BACKUP_DIR..."
mkdir -p "$BACKUP_DIR"
cp -r "$FEATURE_DIR"/* "$BACKUP_DIR/" 2>/dev/null
rm -rf "$FEATURE_DIR"
echo "✅ Artifacts backed up to $BACKUP_DIR"
;;
"Keep artifacts")
echo " Keeping artifacts in place"
;;
esac
echo ""
fi
# Step 5b: Execute rollback strategy
case "$ROLLBACK_STRATEGY" in
"Soft rollback (revert commits)")
echo "🔄 Creating revert commits..."
if [ "$COMMIT_COUNT" -gt 0 ]; then
# Create revert commits in reverse order
git revert --no-edit "$DIVERGE_POINT..$CURRENT_BRANCH" 2>&1 || {
echo ""
echo "⚠️ Revert encountered conflicts"
echo " Conflicts must be resolved manually:"
echo " 1. Fix conflicts in the listed files"
echo " 2. git add <resolved-files>"
echo " 3. git revert --continue"
echo ""
echo " Or to abort:"
echo " git revert --abort"
exit 1
}
echo "✅ Created $COMMIT_COUNT revert commits"
else
echo " No commits to revert"
fi
# Stay on current branch for soft rollback
SWITCH_BRANCH=false
;;
"Hard rollback (reset to parent)")
echo "⚠️ WARNING: Performing hard rollback (history will be lost)"
echo ""
# Switch to parent branch
echo "🔀 Switching to $PARENT_BRANCH..."
git checkout "$PARENT_BRANCH" 2>&1 || {
echo "❌ Failed to switch to $PARENT_BRANCH"
exit 1
}
echo "✅ Switched to $PARENT_BRANCH"
SWITCH_BRANCH=true
;;
esac
echo ""
# Step 5c: Branch cleanup
if [ "$DELETE_BRANCH" = "Yes, delete branch" ] && [ "$SWITCH_BRANCH" = false ]; then
# For soft rollback, need to switch before deleting
echo "🔀 Switching to $PARENT_BRANCH before branch deletion..."
git checkout "$PARENT_BRANCH" 2>&1 || {
echo "❌ Failed to switch to $PARENT_BRANCH"
exit 1
}
SWITCH_BRANCH=true
fi
if [ "$DELETE_BRANCH" = "Yes, delete branch" ]; then
echo "🗑️ Deleting branch $CURRENT_BRANCH..."
# Check if branch has unmerged changes
UNMERGED=$(git branch --no-merged "$PARENT_BRANCH" | grep -w "$CURRENT_BRANCH" || true)
if [ -n "$UNMERGED" ] && [ "$ROLLBACK_STRATEGY" != "Hard rollback (reset to parent)" ]; then
# Force delete for unmerged branches
git branch -D "$CURRENT_BRANCH" 2>&1 || {
echo "❌ Failed to delete branch $CURRENT_BRANCH"
exit 1
}
else
git branch -d "$CURRENT_BRANCH" 2>&1 || {
# Try force delete if normal delete fails
git branch -D "$CURRENT_BRANCH" 2>&1 || {
echo "❌ Failed to delete branch $CURRENT_BRANCH"
exit 1
}
}
fi
echo "✅ Deleted branch $CURRENT_BRANCH"
# Delete remote branch if exists
if [ -n "$REMOTE_TRACKING" ]; then
REMOTE_NAME=$(echo "$REMOTE_TRACKING" | cut -d'/' -f1)
echo ""
echo "⚠️ Remote branch exists: $REMOTE_TRACKING"
echo " To delete remote branch, run:"
echo " git push $REMOTE_NAME --delete $CURRENT_BRANCH"
fi
fi
echo ""
```
---
### Step 6: Summary and Final State
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " ✅ ROLLBACK COMPLETE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Summary:"
echo " Strategy: $ROLLBACK_STRATEGY"
if [ "$COMMIT_COUNT" -gt 0 ]; then
if [ "$ROLLBACK_STRATEGY" = "Soft rollback (revert commits)" ]; then
echo " Commits: $COMMIT_COUNT reverted"
else
echo " Commits: $COMMIT_COUNT removed"
fi
fi
if [ "$ARTIFACTS_FOUND" = true ]; then
echo " Artifacts: $ARTIFACT_ACTION"
fi
if [ "$DELETE_BRANCH" = "Yes, delete branch" ]; then
echo " Branch: $CURRENT_BRANCH deleted"
else
echo " Branch: $CURRENT_BRANCH kept"
fi
echo " Current: $(git rev-parse --abbrev-ref HEAD)"
echo ""
if [ "$ROLLBACK_STRATEGY" = "Soft rollback (revert commits)" ] && [ "$SWITCH_BRANCH" = false ]; then
echo "💡 Next Steps:"
echo " 1. Review the revert commits: git log"
echo " 2. Push to remote if needed: git push"
echo " 3. Merge to parent: /specswarm:complete"
echo ""
elif [ "$SWITCH_BRANCH" = true ]; then
echo "💡 Next Steps:"
echo " 1. Review current state: git status"
echo " 2. Start a new feature: /specswarm:build \"feature\""
echo ""
fi
if [ -d ".feature.backup" ]; then
echo "📦 Backups:"
echo " Feature artifacts backed up to:"
ls -1d .feature.backup/*/ 2>/dev/null | tail -1
echo ""
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
```
---
## Important Notes
### Safety Features
1. **Protected Branch Prevention**: Cannot rollback main/master/develop/production
2. **Uncommitted Changes Check**: Requires clean working tree
3. **Confirmation Required**: Must type "rollback" to proceed (unless --force)
4. **Artifact Backup**: Option to backup before deletion
5. **Dry Run**: Preview changes before executing
### Rollback Strategies
**Soft Rollback (Recommended)**:
- Creates revert commits for each commit since divergence
- Preserves complete history
- Safe for shared/pushed branches
- Can be undone by reverting the reverts
**Hard Rollback (Dangerous)**:
- Resets to parent branch state
- Deletes all commits permanently
- Only safe for local-only branches
- Cannot be undone easily
### When to Use Each Strategy
**Use Soft Rollback when**:
- Branch has been pushed to remote
- Other developers may have based work on this branch
- You want to preserve history
- You're unsure if you might need the code later
**Use Hard Rollback when**:
- Branch is local-only (never pushed)
- You're absolutely certain code should be deleted
- You want a clean slate
### Remote Branch Handling
If branch is tracked remotely:
- Local branch can be deleted safely
- Remote branch deletion must be done manually:
```bash
git push origin --delete feature-branch-name
```
- Provides command at end of rollback
### Merged Branch Rollback
If branch is already merged to parent:
- Soft rollback creates revert commits on current branch
- These reverts must then be merged to parent
- Hard rollback switches to parent (no changes to parent)
- Consider using `/specswarm:deprecate` for features in production
---
## Example Usage
### Basic Rollback (Interactive)
```bash
/specswarm:rollback
# Guided through strategy selection
# Confirms with "rollback" text
```
### Preview Rollback (Dry Run)
```bash
/specswarm:rollback --dry-run
# Shows what would happen without executing
```
### Quick Rollback with Defaults
```bash
/specswarm:rollback --force
# Uses soft rollback, no confirmation
# NOT RECOMMENDED unless you know what you're doing
```
### Rollback with Artifact Backup
```bash
/specswarm:rollback --keep-artifacts
# Backs up artifacts automatically
```
### Undo a Rollback (if soft rollback was used)
```bash
# Find the revert commits
git log --oneline | grep "Revert"
# Revert the reverts to restore original state
git revert <revert-commit-hash>
```

940
commands/security-audit.md Normal file
View File

@@ -0,0 +1,940 @@
---
description: Comprehensive security scanning including dependency vulnerabilities, secret detection, OWASP Top 10 analysis, and configuration checks
args:
- name: --quick
description: Quick scan (dependency check and basic secret detection only)
required: false
- name: --thorough
description: Thorough scan (extensive pattern matching and deep analysis)
required: false
---
## Goal
Perform a comprehensive security audit of your codebase to identify vulnerabilities before merging or releasing.
## User Input
```text
$ARGUMENTS
```
---
## What This Command Does
`/specswarm:security-audit` performs a comprehensive security analysis of your codebase:
1. **Dependency Scanning** - Checks for known vulnerabilities in npm/yarn/pnpm packages
2. **Secret Detection** - Scans for hardcoded API keys, passwords, tokens, and credentials
3. **OWASP Top 10 Analysis** - Detects common web vulnerabilities (XSS, SQL injection, etc.)
4. **Security Configuration** - Validates HTTPS, CORS, headers, and other security settings
5. **Report Generation** - Creates actionable report with severity levels and remediation steps
---
## When to Use This Command
- Before merging features to main/production branches
- As part of CI/CD pipeline security gates
- Before major releases
- After adding new dependencies
- When investigating security concerns
- Regular security audits (monthly/quarterly)
---
## Prerequisites
- Git repository
- Node.js project with package.json (for dependency scanning)
- Working directory should be project root
---
## Usage
```bash
/specswarm:security-audit
```
**Options** (via interactive prompts):
- Scan depth (quick/standard/thorough)
- Report format (markdown/json/both)
- Severity threshold (all/medium+/high+/critical)
- Auto-fix vulnerabilities (yes/no)
---
## Output
Generates a security audit report: `security-audit-YYYY-MM-DD.md`
**Report Sections**:
1. Executive Summary (overall risk score, critical findings count)
2. Dependency Vulnerabilities (from npm audit/yarn audit)
3. Secret Detection Results (hardcoded credentials, API keys)
4. Code Vulnerabilities (OWASP Top 10 patterns)
5. Security Configuration Issues
6. Remediation Recommendations (prioritized by severity)
---
## Implementation
```bash
#!/bin/bash
set -euo pipefail
# ============================================================================
# SECURITY AUDIT COMMAND - v3.1.0
# ============================================================================
echo "🔒 SpecSwarm Security Audit"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# ============================================================================
# CONFIGURATION
# ============================================================================
REPORT_DATE=$(date +%Y-%m-%d)
REPORT_FILE="security-audit-${REPORT_DATE}.md"
SCAN_DEPTH="standard"
REPORT_FORMAT="markdown"
SEVERITY_THRESHOLD="all"
AUTO_FIX="no"
# Vulnerability counters
CRITICAL_COUNT=0
HIGH_COUNT=0
MEDIUM_COUNT=0
LOW_COUNT=0
INFO_COUNT=0
# Temporary files for scan results
TEMP_DIR=$(mktemp -d)
DEP_SCAN_FILE="${TEMP_DIR}/dep-scan.json"
SECRET_SCAN_FILE="${TEMP_DIR}/secret-scan.txt"
CODE_SCAN_FILE="${TEMP_DIR}/code-scan.txt"
CONFIG_SCAN_FILE="${TEMP_DIR}/config-scan.txt"
# Cleanup on exit
trap 'rm -rf "$TEMP_DIR"' EXIT
# ============================================================================
# HELPER FUNCTIONS
# ============================================================================
log_section() {
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "$1"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
}
log_finding() {
local severity=$1
local category=$2
local message=$3
case "$severity" in
CRITICAL) ((CRITICAL_COUNT++)); echo "🔴 CRITICAL [$category]: $message" ;;
HIGH) ((HIGH_COUNT++)); echo "🟠 HIGH [$category]: $message" ;;
MEDIUM) ((MEDIUM_COUNT++)); echo "🟡 MEDIUM [$category]: $message" ;;
LOW) ((LOW_COUNT++)); echo "🔵 LOW [$category]: $message" ;;
INFO) ((INFO_COUNT++)); echo " INFO [$category]: $message" ;;
esac
}
calculate_risk_score() {
# Risk score = (CRITICAL * 10) + (HIGH * 5) + (MEDIUM * 2) + (LOW * 1)
local score=$(( CRITICAL_COUNT * 10 + HIGH_COUNT * 5 + MEDIUM_COUNT * 2 + LOW_COUNT * 1 ))
echo "$score"
}
get_risk_level() {
local score=$1
if [ "$score" -ge 50 ]; then
echo "CRITICAL"
elif [ "$score" -ge 20 ]; then
echo "HIGH"
elif [ "$score" -ge 10 ]; then
echo "MEDIUM"
else
echo "LOW"
fi
}
# ============================================================================
# PREFLIGHT CHECKS
# ============================================================================
log_section "Preflight Checks"
# Check if in git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "❌ Error: Not in a git repository"
echo " Security audit requires a git repository to scan committed code"
exit 1
fi
# Check if package.json exists
if [ ! -f "package.json" ]; then
echo "⚠️ Warning: No package.json found - dependency scanning will be skipped"
HAS_PACKAGE_JSON=false
else
HAS_PACKAGE_JSON=true
echo "✅ Found package.json"
fi
# Detect package manager
if [ "$HAS_PACKAGE_JSON" = true ]; then
if [ -f "package-lock.json" ]; then
PKG_MANAGER="npm"
echo "✅ Detected npm package manager"
elif [ -f "yarn.lock" ]; then
PKG_MANAGER="yarn"
echo "✅ Detected yarn package manager"
elif [ -f "pnpm-lock.yaml" ]; then
PKG_MANAGER="pnpm"
echo "✅ Detected pnpm package manager"
else
PKG_MANAGER="npm"
echo "⚠️ No lock file found, defaulting to npm"
fi
fi
echo ""
echo "Repository: $(basename "$(git rev-parse --show-toplevel)")"
echo "Branch: $(git rev-parse --abbrev-ref HEAD)"
echo "Scan Date: $(date '+%Y-%m-%d %H:%M:%S')"
# ============================================================================
# INTERACTIVE CONFIGURATION
# ============================================================================
log_section "Scan Configuration"
# Question 1: Scan depth
cat << 'EOF_QUESTION_1' | claude --question
{
"questions": [
{
"question": "How thorough should the security scan be?",
"header": "Scan depth",
"multiSelect": false,
"options": [
{
"label": "Quick scan",
"description": "Fast scan - dependency check and basic secret detection (~1 min)"
},
{
"label": "Standard scan",
"description": "Recommended - all checks with standard patterns (~3-5 min)"
},
{
"label": "Thorough scan",
"description": "Deep scan - extensive pattern matching and analysis (~10+ min)"
}
]
}
]
}
EOF_QUESTION_1
# Parse scan depth answer
if echo "$CLAUDE_ANSWERS" | jq -e '.["Scan depth"] == "Quick scan"' > /dev/null 2>&1; then
SCAN_DEPTH="quick"
elif echo "$CLAUDE_ANSWERS" | jq -e '.["Scan depth"] == "Thorough scan"' > /dev/null 2>&1; then
SCAN_DEPTH="thorough"
else
SCAN_DEPTH="standard"
fi
echo "Scan depth: $SCAN_DEPTH"
# Question 2: Severity threshold
cat << 'EOF_QUESTION_2' | claude --question
{
"questions": [
{
"question": "What severity level should be included in the report?",
"header": "Severity",
"multiSelect": false,
"options": [
{
"label": "All findings",
"description": "Include all severity levels (CRITICAL, HIGH, MEDIUM, LOW, INFO)"
},
{
"label": "Medium and above",
"description": "Show CRITICAL, HIGH, and MEDIUM (hide LOW and INFO)"
},
{
"label": "High and above",
"description": "Show only CRITICAL and HIGH findings"
},
{
"label": "Critical only",
"description": "Show only CRITICAL findings"
}
]
}
]
}
EOF_QUESTION_2
# Parse severity threshold
if echo "$CLAUDE_ANSWERS" | jq -e '.["Severity"] == "Medium and above"' > /dev/null 2>&1; then
SEVERITY_THRESHOLD="medium"
elif echo "$CLAUDE_ANSWERS" | jq -e '.["Severity"] == "High and above"' > /dev/null 2>&1; then
SEVERITY_THRESHOLD="high"
elif echo "$CLAUDE_ANSWERS" | jq -e '.["Severity"] == "Critical only"' > /dev/null 2>&1; then
SEVERITY_THRESHOLD="critical"
else
SEVERITY_THRESHOLD="all"
fi
echo "Severity threshold: $SEVERITY_THRESHOLD"
# Question 3: Auto-fix
if [ "$HAS_PACKAGE_JSON" = true ]; then
cat << 'EOF_QUESTION_3' | claude --question
{
"questions": [
{
"question": "Should we attempt to auto-fix dependency vulnerabilities?",
"header": "Auto-fix",
"multiSelect": false,
"options": [
{
"label": "Yes, auto-fix",
"description": "Run 'npm audit fix' to automatically update vulnerable dependencies"
},
{
"label": "No, report only",
"description": "Only generate report without making changes"
}
]
}
]
}
EOF_QUESTION_3
# Parse auto-fix answer
if echo "$CLAUDE_ANSWERS" | jq -e '.["Auto-fix"] == "Yes, auto-fix"' > /dev/null 2>&1; then
AUTO_FIX="yes"
fi
echo "Auto-fix: $AUTO_FIX"
fi
# ============================================================================
# SCAN 1: DEPENDENCY VULNERABILITIES
# ============================================================================
log_section "1. Dependency Vulnerability Scan"
if [ "$HAS_PACKAGE_JSON" = true ]; then
echo "Running ${PKG_MANAGER} audit..."
# Run audit and capture results
case "$PKG_MANAGER" in
npm)
if npm audit --json > "$DEP_SCAN_FILE" 2>/dev/null; then
echo "✅ npm audit completed"
else
echo "⚠️ npm audit found vulnerabilities"
fi
# Parse npm audit results
if [ -f "$DEP_SCAN_FILE" ]; then
VULN_CRITICAL=$(jq '.metadata.vulnerabilities.critical // 0' "$DEP_SCAN_FILE")
VULN_HIGH=$(jq '.metadata.vulnerabilities.high // 0' "$DEP_SCAN_FILE")
VULN_MEDIUM=$(jq '.metadata.vulnerabilities.moderate // 0' "$DEP_SCAN_FILE")
VULN_LOW=$(jq '.metadata.vulnerabilities.low // 0' "$DEP_SCAN_FILE")
echo " Critical: $VULN_CRITICAL"
echo " High: $VULN_HIGH"
echo " Medium: $VULN_MEDIUM"
echo " Low: $VULN_LOW"
# Update counters
CRITICAL_COUNT=$((CRITICAL_COUNT + VULN_CRITICAL))
HIGH_COUNT=$((HIGH_COUNT + VULN_HIGH))
MEDIUM_COUNT=$((MEDIUM_COUNT + VULN_MEDIUM))
LOW_COUNT=$((LOW_COUNT + VULN_LOW))
fi
;;
yarn)
if yarn audit --json > "$DEP_SCAN_FILE" 2>/dev/null; then
echo "✅ yarn audit completed"
else
echo "⚠️ yarn audit found vulnerabilities"
fi
;;
pnpm)
if pnpm audit --json > "$DEP_SCAN_FILE" 2>/dev/null; then
echo "✅ pnpm audit completed"
else
echo "⚠️ pnpm audit found vulnerabilities"
fi
;;
esac
# Auto-fix if requested
if [ "$AUTO_FIX" = "yes" ]; then
echo ""
echo "Attempting auto-fix..."
case "$PKG_MANAGER" in
npm)
npm audit fix
echo "✅ Auto-fix completed"
;;
yarn)
echo "⚠️ Yarn does not support auto-fix - please update manually"
;;
pnpm)
pnpm audit --fix
echo "✅ Auto-fix completed"
;;
esac
fi
else
echo "⏭️ Skipping dependency scan (no package.json)"
fi
# ============================================================================
# SCAN 2: SECRET DETECTION
# ============================================================================
log_section "2. Secret Detection Scan"
echo "Scanning for hardcoded secrets..."
# Secret patterns to detect
declare -A SECRET_PATTERNS=(
["AWS Access Key"]='AKIA[0-9A-Z]{16}'
["AWS Secret Key"]='aws_secret_access_key[[:space:]]*=[[:space:]]*[A-Za-z0-9/+=]{40}'
["GitHub Token"]='gh[pousr]_[A-Za-z0-9]{36,}'
["Slack Token"]='xox[baprs]-[0-9a-zA-Z-]+'
["Google API Key"]='AIza[0-9A-Za-z-_]{35}'
["Stripe Key"]='sk_live_[0-9a-zA-Z]{24,}'
["Private Key"]='-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----'
["Password in Code"]='password[[:space:]]*=[[:space:]]*["\047][^"\047]{8,}["\047]'
["API Key"]='api[_-]?key[[:space:]]*=[[:space:]]*["\047][^"\047]{20,}["\047]'
["Generic Secret"]='secret[[:space:]]*=[[:space:]]*["\047][^"\047]{16,}["\047]'
)
# Files to exclude from scanning
EXCLUDE_PATTERNS="node_modules|\.git|\.lock|package-lock\.json|yarn\.lock|pnpm-lock\.yaml|\.min\.js|\.map$"
# Scan for each pattern
for secret_type in "${!SECRET_PATTERNS[@]}"; do
pattern="${SECRET_PATTERNS[$secret_type]}"
# Search in git tracked files only
results=$(git ls-files | grep -vE "$EXCLUDE_PATTERNS" | xargs grep -HnE "$pattern" 2>/dev/null || true)
if [ -n "$results" ]; then
log_finding "CRITICAL" "Secret Detection" "Found $secret_type"
echo "$results" >> "$SECRET_SCAN_FILE"
echo "---" >> "$SECRET_SCAN_FILE"
fi
done
if [ -f "$SECRET_SCAN_FILE" ] && [ -s "$SECRET_SCAN_FILE" ]; then
echo "⚠️ Found hardcoded secrets - see report for details"
else
echo "✅ No hardcoded secrets detected"
fi
# ============================================================================
# SCAN 3: OWASP TOP 10 CODE ANALYSIS
# ============================================================================
log_section "3. OWASP Top 10 Code Analysis"
echo "Scanning for common web vulnerabilities..."
# OWASP patterns to detect
declare -A OWASP_PATTERNS=(
["SQL Injection"]='(query|execute)\s*\(\s*["\047].*\+|SELECT.*FROM.*WHERE.*\+|INSERT INTO.*VALUES.*\+'
["XSS - innerHTML"]='innerHTML\s*=\s*.*\+'
["XSS - dangerouslySetInnerHTML"]='dangerouslySetInnerHTML.*__html:'
["Command Injection"]='(exec|spawn|system)\s*\(\s*.*\+'
["Path Traversal"]='\.\./'
["Eval Usage"]='eval\s*\('
["Insecure Random"]='Math\.random\(\)'
["Weak Crypto"]='md5|sha1'
)
# File patterns to scan (source code only)
SOURCE_PATTERNS="\.js$|\.jsx$|\.ts$|\.tsx$|\.py$|\.php$|\.rb$"
for vuln_type in "${!OWASP_PATTERNS[@]}"; do
pattern="${OWASP_PATTERNS[$vuln_type]}"
# Search in source files
results=$(git ls-files | grep -E "$SOURCE_PATTERNS" | grep -vE "$EXCLUDE_PATTERNS" | xargs grep -HnE "$pattern" 2>/dev/null || true)
if [ -n "$results" ]; then
# Determine severity based on vulnerability type
case "$vuln_type" in
*"SQL Injection"*|*"Command Injection"*)
severity="CRITICAL"
;;
*"XSS"*|*"Path Traversal"*)
severity="HIGH"
;;
*"Eval"*|*"Weak Crypto"*)
severity="MEDIUM"
;;
*)
severity="LOW"
;;
esac
log_finding "$severity" "Code Vulnerability" "$vuln_type detected"
echo "$results" >> "$CODE_SCAN_FILE"
echo "---" >> "$CODE_SCAN_FILE"
fi
done
if [ -f "$CODE_SCAN_FILE" ] && [ -s "$CODE_SCAN_FILE" ]; then
echo "⚠️ Found potential code vulnerabilities - see report for details"
else
echo "✅ No obvious code vulnerabilities detected"
fi
# ============================================================================
# SCAN 4: SECURITY CONFIGURATION CHECK
# ============================================================================
log_section "4. Security Configuration Check"
echo "Checking security configurations..."
# Check for HTTPS enforcement
if [ -f "package.json" ]; then
# Check scripts for HTTPS
if grep -q "http://localhost" package.json 2>/dev/null; then
log_finding "INFO" "Configuration" "Development server using HTTP (localhost is acceptable)"
fi
# Check for security-related dependencies
if grep -q "helmet" package.json 2>/dev/null; then
echo "✅ Found helmet (security headers middleware)"
else
log_finding "MEDIUM" "Configuration" "Missing helmet - no HTTP security headers"
fi
if grep -q "cors" package.json 2>/dev/null; then
echo "✅ Found cors middleware"
# Check for permissive CORS
if git ls-files | xargs grep -E "cors\(\s*\{" 2>/dev/null | grep -q "origin.*\*"; then
log_finding "HIGH" "Configuration" "Permissive CORS - allows all origins (*)"
fi
fi
# Check for environment variable usage
if git ls-files | grep -E "\.js$|\.ts$" | xargs grep -q "process\.env\." 2>/dev/null; then
echo "✅ Using environment variables"
else
log_finding "LOW" "Configuration" "No environment variables detected - check config management"
fi
fi
# Check for .env in git
if git ls-files | grep -q "^\.env$" 2>/dev/null; then
log_finding "CRITICAL" "Configuration" ".env file is tracked in git - contains secrets!"
fi
# Check for proper .gitignore
if [ -f ".gitignore" ]; then
if grep -q "\.env" .gitignore 2>/dev/null; then
echo "✅ .env properly ignored"
else
log_finding "MEDIUM" "Configuration" ".env not in .gitignore"
fi
if grep -q "node_modules" .gitignore 2>/dev/null; then
echo "✅ node_modules properly ignored"
else
log_finding "LOW" "Configuration" "node_modules not in .gitignore"
fi
fi
echo "✅ Configuration check complete"
# ============================================================================
# GENERATE REPORT
# ============================================================================
log_section "Generating Security Report"
# Calculate overall risk
RISK_SCORE=$(calculate_risk_score)
RISK_LEVEL=$(get_risk_level "$RISK_SCORE")
echo "Risk Score: $RISK_SCORE"
echo "Risk Level: $RISK_LEVEL"
echo ""
echo "Findings:"
echo " 🔴 Critical: $CRITICAL_COUNT"
echo " 🟠 High: $HIGH_COUNT"
echo " 🟡 Medium: $MEDIUM_COUNT"
echo " 🔵 Low: $LOW_COUNT"
echo " Info: $INFO_COUNT"
# Generate markdown report
cat > "$REPORT_FILE" << EOF
# Security Audit Report
**Generated**: $(date '+%Y-%m-%d %H:%M:%S')
**Repository**: $(basename "$(git rev-parse --show-toplevel)")
**Branch**: $(git rev-parse --abbrev-ref HEAD)
**Scan Depth**: $SCAN_DEPTH
**Severity Threshold**: $SEVERITY_THRESHOLD
---
## Executive Summary
**Overall Risk Score**: $RISK_SCORE
**Risk Level**: $RISK_LEVEL
### Findings Summary
| Severity | Count |
|----------|-------|
| 🔴 Critical | $CRITICAL_COUNT |
| 🟠 High | $HIGH_COUNT |
| 🟡 Medium | $MEDIUM_COUNT |
| 🔵 Low | $LOW_COUNT |
| Info | $INFO_COUNT |
**Risk Assessment**:
- **0-9**: Low risk - minimal security concerns
- **10-19**: Medium risk - some vulnerabilities need attention
- **20-49**: High risk - significant security issues present
- **50+**: Critical risk - immediate action required
---
## 1. Dependency Vulnerabilities
EOF
if [ "$HAS_PACKAGE_JSON" = true ] && [ -f "$DEP_SCAN_FILE" ]; then
cat >> "$REPORT_FILE" << EOF
### npm Audit Results
\`\`\`json
$(cat "$DEP_SCAN_FILE")
\`\`\`
**Remediation**:
- Run \`npm audit fix\` to automatically fix vulnerabilities
- Run \`npm audit fix --force\` for breaking changes (review first!)
- Manually update packages that cannot be auto-fixed
EOF
else
cat >> "$REPORT_FILE" << EOF
No dependency scan performed (package.json not found).
EOF
fi
# Secret detection section
cat >> "$REPORT_FILE" << EOF
---
## 2. Secret Detection
EOF
if [ -f "$SECRET_SCAN_FILE" ] && [ -s "$SECRET_SCAN_FILE" ]; then
cat >> "$REPORT_FILE" << EOF
⚠️ **Hardcoded secrets detected!**
\`\`\`
$(cat "$SECRET_SCAN_FILE")
\`\`\`
**Remediation**:
1. Remove all hardcoded secrets from code
2. Use environment variables (\`.env\` files)
3. Add \`.env\` to \`.gitignore\`
4. Rotate all exposed credentials immediately
5. Use secret management tools (AWS Secrets Manager, HashiCorp Vault, etc.)
EOF
else
cat >> "$REPORT_FILE" << EOF
✅ No hardcoded secrets detected.
EOF
fi
# Code vulnerabilities section
cat >> "$REPORT_FILE" << EOF
---
## 3. Code Vulnerabilities (OWASP Top 10)
EOF
if [ -f "$CODE_SCAN_FILE" ] && [ -s "$CODE_SCAN_FILE" ]; then
cat >> "$REPORT_FILE" << EOF
⚠️ **Potential code vulnerabilities detected!**
\`\`\`
$(cat "$CODE_SCAN_FILE")
\`\`\`
**Remediation**:
- **SQL Injection**: Use parameterized queries/ORMs
- **XSS**: Sanitize user input, use React's built-in XSS protection
- **Command Injection**: Validate and sanitize all user input
- **Path Traversal**: Validate file paths, use path.resolve()
- **Eval**: Remove eval(), use safer alternatives
- **Weak Crypto**: Use bcrypt/argon2 for passwords, SHA-256+ for hashing
EOF
else
cat >> "$REPORT_FILE" << EOF
✅ No obvious code vulnerabilities detected.
EOF
fi
# Configuration section
cat >> "$REPORT_FILE" << EOF
---
## 4. Security Configuration
See findings above for configuration issues.
**Recommended Security Headers** (use helmet.js):
\`\`\`javascript
app.use(helmet({
contentSecurityPolicy: true,
hsts: true,
noSniff: true,
xssFilter: true
}));
\`\`\`
**Recommended CORS Configuration**:
\`\`\`javascript
app.use(cors({
origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
credentials: true
}));
\`\`\`
---
## 5. Remediation Recommendations
### Priority 1: Critical (Fix Immediately)
EOF
if [ "$CRITICAL_COUNT" -gt 0 ]; then
cat >> "$REPORT_FILE" << EOF
$CRITICAL_COUNT critical issues found:
- Review dependency vulnerabilities with CRITICAL severity
- Remove all hardcoded secrets and rotate credentials
- Fix SQL injection and command injection vulnerabilities
- Check if .env is committed to git
EOF
else
cat >> "$REPORT_FILE" << EOF
✅ No critical issues found.
EOF
fi
cat >> "$REPORT_FILE" << EOF
### Priority 2: High (Fix This Week)
EOF
if [ "$HIGH_COUNT" -gt 0 ]; then
cat >> "$REPORT_FILE" << EOF
$HIGH_COUNT high-severity issues found:
- Update dependencies with HIGH severity vulnerabilities
- Fix XSS and path traversal vulnerabilities
- Review permissive CORS configurations
EOF
else
cat >> "$REPORT_FILE" << EOF
✅ No high-severity issues found.
EOF
fi
cat >> "$REPORT_FILE" << EOF
### Priority 3: Medium (Fix This Sprint)
EOF
if [ "$MEDIUM_COUNT" -gt 0 ]; then
cat >> "$REPORT_FILE" << EOF
$MEDIUM_COUNT medium-severity issues found:
- Add helmet for security headers
- Fix weak cryptography usage
- Add .env to .gitignore if missing
EOF
else
cat >> "$REPORT_FILE" << EOF
✅ No medium-severity issues found.
EOF
fi
cat >> "$REPORT_FILE" << EOF
### Priority 4: Low & Info (Address in Backlog)
$LOW_COUNT low-severity + $INFO_COUNT info findings.
---
## Next Steps
1. **Immediate**: Address all CRITICAL findings
2. **This Week**: Fix HIGH severity issues
3. **This Sprint**: Resolve MEDIUM issues
4. **Ongoing**: Set up automated security scanning in CI/CD
5. **Monthly**: Run \`/specswarm:security-audit\` regularly
---
## Additional Resources
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [npm Audit Documentation](https://docs.npmjs.com/cli/v8/commands/npm-audit)
- [Helmet.js Security Headers](https://helmetjs.github.io/)
- [NIST Vulnerability Database](https://nvd.nist.gov/)
---
**Generated by**: SpecSwarm v3.1.0 Security Audit
**Command**: \`/specswarm:security-audit\`
EOF
echo "✅ Report generated: $REPORT_FILE"
# ============================================================================
# SUMMARY
# ============================================================================
log_section "Security Audit Complete"
echo "Report saved to: $REPORT_FILE"
echo ""
echo "Summary:"
echo " Risk Level: $RISK_LEVEL ($RISK_SCORE points)"
echo " Critical: $CRITICAL_COUNT"
echo " High: $HIGH_COUNT"
echo " Medium: $MEDIUM_COUNT"
echo " Low: $LOW_COUNT"
echo " Info: $INFO_COUNT"
echo ""
if [ "$CRITICAL_COUNT" -gt 0 ]; then
echo "⚠️ CRITICAL ISSUES FOUND - Immediate action required!"
echo " Review $REPORT_FILE for details and remediation steps"
elif [ "$HIGH_COUNT" -gt 0 ]; then
echo "⚠️ HIGH SEVERITY ISSUES - Address within the week"
echo " Review $REPORT_FILE for details"
elif [ "$MEDIUM_COUNT" -gt 0 ]; then
echo "✅ No critical issues, but $MEDIUM_COUNT medium-severity findings"
echo " Review $REPORT_FILE for improvements"
else
echo "✅ No significant security issues detected"
echo " Good job! Keep running regular security audits"
fi
echo ""
echo "Next: Review the report and prioritize remediation work"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
```
---
## Examples
### Example 1: Quick Security Scan
```bash
/specswarm:security-audit
# Select: Quick scan
# Select: All findings
# Result: security-audit-2025-01-15.md generated in ~1 minute
```
### Example 2: Pre-Release Audit
```bash
/specswarm:security-audit
# Select: Thorough scan
# Select: High and above
# Select: Yes, auto-fix
# Result: Comprehensive audit with auto-fixed dependencies
```
### Example 3: CI/CD Integration
```yaml
# .github/workflows/security.yml
name: Security Audit
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: /specswarm:security-audit
- run: |
if grep -q "CRITICAL" security-audit-*.md; then
echo "Critical vulnerabilities found!"
exit 1
fi
```
---
## Notes
- **False Positives**: Pattern matching may produce false positives - review all findings
- **Complementary Tools**: Consider using additional tools (Snyk, SonarQube, Dependabot)
- **Regular Scans**: Run monthly or before major releases
- **Auto-Fix**: Use with caution - test thoroughly after auto-fixing dependencies
- **Secret Rotation**: If secrets are found, rotate them immediately even after removal
---
## See Also
- `/specswarm:release` - Includes security audit as part of release checklist
- `/specswarm:analyze-quality` - Code quality analysis
- `/specswarm:ship` - Enforces quality gates before merge
---
**Version**: 3.1.0
**Category**: Security & Quality
**Estimated Time**: 1-10 minutes (depending on scan depth)

244
commands/ship.md Normal file
View File

@@ -0,0 +1,244 @@
---
description: Quality-gated merge to parent branch - validates code quality before allowing merge
args:
- name: --force-quality
description: Override quality threshold (e.g., --force-quality 70)
required: false
- name: --skip-tests
description: Skip test validation (not recommended)
required: false
---
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute final quality gate validation and merge to parent branch.
**Purpose**: Enforce quality standards before merging features/bugfixes, preventing low-quality code from entering the codebase.
**Workflow**: Quality Analysis → Threshold Check → Merge (if passing)
**Quality Gates**:
- Default threshold: 80% quality score
- Configurable via `--force-quality` flag
- Reads `.specswarm/quality-standards.md` for project-specific thresholds
---
## Pre-Flight Checks
```bash
# Ensure we're in a git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "❌ Error: Not in a git repository"
echo ""
echo "This command must be run from within a git repository."
exit 1
fi
# Get repository root
REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT"
# Parse arguments
FORCE_QUALITY=""
SKIP_TESTS=false
for arg in $ARGUMENTS; do
case "$arg" in
--force-quality)
shift
FORCE_QUALITY="$1"
;;
--skip-tests)
SKIP_TESTS=true
;;
esac
done
```
---
## Execution Steps
### Step 1: Display Banner
```bash
echo "🚢 SpecSwarm Ship - Quality-Gated Merge"
echo "══════════════════════════════════════════"
echo ""
echo "This command enforces quality standards before merge:"
echo " 1. Runs comprehensive quality analysis"
echo " 2. Checks quality score meets threshold"
echo " 3. If passing: merges to parent branch"
echo " 4. If failing: reports issues and blocks merge"
echo ""
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo "📍 Current branch: $CURRENT_BRANCH"
echo ""
```
---
### Step 2: Run Quality Analysis
**YOU MUST NOW run the quality analysis using the SlashCommand tool:**
```
Use the SlashCommand tool to execute: /specswarm:analyze-quality
```
Wait for the quality analysis to complete and extract the quality score from the output.
**Expected Output Pattern**: Look for quality score in output (e.g., "Overall Quality: 85%")
Store the quality score as QUALITY_SCORE.
---
### Step 3: Check Quality Threshold
**YOU MUST NOW check if quality meets threshold:**
```bash
# Determine threshold
DEFAULT_THRESHOLD=80
# Check for project-specific threshold in .specswarm/quality-standards.md
THRESHOLD=$DEFAULT_THRESHOLD
if [ -f ".specswarm/quality-standards.md" ]; then
# Try to extract threshold from quality standards file
PROJECT_THRESHOLD=$(grep -i "^quality_threshold:" .specswarm/quality-standards.md | grep -oE '[0-9]+' || echo "")
if [ -n "$PROJECT_THRESHOLD" ]; then
THRESHOLD=$PROJECT_THRESHOLD
echo "📋 Using project quality threshold: ${THRESHOLD}%"
fi
fi
# Override with --force-quality if provided
if [ -n "$FORCE_QUALITY" ]; then
THRESHOLD=$FORCE_QUALITY
echo "⚠️ Quality threshold overridden: ${THRESHOLD}%"
fi
echo ""
echo "🎯 Quality Threshold: ${THRESHOLD}%"
echo "📊 Actual Quality Score: ${QUALITY_SCORE}%"
echo ""
```
**Decision Logic**:
IF QUALITY_SCORE >= THRESHOLD:
- ✅ Quality gate PASSED
- Proceed to Step 4 (Merge)
ELSE:
- ❌ Quality gate FAILED
- Display failure message
- List top issues from analysis
- Suggest fixes
- EXIT without merging
```bash
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ]; then
echo "✅ Quality gate PASSED (${QUALITY_SCORE}% >= ${THRESHOLD}%)"
echo ""
else
echo "❌ Quality gate FAILED (${QUALITY_SCORE}% < ${THRESHOLD}%)"
echo ""
echo "The code quality does not meet the required threshold."
echo ""
echo "🔧 Recommended Actions:"
echo " 1. Review the quality analysis output above"
echo " 2. Address critical and high-priority issues"
echo " 3. Run /specswarm:analyze-quality again to verify improvements"
echo " 4. Run /specswarm:ship again when quality improves"
echo ""
echo "💡 Alternatively:"
echo " - Override threshold: /specswarm:ship --force-quality 70"
echo " - Note: Overriding quality gates is not recommended for production code"
echo ""
exit 1
fi
```
---
### Step 4: Merge to Parent Branch
**Quality gate passed! YOU MUST NOW merge using the SlashCommand tool:**
```
Use the SlashCommand tool to execute: /specswarm:complete
```
Wait for the merge to complete.
---
### Step 5: Success Report
**After successful merge, display:**
```bash
echo ""
echo "══════════════════════════════════════════"
echo "🎉 SHIP SUCCESSFUL"
echo "══════════════════════════════════════════"
echo ""
echo "✅ Quality gate passed (${QUALITY_SCORE}%)"
echo "✅ Merged to parent branch"
echo "✅ Feature/bugfix complete"
echo ""
echo "📝 Next Steps:"
echo " - Pull latest changes in other branches"
echo " - Consider creating a release tag if ready"
echo " - Update project documentation if needed"
echo ""
```
---
## Error Handling
If any step fails:
1. **Quality analysis fails**: Report error and suggest checking logs
2. **Quality threshold not met**: Display issues and exit (see Step 3)
3. **Merge fails**: Report git errors and suggest manual resolution
**All errors should EXIT with clear remediation steps.**
---
## Notes
**Design Philosophy**:
- Quality gates prevent technical debt accumulation
- Encourages addressing issues before merge (not after)
- Configurable thresholds balance strictness with pragmatism
- Override flag available but discouraged for production code
**Quality Standards File** (`.specswarm/quality-standards.md`):
```yaml
---
quality_threshold: 85
enforce_gates: true
---
# Project Quality Standards
Minimum quality threshold: 85%
...
```
If `enforce_gates: false`, ship will warn but not block merge.

431
commands/specify.md Normal file
View File

@@ -0,0 +1,431 @@
---
description: Create or update the feature specification from a natural language feature description.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
The text the user typed after `/speckit.specify` in the triggering message **is** the feature description. Assume you always have it available in this conversation even if `{ARGS}` appears literally below. Do not ask the user to repeat it unless they provided an empty command.
Given that feature description, do this:
1. **Create New Feature Structure** (replaces script execution):
a. **Find Repository Root and Initialize Features Directory**:
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory (handles migration if needed)
ensure_features_dir "$REPO_ROOT"
```
b. **Determine Next Feature Number**:
```bash
# Get next feature number using helper
FEATURE_NUM=$(get_next_feature_number "$REPO_ROOT")
```
c. **Create Feature Slug from Description**:
```bash
# Convert description to kebab-case
# Example: "User Authentication System" → "user-authentication-system"
SLUG=$(echo "$ARGUMENTS" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//' | sed 's/-$//')
```
d. **Capture Parent Branch and Create Feature Branch** (if git available):
```bash
BRANCH_NAME="${FEATURE_NUM}-${SLUG}"
if git rev-parse --git-dir >/dev/null 2>&1; then
# Capture current branch as parent BEFORE switching
PARENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Branch Setup"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Parent branch: $PARENT_BRANCH (current branch)"
echo " Feature branch: $BRANCH_NAME (will be created)"
echo ""
echo " The feature branch will be created from $PARENT_BRANCH."
echo " When complete, it will merge back to $PARENT_BRANCH."
echo ""
read -p "Is this correct? (y/n): " branch_confirm
if [ "$branch_confirm" != "y" ]; then
echo ""
echo "❌ Branch setup cancelled"
echo ""
echo "Please checkout the correct parent branch first, then run:"
echo " /specswarm:specify \"$FEATURE_DESCRIPTION\""
exit 0
fi
echo ""
# Create and switch to new feature branch
git checkout -b "$BRANCH_NAME"
else
# Non-git: use environment variable
export SPECIFY_FEATURE="$BRANCH_NAME"
PARENT_BRANCH="unknown"
fi
```
e. **Create Feature Directory Structure**:
```bash
FEATURE_DIR="${FEATURES_DIR}/${FEATURE_NUM}-${SLUG}"
mkdir -p "${FEATURE_DIR}/checklists"
mkdir -p "${FEATURE_DIR}/contracts"
```
f. **Set Path Variables** (use these for remainder of command):
```bash
SPEC_FILE="${FEATURE_DIR}/spec.md"
CHECKLISTS_DIR="${FEATURE_DIR}/checklists"
```
2. Load spec template to understand required sections:
- Try to read `templates/spec-template.md` if it exists
- If template missing, use this embedded minimal template:
```markdown
# Feature: [Feature Name]
## Overview
[Brief description of the feature and its purpose]
## User Scenarios
[Key user flows and scenarios]
## Functional Requirements
[What the system must do]
## Success Criteria
[Measurable outcomes that define success]
## Key Entities
[Important data entities involved]
## Assumptions
[Documented assumptions and reasonable defaults]
```
3. **Parse the user's feature description** from `$ARGUMENTS` and validate:
- If empty: ERROR "No feature description provided"
- Extract key concepts: actors, actions, data, constraints
4. **Framework & Dependency Compatibility Check** (for upgrade/migration features):
If the feature description mentions dependency upgrades (PHP, Laravel, Node, framework versions, etc.), perform compatibility validation:
a. **Detect Upgrade Context**:
```bash
# Check if feature involves upgrades
INVOLVES_UPGRADE=$(echo "$ARGUMENTS" | grep -iE '(upgrade|migrat|updat).*(php|laravel|node|framework|version|[0-9]\.[0-9])')
```
b. **Read Project Dependencies** (if upgrade detected):
```bash
if [ -n "$INVOLVES_UPGRADE" ] && [ -f "${REPO_ROOT}/composer.json" ]; then
# Extract PHP requirement
PHP_CURRENT=$(grep -Po '(?<="php":\s")[^"]+' "${REPO_ROOT}/composer.json" 2>/dev/null)
# Extract Laravel/framework version
FRAMEWORK=$(grep -Po '(?<="laravel/framework":\s")[^"]+' "${REPO_ROOT}/composer.json" 2>/dev/null)
fi
```
c. **Cross-Reference Compatibility Matrices**:
When upgrade targets are identified in the feature description, check known compatibility constraints:
**Laravel Compatibility Matrix**:
- Laravel 5.8: PHP 7.2 - 7.4 ONLY
- Laravel 6.x: PHP 7.2 - 8.0
- Laravel 7.x: PHP 7.2 - 8.0
- Laravel 8.x: PHP 7.3 - 8.1
- Laravel 9.x: PHP 8.0 - 8.2
- Laravel 10.x: PHP 8.1 - 8.3
- Laravel 11.x: PHP 8.2 - 8.3
**Key Detection Rules**:
- If feature mentions "PHP 8.x upgrade" AND Laravel 5.8 detected → BLOCKER
- If feature mentions "PHP 8.x upgrade" AND Laravel 6-7 detected → WARNING (check target PHP version)
- If feature mentions framework upgrade dependencies → Include in spec
d. **Add Blockers Section to Spec** (if incompatibilities found):
If compatibility issues detected, add this section AFTER "Overview" and BEFORE "User Scenarios":
```markdown
## ⚠️ CRITICAL BLOCKERS & DEPENDENCIES
### [Framework] Version Incompatibility
**Issue**: [Current framework version] officially supports [compatible versions] only.
**Current State**:
- Framework: [Detected version from composer.json]
- Target: [Upgrade target from feature description]
- Compatibility: ❌ NOT COMPATIBLE
**Resolution Options**:
1. **Recommended**: Upgrade framework first
- Path: [Current] → [Intermediate versions] → [Target compatible version]
- Benefit: Official support, maintained compatibility
- Timeline: [Estimated complexity]
2. **Community Patches**: Use unofficial compatibility patches
- Benefit: Faster, smaller scope
- Risk: Unsupported, may break in production
- Recommendation: NOT recommended for production
3. **Stay on Compatible Version**: Delay target upgrade
- Keep: [Current compatible version]
- Timeline: [Until when it's supported]
- Benefit: Stable, supported
4. **Accept Risk**: Proceed with unsupported configuration
- Risk: High - potential breaking changes
- Required: Extensive testing, acceptance of maintenance burden
- Recommendation: Only if timeline critical and resources available
**Recommended Path**: [Most appropriate option with reasoning]
**Impact on This Feature**: This blocker must be resolved before beginning implementation. Consider creating separate features for:
- Feature XXX: [Framework] upgrade to [compatible version]
- Feature YYY: [Dependency] upgrade (this feature, dependent on XXX)
```
e. **Document Assumptions About Compatibility**:
Even if no blockers found, add relevant assumptions to the Assumptions section:
- "Framework version [X] is compatible with [upgrade target]"
- "Standard upgrade path follows: [path]"
- "Breaking changes from [source docs URL] have been reviewed"
5. Follow this execution flow:
1. For unclear aspects:
- Make informed guesses based on context and industry standards
- Only mark with [NEEDS CLARIFICATION: specific question] if:
- The choice significantly impacts feature scope or user experience
- Multiple reasonable interpretations exist with different implications
- No reasonable default exists
- **LIMIT: Maximum 3 [NEEDS CLARIFICATION] markers total**
- Prioritize clarifications by impact: scope > security/privacy > user experience > technical details
2. Fill User Scenarios & Testing section
If no clear user flow: ERROR "Cannot determine user scenarios"
3. Generate Functional Requirements
Each requirement must be testable
Use reasonable defaults for unspecified details (document assumptions in Assumptions section)
4. Define Success Criteria
Create measurable, technology-agnostic outcomes
Include both quantitative metrics (time, performance, volume) and qualitative measures (user satisfaction, task completion)
Each criterion must be verifiable without implementation details
5. Identify Key Entities (if data involved)
6. Return: SUCCESS (spec ready for planning)
5. Write the specification to SPEC_FILE using the template structure, replacing placeholders with concrete details derived from the feature description (arguments) while preserving section order and headings.
**IMPORTANT: Include YAML Frontmatter**:
The spec.md file MUST start with YAML frontmatter containing metadata:
```yaml
---
parent_branch: ${PARENT_BRANCH}
feature_number: ${FEATURE_NUM}
status: In Progress
created_at: $(date -Iseconds)
---
```
This metadata enables the `/specswarm:complete` command to merge back to the correct parent branch.
6. **Specification Quality Validation**: After writing the initial spec, validate it against quality criteria:
a. **Create Spec Quality Checklist**: Generate a checklist file at `FEATURE_DIR/checklists/requirements.md` using the checklist template structure with these validation items:
```markdown
# Specification Quality Checklist: [FEATURE NAME]
**Purpose**: Validate specification completeness and quality before proceeding to planning
**Created**: [DATE]
**Feature**: [Link to spec.md]
## Content Quality
- [ ] No implementation details (languages, frameworks, APIs)
- [ ] Focused on user value and business needs
- [ ] Written for non-technical stakeholders
- [ ] All mandatory sections completed
## Requirement Completeness
- [ ] No [NEEDS CLARIFICATION] markers remain
- [ ] Requirements are testable and unambiguous
- [ ] Success criteria are measurable
- [ ] Success criteria are technology-agnostic (no implementation details)
- [ ] All acceptance scenarios are defined
- [ ] Edge cases are identified
- [ ] Scope is clearly bounded
- [ ] Dependencies and assumptions identified
## Feature Readiness
- [ ] All functional requirements have clear acceptance criteria
- [ ] User scenarios cover primary flows
- [ ] Feature meets measurable outcomes defined in Success Criteria
- [ ] No implementation details leak into specification
## Notes
- Items marked incomplete require spec updates before `/speckit.clarify` or `/speckit.plan`
```
b. **Run Validation Check**: Review the spec against each checklist item:
- For each item, determine if it passes or fails
- Document specific issues found (quote relevant spec sections)
c. **Handle Validation Results**:
- **If all items pass**: Mark checklist complete and proceed to step 6
- **If items fail (excluding [NEEDS CLARIFICATION])**:
1. List the failing items and specific issues
2. Update the spec to address each issue
3. Re-run validation until all items pass (max 3 iterations)
4. If still failing after 3 iterations, document remaining issues in checklist notes and warn user
- **If [NEEDS CLARIFICATION] markers remain**:
1. Extract all [NEEDS CLARIFICATION: ...] markers from the spec
2. **LIMIT CHECK**: If more than 3 markers exist, keep only the 3 most critical (by scope/security/UX impact) and make informed guesses for the rest
3. For each clarification needed (max 3), present options to user in this format:
```markdown
## Question [N]: [Topic]
**Context**: [Quote relevant spec section]
**What we need to know**: [Specific question from NEEDS CLARIFICATION marker]
**Suggested Answers**:
| Option | Answer | Implications |
|--------|--------|--------------|
| A | [First suggested answer] | [What this means for the feature] |
| B | [Second suggested answer] | [What this means for the feature] |
| C | [Third suggested answer] | [What this means for the feature] |
| Custom | Provide your own answer | [Explain how to provide custom input] |
**Your choice**: _[Wait for user response]_
```
4. **CRITICAL - Table Formatting**: Ensure markdown tables are properly formatted:
- Use consistent spacing with pipes aligned
- Each cell should have spaces around content: `| Content |` not `|Content|`
- Header separator must have at least 3 dashes: `|--------|`
- Test that the table renders correctly in markdown preview
5. Number questions sequentially (Q1, Q2, Q3 - max 3 total)
6. Present all questions together before waiting for responses
7. Wait for user to respond with their choices for all questions (e.g., "Q1: A, Q2: Custom - [details], Q3: B")
8. Update the spec by replacing each [NEEDS CLARIFICATION] marker with the user's selected or provided answer
9. Re-run validation after all clarifications are resolved
d. **Update Checklist**: After each validation iteration, update the checklist file with current pass/fail status
7. Report completion with:
- Branch name (if git repo)
- Feature directory path
- Spec file path
- Checklist results
- Readiness for next phase (`/clarify` or `/plan`)
**NOTE:** This command creates the feature branch (if git), initializes the feature directory structure, and creates the initial spec.md file.
## General Guidelines
## Quick Guidelines
- Focus on **WHAT** users need and **WHY**.
- Avoid HOW to implement (no tech stack, APIs, code structure).
- Written for business stakeholders, not developers.
- DO NOT create any checklists that are embedded in the spec. That will be a separate command.
### Section Requirements
- **Mandatory sections**: Must be completed for every feature
- **Optional sections**: Include only when relevant to the feature
- When a section doesn't apply, remove it entirely (don't leave as "N/A")
### For AI Generation
When creating this spec from a user prompt:
1. **Make informed guesses**: Use context, industry standards, and common patterns to fill gaps
2. **Document assumptions**: Record reasonable defaults in the Assumptions section
3. **Limit clarifications**: Maximum 3 [NEEDS CLARIFICATION] markers - use only for critical decisions that:
- Significantly impact feature scope or user experience
- Have multiple reasonable interpretations with different implications
- Lack any reasonable default
4. **Prioritize clarifications**: scope > security/privacy > user experience > technical details
5. **Think like a tester**: Every vague requirement should fail the "testable and unambiguous" checklist item
6. **Common areas needing clarification** (only if no reasonable default exists):
- Feature scope and boundaries (include/exclude specific use cases)
- User types and permissions (if multiple conflicting interpretations possible)
- Security/compliance requirements (when legally/financially significant)
**Examples of reasonable defaults** (don't ask about these):
- Data retention: Industry-standard practices for the domain
- Performance targets: Standard web/mobile app expectations unless specified
- Error handling: User-friendly messages with appropriate fallbacks
- Authentication method: Standard session-based or OAuth2 for web apps
- Integration patterns: RESTful APIs unless specified otherwise
### Success Criteria Guidelines
Success criteria must be:
1. **Measurable**: Include specific metrics (time, percentage, count, rate)
2. **Technology-agnostic**: No mention of frameworks, languages, databases, or tools
3. **User-focused**: Describe outcomes from user/business perspective, not system internals
4. **Verifiable**: Can be tested/validated without knowing implementation details
**Good examples**:
- "Users can complete checkout in under 3 minutes"
- "System supports 10,000 concurrent users"
- "95% of searches return results in under 1 second"
- "Task completion rate improves by 40%"
**Bad examples** (implementation-focused):
- "API response time is under 200ms" (too technical, use "Users see results instantly")
- "Database can handle 1000 TPS" (implementation detail, use user-facing metric)
- "React components render efficiently" (framework-specific)
- "Redis cache hit rate above 80%" (technology-specific)

292
commands/suggest.md Normal file
View File

@@ -0,0 +1,292 @@
---
description: AI-powered workflow recommendation based on context analysis
---
## User Input
```text
$ARGUMENTS
```
## Goal
Analyze current context (branch name, commits, file changes, user description) and recommend the most appropriate workflow.
---
## Execution Steps
### 1. Gather Context
```bash
echo "🤖 Workflow Suggestion - Analyzing Context..."
# Branch name
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
# Recent commits
RECENT_COMMITS=$(git log -5 --oneline 2>/dev/null)
# Changed files
CHANGED_FILES=$(git diff --name-only HEAD~5..HEAD 2>/dev/null)
# Uncommitted changes
UNCOMMITTED=$(git status --porcelain 2>/dev/null | head -10)
# User description (if provided)
USER_DESCRIPTION=$ARGUMENTS
```
---
### 2. Analyze Patterns
**Branch Name Analysis:**
```bash
if [[ "$CURRENT_BRANCH" =~ ^feature/ ]]; then
PATTERN_SCORE["feature"]=5
elif [[ "$CURRENT_BRANCH" =~ ^bugfix/ ]]; then
PATTERN_SCORE["bugfix"]=10
elif [[ "$CURRENT_BRANCH" =~ ^modify/ ]]; then
PATTERN_SCORE["modify"]=10
elif [[ "$CURRENT_BRANCH" =~ ^hotfix/ ]]; then
PATTERN_SCORE["hotfix"]=10
elif [[ "$CURRENT_BRANCH" =~ ^refactor/ ]]; then
PATTERN_SCORE["refactor"]=10
elif [[ "$CURRENT_BRANCH" =~ ^deprecate/ ]]; then
PATTERN_SCORE["deprecate"]=10
fi
```
**Commit Message Analysis:**
```bash
# Look for keywords in commits
if echo "$RECENT_COMMITS" | grep -qi "fix\|bug\|issue"; then
PATTERN_SCORE["bugfix"]+=3
fi
if echo "$RECENT_COMMITS" | grep -qi "refactor\|cleanup\|improve"; then
PATTERN_SCORE["refactor"]+=3
fi
if echo "$RECENT_COMMITS" | grep -qi "hotfix\|emergency\|critical"; then
PATTERN_SCORE["hotfix"]+=5
fi
if echo "$RECENT_COMMITS" | grep -qi "deprecate\|remove\|sunset"; then
PATTERN_SCORE["deprecate"]+=3
fi
if echo "$RECENT_COMMITS" | grep -qi "modify\|update\|change"; then
PATTERN_SCORE["modify"]+=2
fi
```
**File Change Analysis:**
```bash
# Analyze changed files
FILE_COUNT=$(echo "$CHANGED_FILES" | wc -l)
if [ "$FILE_COUNT" -gt 10 ]; then
# Many files changed - likely refactor or major modify
PATTERN_SCORE["refactor"]+=2
PATTERN_SCORE["modify"]+=2
fi
# Check for test file changes
if echo "$CHANGED_FILES" | grep -qi "test\|spec"; then
PATTERN_SCORE["bugfix"]+=1 # Tests often accompany bug fixes
fi
```
**User Description Analysis:**
```bash
if [ -n "$USER_DESCRIPTION" ]; then
# Analyze user description for keywords
if echo "$USER_DESCRIPTION" | grep -qi "bug\|fix\|broken\|not working"; then
PATTERN_SCORE["bugfix"]+=5
fi
if echo "$USER_DESCRIPTION" | grep -qi "emergency\|critical\|urgent\|hotfix\|down"; then
PATTERN_SCORE["hotfix"]+=7
fi
if echo "$USER_DESCRIPTION" | grep -qi "refactor\|clean\|improve quality"; then
PATTERN_SCORE["refactor"]+=5
fi
if echo "$USER_DESCRIPTION" | grep -qi "modify\|change\|update\|add to"; then
PATTERN_SCORE["modify"]+=5
fi
if echo "$USER_DESCRIPTION" | grep -qi "deprecate\|remove\|sunset\|phase out"; then
PATTERN_SCORE["deprecate"]+=5
fi
fi
```
---
### 3. Generate Recommendations
```markdown
# Workflow Recommendation
**Analysis Date**: YYYY-MM-DD
---
## Context Analysis
**Branch**: ${CURRENT_BRANCH}
**Recent Activity**:
- Commits analyzed: [N]
- Files changed: [N]
- Keywords found: [list]
**User Description**: ${USER_DESCRIPTION}
---
## Pattern Scores
| Workflow | Score | Confidence |
|----------|-------|------------|
| Bugfix | [N] | [High/Med/Low] |
| Modify | [N] | [High/Med/Low] |
| Hotfix | [N] | [High/Med/Low] |
| Refactor | [N] | [High/Med/Low] |
| Deprecate | [N] | [High/Med/Low] |
| Feature (SpecSwarm/SpecTest) | [N] | [High/Med/Low] |
---
## Recommendation
### 🎯 Primary Recommendation: `/specswarm:[workflow]`
**Confidence**: [High/Medium/Low]
**Reasoning**:
1. [Reason 1 - evidence from branch/commits/files]
2. [Reason 2]
3. [Reason 3]
**Why This Workflow**:
[Description of why this workflow fits]
**Expected Outcome**:
- [Outcome 1]
- [Outcome 2]
---
## Alternative Workflows
### Alternative 1: `/specswarm:[workflow2]`
**Confidence**: [Medium/Low]
**When to Use**: [Scenario where this would be better]
### Alternative 2: `/specswarm:[workflow3]`
**Confidence**: [Medium/Low]
**When to Use**: [Scenario where this would be better]
---
## Not Recommended
**Feature Development** → Use `/specswarm:*` workflows
**Reason**: [If feature development detected, redirect to appropriate plugin]
---
## Next Steps
1. **Review recommendation** above
2. **Run recommended workflow**: `/specswarm:[workflow]`
3. **If uncertain**, provide more context: `/specswarm:suggest "more details here"`
**Command to run**:
```
/specswarm:[recommended_workflow]
```
```
---
### 4. Output Recommendation
```
🤖 Workflow Suggestion Complete
🎯 Recommended Workflow: /specswarm:[workflow]
Confidence: [High/Medium/Low]
📊 Analysis:
- Branch pattern: [detected pattern]
- Commit keywords: [list]
- Files changed: [N]
- User signals: [description analysis]
📋 Full analysis (above)
⚡ Quick Start:
/specswarm:[recommended_workflow]
```
---
## Example Output
```
🤖 Workflow Suggestion Complete
🎯 Recommended Workflow: /specswarm:bugfix
Confidence: High
📊 Analysis:
- Branch pattern: bugfix/042-login-timeout
- Commit keywords: "fix", "bug", "timeout issue"
- Files changed: 3 (auth, tests)
- User signals: "login not working"
Reasoning:
1. Branch name explicitly indicates bugfix
2. Commit messages contain bug-fix keywords
3. User description indicates broken functionality
4. Test files modified (typical of bugfix workflow)
⚡ Quick Start:
/speclab:bugfix
```
---
## Decision Logic
**High Confidence (score ≥ 10)**:
- Clear indicators from multiple sources
- Strong pattern match
- Recommend with confidence
**Medium Confidence (score 5-9)**:
- Some indicators present
- Moderate pattern match
- Offer alternatives
**Low Confidence (score < 5)**:
- Weak or conflicting signals
- Suggest multiple options
- Ask for more context
---
## Success Criteria
✅ Context gathered from git history
✅ Patterns analyzed (branch, commits, files, description)
✅ Scores calculated for each workflow
✅ Primary recommendation provided
✅ Alternative workflows suggested
✅ Next steps clear

214
commands/tasks.md Normal file
View File

@@ -0,0 +1,214 @@
---
description: Generate an actionable, dependency-ordered tasks.md for the feature based on available design artifacts.
---
<!--
ATTRIBUTION CHAIN:
1. Original: GitHub spec-kit (https://github.com/github/spec-kit)
Copyright (c) GitHub, Inc. | MIT License
2. Adapted: SpecKit plugin by Marty Bonacci (2025)
3. Forked: SpecSwarm plugin with tech stack management
by Marty Bonacci & Claude Code (2025)
-->
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
1. **Discover Feature Context**:
```bash
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
# Source features location helper
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
source "$PLUGIN_DIR/lib/features-location.sh"
# Initialize features directory
get_features_dir "$REPO_ROOT"
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
FEATURE_NUM=$(echo "$BRANCH" | grep -oE '^[0-9]{3}')
[ -z "$FEATURE_NUM" ] && FEATURE_NUM=$(list_features "$REPO_ROOT" | grep -oE '^[0-9]{3}' | sort -nr | head -1)
find_feature_dir "$FEATURE_NUM" "$REPO_ROOT"
# FEATURE_DIR is now set by find_feature_dir
```
2. **Load design documents**: Read from FEATURE_DIR:
- **Required**: plan.md (tech stack, libraries, structure), spec.md (user stories with priorities)
- **Optional**: data-model.md (entities), contracts/ (API endpoints), research.md (decisions), quickstart.md (test scenarios)
- **Load `.specswarm/tech-stack.md` for validation** (if exists)
- Note: Not all projects have all documents. Generate tasks based on what's available.
<!-- ========== TECH STACK VALIDATION (SpecSwarm Enhancement) ========== -->
<!-- Added by Marty Bonacci & Claude Code (2025) -->
2b. **Tech Stack Validation** (if tech-stack.md exists):
**Purpose**: Validate that no tasks introduce unapproved or prohibited technologies
1. **Read Tech Stack Compliance Report** from plan.md:
- Check if "Tech Stack Compliance Report" section exists
- If it does NOT exist: Skip validation (plan.md was created before SpecSwarm)
- If it DOES exist: Proceed with validation
2. **Verify Compliance Report is Resolved**:
```bash
# Check for unresolved conflicts or prohibitions
if grep -q "⚠️ Conflicting Technologies" "${FEATURE_DIR}/plan.md"; then
# Check if there are still pending choices
if grep -q "**Your choice**: _\[" "${FEATURE_DIR}/plan.md"; then
ERROR "Tech stack conflicts unresolved in plan.md"
MESSAGE "Please resolve conflicting technology choices in plan.md before generating tasks"
MESSAGE "Run /specswarm:plan again to address conflicts"
HALT
fi
fi
if grep -q "❌ Prohibited Technologies" "${FEATURE_DIR}/plan.md"; then
if grep -q "**Cannot proceed**" "${FEATURE_DIR}/plan.md"; then
ERROR "Prohibited technologies found in plan.md"
MESSAGE "Remove prohibited technologies from plan.md Technical Context"
MESSAGE "See .specswarm/tech-stack.md for approved alternatives"
HALT
fi
fi
```
3. **Scan Task Descriptions for Technology References**:
Before finalizing tasks.md, scan all task descriptions for library/framework names:
```bash
# Extract task descriptions (before they're written to tasks.md)
for TASK in "${ALL_TASKS[@]}"; do
TASK_DESC=$(echo "$TASK" | grep -oE 'Install.*|Add.*|Use.*|Import.*')
# Check against prohibited list
for PROHIBITED in $(grep "❌" "${REPO_ROOT}.specswarm/tech-stack.md" | sed 's/.*❌ \([^ ]*\).*/\1/'); do
if echo "$TASK_DESC" | grep -qi "$PROHIBITED"; then
WARNING "Task references prohibited technology: $PROHIBITED"
MESSAGE "Task: $TASK_DESC"
APPROVED_ALT=$(grep "❌.*${PROHIBITED}" "${REPO_ROOT}.specswarm/tech-stack.md" | sed 's/.*use \(.*\) instead.*/\1/')
MESSAGE "Replace with approved alternative: $APPROVED_ALT"
# Auto-correct task description
TASK_DESC=$(echo "$TASK_DESC" | sed -i "s/${PROHIBITED}/${APPROVED_ALT}/gi")
fi
done
# Check against unapproved list (warn but allow)
if ! grep -qi "$TECH_MENTIONED" "${REPO_ROOT}.specswarm/tech-stack.md" 2>/dev/null; then
INFO "Task mentions unapproved technology: $TECH_MENTIONED"
INFO "This will be validated during /specswarm:implement"
fi
done
```
4. **Validation Summary**:
Add validation summary to tasks.md header:
```markdown
<!-- Tech Stack Validation: PASSED -->
<!-- Validated against: .specswarm/tech-stack.md v{version} -->
<!-- No prohibited technologies found -->
<!-- {N} unapproved technologies require runtime validation -->
```
<!-- ========== END TECH STACK VALIDATION ========== -->
3. **Execute task generation workflow** (follow the template structure):
- Load plan.md and extract tech stack, libraries, project structure
- **Load spec.md and extract user stories with their priorities (P1, P2, P3, etc.)**
- If data-model.md exists: Extract entities → map to user stories
- If contracts/ exists: Each file → map endpoints to user stories
- If research.md exists: Extract decisions → generate setup tasks
- **Generate tasks ORGANIZED BY USER STORY**:
- Setup tasks (shared infrastructure needed by all stories)
- **Foundational tasks (prerequisites that must complete before ANY user story can start)**
- For each user story (in priority order P1, P2, P3...):
- Group all tasks needed to complete JUST that story
- Include models, services, endpoints, UI components specific to that story
- Mark which tasks are [P] parallelizable
- If tests requested: Include tests specific to that story
- Polish/Integration tasks (cross-cutting concerns)
- **Tests are OPTIONAL**: Only generate test tasks if explicitly requested in the feature spec or user asks for TDD approach
- Apply task rules:
- Different files = mark [P] for parallel
- Same file = sequential (no [P])
- If tests requested: Tests before implementation (TDD order)
- Number tasks sequentially (T001, T002...)
- Generate dependency graph showing user story completion order
- Create parallel execution examples per user story
- Validate task completeness (each user story has all needed tasks, independently testable)
4. **Generate tasks.md**: Use `.specify/templates/tasks-template.md` as structure, fill with:
- Correct feature name from plan.md
- Phase 1: Setup tasks (project initialization)
- Phase 2: Foundational tasks (blocking prerequisites for all user stories)
- Phase 3+: One phase per user story (in priority order from spec.md)
- Each phase includes: story goal, independent test criteria, tests (if requested), implementation tasks
- Clear [Story] labels (US1, US2, US3...) for each task
- [P] markers for parallelizable tasks within each story
- Checkpoint markers after each story phase
- Final Phase: Polish & cross-cutting concerns
- Numbered tasks (T001, T002...) in execution order
- Clear file paths for each task
- Dependencies section showing story completion order
- Parallel execution examples per story
- Implementation strategy section (MVP first, incremental delivery)
5. **Report**: Output path to generated tasks.md and summary:
- Total task count
- Task count per user story
- Parallel opportunities identified
- Independent test criteria for each story
- Suggested MVP scope (typically just User Story 1)
Context for task generation: {ARGS}
The tasks.md should be immediately executable - each task must be specific enough that an LLM can complete it without additional context.
## Task Generation Rules
**IMPORTANT**: Tests are optional. Only generate test tasks if the user explicitly requested testing or TDD approach in the feature specification.
**CRITICAL**: Tasks MUST be organized by user story to enable independent implementation and testing.
1. **From User Stories (spec.md)** - PRIMARY ORGANIZATION:
- Each user story (P1, P2, P3...) gets its own phase
- Map all related components to their story:
- Models needed for that story
- Services needed for that story
- Endpoints/UI needed for that story
- If tests requested: Tests specific to that story
- Mark story dependencies (most stories should be independent)
2. **From Contracts**:
- Map each contract/endpoint → to the user story it serves
- If tests requested: Each contract → contract test task [P] before implementation in that story's phase
3. **From Data Model**:
- Map each entity → to the user story(ies) that need it
- If entity serves multiple stories: Put in earliest story or Setup phase
- Relationships → service layer tasks in appropriate story phase
4. **From Setup/Infrastructure**:
- Shared infrastructure → Setup phase (Phase 1)
- Foundational/blocking tasks → Foundational phase (Phase 2)
- Examples: Database schema setup, authentication framework, core libraries, base configurations
- These MUST complete before any user story can be implemented
- Story-specific setup → within that story's phase
5. **Ordering**:
- Phase 1: Setup (project initialization)
- Phase 2: Foundational (blocking prerequisites - must complete before user stories)
- Phase 3+: User Stories in priority order (P1, P2, P3...)
- Within each story: Tests (if requested) → Models → Services → Endpoints → Integration
- Final Phase: Polish & Cross-Cutting Concerns
- Each user story phase should be a complete, independently testable increment

631
commands/upgrade.md Normal file
View File

@@ -0,0 +1,631 @@
---
description: Upgrade dependencies or frameworks with breaking change analysis and automated refactoring
args:
- name: upgrade_target
description: What to upgrade (e.g., "React 18 to React 19", "all dependencies", "react", "@latest")
required: true
- name: --deps
description: Upgrade all dependencies to latest (alternative to specifying target)
required: false
- name: --package
description: Upgrade specific package (e.g., --package react)
required: false
- name: --dry-run
description: Analyze breaking changes without making changes
required: false
---
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Upgrade dependencies or frameworks with automated breaking change analysis and code refactoring.
**Purpose**: Streamline complex upgrade processes by automating dependency updates, breaking change detection, and code refactoring.
**Workflow**: Analyze → Plan → Update → Refactor → Test → Report
**Scope**:
- Framework upgrades (React 18→19, Vue 2→3, Next.js 13→14, etc.)
- Dependency upgrades (specific packages or all dependencies)
- Breaking change detection from changelogs
- Automated code refactoring for breaking changes
- Test validation after upgrade
**User Experience**:
- Single command handles complex multi-step upgrades
- Automatic breaking change detection
- Guided refactoring with codemod suggestions
- Test-driven validation
- Clear migration report with manual tasks
---
## Pre-Flight Checks
```bash
# Parse arguments
UPGRADE_TARGET=""
UPGRADE_ALL_DEPS=false
PACKAGE_NAME=""
DRY_RUN=false
# Extract upgrade target (first non-flag argument)
for arg in $ARGUMENTS; do
if [ "${arg:0:2}" != "--" ] && [ -z "$UPGRADE_TARGET" ]; then
UPGRADE_TARGET="$arg"
elif [ "$arg" = "--deps" ]; then
UPGRADE_ALL_DEPS=true
elif [ "$arg" = "--package" ]; then
shift
PACKAGE_NAME="$1"
elif [ "$arg" = "--dry-run" ]; then
DRY_RUN=true
fi
done
# Validate upgrade target
if [ -z "$UPGRADE_TARGET" ] && [ "$UPGRADE_ALL_DEPS" = false ] && [ -z "$PACKAGE_NAME" ]; then
echo "❌ Error: Upgrade target required"
echo ""
echo "Usage: /specswarm:upgrade \"target\" [--deps] [--package name] [--dry-run]"
echo ""
echo "Examples:"
echo " /specswarm:upgrade \"React 18 to React 19\""
echo " /specswarm:upgrade \"Next.js 14 to Next.js 15\""
echo " /specswarm:upgrade --deps # All dependencies"
echo " /specswarm:upgrade --package react # Specific package"
echo " /specswarm:upgrade \"Vue 2 to Vue 3\" --dry-run"
exit 1
fi
# Normalize upgrade target
if [ "$UPGRADE_ALL_DEPS" = true ]; then
UPGRADE_TARGET="all dependencies"
elif [ -n "$PACKAGE_NAME" ]; then
UPGRADE_TARGET="$PACKAGE_NAME to latest"
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"
# Check for package.json
if [ ! -f "package.json" ]; then
echo "❌ Error: package.json not found"
echo " This command currently supports Node.js/npm projects."
exit 1
fi
```
---
## Execution Steps
### Step 1: Display Welcome Banner
```bash
if [ "$DRY_RUN" = true ]; then
echo "🔍 SpecSwarm Upgrade - Analysis Mode (Dry Run)"
else
echo "⬆️ SpecSwarm Upgrade - Dependency & Framework Migration"
fi
echo "══════════════════════════════════════════"
echo ""
echo "Upgrade: $UPGRADE_TARGET"
echo ""
if [ "$DRY_RUN" = true ]; then
echo "🔍 DRY RUN MODE: Analyzing only, no changes will be made"
echo ""
echo "This analysis will:"
echo " 1. Detect current versions"
echo " 2. Identify latest available versions"
echo " 3. Analyze breaking changes from changelogs"
echo " 4. Estimate refactoring impact"
echo " 5. Generate migration plan"
echo ""
else
echo "This workflow will:"
echo " 1. Analyze breaking changes"
echo " 2. Generate migration plan"
echo " 3. Update dependencies"
echo " 4. Refactor code for breaking changes"
echo " 5. Run tests to verify compatibility"
echo " 6. Report manual migration tasks"
echo ""
fi
read -p "Press Enter to start, or Ctrl+C to cancel..."
echo ""
```
---
### Step 2: Phase 1 - Analyze Current State
**YOU MUST NOW analyze the current dependency state:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔍 Phase 1: Analyzing Current Dependencies"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
**Analysis steps:**
1. Read package.json to get current dependencies
2. Identify the packages to upgrade:
- If UPGRADE_ALL_DEPS: all dependencies + devDependencies
- If PACKAGE_NAME: specific package
- If upgrade target like "React 18 to React 19": extract package names (react, react-dom, etc.)
3. For each package, detect:
- Current version (from package.json)
- Latest version (from npm registry)
- Installed version (from package-lock.json or node_modules)
4. Check for framework-specific packages:
- React: react, react-dom, @types/react
- Vue: vue, @vue/*, vue-router
- Next.js: next, react, react-dom
- Remix: @remix-run/*
- Angular: @angular/*
```bash
# Example analysis output
echo "📦 Current Versions:"
echo " react: 18.2.0"
echo " react-dom: 18.2.0"
echo " @types/react: 18.0.28"
echo ""
echo "📦 Target Versions:"
echo " react: 19.0.0"
echo " react-dom: 19.0.0"
echo " @types/react: 19.0.0"
echo ""
```
Store:
- PACKAGES_TO_UPGRADE (array of package names)
- CURRENT_VERSIONS (map of package → version)
- TARGET_VERSIONS (map of package → version)
---
### Step 3: Phase 2 - Breaking Change Analysis
**YOU MUST NOW analyze breaking changes:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📋 Phase 2: Analyzing Breaking Changes"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Fetching changelogs and release notes..."
echo ""
```
**For each package being upgraded:**
1. **Fetch changelog/release notes:**
- Check GitHub releases (if repository URL in package.json)
- Check npm package page
- Use WebFetch tool to get changelog content
2. **Extract breaking changes:**
- Look for "BREAKING CHANGE", "Breaking Changes", "⚠️", "❗" sections
- Extract version-specific breaking changes (between current and target)
- Parse common patterns:
- "Removed X"
- "X is now Y"
- "X has been deprecated"
- "X no longer supports Y"
3. **Categorize breaking changes:**
- **API changes**: Function signature changes, removed methods
- **Behavior changes**: Default behavior modifications
- **Deprecations**: Deprecated but still working
- **Removals**: Features completely removed
- **Configuration**: Config file format changes
4. **Assess impact on codebase:**
- Search codebase for usage of affected APIs
- Estimate files requiring manual changes
- Identify automated refactoring opportunities
```bash
echo "🔍 Breaking Changes Detected:"
echo ""
echo "React 18 → 19:"
echo " ⚠️ ReactDOM.render removed (use createRoot)"
echo " ⚠️ Legacy Context API deprecated"
echo " ⚠️ PropTypes moved to separate package"
echo " ✅ Automatic migration available for 2/3 changes"
echo ""
echo "Impact Analysis:"
echo " 📁 3 files use ReactDOM.render"
echo " 📁 1 file uses Legacy Context"
echo " 📁 0 files use PropTypes"
echo ""
```
Store:
- BREAKING_CHANGES (array of change descriptions)
- AFFECTED_FILES (map of change → files)
- AUTO_FIXABLE (array of changes with codemods available)
---
### Step 4: Phase 3 - Generate Migration Plan
**YOU MUST NOW generate a detailed migration plan:**
```bash
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 Phase 3: Generating Migration Plan"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
```
**Create a migration plan that includes:**
1. **Dependency Update Steps:**
```
npm install react@19 react-dom@19 @types/react@19
```
2. **Automated Refactoring Steps:**
- For each auto-fixable breaking change
- Codemod command or manual find/replace pattern
- Example: `npx react-codemod create-root src/`
3. **Manual Migration Tasks:**
- For each non-auto-fixable breaking change
- Which files need manual updates
- What changes to make
- Code examples (before/after)
4. **Test Validation:**
- Test commands to run after changes
- Expected test results
5. **Risk Assessment:**
- Low/Medium/High risk rating
- Estimated time
- Recommended approach (all at once vs incremental)
```bash
echo "Migration Plan Generated:"
echo ""
echo "1. Update Dependencies (automated)"
echo " └─ npm install react@19 react-dom@19"
echo ""
echo "2. Automated Refactoring (3 codemods)"
echo " └─ ReactDOM.render → createRoot"
echo " └─ Legacy Context → New Context API"
echo " └─ Update TypeScript types"
echo ""
echo "3. Manual Tasks (1 required)"
echo " └─ Review and test Legacy Context migration in src/contexts/ThemeContext.tsx"
echo ""
echo "4. Test Validation"
echo " └─ npm test (all tests must pass)"
echo ""
echo "Risk Assessment: MEDIUM"
echo "Estimated Time: 15-30 minutes"
echo ""
```
IF DRY_RUN = true:
- Stop here, display plan, exit
- Do NOT make any changes
---
### Step 5: Phase 4 - Update Dependencies
**IF NOT dry run, YOU MUST NOW update dependencies:**
```bash
if [ "$DRY_RUN" = false ]; then
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Phase 4: Updating Dependencies"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
fi
```
**Use Bash tool to run npm install:**
```bash
# Build install command
INSTALL_CMD="npm install"
for package in "${PACKAGES_TO_UPGRADE[@]}"; do
target_version="${TARGET_VERSIONS[$package]}"
INSTALL_CMD="$INSTALL_CMD $package@$target_version"
done
echo "Running: $INSTALL_CMD"
echo ""
# Execute
$INSTALL_CMD
if [ $? -eq 0 ]; then
echo ""
echo "✅ Dependencies updated successfully"
echo ""
else
echo ""
echo "❌ Dependency update failed"
echo " Check npm output above for errors"
exit 1
fi
```
---
### Step 6: Phase 5 - Automated Refactoring
**IF NOT dry run, YOU MUST NOW apply automated refactorings:**
```bash
if [ "$DRY_RUN" = false ]; then
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔧 Phase 5: Automated Refactoring"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
fi
```
**For each auto-fixable breaking change:**
1. **Apply codemod** (if available):
- React: `npx react-codemod <codemod-name> <path>`
- Vue: `npx vue-codemod <codemod-name> <path>`
- Other: Custom find/replace using Edit tool
2. **Apply manual refactoring patterns:**
- Use Grep tool to find affected code
- Use Edit tool to make changes
- Log each change for rollback if needed
3. **Verify changes:**
- Check syntax (bash -n for shell, tsc --noEmit for TypeScript)
- Quick validation that files parse correctly
```bash
echo "Applying refactoring 1/3: ReactDOM.render → createRoot"
# Apply codemod or manual refactoring
echo "✅ Refactored 3 files"
echo ""
echo "Applying refactoring 2/3: Legacy Context → New Context API"
# Apply codemod or manual refactoring
echo "✅ Refactored 1 file"
echo ""
echo "Applying refactoring 3/3: Update TypeScript types"
# Apply codemod or manual refactoring
echo "✅ Updated type definitions"
echo ""
```
---
### Step 7: Phase 6 - Test Validation
**IF NOT dry run, YOU MUST NOW run tests:**
```bash
if [ "$DRY_RUN" = false ]; then
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✓ Phase 6: Testing Compatibility"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
fi
```
**Run test suite:**
1. Detect test command (package.json scripts.test)
2. Run tests with Bash tool
3. Capture results
4. Report pass/fail
```bash
echo "Running test suite..."
echo ""
npm test
TEST_RESULT=$?
if [ $TEST_RESULT -eq 0 ]; then
echo ""
echo "✅ All tests passing after upgrade!"
echo ""
TESTS_PASSING=true
else
echo ""
echo "⚠️ Some tests failing after upgrade"
echo " This may be expected for breaking changes requiring manual migration"
echo ""
TESTS_PASSING=false
fi
```
---
### Step 8: Final Report
**Display completion summary:**
```bash
echo ""
echo "══════════════════════════════════════════"
if [ "$DRY_RUN" = true ]; then
echo "🔍 UPGRADE ANALYSIS COMPLETE (DRY RUN)"
echo "══════════════════════════════════════════"
echo ""
echo "Upgrade: $UPGRADE_TARGET"
echo ""
echo "📋 Migration Plan Ready"
echo "📊 Risk Assessment: [RISK_LEVEL]"
echo "⏱️ Estimated Time: [TIME_ESTIMATE]"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 NEXT STEPS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "1. Review migration plan above"
echo "2. If acceptable, run actual upgrade:"
echo " /specswarm:upgrade \"$UPGRADE_TARGET\""
echo ""
echo "3. Or handle migration manually using plan as guide"
echo ""
else
echo "🎉 UPGRADE COMPLETE"
echo "══════════════════════════════════════════"
echo ""
echo "Upgrade: $UPGRADE_TARGET"
echo ""
echo "✅ Dependencies updated"
echo "✅ Automated refactoring applied"
if [ "$TESTS_PASSING" = true ]; then
echo "✅ All tests passing"
else
echo "⚠️ Tests require attention (see output above)"
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 MANUAL TASKS REMAINING"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# List manual tasks from migration plan
echo "The following tasks require manual intervention:"
echo ""
for task in "${MANUAL_TASKS[@]}"; do
echo " ⚠️ $task"
done
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🧪 RECOMMENDED TESTING"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "1. 🔍 Review Changes"
echo " git diff"
echo ""
echo "2. 🧪 Manual Testing"
echo " - Start development server"
echo " - Test critical user flows"
echo " - Verify no console errors"
echo " - Check for visual regressions"
echo ""
echo "3. 📊 Performance Check"
echo " - Compare bundle size (if applicable)"
echo " - Verify no performance degradation"
echo ""
if [ "$TESTS_PASSING" = true ]; then
echo "4. 🚢 Ship When Ready"
echo " /specswarm:ship"
echo ""
echo " All tests passing - ready to merge after manual verification"
else
echo "4. 🔧 Fix Failing Tests"
echo " - Address test failures"
echo " - Complete manual migration tasks above"
echo " - Re-run: npm test"
echo ""
echo "5. 🚢 Ship When Tests Pass"
echo " /specswarm:ship"
fi
echo ""
fi
echo "══════════════════════════════════════════"
```
---
## Error Handling
If any step fails:
1. **Changelog fetch fails**: Continue with generic breaking change warnings
2. **Dependency update fails**: Display npm errors, suggest manual resolution
3. **Refactoring fails**: Roll back changes, report errors
4. **Tests fail**: Report as warning, not error (expected for breaking changes)
**All errors should report clearly and suggest remediation.**
---
## Design Philosophy
**Automated Where Possible**: Codemods and refactoring patterns reduce manual work
**Transparent Process**: Clear breaking change analysis before making changes
**Safety First**: Dry run mode for risk assessment, test validation after changes
**Guidance**: Manual tasks clearly documented with examples
**Realistic**: Acknowledges that some migrations require manual intervention
---
## Use Cases
**Framework Upgrades:**
- React 18 → 19
- Vue 2 → 3
- Next.js 14 → 15
- Angular major versions
**Dependency Upgrades:**
- All dependencies to latest
- Specific package upgrades
- Security vulnerability fixes
**Breaking Change Migrations:**
- API removals
- Configuration format changes
- Behavior modifications
---
## Limitations
**Current Support:**
- ✅ Node.js/npm projects (package.json)
- ✅ React framework upgrades
- ✅ Common JavaScript libraries
**Future Enhancements:**
- Python (pip, requirements.txt)
- Ruby (Gemfile)
- Rust (Cargo.toml)
- More framework-specific codemods
- Automated rollback on test failure

314
commands/validate.md Normal file
View File

@@ -0,0 +1,314 @@
---
description: Run AI-powered interaction flow validation for any software type (webapp, Android app, REST API, desktop GUI)
args:
- name: project_path
description: Path to project to validate (defaults to current directory)
required: false
- name: --session-id
description: Optional session ID for orchestration integration
required: false
- name: --type
description: Override detected type (webapp|android|rest-api|desktop-gui)
required: false
- name: --flows
description: Path to custom flows JSON file
required: false
- name: --url
description: Override base URL for webapp (default http://localhost:5173)
required: false
---
# AI-Powered Feature Validation
Run comprehensive validation with intelligent flow generation, interactive error detection, and automatic project type detection.
## Initialize Validation
```bash
echo "🔍 SpecLabs Feature Validation v2.7.0"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Parse arguments
PROJECT_PATH=""
SESSION_ID=""
TYPE_OVERRIDE="auto"
FLOWS_FILE=""
BASE_URL=""
# Check if first arg is a path (doesn't start with --)
if [ -n "$1" ] && [ "${1:0:2}" != "--" ]; then
PROJECT_PATH="$1"
shift
else
PROJECT_PATH="$(pwd)"
fi
while [[ $# -gt 0 ]]; do
case "$1" in
--session-id) SESSION_ID="$2"; shift 2 ;;
--type) TYPE_OVERRIDE="$2"; shift 2 ;;
--flows) FLOWS_FILE="$2"; shift 2 ;;
--url) BASE_URL="$2"; shift 2 ;;
*) shift ;;
esac
done
# Validate project path exists
if [ ! -d "$PROJECT_PATH" ]; then
echo "❌ Error: Project path does not exist: $PROJECT_PATH"
exit 1
fi
echo "📁 Project: $PROJECT_PATH"
echo ""
# Detect web project and Chrome DevTools MCP availability
PLUGIN_DIR="/home/marty/code-projects/specswarm/plugins/speclabs"
SPECSWARM_PLUGIN_DIR="/home/marty/code-projects/specswarm/plugins/specswarm"
if [ -f "$SPECSWARM_PLUGIN_DIR/lib/web-project-detector.sh" ]; then
source "$SPECSWARM_PLUGIN_DIR/lib/web-project-detector.sh"
# Check if Chrome DevTools MCP should be used
if should_use_chrome_devtools "$PROJECT_PATH"; then
export CHROME_DEVTOOLS_MODE="enabled"
export WEB_FRAMEWORK="$WEB_FRAMEWORK"
echo "🌐 Web project detected: $WEB_FRAMEWORK"
echo "🎯 Chrome DevTools MCP: Available for browser automation"
echo " (saves ~200MB Chromium download)"
echo ""
elif is_web_project "$PROJECT_PATH"; then
export CHROME_DEVTOOLS_MODE="fallback"
export WEB_FRAMEWORK="$WEB_FRAMEWORK"
echo "🌐 Web project detected: $WEB_FRAMEWORK"
echo "📦 Using Playwright fallback for browser automation"
echo ""
else
export CHROME_DEVTOOLS_MODE="disabled"
fi
fi
# Source validation orchestrator
source "${PLUGIN_DIR}/lib/validate-feature-orchestrator.sh"
```
## Execute Validation
```bash
# Build orchestrator arguments
ORCHESTRATOR_ARGS=(--project-path "$PROJECT_PATH")
[ -n "$SESSION_ID" ] && ORCHESTRATOR_ARGS+=(--session-id "$SESSION_ID")
[ "$TYPE_OVERRIDE" != "auto" ] && ORCHESTRATOR_ARGS+=(--type "$TYPE_OVERRIDE")
[ -n "$FLOWS_FILE" ] && ORCHESTRATOR_ARGS+=(--flows "$FLOWS_FILE")
[ -n "$BASE_URL" ] && ORCHESTRATOR_ARGS+=(--url "$BASE_URL")
# Execute validation
VALIDATION_RESULT=$(validate_feature_orchestrate "${ORCHESTRATOR_ARGS[@]}")
VALIDATION_EXIT_CODE=$?
if [ $VALIDATION_EXIT_CODE -ne 0 ]; then
echo ""
echo "❌ Validation failed to execute"
echo ""
echo "Result:"
echo "$VALIDATION_RESULT" | jq '.'
exit 1
fi
```
## Display Results
```bash
# Parse result
STATUS=$(echo "$VALIDATION_RESULT" | jq -r '.status')
TYPE=$(echo "$VALIDATION_RESULT" | jq -r '.type')
TOTAL_FLOWS=$(echo "$VALIDATION_RESULT" | jq -r '.summary.total_flows')
PASSED_FLOWS=$(echo "$VALIDATION_RESULT" | jq -r '.summary.passed_flows')
FAILED_FLOWS=$(echo "$VALIDATION_RESULT" | jq -r '.summary.failed_flows')
ERROR_COUNT=$(echo "$VALIDATION_RESULT" | jq -r '.summary.error_count')
DURATION=$(echo "$VALIDATION_RESULT" | jq -r '.metadata.duration_seconds')
# Display summary using orchestrator helper
print_validation_summary "$VALIDATION_RESULT"
# Update session if session ID provided
if [ -n "$SESSION_ID" ]; then
echo "💾 Updating session: $SESSION_ID"
# Source feature orchestrator
source "${PLUGIN_DIR}/lib/feature-orchestrator.sh"
feature_init
# Store validation results in session
SESSION_FILE="${FEATURE_SESSION_DIR}/${SESSION_ID}.json"
if [ -f "$SESSION_FILE" ]; then
jq --argjson result "$VALIDATION_RESULT" \
--arg completed_at "$(date -Iseconds)" \
'.validation = $result |
.validation.completed_at = $completed_at' \
"$SESSION_FILE" > "${SESSION_FILE}.tmp"
mv "${SESSION_FILE}.tmp" "$SESSION_FILE"
echo " ✅ Session updated with validation results"
else
echo " ⚠️ Session file not found (validation results not persisted)"
fi
fi
echo ""
```
## Validation Status Exit Code
```bash
# Display Chrome DevTools MCP tip for web projects (if applicable)
if [ "$CHROME_DEVTOOLS_MODE" = "fallback" ]; then
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "💡 TIP: Enhanced Web Validation Available"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Chrome DevTools MCP provides enhanced browser automation:"
echo " • Real-time console error monitoring"
echo " • Network request inspection during flows"
echo " • Runtime state debugging"
echo " • Saves ~200MB Chromium download"
echo ""
echo "Install Chrome DevTools MCP:"
echo " claude mcp add ChromeDevTools/chrome-devtools-mcp"
echo ""
echo "Your validation will automatically use it next time!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
fi
# Exit with appropriate code based on validation status
if [ "$STATUS" = "passed" ]; then
echo "✅ VALIDATION PASSED"
exit 0
elif [ "$STATUS" = "failed" ]; then
echo "⚠️ VALIDATION FAILED"
exit 1
else
echo "❌ VALIDATION ERROR"
exit 1
fi
```
---
## Features
### Automatic Project Type Detection
- **Webapp**: Detects React, Vite, Next.js, React Router applications
- **Android**: Detects Android projects with AndroidManifest.xml
- **REST API**: Detects OpenAPI specs, Express, FastAPI, Flask
- **Desktop GUI**: Detects Electron, PyQt, Tkinter applications
Detection uses file-based analysis with confidence scoring. Manual override available via `--type` flag.
### Intelligent Flow Generation (Webapp)
- **User-Defined Flows**: Parse from spec.md YAML frontmatter or custom flows file
- **AI-Generated Flows**: Analyze feature artifacts (spec.md, plan.md, tasks.md)
- **Feature Type Detection**: Identifies shopping_cart, social_feed, auth, forms, CRUD patterns
- **Smart Merging**: Combines user + AI flows with deduplication
### Interactive Error Detection (Webapp)
- **Browser Automation**: Chrome DevTools MCP (if installed) or Playwright fallback
- **Chrome DevTools MCP Benefits**:
- Saves ~200MB Chromium download
- Persistent browser profile (~/.cache/chrome-devtools-mcp/)
- Enhanced debugging with real-time console/network monitoring
- **Real-Time Error Capture**: Console errors, uncaught exceptions, network failures
- **Terminal Monitoring**: Tracks dev server output for compilation errors
- **Auto-Fix Retry Loop**: Attempts fixes up to 3 times before manual intervention
- **Dev Server Lifecycle**: Automatic startup and guaranteed cleanup
### Standardized Results
- **JSON Output**: Consistent format across all validator types
- **Rich Metadata**: Duration, tool versions, retry attempts, flow counts
- **Artifacts**: Screenshots, logs, detailed reports
- **Session Integration**: Automatic persistence when session ID provided
---
## Usage Examples
### Standalone Validation
```bash
# Validate current directory (auto-detect type)
/speclabs:validate-feature
# Validate specific project
/speclabs:validate-feature /path/to/my-app
# Override detected type
/speclabs:validate-feature /path/to/project --type webapp
# Use custom flows
/speclabs:validate-feature --flows ./custom-flows.json
# Override base URL
/speclabs:validate-feature --url http://localhost:3000
```
### Integrated with Orchestration
```bash
# Called automatically by orchestrate-feature when --validate is used
/speclabs:orchestrate-feature "Add shopping cart" /path/to/project --validate
# Manual validation with session tracking
/speclabs:validate-feature /path/to/project --session-id feature_20251103_143022
```
### CI/CD Integration
```bash
# Exit code 0 = passed, 1 = failed, useful for CI/CD
/speclabs:validate-feature && echo "Deploy approved" || echo "Fix errors before deploy"
```
---
## Output
### Validation Summary
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VALIDATION SUMMARY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Type: webapp
Status: passed
Duration: 47s
Flows: 8/8 passed
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
### Artifacts Location
- **Flow Results**: `<project>/.speclabs/validation/flow-results.json`
- **Screenshots**: `<project>/.speclabs/validation/screenshots/*.png`
- **Dev Server Log**: `<project>/.speclabs/validation/dev-server.log`
- **Test Output**: `<project>/.speclabs/validation/test-output-*.log`
---
## Supported Validators
### v2.7.0
-**webapp**: Full support with AI flows + Chrome DevTools MCP/Playwright + auto-fix
### Future Versions
-**android**: Planned for v2.7.1 (Appium-based)
-**rest-api**: Planned for v2.7.2 (Newman/Postman-based)
-**desktop-gui**: Planned for v2.7.3 (Electron/desktop automation)
---
**Architecture**: Generic orchestrator with pluggable type-specific validators. Extensible design allows adding new validator types without breaking changes.
**Purpose**: Provide comprehensive, automated validation across any software type, with intelligent flow generation and interactive error detection. Reduces manual testing burden and catches errors before deployment.

189
plugin.lock.json Normal file
View File

@@ -0,0 +1,189 @@
{
"$schema": "internal://schemas/plugin.lock.v1.json",
"pluginId": "gh:MartyBonacci/specswarm:",
"normalized": {
"repo": null,
"ref": "refs/tags/v20251128.0",
"commit": "29ae1737884fc44d379b6376497b031622844ab0",
"treeHash": "6ac96953622f4ab55e82020bc72b0edde9d3e923ae429122a6355288803e29cd",
"generatedAt": "2025-11-28T10:12:06.624716Z",
"toolVersion": "publish_plugins.py@0.2.0"
},
"origin": {
"remote": "git@github.com:zhongweili/42plugin-data.git",
"branch": "master",
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
},
"manifest": {
"name": "specswarm",
"description": "Complete software development toolkit: spec-driven workflows, autonomous orchestration, lifecycle management (bugfix/modify/refactor), quality validation, and performance monitoring. v3.5.0: 5th core workflow (modify) + README simplification (670→400 lines) + comprehensive docs (COMMANDS.md, SETUP.md, FEATURES.md). v3.4.0: Confidence-based auto-execution. v3.3.9: MANDATORY/ALWAYS directive descriptions.",
"version": "3.5.0"
},
"content": {
"files": [
{
"path": "README.md",
"sha256": "b0d4c64a5468d25ed8d16f9722948e14c9713f842eb63030d3e898cb075b8d1d"
},
{
"path": ".claude-plugin/plugin.json",
"sha256": "32e314eda18d66d18e45fe41cc2dbd8dc67dd3cf2851a38062f571bd0c871ef2"
},
{
"path": "commands/constitution.md",
"sha256": "12abec69c05456e4b02ed098c1b0baf55c926d553423204cadc00e243e59c572"
},
{
"path": "commands/fix.md",
"sha256": "b383410e4d0d34279de3f944bfec3ef9e1f1dbb37742bf62d5a61a39f144d0ae"
},
{
"path": "commands/complete.md",
"sha256": "a781195feee75994e9271763b9e1ee3dc460cf81b72394018a213401880770d0"
},
{
"path": "commands/implement.md",
"sha256": "0c5b191f04658d2ed4a7c9516e6fb997eedd96a9d18ec47df3bf5264fea2cfe2"
},
{
"path": "commands/modify.md",
"sha256": "2a7f66fe9d25343af544a9c74e49be315754570b4ce031402af3184171137f70"
},
{
"path": "commands/metrics-export.md",
"sha256": "422b53d7ba6a13ca107c2f918c240834f587a50dd3a6884c442727fb2b426c05"
},
{
"path": "commands/validate.md",
"sha256": "bb2509dffa61ab7ac906cf14953b57fa01b2c2a1f3744cc4fcf49686ced93d8c"
},
{
"path": "commands/analyze-quality.md",
"sha256": "749328bb7e03f5f538eab143622fa98c5c830b8e92e255cc6ceaa45875f9230a"
},
{
"path": "commands/impact.md",
"sha256": "ac5e83b65cdac199c614845458875e24ef1dfbc37e5c227b53d7b62f4d4ab0f8"
},
{
"path": "commands/analyze.md",
"sha256": "42c51f1ad7340d6b21b831fd9d8c41b1590f3671f863e14d5d4a3aaee346dd2f"
},
{
"path": "commands/hotfix.md",
"sha256": "3bd32e1199e4eb2047751a1a353c2b0a28558c02650a6482fef946428eebb394"
},
{
"path": "commands/ship.md",
"sha256": "f8d620d6dedfa147737b47a27506d3babfae7776636d2d4a6f6ed2485f0bd6ca"
},
{
"path": "commands/security-audit.md",
"sha256": "7d2ecfa5c7ea6b97c8d030fa7a583a4f990058b45afd61c0cc9d260425d3dd48"
},
{
"path": "commands/orchestrate-feature.md",
"sha256": "f3051635bc46cef16fe34f2e147d60a872329768d28e93746525231c5575cf81"
},
{
"path": "commands/init.md",
"sha256": "61350bd8a4f1fa42672b86c6ee2ed32cab644d43a26ae6e13ff732eb92c25ab5"
},
{
"path": "commands/tasks.md",
"sha256": "181daefb14de1943c7d306abdccee99cabc2135ad832c2f074f95d97cb6caf1f"
},
{
"path": "commands/clarify.md",
"sha256": "5d634f30410ef873c0b15a40ac1a181561b3e4def676852622b08dc193dff84a"
},
{
"path": "commands/release.md",
"sha256": "afae4c741ee6dee746e38e7f9ca7226f4bb5d5fb5aaabf8801144d56c91eaa9f"
},
{
"path": "commands/refactor.md",
"sha256": "f00be6ffd1c7333b4adebc88167f88114753030204dfc4767c58e80fbf7fa98d"
},
{
"path": "commands/suggest.md",
"sha256": "e41cd29c48c8e79de3858cbfa72eb039804a4ffe4ac2bc97566566aa048777a8"
},
{
"path": "commands/checklist.md",
"sha256": "8034299ad72db4e87274f3123abab02ed8416e655462846b3c59ca428e3d6358"
},
{
"path": "commands/deprecate.md",
"sha256": "bbf96d5c9866f39cbf0e20fd8ec7f0729f2419dd74d8b48ae5593be5ae2cd3a1"
},
{
"path": "commands/build.md",
"sha256": "2efd87288ad4129e43f6a7c02420e75eb766fc3e0630b50307e835a48a674f20"
},
{
"path": "commands/orchestrate-validate.md",
"sha256": "33991fe1516e8402daf9d79e1cde787ae121176a98834506402773a0ccfbcede"
},
{
"path": "commands/plan.md",
"sha256": "74cdd3112ac096b4990af8224c042a9eb059d56836527f3c6937c4e2b00a1705"
},
{
"path": "commands/metrics.md",
"sha256": "bbc1f3e4bf89c2a0255775f6ae8eb382fbd5f44460bdf6cbbda90c0b3636365b"
},
{
"path": "commands/rollback.md",
"sha256": "adc4789fd2c23d3395315298ba4525eadf309d4b374f275116a5d28c0c449d0c"
},
{
"path": "commands/upgrade.md",
"sha256": "a597b704755f23fb5930b43baebff027d7e91b294d8292fe48cb2b5509a0e5c8"
},
{
"path": "commands/specify.md",
"sha256": "bfa25b28e6373a379b97b8184b5d54cc421119a3c39e296710fd396a360cfd9a"
},
{
"path": "commands/orchestrate.md",
"sha256": "b308d564a4de08f19790f302cf31255a63760c4dbe25ec6e1dc2c4409741d2c2"
},
{
"path": "commands/coordinate.md",
"sha256": "9f48317ab23a46130cc9782a9c03db730331ba310aebdeb2180991f953bd6475"
},
{
"path": "commands/bugfix.md",
"sha256": "292810b44e804e59784443e15582c74dabed8f6393dfd81266c1bcc24d18e6b6"
},
{
"path": "skills/specswarm-fix/SKILL.md",
"sha256": "bfd376b6b20698613e64aa1e90cdba2605e7a174f39976c10a762111d2d57d78"
},
{
"path": "skills/specswarm-ship/SKILL.md",
"sha256": "5943ac8603b405cd217e1c2e219714b76b78a7c1494fe48476910f7cf55670fa"
},
{
"path": "skills/specswarm-build/SKILL.md",
"sha256": "a1f920632e70f02f9a1bd4e3e96c6d2a21169c9fe88d271d7be1d3c6d87df9a1"
},
{
"path": "skills/specswarm-modify/SKILL.md",
"sha256": "0c2ab908946d15879a18a1a573055c19baf720764242ce7b91cc37a840073ac2"
},
{
"path": "skills/specswarm-upgrade/SKILL.md",
"sha256": "551299595f5630dc837fa7713bb5f4c4fe90e53b6a1ae0716e5369d3f76e7bfe"
}
],
"dirSha256": "6ac96953622f4ab55e82020bc72b0edde9d3e923ae429122a6355288803e29cd"
},
"security": {
"scannedAt": null,
"scannerVersion": null,
"flags": []
}
}

View File

@@ -0,0 +1,73 @@
---
name: specswarm-build
description: Systematic spec-driven workflow (specification→clarification→planning→tasks→implementation→validation) for feature development. Auto-executes when user clearly wants to build, create, add, implement, develop, make, construct, or set up software features, components, or functionality.
allowed-tools: AskUserQuestion, SlashCommand
---
# SpecSwarm Build Workflow
Provides natural language access to `/specswarm:build` command.
## When to Invoke
Trigger this skill when the user mentions:
- Building, creating, or adding features
- Implementing or developing functionality
- Making or adding components
- Any request to build software features
**Examples:**
- "Build user authentication"
- "Create a payment system"
- "Add dashboard analytics"
- "Implement shopping cart"
## Instructions
**Confidence-Based Execution:**
1. **Detect** that user mentioned building/creating software
2. **Extract** the feature description from their message
3. **Assess confidence and execute accordingly**:
**High Confidence (95%+)** - Auto-execute immediately:
- Clear feature requests: "Please build a simple website", "Create user authentication with JWT", "Add dashboard analytics"
- Action: Immediately run `/specswarm:build "feature description"`
- Show brief notification: "🎯 Running /specswarm:build... (press Ctrl+C within 3s to cancel)"
**Medium Confidence (70-94%)** - Ask for confirmation:
- Less specific: "Add authentication", "Build a feature"
- Action: Use AskUserQuestion tool with two options:
- Option 1 (label: "Run /specswarm:build"): Use SpecSwarm's complete workflow
- Option 2 (label: "Process normally"): Handle as regular Claude Code request
**Low Confidence (<70%)** - Always ask:
- Vague: "Work on the app", "Improve the code"
- Action: Use AskUserQuestion as above
4. **If user cancels (Ctrl+C) or selects Option 2**, process normally without SpecSwarm
5. **After command completes**, STOP - do not continue with ship/merge
## What the Build Command Does
`/specswarm:build` runs complete workflow:
- Creates specification
- Asks clarifying questions
- Generates implementation plan
- Breaks down into tasks
- Implements all tasks
- Validates quality
Stops after implementation - does NOT merge/ship/deploy.
## Semantic Understanding
This skill should trigger not just on exact keywords, but semantic equivalents:
**Build equivalents**: build, create, make, develop, implement, add, construct, set up, establish, design
**Feature terms**: feature, component, functionality, module, system, page, form, interface
## Example
```
User: "Build user authentication with JWT"

View File

@@ -0,0 +1,73 @@
---
name: specswarm-fix
description: Systematic bugfix workflow with regression testing, auto-retry logic, and comprehensive validation. Auto-executes when user clearly wants to fix, debug, repair, resolve, broken, not working, doesn't work, not showing up, not appearing, not displaying, not rendering, doesn't show, won't show, isn't showing, doesn't appear, doesn't display, failing, errors, bugs, issues, not loading, doesn't load, crashed, crashes, problem with, trouble with.
allowed-tools: AskUserQuestion, SlashCommand
---
# SpecSwarm Fix Workflow
Provides natural language access to `/specswarm:fix` command.
## When to Invoke
Trigger this skill when the user describes ANY software problem:
- Things not working or broken
- Errors, bugs, or failures
- Features not loading or functioning
- Requests to fix, debug, or resolve issues
- ANY report of unexpected behavior
**Examples:**
- "Please fix that the images don't load"
- "Images don't load"
- "Fix the login bug"
- "The checkout is broken"
- "There's an error when submitting forms"
- "Authentication doesn't work"
- "Payment processing fails"
- "The search isn't working"
## Instructions
**Confidence-Based Execution:**
1. **Detect** that user described a software problem
2. **Extract** the problem description from their message
3. **Assess confidence and execute accordingly**:
**High Confidence (95%+)** - Auto-execute immediately:
- Clear bug descriptions: "fix the login bug", "images don't load", "checkout is broken"
- Action: Immediately run `/specswarm:fix "problem description"`
- Show brief notification: "🎯 Running /specswarm:fix... (press Ctrl+C within 3s to cancel)"
**Medium Confidence (70-94%)** - Ask for confirmation:
- Less specific: "something's wrong with authentication", "the app has issues"
- Action: Use AskUserQuestion tool with two options:
- Option 1 (label: "Run /specswarm:fix"): Use SpecSwarm's systematic bugfix workflow
- Option 2 (label: "Process normally"): Handle as regular Claude Code request
**Low Confidence (<70%)** - Always ask:
- Vague: "the app isn't working right", "there's a problem"
- Action: Use AskUserQuestion as above
4. **If user cancels (Ctrl+C) or selects Option 2**, process normally without SpecSwarm
5. **After command completes**, STOP - do not continue with ship/merge
## What the Fix Command Does
`/specswarm:fix` runs complete workflow:
- Creates regression tests to reproduce bug
- Implements the fix
- Verifies fix works
- Re-runs tests to catch new failures
- Auto-retries up to 2 times if needed
Stops after bug is fixed - does NOT merge/ship/deploy.
## Semantic Understanding
This skill should trigger not just on exact keywords, but semantic equivalents:
**Fix equivalents**: fix, repair, resolve, debug, correct, address, handle, patch
**Broken equivalents**: broken, not working, doesn't work, not showing, not appearing, not displaying, not rendering, not loading, failing, crashed
**Issue terms**: bug, error, problem, issue, trouble, failure

View File

@@ -0,0 +1,100 @@
---
name: specswarm-modify
description: Impact-analysis-first modification workflow with backward compatibility assessment and breaking change detection. Auto-executes when user clearly wants to modify, change, update, adjust, enhance, extend, or alter existing feature behavior (not fixing bugs, not refactoring quality). For features that work but need to work differently.
allowed-tools: AskUserQuestion, SlashCommand
---
# SpecSwarm Modify Workflow
Provides natural language access to `/specswarm:modify` command.
## When to Invoke
Trigger this skill when the user mentions:
- Modifying, changing, or updating existing feature behavior
- Enhancing or extending working features
- Altering how something works (that currently works)
- Making features work differently than they do now
**Examples:**
- "Change authentication from session to JWT"
- "Add pagination to the user list API"
- "Update search to use full-text search"
- "Modify the dashboard to show real-time data"
- "Extend the API to support filtering"
**NOT for this skill:**
- Fixing bugs (use specswarm-fix)
- Improving code quality without changing behavior (use specswarm-refactor)
- Building new features (use specswarm-build)
## Instructions
**Confidence-Based Execution:**
1. **Detect** that user mentioned modifying/changing existing functionality
2. **Extract** the modification description from their message
3. **Assess confidence and execute accordingly**:
**High Confidence (95%+)** - Auto-execute immediately:
- Clear modification requests: "Change authentication from session to JWT", "Add pagination to user list API", "Update search algorithm to use full-text search"
- Action: Immediately run `/specswarm:modify "modification description"`
- Show brief notification: "🎯 Running /specswarm:modify... (press Ctrl+C within 3s to cancel)"
**Medium Confidence (70-94%)** - Ask for confirmation:
- Less specific: "Update the authentication", "Modify the search"
- Action: Use AskUserQuestion tool with two options:
- Option 1 (label: "Run /specswarm:modify"): Use SpecSwarm's impact-analysis workflow
- Option 2 (label: "Process normally"): Handle as regular Claude Code request
**Low Confidence (<70%)** - Always ask:
- Vague: "Make the feature better", "Improve the UI"
- Action: Use AskUserQuestion as above
4. **If user cancels (Ctrl+C) or selects Option 2**, process normally without SpecSwarm
5. **After command completes**, STOP - do not continue with ship/merge
## What the Modify Command Does
`/specswarm:modify` runs complete workflow:
- Analyzes impact and backward compatibility
- Identifies breaking changes
- Creates migration plan if needed
- Updates specification and plan
- Generates modification tasks
- Implements changes
- Validates against regression tests
Stops after modification is complete - does NOT merge/ship/deploy.
## Semantic Understanding
This skill should trigger not just on exact keywords, but semantic equivalents:
**Modify equivalents**: modify, change, update, adjust, enhance, extend, alter, revise, adapt, transform, convert
**Target terms**: feature, functionality, behavior, workflow, process, mechanism, system
**Distinguish from:**
- **Fix** (broken/not working things): "fix", "repair", "resolve", "debug"
- **Refactor** (code quality): "refactor", "clean up", "reorganize", "optimize code structure"
- **Build** (new things): "build", "create", "add", "implement new"
## Example
```
User: "Change authentication from session to JWT"
Claude: 🎯 Running /specswarm:modify... (press Ctrl+C within 3s to cancel)
[Executes /specswarm:modify "Change authentication from session to JWT"]
```
```
User: "Update the authentication"
Claude: [Shows AskUserQuestion]
1. Run /specswarm:modify - Use SpecSwarm's impact-analysis workflow
2. Process normally - Handle as regular Claude Code request
User selects Option 1
```

View File

@@ -0,0 +1,74 @@
---
name: specswarm-ship
description: Systematic quality validation, test verification, and safe merging workflow for deployment/release operations. ALWAYS asks for confirmation when user wants to ship, deploy, merge, release, or complete features to production, merge to main branch, or finalize features. This is a DESTRUCTIVE operation (merges and deletes branches).
allowed-tools: AskUserQuestion, SlashCommand
---
# SpecSwarm Ship Workflow
Provides natural language access to `/specswarm:ship` command.
## When to Invoke
Trigger this skill when the user mentions:
- Shipping, deploying, or releasing features
- Merging to main/production
- Completing or finishing features
- "Ship it" (common casual phrase - ALWAYS confirm)
**Examples:**
- "Ship the authentication feature"
- "Deploy to production"
- "Merge this to main"
- "Ship it" ← Ambiguous - might be casual approval
- "Release version 2.0"
## Instructions
**ALWAYS Confirm (Regardless of Confidence):**
1. **Detect** that user mentioned shipping/deploying/merging
2. **Extract** context about what to ship (if provided)
3. **ALWAYS ask for confirmation** using AskUserQuestion tool with this format:
**Question**: "⚠️ SHIP CONFIRMATION - Destructive Operation"
**Description**: "This will merge your feature branch to main/parent branch and delete the feature branch. This is a DESTRUCTIVE operation that cannot be easily undone."
**Options**:
- **Option 1** (label: "Yes, ship this feature"): "Merge to main branch and delete feature branch (DESTRUCTIVE)"
- **Option 2** (label: "No, cancel"): "Cancel - I'm not ready to ship" (or if this was just casual "ship it" approval)
4. **If user selects Option 1**, run: `/specswarm:ship`
5. **If user selects Option 2**, process normally without SpecSwarm
6. **Note**: The `/specswarm:ship` command may have its own confirmation as an additional safety layer
## What the Ship Command Does
`/specswarm:ship` runs complete workflow:
- Runs quality analysis and validation
- Checks quality threshold (default 80%)
- **Shows merge plan with confirmation prompt**
- Merges to parent branch
- Cleans up feature branch
**Important:** This is DESTRUCTIVE - it merges and deletes branches. The command itself may have built-in confirmation as a second safety layer.
## Semantic Understanding
This skill should trigger not just on exact keywords, but semantic equivalents:
**Ship equivalents**: ship, deploy, release, merge, publish, finalize, complete, deliver
**Target terms**: production, main, master, parent branch, live, release
## Example
```
User: "Ship it"
Claude: [Shows AskUserQuestion]
1. Run /specswarm:ship - ⚠️ Merge feature to parent branch (DESTRUCTIVE)
2. Process normally - Handle as regular request
User selects Option 2 (it was casual approval, not actual shipping request)
```

View File

@@ -0,0 +1,74 @@
---
name: specswarm-upgrade
description: Systematic compatibility analysis, migration guidance, and breaking change detection for dependency/framework upgrades. Auto-executes when user clearly wants to upgrade, update, migrate, or modernize software dependencies, frameworks, packages, or technology stacks.
allowed-tools: AskUserQuestion, SlashCommand
---
# SpecSwarm Upgrade Workflow
Provides natural language access to `/specswarm:upgrade` command.
## When to Invoke
Trigger this skill when the user mentions:
- Upgrading or updating dependencies/packages
- Migrating to new frameworks or versions
- Modernizing technology stacks
- Bumping version numbers
**Examples:**
- "Upgrade React to version 19"
- "Update all dependencies"
- "Migrate from Webpack to Vite"
- "Modernize the build system"
- "Bump Node to version 20"
## Instructions
**Confidence-Based Execution:**
1. **Detect** that user mentioned upgrading/updating software
2. **Extract** what to upgrade from their message
3. **Assess confidence and execute accordingly**:
**High Confidence (95%+)** - Auto-execute immediately:
- Clear upgrade requests: "Upgrade React to version 19", "Update all dependencies", "Migrate from Webpack to Vite"
- Action: Immediately run `/specswarm:upgrade "upgrade description"`
- Show brief notification: "🎯 Running /specswarm:upgrade... (press Ctrl+C within 3s to cancel)"
**Medium Confidence (70-94%)** - Ask for confirmation:
- Less specific: "Update the packages", "Modernize the stack"
- Action: Use AskUserQuestion tool with two options:
- Option 1 (label: "Run /specswarm:upgrade"): Use SpecSwarm's upgrade workflow with compatibility analysis
- Option 2 (label: "Process normally"): Handle as regular Claude Code request
**Low Confidence (<70%)** - Always ask:
- Vague: "Make it better", "Use newer stuff"
- Action: Use AskUserQuestion as above
4. **If user cancels (Ctrl+C) or selects Option 2**, process normally without SpecSwarm
5. **After command completes**, STOP - do not continue with ship/merge
## What the Upgrade Command Does
`/specswarm:upgrade` runs complete workflow:
- Analyzes breaking changes and compatibility
- Creates comprehensive upgrade plan
- Generates migration tasks
- Updates dependencies and code
- Runs tests to verify compatibility
- Documents upgrade process
Stops after upgrade is complete - does NOT merge/ship/deploy.
## Semantic Understanding
This skill should trigger not just on exact keywords, but semantic equivalents:
**Upgrade equivalents**: upgrade, update, migrate, modernize, bump, move to, switch to, adopt
**Target terms**: dependency, package, framework, library, version, technology stack
## Example
```
User: "Upgrade React to version 19"