Expand description
Rollout-reducer transition dispatch (RFC-0008 §3 + §7).
Each source-state module holds the (legal-event) match arms; this
file is the single entry point the public step() calls. The
reducer enforces transition legality — the applier owns aggregation
(e.g., “all hosts Converged → emit RolloutTerminal”) so the
reducer can stay pure.
Modules§
- active 🔒
Activesource state. At least one host is in-flight (Pending/Activating/Soakingper RFC-0005).- converging 🔒
Convergingsource state. All current-wave hosts have reached Soaking or beyond; later waves remain to dispatch (or, with no more waves, all hosts await Converged).- failed 🔒
Failedsource state. A host hithalt-onlypolicy; operator action required. Same exit shape asReverted.- opening 🔒
Openingsource state. The rollout has been opened but no hosts have joined yet (RFC-0008 §3).- pruned 🔒
Prunedsource state. Absorbing — the in-memory state-machine instance has been freed; the row persists for audit (RFC-0008 §3 + d1bc6df1 architect fix-up). Any further event is structurally a defect.- reverted 🔒
Revertedsource state. Some host firedrollback-and-halt; rollout is past the point where new hosts dispatch. Exits viaSuccessorOpened,RetentionExpired, orOperatorClearance.- superseded 🔒
Supersededsource state. A newer rollout for the same channel has opened. Only exit is→ PrunedonRetentionExpired.- terminal 🔒
Terminalsource state. All hosts Converged; channel-edges may release. Two exits:→ SupersededonSuccessorOpened,→ PrunedonRetentionExpired.
Functions§
- dispatch 🔒
- Dispatch a
RolloutEventagainst the currentRolloutRecord. - illegal 🔒
- Helper: build a
RolloutTransitionError::IllegalForStatefor events that don’t apply to the current state. - transition_
effect 🔒 - Helper: build the
RolloutEffect::RecordRolloutTransitioneffect for a state transition. Lives here so the per-state modules don’t re-derive it.