Graph definitions
A workflow version holds a graph. The same structure is accepted byvalidate-definition and by the version-create route, and both apply the same rules.
Part nodes
A part node names a catalogue part and carries whatever that part needs.terminal.subjectRefs must come from resolve-subjects. Every terminal.* part needs its own pin; identity comes from the pin, never from free text. A run must not re-guess a company name at schedule time, which is why a pin is required before publish rather than resolved at fire time.
Specialist parts take an objective instead, fixed at publish and reused verbatim:
personal_circumstances.
Trigger node
Exactly one, describing what starts a run.cadence: "daily" means every weekday, not every day.
A composition needs no defaultQuestion. The graph already says what to
research: every step carries its own pinned subjects, which is the same reason
a terminal-pinned workflow has never needed one. The field is accepted and
ignored.
A scheduled trigger still requires defaultQuestion on the one host that has
nothing else to go on: a workflow with neither a pin nor a graph. An unattended
run with no bound subjects and nobody present has to say what it is
investigating.
Gate node
What to do when evidence comes back below the floor.Destination node
Where output goes. More than one is allowed.standalone, brief_insert and external. An external destination references a configured integration by destinationId.
Edges
produces satisfies the target’s requires. Edges between a trigger, gate or destination and the rest of the graph are derived from the structure and do not need to be declared.
Validation faults
validate-definition returns every fault at once rather than stopping at the first, and each names the node it applies to.
Because validation and save share one implementation, a definition that validates will save. If it does not, that is a bug worth reporting with the
X-Request-ID.
Version history
rollback republishes
an earlier version rather than reverting the definition, so the history stays
append-only and an audit reads in one direction.