A run is a graph of work nodes. Every node moves through one lifecycle, owned by the work runtime.
Architecture contract
Rules:
- No executor goes from running to closed-committed directly. Closing is a system transition backed by completion evidence.
- Unknown statuses fail closed. A status the runtime does not recognize is an error, not a default.
- Illegal transitions are rejected, not repaired.
VAULTandLEARNhappen after the terminal state and are not a run status.
Run.status is on The kernel.
Why: if the component doing the work can also declare it finished, completion means only that something said so. Separating the lifecycle from the executor is what makes verification meaningful.