1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
Appellation: shepherd-render <library>
Created At: 2026.08.12:16:20:00
Contrib: @FL03
*/
//! # shepherd-render
//!
//! Template resolution, deterministic rendering, and artifact provenance.
//!
//! ## Why this is a crate and not a module
//!
//! Rendering is the one place shepherd emits bytes that another tool later
//! diffs. Its manifest pins `template_sha256`, `vars_sha256` and
//! `output_sha256`, and the tests assert all three reproduce byte-identically.
//! Holding that in its own crate lets
//! the property be tested without a database, a config loader, or a terminal --
//! and keeps a template engine out of [`shepherd_core`].
//!
//! ## The contract this crate owes
//!
//! Rendering is a pure function of (template bytes, variables). Anything that
//! varies per run -- a clock, a path, an environment variable, iteration order
//! over a hash map -- is a defect, because it makes the manifest hashes
//! unreproducible and the oracle unfalsifiable.
compile_error!
extern crate alloc;
pub use shepherd_core as core;
// modules (public)
// `filters` depends on `serde_json` (this crate's optional `json` feature)
// for its recursively-sorted `Map` -- see `crate::filters`' module docs.
// `manifest` depends on `std` (filesystem reads) and `json`
// (`serde_json::Value`, canonical vars serialization) -- see
// `crate::manifest`'s module docs.
// re-exports
pub use ;
// prelude