Skip to main content

trellis_core/
lib.rs

1//! Core graph skeleton for Trellis.
2//!
3//! This crate currently defines typed identities, graph metadata, scope
4//! metadata, declared dependencies, deterministic inspection, input
5//! transactions, pure derived node recomputation, collection diffs, and
6//! data-only resource plans with recursive scope teardown and materialized
7//! output frames. Transaction results include deterministic phase traces, and
8//! failures expose typed categories.
9//!
10//! # API stability
11//!
12//! Trellis is pre-1.0. Core semantics are intended to be more stable than item
13//! names and exact signatures: resource plans are data, graph mutation is
14//! transactional, dependencies are explicit, scopes own lifecycle, outputs are
15//! revisioned, and incremental behavior must remain checkable against full
16//! recompute.
17
18#![forbid(unsafe_code)]
19#![deny(missing_docs)]
20
21mod audit;
22mod audit_types;
23mod collection;
24mod collection_build;
25mod collection_diff;
26mod collection_recompute;
27mod debug;
28mod dependency;
29mod derive;
30mod error;
31mod graph;
32mod graph_support;
33mod host_status;
34mod ids;
35mod input;
36mod model;
37mod node;
38mod oracle;
39mod output;
40mod output_build;
41mod output_reconcile;
42mod read;
43mod resource;
44mod resource_build;
45mod resource_reconcile;
46mod scope;
47mod scope_lifecycle;
48mod trace;
49mod transaction;
50mod transaction_build;
51mod transaction_trace_build;
52mod transaction_types;
53
54pub(crate) use audit_types::AuditState;
55pub use audit_types::{
56    NodeChangeExplanation, OutputFrameExplanation, ResourceCommandCause,
57    ResourceCommandExplanation, ScopeResourceInventory,
58};
59pub use collection::CollectionContext;
60pub use collection_diff::{Added, MapDiff, Removed, SetDiff, Unchanged, Updated};
61pub use dependency::DependencyList;
62pub use derive::{DeriveContext, DeriveError};
63pub use error::{
64    ErrorAuditEvent, ErrorCategory, ErrorTarget, GraphError, GraphResult, OutputError, PlanError,
65};
66pub use graph::Graph;
67pub use host_status::{HostResourceOutcome, HostResourceStatus};
68pub use ids::{NodeId, OutputKey, Revision, ScopeId, TransactionId};
69pub use node::{CollectionNode, DerivedNode, InputNode, NodeHandle, NodeKind, NodeMeta};
70pub use oracle::FullRecomputeCheck;
71pub use output::{
72    ClearReason, MaterializedOutput, OutputContext, OutputFrame, OutputFrameKind, OutputMeta,
73    OutputOptions, RebaselineReason,
74};
75pub use resource::{PlanContext, ResourceCommand, ResourceKey, ResourcePlan};
76pub use scope::ScopeMeta;
77pub use trace::{
78    OutputFrameKindTrace, OutputFrameTrace, ResourceCommandKind, ResourceCommandTrace,
79    ResourceTransitionPolicy, TraceMismatch, TransactionTrace, assert_transaction_traces_match,
80};
81pub use transaction::Transaction;
82pub use transaction_types::{
83    AuditEntry, AuditEvent, CollectionDiffKind, CollectionDiffTrace, InvariantResultTrace,
84    ScopeLifecycleKind, ScopeLifecycleTrace, StagedInputChange, StagedInputOutcome,
85    TransactionOptions, TransactionPhase, TransactionResult,
86};
87
88/// Deterministic model-test helpers for oracle and replay checks.
89pub mod testing {
90    pub use crate::model::{ModelGenerator, ModelScript, ModelStep, ModelTopology};
91}