Build Thing pane: plan (planned, not built)
Status: a plan for the owner to pick from. Nothing here is built yet. 2026-11-08.
1. The problem
The Build Thing tooling works: edda's nornir-build-thing (0.3.0 on crates.io), the kernel rows generated from evidence (kernel requires-from-join), the call-to-option map (syscall-map/2), and tunnr's evidence control (cargo xtask evidence --check, a CI gate since 2026-11-07). The bench's three node kernels were built through it.
The pane in the dwarves viewer does not explain any of that. Today it is a scene (dwarves-gui/src/build_thing_scene.rs, build_scene.rs, build_steps.rs, build_graph.rs, about 6,500 lines): the recipe search and a build graph (a node per variant and feature), a menu for the selected node, and a step log with the guest's screen. It is fun to look at, but the owner's verdict is that he does not understand it. It shows structure; it does not answer the questions a person opens it with.
2. What the pane must answer
Four questions, per product (Gunnar, Holger, tunnr node, Heimdall, ...), in this order:
| # | Question | What it shows | Where the data comes from |
| 1 | What gets built? | The recipe as a tree: product → variant → repo@commit, crate, features, target, image digest | The recipe (.nornir recipe files and edda's recipe schema), resolved like --build X does |
| 2 | Why is each kernel option on or off? | One row per option: on/off, and the evidence behind it ("MEMBARRIER: needed by membarrier, seen in iggy-server's learned profile") or "default" |
The kernel-needs evidence and the rows kernel requires-from-join wrote; syscall-map/2 for call → option |
| 3 | Did the last build pass? | Each gate with a green/red mark and its time: the build, the tests, the evidence receipt, the SLSA attestation (signed by which key) | Receipts (EVIDENCE-RECEIPT.json), the gate outputs, attestations/ |
| 4 | What changed since the last release? | A diff: commits per repo, features added or removed, kernel options flipped (with their evidence) | The release ledger (nornir-release-ledger) and the previous receipt |
Every answer is text and tables first. A picture is added only where it says more than a table (the dependency graph between variants, folded by default).
3. Layout
┌ product picker ─────────────────────────────────────────────────────────┐
│ [tunnr node ▾] last build: green · 2026-11-07 14:20Z · receipt e8db242c │
├─ tabs ──────────────────────────────────────────────────────────────────┤
│ What gets built │ Kernel options │ Gates │ Changes │ (Graph) │
├─────────────────────────────────────────────────────────────────────────┤
│ the selected tab: a table or tree; a row opens its detail on the right │
│ (the evidence, the log lines, the commit list) │
└─────────────────────────────────────────────────────────────────────────┘
- The status line at the top answers "is it green?" before anything is clicked.
- The current build graph and constellation stay, as the last tab ("Graph") for those who want them. Nothing existing is deleted until the new tabs cover it.
- The step log and the guest's screen move under "Gates", opened from the build gate's row.
4. Steps (each its own merge, test first)
- Data first, no UI: a
build-thing explain <product>verb (dwarves, thin over the forge) that prints the four answers as text and JSON. The pane only renders that JSON, so the CLI and the pane always agree (the UI stays a thin layer). - Tab "What gets built" (the recipe tree) and the status line.
- Tab "Kernel options" with the evidence column.
- Tab "Gates", with the step log and the guest screen moved into it.
- Tab "Changes" from the release ledger.
- The old graph as the last tab; remove what the new tabs replaced.
5. Tests
- The verb: golden output for the tunnr node and Heimdall recipes (text and JSON).
- The pane: robot tests (as the other dwarves panes) that open each tab and find the expected rows, e.g. "MEMBARRIER" with its evidence on the tunnr node.
- Nothing in the pane computes: it renders the verb's JSON.
6. Open questions for the owner
- Which product should the first version show (the tunnr node is the best-covered today)?
- Keep the constellation picture at all, or drop it once the tabs exist?
- Should the pane also start a build (a ▶ per variant), or stay read-only at first?