bench/Cargo.toml
# Detached bench crate for dwarves — its OWN `[workspace]` so the heavy `nornir`
# dev-dependency (the Bencher contract) never touches the published `dwarves`
# crate's lockfile/members. `nornir`'s `run_bench_example` detects
# `<repo>/bench/examples/nornir-bench.rs` and runs cargo *inside* this dir.
# See nornir/.nornir/bencher.md (the three accepted layouts).
[package]
name = "dwarves-bench"
version = "0.0.0"
edition = "2024"
publish = false
[workspace]
[dependencies]
# `default-features = false` per nornir's own guidance for bench consumers: drops
# the eframe/egui/wgpu + rmcp + embed-holger server stacks (the bench api
# `nornir::bench` is not feature-gated). Keeps this harness lean AND independent of
# the embed-holger server build.
nornir = { path = "../../nornir", version = "0.6.0", default-features = false }
dwarves = { path = "../crates/dwarves", version = "0.2.0" }
anyhow = "1"
serde_json = "1"
# ── the ⚒ graph benches (`hammer-graph-bench`) ──
# The shipped scene, headless: frame cost of the build graph at gunnar scale, at
# kconfig scale (the kärna subgraph unfolded), at a synthetic 20k, maximise/restore,
# fold/unfold — and the wasm load+call road. Default features off: no GPU, no solo.
dwarves-gui = { path = "../dwarves-gui", version = "0.1.4", default-features = false }
nornir-robotui = { path = "../../edda/crates/nornir-robotui", version = "0.4.0", default-features = false }
nornir-build-thing = { path = "../../edda/crates/nornir-build-thing", version = "0.2.0", features = ["plugin-host"] }
facett-core = { path = "../../facett/facett-core", version = "0.3.0" }
facett-app = { path = "../../facett/facett-app", version = "0.2.0" }
facett-graphview = { path = "../../facett/facett-graphview", version = "0.2.0" }
tempfile = "3"
[features]
# Compile the holger push/resolve bench arms (the artifact-store byte legs). Forwards
# to dwarves's `holger` feature, which links holger-server-lib + znippy in-process. OFF
# by default so the lean forge-planner bench build stays independent of the registry
# stack; the Loki bencher runs the authoritative numbers with `--features holger`.
holger = ["dwarves/holger"]
[[example]]
name = "nornir-bench"
path = "examples/nornir-bench.rs"
[[example]]
name = "hammer-graph-bench"
path = "examples/hammer-graph-bench.rs"
# LOCAL DEV ONLY (mirrors holger/nornir + the dwarves workspace): redirect znippy to
# the sibling checkout so the OPTIONAL `holger` bench arms resolve znippy locally. Inert
# for the default bench build (the `holger` feature is off). Paths follow the sibling
# convention; the bench crate is its own workspace, so it carries its own patch table.
[patch.crates-io]
# 2026-10-05 (merge to main): crates.io serves znippy-compress, znippy-plugin-maven, znippy-plugin-python
# (published 2026-10-04; the siblings carry the same code, at most test/doc edits
# since): their rows are gone.
# `nornir` declares `znippy-zoomies = "0.1.13"` (registry). The published 0.1.20
# predates the local `gatling_bfs` re-export nornir's `src/knowledge/context.rs`
# imports, so without this the bench example cannot build at all (`E0432:
# unresolved import znippy_zoomies::gatling_bfs`). A path dep elsewhere in the
# graph does not override a registry dep — only `[patch]` does, and only at the
# workspace root, which this detached crate is. Mirrors nornir's own patch table.
znippy-zoomies = { path = "../../znippy-zoomies" }
znippy-common = { path = "../../znippy/znippy-common" }
# -- the root workspace's patch set (2026-10-23), so this separate workspace resolves --
# holger main (cbf89f0e) names these by version only and they are not on crates.io yet;
# the rest are the crates the root builds from the siblings by path (one copy each).
# Mirrors ../Cargo.toml [patch.crates-io]; DROP each line when the root drops it.
nornir-git = { path = "../../edda/crates/nornir-git" }
appliance-grow = { path = "../../edda/crates/appliance-grow" }
nordisk-estate-svg = { path = "../../monetize/crates/estate-svg" }
nordisk-twin = { path = "../../Skidbladnir/crates/installer/nordisk-twin" }
nornir-auth-policy = { path = "../../edda/crates/nornir-auth-policy" }
draupnir = { path = "../../draupnir" }
jera = { path = "../../edda/crates/jera" }
modgunn = { path = "../../modgunn" }
nornir-appshell = { path = "../../edda/crates/nornir-appshell" }
nornir-escape = { path = "../../edda/crates/nornir-escape" }
nornir-humanize = { path = "../../edda/crates/nornir-humanize" }
nornir-service = { path = "../../edda/crates/nornir-service" }
nornir-zone = { path = "../../edda/crates/nornir-zone" }
nornir-build-thing = { path = "../../edda/crates/nornir-build-thing" }
dwarves-runa = { path = "../../edda/crates/dwarves-runa" }