The action_type determines how a step executes and what the engine guarantees for it. The engine pipeline is uniform across types; the types diverge at the executor.
At a glance
| Action type | Executes | Parks on human | Output | Ledger events |
|---|---|---|---|---|
HUMAN |
Nothing — parks before planning | Yes, by definition | Intake artifact | hitl_escalation, hitl_park |
REASONING |
Planner produces structured output | Only via Hitl block |
Planner output artifact | step_start, step_complete |
EXECUTION |
Tool call in the MCP sandbox | On policy DENY |
Tool output artifact | policy_eval, tool_call, step_complete |
SUB_SOP |
Nested workflow | Inherits the child's gates | Child terminal artifacts | Full child event trail |
HUMAN
The engine parks before planning and waits for explicit intake. The intake schema is declared in metadata; the resume signal provides the data. The response is consumed exactly once and triggers a fresh planning iteration with the intake injected into context. There is no path around the gate: downstream steps see the dependency unsatisfied until the gate resolves.
REASONING
The planner produces the step's structured output proposal against the output contract implied by step_description and metadata limits. The proposal is not workflow state until verification passes. Iterations within an attempt are bounded; a failed verdict's critique feeds the next iteration. A REASONING step never touches an external system — side effects belong to EXECUTION.
EXECUTION
The only action class with external side effects, and the most gated:
| Gate | Order | On failure |
|---|---|---|
| Tool-input schema validation | Before execution | Failure — no call is made |
| Cedar policy evaluation | Before execution | DENY halts the step and parks the workflow |
| Sandbox provisioning | At execution | Provisioning failure is retryable within budget |
| Output schema validation | Before commit | Deviation is failure — never best-effort pass-through |
The side-effect class recorded for the step determines whether the step is compensatable.
SUB_SOP
The step invokes another SOP as a nested sub-workflow. The child is isolated: own identity, own checkpoint trail, own budget envelope. The parent consumes only the child's terminal artifacts, made available to downstream steps by hydration. A failed child is retried by bounded regeneration — never by re-running the child in place.
Failure handling by type
| Type | Terminal failure mode | Recovery path |
|---|---|---|
HUMAN |
Intake rejected by schema | Re-prompt within escalation budget, then park |
REASONING |
Iterations exhausted without a passing verdict | Escalation ladder, then park |
EXECUTION |
Policy DENY, schema deviation, sandbox failure beyond budget |
DENY parks; structural failures route to Saga compensations |
SUB_SOP |
Child fails terminally or circuit breaker trips | Regeneration up to cap, then parent-side escalation, then park |
