--- kind: task slug: settings-ai-role-routing-ui title: Settings UI — per-role model routing plan_slug: automation-foundation epic_slug: model-provider-registry status: ready priority: P1 tenant_id: global owner: unassigned cursor_todo_id: null updated_at: "2026-07-03" agent_prompt: | Read docs/adr-model-routing.md. apps/web UI. Route: /[workspaceSlug]/settings/ai/role-routing. Allow adding custom role_id strings. claim_task before work. --- # Task summary Build the Settings page that maps `role_id` → provider alias, with pipeline defaults seeded and support for custom roles. ## Description ### Route `apps/web/app/(app)/[workspaceSlug]/settings/ai/role-routing/page.tsx` ### UI - Table: role id, display label (optional friendly name), provider alias (dropdown from `listProviders`), tier badge from provider metadata, enabled toggle - “Add role” — free-text `role_id` + alias dropdown (for `gate-copilot`, custom auditors, etc.) - “Reset to pipeline defaults” — calls upsert for nine L2 roles + `gate-copilot` + `chat-default` **if** matching aliases exist; confirm dialog - Link to ADR / note about convoy `model_policy` overrides ### Default labels Map known `role_id` to human labels (Conductor, Architect, …) in a const — custom roles show raw id. ## Subtasks - [ ] Page + list routes query - [ ] Upsert/disable per row - [ ] Add custom role flow - [ ] Reset defaults action - [ ] Settings nav entry ## Estimation M ## Acceptance criteria - [ ] User can set `role-architect` → `claude-planning`, `role-implementer` → `qwen-coder` - [ ] User can add `gate-copilot` role row - [ ] Dropdown only lists enabled providers for the workspace ## Links - Epic: `./Epic-model-provider-registry.md` - Depends on: `Task-trpc-models-router.md`, `Task-settings-ai-providers-ui.md` (providers should exist first for dogfood; soft dependency)