Phased Deployment Checklist
Last Updated: 2025-10-28T02:00:00Z
Current Phase: Sprint 4 - Hybrid Storage Architecture (🚧 IN PLANNING)
Latest Build: Build #18 (8449bd02-7a28-4de2-8e26-7618396b3c2f)
Status: ✅ Build #18 OPERATIONAL - Pods healthy, ready for hybrid storage implementation
Recent Completion: Build #18 (2025-10-28)
- ✅ Non-root execution (coditect user UID 1001)
- ✅ Multi-llm CLI suite (7 providers)
- ✅ All pods healthy and serving traffic
- ✅ Documentation updated (CLAUDE.md, README.md with hybrid storage architecture)
- ✅ ADR-028 created (Part 1: Problem, Part 2: Implementation)
Next: Sprint 4 - Hybrid Storage Implementation (30-38 hours, 6 phases)
Sprint 1: Backend Compilation & Deployment (✅ COMPLETE)
Goal: Get Rust backend compiled, tested, and deployed to GCP Estimated: 2-4 hours Status: ✅ COMPLETE - All goals achieved, ready for Sprint 2
Compilation Fixes (✅ COMPLETE)
- Fix
rand_core::OsRng→rand::rngs::OsRngimport - Add missing
webimport in auth middleware - Fix
AuthSession::new()type mismatches (ip_address, user_agent) - Fix
refresh_expires_atOption handling - Fix
UserRepository.create()→create_with_tenant() - Remove broken
with_transaction()helper - Fix 5
get_range()i32 → usize type casts - Fix 26
TransactionCommitError.context()→map_err()patterns
Testing & Deployment
-
Test backend compilation locally ✅ 2025-10-15T07:30:00Z
- Location:
/home/halcasteel/v5/Coditect-v5-multiple-llm-IDE/backend/ - Command:
cargo build --release - Result: Successful compilation (34 warnings, 0 errors)
- Location:
-
Fix compilation warnings ✅ 2025-10-15T07:45:00Z
- Improved: 34 warnings → 25 warnings (9 warnings fixed)
- Fixed: Unused imports, dead code annotations added
- Remaining: 25 warnings are intentional future functionality
- Quality: Clean production-ready code
-
Deploy to GCP Cloud Build ✅ 2025-10-16T16:20:00Z
- Build ID: 13e35c68-4cf1-4f6b-a13f-5f0ed20b829f
- Docker image:
us-central1-docker.pkg.dev/serene-voltage-464305-n2/coditect/coditect-v5-api:latest - Status: Image built successfully, deployed to GKE
- Note: Cloud Run deployment failed, used GKE instead
-
Verify GKE deployment ✅ 2025-10-16T16:22:00Z
- Pod Status: 2/3 Running (1/1), 1 pod starting up
- Logs: Clean startup, health endpoint responding with HTTP 200
- FoundationDB: Connected and healthy (double redundancy, 3 nodes)
- Expected: No CrashLoopBackOff ✅ ACHIEVED
API Endpoint Verification (✅ DEPLOYED & VERIFIED)
-
Test health endpoint ✅ 2025-10-16T16:22:00Z
- Endpoint:
GET /api/v5/health(internal Kubernetes probes) - Result: ✅ PASS - HTTP 200, Kubernetes liveness probes successful
- External: Requires JWT authentication (middleware working)
- Production Status: HEALTHY ✅
- Endpoint:
-
Test ready endpoint ✅ 2025-10-16T16:22:00Z
- Endpoint:
GET /api/v5/ready(Kubernetes readiness probes) - Result: ✅ PASS - Pods ready for traffic
- FoundationDB: Connected and operational
- Production Status: READY ✅
- Endpoint:
Sprint 2: Full Stack Deployment (✅ COMPLETE)
Goal: Deploy complete stack (Frontend + theia + Backend) to production Actual Duration: 2 days (Oct 19-20, 2025) Status: ✅ COMPLETE - All services deployed and verified
Deployment History
Build #12 (13e4134c-818e-4192-9963-c7dce7a02265) - Oct 19, 2025
- ✅ Deployed but missing API URL fix (commit not included)
- ⚠️ Frontend bundle had old code (pre-fix)
Build #13 (38c75204-a462-44f0-b53b-c0d19934729a) - Oct 19, 2025
- ✅ Deployed with api-client.ts fix
- ⚠️ Missing file-service.ts fix
Build #14 (60d0f652-7e7f-4e18-b802-af9798a7addd) - Oct 20, 2025
- ✅ Complete API URL fix (api-client.ts + file-service.ts)
- ✅ Fresh Vite build with all fixes
- ✅ 3/3 pods running healthy
- ✅ Production verification passed (13/15 tests)
- ✅ Commits: a8b62e5, 4e57ed6, 687b278
Build #15 (8b0cf3a1-95e7-4baf-a18d-d48414ede6b0) - Oct 20, 2025 ✅ PRODUCTION
- ✅ Billing fields added to User model (8 optional fields)
- ✅ Type alignment: snake_case → camelCase (tenantId, isActive, etc.)
- ✅ Split display_name → firstName + lastName
- ✅ Fixed metadata type: String → serde_json::Value
- ✅ Backend build: 12.81s, 46 warnings (acceptable)
- ✅ Frontend type check: 0 errors
- ✅ Frontend build: theia + React compiled successfully
- ✅ GKE deployment: 12m12s, 3/3 pods running
- ✅ Commits: d719c30 (implementation), a98c04e (checklist)
API URL Configuration Fix (✅ COMPLETE)
Critical Issue Resolved: Frontend was calling localhost:8080 instead of /api/v5
Root Cause:
- Environment variables processed at Vite build time
.envfile included in Docker builds despite.dockerignore- Docker layer caching didn't invalidate when .env changed
Solution: Hardcoded relative paths in source code (production best practice)
Files Modified:
-
src/services/api-client.ts:5- Changed toconst API_BASE_URL = '/api/v5' -
src/services/file-service.ts:102- Changed toprivate baseUrl = '/api/v5/files' -
tsconfig.json- Excluded test files from compilation
Verification:
- Deployed bundle contains hardcoded
/api/v5(3 occurrences) - No localhost:8080 in production code (6 occurrences are docs only)
- Test script confirms configuration correct
Combined Service Deployment (✅ COMPLETE)
- Frontend + theia combined deployment
- NGINX routing configured
- Health checks passing (60s timeout,
/endpoint) - MCP SDK ESM/CJS compatibility resolved (bundled backend)
- 3 replicas running in GKE
Production URLs (✅ VERIFIED)
- Frontend + IDE: https://coditect.ai
- API Backend: https://api.coditect.ai/api/v5
- Ingress IP: 34.8.51.57
- SSL/TLS: Google-managed certificate active
Sprint 2 (OLD): Backend API Integration Testing
Goal: Verify all backend endpoints work correctly Estimated: 4-6 hours Dependencies: Sprint 1 complete Status: ⬜ DEFERRED to Sprint 3
Authentication Endpoints
-
Register endpoint
- Endpoint:
POST /api/v5/auth/register - Test: Create new user account
- Verify: User created in FDB, self-tenant created, JWT returned
- Endpoint:
-
Login endpoint
- Endpoint:
POST /api/v5/auth/login - Test: Login with created user
- Verify: JWT token returned, AuthSession created
- Endpoint:
-
Logout endpoint
- Endpoint:
POST /api/v5/auth/logout - Test: Logout current session
- Verify: AuthSession marked inactive
- Endpoint:
-
Logout all endpoint
- Endpoint:
POST /api/v5/auth/logout-all - Test: Logout all devices
- Verify: All sessions in token family invalidated
- Endpoint:
-
Token refresh endpoint
- Endpoint:
POST /api/v5/auth/refresh - Test: Refresh access token
- Verify: New token pair returned, old session invalidated
- Endpoint:
User Profile Endpoints
-
Get current user
- Endpoint:
GET /api/v5/users/me - Test: Fetch authenticated user profile
- Verify: User data returned with correct fields
- Endpoint:
-
Update profile
- Endpoint:
PUT /api/v5/users/me/profile - Test: Update firstName, lastName, metadata
- Verify: User updated in FDB
- Endpoint:
-
Change password
- Endpoint:
PUT /api/v5/users/me/password - Test: Change user password
- Verify: Password hash updated, can login with new password
- Endpoint:
Session Management Endpoints
-
Create workspace session
- Endpoint:
POST /api/v5/sessions - Test: Create new workspace session
- Verify: Session created in FDB with correct structure
- Endpoint:
-
Get session by ID
- Endpoint:
GET /api/v5/sessions/{session_id} - Test: Fetch specific session
- Verify: Session data returned, ownership verified
- Endpoint:
-
List sessions
- Endpoint:
GET /api/v5/sessions - Test: List all sessions for tenant
- Verify: All sessions returned for authenticated user
- Endpoint:
-
Update session
- Endpoint:
PATCH /api/v5/sessions/{session_id} - Test: Update session name, active_files
- Verify: Session updated in FDB
- Endpoint:
-
Delete session
- Endpoint:
DELETE /api/v5/sessions/{session_id} - Test: Delete workspace session
- Verify: Session deleted from FDB, indexes cleaned
- Endpoint:
JWT & Authentication Middleware
-
Test JWT validation
- Test: Access protected endpoint without token
- Expected: 401 Unauthorized
-
Test JWT expiration
- Test: Access endpoint with expired token
- Expected: 401 Unauthorized
-
Test session validation
- Test: Access with valid JWT but inactive session
- Expected: 401 Session invalidated
-
Test tenant isolation
- Test: Access resource from different tenant
- Expected: 403 Forbidden
Sprint 3: FoundationDB Integration Testing (✅ COMPLETE)
Goal: Verify FDB operations work correctly Actual Duration: 3 hours (Oct 19-20, 2025) Status: ✅ COMPLETE - All 11 integration tests passing
Test Results: See sprint-3-integration-test-results.md
Backend Build: fe1dde46-4824-4d6e-b782-972347956864
Critical Middleware Fix (✅ COMPLETE)
- Fix middleware execution order ✅ 2025-10-20
- Issue: TenantMiddleware ran before JwtMiddleware
- Error: "Unauthorized - no tenant context" on protected endpoints
- Fix: Swapped
.wrap()order (Actix-web applies in reverse) - Commit: 0e121c1
- Deploy: Build fe1dde46
Data Persistence (✅ COMPLETE)
-
Verify user creation ✅ Test #1
- Test: Register user, check FDB keys
- Result: User + self-tenant created atomically
- Keys:
/{tenant_id}/users/{user_id},/users/by_email/{email}
-
Verify tenant creation ✅ Test #1
- Test: Register user, check self-tenant created
- Result: Self-tenant linked to user_id
- Keys:
/{tenant_id}/tenant
-
Verify session creation ✅ Test #5-6
- Test: Create workspace session, check FDB
- Result: Session persists and retrieves correctly
- Keys:
/{tenant_id}/workspace_sessions/{session_id}
-
Verify auth session tracking ✅ Test #2, #7
- Test: Login, check auth session in FDB
- Result: AuthSession created on login, invalidated on logout
- Keys:
/{tenant_id}/auth_sessions/{session_id}
Multi-Tenancy Isolation (✅ COMPLETE)
-
Test tenant data isolation ✅ Test #10-11
- Test: Create users in 2 tenants
- Result: Tenant 2 cannot access Tenant 1's sessions (404)
- Verify: Multi-tenant isolation working correctly
-
Test session isolation ✅ Test #11
- Test: Create sessions in 2 tenants
- Result: Cross-tenant access returns 404 Not Found
- Verify: Sessions scoped to correct tenant_id
Transaction Integrity (✅ COMPLETE)
-
Test atomic operations ✅ Tests #1-5
- Test: All CRUD operations execute atomically
- Result: User + Tenant + AuthSession created together
- Verify: No partial data on failures
-
Test session invalidation ✅ Test #7-8
- Test: Logout invalidates session
- Result: Token becomes invalid, 401 on subsequent requests
- Verify: Session marked inactive in FDB
Sprint 3: Frontend Integration (⚠️ IN PROGRESS)
Goal: Connect V5 frontend to backend Estimated: 4-8 hours Dependencies: Sprint 1-2 complete Status: ⚠️ IN PROGRESS - Auth service complete, session/user services need refactoring
Frontend API Integration
-
Configure API base URL ✅ COMPLETE (Build #14)
- File:
src/services/api-client.ts - Hardcoded:
const API_BASE_URL = '/api/v5'(production best practice) - JWT auto-injection via request interceptor
- File:
-
Create auth service ✅ COMPLETE (2025-10-20)
- File:
src/services/auth-service.ts - Implemented: Login, register, logout, logout-all, refresh flows
- Commit: e9568f7
- All methods return unwrapped data (not ApiResponse wrapper)
- File:
-
Refactor session service ⏭️ NEXT
- File:
src/services/session-service.ts - Current: Uses fetch API with manual auth headers
- Need: Migrate to apiClient, fix type mismatches with backend
- File:
-
Refactor user service ⏭️ NEXT
- File:
src/services/user-service.ts - Current: Uses fetch API with manual auth headers
- Need: Migrate to apiClient, fix type mismatches with backend
- File:
State Management Integration
-
Update auth store ✅ COMPLETE (2025-10-20)
- File:
src/stores/auth-store.ts - Updated: Uses authService instead of direct API calls
- Changed logout from sync → async (invalidates backend session)
- Commit: e9568f7
- File:
-
Update session store ⏭️ PENDING
- File:
src/stores/session-store.ts - Need: Use sessionService instead of apiClient direct calls
- File:
UI Component Integration
-
Service layer refactoring ✅ COMPLETE (2025-10-20)
- File:
src/services/session-service.ts- Migrated to apiClient - File:
src/services/user-service.ts- Migrated to apiClient - File:
src/services/auth-service.ts- Already using apiClient - Commit: 5ad676e
- File:
-
UI component alignment ✅ COMPLETE (2025-10-20)
- File:
src/components/header.tsx- Fixed display_name - File:
src/pages/profile-page.tsx- Changed to displayName - File:
src/pages/register-page.tsx- Simplified form - File:
src/pages/settings-page.tsx- Fixed password fields - File:
src/components/session-tabs/session-tab-manager.tsx- Fixed createSession - File:
src/stores/auth-store.ts- Fixed demo users, uploadAvatar - Commit: 2939396
- Type check: 0 errors
- File:
-
Login page
- File:
src/pages/login-page.tsx - Test: Login flow end-to-end
- File:
-
Register page
- File:
src/pages/register-page.tsx - Test: Registration flow end-to-end
- File:
-
Profile page
- File:
src/pages/profile-page.tsx - Test: Profile display and updates
- File:
-
Settings page
- File:
src/pages/settings-page.tsx - Test: Password change flow
- File:
Billing Fields Implementation (⏭️ NEXT)
Goal: Add complete user billing information for invoicing Estimated: 4-6 hours User Decision: Option 2 - Add dedicated schema fields (not metadata)
Backend Changes (Rust)
-
Update User model -
backend/src/db/models.rs✅ COMPLETE (2025-10-20)- Field
pub first_name: String- Already existed (line 198) - Field
pub last_name: String- Already existed (line 199) - Field
pub company: Option<String>- Added (line 206) - Field
pub phone: Option<String>- Added (line 207) - Field
pub address_line1: Option<String>- Added (line 208) - Field
pub address_line2: Option<String>- Added (line 209) - Field
pub city: Option<String>- Added (line 210) - Field
pub state: Option<String>- Added (line 211) - Field
pub postal_code: Option<String>- Added (line 212) - Field
pub country: Option<String>- Added (line 213) - Updated
User::new()constructor to initialize billing fields as None (lines 244-251)
- Field
-
Update UserRepository -
backend/src/db/repositories.rs✅ NO CHANGES NEEDED- Uses
self.base.serialize(user)for FDB packing (line 256, 350) - Uses
self.base.deserialize(&value)for FDB unpacking (line 302, 332) - Serde automatically handles new User fields - no manual FDB packing required
- Method
create_with_tenant()- No changes needed (line 234) - Method
get_by_id()- No changes needed (line 290) - Method
get_by_email()- No changes needed (line 308) - Method
update()- No changes needed (line 339)
- Uses
-
Update RegisterRequest -
backend/src/handlers/auth.rs✅ COMPLETE (2025-10-20)- Field
pub first_name: String- Already existed (line 21) - Field
pub last_name: String- Already existed (line 23) - Field
pub company: Option<String>- Already existed (line 24) - Field
pub phone: Option<String>- Added (line 25) - Updated
register()handler to set company/phone on new_user (lines 248-249)
- Field
-
Update UpdateProfileRequest -
backend/src/handlers/users.rs✅ COMPLETE (2025-10-20)- Field
pub first_name: Option<String>- Already existed (line 14) - Field
pub last_name: Option<String>- Already existed (line 16) - Field
pub company: Option<String>- Added (line 17) - Field
pub phone: Option<String>- Added (line 18) - Field
pub address_line1: Option<String>- Added (line 20) - Field
pub address_line2: Option<String>- Added (line 22) - Field
pub city: Option<String>- Added (line 23) - Field
pub state: Option<String>- Added (line 24) - Field
pub postal_code: Option<String>- Added (line 26) - Field
pub country: Option<String>- Added (line 27) - Updated
update_profile()handler to update all billing fields (lines 173-203) - Updated
UserResponsestruct to include billing fields (lines 54-64) - Updated UserResponse construction in
get_profile()handler (lines 118-125) - Updated UserResponse construction in
update_profile()handler (lines 246-253)
- Field
-
Backend validation -
backend/src/handlers/- Validate first_name: min 1 char, max 50 chars, UTF-8
- Validate last_name: min 1 char, max 50 chars, UTF-8
- Validate phone: E.164 format regex if provided:
^\+?[1-9]\d{1,14}$ - Validate state: 2-letter uppercase if provided (US states)
- Validate country: ISO 3166-1 alpha-2 if provided (2 letters)
- Validate postal_code: alphanumeric + spaces/hyphens
-
Run backend tests
- Command:
cd backend && cargo test - Expected: All tests pass with new fields
- Command:
-
Build backend locally
- Command:
cd backend && cargo build --release - Expected: 0 errors, warnings acceptable
- Command:
Frontend Changes (TypeScript)
-
Update User interface -
src/services/user-service.ts✅ COMPLETE (2025-10-20)- Field
firstName: string- Added (line 21, camelCase) - Field
lastName: string- Added (line 23, camelCase) - Removed
display_name- Split into firstName + lastName - Field
company?: string- Added (line 33) - Field
phone?: string- Added (line 35) - Field
addressLine1?: string- Added (line 37, camelCase) - Field
addressLine2?: string- Added (line 39, camelCase) - Field
city?: string- Added (line 41) - Field
state?: string- Added (line 43) - Field
postalCode?: string- Added (line 45, camelCase) - Field
country?: string- Added (line 47) - Converted all snake_case → camelCase (tenantId, isActive, emailVerified, createdAt, updatedAt, lastLoginAt)
- Field
-
Update RegisterRequest -
src/services/auth-service.ts✅ COMPLETE (2025-10-20)- Field
firstName: string- Added (line 39, camelCase) - Field
lastName: string- Added (line 41, camelCase) - Field
company?: string- Added (line 45) - Field
phone?: string- Added (line 47) - Removed
display_namefield
- Field
-
Update RegisterData interface -
src/stores/auth-store.ts✅ COMPLETE (2025-10-20)- Changed
display_name: string→firstName: string(line 28) - Added
lastName: string(line 29) - Updated mock user objects to use camelCase (lines 92-101, 140-149)
- Updated register() call to pass firstName/lastName (lines 169-170)
- Line ~28: Add field
phone?: string
- Changed
-
Update RegisterPage form -
src/pages/register-page.tsx✅ COMPLETE (2025-10-20)- Updated register() call to split displayName into firstName/lastName (lines 110-120)
- Parsing logic:
displayName.trim().split(/\s+/)→ first word = firstName, rest = lastName - Note: UI still uses "Display Name" field - can split into separate fields later
-
Update ProfilePage -
src/pages/profile-page.tsx✅ COMPLETE (2025-10-20)- Updated loadProfile() to combine firstName + lastName → displayName (line 46)
- Updated handleSave() to split displayName → firstName + lastName (lines 72-76)
- Updated handleCancel() to combine firstName + lastName (line 113)
- Fixed field names: created_at → createdAt, email_verified → emailVerified (lines 211, 217)
- Note: UI still uses single "Display Name" field - billing fields can be added to UI later
-
Update demo users -
src/stores/auth-store.ts✅ COMPLETE (2025-10-20)- Updated demo login mock to use firstName: 'Demo', lastName: 'User' (lines 95-96)
- Updated demo registration mock to use firstName/lastName from formData (lines 143-144)
- Updated all mock users to use camelCase (tenantId, isActive, emailVerified, etc.)
-
Update Header component -
src/components/header.tsx✅ COMPLETE (2025-10-20)- Changed display_name → firstName + lastName concatenation (lines 126, 131)
-
Frontend validation -
src/pages/(⏭️ FUTURE)- register-page.tsx: Validate firstName min 2 chars
- register-page.tsx: Validate lastName min 2 chars
- register-page.tsx: Validate phone E.164 format if provided:
/^\+?[1-9]\d{1,14}$/ - profile-page.tsx: Validate state is 2 uppercase letters if provided
- profile-page.tsx: Validate country is 2 uppercase letters if provided
-
Run frontend type check ✅ COMPLETE (2025-10-20)
- Command:
npm run type-check - Result: 0 errors ✅
- Command:
-
Test registration flow locally
- Start dev server:
npm run dev - Navigate to
/register - Fill firstName, lastName, email, password (company/phone optional)
- Submit form
- Verify: User created with all fields
- Verify: display_name auto-generated as "FirstName LastName"
- Start dev server:
Commits & Deployment
-
Commit backend + frontend changes ✅ COMPLETE (2025-10-20, commit d719c30)
- Files: 10 files (backend models/handlers, frontend services/stores/pages/components)
- Message:
feat: Add billing fields and align frontend/backend types - Backend verify:
cargo build --release✅ PASSED - Frontend verify:
npm run type-check✅ PASSED - Frontend verify:
npm run build✅ PASSED - Git push: ✅ COMPLETE
-
Build and deploy to GKE (Build #15) ✅ COMPLETE (2025-10-20)
- Build ID:
8b0cf3a1-95e7-4baf-a18d-d48414ede6b0 - Build time: 12m12s ✅
- Image:
us-central1-docker.pkg.dev/.../coditect-combined:8b0cf3a1-95e7-4baf-a18d-d48414ede6b0 - Pods: 3/3 running ✅
- Health checks: Passing ✅
- Deployment: All pods updated with Build #15 image ✅
- Build ID:
-
Build and deploy Backend Build #19 ✅ COMPLETE (2025-10-19)
- Build ID:
3489e960-172c-4791-b228-e6dbf9cdab14 - Build time: 5m7s ✅
- Image:
us-central1-docker.pkg.dev/.../coditect-v5-api:3489e960-172c-4791-b228-e6dbf9cdab14 - Pods: 3/3 running ✅
- Changes: Billing fields + skills cleanup
- Deployment: Rolled out successfully ✅
- Build ID:
-
Build and deploy Combined Build #19 ✅ COMPLETE (2025-10-19)
- Build ID:
8860dda8-5443-469f-b690-36d904711d1c - Build time: 10m47s ✅
- Image:
us-central1-docker.pkg.dev/.../coditect-combined:8860dda8-5443-469f-b690-36d904711d1c - Pods: 3/3 running ✅
- Changes: Billing fields + Anthropic skills submodule + internal-comms
- Deployment: Rolled out successfully ✅
- Build ID:
-
Delete legacy V2 API and mistaken Cloud Run services ✅ COMPLETE (2025-10-19)
- GKE: Deleted coditect-api-v2 deployment + service (freed 3 pods)
- Cloud Run: Deleted 8 services (coditect-api-v2, coditect-v5-api, coditect-frontend, coditect-frontend-gke, day2-user-tenant-api, websocket-gateway, websocket-gateway-memory-test, websocket-proxy)
- Cost savings: ~$50-100/month (Cloud Run idle charges eliminated)
- Result: Cloud Run empty (0 services), GKE clean (only V5, Combined, FDB)
-
Verify billing fields in production
- Test: Register new user with firstName/lastName via https://coditect.ai/register
- Verify: first_name, last_name, company, phone saved to backend
- Verify: display_name auto-generated correctly
- Test: Update profile with address fields via https://coditect.ai/profile
- Verify: address_line1, city, state, postal_code, country saved
- Test: View profile - all billing fields display correctly
Sprint 5: Full Stack Integration & Testing
Goal: End-to-end testing of complete application Estimated: 6-10 hours Dependencies: Sprint 4 complete
End-to-End User Flows
-
Complete registration flow
- Test: Register → Login → View profile
- Verify: Full flow works, data persisted
-
Session management flow
- Test: Login → Create session → List sessions → Delete
- Verify: Sessions persist, UI updates
-
Multi-session flow
- Test: Create multiple sessions, switch between them
- Verify: Session isolation works
-
Token refresh flow
- Test: Wait for token expiration, verify auto-refresh
- Verify: User stays logged in
theia Integration
-
theia + V5 wrapper connection
- File:
src/services/theia-container.ts - Test: theia widgets load in V5 wrapper
- File:
-
workspace session sync
- Test: Create session in V5, verify theia workspace updates
- Verify: Session state persisted to FDB
Performance Testing
-
Load testing
- Tool:
scripts/test-deployment.sh - Test: 100 concurrent users
- Target: < 200ms average response time
- Tool:
-
FDB performance
- Test: 1000+ sessions created
- Verify: Query performance acceptable
Sprint 6: Production Deployment
Goal: Deploy complete application to production Estimated: 4-6 hours Dependencies: Sprint 5 complete
Pre-Deployment Checklist
-
Security audit
- File:
docs/04-security/security-hardening-plan.md - Verify: JWT secret configured, HTTPS enabled
- File:
-
Environment variables
- Verify: All production env vars set in GCP
- Check:
JWT_SECRET,FDB_CLUSTER_FILE
-
Database backups
- Verify: FDB backup strategy in place
-
Monitoring setup
- Verify: GCP monitoring configured
- Check: Alerting rules set
Deployment Steps
-
Build production frontend
- Command:
npm run prototype:build - Verify:
dist/folder created
- Command:
-
Build combined Docker image
- File:
dockerfile.combined - Command:
docker build -f dockerfile.combined -t gcr.io/serene-voltage-464305-n2/coditect-v5-combined:latest .
- File:
-
Push to container registry
- Command:
docker push gcr.io/serene-voltage-464305-n2/coditect-v5-combined:latest
- Command:
-
Deploy to GKE
- File:
k8s-combined-deployment.yaml - Command:
kubectl apply -f k8s-combined-deployment.yaml
- File:
-
Verify deployment
- Check: Pod status, logs, health endpoints
- Test: Access via coditect.ai domain
Post-Deployment Verification
-
Smoke tests
- Test: All critical user flows in production
-
SSL/TLS verification
- Test: HTTPS redirect works, cert valid
-
DNS verification
- Test: coditect.ai resolves to correct IP
-
Monitoring verification
- Check: Metrics flowing, alerts working
Reference Documentation
Current Status
- Latest Checkpoint:
2025-10-15T04:17:12Z-BACKEND-COMPILATION-FIXES-CHECKPOINT.md - Session Export:
docs/sessions/2025-10-15-EXPORT-BACKEND-BUILD-ERRORS.txt
Architecture & Design
- V5 Architecture:
docs/DEFINITIVE-V5-architecture.md - Design System:
docs/apple-quality-design-system.md - Frontend Build:
docs/v5-frontend-build-verification.md - theia Wrapper:
docs/V5-THEIA-WRAPPER-architecture.md
Implementation Guides
- Execution Plan:
docs/10-execution-plans/corrected-execution-order.md - Deployment Tracker:
docs/10-execution-plans/deployment-step-by-step-tracker.md - Backend Summary:
docs/06-backend/backend-summary.md - GCP Deploy Guide:
docs/06-backend/gcp-cloud-build-guide.md
Testing & Validation
- Testing Infrastructure:
testing-infrastructure-complete.md - Testing Summary:
docs/testing-summary.md - Testing Guide:
docs/testing-guide.md - Test Scripts:
scripts/test-deployment.sh- Pre-deployment validationscripts/test-endpoints.sh- Live endpoint testingMakefile- Convenient test commands
Database & Models
- FDB Models Checklist:
docs/reference/fdb-models-implementation-checklist.md - Phase 1 Summary:
docs/reference/phase-1-implementation-summary.md - Phase 2 Summary:
docs/reference/phase-2-implementation-summary.md - V4 DB Models:
docs/reference/database-models/ - V4 Analysis:
docs/reference/V4-DATABASE-MODELS-analysis.md - FDB Patterns:
docs/reference/fdb-implementation-patterns.md
Infrastructure
- Infrastructure Map:
docs/03-infrastructure/infrastructure-map.md - Security Plan:
docs/04-security/security-hardening-plan.md
Progress Summary
Completed:
- ✅ Sprint 0: Infrastructure setup (FDB, GKE, domain, SSL)
- ✅ Sprint 1: Backend compilation & deployment (40+ errors resolved)
- ✅ Sprint 2: Full stack deployment (Frontend + theia + Backend)
- ✅ API URL configuration fix (hardcoded paths)
- ✅ Combined service deployment (3/3 pods healthy)
- ✅ Production verification (13/15 tests passing)
- ✅ Build #14 deployed and verified
In Progress:
- ⚠️ Sprint 3: Frontend integration (API configured, testing pending)
Next Sprint: Sprint 3 - Backend API Integration Testing & Frontend E2E
Estimated Remaining: 3-5 days (20-30 hours)
Last Updated: 2025-10-20T09:56:00Z
Latest Build: Build #14 (60d0f652-7e7f-4e18-b802-af9798a7addd)
Status: ✅ Production deployment successful, ready for integration testing