Skip to content
mchristegh edited this page Jul 15, 2026 · 1 revision

The node's consensus state is exposed on every output message as msg.consensusState, and takes one of three values.

                    first evaluation with quorum satisfied
        waiting ────────────────────────────────────────► untriggered
           ▲                                              │        ▲
           │                             aggregate crosses │        │ aggregate re-crosses
         reset                            trigger threshold│        │ release threshold, or
      (any state)                                          ▼        │ quorum lost (Release policy)
           │                                            triggered ──┘
State Meaning
waiting No evaluation has ever succeeded — no readings yet, or quorum has never been met since deploy or the last reset.
untriggered Evaluated; the aggregate sits on the release side of the thresholds.
triggered Latched; the trigger threshold was crossed. Output 1 fired once for this transition and stays silent until a release re-arms it.

Two things people expect to be states are deliberately flags instead, carried on every envelope:

  • msg.disabled — the disable command freezes decisions (latch transitions), not data. Readings, freshness, and quorum tracking all continue while disabled. See Input Messages.
  • msg.quorum — whether enough sources are currently fresh. Below quorum the aggregate is still computed and reported; only the latch evaluation is suspended. See Sources Freshness and Quorum.

So a node can be, say, triggered with quorum: false and disabled: true simultaneously — the state names the latch, the flags name the conditions around it.

Notes on transitions:

  • waiting → untriggered is silent. Entering evaluation for the first time is bookkeeping, not an event. (Consequence: the quorumregained event that enables the first evaluation still reports waiting — envelopes reflect the instant of dispatch; see Output Messages.)
  • The latch fires once per transition. A triggered node does not re-fire output 1 on further trigger-side readings; a release re-arms it. See Trigger and Release.
  • reset returns to waiting from any state, clearing learned sources and values. Expected sources remain on the roster as never-seen, and runtime overrides survive — reset clears data, not configuration. See Input Messages.
  • Restore is transition-silent. A persisted node re-enters its saved state without firing Trigger or Release. See Persistence.

Clone this wiki locally