awf v0.2.0
New workflow-format capabilities for typed-output artifacts, conditional-branch
optionality, and nested output addressing. Backward-compatible — existing
workflows are unaffected and the workflow-format version (version: 1) is
unchanged.
Added
output_artifact:on containerless agent steps. A containerlessawf/llm
step can declareoutput_artifact: <name>to publish its validated
output_schemaobject as a first-class, content-addressed artifact
step.<id>.files.<name>. The dispatcher serializes the typed output to
canonical JSON (byte-identical to the step's own typed-output blob — one blob,
two references), so it flows through the existing artifact machinery: a
deterministic gate evaluator reads it viainput_files, and it forwards out of
a gate to a workflow-leveloutput_files:alias. Validated byAWF3014
(containerless-only; requiresoutput_schema; mutually exclusive with
output_files).reactis excluded in this release.if-branch optionality. A reference from outside anifto a step whose
branch was not taken now resolves to a distinct ABSENT sentinel (AWF4006)
instead of failing the run. Inoutputs:— and symmetrically in a workflow
output_files:alias — the bound key is simply omitted; arequired
output_schemafield still fails on omission. Omission composes across a
sub-workflowcall: a child that omits an optional output makes the parent's
binding omit too. Referencing an absent step anywhere else (arun:
substitution, a gateuntil, another step's input) remains an author error.first_of:output selection. A workflow output may bind
first_of: [ <ref>, <ref>, ... ]to select the first present (non-absent)
reference — the "read whicheverifbranch ran" pattern — as a structured
directive, without adding an operator to the templating language.awf outputs --stepreads nested runtime paths.--stepnow accepts a
step's full runtime address verbatim (e.g.
gate[0].attempt-2.generate.<id>,map[0].item-3.<id>,
loop[0].body.iter-3.<id>), honoring the documented promise. The caller names
the instance; a path that names no committed step (including a step under a
non-takenifbranch, or a path missing its suffix) is a read failure
(exit 1), not a usage error.
Changed
AWF3012warning wording. The conditional-scope-output validation warning
now describes the new omit / required-fail semantics — an output bound to a
non-takenifbranch is omitted (and only required schema fields then fail),
rather than claimingawf outputswill error.