# Testing, Release, and Migration Spec ## Test Layers - unit tests for models, validators, and services - API tests for route behavior and auth semantics - contract tests from fixtures - migration tests for Alembic revisions and imports - consumer smokes for ops-hub and activity-core - optional Playwright visual checks once UI exists ## Release Gates A Core Hub release cannot replace Inter-Hub until: - public `/api/v2` compatibility smokes pass; - protected route auth behavior is proven without exposing secrets; - ops-hub bootstrap smoke passes; - activity-core sink smoke passes or is explicitly deferred to State Hub fallback; - data import row counts and relationship checks pass; - rollback path is documented; - production operator approves cutover. ## Migration Gates - Extract Inter-Hub schema and route inventory. - Build fixture set from representative production-safe records. - Import data into Core Hub staging. - Compare row counts and key relationships. - Run dual-read or shadow smokes. - Switch traffic only after smoke evidence is recorded. ## Haskell Retirement Gate Do not retire production Inter-Hub or the haskelseed/Haskell build lane until Core Hub serves the required compatibility surface and production traffic has moved.