v0.43.0 — Polish Under Pressure
A day-two batch from live usage on real hardware: one feature and a string of fixes you only find by clicking through your own product on a box with no cloud keys.
Added
- Download PDF for run outputs.
GET /runs/{run_id}/output.pdfrenders the run's outputs as a branded, formatted PDF - title, run meta, one section per output, JSON fenced, step errors quoted. The Run Detail page gains a Download PDF button next to JSON/TXT (fetches with auth headers).
Changed
/evolution/startreturns immediately. Fast validations stay synchronous (workflow loads, suite parses, has cases); the mutation+eval loop runs in the background and the status endpoint serves progress. Previously the HTTP request was held through the entire loop until the browser gave up with "Backend unreachable".
Fixed
- Array input fields accept comma-separated values (
douglas,notino) and bare scalars; JSON arrays keep working. - Onboarding wizard content taller than the viewport (input-heavy templates) was clipped at the top and unreachable by scroll.
- Evolution injects the
workflowfield into eval suites that omit it, and refuses empty suites loudly instead of burning iterations on 0.0 scores. - PDF renderer hardened against real model output: latin-1 font sanitization, break points for 80+ character tokens (long URLs), and x-position/width guards - numbered lists of long links crashed the render with "Not enough horizontal space".
- Night Shift "Read the docs" opens the actual Overnight Self-Tune document.
Verification
Full suite 17,233 passed / 0 failed; dashboard 1,012 passed; every fix verified live on a DGX Spark (GB10), including the exact failing artifacts.
pip install sandcastle-ai==0.43.0