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

nordisk/dwarves

.nornir/release-deps-consume-design.md

release / deps — dwarves consumes the edda leaves — design

Class: design · Function axis: f0 the two ACT surfaces (the whole) · f1 release (nornir-release: waves + skip) · f2 deps (nornir-depgraph: graph + layout) · f3 the leaf/conductor line (what stays in nornir) Strict: this file states only what the consumption IS — its parts and why. Sibling how-to: release-deps-consume-guide.md; zero-knowledge walkthrough: release-deps-consume-for-idiots.md.

dwarves is the constellation's CI/CD that ACTS (parity spec §"nornir keeps vs dwarves takes"): read/understand stays in nornir, run/act moves to dwarves.

AMENDED 2026-07-14 (PRE-PROMPT L5a). release is a build/publish operation → it is now dwarves-owned end-to-end. dwarves plans the waves AND drives the crates.io publish cascade (f4, the [execute] runner in release.rs). Only the version / dep / history FACTS and the warehouse-KNOWLEDGE analyses (doctor's semantic-blast, regression root-cause) stay in nornir, read by gRPC (one-directional dwarves→nornir, no cycle). The prior wording — "the actual publish stays in nornir" — is superseded.

Two such acts — run a release and show the suite dependency graph — are backed by warehouse-free logic that already lives in shared edda leaves. Until now only nornir path-depped those leaves, so dwarves' own manifests couldn't run them. This wires dwarves to CONSUME them (Law L5 — reuse, never twin):

The system as one — the function map (f0)

part lives in what it is
f1 release crates/dwarves/src/release.rs discover_members (parse manifests) → plan_waves (the leaf) → plan folds in can_skip/select_republish → ReleasePlan
f4 publish ACT crates/dwarves/src/release.rs publish_script (deps-first cargo publish argv per wave) → execute over the swappable PublishRunner seam (CargoPublishRunner real; recorder in tests). Halts on a failed publish; index-waits between waves. dwarves-owned
f2 deps crates/dwarves/src/depview.rs discover_repos → WorkspaceGraph::build_from_members (the leaf) → DepGraphLayout::build → suite_state_json (build order + layout)
CLI crates/dwarves/src/main.rs dwarves release <path> [--execute --allow-dirty --no-verify] · dwarves deps <dir> (behind --features release)
f3 facts line nornir version/dep/history FACTS + warehouse-KNOWLEDGE analyses (doctor semantic-blast, regression root-cause) stay in nornir (warehouse) — read over gRPC

Why it is shaped this way

Place in the nordisk constellation

This is the canonical §L5a (amended) case made real for dwarves: the release MATH lives in edda/nornir-release + nornir-depgraph, the ORCHESTRATION (release-DAG, publish cascade) is dwarves-owned, and the FACTS (published versions, warehouse history, doctor analyses) stay in nornir — read over gRPC, with no nornir crate dep (no cycle).

Deferred