The parsed workflow IR.
Workflow specs arrive as string-keyed maps (they may come off a wire
or out of a model) and parse into %Spec{}/%Spec.Step{} structs whose
step ids stay strings — untrusted IR never mints atoms. parse/1 is
best-effort: it always returns a struct alongside accumulated :schema
diagnostics rather than raising, so later compiler passes can still run
and report their own findings.
The library validates universal shape only. "kind" vocabulary — and
anything else domain-shaped in a step map — is host concern; the full
original step map is preserved in raw.
Summary
Functions
Parses a string-keyed spec map into {%Spec{}, [Diagnostic.t()]}.
Types
@type t() :: %MimirWorkflows.Spec{ name: String.t() | nil, params: [String.t()], steps: [MimirWorkflows.Spec.Step.t()], version: integer() | nil }
Functions
@spec parse(map()) :: {t(), [MimirWorkflows.Diagnostic.t()]}
Parses a string-keyed spec map into {%Spec{}, [Diagnostic.t()]}.
Every violation appends a %Diagnostic{pass: :schema, severity: :error};
the struct is always returned (steps without ids are kept with
id: nil so later passes can skip them).