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

nordisk/dwarves

.nornir/build-thing-model-plan.md

build thing model — the plan (2026-08-26)

The dated plan for closing the gaps in build-thing-model-design.md. Waves, not a backlog: each wave is one or two lanes with a named acceptance, and a wave starts when the wave it builds on has pushed. Vocabulary: variant → features on the variant → settings / sub-settings → typ. Never "cell".

Wave 0 — done today

what where proof
the bijection laws A–E in the trait, every impl gated edda laws.rs 0.1.9 (published), holger / gunnar (both mirrors) / dwarves / knut assert_bijective green in each suite
the kernel donor edge, both doors edda InstallerBuild.kernel_donor + resolve_built_kernel; dwarves CLI + ⚒ live refusal: "pin preset 'nuked' (d437b919…) ≠ choice (bd2d9dbc…)"; with the veto: resolved
the kernel leaf absent until a kernel answer facett NavState.absent, dwarves leaf_absent robot_the_kernel_leaf_does_not_exist_in_the_shipped_shell_until_declared
the embed budget gate tells the truth nornir embed.rs draupnir committed 17.6 min vs 21.5 projected
the model written down this directory —

Wave 1 — running (started 2026-08-26 evening)

Lane edda — the tree and the ABI (gaps #1, #2, law C)

  1. types first: one recursive node, kinds feature / setting / val, paths as ids, edges; derived from today's flat OptionSpec/ParamSpec/kernel_donor with no toml change; flat names accepted as unambiguous aliases. Pushed early so the ⚒ lane can build on it.
  2. the trait answers: options(path), try_toggle(path, on) (the kernel cascade is tunnr's answer), actions(kind) (the kind → verb table as data) — with defaults, over the wasm ABI, plus the one host import fetch(coordinate) → bytes; a test proves native and wasm32 give identical answers.
  3. law C as path ↔ flag, law B as tree node ↔ declaration row. Acceptance: 0.1.10 (not published), all existing gates green, holger green.

Lane ⚒ — the pane reads the code (gaps #9, #6, #7, honesty) A. ⚒ loads and CALLS the build thing's wasm through the same loader as the CLI; a repo without a build-thing crate is refused by name (the toml is the named fallback, never a silent second path). Law B proven across the two doors. B. the settings tree renderer — every node shows its path and the flag it equals; kärna is a node whose detail is the kconfig canvas; the kernel leaf retired as a concept; the four shapes (nothing / library / donor / own kernel) re-proven. C. the honesty label on the canvas (edda's ~80 fragment symbols, prefix edges); verbs off the receipt's typ via actions(kind). D. options / try_toggle / actions over wasm wired; fetch fulfilled by the host, refused by name otherwise. Acceptance: release binaries rebuilt into ~/.local/bin (dwarves-ui-gpu, dwarves-ui); Rickard's four clicks.

Lane korp — lawful (gap #8, free-standing) korp-build-thing crate in korp, both mirrors held by parity, assert_bijective in its suite; korp-appliance-iso still names no kernel edge (that is Rickard's product decision — the refusal says so).

Wave 2 — after edda stage 2 has pushed

Lane edges (gap #3): the consumption edge generalised — any feature bound to repo/variant : typ, type-checked at declaration time; IsoBuild gets the same edge so gunnar-appliance-iso consumes tunnr/tunnr-kernel; korp's iso stays edgeless until told; the ONE reader stays one.

Lane presets (gap #5): val at a variant's root (preset = airgap = a bundle of choices); pin lookup for a preset's built kernel in the suite warehouse / ledger instead of tunnr/.kernel-out; picking a preset with no vetoes costs no build.

Wave 3 — after wave 2

Lane --build (gap #4): --build <path|coordinate> builds the consumed build thing as a step with its own --opt, in ⚒ and on the prompt; the order is the edge DAG and runa runs it (the build-pipeline DAG already exists — see build-pipeline-dag.md); the step console shows the donor build honestly (minutes cold, ~145 s cached). The "never builds the donor's kernel" rule is retired the day this lands.

Two rules over every wave (Rickard, 2026-08-26 evening)

Rickard's decisions, still open

Landings

(append-only: date · lane · SHA · what)