Scope
PRP-38 — Showcase Rich Demo Control Center A: Data + V1/V2 Modeling Foundation
(file: PRPs/PRP-38-showcase-data-modeling-lifecycle.md)
Foundation slice of the four-PRP /showcase rich-demo epic
(PRPs/INITIAL/INITIAL-showcase-rich-demo-control-center.md). Turns the flat
11-step baseline-only /showcase into a phase-grouped, scenario-aware
operator demo that:
- Renders 6 phase cards (
data / modeling / decision / verify / agent / cleanup) as a shadcn accordion that auto-expands the running phase.
- Adds a scenario picker (shadcn
Select) with demo_minimal (default), showcase_rich (new), sparse.
- Adds a
showcase_rich preset (5 stores × 15 products × 180 days) wired through SeederConfig.from_scenario.
- Adds
data-phase enrichment steps (phase2_enrichment + historical_backfill) via two new /seeder/* endpoints.
- Adds ONE V2
prophet_like run in the modeling phase (registers with full artifacts/models/... artifact_uri — R1).
- Evolves backtest to feature-aware with bucket metrics (
h_1_7/h_8_14/h_15_28/h_29_plus) shown inline.
- Per-step Inspect deep links for
train, v2_train, register, backtest.
Non-goals (deferred to PRP-39/40/41)
- Champion-compat compare, stale-alias trigger, safer-Promote dialog, portfolio batch (PRP-39).
- Scenario simulate/save/compare, RAG corpus indexing, embedding-provider probe (PRP-40).
- Agent HITL, ops snapshot KPI strip, Inspect-Artifacts post-run panel, localStorage run history, Stop button, walkthrough docs polish (PRP-41).
Acceptance gates
- Task 1 (Contract Probe) committed at
PRPs/ai_docs/prp-38-contract-probe-report.md with every cited field marked PRESENT.
- Backend
_phase_table() and frontend PHASE_DEFS lockstep enforced by paired tests.
/seeder/phase2-enrichment + /seeder/historical-activity route tests (2xx + RFC 7807 error path).
ScenarioPreset.SHOWCASE_RICH non-NaN backtest WAPE invariant.
step_v2_train writes artifact_uri = train_response["model_path"] (FULL path — R1) + runtime_info_extras.feature_frame_version=2.
step_backtest on SHOWCASE_RICH posts include_baselines=true + feature-aware model_config_main; response's bucketed_aggregated_metrics non-empty.
/showcase default still ≤ 90 s; scenario=showcase_rich ≤ 240 s soft / ≤ 300 s hard.
- All five validation gates green (ruff + ruff format + mypy + pyright + pytest unit+integration + migration-check);
pnpm lint && pnpm tsc --noEmit -p tsconfig.app.json && pnpm test --run green; vertical-slice grep guards empty; no radix-ui barrel imports.
Branch: feat/showcase-38-data-modeling-lifecycle
PRP: PRPs/PRP-38-showcase-data-modeling-lifecycle.md
Epic INITIAL: PRPs/INITIAL/INITIAL-showcase-rich-demo-control-center.md
Scope
PRP-38 — Showcase Rich Demo Control Center A: Data + V1/V2 Modeling Foundation
(file:
PRPs/PRP-38-showcase-data-modeling-lifecycle.md)Foundation slice of the four-PRP
/showcaserich-demo epic(
PRPs/INITIAL/INITIAL-showcase-rich-demo-control-center.md). Turns the flat11-step baseline-only
/showcaseinto a phase-grouped, scenario-awareoperator demo that:
data/modeling/decision/verify/agent/cleanup) as a shadcn accordion that auto-expands the running phase.Select) withdemo_minimal(default),showcase_rich(new),sparse.showcase_richpreset (5 stores × 15 products × 180 days) wired throughSeederConfig.from_scenario.data-phase enrichment steps (phase2_enrichment+historical_backfill) via two new/seeder/*endpoints.prophet_likerun in the modeling phase (registers with fullartifacts/models/...artifact_uri— R1).h_1_7/h_8_14/h_15_28/h_29_plus) shown inline.train,v2_train,register,backtest.Non-goals (deferred to PRP-39/40/41)
Acceptance gates
PRPs/ai_docs/prp-38-contract-probe-report.mdwith every cited field marked PRESENT._phase_table()and frontendPHASE_DEFSlockstep enforced by paired tests./seeder/phase2-enrichment+/seeder/historical-activityroute tests (2xx + RFC 7807 error path).ScenarioPreset.SHOWCASE_RICHnon-NaN backtest WAPE invariant.step_v2_trainwritesartifact_uri = train_response["model_path"](FULL path — R1) +runtime_info_extras.feature_frame_version=2.step_backteston SHOWCASE_RICH postsinclude_baselines=true+ feature-awaremodel_config_main; response'sbucketed_aggregated_metricsnon-empty./showcasedefault still ≤ 90 s;scenario=showcase_rich≤ 240 s soft / ≤ 300 s hard.pnpm lint && pnpm tsc --noEmit -p tsconfig.app.json && pnpm test --rungreen; vertical-slice grep guards empty; noradix-uibarrel imports.Branch:
feat/showcase-38-data-modeling-lifecyclePRP:
PRPs/PRP-38-showcase-data-modeling-lifecycle.mdEpic INITIAL:
PRPs/INITIAL/INITIAL-showcase-rich-demo-control-center.md