Typed state machines + cross-machine invariants, each routed to its checker by its shape.

Composed state-machine model (typed lifecycles + cross-machine invariants)

Intent — Model a concurrent lifecycle as a set of typed state machines that run at once, name the predicates that must hold across those machines as first-class invariants, and derive each invariant's verification obligation from its shape — a safety predicate earns an exhaustive state-space check, a liveness predicate a temporal one, a linear predicate a property test. The concurrency structure stops being implicit in scattered status flags and becomes one checkable object (our instance: a handful of job/chunk/parent lifecycle machines with a dozen-plus cross-service invariants, each routed to its checker by its declared temporal form).

SummaryTyped state machines + cross-machine invariants, each routed to its checker by its shape.
TargetBridge · System models
Formtyped-ir
Movepackage — a constraint shipped with its sensors
Modelis-a-model — a structured model you check a system property against
EnforcementHard (deterministic) — typed machines held true by a drift gate (declared states reconciled against the live lifecycle), and every cross-machine invariant carries a temporal form that derives which checker verifies it
Derivationboth — the machines are reconciled against the live lifecycle (from-code), and each invariant's verification obligation is generated from its temporal shape (to-code)

Its place in the environment — the canonical mechanism for KNOW · Maintain authoritative system knowledge. The variants and known uses that fold under it are gathered on the construction-kit page.

Motivation — the failure it kills

A distributed lifecycle rarely lives in one machine. A parent job fans out into chunks; each chunk moves through its own states; a completer fans the results back in. The correctness properties that matter span the machines: a chunk is never both leased and free, a preempted chunk eventually re-runs, the output is uploaded before the row is marked done, exactly one completer fires. Left implicit, each of those lives as a scatter of boolean flags and status columns mutated from many call sites, and the cross-machine predicate is asserted nowhere. The failures are the worst kind: a rare interleaving double-completes a job, a crash between upload and commit strands a corrupt output as "done," a requeue races a terminal write. None of these show up in a single-state read of any one machine, so a test suite that walks each machine alone reports green while the composition is broken.

Why it's not just the verifier that checks it

A separate mechanism proves invariants: it reads an invariant's temporal form and runs the exhaustive checker that form demands. That mechanism is the verifier, and it is deliberately subject-agnostic — it does not care what the invariants are about. This entry is the thing it verifies: the authored object that declares which machines exist, how they compose, and what must hold across them. The verifier answers "is this stated invariant true across every interleaving?"; the model answers "what are the machines, what are their legal transitions, and what are the cross-machine predicates worth stating?" One is the proof engine, the other the specification the engine runs against — a model with no verifier is unchecked prose, and a verifier with no model has nothing to check. The distinction is the same as a type system versus the types you write: the checker is general, the declared shapes are yours.

Mechanism

Prerequisites

Consequences & costs

Known uses

Related mechanisms

Governed by

The mechanisms that hold this model true — inverted from their Governs edges at build time, never hand-written. A direct governor names this model; a trunk mechanism governs every model.