Gunnar

nordisk/facett

.nornir/build-variants.toml

# facett — .nornir/build-variants.toml — EMITTED, NOT SOURCE.
#
# Generated by `cargo run -p facett-build-thing -- emit` from facett-build-thing
# (the Rust `impl BuildThing`). The code is the one source; this file DESCRIBES the
# build for readers and for the doors that discover a repo by this path — the
# dwarves forge reads it with its own pin. Editing it changes NOTHING: re-emit after
# changing the code. Do not edit by hand.
#
# Release and verification rows, in five groups. facett is a library
# constellation: its seventy crates are LINKED by consumers, not built as variants,
# and declaring them would be a build matrix invented to look complete. What is
# declared is what facett PRODUCES, plus Falsett's focused feature checks.
#
# ① THE RELEASES — the two PyPI packages (2026-10-02, 0.2.0): `facett-wheel` (PyPI
# `facett`: the components, the loader, Streamlit glue behind the [streamlit] extra;
# a wheel and NO sdist, because its payload is prebuilt wasm a source tarball could
# not rebuild) and `facett-demo-wheel` (PyPI `facett-demo`: the pure-Python Streamlit
# app, wheel + sdist). Each lands beside the SHA256SUMS a downloader runs
# `sha256sum -c` against and a provenance record over the produced bytes — plus the
# wasm BUNDLES the facett wheel carries, one row per BUNDLE GROUP (core = the default
# bundle; docs and model3d since 2026-09-29, sim since 2026-10-02), each a row of its
# own because cargo does not produce a bundle. The loader routes by `bundles.json`,
# emitted beside this file from the same code (pkg-facet-wrapped/src/facett/assets/).
#
# ② THE DEMO (added 2026-09-18) — `facett-demo` as a native binary and as the
# gh-pages wasm bundle. These are not libraries anybody links: they are a program a
# human runs and a page a browser loads, and until this pass they were reachable
# only by typing `cargo xtask demo-wasm` from memory — a produced artifact with no
# declared door, which is the same gap Road B closed for `wrap-wasm`. The wasm row
# carries the feature axis (`--no-default-features` + the two GPU lanes) that the
# xtask literal used to be the only writer of.
#
# ③ THE IMAGES (added 2026-09-18) — the three Containerfiles in
# `facett-ops/src/containerfiles/`, declared in FILE MODE because the bytes on disk are
# the build input: their digest-pinned `FROM`, their `ARG`s and their self-asserting
# `RUN` steps are the recipe, and a synthesized cell cannot express a `RUN` at all.
# The header used to say facett mastered no media; that was true of vms/isos and
# false of images, and this repo is the only writer of all three.
#
# ④ THE FIXTURE (added 2026-09-29) — `facett-wasm-demo-panel`, the demo HOST's
# `panel` EXAMPLE built to wasm + bindgen: the bundle the WebGPU render guard drives.
# A guard's input, not a shipped artifact; a row because `example` is now a field,
# so `xtask panel-wasm` no longer spells its own cargo argv.
#
# ⑤ FALSETT VERIFICATION — default, GPU, each optional capability alone and with
# GPU, and all capabilities together on native and wasm32. These rows verify
# feature unification used by pipeline, plandag and brokkr embedders.
#
# What is deliberately NOT here: RUNNING any of it. `xtask streamlit` starts the
# demo and `xtask test-demo` runs its suite; neither is a build, and a build thing
# that declared a `podman run` would be a pipeline wearing the wrong hat. `cargo build -p facet-wrapped --target
# wasm32-unknown-unknown` writes ONE file, facet_wrapped.wasm; the wheel stages
# facet_wrapped_bg.wasm (a different, wasm-bindgen-rewritten file), a JS glue module
# and a component manifest. `[[build.wasm]]` declares the typed stages that make
# those, and `from_wasm` on the package chains the two so the forge builds them in
# order — an edge that is CHECKED against what the bundle says it writes, not merely
# recorded. The reasoning is in the crate's own module docs; an emission carries
# data, not argument, and a comment written here is deleted by the next `emit`
# without anybody noticing.
#
# The LAST table is `[build.toolchain]`, and it is what makes every cargo row above
# reachable from the code at all. It pins `nordisk-cargo-toolchain` by MANIFEST
# digest — the image every cargo build of this repo runs in, the forge's build of
# `facett-build-thing` to wasm32 included. Undeclared (before 2026-09-06) the forge
# resolved the default, refused it for being an unpinned tag, and fell back to
# PARSING this file: the emitted description driving the build instead of describing
# it. The digest is what the committed edda recipe mints (the same one edda and holger pin) — one reproducible recipe, one
# image — and a box that has never minted it mints it with
# `cargo run -p nornir-build-thing --features cargo-container --example
# mint_cargo_toolchain`; there is no registry to pull it from.

[nornir-build-thing]
schema = 4

[build]
base_suite = "ORIGINAL"

[build.allow_unbuilt_bins]
devid_release_probe = """facett-app's RELEASE-profile probe for the DEV-ID chip, behind `required-features = ["devid-probe"]`; built and run by facett-app/tests/devid_release_profile.rs, never by hand — a test subject, not an artifact."""
errcode_registry_json = "a generator: exports the compiled facett_core::errcode::REGISTRY as JSON for the Python/Streamlit demo; run by hand to regenerate, never shipped."
errcode_registry_md = "a generator: regenerates the error-code registry markdown from the compiled REGISTRY; run by hand and redirected, never shipped."
facett-build-thing = "this recipe crate's own emit door (`cargo run -p facett-build-thing -- emit`); the forge loads the crate as wasm, the bin is repository tooling, never shipped."
facett-flow-bench = "dev/flow-bench — a development-only timing harness in its own [workspace]; no runtime crate depends on it and nothing ships it."
facett-ops = "`cargo ops <cmd>`: the verbs that are NOT builds (publish a wheel, pack holger's index, run the Streamlit demo, push the Pages site) — repository tooling, never shipped."
facett_robot = """facett-demo's robot-UI driver (`required-features = ["robotui"]`): the headless/watch replayer the demo's UI tests drive; the native demo row builds the default features and so never this bin."""
gen_skull = "a one-off asset baker (`cargo run -p facett-model3d --bin gen_skull`): the committed assets/skull.glb is its output; re-run only to regenerate."
xtask = "the `cargo xtask` thin door onto this recipe — repository tooling, never shipped."

[[build.variant]]
name = "facet-wrapped-wasm"
package = "facet-wrapped"
profile = "release"
target = "wasm32-unknown-unknown"
suites = ["ORIGINAL"]
kind = "wasm"

[[build.variant]]
name = "facet-wrapped-docs-wasm"
package = "facet-wrapped-group"
features = ["docs"]
profile = "release"
target = "wasm32-unknown-unknown"
suites = ["ORIGINAL"]
kind = "wasm"

[[build.variant]]
name = "facet-wrapped-model3d-wasm"
package = "facet-wrapped-group"
features = ["model3d"]
profile = "release"
target = "wasm32-unknown-unknown"
suites = ["ORIGINAL"]
kind = "wasm"

[[build.variant]]
name = "facet-wrapped-sim-wasm"
package = "facet-wrapped-group"
features = ["sim"]
profile = "release"
target = "wasm32-unknown-unknown"
suites = ["ORIGINAL"]
kind = "wasm"

[[build.variant]]
name = "facett-wheel"
package = "facet-wrapped"
profile = "release"
suites = ["ORIGINAL"]
kind = "package"

[[build.variant]]
name = "facett-demo-wheel"
profile = "release"
suites = ["ORIGINAL"]
kind = "package"

[[build.variant]]
name = "facett-demo"
package = "facett-demo"
profile = "release"
suites = ["ORIGINAL"]

[[build.variant]]
name = "facett-demo-wasm"
package = "facett-demo"
bin = "facett-demo"
features = [
    "map-wgpu",
    "map3d-wgpu",
    "gpu",
    "graph-layout-gpu",
    "graph-wgpu",
    "flow-wgpu",
]
no_default_features = true
profile = "release"
target = "wasm32-unknown-unknown"
suites = ["ORIGINAL"]
kind = "wasm"

[[build.variant]]
name = "facett-wasm-demo-panel"
package = "facett-wasm-demo"
example = "panel"
profile = "release"
target = "wasm32-unknown-unknown"
suites = ["ORIGINAL"]
kind = "wasm"

[[build.variant]]
name = "nordisk-pip-toolchain"
suites = ["ORIGINAL"]
kind = "container"
container_ref = "nordisk-pip-toolchain"

[[build.variant]]
name = "nordisk-pip-consumer"
suites = ["ORIGINAL"]
kind = "container"
container_ref = "nordisk-pip-consumer"

[[build.variant]]
name = "nordisk-streamlit"
suites = ["ORIGINAL"]
kind = "container"
container_ref = "nordisk-streamlit"

[[build.variant]]
name = "facett-flow-plain"
package = "facett-flow"
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-wgpu"
package = "facett-flow"
features = ["wgpu"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-host"
package = "facett-flow"
features = ["host"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-host-wgpu"
package = "facett-flow"
features = [
    "host",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-labels"
package = "facett-flow"
features = ["labels"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-labels-wgpu"
package = "facett-flow"
features = [
    "labels",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-boxes"
package = "facett-flow"
features = ["boxes"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-boxes-wgpu"
package = "facett-flow"
features = [
    "boxes",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-arrows"
package = "facett-flow"
features = ["arrows"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-arrows-wgpu"
package = "facett-flow"
features = [
    "arrows",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-status"
package = "facett-flow"
features = ["status"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-status-wgpu"
package = "facett-flow"
features = [
    "status",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-rate"
package = "facett-flow"
features = ["rate"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-rate-wgpu"
package = "facett-flow"
features = [
    "rate",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-layered"
package = "facett-flow"
features = ["layered"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-layered-wgpu"
package = "facett-flow"
features = [
    "layered",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-compact-state"
package = "facett-flow"
features = ["compact-state"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-compact-state-wgpu"
package = "facett-flow"
features = [
    "compact-state",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-hit-test"
package = "facett-flow"
features = ["hit-test"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-hit-test-wgpu"
package = "facett-flow"
features = [
    "hit-test",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-lod"
package = "facett-flow"
features = ["lod"]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-lod-wgpu"
package = "facett-flow"
features = [
    "lod",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-all"
package = "facett-flow"
features = [
    "host",
    "labels",
    "boxes",
    "arrows",
    "status",
    "rate",
    "layered",
    "compact-state",
    "hit-test",
    "lod",
    "wgpu",
]
no_default_features = true
profile = "release"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "facett-flow-all-wasm32"
package = "facett-flow"
features = [
    "host",
    "labels",
    "boxes",
    "arrows",
    "status",
    "rate",
    "layered",
    "compact-state",
    "hit-test",
    "lod",
    "wgpu",
]
no_default_features = true
profile = "release"
target = "wasm32-unknown-unknown"
linkage = "not-applicable"
suites = ["ORIGINAL"]
kind = "lib"

[[build.container]]
name = "nordisk-pip-toolchain"
base = ""
containerfile = "facett-ops/src/containerfiles/pip-toolchain.Containerfile"

[[build.container]]
name = "nordisk-pip-consumer"
base = ""
containerfile = "facett-ops/src/containerfiles/pip-consumer.Containerfile"

[[build.container]]
name = "nordisk-streamlit"
base = ""
containerfile = "facett-ops/src/containerfiles/streamlit.Containerfile"

[[build.package]]
name = "facett-wheel"
format = "pip"
distribution = "facett"
out_dir = "pkg-facet-wrapped/dist"
source = "pkg-facet-wrapped"
image = "nordisk-pip-toolchain"
inputs = [
    "facet-wrapped/dist/facet_wrapped_bg.wasm:src/facett/assets/facet_wrapped_bg.wasm",
    "facet-wrapped/dist/facet_wrapped.js:src/facett/assets/facet_wrapped.js",
    "facet-wrapped/dist/manifest.json:src/facett/assets/manifest.json",
    "facet-wrapped-group/dist-docs/facet_wrapped_group_bg.wasm:src/facett/assets/docs/facet_wrapped_group_bg.wasm",
    "facet-wrapped-group/dist-docs/facet_wrapped_group.js:src/facett/assets/docs/facet_wrapped_group.js",
    "facet-wrapped-group/dist-docs/manifest.json:src/facett/assets/docs/manifest.json",
    "facet-wrapped-group/dist-model3d/facet_wrapped_group_bg.wasm:src/facett/assets/model3d/facet_wrapped_group_bg.wasm",
    "facet-wrapped-group/dist-model3d/facet_wrapped_group.js:src/facett/assets/model3d/facet_wrapped_group.js",
    "facet-wrapped-group/dist-model3d/manifest.json:src/facett/assets/model3d/manifest.json",
    "facet-wrapped-group/dist-sim/facet_wrapped_group_bg.wasm:src/facett/assets/sim/facet_wrapped_group_bg.wasm",
    "facet-wrapped-group/dist-sim/facet_wrapped_group.js:src/facett/assets/sim/facet_wrapped_group.js",
    "facet-wrapped-group/dist-sim/manifest.json:src/facett/assets/sim/manifest.json",
]

[[build.package]]
name = "facett-demo-wheel"
format = "pip"
distribution = "facett_demo"
out_dir = "py/dist"
source = "py"
sdist = true
image = "nordisk-pip-toolchain"

[[build.wasm]]
name = "facet-wrapped-wasm"
out_dir = "facet-wrapped/dist"

[build.wasm.bindgen]
target = "web"

[build.wasm.manifest]
example = "manifest"
file = "manifest.json"

[[build.wasm]]
name = "facet-wrapped-docs-wasm"
out_dir = "facet-wrapped-group/dist-docs"

[build.wasm.bindgen]
target = "web"

[build.wasm.manifest]
example = "manifest"
file = "manifest.json"

[[build.wasm]]
name = "facet-wrapped-model3d-wasm"
out_dir = "facet-wrapped-group/dist-model3d"

[build.wasm.bindgen]
target = "web"

[build.wasm.manifest]
example = "manifest"
file = "manifest.json"

[[build.wasm]]
name = "facet-wrapped-sim-wasm"
out_dir = "facet-wrapped-group/dist-sim"

[build.wasm.bindgen]
target = "web"

[build.wasm.manifest]
example = "manifest"
file = "manifest.json"

[[build.wasm]]
name = "facett-demo-wasm"
out_dir = "dist"

[build.wasm.bindgen]
target = "web"

[[build.wasm]]
name = "facett-wasm-demo-panel"
out_dir = "facett-wasm-demo/dist"

[build.wasm.bindgen]
target = "web"

[build.toolchain]
image = "nordisk-cargo-toolchain"
image_sha256 = "668468e775ad80f32d700cbc9709d41cac726f40d00649461a0932f30d1b2067"
rust_version = "1.97.1"
targets = [
    "x86_64-unknown-linux-gnu",
    "x86_64-unknown-linux-musl",
    "wasm32-unknown-unknown",
]
timeout_secs = 3600
mem_limit_mb = 8192
cpus = 8
siblings = [
    "draupnir",
    "edda",
    "funnel-core",
    "knut",
    "korp-collectors",
    "nornir",
    "znippy-zoomies",
]