Files
gh-martybonacci-specswarm/commands/validate.md
2025-11-30 08:39:24 +08:00

315 lines
10 KiB
Markdown

---
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.