# korp-collectors — .nornir/build-variants.toml — EMITTED, NOT SOURCE.
#
# Generated by `cargo run -p korp-collectors-build-thing -- emit` from
# crates/korp-collectors-build-thing (the Rust `impl BuildThing`). The code is
# the one source; this file DESCRIBES the build. Editing it changes NOTHING:
# re-emit after changing the code. Do not edit by hand.
#
# Model: variant → features → settings/sub-settings → typ. ONE package, ONE
# shipped `[[bin]]` (korp-collectors, the unified collector driver) and its
# library; the rows differ only in which collector surfaces are compiled in.
# The interesting half of this recipe is the FEATURE AXIS: fifteen features, four
# built, eleven excused BY NAME in [build.allow_unbuilt] — a feature nothing
# builds and nothing excuses is rot (korp's spark41 collected three invisible
# compile breaks that way). See .nornir/build-thing-design.md.
[build]
offers = [
"csv",
"daemon",
"gribnc",
"gtfs",
"kvm-guest",
"mainframe",
"osm",
"osm-daemon",
"osm-daemon-download",
"parsers",
"service",
"skade-sink",
"systemd",
"testmatrix",
"znippy",
]
base_suite = "ORIGINAL"
[build.allow_unbuilt]
csv = "the RFC-4180 CSV collector (delimiter sniff, BOM strip, Latin-1 transcode, decimal-comma, typed two-pass schema sniff). A per-SOURCE collector surface: which sources a driver carries is a deployment decision, and pulling every parser into one binary is not one this repo has taken."
daemon = "the collector DAEMON architecture (Config + State + Collector trio, the CollectorCtx seams, the Phase machine, the registry). Reached by `osm-daemon`, which a row DOES build; no row names it alone because a daemon surface with no daemon implementing it is not an artifact anybody ships."
gribnc = "the NetCDF/GRIB weather-model collector (hand-rolled pure-Rust GRIB2 + NetCDF-classic decoders, Copernicus CDS + DWD ICON). Same per-source reason as `csv`."
gtfs = "the GTFS static transit collector (a pure-Rust ZIP reader over the feed, then the csv reader per known file). Same per-source reason as `csv`."
kvm-guest = "builds `korp-chain-init`, the PID 1 of the a–e chain drill's QEMU guest. Compiled by `tests/osm_chain_kvm.rs`, never by a delivery — it is a test instrument, and it is kept a NAMED feature precisely so the guest binary cannot be dragged into a substrate build by accident."
mainframe = "the EBCDIC + COBOL-copybook + COMP-3 fixed-width collector. Same per-source reason as `csv`; it is fully hand-rolled and pulls zero new deps, so it costs nothing to leave selectable."
osm-daemon-download = "the in-collector librqbit planet TORRENT (forwards osm-katana/planet-fixture). Deliberately off every build point: a lean build and every test rely on the on-disk seed, and a BitTorrent client in a delivery is a network dependency nobody asked for. Mirrors korp's own `planet-download` gate."
service = "the nursery: one process supervising many collectors, taking its two runtime decisions from `skidbladnir::readiness`. This is a RUNTIME SUBSTRATE choice made by whoever deploys a collector, not a shape this repository ships; korp wires it."
skade-sink = "land the parsed Arrow batches in Iceberg through skade. A SINK is the consumer's choice — the same collector feeds a memory sink, a znippy archive or Iceberg — so no driver row picks one. Compiled by `cargo test --features testmatrix,osm,skade-sink`, which is what keeps it from rotting."
systemd = "the third runtime substrate — a collector as its own systemd unit, through Skidbladnir. Same reason as `service`, which it implies: the substrate is the deployer's decision."
testmatrix = "turns the tests' `functional_status` self-reports into real nornir test-matrix rows. A TEST-HARNESS mode, never a delivery: a shipped binary that appends matrix rows would be reporting on a run nobody is measuring."
znippy = "the collected-data CONVERTER: pack parsed batches into a znippy archive and read them back byte-identical. A SINK/transport choice like `skade-sink`, and it pulls the OpenZL C codec, which a light driver must not carry by default."
[build.allow_unbuilt_bins]
collector-fixtures = "fetches every provider's published sample payloads (with url + date) into committed test fixtures; run by hand to refresh them, never shipped."
korp-chain-init = "the KVM guest's PID 1 for the a–e chain drill (`tests/osm_chain_kvm.rs`): mounts /proc /sys /dev and a real ext4 work disk, runs the plan off /proc/cmdline, writes its report to a mailbox block device and powers off. Built by that test behind `kvm-guest`, never by a delivery — a restart is not a `drop()` and `st_blocks` is a property of a real filesystem, which is why the drill needs a machine that can be cut off at the power."
korp-collectors-build-thing = "this recipe crate's own emit door (`cargo run -p korp-collectors-build-thing -- emit` regenerates .nornir/build-variants.toml); the forge loads the crate as wasm, the bin is repository tooling, never shipped."
[[build.variant]]
name = "korp-collectors"
package = "korp-collectors"
bin = "korp-collectors"
features = ["parsers"]
profile = "release"
role = "tool"
suites = ["ORIGINAL"]
default = true
[[build.variant]]
name = "korp-collectors-osm"
package = "korp-collectors"
bin = "korp-collectors"
features = ["osm"]
profile = "release"
role = "tool"
suites = ["ORIGINAL"]
[[build.variant]]
name = "korp-collectors-osm-daemon"
package = "korp-collectors"
bin = "korp-collectors"
features = ["osm-daemon"]
profile = "release"
role = "tool"
suites = ["ORIGINAL"]
[[build.variant]]
name = "korp-collectors-lib"
package = "korp-collectors"
features = ["parsers"]
profile = "release"
linkage = "not-applicable"
role = "library"
suites = ["ORIGINAL"]
default = true
kind = "lib"
[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 = [
"Skidbladnir",
"draupnir",
"edda",
"openzl-sys-rs",
"skade",
"tunnr",
"znippy",
"znippy-zoomies",
]