Skip to content

Release v0.12.8

Latest

Choose a tag to compare

@Edwardvaneechoud Edwardvaneechoud released this 03 Jul 17:46
82f8581

This release lets you run one flow as a single node inside another — declare typed inputs, outputs, and parameters on a flow, then call it from a parent flow via a new Run Flow node, with support for exporting the whole thing as a multi-file Python project. The AI "suggest next node" action becomes a deliberate, intent-aware right-click instead of a passive hover, and stops going stale right after you edit a node's settings. This release also fixes a worker deadlock that could hang a job forever on a large result, reworks how the designer lands on a blank canvas, and brings the browser-based WASM editor's floating panels to parity with the redesigned desktop/web layout.

next-node-suggestion

Run a flow inside another flow (#568)

A saved flow can now be authored as a callable sub-pipeline and invoked as a single node from another flow — effectively turning a flow into a reusable function.

  • Flow Input / Flow Output nodes declare a flow's callable surface: Flow Input is a source node that stands in for data supplied by the caller (with optional sample rows for standalone preview), and each Flow Output becomes one of the sub-flow's return values.
  • The Run Flow node picks a saved flow from the catalog and gets one dynamic input handle per Flow Input and one output per Flow Output, plus a handle for parameters. Connections are matched by port name rather than position, so the sub-flow's interface can change without breaking the wiring. Each parameter can bind to a default, a constant, or a column, and run either once or iterate per row (stacking one run's output per row, tagged with run-index metadata).
  • Flow-level parameters are typed (string / int / float / bool / enum), set from a new Parameter Settings panel in the header, and referenced anywhere in node settings as ${name} with editor autocomplete.
  • Exporting to Python now recurses into referenced flows: generated projects gain a subflows/<name>.py per nested flow (with cycle guards), and parameters become typed keyword arguments in the generated function signature.
  • The AI planner knows about all three new node types and won't try to auto-wire a Flow Input like a regular source.
  • Guardrails: sub-flows can nest up to 5 levels deep, a single run is capped at 1000 sub-flow invocations, and self-referencing (cyclic) sub-flows are rejected with a clear error.

Note: a sub-flow always executes in-process on the parent's machine, bypassing worker offload regardless of the FLOWFILE_OFFLOAD_TO_WORKER setting — a deliberate v1 scoping choice worth knowing if you nest a heavy flow.

A smarter, deliberate "suggest next node" (#578)

The AI node-suggestion feature moved from a passive hover trigger to an explicit, intent-aware action.

  • Right-click a node → "Suggest next node…" replaces the old edge-hover popup. An inline box lets you describe what you want (e.g. "filter to EU region") before the AI proposes matching nodes — or leave it blank for a schema-only guess.
  • Because it's now a deliberate action rather than a hover tooltip, the request timeout grew from 3.5s to 20s (up to 60s via the API), so a slower model isn't cut off prematurely.
  • Fixed a staleness bug shared with the join-key suggester: the upstream schema cache is cleared on every settings edit, so either surface would almost always report "schema unknown" right after you touched a node's settings. Both now recompute the schema on demand instead of trusting the (likely-cold) cache.
  • Fixed a bug where accepting a suggested node could silently reset it to canvas position (0, 0) instead of where it was actually placed.
  • The system prompt now shows the LLM a concrete settings example per node type, cutting down on suggestions that fail validation.

Fixes & improvements

  • Worker deadlock on large results (#564): a subprocess result bigger than the OS pipe buffer (~64 KB) could block forever because the worker joined the child process before draining its result queue. The queue is now drained first, so a wide calculate_schema call or other large payload can no longer hang a job indefinitely.
  • Landing on a true blank canvas (#570): opening the app, or closing your last open flow, now creates an in-memory scratch flow instead of immediately registering a new entry in the catalog. It only gets a name, an on-disk file, and a catalog registration once you save it or run it for the first time, so an abandoned blank canvas no longer leaves clutter behind.
  • Reopening an already-open flow (#569) now reuses the in-memory session instead of re-importing it from disk, so unsaved edits are no longer silently overwritten.
  • Namespace-qualified SQL references (#571, fixes #567): multi-part table names (catalog.schema.table) in the SQL editor now resolve at every nesting level, and a missing table reports the full reference you typed instead of just its first segment.
  • Cloud table error messages (#572): opening a cloud-backed table whose file or Delta version was removed (e.g. by a vacuum) now shows a clear explanation instead of a generic failure.
  • Cloud storage auto auth mode (#576): nodes saved with the default auto authentication mode can be reopened without a validation error; a request naming a connection that no longer exists also correctly fails now instead of silently falling back to environment credentials.
  • Undo/redo identity bug (#576): undo/redo no longer resets an open flow's display name and catalog link back to its raw on-disk filename.
  • Untitled flow naming (#573): quick-created flows are labeled "Untitled flow <timestamp>" instead of a raw timestamp string, while the on-disk filename stays filesystem-safe.
  • WASM editor panel parity (#561): the WASM editor's floating panels (palette, node settings, table preview) were ported to the same DraggableItem system shipped for the desktop/web designer in 0.12.6, fixing behavioral drift between the two editors.
  • Copying multiple nodes that include Flow Input/Output ports no longer races into a duplicate port name (#576).

Upgrade notes

  • No database migrations in this release.

Full changelog: v0.12.7...v0.12.8