Agent names offered in the assignment dropdown. Supplied by the host, which owns data access.
The whole graph, for resolving the selected task's incoming edges.
The chosen action. Same reasoning as AgentName.
The chosen agent, read and written through the node's configuration.
A template cannot narrow a discriminated union, so the two-way binding goes through here
rather than at Draft.configuration.agentName — which would also be wrong the moment the
draft is a different kind.
Which of the three assignment shapes this step currently uses.
Derived from the draft rather than stored separately: the node's own kind is the single
source of truth, and a parallel field could disagree with it.
The edges into this task, so their conditions are editable where the step is.
True when this step waits on a person.
The task being edited. Null shows the empty state rather than a form bound to nothing.
Asks the parent to apply the draft.
Asks the parent to change (or, with an empty string, clear) an edge's condition.
Switches the step between an agent, an action and a person.
Replacing kind and configuration together is the whole operation now. Under the old flat
shape this had to clear two sibling fields on every branch, and forgetting one produced an
AssignmentConflict from a gesture that looked like a simple choice — a bug the union made
unrepresentable rather than merely guarded.
The previous name is carried over where it still applies, so toggling Agent → Person → Agent does not silently forget what the author had chosen.
Optionalname: string
Action names offered in the assignment dropdown. Same ownership rule as
AvailableAgentNames.