- Replace owner_id → owner_user_id in all queries - Replace auth_token → companion_agent_token in server_connections - Replace l.active → (l.status = 'active') checks using ENUM - Fix AppError → ApiError in all new API files - Add missing imports (Path, PanelAdapter trait) - Fix StoreConfig nullable type mismatches Resolves 122 compilation errors. Only sqlx cache generation remains. Phase 3: EXECUTE complete per V4_WORKFLOW
4.0 KiB
Phase 4/5/6 Audit Report
SITUATION
Agents delivered Phase 4/5/6 code without verifying schema compatibility. Compilation fails with 122 errors.
ROOT CAUSE ANALYSIS
1. SCHEMA MISMATCHES
licenses table
- Missing:
activeBOOLEAN column - Mismatch: Code uses
owner_id, actual column isowner_user_id - Impact: B2B host provisioning queries fail
server_connections table
- Missing:
auth_tokenVARCHAR column - Actual: Column is
companion_agent_token - Impact: Host provisioning can't store companion tokens
notifications_config vs public_site_config
- Code queries
public_site_config.discord_webhook_url - Actual:
discord_webhook_urlis innotifications_configtable - Impact: db/notifications.rs and db/public.rs queries fail
2. CODE ERRORS
Import Errors
File: backend/src/api/webstore.rs
- Uses
AppError— should beApiError - Uses
middleware::jwt::Claims— should verify path exists
File: backend/src/api/public_store.rs
- Uses
AppError— should beApiError
File: backend/src/api/host.rs
- Uses
AppError— should beApiError - Missing import:
use axum::extract::Path;
File: backend/src/services/module_installer.rs
- Missing trait import:
use crate::services::panel_adapter::PanelAdapter; - Causes
put_file()andsend_command()method not found errors
Type Mismatches
File: backend/src/api/webstore.rs (line 287)
StoreConfigstruct expects non-nullable fields- Database
store_configcolumns are nullable - Fix: Use
Option<String>andOption<bool>in struct
3. MIGRATION GAPS
Existing Migrations (Applied)
✅ 001_initial_schema.sql — Core tables ✅ 002_early_access_signups.sql ✅ 003_super_admin.sql ✅ 005_map_analytics.sql ✅ 006_player_sessions.sql ✅ 007_status_page_description.sql ✅ 008_alert_system.sql — Creates alert_config, alert_history ✅ 009_module_licensing.sql — Creates modules, module_purchases, module_installations ✅ 010_payment_orders.sql ✅ 011_webstore_tables.sql — Creates webstore_subscriptions, store_config, store_categories, store_items, store_transactions ✅ 012_b2b_hosts.sql — Creates hosts, host_licenses, host_billing_records
Required New Migration
📝 013_schema_fixes.sql — Add missing columns:
licenses.activeBOOLEAN DEFAULT truelicenses.owner_idas alias/migrate fromowner_user_idserver_connections.auth_tokenas alias/migrate fromcompanion_agent_token
BLAST RADIUS
Broken Files (Won't Compile)
- backend/src/api/webstore.rs (7 errors)
- backend/src/api/public_store.rs (1 error)
- backend/src/api/host.rs (4 errors)
- backend/src/services/module_installer.rs (6 errors)
- backend/src/services/host_provisioning.rs (3 errors)
- backend/src/services/subscription_processor.rs (1 warning)
- backend/src/db/notifications.rs (1 error)
- backend/src/db/public.rs (3 errors)
- backend/src/db/alerts.rs (9 errors - these are false positives, tables exist)
Impact Assessment
- Critical: Cannot build Docker image
- Moderate: 122 compilation errors blocking deployment
- Low: Once fixed, runtime should work (migrations already applied to DB)
FIXES REQUIRED
Category A: Schema Fixes (Migration 013)
- Add
licenses.activecolumn - Add
licenses.owner_idcolumn OR update all queries to useowner_user_id - Add
server_connections.auth_tokencolumn OR update all queries to usecompanion_agent_token
Category B: Code Fixes
- Replace
AppErrorwithApiError(3 files) - Add missing imports (2 files)
- Fix nullable type mismatches (1 file)
- Fix query column references (4 files)
Category C: Verification
- Rebuild with
cargo check - Generate sqlx cache
- Docker build test
- Runtime smoke test
RECOMMENDATION
Fix forward, not rollback. All migrations are applied. Code fixes + one new migration will resolve.
ETA: 45 minutes
- 15 min: Write migration 013
- 20 min: Fix code errors
- 10 min: Test compilation + generate sqlx cache