xtask/Cargo.toml
[package]
name = "xtask"
description = "facett's THIN DOOR onto its build thing — `cargo xtask build|wrap-wasm|buildgate`. ONE dependency, the recipe (facett-build-thing, which re-exports nornir-build-thing). Every row is built in the pinned [build.toolchain] image. The verbs that are not builds (publish, verify, run, deploy) are `cargo ops <cmd>` (facett-ops)."
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
publish = false
# A LIB plus a BIN: `src/door.rs` is driven by `tests/build_is_a_thin_door.rs`
# without compiling a row.
[lib]
name = "xtask"
path = "src/lib.rs"
[[bin]]
name = "xtask"
path = "src/main.rs"
# ── ONE DEPENDENCY (THE LAW: "xtask is a THIN DOOR onto the build thing") ─────
#
# facett's own DECLARATION, as code — and the ONLY dependency of this crate. The
# recipe re-exports the engine (`facett_build_thing::nornir_build_thing`), so the
# rows `cargo xtask build` resolves, the argv the container road materializes, the
# wasm stages and the `buildgate` verb all come through ONE edge and cannot resolve
# a second `BuildVariant` type.
#
# `wasm-stage` + `cargo-container` light the container road `xtask::door` drives: the
# pinned `[build.toolchain]` image, `build_variant_in_container` over
# `DraupnirCargoRunner`, and the `[[build.wasm]]` stages run IN the same image.
#
# Until 2026-09-30 there were eleven more lines here (nornir-pages,
# nornir-xtask-support, facett-wasm-demo, draupnir, zip, sha2, base64, 4× znippy).
# They served verbs that build nothing and moved with them to `facett-ops`
# (`cargo ops <verb>`); see .nornir/xtask-thin-door-audit.md §7.
# `tests/one_dependency.rs` goes red on a second line.
[dependencies]
facett-build-thing = { path = "../facett-build-thing", version = "0.1.0", features = ["wasm-stage", "cargo-container"] }
[dev-dependencies]
nornir-testmatrix = { version = "0.2.10", path = "../../edda/crates/nornir-testmatrix", default-features = false }
# The typed pipeline format, so `tests/the_pipeline_names_things_that_exist.rs` can
# PARSE `facett.runa.ron` instead of grepping it. A regex over a RON file would pass
# on a pipeline the loader refuses, which is the same "second reader" defect the
# declaration's own tests exist to prevent — and `from_ron_str` validates the stage
# DAG (cycles, dangling `needs`) on the way in, for free.
dwarves-runa = { version = "0.3.0", path = "../../edda/crates/dwarves-runa" }
# The component REGISTRY itself, so `tests/gallery_covers_the_manifest.rs` can ask the
# real thing which components exist and — more importantly — hand each gallery payload
# to the REAL adapter and check it builds. A coverage list that only compares names
# would pass on a payload that renders nothing. On the host this rlib carries no wasm
# and no GPU edge (those deps are target-gated inside the crate), so it costs the test
# build almost nothing.
facet-wrapped = { version = "0.2.0", path = "../facet-wrapped" }
serde_json = { workspace = true }