Skip to content

v0.8.5 — Fail-Fast Training Guard, Refit Telemetry & Canvas Help Guide

Choose a tag to compare

@github-actions github-actions released this 27 Aug 18:59
· 104 commits to master since this release
c69dc4c

📦 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.