Skip to main content

behavior_contracts/
lib.rs

1//! behavior-contracts — language-neutral IR runtime COMMON core (Rust).
2//!
3//! Ports the same thin COMMON primitives as the TS/Python references. No backend,
4//! key-resolution, retry-tuning, or DSL-specific concepts — those live in consumers.
5//!
6//! Public COMMON primitives (runtime-boundary.md §2.1):
7//!   - [`validate_envelope`] — spec-version fail-closed check
8//!   - [`evaluate_expression`] — expression-ir.md normative evaluation
9//!   - [`render_template`] — `{param}` strict rendering
10//!   - [`run_plan`] — execution-plan skeleton (stage / Skip propagation / Policy Kind)
11//!   - [`canonical_value`] / [`canonical_json`] / [`py_float_repr`] — canonical serialization
12//!   - [`assert_portable`] — Portability Guard
13//!   - [`decode_value`] / [`deep_equals`] — conformance runner adapter COMMON part
14
15pub mod canonical;
16pub mod codec;
17pub mod envelope;
18pub mod expr;
19pub mod guard;
20pub mod plan;
21pub mod template;
22pub mod value;
23
24/// Supported spec versions (IR/vector versions; distinct from the crate semver).
25pub struct SpecVersions;
26impl SpecVersions {
27    pub const EXPRESSION: i64 = 1;
28    pub const TEMPLATE: i64 = 1;
29    pub const PLAN: i64 = 1;
30    pub const CANONICAL: i64 = 1;
31}
32
33/// Default graphddb-shaped supported envelope version (`"<major>.<minor>"`).
34pub const ENVELOPE_SPEC_VERSION: &str = "1.1";
35
36// ── re-exports (public surface) ──────────────────────────────────────────────
37pub use value::{deep_equals, Value};
38
39pub use expr::{cmp_code_points, evaluate as evaluate_expression, ExprFailure, ExprFailureCode};
40
41pub use template::{render_template, resolve_partial, TemplateFailure, TemplateFailureCode};
42
43pub use plan::{
44    run_plan, ExecOutcome, ExecutionPlanSpec, OpSpec, PlanFailure, PlanFailureCode, PolicyKind,
45    RelationKind, RunResult,
46};
47
48pub use canonical::{
49    canonical_json, canonical_value, py_float_repr, CanonicalFailure, CanonicalFailureCode,
50};
51
52pub use envelope::{validate_envelope, EnvelopeFailure, EnvelopeFailureCode};
53
54pub use guard::{assert_portable, PortabilityError};
55
56pub use codec::{decode_value, encode_value, DecodeError};