Skip to main content

liminal_protocol/lifecycle/
mod.rs

1//! Typed participant lifecycle state and transitions.
2//!
3//! The deviations here are mandated by `docs/design/LP-EXTRACTION-GOAL.md`:
4//! detach cells retain a terminalized token after attach so the old binding
5//! epoch remains producible, and cursor-progress facts are keyed per
6//! participant rather than stored in the contract's fixed occurrence array.
7//! The array cannot represent two participants advancing over the same retained
8//! suffix, so completion ordering is instead enforced by typed transitions and
9//! tests.
10
11mod admission;
12mod aggregate_commit;
13mod attach;
14mod binding;
15mod binding_fate;
16mod checkpoint;
17mod checkpoint_codec;
18mod claim_frontier;
19mod closure_accounting;
20mod conversation;
21mod conversation_codec;
22mod cursor_facts;
23mod detach;
24mod edge;
25mod enrollment;
26mod enrollment_closure;
27mod incarnation;
28mod lookup;
29mod membership;
30mod obligation_dispatch;
31mod observer_recovery;
32mod operation_event;
33mod operations;
34mod storage;
35
36#[cfg(test)]
37mod aggregate_commit_tests;
38#[cfg(test)]
39mod attach_tests;
40#[cfg(test)]
41mod binding_tests;
42#[cfg(test)]
43mod checkpoint_lifecycle_tests;
44#[cfg(test)]
45mod checkpoint_tests;
46#[cfg(test)]
47mod claim_frontier_describe_tests;
48#[cfg(test)]
49mod claim_frontier_tests;
50#[cfg(test)]
51mod closure_accounting_tests;
52#[cfg(test)]
53mod conversation_tests;
54#[cfg(test)]
55mod cursor_facts_tests;
56#[cfg(test)]
57mod detach_tests;
58#[cfg(test)]
59mod edge_tests;
60#[cfg(test)]
61mod enrollment_closure_tests;
62#[cfg(test)]
63mod enrollment_tests;
64#[cfg(test)]
65mod incarnation_tests;
66#[cfg(test)]
67mod lookup_tests;
68#[cfg(test)]
69mod membership_tests;
70#[cfg(test)]
71mod observer_recovery_tests;
72#[cfg(test)]
73mod observer_recovery_transaction_tests;
74#[cfg(test)]
75mod operation_event_tests;
76#[cfg(test)]
77mod storage_tests;
78#[cfg(test)]
79mod test_support;
80#[cfg(feature = "test-support")]
81pub mod test_support_external;
82
83pub use admission::{
84    BindingSlotDecision, BindingSlotOccupancy, CapacityCounter, CapacityCounterInvariantError,
85    ConnectionConversationCapacityCommit, ConnectionConversationTracking,
86    CredentialAttachCapacityCommit, CredentialAttachCapacityCounters, EnrollmentCapacityCommit,
87    EnrollmentCapacityCounters, EnrollmentCapacityDecision, FreshParticipantCapacityCounter,
88    FreshParticipantCapacityCounterInvariantError, ObserverCheckedOperation, ObserverFloorDecision,
89    ObserverFloorPermit, OrderAdmissionError, OrderAllocation, OrderClaims,
90    OrderClaimsInvariantError, OrderHigh, OrderLedger, OrderLedgerInvariantError,
91    ParticipantWindowAdmission, ParticipantWindowCommit, RecordSizeDecision, RecordSizePermit,
92    RecoverySequenceReserve, ResultingEnrollmentCapacityCounters,
93    SemanticConnectionCapacityDecision, SequenceAdmission, SequenceAdmissionError, SequenceClaims,
94    SequenceLedger, SequenceLedgerInvariantError, check_observer_floor, check_record_size,
95    select_credential_attach_binding_slot, select_credential_attach_capacity,
96    select_enrollment_binding_slot, select_enrollment_capacity, select_participant_window,
97    select_semantic_connection_capacity,
98};
99use admission::{admit_sequence, allocate_order};
100pub use aggregate_commit::{
101    AggregateOperationCommit, AggregateOperationDecision, AggregateOperationFault,
102    AggregateOperationFaultReason, AggregateOperationRefusal, AggregateOperationResult,
103    decide_attached_operation, decide_detached_operation, decide_enrolled_operation,
104    decide_left_operation, decide_nonzero_debt_ack_operation,
105    decide_ordinary_binding_fate_operation, decide_recovered_binding_fate_operation,
106};
107pub use attach::{
108    AttachCommit, AttachCommitError, AttachCommitParameters, AttachTransition,
109    AttachVerificationError, FencedAttachVerificationRefusal, InstalledAttachState,
110    SealedBindingFateToken, VerifiedAttachCommit, commit_attach,
111};
112pub use binding::{
113    ActiveBinding, AdmissionOrder, BindingState, BindingTerminalDisposition, BindingTerminalKind,
114    CommittedBindingTerminal, CommittedBindingTerminalPosition, CommittedDetachedTerminal,
115    CommittedDiedTerminal, DetachedBindingTransition, DiedBindingTransition,
116    PendingBindingTerminalPosition, PendingDetachedFinalization, PendingDiedFinalization,
117    PendingFinalization,
118};
119pub use binding_fate::SealedBindingFateIntent;
120pub use checkpoint::{
121    CapsuleCaptureError, CapsuleDecodeError, CapsuleRestoreError, ConversationLifecycleView,
122    LifecycleCapsule, LifecycleView, RestoredLifecycle, RestoredLifecycleParts,
123};
124pub use claim_frontier::{
125    ActiveIdentityRanks, BindingTerminalOwner, ClaimFrontierCounter, ClaimFrontierError,
126    ClaimFrontierInvalidReason, ClaimFrontiers, ClaimFrontiersRestore, ExitProductRange,
127    ExitProductRangeRestore, FrontierBinding, FrontierParticipant, HistoricalCausalFactRestore,
128    HistoricalMarkerDeliveryFactRestore, ImmutableOrderCandidateMajor,
129    ImmutableOrderCandidateMajorRestore, ImmutableSequenceCandidate,
130    InitialEnrollmentFrontierCommit, InitialEnrollmentFrontierError,
131    InitialEnrollmentFrontierFailure, MarkerCandidateAuthority, MarkerProvenance,
132    MarkerSequenceOwner, MovableOrderClaim, MovableSequenceClaim, OrderClaimFrontier,
133    OrderClaimFrontierRestore, OrderDirectOwner, PrecedenceCondition, PrepareLeaveAuthorityError,
134    RecoveryClaimProvenance, RecoveryOrderActiveBindingRestore, RecoveryOrderBlock,
135    RecoveryOrderBlockRestore, RecoverySequenceBlock, RecoverySequenceBlockRestore,
136    RecoverySequenceTerminalRestore, ReplacementTerminalProductRange,
137    ReplacementTerminalProductRangeRestore, RetainedCausalRecord, RetainedCausalRecordKind,
138    SequenceClaimFrontier, SequenceClaimFrontierRestore, SequenceDirectOwner, SequenceProductClass,
139    SequenceProductRanges, SequenceProductRangesRestore, TerminalProductRange,
140    TerminalProductRangeRestore, TerminalProductSource, with_validated_marker_record_type,
141};
142pub use closure_accounting::{
143    ClosureAccounting, ClosureAccountingError, RecoveryFenceDecision, RecoveryFencePermit,
144    RemainingClosureDecision, RemainingClosurePermit, RequiredCapacityPlan,
145    RequiredCapacityPlanError, check_recovery_fence, check_remaining_closure,
146};
147pub use conversation::{
148    ConversationCommit, ConversationDecision, ConversationEvent, ConversationEventDecodeError,
149    ConversationGenesis, ConversationRefusal, ConversationRefusalReason, ConversationReplayError,
150    ConversationReplayFailure, ParticipantConversation,
151};
152pub use cursor_facts::{
153    BoundParticipantCursor, CumulativeAckAuthorizationError, CumulativeAckOutcome,
154    CursorEpisodeBuildError, CursorFactEncodeError, CursorProgressFact, CursorProgressFacts,
155    CursorProgressKey, NonzeroDebtCursorEpisode, RecipientAckObligations,
156    RecipientAckObligationsContextError, RecipientAckObligationsError,
157};
158pub use detach::{
159    CommittedDetach, CommittedDetachTransition, DetachCell, DetachCommitError, DetachReplayError,
160    DetachVerificationError, EmptyDetach, PendingDetach, PendingDetachTransition,
161    PendingDrainDecision, PendingReplay, PendingReplayError, PendingReplayRequest,
162    TerminalizedDetach, VerifiedCommittedDetach, VerifiedDetachRequest, VerifiedPendingDetach,
163    VerifiedTerminalizedDetach, commit_detach, complete_pending_detach, start_blocked_detach,
164};
165pub use edge::{
166    ClosureDebt, ClosureState, CursorFateSuccessor, CursorProgressContinuous, CursorProgressMarker,
167    DebtCompletion, DetachedAttachRefusal, DetachedCredentialRecovery, DetachedCursorRelease,
168    DetachedMarkerRelease, DetachedMarkerReleaseProvenance, Event, FencedAttachCommit,
169    KClaimBackedDetachedLeave, LeaveOnlyEdge, MarkerDelivery, ObserverProjection,
170    OrdinaryBindingAuthority, OrdinaryBindingFate, OrdinaryDetachedAttachAdmission,
171    ParticipantCursorProgress, PendingRecoveredCursorRelease, PhysicalCompaction,
172    ProjectionCompactionSuccessor, RecoveredBindingFate, RecoveredBindingFateTransition,
173    RecoveredCursorRelease, StoredEdge,
174};
175pub use enrollment::{
176    AllocatedParticipantSlot, AttachedLifecycleRecord, AttachedRecordPosition, BindingOrigin,
177    EnrollmentCommit, EnrollmentCommitError, EnrollmentCommitParameters,
178    ParticipantSlotAllocationError, ParticipantSlotAllocatorProof, commit_enrollment,
179};
180pub use enrollment_closure::{
181    InitialEnrollmentClosureError, InitialEnrollmentClosureInput,
182    InitialEnrollmentClosureProjection, PlannedEnrollmentMarker, RecoveryQuartetStatus,
183    project_initial_enrollment_closure,
184};
185pub use incarnation::{
186    ConnectionIncarnationAllocation, ConnectionIncarnationAllocationDecision,
187    ConnectionIncarnationAllocator, ConnectionIncarnationAllocatorRestore,
188    ConnectionIncarnationAllocatorRestoreError, ConnectionOrdinalExhaustion,
189    ConnectionOrdinalExhaustionCommit, ConnectionOrdinalExhaustionReplay,
190    DurableIncarnationReferences, DurableIncarnationReferencesError, ServerIncarnationExhaustion,
191    ServerIncarnationFsyncIntent, ServerIncarnationStartupDecision,
192    allocate_connection_incarnation, prepare_server_incarnation_startup,
193};
194pub use lookup::{
195    AttachSecretProof, BindingRequiredLookupResult, CredentialAttachLiveReceipt,
196    CredentialAttachLookupResult, CredentialAttachProvenance, CredentialAttachTokenPhase,
197    DetachLookupContext, DetachLookupResult, DetachTokenResolution, EnrollmentLiveReceipt,
198    EnrollmentLookupResult, EnrollmentProvenance, EnrollmentTokenPhase, LeaveLookupResult,
199    LeaveSecretProof, ParticipantBindingRequest, PresentedIdentity, ResolvedIdentity,
200    lookup_binding_required, lookup_credential_attach, lookup_detach, lookup_enrollment,
201    lookup_leave,
202};
203pub use membership::{
204    EnrollmentFingerprint, IdentityState, LeaveCommit, LeaveCommitError, LeaveCommitParameters,
205    LeaveFingerprint, LeaveVerificationError, LiveMember, LiveMemberRestore,
206    MembershipInvariantError, PendingLeaveCommitParameters, PreparedLeaveAuthority,
207    RetiredIdentity, RetirementError, VerifiedLeaveRequest, commit_leave, commit_pending_leave,
208};
209pub use obligation_dispatch::{
210    CoupledObligationDebtOwner, DebtDispatchDeferral, DebtDispatchInvariant,
211    ObligationDebtDispatchDecision, ObligationDebtDispatchState, ObligationDebtDispatchTransition,
212    ObligationDebtOwnerError, decide_obligation_debt_dispatch,
213};
214pub use observer_recovery::{
215    ObserverProgressAdvanceDecision, ObserverProgressAdvanceError,
216    ObserverProgressAdvanceTransaction, ObserverProgressProjection, ObserverProgressTrackDecision,
217    ObserverProgressTrackError, ObserverProgressTrackTransaction, ObserverRecoveryAggregate,
218    ObserverRecoveryAggregateRestoreError, ObserverRecoveryArm, ObserverRecoveryCommit,
219    ObserverRecoveryDecision, ObserverRecoveryTransaction, ObserverRecoveryTransactionDecision,
220};
221pub use operation_event::{
222    AttachedOperation, BindingFateOperation, ConversationOperation, DetachedOperation,
223    EnrolledOperation, LeftOperation, NonzeroDebtAckOperation,
224};
225pub use operations::{
226    AttachFrontierCharges, BindingFateMeasurementError, BindingFateMeasurementRefused,
227    BindingFateTerminal, BindingTerminalAdmission, BindingTerminalAdmitError,
228    BindingTerminalAdmitRefused, BindingTerminalCandidateCharge, BindingTerminalCauseClass,
229    BindingTerminalCommit, BindingTerminalEncoding, BindingTerminalPending,
230    BindingTerminalPrepareError, BindingTerminalPrepareRefused, CandidateTerminalKey,
231    CommittedOrdinaryRecord, DrainedPendingTerminal, FencedAttachMintRefusalReason,
232    FencedMarkerSourceExpectation, FencedMarkerSourceRetentionRefused,
233    InitialEnrollmentCommitValues, InitialEnrollmentOperationCommit,
234    InitialEnrollmentOperationDecision, InitialEnrollmentOperationFault,
235    InitialEnrollmentOperationInput, LiveFrontierCommit, LiveFrontierError, LiveFrontierFailure,
236    LiveFrontierOwner, LiveFrontierResult, LiveLeaveCommit, LiveLeaveError, MarkerAckCommit,
237    MarkerAckCommitError, MarkerAckDecision, MarkerAnchorReconcile, MarkerDeliveryProjection,
238    MarkerDrainCommit, MarkerDrainError, MarkerProofDecision, MarkerProofInput, MarkerProofPermit,
239    MarkerProofState, MeasuredBindingFate, MintFencedAttachRefused, MintFencedAttachResult,
240    MintedFencedAttach, NonzeroAckEpisodePosition, NonzeroParticipantAckCommit,
241    NonzeroParticipantAckCommitError, NonzeroParticipantAckDecision,
242    NonzeroParticipantAckInvariantError, OrdinaryProjectionError, OrdinaryProjectionLimits,
243    OrdinaryRecordDrainFirst, OrdinaryRecordProjectionDecision, OrdinaryRecordProjectionFailure,
244    OrdinaryRecordProjectionInput, ParticipantAckCommit, ParticipantAckCommitError,
245    ParticipantAckDecision, PendingDiedOrdinaryFinalizer, PendingTerminalDrainRefused,
246    PreparedBindingFate, PreparedBindingTerminal, PreparedPendingDiedOrdinaryFinalizer,
247    ProjectedOrdinaryRecord, ReceiptDeadlineError, ReceiptDeadlines, RecordAdmissionCommit,
248    RecordAdmissionDecision, RecordAdmissionDrainFirst, RecordAdmissionFailure,
249    RecordAdmissionFault, RecordAdmissionPersistenceParts, RecordAdmissionPrestate,
250    RecordAdmissionRefusal, RetainedFencedMarkerSource, RetainedRecordCharge,
251    UnchangedRecordAdmission, apply_attach_frontier, apply_detach_frontier,
252    apply_enrollment_frontier, apply_initial_enrollment, apply_marker_ack,
253    apply_marker_ack_frontier, apply_nonzero_participant_ack,
254    apply_nonzero_participant_ack_frontier, apply_nonzero_participant_ack_with_obligations,
255    apply_participant_ack, apply_participant_ack_frontier, apply_participant_ack_with_obligations,
256    apply_record_admission, classify_record_admission_binding, commit_pending_leave_frontier,
257    commit_settled_leave_frontier, drain_next_marker, scalar_audit_for_recipient_endpoint,
258    select_marker_proof,
259};
260pub use storage::{
261    BindingFateTerminalRestore, BindingStateRestore, ClosureStateRestore,
262    CommittedBindingTerminalRestore, ConversationDescribeError, ConversationStateRestoreError,
263    CursorEpisodeRestore, DebtCompletionRestore, DetachCellRestore,
264    DetachedCredentialRecoveryRestore, DetachedCursorReleaseProvenanceRestore,
265    DetachedMarkerReleaseProvenanceRestore, DetachedMarkerReleaseRestore,
266    FencedAttachCommitRestore, LeaveCommittedRestore, LiveIdentityRestore,
267    MarkerCursorProgressRestore, MarkerDeliveryRestore, OrdinaryBindingAuthorityRestore,
268    OrdinaryBindingFateRestore, ParticipantConversationRestore, ParticipantConversationState,
269    ParticipantLifecycleRestore, ParticipantLifecycleView, PendingFinalizationRestore,
270    PendingRecoveredCursorReleaseRestore, RecoveredBindingFateRestore,
271    RecoveredStorageCompletionRestore, RestoredBindingFateTerminal, RestoredParticipantLifecycle,
272    RetiredIdentityRestore, StorageRestoreError, StoredEdgeRestore,
273};