Problem
vLLM Studio has separate surfaces for recipe status, process/server health, logs, model list, and agent-selected model, but no single panel that explains configured vs launching/running vs served vs selected state.
Evidence
frontend/src/components/dashboard/control-panel/status-section.tsx:27-79 shows process/recipe/metrics/lifecycle fragments.
frontend/src/app/server/page.tsx:12-159 shows controller/inference health, model, activity, and logs.
frontend/src/ui/recipes/recipes-content/recipes-content-model.ts:61-75 loads /recipes and marks runningRecipeId.
frontend/src/lib/agent/workspace/reducer.ts:62-74 chooses a model from active/first available models, which can be configured but not served.
controller/src/modules/models/routes.ts:49-123 /v1/models lists all recipes and marks only the running recipe active.
controller/src/modules/proxy/openai-routes.ts:271-291 rejects configured-but-stopped models at chat time with 503.
Proposed direction
Add a read-only Readiness Matrix panel that composes existing endpoints/hooks and answers four questions:
- Is the recipe configured?
- Is the runtime process launching/running?
- Is the inference server healthy and serving the selected model?
- Does the chat/agent selected model match the served model?
Acceptance criteria
Non-goals
- No backend aggregate endpoint in the first slice unless proven necessary.
- No auto-launch from chat.
- No recipe schema change.
- No permission/sandbox work.
Problem
vLLM Studio has separate surfaces for recipe status, process/server health, logs, model list, and agent-selected model, but no single panel that explains configured vs launching/running vs served vs selected state.
Evidence
frontend/src/components/dashboard/control-panel/status-section.tsx:27-79shows process/recipe/metrics/lifecycle fragments.frontend/src/app/server/page.tsx:12-159shows controller/inference health, model, activity, and logs.frontend/src/ui/recipes/recipes-content/recipes-content-model.ts:61-75loads/recipesand marksrunningRecipeId.frontend/src/lib/agent/workspace/reducer.ts:62-74chooses a model from active/first available models, which can be configured but not served.controller/src/modules/models/routes.ts:49-123/v1/modelslists all recipes and marks only the running recipeactive.controller/src/modules/proxy/openai-routes.ts:271-291rejects configured-but-stopped models at chat time with 503.Proposed direction
Add a read-only Readiness Matrix panel that composes existing endpoints/hooks and answers four questions:
Acceptance criteria
Non-goals