Repository navigation
Form View: a form-based view for running a workflow #8011
Description
Feature Summary
Today a workflow can only be used through the operator canvas. That's the right tool for authors, but
too much for someone who just needs to change a couple of inputs, run, and read a result.
Form View is a second, form-based view of an existing workflow. An author marks selected
operator properties as "exposed"; a reader opens the same workflow as a simple form, fills in those
inputs, runs it on a computing unit, and sees the results the author chose to surface. It edits the
same workflow the canvas does, never a copy. Every workflow can be opened in either view when the
feature flag is on; a per-workflow default_view preference (canvas or form) chooses which view it
opens in, and either view can switch to the other at any time. The whole feature is gated behind a
form-view-enabled config flag (default off).
Proposed Solution or Design
A new /user/workflow/:id/form page (WorkflowFormComponent) reusing the existing workflow graph model, the read-only workflow-editor + mini-map preview, and the property editor. The form is a lens over the same shared graph, not a fork.
- Authoring: in the property editor, tick which properties are exposed and give each an editable label, backed by a form-binding service that owns the operator-to-field bindings.
- Reader: exposed bindings render as ngx-formly fields; edits write back to operator properties; an optional author instruction (markdown) shows above; run/stop reuses the canvas run-button state machine plus a computing-unit selector; chosen results render as cards.
- Persistence: a default_view enum column (CANVAS or FORM) on the workflow with a set-default-view endpoint, carried through workflow listing/search, so the dashboard opens each workflow in its default view without parsing content.
- Feature flag: form-view-enabled (served via /api/config/gui as formViewEnabled), default off, gating every entry point (the dashboard card opens in the workflow's default view plus a per-card toggle, the route, and the canvas menu view switch).
Delivered as stacked sub-issues, bottom-up:
- feat(config): add form-view-enabled feature flag, default off #8013 — feat(config): add form-view-enabled feature flag, default off
- feat(workflow): persist default_view and add a set-default-view endpoint #8014 — feat(workflow): persist default_view and add a set-default-view endpoint
- feat(workflow): shared types and collab-model support for Form View #8015 — feat(workflow): shared types and collab-model support for Form View
- feat(workflow): form-binding service for Form View #8016 — feat(workflow): form-binding service for Form View
- feat(property-editor): choose which properties the Form View exposes #8017 — feat(property-editor): choose which properties the Form View exposes (PR5, feat(property-editor): choose which properties the Form View exposes #8318)
- feat(workflow-form): Form View page shell, load, and the shared spec harness #8018 — feat(workflow-form): Form View page shell, load, and the shared spec harness (PR6)
- feat(workflow-form): Form View title bar, save, and modification lock #8019 — feat(workflow-form): Form View title bar, save, and modification lock (PR7)
- feat(workflow-form): embed the read-only workflow preview #8020 — feat(workflow-form): embed the read-only workflow preview (PR8)
- feat(workflow-form): share the operator property panel's field-type rules #8021 — feat(workflow-form): share the operator property panel's field-type rules — custom formly types + exposability (PR9, feat(workflow-form): share the operator property panel's field-type rules #8436 merged)
- feat(workflow-form): render the exposed inputs and write values back #8370 — feat(workflow-form): render the exposed inputs and write values back (PR10, feat(workflow-form): render the exposed inputs and write values back #8437)
- feat(workflow-form): render nested and array sub-field inputs #8022 — feat(workflow-form): render nested and array sub-field inputs (PR11, feat(workflow-form): render nested and array sub-field inputs #8438)
- feat(workflow-form): run the workflow from the form and show the author's instruction #8023 — feat(workflow-form): run the workflow from the form and show the author's instruction (PR12, feat(workflow-form): run the workflow from the form and show the author's instruction #8440)
- feat(workflow-form): show the chosen results #8024 — feat(workflow-form): show the chosen results (PR13, feat(workflow-form): show the chosen results #8441)
- feat(workflow-form): open a step to inspect its settings read-only #8025 — feat(workflow-form): open a step to inspect its settings read-only (PR14, feat(gui): open a step to inspect its settings read-only on the Form View #8442)
- feat(workflow-form): Form View edit mode, with instruction and result authoring #8026 — feat(workflow-form): Form View edit mode, with instruction and result authoring (PR15a, feat(gui): add the Form View edit mode, with instruction and result authoring #8516; split from feat(gui): author the Form View in place with an edit mode #8455)
- feat(workflow-form): author the Form View's inputs in place (rename, hide, reorder, remove) #8027 — feat(workflow-form): author the Form View's inputs in place: rename, hide, reorder, remove (PR15b, feat(gui): author the Form View's inputs in place #8517; issue reused from the computing-unit item folded into feat(workflow-form): add the Form View entry points and remember the computing unit #8028)
- feat(workflow-form): add the Form View entry points and remember the computing unit #8028 — feat(workflow-form): entry points and remember the computing unit (PR16, feat(gui): wire the Form View entry points #8456)
- feat(config): turn the Form View on by default #8537 — feat(config): turn the Form View on by default (PR17, feat(config): turn the Form View on by default #8528)
Follow-ups (post-MVP)
- feat(workflow-form): Form View widget refinements (render canvas-only widgets fully, HuggingFace mode, compile-on-blur) #8439 — feat(workflow-form): Form View widget refinements (render canvas-only widgets fully, HuggingFace form mode, compile-on-blur) — deferred refinements from the feat(workflow-form): share the operator property panel's field-type rules #8436 / feat(workflow-form): render the exposed inputs and write values back #8437 reviews
Rollout: the flag stays off through the whole stack; the final entry-points PR flips it on and wires the entry points.
Affected Area
Storage / Metadata, Workflow UI
Activity
yangzhang75 commentedon Aug 26, 2026
/take
31 remaining items
feat(config): turn the Form View on by default
feat(gui): wire the Form View entry points (apache#8456)
feat(config): turn the Form View on by default
Merge the upstreamed Form View into the deploy branch
feat(config): turn the Form View on by default (apache#8528)
perf(workflow): switch between a workflow's two views without reloadi…
fix(workflow): keep a newer local edit over a save's response (apache…
fix(workflow-form): rebuild the cards on compilation only when it cha…
fix(workflow-form): rebuild the cards on compilation only when it cha…
fix(workflow-form): rebuild the cards on compilation only when it cha…
feat(workflow-form): render Projection's drag-reorder list in the for…
fix(workflow-form): rebuild the cards on compilation only when it cha…
fix(workflow-form): rebuild the cards on compilation only when it cha…
fix(workflow-form): keep the keyboard out of a read-only input card, …