1pub mod runtime {
2 pub use crate::clock::Clock;
3 pub use crate::executor::{Reactor, TaskHandle};
4 pub use crate::futures::Interval;
5 pub use crate::rng::Rng;
6 pub use crate::runtime::{DeterministicControl, Runtime, RuntimeFuture, TaskFuture};
7}
8
9pub mod sim {
10 pub use crate::sim::{
11 AsyncFileSystem, DeserializeError, DispatchRegistry, LinkConfig, Network, NetworkClock,
12 NetworkDeliveryReport, PartitionId, ReproBundle, Rng, RouteOutcome, RoutedActorEvent,
13 SchedulerBench, TraceBuffer, TraceConfig, TraceEvent, TraceMetadata, Vfs, WriteFault,
14 dispatch_ready_actor_events,
15 };
16}
17
18pub mod artifacts {
19 pub use crate::artifacts::{
20 Config, DecisionTrace, DecisionTraceEntry, MetricsSnapshot, ReplayRecord, ReproBundle,
21 RunLimits, RunRecord, RunResult, TraceBuffer, TraceConfig, TraceEvent, TraceMetadata,
22 TraceSummary, legacy_run_result_from_record, run_record_from_legacy,
23 };
24}
25
26pub mod outcome {
27 pub use crate::outcome::{
28 Config, InvariantFailure, InvariantViolation, Outcome, RunConfig, RunOutcome, RunResult,
29 };
30}
31
32#[deprecated(note = "use strontium_core::api::{runtime, sim, artifacts} instead")]
36pub mod core {
37 pub use super::artifacts::{ReproBundle, TraceBuffer, TraceConfig, TraceEvent, TraceMetadata};
38 pub use super::runtime::{Clock, Interval, Reactor, Rng, TaskHandle};
39 pub use super::sim::{
40 AsyncFileSystem, DeserializeError, DispatchRegistry, LinkConfig, Network, NetworkClock,
41 NetworkDeliveryReport, PartitionId, RouteOutcome, RoutedActorEvent, SchedulerBench, Vfs,
42 WriteFault, dispatch_ready_actor_events,
43 };
44}
45
46#[deprecated(note = "use strontium_assurance::api instead")]
50pub mod assurance {
51 pub use crate::assurance::{
52 ActorLifecycleRecord, ActorMessageDisposition, ActorMessageRecord, AlloyContractMetadata,
53 AssertionResult, AssuranceCertificationStarterPackArtifact,
54 AssuranceCertificationStarterPackBuilder, CacheEventRecord, ChecklistBinding,
55 ContextServiceEvidence, ContextServiceEvidenceProducer, EvidenceChecklistItem,
56 EvidenceCollectionAudience, EvidenceCollectionPackage, EvidenceCollectionScenarioRecord,
57 EvidenceCollectionWorkflowArtifact, EvidenceCollectionWorkflowBuilder, EvidenceLevel,
58 FailureClassification, FlagshipChecklistAttachment, FlagshipReleaseEvidenceInput,
59 FlagshipReleaseEvidencePacket, FlagshipReleaseEvidencePacketBuilder,
60 FlagshipReleaseScenarioEvidence, IntegratedHarnessEvidenceArtifact,
61 IntegratedHarnessEvidenceBuilder, IntegratedHarnessEvidenceInput,
62 IntegratedHarnessScenarioRecord, IridiumContractReport, IridiumIntegratedHarnessReport,
63 IridiumRestartRequeryEvidenceV1, IridiumServiceCandidateReport,
64 IridiumServiceLifecycleReport, MetricSnapshot, OwnershipLane, PlexusValidateReport,
65 ProducerEvidence, PublishedScenarioPackEntry, PublishedScenarioPackPreview,
66 PublishedScenarioPackPreviewBuilder, ReleaseEvidenceLevel, ReleaseGateArtifact,
67 ReleaseGateBuilder, ReleaseGateDecision, ReleaseGateInput, ReleaseGateScenarioRecord,
68 ReplayBundle, ReplayBundleBuilder, RequiredArtifact, RhodiumCacheEvaluatorReport,
69 RhodiumCachePathReport, RhodiumCompiledPlanCacheReport, RhodiumQuicFaultReport,
70 RhodiumServiceCandidateArtifact, RhodiumServiceStatusReport, RichProducerEvidence,
71 ScenarioClass, ScenarioExecution, ScenarioManifest, ScenarioPack, ScenarioPackPreview,
72 ScenarioPackPreviewBuilder, ScenarioPackPreviewEntry, ScenarioPreconditions,
73 ScenarioResult, ServiceReleaseEvidenceRequirements,
74 ServiceReleaseEvidenceRequirementsBuilder, ServiceReleaseEvidenceScenario,
75 ShippedScenarioPackArtifact, ShippedScenarioPackBuilder, ShippedScenarioPackEntry,
76 StarterPackDocument, StorageOperationRecord, SupportingArtifact, TimelineEvent,
77 TopologyPacketReference, TraceSummary, ValidationError,
78 };
79}
80
81#[deprecated(note = "use strontium_core::api::outcome instead")]
85pub mod run {
86 pub use super::outcome::{Config, InvariantViolation, Outcome, RunResult};
87}
88
89#[cfg(test)]
90#[allow(deprecated)]
91mod tests {
92 use super::{artifacts, assurance, core, outcome, run, runtime, sim};
93
94 #[test]
95 fn core_facade_exposes_cleaned_names() {
96 let _clock = core::Clock::new();
97 let _reactor = core::Reactor::new(7);
98 let _interval: Option<core::Interval> = None;
99 let _task_handle: Option<core::TaskHandle> = None;
100 let _network: core::Network<u64, u64> = core::Network::new(11);
101 let _vfs = core::Vfs::new();
102 let _rng = core::Rng::new(13);
103 let _bench = core::SchedulerBench::new();
104 let _network_clock = core::NetworkClock::new();
105 let _delivery_report = core::NetworkDeliveryReport::default();
106 let _deserialize_error = core::DeserializeError::InvalidPayload;
107 let _route_outcome = core::RouteOutcome::Delivered;
108 }
109
110 #[test]
111 fn run_facade_exposes_cleaned_names() {
112 let config = run::Config::default();
113 let outcome = run::Outcome::Ok;
114
115 let _result = run::RunResult {
116 seed: 0,
117 virtual_time_elapsed: config.max_virtual_time,
118 steps_executed: 0,
119 outcome,
120 trace: core::TraceBuffer::new(core::TraceConfig::default()),
121 decision_log: Vec::new(),
122 repro_bundle: None,
123 };
124 }
125
126 #[test]
127 fn assurance_facade_exposes_sprint_3_types() {
128 let _class = assurance::ScenarioClass::RestartRecovery;
129 let _level = assurance::EvidenceLevel::ReleaseBlocking;
130 let _result = assurance::ScenarioResult::Pass;
131 let _pack = assurance::ScenarioPack {
132 manifests: Vec::new(),
133 };
134 let _builder = assurance::ReplayBundleBuilder::new(
135 "artifact-1",
136 "strontium",
137 "deadbeef",
138 "2026-03-13T00:00:00Z",
139 "2026-03-13T00:00:01Z",
140 );
141 }
142
143 #[test]
144 fn runtime_facade_exposes_layered_contracts() {
145 let reactor = runtime::Reactor::new(19);
146 let _clock = runtime::Clock::new();
147 let _rng = runtime::Rng::new(23);
148 let _interval = runtime::Runtime::create_interval(&reactor, std::time::Duration::ZERO);
149 let _seed = runtime::DeterministicControl::seed(&reactor);
150 let _task_handle: Option<runtime::TaskHandle> = None;
151 }
152
153 #[test]
154 fn sim_facade_exposes_simulation_services() {
155 let _bench = sim::SchedulerBench::new();
156 let _vfs = sim::Vfs::new();
157 let _network = sim::Network::<u64, u64>::new(29);
158 let _rng = sim::Rng::new(31);
159 let _trace = sim::TraceBuffer::new(sim::TraceConfig::default());
160 let _network_clock = sim::NetworkClock::new();
161 let _delivery_report = sim::NetworkDeliveryReport::default();
162 let _deserialize_error = sim::DeserializeError::InvalidPayload;
163 let _route_outcome = sim::RouteOutcome::Delivered;
164 }
165
166 #[test]
167 fn artifacts_facade_exposes_neutral_aliases() {
168 let limits = artifacts::RunLimits::default();
169 let _config = artifacts::Config::default();
170 let _record = artifacts::RunRecord {
171 seed: 0,
172 virtual_time_elapsed: limits.max_virtual_time,
173 steps_executed: 0,
174 outcome: run::Outcome::Ok,
175 trace: artifacts::TraceBuffer::new(artifacts::TraceConfig::default()),
176 decision_log: Vec::new(),
177 repro_bundle: None,
178 };
179 let _replay: Option<artifacts::ReplayRecord> = None;
180 let _decision_trace: artifacts::DecisionTrace = vec![0];
181 let _decision: artifacts::DecisionTraceEntry = 0;
182 let _summary: Option<artifacts::TraceSummary> = None;
183 let _metrics: Option<artifacts::MetricsSnapshot> = None;
184 let _round_trip = artifacts::legacy_run_result_from_record(
185 artifacts::run_record_from_legacy(run::RunResult {
186 seed: 1,
187 virtual_time_elapsed: limits.max_virtual_time,
188 steps_executed: 2,
189 outcome: run::Outcome::Ok,
190 trace: artifacts::TraceBuffer::new(artifacts::TraceConfig::default()),
191 decision_log: vec![1, 2],
192 repro_bundle: None,
193 }),
194 );
195 }
196
197 #[test]
198 fn outcome_facade_exposes_neutral_result_names() {
199 let config = outcome::Config::default();
200 let _run_config = outcome::RunConfig::default();
201 let _outcome = outcome::RunOutcome::Ok;
202 let _legacy_outcome = outcome::Outcome::Ok;
203 let _run_result = outcome::RunResult {
204 seed: 0,
205 virtual_time_elapsed: config.max_virtual_time,
206 steps_executed: 0,
207 outcome: outcome::RunOutcome::Ok,
208 trace: artifacts::TraceBuffer::new(artifacts::TraceConfig::default()),
209 decision_log: Vec::new(),
210 repro_bundle: None,
211 };
212 let _failure = outcome::InvariantFailure::DuplicatePath {
213 engine_idx: 0,
214 path: "svc/a".to_string(),
215 };
216 }
217}