Gunnar

nordisk/knut

.nornir/build-variants.toml

# knut — .nornir/build-variants.toml — EMITTED, NOT SOURCE.
#
# Generated by `cargo run -p knut-build-thing -- emit` from
# crates/knut-build-thing (the Rust `impl BuildThing`). The code is the one
# source; this file DESCRIBES the build for readers and for the tools that
# discover a repo by this path. Editing it changes NOTHING: re-emit after
# changing the code. Do not edit by hand.
#
# Model: variant → features → settings/sub-settings → typ. Every row here is a
# CARGO row (typ exe or wasm), so the consequence of a toggle is the dep/feature
# CLOSURE delta — see `feature_table` / `consequence_of` in the recipe, which the
# tests hold to the member crates' own `[features]` tables.
#
# ⚠ THE TRAP THIS DECLARATION CLOSES: `cargo build --all-targets` SILENTLY SKIPS
# `required-features` binaries. FOUR of knut's five carry them (`bifrost` → cli,
# `knut-popviz` → gui, `knut-spark-server` → server, `graphar-flight` → bin; the
# fifth, `export-iceberg` → skade, is built by nothing and excused by name), so a
# plain build produces ONE of them and reports success. `[build.required]` below
# is that trap as data, and the recipe REFUSES a row that would emit nothing.

[build]
offers = [
    "airflow",
    "autostart",
    "axum",
    "bin",
    "catalog-aistor",
    "catalog-gravitino",
    "catalog-polaris",
    "catalog-unity",
    "catalogs",
    "cli",
    "cozo",
    "doris",
    "dsl",
    "facett-adapter",
    "falkordb",
    "falkordb-service",
    "flight",
    "grpc",
    "gui",
    "http",
    "iceberg",
    "iceberg-doris",
    "iceberg-rest",
    "live",
    "metrics-http",
    "native",
    "orc",
    "rel2graph",
    "serde",
    "server",
    "service",
    "skade",
    "skade-grpc",
    "skade-rest",
    "skade-s3",
    "spark",
    "spark41",
    "sql",
    "testkit",
    "testmatrix",
    "wasm",
    "web",
]
base_suite = "ORIGINAL"

[build.required]
bifrost = ["cli"]
export-iceberg = ["skade"]
graphar-flight = ["bin"]
knut-popviz = ["gui"]
knut-spark-server = ["server"]

[build.allow_unbuilt]
axum = "knut-wasm-host's HTTP door, reached only through knut-pipelines' `web`. A GAP with `web`: nothing declares a build point for the browser-facing pipeline server, so the axum surface compiles in no declared artifact."
cozo = "knut-graphdb's embedded CozoDB backend — the alternative to `falkordb` behind the same trait. A backend is a CONSUMER's choice of wire and knut ships no artifact per backend to choose between; the library is what is delivered."
dsl = "knut-thund's query DSL — a parsing surface over the same engine, selected by an embedder. No knut binary exposes Thund's DSL, so a build point here would ship nothing."
facett-adapter = "knut-pipelines' facett component adapter. Pulled by `web`, which nothing builds; on its own it is a rendering seam for an embedder rather than an artifact."
falkordb = "the FalkorDB backend of knut-graphdb and knut-thund — same reason as `cozo`: a backend a consumer picks. NOT the same thing as `autostart`, which STARTS one; this only compiles the client."
flight = "knut-bifrost's Arrow Flight client (arrow-flight + tonic + futures). The SERVER side is declared and built — the `graphar-flight` row — and this is the client half that lives in bifrost for embedders; no bifrost binary turns it on."
grpc = "knut-pipelines' tonic SDP control plane. It is a COMPONENT of `server`, which IS built, but `server` reaches the gRPC surface through its own dependency edge rather than by enabling this feature, so the name itself is unbuilt. A GAP if the plain `knutpipe` is ever meant to serve gRPC."
http = "graphar-flight's tiny_http Arrow-IPC door beside Flight SQL. The `graphar-flight` row builds `bin` alone; an HTTP-serving graphar-flight would be a distinct build and needs its own row when somebody ships one."
iceberg = "knut-popviz's Iceberg pane (`dep:skade` + `dep:arrow-select`). A real, shipped capability of the viz that NO declared row enables: the `knut-popviz` row builds `gui` alone. A GENUINE GAP — if the shipped viz has the Iceberg pane, the row is wrong; if it does not, the feature is dead weight. Owner's call."
iceberg-rest = "knut-popviz's Iceberg pane behind a REST catalog (`iceberg` + `skade/rest-catalog`). Unbuilt for the same reason as `iceberg`: the shipped viz row builds `gui` alone."
live = "knut-pipelines' `gui` + `grpc` — the live pipeline editor. A distinct artifact would need a distinct row and a distinct bin; knut-pipelines declares neither, so the editor exists as a feature and not as a build point."
metrics-http = "knut-bifrost's tiny_http metrics endpoint. A deployment choice an embedder makes; no shipped knut binary opens a metrics port, and one that did would be a new row."
native = "knut-thund's DataFusion engine (the incremental-vs-recompute path the `knut.thund_watermark_drop` bench arm drives). A library engine, selected by whoever embeds Thund; xtask's dev-dep turns it on for the bench and nothing ships it."
orc = "graphar's ORC chunk codec, beside the default Parquet one. A storage-format choice a consumer makes when it opens a graph, not a separate artifact."
rel2graph = "knut-thund's bridge to the bifrost rel-to-graph transforms (`dep:knut-bifrost` + `dsl`) — the one feature that joins the two halves of what knut IS. It was invisible to the hand-written declaration for the same reason `spark41` nearly was: a grep for offers that forgets a feature name may carry a DIGIT. Nothing builds it; it is an embedder's road from Thund into the transforms."
serde = "knut-popsim's serialization of its population model. An embedder's convenience; the popsim is linked, never shipped alone."
spark = "knut-bifrost's Spark Connect client (and knut-thund's same-named arm). Reached through the vendored spark-connect fork; no declared binary enables it, and `spark41` below is the combination that would."
spark41 = '`spark41 = ["spark", "graphar-falkordb/autostart"]` — a feature with NO binary of its own: it MODIFIES `bifrost`. It gets no row because a variant per feature-combination is a row that is not a distinct build. If a `bifrost` built WITH spark41 is a distinct shipped artifact it needs its own row AND a measured difference — add it then, not now. (It is also one of the three features that start a FalkorDB; see AUTOSTARTS_A_DATABASE.)'
sql = "knut-thund's SQL surface over the same engine — same reason as `dsl` — and knut-bifrost's DataFusion SQL transform, an embedder's choice no bifrost row turns on."
testkit = "knut-pipelines' in-process test helpers. A TEST mode, never a delivery: a shipped pipeline binary carrying its own fixtures would be shipping the harness."
testmatrix = "the nornir-testmatrix functional-status emitter, declared by eight members. A TEST-HARNESS mode turned on by the test command; a shipped binary appending matrix rows would be reporting on a run nobody is measuring."
wasm = "knut-bifrost's wasmi HOST for the transform guest. The GUEST is declared and built (`knut-bifrost-wasm-guest`); the host side is an embedder's choice and no bifrost binary turns it on — which is also why `tests/wasm_guest.rs` is `#[ignore]`d."
web = "knut-pipelines' browser-facing server (axum + knut-wasm-host + facett-adapter). A GAP: it is a whole deployment shape with no row, and it is the reason `axum` and `facett-adapter` are unbuilt too."

[build.allow_unbuilt_bins]
export-iceberg = """graphar-flight's Iceberg exporter (`required-features = ["skade"]`). No row builds it because no row enables `skade` — the same gap `skade` is excused under. It is named here so the bin tally counts five declared binaries and accounts for all of them, instead of four and a silence."""
graphar-graph-http = """graphar-flight's named read queries as Arrow IPC over HTTP for a wasm viewer (`required-features = ["http"]`); no deployment declares it yet, so no row builds it."""
knut-build-thing = "this recipe crate's own emit door (`cargo run -p knut-build-thing -- emit` regenerates .nornir/build-variants.toml); the forge loads the crate as wasm, the bin is repository tooling, never shipped."
knut-flight-server = "knut-flight's Arrow Flight server over rel2graph output (N4). The service unit that would ship it (N5) is not declared, so no row builds it yet — a gap in the roadmap, written here rather than hidden."
knut-popload = "knut-popviz's headless population load into FalkorDB (what a Simulate press runs on the FalkorDB host); run in place by the operator, no row ships it yet."
rel2graph-export = "knut-rel2graph-bench's export of the rel2graph fabric as node/edge lists + oracle for demo/rel2graph_networkx_demo.py — a demo/bench feeder, never shipped."
rel2graph-timing = "knut-rel2graph-bench's seeded timing loop (plan construction / fabric at 1x/10x/100x) — a bench, never shipped."
xtask = "the `cargo run -p xtask -- <task>` workspace task runner — repository tooling, never shipped."

[[build.variant]]
name = "knutpipe"
package = "knut-pipelines"
bin = "knutpipe"
profile = "release"
role = "tool"
suites = ["ORIGINAL"]
default = true

[[build.variant]]
name = "knut-spark-server"
package = "knut-pipelines"
bin = "knut-spark-server"
features = ["server"]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "graphar-flight"
package = "graphar-flight"
bin = "graphar-flight"
features = ["bin"]
profile = "release"
role = "server"
suites = ["ORIGINAL"]
default = true

[[build.variant]]
name = "bifrost"
package = "knut-bifrost"
bin = "bifrost"
features = ["cli"]
profile = "release"
role = "tool"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-doris"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "service",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-falkordb"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "falkordb-service",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-falkordb-aistor"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "falkordb-service",
    "catalog-aistor",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-falkordb-polaris"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "falkordb-service",
    "catalog-polaris",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-falkordb-unity"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "falkordb-service",
    "catalog-unity",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-falkordb-gravitino"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "falkordb-service",
    "catalog-gravitino",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-falkordb-grpc"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "falkordb-service",
    "skade-grpc",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "bifrost-full"
package = "knut-bifrost"
bin = "bifrost"
features = [
    "cli",
    "service",
    "catalogs",
    "skade-grpc",
]
profile = "release"
role = "server"
suites = ["ORIGINAL"]

[[build.variant]]
name = "knut-popviz"
package = "knut-popviz"
bin = "knut-popviz"
features = ["gui"]
profile = "release"
role = "client"
suites = ["ORIGINAL"]
default = true

[[build.variant]]
name = "knut-bifrost-wasm-guest"
package = "knut-bifrost-wasm-guest"
profile = "release"
target = "wasm32-unknown-unknown"
manifest_dir = "crates/knut-bifrost/wasm-guest"
role = "tool"
suites = ["ORIGINAL"]
kind = "wasm"

[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