1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//! Transport-agnostic Aion workflow engine with durability, replay, timers, and supervision.
//!
//! The engine embeds beamr, loads `.aion` packages, owns workflow lifecycle and
//! process residency, records and replays durable history, and exposes seams for
//! activities, events, signals, queries, and server transports.
//!
//! # Example
//!
//! ```no_run
//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
//! use std::sync::Arc;
//!
//! use aion::EngineBuilder;
//! use aion_store::{EventStore, InMemoryStore};
//!
//! let store: Arc<dyn EventStore> = Arc::new(InMemoryStore::default());
//! let engine = EngineBuilder::new()
//! .store_arc(store)
//! .in_memory_visibility()
//! .build()
//! .await?;
//! # let _ = engine;
//! # Ok(())
//! # }
//! ```
//!
//! # Cargo features
//!
//! - `beamr_query_reentry_fixed` (off by default): compiles the
//! batch-orchestrator example e2e tests (`tests/example_query_reentry.rs`)
//! that drive live queries through the Gleam SDK's query pump while a
//! parent is parked in `child.await`. The engine-side query protocol is
//! fully functional, but the example's child-result decode path hit
//! beamr 0.4.9 VM gaps in `gleam_json`/`gleam_stdlib`; enable the feature
//! once the upstream beamr fixes land and the pin is bumped.
//!
//! NOTE: the crate is now pinned to beamr 0.6.4. The gap this gate guards
//! against was identified on 0.4.9 and may have been fixed upstream, so the
//! gate needs re-validation against 0.6.4 and may now be stale.
/// Activity dispatch bridge and error propagation helpers.
/// Child-workflow spawn support.
/// Durable command recording, replay, and recovery support.
/// Engine builder, runtime APIs, and delegated seams.
/// Handle type exposed by embedded engine seams.
/// Engine and routing error types.
/// Workflow lifecycle start, transition, visibility, and termination helpers.
/// `.aion` package loading into runtime modules.
/// Live event publication: publish-after-commit store wrapper and publisher.
/// Query dispatch services and mailbox support.
/// Active workflow registry and handle residency tracking.
/// BEAM runtime configuration, handles, NIFs, and workflow process support.
/// Schedule evaluation and cron parsing support.
/// Signal routing and resume handoff support.
/// Supervision tree models for engines, workflow types, and workflow instances.
/// Thread-scoped tracing capture shared by the crate's operator-visibility
/// proofs.
pub
/// Fault-injecting stores shared by the crate's durable-refusal proofs — not
/// all of their consumers are retry paths, and the module's own doc says why.
pub
/// Timer creation, recovery, and wake-up services.
/// Workloop engine services: cadence dead-man, tolerance sweep, iteration
/// boundary, hatch (workloop design brief, Leg 2).
pub use ;
pub use ActiveWorkflowRecoverySeamImpl;
pub use ;
pub use EngineHandle;
// Both appear in the public signature of `EngineError` — `ContentHash` in the
// `version` field of `StartInputRefused`, `SignalRefused` and
// `NoQueueDeclaration`, and `ContractIdentityError` as the `source` of
// `ContractIdentity` — so a consumer of this crate cannot construct,
// destructure, or exhaustively match those variants without them. Re-exported
// here rather than leaving every downstream to take its own `aion-package`
// dependency to reach types this crate's own API already hands them.
//
// Not speculative surface: `aion-client` declares no `aion-package` dependency
// at all and its `transport::embedded` error-mapping tests construct
// `aion::ContentHash` and `aion::ContractIdentityError` directly. Without these
// two lines that crate cannot build the very `EngineError` values it exists to
// translate — the hole is older than this change, and this is where it surfaced.
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;