claw-code/.guardrails/docs/TROUBLESHOOTING.md

768 lines
15 KiB
Markdown

# Troubleshooting Guide
> Common issues, solutions, and recovery procedures for Agent Guardrails Template
**Version:** 1.0
**Last Updated:** 2026-02-15
---
## Table of Contents
1. [Quick Diagnostics](#quick-diagnostics)
2. [Common Errors](#common-errors)
3. [Debug Mode](#debug-mode)
4. [Log Analysis](#log-analysis)
5. [Performance Issues](#performance-issues)
6. [Recovery Procedures](#recovery-procedures)
7. [Getting Help](#getting-help)
---
## Quick Diagnostics
Run this checklist to quickly identify common issues:
```bash
# 1. Verify installation
curl -s http://localhost:8094/mcp/v1/health | jq .
# 2. Check configuration
ls -la .teams/
ls -la .guardrails/
# 3. Validate tools
python scripts/team_manager.py --validate
# 4. Test MCP connection
curl -s -X POST http://localhost:8094/mcp/v1/message \
-d '{"jsonrpc":"2.0","method":"tools/list"}' | jq .
```
**Expected Results:**
- Health endpoint returns `{"status": "ok"}`
- `.teams/` and `.guardrails/` directories exist
- Team manager script exits with code 0
- Tools list returns available guardrail tools
---
## Common Errors
### MCP Server Connection Failed
**Symptoms:**
```
Error: Connection refused (localhost:8094)
Error: Could not connect to MCP server
```
**Causes:**
- MCP server not running
- Wrong port configuration
- Firewall blocking connection
**Solutions:**
1. **Start the MCP server:**
```bash
python mcp_server.py
# or
./start-mcp-server.sh
```
2. **Verify port configuration:**
```bash
# Check if server is listening
netstat -tlnp | grep 8094
# or
lsof -i :8094
```
3. **Check firewall rules:**
```bash
# For Linux
sudo ufw allow 8094/tcp
# For macOS
sudo pfctl -e
```
---
### Team Initialization Failed
**Symptoms:**
```
Error: TEAM-001: Team not found
Error: Failed to initialize project
```
**Causes:**
- Project name contains invalid characters
- `.teams/` directory does not exist
- Permission issues
**Solutions:**
1. **Verify project name:**
```bash
# Valid: my-project, project_123, team-alpha
# Invalid: my project, project;rm -rf /
```
2. **Create required directories:**
```bash
mkdir -p .teams/
chmod 755 .teams/
```
3. **Check permissions:**
```bash
ls -la .teams/
# Should be writable by current user
```
---
### Team Size Violation (TEAM-007)
**Symptoms:**
```
Error: TEAM-005: Team size violation
Team 7 has 8 members (maximum is 6)
```
**Causes:**
- Too many members assigned to a team
- Batch assignment exceeded limits
**Solutions:**
1. **Check current team sizes:**
```bash
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_team_size_validate",
"arguments":{"project_name":"my-project"}
}
}'
```
2. **Remove excess members:**
```bash
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_team_unassign",
"arguments":{
"project_name":"my-project",
"team_id":7,
"role_name":"Extra Role"
}
}
}'
```
3. **Rebalance across teams:**
- Move members to teams with fewer than 4 members
- Split large teams into multiple smaller teams
---
### Phase Gate Check Failed
**Symptoms:**
```
Error: Phase gate requirements not met
Missing deliverables: Architecture Decision Records
```
**Causes:**
- Required deliverables not complete
- Required teams not assigned
- Approval not obtained
**Solutions:**
1. **List gate requirements:**
```bash
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_phase_gate_check",
"arguments":{
"project_name":"my-project",
"from_phase":1,
"to_phase":2
}
}
}'
```
2. **Complete missing deliverables:**
- See [Phase Gates](#phase-gate-requirements) section
- Submit required documents
- Obtain approvals
3. **Verify team assignments:**
```bash
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_team_status",
"arguments":{
"project_name":"my-project",
"phase":"Phase 1"
}
}
}'
```
---
### Role Already Assigned
**Symptoms:**
```
Error: TEAM-004: Person already assigned
Role 'Technical Lead' already has 'Alice Johnson' assigned
```
**Causes:**
- Attempted to assign to an occupied role
- Duplicate assignment in batch script
**Solutions:**
1. **Unassign current person:**
```bash
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_team_unassign",
"arguments":{
"project_name":"my-project",
"team_id":7,
"role_name":"Technical Lead"
}
}
}'
```
2. **Assign new person:**
```bash
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_team_assign",
"arguments":{
"project_name":"my-project",
"team_id":7,
"role_name":"Technical Lead",
"person":"New Lead Name"
}
}
}'
```
---
### API Key Authentication Failed
**Symptoms:**
```
Error: AUTH-001: Authentication required
Error: AUTH-002: Invalid API key
```
**Causes:**
- Missing Authorization header
- Expired or revoked API key
- Incorrect API key format
**Solutions:**
1. **Verify header format:**
```bash
curl -H "Authorization: Bearer YOUR_API_KEY" ...
```
2. **Generate new API key:**
```bash
python scripts/generate_api_key.py
```
3. **Check key permissions:**
```bash
python scripts/verify_api_key.py YOUR_API_KEY
```
---
## Debug Mode
Enable debug mode to get detailed logging for troubleshooting.
### Enable Debug Logging
**Option 1: Environment Variable**
```bash
export MCP_DEBUG=1
export MCP_LOG_LEVEL=debug
python mcp_server.py
```
**Option 2: Configuration File**
```json
// .mcp/config.json
{
"logging": {
"level": "debug",
"file": ".mcp/mcp.log",
"console": true
}
}
```
**Option 3: Command Line Flag**
```bash
python mcp_server.py --debug --log-file .mcp/debug.log
```
### Debug Output Examples
**Normal Operation:**
```
[DEBUG] Received request: tools/call
[DEBUG] Tool: guardrail_team_list
[DEBUG] Parameters: {"project_name": "my-project"}
[DEBUG] Execution time: 45ms
[INFO] Response sent successfully
```
**Error Condition:**
```
[DEBUG] Received request: tools/call
[DEBUG] Tool: guardrail_team_assign
[DEBUG] Parameters: {"team_id": 99, ...}
[ERROR] Validation failed: Invalid team_id
[ERROR] Error code: TEAM-002
[DEBUG] Stack trace:
File "scripts/team_manager.py", line 45, in validate_team
raise InvalidTeamError(f"Team {team_id} not found")
[INFO] Error response sent
```
---
## Log Analysis
### Log File Locations
| Component | Log File | Description |
|-----------|----------|-------------|
| MCP Server | `.mcp/mcp.log` | Main server logs |
| Team Manager | `.mcp/team_manager.log` | Team operations |
| Validation | `.mcp/validation.log` | Guardrail checks |
| Audit | `.mcp/audit.log` | Security events |
### Log Format
```
[TIMESTAMP] [LEVEL] [COMPONENT] Message
```
**Example:**
```
2026-02-15 14:32:15 [INFO] [MCP] Server started on port 8094
2026-02-15 14:32:18 [DEBUG] [TEAM] Validating team assignment
2026-02-15 14:32:18 [ERROR] [VALID] TEAM-002: Invalid team ID
```
### Common Log Patterns
**Startup Issues:**
```bash
# Check for port binding errors
grep "Address already in use" .mcp/mcp.log
# Check for permission denied
grep "Permission denied" .mcp/mcp.log
# Check for missing files
grep "No such file" .mcp/mcp.log
```
**Authentication Issues:**
```bash
# Find failed authentication attempts
grep "AUTH-" .mcp/audit.log
# List unauthorized access attempts
grep "403\|Unauthorized" .mcp/audit.log
```
**Performance Issues:**
```bash
# Find slow requests
grep "slow\|timeout" .mcp/mcp.log
# High response times
awk '/Execution time/ && $NF > 1000 {print}' .mcp/mcp.log
```
### Log Rotation
Configure automatic log rotation to prevent disk space issues:
```bash
# Add to crontab
crontab -e
# Rotate logs daily at midnight
0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/mcp
```
**logrotate configuration:**
```
# /etc/logrotate.d/mcp
/mnt/ollama/git/agent-guardrails-template/.mcp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 user user
}
```
---
## Performance Issues
### Slow Team Operations
**Symptoms:**
- Team list takes > 5 seconds
- Batch assignments timeout
- Phase gate checks are slow
**Diagnosis:**
```bash
# Check response times
time curl -s -X POST http://localhost:8094/mcp/v1/message \
-d '...team_list...'
# Monitor server resources
htop
iostat -x 1
```
**Solutions:**
1. **Enable caching:**
```json
{
"cache": {
"enabled": true,
"ttl": 30
}
}
```
2. **Optimize batch operations:**
```bash
# Use parallel processing
python scripts/batch_execute.py --parallel 8
```
3. **Increase timeouts:**
```bash
curl --max-time 30 ...
```
---
### High Memory Usage
**Symptoms:**
- MCP server using > 500MB RAM
- System swapping
- Out of memory errors
**Diagnosis:**
```bash
# Check memory usage
ps aux | grep mcp_server
free -h
# Monitor over time
watch -n 1 'ps -o pid,rss,cmd -p $(pgrep -f mcp_server)'
```
**Solutions:**
1. **Limit cache size:**
```json
{
"cache": {
"max_size": 100,
"ttl": 30
}
}
```
2. **Restart server periodically:**
```bash
# Add to cron
0 */6 * * * systemctl restart mcp-server
```
3. **Profile memory usage:**
```bash
python -m memory_profiler mcp_server.py
```
---
### Rate Limiting
**Symptoms:**
```
Error: RATE-001: Rate limit exceeded
Retry after 60 seconds
```
**Solutions:**
1. **Implement backoff:**
```python
import time
import random
def with_backoff(func, max_retries=5):
for i in range(max_retries):
try:
return func()
except RateLimitError:
wait = (2 ** i) + random.random()
time.sleep(wait)
raise MaxRetriesExceeded()
```
2. **Use batch endpoints:**
```bash
# Instead of multiple single calls
python scripts/batch_execute.py --file operations.json
```
3. **Request limit increase:**
Contact support to increase rate limits for your use case.
---
## Recovery Procedures
### Restore from Backup
**Prerequisites:**
- Backup files in `.teams/backups/`
- Valid project configuration
**Steps:**
```bash
# 1. Stop MCP server
pkill -f mcp_server
# 2. Backup current state
cp -r .teams/ .teams/emergency-backup-$(date +%Y%m%d)
# 3. Restore from backup
cp .teams/backups/project-backup-20260214.json .teams/my-project.json
# 4. Restart server
python mcp_server.py
# 5. Verify restoration
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"guardrail_team_list","arguments":{"project_name":"my-project"}}}'
```
---
### Reset Project State
**Warning:** This will remove all team assignments and reset to initial state.
```bash
# 1. Archive current state
mv .teams/my-project.json .teams/my-project-$(date +%Y%m%d).json.bak
# 2. Re-initialize project
curl -X POST http://localhost:8094/mcp/v1/message \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"guardrail_team_init",
"arguments":{"project_name":"my-project"}
}
}'
# 3. Re-assign team members from backup reference
```
---
### Repair Corrupted Configuration
**Symptoms:**
```
Error: Invalid JSON in team configuration
Error: PROJ-002: Project configuration missing
```
**Steps:**
```bash
# 1. Validate JSON syntax
python -m json.tool .teams/my-project.json > /dev/null
# 2. If invalid, try to recover
python scripts/repair_config.py .teams/my-project.json
# 3. If recovery fails, restore from backup
cp .teams/backups/my-project.json .teams/my-project.json
```
---
### Emergency Rollback
Use when critical errors occur during batch operations:
```bash
#!/bin/bash
# emergency_rollback.sh
PROJECT_NAME="$1"
BACKUP_FILE=".teams/backups/${PROJECT_NAME}-pre-batch.json"
if [ ! -f "$BACKUP_FILE" ]; then
echo "No backup found for $PROJECT_NAME"
exit 1
fi
echo "Rolling back $PROJECT_NAME..."
cp "$BACKUP_FILE" ".teams/${PROJECT_NAME}.json"
echo "Rollback complete."
echo "Verifying..."
curl -s -X POST http://localhost:8094/mcp/v1/message \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{\"name\":\"guardrail_team_list\",\"arguments\":{\"project_name\":\"$PROJECT_NAME\"}}}"
```
---
## Getting Help
### Self-Service Resources
1. **Documentation:**
- [TEAM_TOOLS.md](./TEAM_TOOLS.md) - Tool reference
- [AGENT_GUARDRAILS.md](./AGENT_GUARDRAILS.md) - Safety protocols
- [TEAM_STRUCTURE.md](./TEAM_STRUCTURE.md) - Team definitions
2. **Error Code Lookup:**
- See TEAM_TOOLS.md Error Handling section
- Search logs for error codes
3. **Community:**
- GitHub Issues: Report bugs and feature requests
- Discussions: Ask questions, share solutions
### Support Channels
| Issue Type | Channel | Response Time |
|------------|---------|---------------|
| Critical outage | Email: oncall@example.com | 15 minutes |
| Security issue | security@example.com | 4 hours |
| Feature request | GitHub Issues | 2-3 days |
| General question | GitHub Discussions | 1-2 days |
### Required Information
When reporting issues, include:
1. **Error message:** Full text or screenshot
2. **Log snippets:** Relevant sections from `.mcp/mcp.log`
3. **Steps to reproduce:** Minimal example
4. **Environment:**
```bash
python --version
uname -a
git log --oneline -1
```
5. **Configuration:** (sanitized)
```bash
cat .mcp/config.json | grep -v password
```
### Diagnostic Script
Run this script to gather diagnostic information:
```bash
#!/bin/bash
# diagnose.sh - Collect diagnostic information
echo "=== Agent Guardrails Diagnostics ==="
echo "Date: $(date)"
echo ""
echo "=== System Information ==="
uname -a
echo ""
echo "=== Python Version ==="
python --version
echo ""
echo "=== MCP Server Status ==="
pgrep -f mcp_server || echo "MCP server not running"
echo ""
echo "=== Recent Log Entries ==="
tail -50 .mcp/mcp.log 2>/dev/null || echo "No log file found"
echo ""
echo "=== Configuration ==="
ls -la .teams/ 2>/dev/null || echo "No .teams directory"
ls -la .guardrails/ 2>/dev/null || echo "No .guardrails directory"
echo ""
echo "=== Health Check ==="
curl -s http://localhost:8094/mcp/v1/health 2>/dev/null || echo "Health check failed"
echo ""
echo "=== Diagnostics Complete ==="
```
---
**Last Updated:** 2026-02-15
**Version:** 1.0