- New server/llm.js consolidates ModelRuntime + model selection: admin
setting (app_settings.llm_model) > LLM_MODEL/PREFILL_MODEL env > first
available; used by both prefill and roast evaluation
- GET/PUT /api/admin/llm lists configured models and stores the choice
(validated against the list; empty = auto; audited); admin page gains
an LLM section with a model picker
- All user-facing 'Pi agent' wording is now 'LLM'; no_model error message
no longer references the pi CLI
- /roasts table: Review column removed (review lives in the detail view)
Co-Authored-By: Claude Fable 5 <[email protected]>
- POST /api/roasts stores the original .alog verbatim (multiple per plan),
parses it server-side, and kicks off an async zero-tool Pi agent review
(grade, highlights, concerns, next-batch suggestions, plan-vs-actual)
- /roasts page: table of historical actual roasts with review summaries;
row detail renders the BT curve as SVG with the plan curve overlaid,
shows the full review, and offers original-.alog backup download,
re-evaluate, and delete
- Planner's Reference curve drawer gains a multi-file finished-roast
uploader that attaches to the open (synced) plan
- Failed reviews record the error on the row and are retryable via
POST /api/roasts/:id/evaluate (e.g. once a model is configured)
Co-Authored-By: Claude Fable 5 <[email protected]>
Ports inventory management and SCA-style cupping scoring from
hope_roaster: lot tracking with audit-logged consumption, cupping
sessions with server-authoritative scoring and a live radar chart,
and links from the planner (draw-from-lot, open-cupping-session).
Also fixes the Blend/Single-origin toggle layout, replaces tooltips
with an in-context "why" teaching layer, and stages the planner UI
into pre-roast vs. post-roast phases.