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