You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
📦 Release
Version sync to 0.8.5 (app + frontend + core): root pyproject.toml, frontend/ml-canvas/package.json / package-lock.json, and skyulf-core/setup.py bumped to 0.8.5.
🧠 Core — legible tuning failures
grid/random search no longer discards the original per-fold error when
every candidate fails: the first trial error is threaded through the
evaluation chain and appended to the All trials failed exception as First trial error: … — mirroring the detail optuna/halving already
had, so a cryptic "All trials failed" now names the root cause (e.g. a
non-numeric column reaching sklearn).
🔧 App — fail-fast guard & fold-refit telemetry
Non-numeric training-frame guard: before tuning starts, the training
node preflights its frame and raises an actionable ValueError listing any
leftover object/string/category/datetime columns — instead of dying deep
inside sklearn with every fold error swallowed. The target column and the
time-series CV time column are legitimately non-numeric and excluded. The
message explains the most common cause: after a Split, merged branches
resolve overlapping columns by pure merge order, so the last connected
branch may have overwritten an earlier branch's encoding.
fold_refit_fallback metric: graphs that can't use per-fold refit and
fall back to pre-transformed scoring now stamp a stable reason code into
the node metrics (nested_merge, fork_not_splitter, learner_before_split, row_changing_branch_step, unsupported_graph, payload_reconstruction_failed) — demand telemetry for which unsupported
shapes users actually hit.
fold_refit_audit metric: a new AuditedFoldPreprocessor
(skyulf-core) records the input row count of every per-fold
fit/transform; isolation_ok proves no preprocessing fit saw more rows
than the train split, i.e. no held-out row leaked into a fit.
🎨 App — job details, help guide & canvas UX
Score Advisory amber tile + modal in Job Details: flags runs that fell
back to pre-transformed scoring (optimistically biased scores) with a
plain-language explanation mapped from the fold_refit_fallback code; a
new Fold Refit Audit detail modal shows the per-fold isolation verdict.
The placeholder Progress tile was removed.
In-app help guide: the navbar's round book button opens "How pipelines
work" — ten sections covering linear chains, branches, merge ownership,
post-split merge order, row alignment, Run Preview vs Run All Experiments,
where results live, the Leakage Gate and Fold Refit Audit, the Score
Advisory, and badge/edge-color semantics.
Canvas UX fixes: Preview Results gained an always-visible X close
(dismissed until new results or validation issues arrive); Run Preview is
always visible and explains its blockers on click; the legend button uses
a tag icon with updated post-split merge-ownership copy and renders above
the results panel; fixed stacking so canvas buttons no longer float over
modals or the maximized panel, and the sidebar expand button no longer
overlays everything; zoom controls lift above an expanded results panel.
📚 Docs
multi_path_pipelines.md: after a Split, merge ownership is inert —
overlapping columns resolve by pure merge order (last connected branch
wins every shared column); keep post-split branches disjoint or fully
numeric.
troubleshooting.md: new entry for "All trials failed" /
non-numeric-column errors after a Split; PropertiesPanel shows a matching
post-split note under the merge-strategy select; leakage_proof_pandas.md
cross-links to the guide.