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 claim_frontier;
16mod closure_accounting;
17mod conversation;
18mod conversation_codec;
19mod cursor_facts;
20mod detach;
21mod edge;
22mod enrollment;
23mod enrollment_closure;
24mod incarnation;
25mod lookup;
26mod membership;
27mod observer_recovery;
28mod operation_event;
29mod operations;
30mod storage;
31
32#[cfg(test)]
33mod aggregate_commit_tests;
34#[cfg(test)]
35mod attach_tests;
36#[cfg(test)]
37mod binding_tests;
38#[cfg(test)]
39mod claim_frontier_tests;
40#[cfg(test)]
41mod closure_accounting_tests;
42#[cfg(test)]
43mod conversation_tests;
44#[cfg(test)]
45mod cursor_facts_tests;
46#[cfg(test)]
47mod detach_tests;
48#[cfg(test)]
49mod edge_tests;
50#[cfg(test)]
51mod enrollment_closure_tests;
52#[cfg(test)]
53mod enrollment_tests;
54#[cfg(test)]
55mod incarnation_tests;
56#[cfg(test)]
57mod lookup_tests;
58#[cfg(test)]
59mod membership_tests;
60#[cfg(test)]
61mod observer_recovery_tests;
62#[cfg(test)]
63mod observer_recovery_transaction_tests;
64#[cfg(test)]
65mod operation_event_tests;
66#[cfg(test)]
67mod storage_tests;
68#[cfg(test)]
69mod test_support;
70
71pub use admission::{
72    BindingSlotDecision, BindingSlotOccupancy, CapacityCounter, CapacityCounterInvariantError,
73    ConnectionConversationCapacityCommit, ConnectionConversationTracking,
74    CredentialAttachCapacityCommit, CredentialAttachCapacityCounters,
75    CredentialAttachCapacityDecision, EnrollmentCapacityCommit, EnrollmentCapacityCounters,
76    EnrollmentCapacityDecision, FreshParticipantCapacityCounter,
77    FreshParticipantCapacityCounterInvariantError, ObserverCheckedOperation, ObserverFloorDecision,
78    ObserverFloorPermit, OrderAdmissionError, OrderAllocation, OrderClaims,
79    OrderClaimsInvariantError, OrderHigh, OrderLedger, OrderLedgerInvariantError,
80    RecordSizeDecision, RecordSizePermit, RecoverySequenceReserve,
81    ResultingEnrollmentCapacityCounters, SemanticConnectionCapacityDecision, SequenceAdmission,
82    SequenceAdmissionError, SequenceClaims, SequenceLedger, SequenceLedgerInvariantError,
83    check_observer_floor, check_record_size, select_credential_attach_binding_slot,
84    select_credential_attach_capacity, select_enrollment_binding_slot, select_enrollment_capacity,
85    select_semantic_connection_capacity,
86};
87use admission::{admit_sequence, allocate_order};
88pub use aggregate_commit::{
89    AggregateOperationCommit, AggregateOperationDecision, AggregateOperationFault,
90    AggregateOperationFaultReason, AggregateOperationRefusal, AggregateOperationResult,
91    decide_attached_operation, decide_detached_operation, decide_enrolled_operation,
92    decide_left_operation, decide_nonzero_debt_ack_operation,
93    decide_ordinary_binding_fate_operation, decide_recovered_binding_fate_operation,
94};
95pub use attach::{
96    AttachCommit, AttachCommitError, AttachCommitParameters, AttachTransition,
97    AttachVerificationError, VerifiedAttachCommit, commit_attach,
98};
99pub use binding::{
100    ActiveBinding, AdmissionOrder, BindingState, BindingTerminalDisposition, BindingTerminalKind,
101    CommittedBindingTerminal, CommittedBindingTerminalPosition, CommittedDetachedTerminal,
102    CommittedDiedTerminal, DetachedBindingTransition, DiedBindingTransition,
103    PendingBindingTerminalPosition, PendingDetachedFinalization, PendingDiedFinalization,
104    PendingFinalization,
105};
106pub use claim_frontier::{
107    ActiveIdentityRanks, BindingTerminalOwner, ClaimFrontierCounter, ClaimFrontierError,
108    ClaimFrontierInvalidReason, ClaimFrontiers, ClaimFrontiersRestore, ExitProductRange,
109    ExitProductRangeRestore, FrontierBinding, FrontierParticipant, HistoricalCausalFactRestore,
110    HistoricalMarkerDeliveryFactRestore, ImmutableOrderCandidateMajor,
111    ImmutableOrderCandidateMajorRestore, ImmutableSequenceCandidate,
112    InitialEnrollmentFrontierCommit, InitialEnrollmentFrontierError,
113    InitialEnrollmentFrontierFailure, MarkerCandidateAuthority, MarkerProvenance,
114    MarkerSequenceOwner, MovableOrderClaim, MovableSequenceClaim, OrderClaimFrontier,
115    OrderClaimFrontierRestore, OrderDirectOwner, PrepareLeaveAuthorityError,
116    RecoveryClaimProvenance, RecoveryOrderActiveBindingRestore, RecoveryOrderBlock,
117    RecoveryOrderBlockRestore, RecoverySequenceBlock, RecoverySequenceBlockRestore,
118    RecoverySequenceTerminalRestore, ReplacementTerminalProductRange,
119    ReplacementTerminalProductRangeRestore, RetainedCausalRecord, RetainedCausalRecordKind,
120    SequenceClaimFrontier, SequenceClaimFrontierRestore, SequenceDirectOwner, SequenceProductClass,
121    SequenceProductRanges, SequenceProductRangesRestore, TerminalProductRange,
122    TerminalProductRangeRestore, TerminalProductSource,
123};
124pub use closure_accounting::{
125    ClosureAccounting, ClosureAccountingError, RecoveryFenceDecision, RecoveryFencePermit,
126    RemainingClosureDecision, RemainingClosurePermit, RequiredCapacityPlan,
127    RequiredCapacityPlanError, check_recovery_fence, check_remaining_closure,
128};
129pub use conversation::{
130    ConversationCommit, ConversationDecision, ConversationEvent, ConversationEventDecodeError,
131    ConversationGenesis, ConversationRefusal, ConversationRefusalReason, ConversationReplayError,
132    ConversationReplayFailure, ParticipantConversation,
133};
134pub use cursor_facts::{
135    BoundParticipantCursor, CumulativeAckAuthorizationError, CumulativeAckOutcome,
136    CursorEpisodeBuildError, CursorFactEncodeError, CursorProgressFact, CursorProgressFacts,
137    CursorProgressKey, NonzeroDebtCursorEpisode, RecipientAckObligations,
138    RecipientAckObligationsContextError, RecipientAckObligationsError,
139};
140pub use detach::{
141    CommittedDetach, CommittedDetachTransition, DetachCell, DetachCommitError, DetachReplayError,
142    DetachVerificationError, EmptyDetach, PendingDetach, PendingDetachTransition,
143    PendingDrainDecision, PendingReplay, PendingReplayError, PendingReplayRequest,
144    TerminalizedDetach, VerifiedCommittedDetach, VerifiedDetachRequest, VerifiedPendingDetach,
145    VerifiedTerminalizedDetach, commit_detach, complete_pending_detach, start_blocked_detach,
146};
147pub use edge::{
148    ClosureDebt, ClosureState, CursorFateSuccessor, CursorProgressContinuous, CursorProgressMarker,
149    DebtCompletion, DetachedAttachRefusal, DetachedCredentialRecovery, DetachedCursorRelease,
150    DetachedMarkerRelease, Event, FencedAttachCommit, KClaimBackedDetachedLeave, LeaveOnlyEdge,
151    MarkerDelivery, ObserverProjection, OrdinaryBindingAuthority, OrdinaryBindingFate,
152    OrdinaryDetachedAttachAdmission, ParticipantCursorProgress, PendingRecoveredCursorRelease,
153    PhysicalCompaction, ProjectionCompactionSuccessor, RecoveredBindingFate,
154    RecoveredBindingFateTransition, RecoveredCursorRelease, StoredEdge,
155};
156pub use enrollment::{
157    AllocatedParticipantSlot, AttachedLifecycleRecord, AttachedRecordPosition, BindingOrigin,
158    EnrollmentCommit, EnrollmentCommitError, EnrollmentCommitParameters,
159    ParticipantSlotAllocationError, ParticipantSlotAllocatorProof, commit_enrollment,
160};
161pub use enrollment_closure::{
162    InitialEnrollmentClosureError, InitialEnrollmentClosureInput,
163    InitialEnrollmentClosureProjection, PlannedEnrollmentMarker, RecoveryQuartetStatus,
164    project_initial_enrollment_closure,
165};
166pub use incarnation::{
167    ConnectionIncarnationAllocation, ConnectionIncarnationAllocationDecision,
168    ConnectionIncarnationAllocator, ConnectionIncarnationAllocatorRestore,
169    ConnectionIncarnationAllocatorRestoreError, ConnectionOrdinalExhaustion,
170    ConnectionOrdinalExhaustionCommit, ConnectionOrdinalExhaustionReplay,
171    DurableIncarnationReferences, DurableIncarnationReferencesError, ServerIncarnationExhaustion,
172    ServerIncarnationFsyncIntent, ServerIncarnationStartupDecision,
173    allocate_connection_incarnation, prepare_server_incarnation_startup,
174};
175pub use lookup::{
176    AttachSecretProof, BindingRequiredLookupResult, CredentialAttachLiveReceipt,
177    CredentialAttachLookupResult, CredentialAttachProvenance, CredentialAttachTokenPhase,
178    DetachLookupContext, DetachLookupResult, DetachTokenResolution, EnrollmentLiveReceipt,
179    EnrollmentLookupResult, EnrollmentProvenance, EnrollmentTokenPhase, LeaveLookupResult,
180    LeaveSecretProof, ParticipantBindingRequest, PresentedIdentity, ResolvedIdentity,
181    lookup_binding_required, lookup_credential_attach, lookup_detach, lookup_enrollment,
182    lookup_leave,
183};
184pub use membership::{
185    EnrollmentFingerprint, IdentityState, LeaveCommit, LeaveCommitError, LeaveCommitParameters,
186    LeaveFingerprint, LeaveVerificationError, LiveMember, LiveMemberRestore,
187    MembershipInvariantError, PendingLeaveCommitParameters, PreparedLeaveAuthority,
188    RetiredIdentity, RetirementError, VerifiedLeaveRequest, commit_leave, commit_pending_leave,
189};
190pub use observer_recovery::{
191    ObserverProgressAdvanceDecision, ObserverProgressAdvanceError,
192    ObserverProgressAdvanceTransaction, ObserverProgressProjection, ObserverProgressTrackDecision,
193    ObserverProgressTrackError, ObserverProgressTrackTransaction, ObserverRecoveryAggregate,
194    ObserverRecoveryAggregateRestoreError, ObserverRecoveryArm, ObserverRecoveryCommit,
195    ObserverRecoveryDecision, ObserverRecoveryTransaction, ObserverRecoveryTransactionDecision,
196};
197pub use operation_event::{
198    AttachedOperation, BindingFateOperation, ConversationOperation, DetachedOperation,
199    EnrolledOperation, LeftOperation, NonzeroDebtAckOperation,
200};
201pub use operations::{
202    AttachFrontierCharges, CommittedOrdinaryRecord, InitialEnrollmentCommitValues,
203    InitialEnrollmentOperationCommit, InitialEnrollmentOperationDecision,
204    InitialEnrollmentOperationFault, InitialEnrollmentOperationInput, LiveFrontierCommit,
205    LiveFrontierError, LiveFrontierFailure, LiveFrontierOwner, LiveFrontierResult, LiveLeaveCommit,
206    LiveLeaveError, MarkerAckCommit, MarkerAckCommitError, MarkerAckDecision,
207    MarkerDeliveryProjection, MarkerDrainCommit, MarkerDrainError, MarkerProofDecision,
208    MarkerProofInput, MarkerProofPermit, MarkerProofState, NonzeroAckEpisodePosition,
209    NonzeroParticipantAckCommit, NonzeroParticipantAckCommitError, NonzeroParticipantAckDecision,
210    NonzeroParticipantAckInvariantError, OrdinaryProjectionError, OrdinaryProjectionLimits,
211    OrdinaryRecordDrainFirst, OrdinaryRecordProjectionDecision, OrdinaryRecordProjectionFailure,
212    OrdinaryRecordProjectionInput, ParticipantAckCommit, ParticipantAckCommitError,
213    ParticipantAckDecision, ProjectedOrdinaryRecord, ReceiptDeadlineError, ReceiptDeadlines,
214    RecordAdmissionCommit, RecordAdmissionDecision, RecordAdmissionDrainFirst,
215    RecordAdmissionFailure, RecordAdmissionFault, RecordAdmissionPersistenceParts,
216    RecordAdmissionPrestate, RecordAdmissionRefusal, RetainedRecordCharge,
217    UnchangedRecordAdmission, apply_attach_frontier, apply_detach_frontier,
218    apply_enrollment_frontier, apply_initial_enrollment, apply_marker_ack,
219    apply_marker_ack_frontier, apply_nonzero_participant_ack,
220    apply_nonzero_participant_ack_frontier, apply_nonzero_participant_ack_with_obligations,
221    apply_participant_ack, apply_participant_ack_frontier, apply_participant_ack_with_obligations,
222    apply_record_admission, classify_record_admission_binding, commit_pending_leave_frontier,
223    commit_settled_leave_frontier, drain_next_marker, select_marker_proof,
224};
225pub use storage::{
226    BindingFateTerminalRestore, BindingStateRestore, ClosureStateRestore,
227    CommittedBindingTerminalRestore, ConversationStateRestoreError, CursorEpisodeRestore,
228    DebtCompletionRestore, DetachCellRestore, DetachedCredentialRecoveryRestore,
229    DetachedCursorReleaseProvenanceRestore, DetachedMarkerReleaseRestore,
230    FencedAttachCommitRestore, LeaveCommittedRestore, LiveIdentityRestore,
231    MarkerCursorProgressRestore, MarkerDeliveryRestore, OrdinaryBindingAuthorityRestore,
232    OrdinaryBindingFateRestore, ParticipantConversationRestore, ParticipantConversationState,
233    ParticipantLifecycleRestore, PendingFinalizationRestore, PendingRecoveredCursorReleaseRestore,
234    RecoveredBindingFateRestore, RecoveredStorageCompletionRestore, RestoredBindingFateTerminal,
235    RestoredParticipantLifecycle, RetiredIdentityRestore, StorageRestoreError, StoredEdgeRestore,
236};