Skip to main content

bijux_dag_core/
lib.rs

1//! Deterministic graph authoring, validation, and planning for Bijux DAG.
2//!
3//! Prefer [`stable`] when browsing the long-lived graph surface, [`prelude`]
4//! for parse, validate, and plan workflows, and crate-root imports only when
5//! you already know the exact item you need. Broad compatibility re-exports
6//! remain callable for focused imports, but they are intentionally hidden from
7//! the default docs surface. The `experimental-public-api` feature enables
8//! research and compatibility contracts that are intentionally excluded from
9//! the default docs surface.
10//!
11#![allow(
12    clippy::cast_possible_truncation,
13    clippy::missing_errors_doc,
14    clippy::missing_panics_doc,
15    clippy::must_use_candidate,
16    clippy::pedantic,
17    clippy::return_self_not_must_use,
18    clippy::uninlined_format_args,
19    clippy::unreadable_literal
20)]
21
22#[cfg(test)]
23use criterion as _;
24#[cfg(test)]
25use serde_yaml as _;
26#[cfg(test)]
27use tempfile as _;
28
29#[cfg(feature = "experimental-public-api")]
30#[path = "contracts/authoring_contracts.rs"]
31mod authoring_contracts;
32#[doc(hidden)]
33#[path = "build/builder.rs"]
34pub mod builder;
35#[doc(hidden)]
36#[path = "graph/canonical.rs"]
37pub mod canonical;
38#[doc(hidden)]
39#[path = "build/compile.rs"]
40pub mod compile;
41#[doc(hidden)]
42#[path = "graph/composition.rs"]
43pub mod composition;
44#[doc(hidden)]
45#[path = "build/contract.rs"]
46pub mod contract;
47#[doc(hidden)]
48#[path = "graph/dynamic.rs"]
49mod dynamic;
50#[doc(hidden)]
51#[path = "graph/edge.rs"]
52pub mod edge;
53#[doc(hidden)]
54#[path = "analysis/effects.rs"]
55pub mod effects;
56#[doc(hidden)]
57#[path = "contracts/error.rs"]
58pub mod error;
59#[cfg(feature = "experimental-public-api")]
60#[path = "contracts/execution_contracts.rs"]
61mod execution_contracts;
62#[doc(hidden)]
63#[path = "graph/expansion.rs"]
64pub mod expansion;
65#[doc(hidden)]
66#[path = "analysis/fingerprint.rs"]
67pub mod fingerprint;
68#[doc(hidden)]
69#[path = "graph/graph.rs"]
70pub mod graph;
71#[doc(hidden)]
72#[path = "graph/input.rs"]
73pub mod input;
74#[doc(hidden)]
75#[path = "graph/meta.rs"]
76pub mod meta;
77#[doc(hidden)]
78#[path = "graph/model.rs"]
79pub mod model;
80#[doc(hidden)]
81#[path = "graph/node.rs"]
82pub mod node;
83#[doc(hidden)]
84#[path = "pipeline/parse.rs"]
85pub mod parse;
86#[cfg(feature = "experimental-public-api")]
87#[path = "contracts/performance_contracts.rs"]
88mod performance_contracts;
89#[doc(hidden)]
90#[path = "planner/planner.rs"]
91pub mod planner;
92#[cfg(feature = "experimental-public-api")]
93#[path = "contracts/planner_contracts.rs"]
94mod planner_contracts;
95#[doc(hidden)]
96#[path = "pipeline/resolve.rs"]
97pub mod resolve;
98#[cfg(feature = "experimental-public-api")]
99#[path = "contracts/resource_contracts.rs"]
100mod resource_contracts;
101#[doc(hidden)]
102#[path = "graph/resources.rs"]
103pub mod resources;
104#[cfg(feature = "experimental-public-api")]
105#[path = "contracts/scientific_integration_contracts.rs"]
106mod scientific_integration_contracts;
107#[doc(hidden)]
108#[path = "analysis/semantics.rs"]
109pub mod semantics;
110#[cfg(feature = "experimental-public-api")]
111#[path = "contracts/semantics_contracts.rs"]
112mod semantics_contracts;
113#[doc(hidden)]
114#[path = "graph/topology.rs"]
115pub mod topology;
116#[doc(hidden)]
117#[path = "analysis/trigger_rules.rs"]
118pub mod trigger_rules;
119#[doc(hidden)]
120#[path = "pipeline/validate.rs"]
121pub mod validate;
122
123#[doc(hidden)]
124pub use builder::{
125    dry_run_preview, lint_graph, simulate_graph, DagBuilder, DagDryRunPreview, DagLintFinding,
126    DagUnitHarness, NodeBuilder,
127};
128#[doc(hidden)]
129pub use canonical::{canonical_json, canonicalize_graph};
130#[doc(hidden)]
131pub use compile::{
132    compile_graph, compile_graph_contract, compile_graph_strict, compile_graph_with_defaults,
133    negotiate_spec_version, CompatibilityDecision, DagCompilePlanHints, DagCompileResult,
134};
135#[doc(hidden)]
136pub use composition::{compose_graphs, GraphCompositionError};
137#[doc(hidden)]
138pub use contract::{DagSnapshot, GraphContract, GraphExecutionPolicy};
139#[doc(hidden)]
140pub use dynamic::{
141    apply_dynamic_expansion, generated_node_id, parse_dynamic_expansion_document,
142    AppliedDynamicExpansion, DynamicExpansionDocument, DynamicExpansionRecord, DynamicSpec,
143    DYNAMIC_EXPANSION_SCHEMA_VERSION,
144};
145#[doc(hidden)]
146pub use edge::{EdgeDependencyKind, TypedEdge};
147#[doc(hidden)]
148pub use error::GraphError;
149#[doc(hidden)]
150pub use input::{
151    materialize_graph_input_value, validate_graph_input_value, GraphInputKind, GraphInputSpec,
152    GraphInputViolation,
153};
154#[doc(hidden)]
155pub use model::{
156    cache_behavior_enabled, cache_behavior_is_default, default_media_type_for_kind,
157    edge_kind_is_default, env_allowlist_pattern_is_exact, is_known_path_variable,
158    output_kind_is_default, output_required_default, output_required_is_default,
159    semantic_kind_is_default, trigger_rule_is_default, BranchSpec, CacheBehavior, ContainerSpec,
160    Edge, EdgeKind, Effect, FileOutput, Graph, GraphFingerprintExplain, GraphId, GraphMeta, Node,
161    NodeKind, NodeOutputRef, OutputKind, OutputSpec, ParamValue, PathVarBinding, PathVarRef,
162    PortRef, RefSpec, ResolvedGraph, Resources, RetryPolicy, SemanticNodeKind, Severity,
163    SubgraphDefinition, SubgraphInstance, TriggerRule, ValidationDiagnostic, PATH_VARIABLE_NAMES,
164};
165#[doc(hidden)]
166pub use node::{
167    derive_interface, node_input_bindings, node_io_contract, NodeEnvBinding, NodeInputBinding,
168    NodeInputSource, NodeIoContract, NodeOutputContract, NodeParamBinding, ParamBindingSource,
169};
170#[doc(hidden)]
171pub use parse::parse_graph_strict;
172#[doc(hidden)]
173pub use planner::{
174    can_runtime_execute_plan_without_raw_graph, graph_lowering_boundary_note,
175    lower_graph_to_execution_plan, map_planner_error_to_graph_error, node_kind_supported,
176    planner_alignment_required_doc, planner_alignment_required_schema,
177    planner_alignment_required_test, planner_diagnostics_from_error, planner_identity_for_graph,
178    BranchPathAnalysis, ExecutionPlan, PlanOptions, PlannedBranchContract, PlannedEdge,
179    PlannedNode, PlannerDiagnostic, PlannerError, PlannerSeverity, PLANNER_CONTRACT_VERSION,
180};
181#[doc(hidden)]
182pub use resolve::resolve_graph;
183#[doc(hidden)]
184pub use resources::GraphDefaults;
185#[doc(hidden)]
186pub use topology::deterministic_topology_order;
187#[doc(hidden)]
188pub use trigger_rules::{evaluate_trigger_rule, TriggerRuleEvaluation, UpstreamTerminalOutcome};
189#[doc(hidden)]
190pub use validate::{
191    validate_graph, validate_schema, validate_semantics, validate_topology,
192    validation_rule_registry, ValidationDomain,
193};
194pub const SPEC_VERSION: &str = "bijux-dag/v0.1";
195pub const CANONICALIZATION_CONTRACT_VERSION: &str = "bijux-dag-canonical/v1";
196
197/// Explicit long-lived graph authoring, validation, and planning surface.
198pub mod stable {
199    pub use crate::{
200        canonical_json, canonicalize_graph, compile_graph, compile_graph_contract,
201        compile_graph_strict, compile_graph_with_defaults, compose_graphs,
202        lower_graph_to_execution_plan, negotiate_spec_version, parse_graph_strict,
203        planner_identity_for_graph, validate_graph, CompatibilityDecision, DagCompilePlanHints,
204        DagCompileResult, DagSnapshot, ExecutionPlan, Graph, GraphCompositionError, GraphContract,
205        GraphError, GraphExecutionPolicy, PlanOptions, PlannedEdge, PlannedNode, PlannerDiagnostic,
206        PlannerError, PlannerSeverity, TriggerRuleEvaluation, UpstreamTerminalOutcome,
207        SPEC_VERSION,
208    };
209}
210
211/// Common imports for parse, validate, canonicalize, and plan workflows.
212pub mod prelude {
213    pub use crate::stable::{
214        canonical_json, canonicalize_graph, compile_graph, compile_graph_contract,
215        compile_graph_strict, compile_graph_with_defaults, compose_graphs, negotiate_spec_version,
216        validate_graph, CompatibilityDecision, DagCompilePlanHints, DagCompileResult, DagSnapshot,
217        ExecutionPlan, Graph, GraphCompositionError, GraphContract, GraphError,
218        GraphExecutionPolicy, PlanOptions, PlannedEdge, PlannedNode, PlannerDiagnostic,
219        PlannerError, PlannerSeverity, SPEC_VERSION,
220    };
221    pub use crate::{
222        lower_graph_to_execution_plan, parse_graph_strict, planner_identity_for_graph,
223    };
224}
225
226/// Opt-in research and compatibility contracts that are outside the stable lane.
227#[cfg(feature = "experimental-public-api")]
228pub mod experimental {
229    pub mod authoring_contracts {
230        pub use crate::authoring_contracts::*;
231    }
232    pub mod execution_contracts {
233        pub use crate::execution_contracts::*;
234    }
235    pub mod planner_contracts {
236        pub use crate::performance_contracts::*;
237        pub use crate::planner_contracts::*;
238    }
239    pub mod resource_capabilities {
240        pub use crate::resource_contracts::*;
241    }
242    pub mod scientific_integration {
243        pub use crate::scientific_integration_contracts::*;
244    }
245    pub mod semantic_contracts {
246        pub use crate::semantics_contracts::*;
247    }
248    pub use crate::semantics::{
249        classify_compatibility, complexity_score, enforce_late_binding_immutability, explain_graph,
250        migration_patch, normalize_semantic_graph, semantic_diff, static_analysis,
251        BranchDecisionNode, CompatibilityClassification, ConditionalExecution,
252        DynamicEdgeExpansionRule, GraphComplexityScore, GraphCompositionContract,
253        GraphExplainabilityModel, GraphMigrationPatch, GraphTemplate, JoinSemantics,
254        LateBindingRule, MapFanOutSemantics, NormalizedSemanticGraph, ParameterBindingSemantics,
255        PartitionSemantics, ReduceFanInSemantics, SemanticDiffClass, SemanticDiffReport,
256        StaticAnalysisReport, SubgraphEmbedding, WindowingSemantics,
257    };
258}