feat: model class routing
Summary
Adds runtime support for activating standard and fast serving classes on an existing model. The model keeps its UUID, public alias, access grants and tariff history; its configured class destinations replace composite routing when explicitly activated.
Existing models remain on legacy routing until their routing mode is switched.
Changes
- Resolve optional ingress aliases before caching, preserving the submitted name in responses.
- Carry canonical model/class identity through forwarding, cache accounting, billing and analytics.
- Normalize batch/flex requests to standard while preserving scheduling priority.
- Include applicable public class prices in credit admission.
- Expose primary class names through
/v1/models, without listing synonyms. - Add grouped class destinations and pricing to admin model views.
- Load routing from a consistent database snapshot and coalesce class-change notifications.
- Preserve captured billing identity across routing rollback.
Customer-specific destination and priority overrides remain a follow-up.
Validation
- Rust and TypeScript lint, including SQLx metadata checks, passed.
- All 782 dashboard tests passed.
- Shared and scoped PgBouncer compatibility tests passed.
- Rust workspace: 3,862 passed, 31 ignored, two failures:
- Known baseline request-memory budget failure: 11.04 copies against 10.35.
- One streaming billing-poll timeout, which passed in isolation.
Rollout
No catalog changes or model activation are included. Complete fork workload and sync-performance testing before release. Activate models individually after their Dynamo destinations are verified.
After accepting class traffic, prefer routing rollback while retaining the new runtime: older billing projectors cannot safely interpret the new class receipts.