fix: Schema alignment and code corrections (COA 2)
All checks were successful
Test Asgard Runner / test (push) Successful in 3s

- 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
This commit is contained in:
Vantz Stockwell
2026-02-15 18:23:33 -05:00
parent d7dddca106
commit 500d92cbe3
8 changed files with 342 additions and 82 deletions

113
PHASE456_AUDIT.md Normal file
View File

@@ -0,0 +1,113 @@
# 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:** `active` BOOLEAN column
- **Mismatch:** Code uses `owner_id`, actual column is `owner_user_id`
- **Impact:** B2B host provisioning queries fail
#### `server_connections` table
- **Missing:** `auth_token` VARCHAR 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_url` is in `notifications_config` table
- **Impact:** db/notifications.rs and db/public.rs queries fail
### 2. CODE ERRORS
#### Import Errors
**File:** `backend/src/api/webstore.rs`
- Uses `AppError` — should be `ApiError`
- Uses `middleware::jwt::Claims` — should verify path exists
**File:** `backend/src/api/public_store.rs`
- Uses `AppError` — should be `ApiError`
**File:** `backend/src/api/host.rs`
- Uses `AppError` — should be `ApiError`
- 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()` and `send_command()` method not found errors
#### Type Mismatches
**File:** `backend/src/api/webstore.rs` (line 287)
- `StoreConfig` struct expects non-nullable fields
- Database `store_config` columns are nullable
- **Fix:** Use `Option<String>` and `Option<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.active` BOOLEAN DEFAULT true
- `licenses.owner_id` as alias/migrate from `owner_user_id`
- `server_connections.auth_token` as alias/migrate from `companion_agent_token`
## BLAST RADIUS
### Broken Files (Won't Compile)
1. backend/src/api/webstore.rs (7 errors)
2. backend/src/api/public_store.rs (1 error)
3. backend/src/api/host.rs (4 errors)
4. backend/src/services/module_installer.rs (6 errors)
5. backend/src/services/host_provisioning.rs (3 errors)
6. backend/src/services/subscription_processor.rs (1 warning)
7. backend/src/db/notifications.rs (1 error)
8. backend/src/db/public.rs (3 errors)
9. 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)
1. Add `licenses.active` column
2. Add `licenses.owner_id` column OR update all queries to use `owner_user_id`
3. Add `server_connections.auth_token` column OR update all queries to use `companion_agent_token`
### Category B: Code Fixes
1. Replace `AppError` with `ApiError` (3 files)
2. Add missing imports (2 files)
3. Fix nullable type mismatches (1 file)
4. Fix query column references (4 files)
### Category C: Verification
1. Rebuild with `cargo check`
2. Generate sqlx cache
3. Docker build test
4. 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