--- name: windsurf-migration-deep-dive description: | Execute Windsurf major re-architecture and migration strategies with strangler fig pattern. Use when migrating to or from Windsurf, performing major version upgrades, or re-platforming existing integrations to Windsurf. Trigger with phrases like "migrate windsurf", "windsurf migration", "switch to windsurf", "windsurf replatform", "windsurf upgrade major". allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(node:*), Bash(kubectl:*) version: 1.0.0 license: MIT author: Jeremy Longshore --- # Windsurf Migration Deep Dive ## Overview Comprehensive guide for migrating to or from Windsurf, or major version upgrades. ## Prerequisites - Current system documentation - Windsurf SDK installed - Feature flag infrastructure - Rollback strategy tested ## Migration Types | Type | Complexity | Duration | Risk | |------|-----------|----------|------| | Fresh install | Low | Days | Low | | From competitor | Medium | Weeks | Medium | | Major version | Medium | Weeks | Medium | | Full replatform | High | Months | High | ## Pre-Migration Assessment ### Step 1: Current State Analysis ```bash # Document current implementation find . -name "*.ts" -o -name "*.py" | xargs grep -l "windsurf" > windsurf-files.txt # Count integration points wc -l windsurf-files.txt # Identify dependencies npm list | grep windsurf pip freeze | grep windsurf ``` ### Step 2: Data Inventory ```typescript interface MigrationInventory { dataTypes: string[]; recordCounts: Record; dependencies: string[]; integrationPoints: string[]; customizations: string[]; } async function assessWindsurfMigration(): Promise { return { dataTypes: await getDataTypes(), recordCounts: await getRecordCounts(), dependencies: await analyzeDependencies(), integrationPoints: await findIntegrationPoints(), customizations: await documentCustomizations(), }; } ``` ## Migration Strategy: Strangler Fig Pattern ``` Phase 1: Parallel Run ┌─────────────┐ ┌─────────────┐ │ Old │ │ New │ │ System │ ──▶ │ Windsurf │ │ (100%) │ │ (0%) │ └─────────────┘ └─────────────┘ Phase 2: Gradual Shift ┌─────────────┐ ┌─────────────┐ │ Old │ │ New │ │ (50%) │ ──▶ │ (50%) │ └─────────────┘ └─────────────┘ Phase 3: Complete ┌─────────────┐ ┌─────────────┐ │ Old │ │ New │ │ (0%) │ ──▶ │ (100%) │ └─────────────┘ └─────────────┘ ``` ## Implementation Plan ### Phase 1: Setup (Week 1-2) ```bash # Install Windsurf SDK npm install @windsurf/sdk # Configure credentials cp .env.example .env.windsurf # Edit with new credentials # Verify connectivity node -e "require('@windsurf/sdk').ping()" ``` ### Phase 2: Adapter Layer (Week 3-4) ```typescript // src/adapters/windsurf.ts interface ServiceAdapter { create(data: CreateInput): Promise; read(id: string): Promise; update(id: string, data: UpdateInput): Promise; delete(id: string): Promise; } class WindsurfAdapter implements ServiceAdapter { async create(data: CreateInput): Promise { const windsurfData = this.transform(data); return windsurfClient.create(windsurfData); } private transform(data: CreateInput): WindsurfInput { // Map from old format to Windsurf format } } ``` ### Phase 3: Data Migration (Week 5-6) ```typescript async function migrateWindsurfData(): Promise { const batchSize = 100; let processed = 0; let errors: MigrationError[] = []; for await (const batch of oldSystem.iterateBatches(batchSize)) { try { const transformed = batch.map(transform); await windsurfClient.batchCreate(transformed); processed += batch.length; } catch (error) { errors.push({ batch, error }); } // Progress update console.log(`Migrated ${processed} records`); } return { processed, errors }; } ``` ### Phase 4: Traffic Shift (Week 7-8) ```typescript // Feature flag controlled traffic split function getServiceAdapter(): ServiceAdapter { const windsurfPercentage = getFeatureFlag('windsurf_migration_percentage'); if (Math.random() * 100 < windsurfPercentage) { return new WindsurfAdapter(); } return new LegacyAdapter(); } ``` ## Rollback Plan ```bash # Immediate rollback kubectl set env deployment/app WINDSURF_ENABLED=false kubectl rollout restart deployment/app # Data rollback (if needed) ./scripts/restore-from-backup.sh --date YYYY-MM-DD # Verify rollback curl https://app.yourcompany.com/health | jq '.services.windsurf' ``` ## Post-Migration Validation ```typescript async function validateWindsurfMigration(): Promise { const checks = [ { name: 'Data count match', fn: checkDataCounts }, { name: 'API functionality', fn: checkApiFunctionality }, { name: 'Performance baseline', fn: checkPerformance }, { name: 'Error rates', fn: checkErrorRates }, ]; const results = await Promise.all( checks.map(async c => ({ name: c.name, result: await c.fn() })) ); return { checks: results, passed: results.every(r => r.result.success) }; } ``` ## Instructions ### Step 1: Assess Current State Document existing implementation and data inventory. ### Step 2: Build Adapter Layer Create abstraction layer for gradual migration. ### Step 3: Migrate Data Run batch data migration with error handling. ### Step 4: Shift Traffic Gradually route traffic to new Windsurf integration. ## Output - Migration assessment complete - Adapter layer implemented - Data migrated successfully - Traffic fully shifted to Windsurf ## Error Handling | Issue | Cause | Solution | |-------|-------|----------| | Data mismatch | Transform errors | Validate transform logic | | Performance drop | No caching | Add caching layer | | Rollback triggered | Errors spiked | Reduce traffic percentage | | Validation failed | Missing data | Check batch processing | ## Examples ### Quick Migration Status ```typescript const status = await validateWindsurfMigration(); console.log(`Migration ${status.passed ? 'PASSED' : 'FAILED'}`); status.checks.forEach(c => console.log(` ${c.name}: ${c.result.success}`)); ``` ## Resources - [Strangler Fig Pattern](https://martinfowler.com/bliki/StranglerFigApplication.html) - [Windsurf Migration Guide](https://docs.windsurf.com/migration) ## Flagship+ Skills For advanced troubleshooting, see `windsurf-advanced-troubleshooting`.