Composable, representable, executable state machines.
A reducer is the total function State × Event → State × Effects. It does
not execute effects, choose a transport, own locks, or prescribe storage.
Those omissions are the useful boundary: interpreters may be concurrent,
asynchronous, simulated, or model checked without changing the reducer.
Entity lifecycle management is one application. Actor supervision, protocol sessions, retry policies, and resource ownership can use the same kernel when their decisions are deterministic and their effects can be represented as data. It is not appropriate for algorithms whose state is intrinsically external or whose correctness depends on hidden I/O.
[Machine] retains sequential, product, and choice composition as concrete
structure. The same value can therefore be executed with [Machine::step]
and inspected with [Machine::describe]. Composition is static and
allocation-free: Rust monomorphizes the concrete composition tree.
Bombay Entity can use this to keep its executable lifecycle synchronized with topology documentation and reference models. Actorpass could later use it for supervision or incarnation protocols without depending on entity semantics. It should not replace Actorpass's event loop, mailbox, scheduler, or resource ownership: those are interpreters and runtime capabilities, not deterministic machine descriptions.