Summary
Take the ForecastOps Control Center from its PRP-24 MVP (read-only `app/features/ops/` slice + `/ops` page) to the Full Version described in `docs/optional-features/02-forecastops-control-center.md`.
Planned in PRPs/PRP-25-forecastops-control-center-full.md, shipped in three independently-validatable phases:
- Phase A — Model Health & Drift — new read-only `GET /ops/model-health` endpoint classifying forecast-error (WAPE) performance drift per `(store, product)` from run history, plus a Model Health section on `/ops`.
- Phase B — Incident Report Export — client-side CSV + Markdown export of the operational snapshot.
- Phase C — Action Layer — operator bulk-retrain (multi-select retraining queue → `POST /jobs`) and promote-to-alias (`POST /registry/aliases`), both behind a confirmation dialog.
Scope guardrails (locked during planning)
- The `ops` backend slice stays read-only — no new `models.py`, no Alembic migration, no `POST /ops/*`. Phase C is a frontend layer over already-sanctioned endpoints.
- Drift = performance drift (WAPE trend), not data drift (PSI/KL out of scope — no persisted feature snapshots).
- WebSocket live job updates declined — conflicts with the non-streaming product vision; existing polling covers live job state.
- No new dependency.
Acceptance
All gates green (ruff, mypy --strict, pyright --strict, pytest unit+integration, frontend tsc+lint+test); `/ops` shows drift badges, exports a valid CSV + Markdown report, and can trigger retraining / promote an alias — dogfooded in a browser.
Depends on: #217 (PRP-24 MVP, merged via PR #218).
Summary
Take the ForecastOps Control Center from its PRP-24 MVP (read-only `app/features/ops/` slice + `/ops` page) to the Full Version described in `docs/optional-features/02-forecastops-control-center.md`.
Planned in PRPs/PRP-25-forecastops-control-center-full.md, shipped in three independently-validatable phases:
Scope guardrails (locked during planning)
Acceptance
All gates green (ruff, mypy --strict, pyright --strict, pytest unit+integration, frontend tsc+lint+test); `/ops` shows drift badges, exports a valid CSV + Markdown report, and can trigger retraining / promote an alias — dogfooded in a browser.
Depends on: #217 (PRP-24 MVP, merged via PR #218).