Starts collapsed. A plan card sits inline in a conversation and must not dominate it.
Handle for status/cancel, when the graph was dispatched rather than folded.
Live per-step state. Absent means the card shows the plan without a progress line.
The name to save under, seeded from the plan and editable in place.
Held rather than read off the DOM so the empty-name guard is testable without a browser.
The plan. Null renders nothing — a card with no graph has nothing to say.
A workflow with no name is not saveable — there would be nothing to find it by later.
Save is offered only once the work has settled — or when there is no runtime at all, which is the design-time case (a plan being previewed before it runs).
The name the field shows: what the user typed, else the plan's own name.
Seeded rather than left blank because the plan already has a perfectly good name, and making someone invent one is the difference between saving and not bothering.
True once every step has reached a state nothing will move it out of.
One line of progress, or the plan's own reasoning when nothing is running yet.
Whether to offer Save as Workflow.
Off while work is still running: offering to save a plan whose shape may yet change — a retry, a failure routing down a recovery branch — invites saving something that never actually happened.