Skip to content

release: 0.43.0 - Polish Under Pressure (day-two batch)#285

Merged
gizmax merged 17 commits into
mainfrom
fix/array-input-coercion
Jul 21, 2026
Merged

release: 0.43.0 - Polish Under Pressure (day-two batch)#285
gizmax merged 17 commits into
mainfrom
fix/array-input-coercion

Conversation

@gizmax

@gizmax gizmax commented Jul 21, 2026

Copy link
Copy Markdown
Owner

0.43.0 - "Polish Under Pressure"

Day-two batch from live usage on the DGX Spark box: one feature, a string of fixes found by clicking through the product, and the release chores.

Added

  • Download PDF for run outputs - GET /runs/{run_id}/output.pdf (branded render, auth-header fetch in the UI)

Changed

  • /evolution/start validates fast, runs the loop in the background (202 + status endpoint) instead of holding the request until the browser timed out

Fixed

  • Array inputs accept comma-separated values and bare scalars
  • Onboarding wizard content taller than the viewport was clipped and unscrollable
  • Evolution: workflow field injected into eval suites; empty suites refused loudly
  • PDF renderer: latin-1 sanitization, 80+ char token break points, x-position/width guards (numbered lists of long links crashed the render)
  • Night Shift "Read the docs" opens the actual document

Verification

  • Full python suite: 17252 passed, 13 skipped, 0 failed
  • Dashboard: 1012 passed (56 files), production build green
  • ruff clean (includes the chore(lint): unblock 0.42.2 publish - unused imports in main.py #283 cleanup - this branch predates it)
  • Every fix verified live on the GB10 box, including the exact failing artifacts (Lucerna PDF renders, replay chain, evolution guard)

Supersedes #284 (contained here). Merging publishes 0.43.0 to PyPI.

Tomas Pflanzer added 13 commits July 21, 2026 22:44
min-h-screen + justify-center clips the top of content taller than the
viewport (templates with many inputs, e.g. Employee Onboarding) and the
clipped part is unreachable by scroll. Center via my-auto on the child
instead - identical centering when short, natural page scroll when tall.
Humans type 'douglas,notino', not JSON arrays - the run form rejected
anything that json.loads could not parse. Coercion order: JSON array as
before; bare JSON scalar wraps to a single item; anything else splits on
commas (trimmed, empties dropped). Only a value with no items errors.
…tion build

tsc -b (the build) rejects a JSX comment as a sibling before the single
root element; the editor-side tsc --noEmit pass missed it. The last two
gx10 deploys silently ran the previous image because the build failed -
verify deployed content, not just container health.
GET /runs/{run_id}/output.pdf renders the run's outputs as a branded PDF
(generate_branded_pdf): workflow title, run meta, one section per output
key, JSON outputs fenced, step errors quoted. Tenant-scoped, mirrors the
step-PDF endpoint's auth pattern. RunDetailPage gains a Download PDF
button next to JSON/TXT.
Courier (code blocks) is latin-1 only; en-dashes and curly quotes from
model output crashed the render with a 500. Normalize common typographic
characters, latin-1-replace the rest.
The plain anchor opened the endpoint without X-API-Key and got a 401 on
auth-required deployments. The button now fetches the PDF with
api.authHeaders() and hands the blob to the browser, with a rendering
state and an error toast.
Start Evolution failed with "Eval suite must specify a 'workflow' field" -
but evolution already knows which workflow it evolves; requiring the field
in the suite was redundant. Missing/empty workflow is filled in before
parsing; malformed YAML still surfaces the parser's real error.
Zero eval cases means every variant scores 0.0 and 20 iterations burn
through with nothing to keep - a silent no-op presented as a result.
Fail loudly with a message telling the user what an eval case needs.
…med out

/evolution/start awaited the entire mutation+eval loop (minutes with a
real eval suite), so the browser fetch timed out with 'Backend
unreachable' while the loop kept running server-side. Quick validations
(workflow loads, suite parses, has cases) stay synchronous for immediate
errors; the loop itself runs as a tracked background task and the
existing status endpoint serves progress.
The button linked the repo README, which says nothing about Night Shift;
it now opens docs/overnight-self-tune-spark.md, and the doc's title names
the dashboard feature so searchers land correctly.
Long URLs and JSON blobs crash the render with 'Not enough horizontal
space to render a single character' - fpdf cannot wrap a token wider
than the page.
A preceding cell() leaves x near the right edge; the following
multi_cell(0) then throws 'Not enough horizontal space to render a
single character' (hit by numbered lists of long links). Paragraphs
always start at the left margin, numbered-list bullet columns are
clamped, and item width has a floor. Reproduced with the exact failing
run content; renders 69KB now.
Version bump (package, README badge, Helm appVersion, dashboard, site
labels), CHANGELOG for the day-two batch, and the same unused-import
cleanup as #283 (this branch predates it - without this the squash merge
would reintroduce them and break the publish lint gate).
@gizmax gizmax changed the title fix(inputs): array fields accept comma-separated values release: 0.43.0 - Polish Under Pressure (day-two batch) Jul 21, 2026
@gizmax
gizmax merged commit 1789613 into main Jul 21, 2026
5 checks passed
@gizmax
gizmax deleted the fix/array-input-coercion branch July 21, 2026 23:38
gizmax added a commit that referenced this pull request Jul 21, 2026
…ublish (#286)

* fix(lint): restore the local os import lost in the #285 squash merge

_validate_providers uses os.environ; the merge combined my branch's
pre-#283 file with main's cleaned version and dropped the function-local
import - F821 blocked the 0.43.0 publish.

* ci: run the lint gate in PR CI, not only at publish time

Two releases in a row were blocked by ruff findings that PR CI never saw
(the gate lived only in publish.yml). The same 'ruff check src/' now runs
before pytest in the PR job.

---------

Co-authored-by: Tomas Pflanzer <tom@wiseguys.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant