release: 0.43.0 - Polish Under Pressure (day-two batch)#285
Merged
Conversation
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).
added 4 commits
July 22, 2026 00:59
A bare JSON value wraps as a single item; plain strings split on commas. The old assertions predate the lenient coercion.
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
GET /runs/{run_id}/output.pdf(branded render, auth-header fetch in the UI)Changed
/evolution/startvalidates fast, runs the loop in the background (202 + status endpoint) instead of holding the request until the browser timed outFixed
workflowfield injected into eval suites; empty suites refused loudlyVerification
Supersedes #284 (contained here). Merging publishes 0.43.0 to PyPI.