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