Route Table Lifecycle
Blueprint · Route table · Layered classifier →
The route table is versioned platform config: one row per governed path (route_id, manifest ref, policy profile, model_profile). Same discipline as manifest lifecycle.
THE CLAIM
Design the route table before the classifier. Intents are business contracts, not labels you discover after the agent ships.
Non-negotiables
| Requirement | Why |
|---|---|
Version id (2026.07.1) | Examiners ask which route contract was active |
| Pin per session | Mid-session route table swap breaks replay |
| Router loads; LLM never owns table | Descriptions are not negotiable prompt text |
| CI on change | Golden intent set blocks regression |
| Audit | route_table_version on every route decision |
Storage patterns
| Pattern | Maintain where | Regulated fit |
|---|---|---|
| GitOps + object storage | YAML in Git; publish to S3/GCS | Strong: PR review, immutable artifacts |
| Route registry API | Platform service | Strong: runtime rollback, multi-tenant |
| Versioned file in repo | platform/routes/{product}/2026.07.1.yaml | Good pilot; rollback may need redeploy |
| Config service | Consul, AppConfig | OK if versioning and audit already exist |
| Hardcoded in app | Code dict | Demos only |
Row fields reference other artifacts by id (tool_manifest, policy_profile). Entitlements live in IdP claims, not in the table.
Typical layout
platform/routes/
corporate-assistant/
2026.07.1.yaml
2026.08.1.yaml
active → 2026.07.1
Release and rollback
| Event | Action |
|---|---|
| New route row | Bump version; add eval fixtures; CI pass |
| Promote | Repoint active pointer |
| Rollback | Repoint to prior version; no classifier redeploy if using registry |
| Audit | Log route_table_version, eligible_routes, route_id |
See Routing eval CI for gates.
Anti-patterns
| Anti-pattern | Why it fails |
|---|---|
| Route table only in LLM prompt | Not enforceable; injection can rewrite |
| Per-instance ad hoc routes | Drift; no replay |
No route_table_version in logs | Examiners cannot identify active contract |
| Entitlements stored per user in route table | Stale; use ingress claims + filter at runtime |