- Handler
- task.run
Run one registered task, retry when needed, and save its result.
A3S Flow 1.0 provides 18 nodes that authors can place on a canvas. After choosing a node, you can configure it, connect ports, and validate the full graph in the Playground, or generate the same structure through the CLI. Fields, defaults, ports, runtime bindings, and durable identity rules all come from one manifest catalog.
iteration-start and loop-start are internal container entries. The editor creates them with their container. They do not appear in the node picker and cannot be placed on the top-level canvas.
This workbench uses the public @a3s-lab/flow-ui components. Selecting a node gives the canvas card and configuration panel the same node object. Title, description, and field edits update the preview immediately. Waits, callbacks, batches, child workflows, and containers use dedicated controls.
Select a node and edit it in place. Canvas cards, settings, ports, and emitted DSL all read from the same manifest catalog.
Run one registered task, retry when needed, and save its result.
incontrol · FlowControlinputdata · JsonValuesuccesscontrol · FlowControlresultdata · JsonValuefailedcontrol · FlowControlerrordata · StringresultStepResulterrorStepErrorstep_nameDefaulttask.run
_input_typeStrInputdisplay_nameStep handlerinfoRegistered task that this step runs.namestep_nameplaceholdertool.executerequiredtruetypestrui_groupexecutionui_group_labelExecutionvaluetask.runinputDefault{"apiVersion":"a3s.dev/flow-expression/v1","expression":{"op":"field","path":"input"}}
_input_typeA3SFlowExpressionInputdisplay_nameStep inputexpression_purposeinputinfoChoose the workflow data sent to the task.input_types["FlowValue"]nameinputtypedictui_groupexecutionui_group_labelExecutionvalue{"apiVersion":"a3s.dev/flow-expression/v1","expression":{"op":"field","path":"input"}}max_attemptsDefault3
_input_typeIntInputadvancedtruedisplay_nameMaximum attemptsinfoTotal attempts for this step, including the first execution.namemax_attemptsrange_spec{"min":1,"max":100,"step":1}requiredtruetypeintui_groupretry-policyui_group_labelRetry policyvalue3retry_delay_msDefault0
_input_typeIntInputadvancedtruedisplay_nameRetry delay (ms)infoWait time before the next attempt. Use 0 to retry immediately.nameretry_delay_msrange_spec{"min":0,"max":86400000,"step":100}requiredtruetypeintui_groupretry-policyui_group_labelRetry policyvalue0on_exhaustedDefaultfail_run
_input_typeDropdownInputadvancedtruedisplay_nameIf all attempts failinfoEnd the run, or continue from the failure branch.nameon_exhaustedoptions[{"label":"End run as failed","value":"fail_run"},{"label":"Continue from failure branch","value":"continue_workflow"}]requiredtruetypestrui_groupretry-policyui_group_labelRetry policyvaluefail_runUse Run step for one host task after input arrives. Use Step batch when a set of tasks needs per-member results and retry state. Both require a real task handler registered by the host.
Use Wait until for a time boundary, Callback and approval for an approval or one callback, and Signal wait when an existing business channel resumes the run by name. All three release the worker while waiting.
Use Child workflow when a unit of work needs its own history, state, and cancellation policy. Use Iteration to apply one child graph to a collection, and Loop when a condition controls repetition. Ordinary graph edges remain acyclic.
Nodes with a runtimeBinding compile to durable A3S Flow runtime commands. flow.start and flow.condition execute at the graph layer. iteration and loop define child-canvas structure, while the host decides how each pass compiles into steps or child workflows.
Task and wait nodes normally use the graph node ID as durable identity. Batch nodes also include each member key. Changing those IDs after a run starts prevents replay from matching the original history.
Every individual node page includes the following material.
Start with the reported path and locate the exact node and field. Field errors usually mean a required value is empty, a number is out of range, or a dependent setting no longer matches. Edge errors usually mean incompatible port types, an occupied input, a cross-scope connection, or a cycle.
Do not delete unknown fields merely to silence validation. Check the node page for its current fields and ports, then validate again in the Playground or CLI. Preserve node IDs after runs exist because steps, hooks, progress records, and child runs use those IDs to match committed history.
The installed catalog ships with the front-end components. Inspect the current version before creating a node.
After adding nodes to the graph, run validate, compile, and digest. The CLI checks fields, ports, scopes, cycles, and deterministic execution order.