etdl-core
The runtime library ETDL-generated code depends on — and the one authoritative implementation of ETDL runtime semantics every other language target binds to (via etdl-runtime-ffi) rather than re-implementing.
Components
| Component | Purpose |
|---|---|
BranchMonitor |
Records taken branches and operation failures per node, against build-time-resolved probabilities; feeds SLA anomaly detection |
RetryPolicy / BackoffStrategy |
Async retry with exponential or fixed backoff, a total attempt budget, and a per-attempt timeout |
SlaTracker |
Rolling-window anomaly detection (ETDL_SLA_WINDOW, ETDL_SLA_THRESHOLD env vars) — compares observed vs. declared probabilities |
ChaosController |
Declared, seeded, node-scoped failure injection, guarded off in production via ETDL_ENV |
condition::{matches, contains} |
ECEL matches (RE2-compatible regex via the regex crate) / in (set membership) — the runtime half of ECEL condition evaluation |
Publisher |
The consequence: send boundary generated code calls into — implement it against your real broker/client |
telemetry::inject_traceparent |
W3C trace context propagation |
observation |
Reliability observation types + sinks (JSON Lines, OTel-shaped, in-memory capturing) |
Why this crate, specifically, is the one every target binds to
ETDL compiles event trees (IEC 62502) and fault trees (IEC 61025) into code with build-time-resolved probabilities baked in as constants — not runtime guesses. etdl-core is where the behavior around those constants lives: retry sequencing, branch/failure accounting, SLA comparison, chaos injection. Generated Rust code links this crate directly; every other target (Java, Python, Go, .NET) reaches the exact same implementation through etdl-runtime-ffi's C ABI, so a matches regex or a retry backoff delay behaves byte-for-byte identically no matter which language evaluates it.
Example
use ;
let mut monitor = new;
monitor.record_branch;
let retry = RetryPolicy ;
Full architecture: docs/architecture.md and docs/architecture/targets.md (the FFI boundary story).
License
Apache-2.0