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.7 (app + frontend + core): root pyproject.toml, frontend/ml-canvas/package.json / package-lock.json, and skyulf-core/setup.py bumped to 0.8.7.
🗺️ New — Mermaid pipeline diagrams, end to end
Single source of truth in core: skyulf/pipeline/diagram.py renders a
top-down flowchart TD (data -> preprocessing steps -> model) from
config parts. Every label is double-quoted (mermaid rejects unquoted
parentheses/brackets inside labels), with a human-readable head line and an
optional second detail line — an explicit runtime summary or a compact
digest of the step params (max 3 keys, _-prefixed/None/mapping values
skipped, long values truncated). Algorithm names are humanized
(random_forest_classifier → Random Forest Classifier); no internal
node ids leak into labels.
Core API surface: SkyulfPipeline.to_mermaid() and to_mermaid_markdown() plus mermaid_markdown() for fenced export; export_model_card()["diagram"] carries the same diagram; the notebook
export cell renders a ## Pipeline topology fenced block using node
display names, not uuids.
Backend persistence: successful jobs now persist metrics.pipeline_diagram at completion, built from live node results —
display names captured from the canvas (params._display_name → metadata["display_name"]), runtime summaries preferred with a
params-digest fallback for nodes without one, model node typed from the
job's model_type.
Frontend: the Experiments "Pipeline Diagram" tab renders one card per
selected run (legacy runs without a diagram are listed, not dropped), and
each card has a Copy mermaid button that copies a ready-to-paste ```mermaid fenced block.
Render hardening: mermaid's htmlLabels output is HTML, not XML — the
rendered SVG is now parsed via DOMParser('text/html') and mounted with replaceChildren, fixing the browser "Opening and ending tag mismatch:
br and p" error page; regression tests pin both the parse and the mount.
F-07: to_native() converts engine frames back to pandas for
interchange consumers.
F-15: semantic fingerprint seals pipeline identity for reuse checks.
F-19/F-19b: pipeline split into the skyulf/pipeline/ package —
diagram generation extracted from the fit path, describe()/to_mermaid()
live on the pipeline object.
🔧 Fixes & hardening
Engine-agnostic node summaries: summary.py now handles both pandas
and polars frames (shape, dtype breakdown, split renderings), pinned by tests/unit/test_summary_polars.py — previously polars-engine runs lost
their diagram detail lines.
Docs: pipeline_quickstart.md gained an "Inspecting a pipeline" section
covering the diagram labels and export paths.