--- description: System health diagnostics allowed-tools: Bash, Read --- # diagnose Run comprehensive AgileFlow system health checks to identify potential issues before they cause failures. ## Prompt ROLE: System Diagnostician OBJECTIVE: Validate AgileFlow system health, identify issues, and provide actionable recommendations. **Run these diagnostic checks**: ```bash #!/bin/bash echo "🔍 AgileFlow System Diagnostics" echo "================================" echo "" # Check 1: Validate all JSON files echo "📋 JSON File Validation" echo "----------------------" JSON_FILES=( "docs/00-meta/agileflow-metadata.json" "docs/09-agents/status.json" "docs/09-agents/status-archive.json" "docs/08-project/github-sync-map.json" "docs/08-project/notion-sync-map.json" "hooks/hooks.json" ) JSON_ERRORS=0 for FILE in "${JSON_FILES[@]}"; do if [ -f "$FILE" ]; then if jq empty "$FILE" 2>/dev/null; then SIZE=$(stat -f%z "$FILE" 2>/dev/null || stat -c%s "$FILE" 2>/dev/null) SIZE_KB=$((SIZE / 1024)) echo " ✅ $FILE (${SIZE_KB}KB)" # Warn if status.json is getting large (>100KB) if [[ "$FILE" == "docs/09-agents/status.json" ]] && [ $SIZE -gt 102400 ]; then echo " âš ī¸ WARNING: status.json is large (${SIZE_KB}KB). Consider running archival." JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " ❌ $FILE - INVALID JSON" echo " Error details:" jq . "$FILE" 2>&1 | head -3 | sed 's/^/ /' JSON_ERRORS=$((JSON_ERRORS + 1)) fi else # Only warn for critical files if [[ "$FILE" == "docs/00-meta/agileflow-metadata.json" ]] || [[ "$FILE" == "docs/09-agents/status.json" ]]; then echo " ❌ $FILE - NOT FOUND (CRITICAL)" JSON_ERRORS=$((JSON_ERRORS + 1)) else echo " â„šī¸ $FILE - not found (optional)" fi fi done echo "" # Check 2: Auto-Archival System echo "đŸ“Ļ Auto-Archival System" echo "----------------------" if [ -f scripts/archive-completed-stories.sh ]; then if [ -x scripts/archive-completed-stories.sh ]; then echo " ✅ Archive script exists and is executable" # Check if hooked up if [ -f hooks/hooks.json ] && grep -q "archive-completed-stories.sh" hooks/hooks.json 2>/dev/null; then echo " ✅ Auto-archival hook configured" # Check threshold if [ -f docs/00-meta/agileflow-metadata.json ]; then THRESHOLD=$(jq -r '.archival.threshold_days // "not set"' docs/00-meta/agileflow-metadata.json 2>/dev/null) echo " ✅ Archival threshold: $THRESHOLD days" else echo " âš ī¸ Archival threshold not configured in metadata" fi else echo " ❌ Auto-archival hook NOT configured in hooks/hooks.json" JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " âš ī¸ Archive script exists but is NOT executable" echo " Fix: chmod +x scripts/archive-completed-stories.sh" JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " ❌ Archive script NOT found (scripts/archive-completed-stories.sh)" JSON_ERRORS=$((JSON_ERRORS + 1)) fi echo "" # Check 3: Hooks System echo "đŸĒ Hooks System" echo "---------------" if [ -d hooks ] && [ -f hooks/hooks.json ]; then if jq empty hooks/hooks.json 2>/dev/null; then echo " ✅ hooks/hooks.json is valid JSON" # Count hooks SESSION_START_HOOKS=$(jq '.hooks.SessionStart | length' hooks/hooks.json 2>/dev/null) USER_PROMPT_HOOKS=$(jq '.hooks.UserPromptSubmit | length' hooks/hooks.json 2>/dev/null) STOP_HOOKS=$(jq '.hooks.Stop | length' hooks/hooks.json 2>/dev/null) echo " â„šī¸ SessionStart hooks: $SESSION_START_HOOKS" echo " â„šī¸ UserPromptSubmit hooks: $USER_PROMPT_HOOKS" echo " â„šī¸ Stop hooks: $STOP_HOOKS" else echo " ❌ hooks/hooks.json is INVALID JSON" JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " âš ī¸ Hooks system not configured" fi echo "" # Check 4: File Sizes echo "📏 File Size Analysis" echo "---------------------" if [ -f docs/09-agents/status.json ]; then STATUS_SIZE=$(stat -f%z docs/09-agents/status.json 2>/dev/null || stat -c%s docs/09-agents/status.json 2>/dev/null) STATUS_KB=$((STATUS_SIZE / 1024)) STORY_COUNT=$(jq '.stories | length' docs/09-agents/status.json 2>/dev/null) echo " status.json: ${STATUS_KB}KB ($STORY_COUNT stories)" if [ $STATUS_SIZE -gt 102400 ]; then echo " âš ī¸ WARNING: status.json exceeds 100KB" echo " Recommendation: Run archival to reduce file size" echo " Command: bash scripts/archive-completed-stories.sh 7" elif [ $STATUS_SIZE -gt 51200 ]; then echo " â„šī¸ status.json is getting large (>50KB)" echo " Consider running archival soon" else echo " ✅ status.json size is healthy" fi fi if [ -f docs/09-agents/status-archive.json ]; then ARCHIVE_SIZE=$(stat -f%z docs/09-agents/status-archive.json 2>/dev/null || stat -c%s docs/09-agents/status-archive.json 2>/dev/null) ARCHIVE_KB=$((ARCHIVE_SIZE / 1024)) ARCHIVE_COUNT=$(jq '.stories | length' docs/09-agents/status-archive.json 2>/dev/null) echo " status-archive.json: ${ARCHIVE_KB}KB ($ARCHIVE_COUNT stories)" fi echo "" # Check 5: MCP Integration echo "🔌 MCP Integration" echo "------------------" if [ -f .mcp.json ]; then if jq empty .mcp.json 2>/dev/null; then echo " ✅ .mcp.json is valid JSON" # Check if in .gitignore if grep -q "^\\.mcp\\.json$" .gitignore 2>/dev/null; then echo " ✅ .mcp.json is in .gitignore (secure)" else echo " âš ī¸ WARNING: .mcp.json is NOT in .gitignore" echo " This is a SECURITY RISK - add it immediately!" JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " ❌ .mcp.json is INVALID JSON" JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " â„šī¸ MCP not configured (.mcp.json not found)" fi if [ -f .env ]; then # Check if in .gitignore if grep -q "^\\.env$" .gitignore 2>/dev/null; then echo " ✅ .env is in .gitignore (secure)" else echo " âš ī¸ WARNING: .env is NOT in .gitignore" echo " This is a SECURITY RISK - add it immediately!" JSON_ERRORS=$((JSON_ERRORS + 1)) fi else echo " â„šī¸ .env not found (optional if MCP not configured)" fi echo "" # Final Summary echo "📊 Diagnostic Summary" echo "=====================" if [ $JSON_ERRORS -eq 0 ]; then echo "✅ All checks passed! System is healthy." exit 0 else echo "âš ī¸ Found $JSON_ERRORS issue(s) that need attention." echo "" echo "Next steps:" echo "1. Fix JSON validation errors using: bash scripts/validate-json.sh " echo "2. Add missing files to .gitignore if needed" echo "3. Run archival if status.json is too large: bash scripts/archive-completed-stories.sh 7" echo "4. Re-run diagnostics after fixes: /AgileFlow:diagnose" exit 1 fi ``` **Output Format**: - Show all check results with ✅/❌/âš ī¸/â„šī¸ indicators - Display file sizes and story counts - Provide actionable recommendations for issues - Exit with code 0 if healthy, code 1 if issues found