Shipped in the Apr 19–May 4 sprint. CompareView extracted from BenchmarkView to /eval/compare.
Shipped in the Apr 19–May 4 sprint. POST /ingest corrections endpoint with Bearer auth landed in app/data/corrections.py.
Shipped in the Apr 19–May 4 sprint. TrainJobsView (job queue, submission form, cancel, SSE log stream) landed.
Shipped in the Apr 19–May 4 sprint. AppSidebar restructured into Data/Eval/Train two-domain nav with flywheel signal badges.
Shipped in the Apr 19–May 4 sprint. Eval benchmark routers consolidated into app/eval/cforch.py.
Shipped in the Apr 19–May 4 sprint. GET /api/dashboard aggregate endpoint and DashboardView (flywheel stage cards: Data → Eval → Train → Fleet) landed.
Shipped in the Apr 19–May 4 sprint. LLM SFT backend using TRL + PEFT/LoRA is in app/train/train.py.
Shipped in the Apr 19–May 4 sprint. api.py is now a factory-only wiring file; routes live in label.py, fetch.py, corrections.py, imitate.py, cforch.py with backward-compat redirects.
Shipped in the Apr 19–May 4 sprint. SQLite-backed job queue, Popen subprocess, SSE log streaming, and path traversal guard on python_bin all landed in app/train/train.py.