facett-buildthing/Cargo.toml
[package]
name = "facett-buildthing"
description = "facett — the BUILD-THING facet: draw a repo's declared build space (nornir-build-thing's BuildVariantSet) as live egui option widgets straight from the DECLARATION DATA + validate(), and press Build to run the dep-light `assemble()` seam and surface the returned Assembled receipt (output kind + build-info lineage). Thin egui shell over the dep-light leaf — egui lives ONLY here, never in nornir-build-thing."
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
[features]
default = []
# L4: functional-status emitter passthrough (see facett-core). No-op in release.
testmatrix = ["facett-core/testmatrix"]
[dependencies]
# The Facet/Elm contract + headless harness + a11y.
facett-core = { path = "../facett-core", version = "0.3.0" }
# The SHARED graph renderer — pan, scroll-zoom, click-to-select, downstream
# highlighting, all already owned by `draw_graph`. The build GRAPH pane maps
# nornir-build-thing's serde `BuildGraph` onto its `GraphModel` and paints through it;
# a second graph renderer in this constellation would be a twin, and the mapping is
# ~40 lines. facett-graphpan is where every other facett graph pane already goes.
facett-graphpan = { path = "../facett-graphpan", version = "0.2.0" }
egui = { workspace = true }
serde = { version = "1", features = ["derive"] }
serde_json = { workspace = true }
anyhow = "1"
# The dep-light build-thing LEAF: the declaration (`BuildVariantSet`), its
# `validate()` contract, the reused Elm card model (`BuildThing`), the `BuildSurface`
# projection, and the f7 `assemble()` seam. egui is deliberately NOT in this crate —
# `present_egui` (the egui view) lives ONLY here (dep-light rule). Path dep to the
# sibling nornir repo (same `../../` convention facett already uses for
# `../../nornir`, `../../znippy-zoomies`, `../../edda/...`); the published crates.io
# release does not yet carry the `assemble` seam.
nornir-build-thing = { path = "../../edda/crates/nornir-build-thing", version = "0.2.0" }
# The DERIVED feature→dependency graph: `CrateAnalysis`, `Reachability` and the
# two adjoints, computed from real manifests and carried through Mímir's
# `feature_dep_edges`. This pane renders that data; it hand-encodes none of it.
# Serde-only types, no egui — it crosses the wasm boundary like the rest.
nornir-feature-graph = { path = "../../edda/crates/nornir-feature-graph", version = "0.2.0" }
[dev-dependencies]
# `golden` for `facett_core::golden::moved` — the ONE before/after pixel predicate.
# The robot test used to compare encoded PNG BYTES with `assert_ne!`, which passes on
# a window title or an ephemeral port; `moved` states the floor a real redraw clears.
# dev-only, so no release build gains the image/golden tree.
facett-core = { path = "../facett-core", version = "0.3.0", features = ["golden"] }
# CPU render-proof (AccessKit nodes) via the kittest harness — no wgpu needed
# (the option widgets are plain egui), so the robot test runs headless anywhere.
egui_kittest = { version = "0.36", features = ["snapshot", "wgpu"] }
# The FakeAssemble in the robot test synthesizes an artifact file under a tmp root
# so the whole assemble→lineage→content_id chain runs with no real `cargo`.
tempfile = "3"