Design a node
A node is a durable Process Editor contract. It must represent a business operation worth composing in a graph, not merely the availability of a partner endpoint or function.
When to introduce a node
A new node is justified when all five of the following conditions are met:
- a concrete process use case exists;
- the extension holds the authority required for the effect or observation;
- composing existing elements does not already solve the need cleanly;
- the durable value outweighs the contract maintenance cost;
- the node does not exist solely to complete CRUD symmetry.
Scalar, Each, or collection
Keep a scalar contract when each item can be processed independently. The Each mechanism then carries repetition.
Expose a collection directly when knowing the other items genuinely changes processing: aggregation, deduplication, provider batch behavior, coordination, rate-limit strategy, or completeness rule.
Use one subprocess per item when each item itself requires routing, waits, or human interactions.
Inputs and outputs
- prefer a typed business object over a raw identifier when the node needs the full context;
- ask directly for the precise property when the node only needs a value, for example an email address;
- an output must add new value or a new guarantee, not re-emit an unchanged input;
- a
platform.*output must be complete and conform to the canonical contract; - display projections must not duplicate the output contract merely to enrich the UI card.
Drafts and mutations
Create a draft as late as possible, once the data required for its handoff is known. Do not introduce a node update_*_draft by default solely because a backend allows progressive mutation.
A mutation must remain explicit. Do not mix a read with a hidden effect, and do not hide a business failure in a warning or success output.
Naming and labels
An extension node uses the canonical identity <extension_key>.<snake_case>, for example stripe.ensure_customer. The prefix must be exactly the extension's metadata.name . Core executables use the reserved namespace ormuz in process artifacts; an extension must never borrow that namespace.
The user-facing label describes the operation in sentence case with a clear business verb.
Avoid implementation-oriented names such as “helper”, “handler”, or “API call”. The designer must understand the business outcome without knowing the partner code.