Four communities coined this separately
Pick which altitude you mean before writing a line, because the choice decides your unit of retry.
| Term | Altitude | Unit of retry |
|---|---|---|
| Node | A typed unit in a visual graph, carrying config, version and coordinates | A graph vertex |
| Step | A checkpointable region of ordinary code, usually delimited by a function call | A closure |
| Activity | The non-deterministic outside-world call, named apart because the runtime treats it differently | An RPC |
Decide which of the three you mean before you write a line. The choice determines whether your unit of retry is a graph vertex, a closure, or a remote call — and everything downstream follows.
Two distinctions that get collapsed and should not be. Node type versus node instance: the reusable definition against its placement in one workflow. One real engine splits these cleanly, with a typeVersion on the instance pinning which implementation it binds to. Most people conflate them and then cannot ship a breaking change.
Execution versus run: an execution is one invocation of a workflow; a run is one invocation of one node within it. Engines keep a per-node run index precisely because a node inside a loop executes many times in one execution. Conflating these is why people build execution history that cannot show loops.
A vocabulary landmine worth carrying: in one popular tool a "bundle" is the invocation context object handed to a trigger function; in another it is a unit of payload multiplicity. They are opposites.