Expand description
Protocol-machine and guest-runtime surfaces for choreographic session type protocols.
This crate provides a standalone, embeddable protocol machine that executes choreographic protocols projected to local session types. The protocol machine validates every instruction against its session type monitor, ensuring protocol conformance at runtime.
§Architecture
The protocol machine follows the Lean specification in lean/Runtime/ProtocolMachine/:
- Instructions (
instr::Instr): bytecode ops for send/recv/choice/session lifecycle - Coroutines (
coroutine::Coroutine): lightweight execution units, one per role - Sessions (
session::SessionStore): manage session lifecycle and namespaces - Buffers (
buffer::BoundedBuffer): bounded message channels with backpressure - Scheduler (
scheduler::Scheduler): policy-based coroutine scheduling - Loader ([
loader]): dynamic choreography loading with validation - Compiler (
compiler): compileLocalTypeRto bytecode
The crate exposes one canonical single-thread protocol-machine surface,
ProtocolMachine, plus guest-runtime driver surfaces such as
GuestRuntime. Higher-level systems (for example telltale-simulator)
instantiate guest runtimes around the protocol machine with deterministic
middleware for network latency, faults, property monitoring, and
checkpointing.
Nested simulation is supported via runtime::runner::NestedProtocolMachineHandler, which
allows a protocol-machine coroutine to host an inner protocol machine for
distributed or hierarchical simulations.
§Effect Handler Contract
The protocol machine’s [EffectHandler] is synchronous, deterministic, and
session-local. It must not depend on global time or shared mutable
state across sessions. This is distinct from the async, typed
telltale_runtime::ChoreoHandler used by generated choreography code.
§Usage
use telltale_machine::{
GuestRuntime, OwnedSession, ProtocolMachine, ProtocolMachineConfig, loader::CodeImage
};
let config = ProtocolMachineConfig::default();
let mut machine = ProtocolMachine::new(config);
let image = CodeImage::from_local_types(&local_types, &global_type);
let _session: OwnedSession =
machine.load_choreography_owned(&image, "runtime/owner")?;
while machine.step(&handler)? {}
let mut guest = GuestRuntime::new(ProtocolMachineConfig::default());
let _owned = guest.load_choreography_owned(&image, "runtime/owner")?;
guest.run(&handler, 64, 1)?;Re-exports§
pub use architecture::EngineOwnership;pub use architecture::EngineRole;pub use architecture::CANONICAL_ENGINE;pub use architecture::CROSS_TARGET_CONTRACT;pub use architecture::ENGINE_OWNERSHIP;pub use architecture::EQUIVALENCE_SURFACES;pub use bridge::EffectGuardBridge;pub use bridge::IdentityGuardBridge;pub use bridge::IdentityPersistenceBridge;pub use bridge::IdentityVerificationBridge;pub use bridge::PersistenceEffectBridge;pub use capabilities::capability_lifecycle_audit_log_v1;pub use capabilities::lean_first_class_capability_module_boundary;pub use capabilities::protocol_critical_capability_boundary;pub use capabilities::rust_first_class_capability_module_boundary;pub use capabilities::ProtocolCriticalCapabilityArtifact;pub use capabilities::ProtocolCriticalCapabilityBoundaryEntry;pub use capabilities::ProtocolCriticalCapabilityClass;pub use capabilities::ProtocolCriticalCapabilityLifecycleRecord;pub use capabilities::ProtocolCriticalCapabilityLifecycleState;pub use clock::SimClock;pub use communication_replay::CommunicationConsumeResult;pub use communication_replay::CommunicationConsumption;pub use communication_replay::CommunicationConsumptionArtifact;pub use communication_replay::CommunicationIdentity;pub use communication_replay::CommunicationReplayError;pub use communication_replay::CommunicationReplayMode;pub use communication_replay::CommunicationReplayState;pub use communication_replay::CommunicationStepKind;pub use communication_replay::DefaultCommunicationConsumption;pub use communication_replay::COMM_IDENTITY_DOMAIN_TAG;pub use communication_replay::COMM_REPLAY_DUPLICATE_TAG;pub use communication_replay::COMM_REPLAY_SEQUENCE_MISMATCH_TAG;pub use composition::ComposedRuntime;pub use composition::CompositionCertificate;pub use composition::CompositionError;pub use composition::DeterminismCapability;pub use composition::MemoryBudget;pub use composition::MemoryUsage;pub use composition::ProtocolBundle;pub use composition::ReconfigurationEvent;pub use composition::ReconfigurationPlan;pub use composition::ReconfigurationPlanExecution;pub use composition::ReconfigurationPlanStep;pub use composition::ReconfigurationPolicy;pub use composition::ReconfigurationRuntimeSnapshot;pub use composition::RuntimeUpgradeExecution;pub use composition::RuntimeUpgradeRequest;pub use composition::SchedulerCapability;pub use composition::TheoremPackCapabilities;pub use coroutine::CoroStatus;pub use coroutine::Coroutine;pub use coroutine::CoroutineState;pub use coroutine::KnowledgeSet;pub use coroutine::Value;pub use determinism::DeterminismMode;pub use determinism::EffectDeterminismTier;pub use driver::NativeSingleThreadDriver as GuestRuntime;pub use durable::AgreementWal;pub use durable::AgreementWalArtifact;pub use durable::AgreementWalEntry;pub use durable::AgreementWalHandler;pub use durable::DurableRecoveryAction;pub use durable::DurableRecoveryDecision;pub use durable::DurableRecoveryMetadata;pub use durable::DurableRecoveryPlan;pub use durable::EvidenceIdResolver;pub use durable::EvidenceOutcomeCache;pub use durable::EvidenceOutcomeCacheArtifact;pub use durable::EvidenceOutcomeCacheEntry;pub use durable::EvidencePersistenceHandler;pub use durable::FileAgreementWal;pub use durable::FileEvidenceOutcomeCache;pub use durable::InMemoryAgreementWal;pub use durable::InMemoryEvidenceOutcomeCache;pub use durable::PersistedDurabilityArtifact;pub use durable::PersistedDurabilityPayload;pub use durable::WalSyncMode;pub use durable::WalSyncRequest;pub use durable::PERSISTED_DURABILITY_SCHEMA_VERSION;pub use envelope_diff::EffectOrderingClass;pub use envelope_diff::EnvelopeDiff;pub use envelope_diff::EnvelopeDiffArtifactV1;pub use envelope_diff::FailureVisibleDiffClass;pub use envelope_diff::SchedulerPermutationClass;pub use envelope_diff::WaveWidthBound;pub use faults::classify_fault;pub use faults::fault_code;pub use faults::fault_code_of;pub use faults::FaultClass;pub use guard::GuardLayer;pub use guard::InMemoryGuardLayer;pub use guard::LayerId;pub use identity::IdentityModel;pub use identity::ParticipantId;pub use identity::SiteId as IdentitySiteId;pub use identity::StaticIdentityModel;pub use instr::Instr;pub use integration::run_loaded_protocol_machine_record_replay_conformance;pub use integration::LoadedProtocolMachineReplayConformance;pub use intern::EdgeId;pub use intern::EdgeSymbol;pub use intern::EdgeSymbolTable;pub use intern::StringId;pub use intern::SymbolTable;pub use kernel::ProtocolMachineKernel;pub use output_condition::verify_output_condition;pub use output_condition::OutputConditionCheck;pub use output_condition::OutputConditionHint;pub use output_condition::OutputConditionMeta;pub use output_condition::OutputConditionPolicy;pub use owned::OwnedSession;pub use persistence::NoopPersistence;pub use persistence::PersistenceModel;pub use refinement::ClaimedRuntimeCoreBundle;pub use refinement::CoroutineRefinementSlice;pub use refinement::ProtocolMachineRefinementSlice;pub use refinement::RefinementSliceError;pub use refinement::RuntimeObservationBundle;pub use refinement::SchedulerRefinementSlice;pub use refinement::SessionRefinementSlice;pub use refinement::TransitionRefinementSummary;pub use runtime_contracts::admit_protocol_machine_runtime;pub use runtime_contracts::determinism_profile_supported;pub use runtime_contracts::enforce_protocol_machine_runtime_gates;pub use runtime_contracts::execution_profile_supported;pub use runtime_contracts::request_determinism_profile;pub use runtime_contracts::requires_protocol_machine_runtime_contracts;pub use runtime_contracts::runtime_capability_snapshot;pub use runtime_contracts::runtime_execution_profile;pub use runtime_contracts::rust_runtime_critical_transport_theorem_keys;pub use runtime_contracts::transported_theorem_boundary;pub use runtime_contracts::validate_transport_contracts_for_execution_profile;pub use runtime_contracts::DeterminismArtifacts;pub use runtime_contracts::ProtocolMachineAdmissibilityClass;pub use runtime_contracts::ProtocolMachineEscalationWindowClass;pub use runtime_contracts::ProtocolMachineExecutionProfile;pub use runtime_contracts::ProtocolMachineFairnessAssumption;pub use runtime_contracts::RuntimeAdmissionResult;pub use runtime_contracts::RuntimeCapability;pub use runtime_contracts::RuntimeContracts;pub use runtime_contracts::RuntimeGateResult;pub use runtime_contracts::RuntimeTransportContract;pub use runtime_contracts::TheoremTransportRequirements;pub use runtime_contracts::TransportContractGateError;pub use runtime_contracts::TransportedTheoremBoundaryEntry;pub use runtime_contracts::TransportedTheoremUsageClass;pub use semantic_objects::protocol_machine_semantic_objects;pub use semantic_objects::AgreementContract;pub use semantic_objects::AgreementEvidence;pub use semantic_objects::AgreementEvidenceKind;pub use semantic_objects::AgreementLevel;pub use semantic_objects::AgreementProfile;pub use semantic_objects::AgreementRule;pub use semantic_objects::AgreementState;pub use semantic_objects::AuthoritativeRead;pub use semantic_objects::AuthoritativeReadKind;pub use semantic_objects::AuthoritativeReadLifecycle;pub use semantic_objects::CanonicalHandle;pub use semantic_objects::CanonicalHandleKind;pub use semantic_objects::FinalizationOutcome;pub use semantic_objects::FinalizationPath;pub use semantic_objects::FinalizationReadClass;pub use semantic_objects::FinalizationStage;pub use semantic_objects::MaterializationProof;pub use semantic_objects::ObservedRead;pub use semantic_objects::OperationInstance;pub use semantic_objects::OperationPhase;pub use semantic_objects::OperationVisibility;pub use semantic_objects::OutstandingEffect;pub use semantic_objects::OutstandingEffectStatus;pub use semantic_objects::PrestateBinding;pub use semantic_objects::ProgressContract;pub use semantic_objects::ProgressState;pub use semantic_objects::ProgressTransition;pub use semantic_objects::ProtocolMachineFinalization;pub use semantic_objects::ProtocolMachineSemanticObjects;pub use semantic_objects::PublicationEvent;pub use semantic_objects::PublicationObserverClass;pub use semantic_objects::PublicationStatus;pub use semantic_objects::Region;pub use semantic_objects::SemanticHandoff;pub use semantic_objects::TransformationObligation;pub use semantic_objects::SEMANTIC_OBJECTS_SCHEMA_VERSION;pub use serialization::canonical_effect_trace;pub use serialization::canonical_replay_fragment_v1;pub use serialization::canonical_semantic_audit_log;pub use serialization::canonical_trace_v1;pub use serialization::canonicalize_protocol_machine_semantic_objects;pub use serialization::semantic_audit_log_v1;pub use serialization::CanonicalReplayFragmentV1;pub use serialization::CanonicalTraceV1;pub use serialization::SemanticAuditRecord;pub use trace::normalize_trace;pub use trace::normalize_trace_v1;pub use trace::obs_session;pub use trace::strict_trace;pub use trace::with_tick;pub use trace::NormalizedTraceV1;pub use trace::TRACE_NORMALIZATION_SCHEMA_VERSION;pub use transfer_semantics::decode_transfer_request;pub use transfer_semantics::delegation_receipt;pub use transfer_semantics::delegation_scope_for_endpoint;pub use transfer_semantics::move_endpoint_bundle;pub use transfer_semantics::validate_delegation_coherence;pub use transfer_semantics::DelegationAuditRecord;pub use transfer_semantics::DelegationReceipt;pub use transfer_semantics::DelegationStatus;pub use transfer_semantics::TransferRequest;pub use verification::sign_value;pub use verification::verify_signed_value;pub use verification::AuthProof;pub use verification::AuthTree;pub use verification::Commitment;pub use verification::DefaultVerificationModel;pub use verification::Hash;pub use verification::HashTag;pub use verification::Nullifier;pub use verification::Signature;pub use verification::SigningKey;pub use verification::VerificationModel;pub use verification::VerifyingKey;
Modules§
- architecture
- Runtime architecture contract.
- bridge
- Cross-domain bridge traits for ProtocolMachine domain composition.
- buffer
- Bounded buffers with backpressure.
- capabilities
- Canonical protocol-critical capability taxonomy and boundary ledger.
- clock
- Deterministic simulation clock.
- commit_
common - Shared commit-phase helpers used by cooperative and threaded backends.
- communication_
replay - Communication replay modes and consumption state for deterministic and speculatively replayed session histories. Communication replay-consumption model and nullifier tracking.
- compiler
- Compile
LocalTypeRto bytecode. - composition
- Protocol composition API for running many protocols in one ProtocolMachine instance.
- coroutine
- Coroutine: lightweight execution unit within the ProtocolMachine.
- determinism
- Determinism profile configuration for ProtocolMachine execution.
- driver
- Runtime drivers.
- durable
- Typed durability artifacts for agreement WALs, evidence outcome caches, and recovery metadata.
- envelope_
diff - Envelope differential artifacts for cross-engine conformance.
- exec
- Instruction dispatcher split by semantic concern.
- faults
- Stable fault taxonomy and machine-readable mapping helpers.
- guard
- Guard-layer typed interface.
- identity
- Identity model for topology and capability assignment.
- instr
- Bytecode instruction set.
- instruction_
semantics - Shared instruction operand decoding helpers used by both ProtocolMachine executors.
- integration
- First-party integration harness utilities.
- intern
- String interning for hot runtime paths.
- kernel
- Deterministic protocol-machine kernel API.
- model
- Canonical protocol-machine model surface aligned with Lean
Runtime.ProtocolMachine.Model. - output_
condition - Output-condition commit gating primitives.
- owned
- Preferred owned-session helpers for host integration.
- persistence
- Persistence model for protocol-machine state deltas.
- refinement
- Concrete protocol-machine refinement slices.
- runtime
- Canonical runtime surface aligned with Lean
Runtime.ProtocolMachine.Runtime. - runtime_
contracts - Runtime admission and profile-gate contracts aligned with Lean surfaces.
- semantic_
objects - Canonical semantic objects exported by the protocol machine.
- semantics
- Canonical semantics surface aligned with Lean
Runtime.ProtocolMachine.Semantics. - serialization
- Canonical serialization helpers for deterministic replay/testing artifacts.
- trace
- Trace normalization utilities.
- transfer_
semantics - Shared transfer/delegation semantics used by cooperative and threaded ProtocolMachines.
- verification
- Verification model primitives for protocol-machine signatures and commitments.
Structs§
- Authority
Audit Record - Deterministic audit record for witness issuance or consumption.
- Cancellation
Witness - Witness proving a session transitioned to an explicit cancellation path.
- Closed
Session Summary - Archival summary for a closed session that has been reaped from live state.
- Cross
Lane Handoff - Cross-lane capability-transfer record.
- Edge
- Edge between two roles in a session (directed: sender → receiver).
- Effect
Exchange Record - Replay/export record for one effect request/outcome exchange.
- Effect
Failure - Structured failure at the host effect boundary.
- Effect
Interface Metadata - Runtime metadata for one effect interface operation.
- Effect
Outcome - One typed runtime effect outcome.
- Effect
Request - One typed runtime effect request.
- Effect
Responsibility Domain - Responsibility domain for reentrancy and footprint checks.
- Effect
Trace Entry - Effect-trace entry for replay and determinism checks.
- Effect
Trace Tape - Thread-safe effect-trace tape used by recording/replay handlers.
- Exec
Result - Structured result of one execution step.
- Nested
Protocol Machine Handler - Effect handler that dispatches to inner ProtocolMachines keyed by outer role name.
- Observability
Retention Config - Retention configuration for observability artifacts.
- Ownership
Capability - Capability proving the caller is the current owner for one session.
- Ownership
Receipt - Receipt for an in-progress ownership transfer.
- Program
Store - Immutable program storage with deterministic interning.
- Protocol
Machine - The choreographic ProtocolMachine.
- Protocol
Machine Config - ProtocolMachine configuration.
- Protocol
Machine Memory Usage - Approximate retained state for the live protocol-machine runtime.
- Protocol
Machine Retained Bytes - Estimated retained bytes for protocol-machine subsystems.
- Readiness
Witness - Witness proving a protocol-critical readiness check succeeded under the current owner capability.
- Recording
Effect Handler - A handler wrapper that records effect outcomes for replay.
- Replay
Effect Handler - A replay-mode handler that serves recorded effect outcomes in order.
- Resource
State - Lean-aligned resource state with commitments and nullifiers.
- Runtime
Upgrade Artifact - Canonical serialized artifact for one runtime-upgrade transition phase.
- Runtime
Upgrade Compatibility - Canonical compatibility contract for one specialized runtime upgrade.
- Sched
Step Debug - Debug metadata for the most recent scheduler-dispatched step.
- Scheduler
- Scheduler state.
- Session
Store - Store of all sessions managed by the ProtocolMachine.
- Session
Store Memory Usage - Approximate retained state for the session store.
- Session
Store Retained Bytes - Estimated retained bytes for session-store subsystems.
- Step
Pack - Generic execution pack carrying updated coroutine state plus step result.
- Timeout
Witness - Witness proving a topology timeout was issued for one site.
Enums§
- Authority
Artifact - Typed authority artifact emitted or consumed by the runtime.
- Authority
Audit Event - Lifecycle event for one authority artifact.
- Canonical
Publication Continuity - Canonical publication continuity policy required for a runtime upgrade.
- Corruption
Type - Corruption policy for topology perturbations.
- Effect
Admissibility - Admission policy for one effect operation.
- Effect
Agreement Use - Agreement-use discipline attached to one effect operation.
- Effect
Authority Class - Authority class attached to one effect operation.
- Effect
Composition Policy - Secondary child-effect aggregation policy attached below one parent agreement.
- Effect
Failure Kind - Typed failure kinds at the ProtocolMachine effect boundary.
- Effect
Handler Domain - Handler-domain classification for one effect operation.
- Effect
Outcome Status - Status for one typed effect outcome.
- Effect
Reentrancy Policy - Reentrancy policy for one effect operation.
- Effect
Region Scope - Region scope classification declared for one effect operation.
- Effect
Request Body - Typed request payload families.
- Effect
Response - Typed response payload families.
- Effect
Result - Typed outcome for one ProtocolMachine effect callback.
- Effect
Retry Shape - Retry shape attached to one effect operation.
- Effect
Semantic Class - Semantic class attached to one effect operation.
- Effect
Timeout Policy - Timeout contract attached to one effect operation.
- Effect
Totality - Totality contract for one effect operation.
- Effect
Trace Capture Mode - Effect-trace capture mode for runtime overhead control.
- Exec
Status - Execution status after one step/round.
- Flow
Policy - Information-flow policy used by epistemic
check. - Flow
Predicate - Serializable flow-policy predicate over known fact + destination.
- Monitor
Mode - Instruction monitor mode for pre-dispatch checks.
- ObsEvent
- Observable event emitted by the ProtocolMachine.
- Observability
Retention Mode - Retention policy for stored observability artifacts.
- Ownership
Error - Errors surfaced by the runtime ownership contract.
- Ownership
Scope - Current authority carried by a live ownership capability.
- Ownership
Terminal Reason - Terminal reason recorded when ownership fails closed.
- Payload
Validation Mode - Payload validation mode for runtime message hardening.
- Pending
Effect Treatment - Pending-effect treatment required for a specialized runtime upgrade.
- Priority
Policy - Priority policy family for serialization-safe prioritized scheduling.
- Protocol
Machine Error - Errors from ProtocolMachine operations.
- RunStatus
- Terminal status returned by bounded ProtocolMachine run APIs.
- Runtime
Tuning Profile - Typed runtime tuning profile for benchmark/runtime configuration harmonization.
- Runtime
Upgrade Execution Constraint - Execution-profile constraint required for a runtime upgrade.
- Sched
Exec Status - Debug metadata for the most recent scheduler-dispatched step.
- Sched
Policy - Scheduling policy.
- Session
Host Mutation - Host-routed session-local mutation guarded by ownership.
- Step
Event - One execution event emitted by a step.
- Step
Result - The ProtocolMachine execution result for a single step.
- Step
Update - Step outcome used by scheduler bookkeeping.
- Threaded
Round Semantics - Threaded scheduler round semantics mode.
- Topology
Perturbation - Topology perturbation event carried in effect traces.
- Transition
Artifact Phase - Canonical phase for a transition or runtime-upgrade artifact.
Functions§
- decode_
edge_ json - Decode an edge from JSON.
Type Aliases§
- Authority
Witness Id - Identifier for one issued authority witness.
- Fragment
Owner Id - Stable host/runtime owner identifier for one session capability.
- Handler
Id - Handler identifier for edge-bound runtime dispatch.
- Ownership
Claim Id - Identifier for one staged ownership operation.
- Ownership
Epoch - Ownership generation/epoch used to reject stale capabilities.
- Program
- Lean-aligned immutable program representation.
- Protocol
Machine State - Lean-aligned ProtocolMachine state alias.
- Sched
State - Lean-aligned scheduler state alias.
- Scheduler
Lane Id - Scheduler lane identifier.
- Session
Id - Session identifier. Each session gets a unique ID within the ProtocolMachine.