[package]
name = "appliance-grow"
# 0.1.0 (2026-09-27): the RUNTIME data-set growth, moved AS IS out of
# gunnar-server's `src/grow/` (gunnar gunnar-live 18a44e3, with 364a4f5's
# barrier and b0922aa's twin NoStandby) so holger's box grows the same way —
# the phase machine (drain → unmounted only after the array stops → wait for
# the members → grow → mount → reopen), the World seam it is driven through,
# the go-ahead and its nonce ledger, the drain's twin verdict, the boot
# journal's reader and the capacity ladder (SEALED … AT_RUNTIME). gunnar
# switches to it later itself; until then the two are the same code under
# two names.
# 0.1.1 (2026-10-26, A3): takes monetize-embed's 0.3 line, so a product on monetize 0.3.0
# (Holger) resolves ONE monetize-embed; the go-ahead check is the same bytes in both
# (`signing::verify_go_ahead`). RA2-13: ONE line, `0.3`, in the
# dependency AND the dev-dependency, never a range across the 0.1/0.2/0.3 breaking lines
# (crates.io's 0.2.0 is the old API). `tests/one_monetize_embed_line.rs` holds it.
version = "0.1.1"
edition = "2021"
description = "The runtime data-set growth every nordisk appliance runs the same way: a phase machine (draining → unmounted → waiting-members → growing → mounting → done|failed) over a World seam a product implements, 'unmounted' said only once the set is OFF, a drain that holds every twin to a barrier (and a twin that answers NoStandby), the signed go-ahead with its spent-nonce ledger, the boot stack's grow-journal reader, the capacity ladder (unknown / sealed / operator-only / at-restart / at-runtime) and the probes it decides over (/proc/mounts + md sysfs, PCI hot-plug). Feature `md` adds the volume half over korp-installer's grow engine (umount, the guard tmpfs, md stop, rescan, survey, G1–G6 + mount, the journal)."
license = "MIT OR Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/edda"
keywords = ["appliance", "grow", "mdraid", "xfs", "resize"]
categories = ["os::linux-apis", "filesystem"]
exclude = ["/.nornir/"]
[features]
default = []
# The go-ahead a monetize signed: its Ed25519 signature checked under the key
# the box already verifies entitlement facts with (`monetize_embed::signing`,
# the one canonical form). A product's open build contains no verifier at all.
monetize = ["dep:monetize-embed"]
# The volume half over korp-installer's grow engine — the SAME `grow` module
# korp-start grows the set with at boot. `default-features = false` is the
# dep-light installer core (gpt / mdraid / mdassemble / grow / datahome / xfs):
# no znippy, no OpenZL toolchain, no image codecs. `nix` for mount(2)/umount2(2)
# of the read-only guard tmpfs — the exact crate korp-installer already links.
md = ["dep:korp-installer", "dep:nix"]
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tracing = "0.1"
# `/proc/config.gz` for the PCI hot-plug probe — the pure-Rust backend.
flate2 = { version = "1", default-features = false, features = ["rust_backend"] }
rustix = { version = "1", default-features = false, features = ["std", "fs"] }
# From crates.io (0.3.0 is published), never by path: monetize is edda's consumer
# (nornir-release-core's no_path_dep_on_our_consumer).
monetize-embed = { version = "0.3", optional = true }
korp-installer = { version = "0.2.0", default-features = false, optional = true }
nix = { version = "0.31", default-features = false, features = ["mount"], optional = true }
[dev-dependencies]
tempfile = "3"
ed25519-dalek = { version = "2", features = ["std"] }
# The SAME line as the dependency, so edda's tests build the line the crate ships with.
monetize-embed = "0.3"