783 lines
17 KiB
Markdown
783 lines
17 KiB
Markdown
# Migration Guide
|
|
|
|
> Version compatibility, migration instructions, and rollback procedures
|
|
|
|
**Version:** 1.0
|
|
**Last Updated:** 2026-02-15
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Version Compatibility Matrix](#version-compatibility-matrix)
|
|
2. [Breaking Changes by Version](#breaking-changes-by-version)
|
|
3. [Migration Procedures](#migration-procedures)
|
|
4. [Rollback Procedures](#rollback-procedures)
|
|
5. [Migration Examples](#migration-examples)
|
|
6. [Troubleshooting Migrations](#troubleshooting-migrations)
|
|
|
|
---
|
|
|
|
## Version Compatibility Matrix
|
|
|
|
### Current Version Support
|
|
|
|
| Version | Status | Support End | Compatible With | Implementation |
|
|
|---------|--------|-------------|-----------------|----------------|
|
|
| 2.6.x | Current | 2027-02-15 | 2.0.x, 1.10.x | **Go** |
|
|
| 2.0.x | Maintained | 2026-10-15 | 1.10.x, 1.9.x | Go |
|
|
| 1.10.x | Maintained | 2026-08-15 | 1.9.x | Go |
|
|
| 1.9.x | Maintained | 2026-06-15 | 1.8.x | Go |
|
|
| 1.8.x | Deprecated | 2026-04-15 | 1.7.x | Python |
|
|
| < 1.8.0 | End of Life | - | - | Python |
|
|
|
|
### Compatibility Legend
|
|
|
|
| Symbol | Meaning |
|
|
|--------|---------|
|
|
| Full | All features compatible |
|
|
| Partial | Some features require configuration |
|
|
| Breaking | Requires migration steps |
|
|
| N/A | Not compatible |
|
|
|
|
### MCP Server Compatibility
|
|
|
|
| Client Version | MCP Server 1.9 | MCP Server 1.10 | MCP Server 2.0 |
|
|
|----------------|----------------|-----------------|----------------|
|
|
| Claude Code 1.x | Full | Full | Full |
|
|
| Claude Code 2.x | Partial | Full | Full |
|
|
| OpenCode 1.x | Full | Full | Full |
|
|
| Cursor 1.x | N/A | Partial | Full |
|
|
| Custom Clients | Breaking | Partial | Full |
|
|
|
|
### Database Compatibility
|
|
|
|
| Database Version | Schema Version | Migration Required |
|
|
|------------------|----------------|------------------|
|
|
| PostgreSQL 15 | v1.8 | Yes |
|
|
| PostgreSQL 16 | v1.9+ | No |
|
|
| Redis 6 | v1.8 | Yes |
|
|
| Redis 7 | v1.9+ | No |
|
|
|
|
---
|
|
|
|
## Breaking Changes by Version
|
|
|
|
### v2.6.0 (Current) - Go Migration
|
|
|
|
**Release Date:** 2026-02-15
|
|
|
|
#### Breaking Changes
|
|
|
|
1. **Language Migration: Python to Go**
|
|
- **Old:** `scripts/team_manager.py` (Python)
|
|
- **New:** `mcp-server/internal/team/` (Go package)
|
|
- **Impact:** No runtime Python required
|
|
- **API:** Unchanged from MCP client perspective
|
|
|
|
2. **Build Process**
|
|
- Old: `pip install -r requirements.txt`
|
|
- New: `go build ./cmd/server`
|
|
- Binary: Single static binary vs Python interpreter
|
|
|
|
3. **Container**
|
|
- Old: Python-based image (~500MB)
|
|
- New: Distroless Go image (~50MB)
|
|
- Security: Non-root, read-only filesystem, dropped capabilities
|
|
|
|
#### Migration Benefits
|
|
|
|
| Metric | Python | Go | Improvement |
|
|
|--------|--------|-----|-------------|
|
|
| Container Size | ~500MB | ~50MB | **10x smaller** |
|
|
| Startup Time | ~3s | ~100ms | **30x faster** |
|
|
| Memory Usage | ~200MB | ~20MB | **10x less** |
|
|
| Security | Full OS | Distroless | **Hardened** |
|
|
|
|
#### New Features
|
|
|
|
- Team size validation (TEAM-007 compliance)
|
|
- Phase gate automation
|
|
- Agent team mapping
|
|
- Extended MCP tools (5 new tools)
|
|
- Hot-reloadable configuration
|
|
- Circuit breaker patterns
|
|
|
|
---
|
|
|
|
### v2.0.0
|
|
|
|
**Release Date:** 2026-02-15
|
|
|
|
#### Breaking Changes
|
|
|
|
1. **Team Configuration Schema v2**
|
|
- New required field: `team_version`
|
|
- Changed `members` from array to object structure
|
|
- Added `metadata` field for custom properties
|
|
|
|
2. **API Endpoint Changes**
|
|
- `/mcp/v1/message` - Now requires `session_id` parameter
|
|
- `/mcp/v1/sse` - Changed event format
|
|
|
|
3. **Environment Variables**
|
|
- `MCP_PORT` renamed to `MCP_SERVER_PORT`
|
|
- `WEB_PORT` renamed to `WEB_UI_PORT`
|
|
- New required: `TEAM_CONFIG_VERSION`
|
|
|
|
#### New Features
|
|
|
|
- Team size validation (TEAM-007 compliance)
|
|
- Phase gate automation
|
|
- Agent team mapping
|
|
- Extended MCP tools (5 new tools)
|
|
|
|
---
|
|
|
|
### v1.10.0
|
|
|
|
**Release Date:** 2026-02-08
|
|
|
|
#### Breaking Changes
|
|
|
|
None. This is a backward-compatible release.
|
|
|
|
#### New Features
|
|
|
|
- 5 new MCP tools (`guardrail_validate_scope`, etc.)
|
|
- 6 new MCP resources
|
|
- Web UI Management Interface
|
|
- Documentation search functionality
|
|
|
|
#### Migration Notes
|
|
|
|
- All changes are additive
|
|
- No configuration changes required
|
|
- New tools available immediately after upgrade
|
|
|
|
---
|
|
|
|
### v1.9.0
|
|
|
|
**Release Date:** 2026-02-07
|
|
|
|
#### Breaking Changes
|
|
|
|
1. **MCP Protocol Migration**
|
|
- Moved from custom protocol to standard MCP
|
|
- Port changed: 8094 (SSE), 8095 (message)
|
|
- Authentication now requires `Authorization` header
|
|
|
|
2. **Configuration Structure**
|
|
- `.teams/` directory location changed
|
|
- New required files: `.guardrails/rules.json`
|
|
|
|
3. **Tool Names**
|
|
- `validate_bash` renamed to `guardrail_validate_bash`
|
|
- `validate_git` renamed to `guardrail_validate_git_operation`
|
|
- `validate_file` renamed to `guardrail_validate_file_edit`
|
|
|
|
#### New Features
|
|
|
|
- Full MCP server implementation
|
|
- SSE transport support
|
|
- PostgreSQL and Redis backends
|
|
- Production deployment support
|
|
|
|
---
|
|
|
|
### v1.8.0 to v1.9.0
|
|
|
|
**Critical:** This is a major protocol change. Plan for downtime.
|
|
|
|
#### Breaking Changes
|
|
|
|
1. **Port Configuration**
|
|
- Old: Port 8094 (custom protocol)
|
|
- New: Port 8092 (MCP SSE), 8093 (Web UI)
|
|
|
|
2. **Client Configuration**
|
|
- Old: Direct HTTP calls
|
|
- New: MCP protocol with SSE
|
|
|
|
---
|
|
|
|
## Migration Procedures
|
|
|
|
### Pre-Migration Checklist
|
|
|
|
Before starting any migration:
|
|
|
|
```bash
|
|
# 1. Backup current state
|
|
./scripts/backup.sh --full
|
|
|
|
# 2. Verify backup integrity
|
|
./scripts/verify_backup.sh /backups/guardrails-$(date +%Y%m%d).tar.gz
|
|
|
|
# 3. Check current version
|
|
git describe --tags
|
|
|
|
# 4. Review breaking changes
|
|
cat docs/MIGRATION.md | grep -A 20 "v$(TARGET_VERSION)"
|
|
|
|
# 5. Test in staging environment
|
|
./scripts/test_migration.sh --version $TARGET_VERSION
|
|
```
|
|
|
|
---
|
|
|
|
### Migrating to v2.6.0 (Go Implementation)
|
|
|
|
**Go Migration:** The MCP server and team management have been migrated from Python to Go.
|
|
- **Benefits:** Smaller container size, distroless compatibility, improved security
|
|
- **API Compatibility:** Unchanged from MCP perspective
|
|
- **Location:** Go code is in `mcp-server/internal/`
|
|
|
|
**Estimated Time:** 30-45 minutes
|
|
**Downtime Required:** Yes (5-10 minutes)
|
|
|
|
#### Step 1: Pre-Migration (5 min)
|
|
|
|
```bash
|
|
# Stop the MCP server
|
|
pkill -f mcp_server || true
|
|
|
|
# Create full backup
|
|
mkdir -p backups/$(date +%Y%m%d)
|
|
cp -r .teams/ .guardrails/ backups/$(date +%Y%m%d)/
|
|
cp .env backups/$(date +%Y%m%d)/
|
|
|
|
# Export team configurations (Go binary)
|
|
cd mcp-server && go run ./cmd/tools/export_teams.go --format json > ../backups/$(date +%Y%m%d)/teams_export.json && cd ..
|
|
```
|
|
|
|
#### Step 2: Update Configuration (10 min)
|
|
|
|
```bash
|
|
# Update environment variables
|
|
# OLD:
|
|
# MCP_PORT=8094
|
|
# WEB_PORT=8093
|
|
|
|
# NEW:
|
|
cat >> .env << 'EOF'
|
|
# v2.6.0 Configuration (Go Implementation)
|
|
MCP_SERVER_PORT=8094
|
|
WEB_UI_PORT=8093
|
|
TEAM_CONFIG_VERSION=2
|
|
EOF
|
|
|
|
# Update team configuration schema (Go binary)
|
|
cd mcp-server && go run ./cmd/tools/migrate_config.go --from-version 1 --to-version 2 && cd ..
|
|
```
|
|
|
|
#### Step 3: Database Migration (10 min)
|
|
|
|
```bash
|
|
# Run database migrations (using golang-migrate)
|
|
cd mcp-server
|
|
export DATABASE_URL="postgresql://guardrails:password@localhost:5432/guardrails?sslmode=disable"
|
|
make migrate-up
|
|
|
|
# Verify migration
|
|
psql -U guardrails -d guardrails -c "\dt"
|
|
psql -U guardrails -d guardrails -c "SELECT version FROM schema_migrations ORDER BY version DESC LIMIT 1;"
|
|
```
|
|
|
|
#### Step 4: Deploy New Version (5 min)
|
|
|
|
```bash
|
|
# Pull new version
|
|
git fetch origin
|
|
git checkout v2.6.0
|
|
|
|
# Build Go binary
|
|
cd mcp-server
|
|
go build -o bin/server ./cmd/server
|
|
cd ..
|
|
```
|
|
|
|
#### Step 5: Post-Migration (5 min)
|
|
|
|
```bash
|
|
# Start server
|
|
./start-mcp-server.sh
|
|
|
|
# Verify health
|
|
curl -s http://localhost:8094/mcp/v1/health | jq .
|
|
|
|
# Test team operations
|
|
curl -X POST http://localhost:8094/mcp/v1/message \
|
|
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"guardrail_team_list","arguments":{"project_name":"test-project"}}}'
|
|
|
|
# Verify team size validation
|
|
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":"test-project"}}}'
|
|
```
|
|
|
|
#### Step 6: Update Client Configurations
|
|
|
|
**Claude Code:**
|
|
```json
|
|
// .claude/settings.json
|
|
{
|
|
"mcpServers": {
|
|
"guardrails": {
|
|
"url": "http://localhost:8094/mcp/v1/sse",
|
|
"headers": {
|
|
"Authorization": "Bearer YOUR_API_KEY"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**OpenCode:**
|
|
```jsonc
|
|
// .opencode/oh-my-opencode.jsonc
|
|
{
|
|
"mcp": {
|
|
"servers": [
|
|
{
|
|
"name": "guardrails",
|
|
"url": "http://localhost:8094/mcp/v1/sse",
|
|
"apiKey": "YOUR_API_KEY"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Migrating to v1.10.0
|
|
|
|
**Estimated Time:** 15-20 minutes
|
|
**Downtime Required:** Minimal (rolling update possible)
|
|
|
|
#### Step 1: Backup
|
|
|
|
```bash
|
|
cp -r .teams/ .teams-backup-$(date +%Y%m%d)/
|
|
cp .env .env.backup-$(date +%Y%m%d)
|
|
```
|
|
|
|
#### Step 2: Update Code
|
|
|
|
```bash
|
|
git fetch origin
|
|
git checkout v1.10.0
|
|
pip install -r requirements.txt
|
|
cd mcp-server && go build ./cmd/server && cd ..
|
|
```
|
|
|
|
#### Step 3: Restart Server
|
|
|
|
```bash
|
|
# Rolling restart (no downtime)
|
|
pkill -HUP -f mcp_server
|
|
|
|
# Or full restart
|
|
pkill -f mcp_server
|
|
./mcp-server/cmd/server/server
|
|
```
|
|
|
|
#### Step 4: Verify New Features
|
|
|
|
```bash
|
|
# Access Web UI
|
|
open http://localhost:8080/web
|
|
|
|
# Test new tools
|
|
curl -X POST http://localhost:8092/mcp/v1/message \
|
|
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"guardrail_validate_scope","arguments":{"path":"src/main.py","allowed_paths":["src/","tests/"]}}}'
|
|
```
|
|
|
|
---
|
|
|
|
### Migrating to v1.9.0
|
|
|
|
**Estimated Time:** 45-60 minutes
|
|
**Downtime Required:** Yes (protocol change)
|
|
|
|
#### Step 1: Full Backup
|
|
|
|
```bash
|
|
./scripts/full_backup.sh --output backups/pre-mcp-migration/
|
|
```
|
|
|
|
#### Step 2: Prepare New Infrastructure
|
|
|
|
```bash
|
|
# Setup PostgreSQL and Redis
|
|
# See deployment guide in RELEASE_v1.9.0.md
|
|
|
|
# Create new environment file
|
|
cat > .env.v1.9.0 << 'EOF'
|
|
MCP_API_KEY=<generate with: openssl rand -hex 32>
|
|
IDE_API_KEY=<generate with: openssl rand -hex 32>
|
|
JWT_SECRET=<generate with: openssl rand -hex 48>
|
|
|
|
DB_HOST=postgres
|
|
DB_PORT=5432
|
|
DB_NAME=guardrails
|
|
DB_USER=guardrails
|
|
DB_PASSWORD=<secure password>
|
|
DB_SSLMODE=disable
|
|
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=<secure password>
|
|
REDIS_USE_TLS=false
|
|
|
|
MCP_PORT=8080
|
|
WEB_PORT=8081
|
|
WEB_ENABLED=true
|
|
LOG_LEVEL=info
|
|
REQUEST_TIMEOUT=30s
|
|
EOF
|
|
```
|
|
|
|
#### Step 3: Deploy New Server
|
|
|
|
```bash
|
|
# Build container
|
|
cd mcp-server
|
|
docker build -t guardrail-mcp:v1.9.0 -f deploy/Dockerfile .
|
|
|
|
# Deploy
|
|
docker-compose -f deploy/docker-compose.yml up -d
|
|
```
|
|
|
|
#### Step 4: Migrate Data
|
|
|
|
```bash
|
|
# Export from old format
|
|
python scripts/export_v1.8.py > migration_data.json
|
|
|
|
# Import to new format
|
|
python scripts/import_v1.9.py --input migration_data.json
|
|
```
|
|
|
|
#### Step 5: Update Clients
|
|
|
|
Update all client configurations to use new MCP endpoints:
|
|
- Old: `http://localhost:8094`
|
|
- New: `http://localhost:8092/mcp/v1/sse`
|
|
|
|
---
|
|
|
|
## Rollback Procedures
|
|
|
|
### Automatic Rollback Triggers
|
|
|
|
The system will automatically rollback if:
|
|
|
|
1. Health checks fail for 5 consecutive attempts
|
|
2. Database migration checksums don't match
|
|
3. Team configuration validation fails
|
|
|
|
### Manual Rollback
|
|
|
|
#### Rollback from v2.6.0 to v2.0.0
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# rollback_to_v2.0.0.sh
|
|
|
|
set -e
|
|
|
|
echo "Starting rollback to v2.0.0..."
|
|
|
|
# 1. Stop current server
|
|
pkill -f mcp_server || true
|
|
|
|
# 2. Restore configuration from backup
|
|
BACKUP_DIR="backups/$(ls -t backups/ | head -1)"
|
|
cp "$BACKUP_DIR/.env" .env
|
|
|
|
# 3. Restore team configurations
|
|
cp -r "$BACKUP_DIR/.teams/" .
|
|
cp -r "$BACKUP_DIR/.guardrails/" .
|
|
|
|
# 4. Checkout previous version
|
|
git checkout v2.0.0
|
|
|
|
# 5. Rebuild Go binary
|
|
cd mcp-server
|
|
go build -o bin/server ./cmd/server
|
|
cd ..
|
|
|
|
# 6. Start server
|
|
./mcp-server/bin/server &
|
|
|
|
# 7. Verify
|
|
echo "Waiting for server..."
|
|
sleep 5
|
|
curl -s http://localhost:8094/mcp/v1/health && echo "Rollback successful!"
|
|
```
|
|
|
|
#### Rollback Database
|
|
|
|
```bash
|
|
# Rollback one migration (golang-migrate)
|
|
cd mcp-server
|
|
make migrate-down
|
|
|
|
# Or restore from backup
|
|
createdb guardrails_backup
|
|
gunzip < backups/postgres-$(date +%Y%m%d).sql.gz | psql guardrails_backup
|
|
```
|
|
|
|
#### Emergency Rollback
|
|
|
|
If the system is completely broken:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# emergency_rollback.sh
|
|
|
|
echo "EMERGENCY ROLLBACK INITIATED"
|
|
|
|
# Stop everything
|
|
pkill -9 -f mcp_server || true
|
|
docker-compose down || true
|
|
|
|
# Restore from latest backup
|
|
LATEST_BACKUP=$(ls -td backups/*/ | head -1)
|
|
echo "Restoring from: $LATEST_BACKUP"
|
|
|
|
# Restore files
|
|
cp -r "$LATEST_BACKUP/." .
|
|
|
|
# Checkout last known good version (Go implementation)
|
|
git checkout v2.0.0
|
|
|
|
# Rebuild and start
|
|
cd mcp-server
|
|
go build -o bin/server ./cmd/server
|
|
cd ..
|
|
nohup ./mcp-server/bin/server > mcp.log 2>&1 &
|
|
|
|
echo "Emergency rollback complete"
|
|
echo "Check logs: tail -f mcp.log"
|
|
```
|
|
|
|
---
|
|
|
|
## Migration Examples
|
|
|
|
### Example 1: Single Project Migration
|
|
|
|
```bash
|
|
# Migrate single project from v1.9.0 to v2.0.0
|
|
PROJECT_NAME="my-web-app"
|
|
|
|
# Step 1: Export project config
|
|
python scripts/export_project.py "$PROJECT_NAME" > "$PROJECT_NAME-v1.9.json"
|
|
|
|
# Step 2: Transform to v2.0.0 format
|
|
python scripts/transform_team_config.py \
|
|
--input "$PROJECT_NAME-v1.9.json" \
|
|
--from-version 1.9 \
|
|
--to-version 2.0 \
|
|
--output "$PROJECT_NAME-v2.0.json"
|
|
|
|
# Step 3: Validate new format
|
|
python scripts/validate_team_config.py "$PROJECT_NAME-v2.0.json"
|
|
|
|
# Step 4: Import to v2.0.0
|
|
python scripts/import_project.py "$PROJECT_NAME-v2.0.json"
|
|
|
|
# Step 5: Verify
|
|
./scripts/verify_project.sh "$PROJECT_NAME"
|
|
```
|
|
|
|
### Example 2: Batch Migration Script
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# migrate_all_projects.sh
|
|
|
|
set -e
|
|
|
|
FROM_VERSION="1.9.0"
|
|
TO_VERSION="2.0.0"
|
|
FAILED_LOG="migration_failed_$(date +%Y%m%d).log"
|
|
SUCCESS_COUNT=0
|
|
FAIL_COUNT=0
|
|
|
|
echo "Starting batch migration from $FROM_VERSION to $TO_VERSION"
|
|
|
|
# Get all projects
|
|
PROJECTS=$(ls .teams/*.json | xargs -n1 basename | sed 's/.json$//')
|
|
|
|
for PROJECT in $PROJECTS; do
|
|
echo "Migrating $PROJECT..."
|
|
|
|
if python scripts/migrate_project.py \
|
|
--project "$PROJECT" \
|
|
--from-version "$FROM_VERSION" \
|
|
--to-version "$TO_VERSION" \
|
|
--backup; then
|
|
|
|
echo " SUCCESS: $PROJECT"
|
|
((SUCCESS_COUNT++))
|
|
else
|
|
echo " FAILED: $PROJECT"
|
|
echo "$PROJECT" >> "$FAILED_LOG"
|
|
((FAIL_COUNT++))
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Migration Summary:"
|
|
echo " Successful: $SUCCESS_COUNT"
|
|
echo " Failed: $FAIL_COUNT"
|
|
|
|
if [ $FAIL_COUNT -gt 0 ]; then
|
|
echo "Failed projects logged to: $FAILED_LOG"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
### Example 3: Zero-Downtime Migration
|
|
|
|
For v1.10.0 (no breaking changes):
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# zero_downtime_migration.sh
|
|
|
|
# Start new version on different port
|
|
MCP_PORT=8096 WEB_PORT=8097 ./mcp-server/cmd/server/server &
|
|
NEW_PID=$!
|
|
|
|
# Wait for health check
|
|
for i in {1..30}; do
|
|
if curl -s http://localhost:8096/mcp/v1/health; then
|
|
echo "New server ready"
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
# Switch load balancer to new port
|
|
sudo sed -i 's/8094/8096/g' /etc/nginx/conf.d/mcp.conf
|
|
sudo nginx -s reload
|
|
|
|
# Stop old server
|
|
pkill -f "mcp_server.*8094"
|
|
|
|
# Update to use standard port
|
|
kill $NEW_PID
|
|
MCP_PORT=8094 ./mcp-server/cmd/server/server &
|
|
sudo sed -i 's/8096/8094/g' /etc/nginx/conf.d/mcp.conf
|
|
sudo nginx -s reload
|
|
|
|
echo "Zero-downtime migration complete"
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting Migrations
|
|
|
|
### Common Migration Issues
|
|
|
|
#### Issue: "Team configuration version mismatch"
|
|
|
|
**Cause:** Migration script didn't update all config files
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Force version update (Go binary)
|
|
cd mcp-server
|
|
go run ./cmd/tools/update_config.go --version 2.0
|
|
|
|
# Re-run migration
|
|
go run ./cmd/tools/migrate_config.go --from-version 1 --to-version 2 --force
|
|
```
|
|
|
|
#### Issue: "Database migration failed"
|
|
|
|
**Cause:** Partial migration or checksum mismatch
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check migration status
|
|
cd mcp-server
|
|
make migrate-status
|
|
|
|
# Fix by marking as applied
|
|
migrate -path internal/database/migrations -database "$DATABASE_URL" force 20260215000001
|
|
|
|
# Or rollback and retry
|
|
make migrate-down
|
|
make migrate-up
|
|
```
|
|
|
|
#### Issue: "Port already in use"
|
|
|
|
**Cause:** Old server still running
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Find and kill old process
|
|
lsof -ti:8094 | xargs kill -9
|
|
|
|
# Or use different port temporarily
|
|
MCP_PORT=8096 ./mcp-server/cmd/server/server
|
|
```
|
|
|
|
#### Issue: "Client connection refused"
|
|
|
|
**Cause:** Client configured for old endpoint
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Update client configuration
|
|
./scripts/update_client_configs.sh --new-port 8094 --new-path /mcp/v1/sse
|
|
|
|
# Verify connectivity
|
|
curl -H "Authorization: Bearer $API_KEY" \
|
|
http://localhost:8094/mcp/v1/health
|
|
```
|
|
|
|
### Migration Verification
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# verify_migration.sh
|
|
|
|
echo "Verifying migration..."
|
|
|
|
# Check server health
|
|
echo -n "Health check: "
|
|
curl -sf http://localhost:8094/mcp/v1/health && echo "PASS" || echo "FAIL"
|
|
|
|
# Check version
|
|
echo -n "Version check: "
|
|
git describe --tags | grep -q "v2.0" && echo "PASS" || echo "FAIL"
|
|
|
|
# Check database
|
|
echo -n "Database check: "
|
|
psql -U guardrails -c "SELECT version FROM schema_migrations ORDER BY version DESC LIMIT 1;" | grep -q "20260215" && echo "PASS" || echo "FAIL"
|
|
|
|
# Check team configs
|
|
echo -n "Team config check: "
|
|
python scripts/validate_all_configs.py && echo "PASS" || echo "FAIL"
|
|
|
|
# Test basic operation
|
|
echo -n "Operation check: "
|
|
curl -s -X POST http://localhost:8094/mcp/v1/message \
|
|
-d '{"jsonrpc":"2.0","method":"tools/list"}' | grep -q "guardrail_team" && echo "PASS" || echo "FAIL"
|
|
|
|
echo "Verification complete"
|
|
```
|
|
|
|
---
|
|
|
|
**Last Updated:** 2026-02-15
|
|
**Version:** 1.0
|