Implementation: ENABLED (node statuses) · IMPLEMENTED (typed WorkNodeLifecycleV1) · Exposure: INTERNAL. See status labels. 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.
  • VAULT and LEARN happen after the terminal state and are not a run status.
How node states roll up into the public 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.

Current implementation

The work runtime stores node statuses as strings in its ledger and has done so for some time. On main there is now a typed lifecycle with the fifteen states above, a legal-transition table, close outcomes, and a two-way mapping to the stored strings, so no data migration is needed. It is merged as library code with tests and is not yet the path every transition goes through. For agency-origin work, the rule that a builder cannot close its own node is enforced today by the verifier. See Verification.

Availability

Developer relevance

As an executor, the last thing you do is produce outputs and evidence. You never report done. Expect a node to move to verifying after your output, and possibly back to continue or replan.