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