Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/dwarves

.nornir/buildthing-installer.md

buildthing → per-site installer ISO (gap analysis item 19)

The suite-level capability now exists at the SHARED layer, measured green on edda 2026-08-14: nornir_build_thing::suite_cli::run_installer resolves an [[build.installer]] cell, applies repeatable --param values (name=value, name=@path, or name=@fixture for a parameter whose cell declares a fixture — the forge mints it and prints param name ← fixture <kind> (…) beside the ISO path) through the ONE validation path (unknown/secret/wrong-shape refused by name), and hands the composition to an injected InstallerComposer. korp-installer provides the composer: korp_installer::isocompose::ForgeComposer (behind forge) — the SAME compose_and_master every product verb and every KVM proof drives. Secure Boot signing and root-key enrollment honor the crate's existing env contracts (KORP_SECURE_BOOT_KEY/CERT, KORP_ROOT_SIGNING_KEY), so an armed build needs no new flags at this layer.

The wiring buildthing needs (exact, ~10 lines)

In buildthing_cmd — which lives in crates/dwarves/src/main.rs (~:6572) and delegates to dwarves::buildthing::run_args — add an installer branch. NOTE: suite_cli::BuildArgs has no cell field (its fields are suite, atom, list, attest, params), so the cell name arrives either as a new --installer <name> CLI arg or by reusing the existing --atom string when it names an [[build.installer]] cell — the resolver refuses unknown names by name either way:

#[cfg(feature = "appliance-iso")]
{
    let iso = nornir_build_thing::suite_cli::run_installer(
        &repo_root,
        &repo_label,
        installer_cell.as_deref(), // --installer <name>, or None = the single cell
        &kernel_path,              // --kernel / $KORP_TEST_KERNEL
        &app_path,                 // the product's packed .znippy
        &args.params,              // the repeatable --param k=v values
        &korp_installer::isocompose::ForgeComposer,
    )?;
    println!("installer ISO: {}", iso.display());
}

appliance-iso already exists and already carries the korp-installer dep (crates/dwarves/Cargo.toml:536,544) — no new dependency edge.

Why the wiring is not committed as code from this box

dwarves does not compile here — measured 2026-08-14, verbatim:

error: failed to load manifest for workspace member `/home/henrik/dwarves/dwarves-gui`
referenced by workspace at `/home/henrik/dwarves/Cargo.toml`

Caused by:
  failed to load manifest for dependency `facett-manual`

Caused by:
  failed to read `/home/henrik/facett/facett-manual/Cargo.toml`

Caused by:
  No such file or directory (os error 2)

The local facett checkout (main @ 0730bff0) predates the facett-manual crate and has DIVERGED from origin/main (not fast-forwardable), with a sibling session's uncommitted change in the very file the delta touches — syncing it is a merge decision over a live working tree, not this session's call. Committing CLI code that cannot be compiled would be a claim, not a capability; the seam is proven at the shared layer instead (the fake-composer test in suite_cli), and this file is the exact remaining wiring.