Skip to main content

haz_dag/
lib.rs

1//! Task DAG construction, validation, and traversal for `haz`.
2//!
3//! This crate owns the directed-task-graph layer that sits above
4//! `haz-domain`'s value objects. It consumes a fully loaded
5//! workspace (a `haz_domain::workspace::Workspace` containing
6//! validated projects and tasks) and produces a
7//! [`graph::TaskGraph`]: the nodes are
8//! [`haz_domain::task_id::TaskId`]s, the edges are typed by
9//! [`edge::EdgeKind`].
10//!
11//! # Module map
12//!
13//! - [`edge`]: directed edges tagged by kind
14//!   ([`edge::Edge`], [`edge::EdgeKind`]).
15//! - [`graph`]: the [`graph::TaskGraph`] aggregate.
16//! - [`construction`]: build a validated [`graph::TaskGraph`]
17//!   from a loaded workspace
18//!   ([`construction::build_task_graph`],
19//!   [`construction::BuildError`],
20//!   [`construction::BuildErrors`]).
21//! - [`effective`]: overlay merging into a per-project effective
22//!   task set ([`effective::compute_effective_tasks`],
23//!   [`effective::EffectiveTasksByProject`],
24//!   [`effective::OverlayMergeError`],
25//!   [`effective::OverlayMergeErrors`]).
26//! - [`producer`]: producer-matching edges from outputs/inputs
27//!   intersection ([`producer::compute_producer_edges`]).
28//! - [`cycles`]: cycle detection over the union edge set
29//!   ([`cycles::detect_cycles`]).
30//! - [`outputs`]: literal-output uniqueness across the workspace
31//!   ([`outputs::detect_literal_output_collisions`],
32//!   [`outputs::LiteralOutputCollision`]).
33//! - [`traversal`]: hard-edge predecessor / successor closures over
34//!   a [`graph::TaskGraph`] for relational query evaluation
35//!   ([`traversal::direct_predecessors`],
36//!   [`traversal::direct_successors`],
37//!   [`traversal::transitive_predecessors`],
38//!   [`traversal::transitive_successors`]).
39
40#![deny(missing_docs)]
41
42pub mod construction;
43pub mod cycles;
44pub mod edge;
45pub mod effective;
46pub mod graph;
47pub mod outputs;
48pub mod producer;
49pub mod traversal;