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

nordisk/dwarves

.nornir/menu-features.md

Menu ↔ feature ↔ CLI map (nornir + dwarves)

The CLI-mirrors-UI law: every UI tab/pane should have a text CLI verb that produces the same data. This maps each nornir viz tab and each dwarves pane to its mirroring nornir/dwarves verb, and flags the tabs that have no CLI verb yet (gaps to close).

nornir — 27 tabs

Tab What it does CLI verb (mirror) Owner Embeddable pane
Nornir root/server ops: workspace add/kill/populate/refresh + server status nornir root · workspace · serve ⇄ server ops (shared framework)
Timeline per-repo release timeline GAP: no CLI verb (viz-only) nornir —
DepGraph dependency graph nornir map · diagram nornir facett-view candidate
CallGraph call graph over symbols nornir graph nornir facett-view candidate
Architecture architecture wiring board nornir arch nornir —
Metro coverage CHAINS as transit lines nornir coverage nornir —
Helix release timelines as a time-helix GAP: no CLI verb (viz-only) nornir —
Bloodstream workspace as circulatory system GAP: no CLI verb (viz-only) nornir —
Funnel idea→plan-DAG intake + planner nornir funnel (prompt --llm, idea, history…) ⇄ dwarves hosts it — gRPC (nornir-funnel-embed) ✅
TimeTravel warehouse snapshot time-travel GAP (data via nornir warehouse) nornir —
LiveRun live run monitor GAP: no CLI verb nornir share w/ dwarves candidate
Release release-doctor / publish DAG nornir release nornir share candidate
Knowledge symbol/knowledge graph + lookup nornir knowledge nornir facett-view candidate
Warehouse warehouse tables/browser nornir warehouse nornir —
WarehouseDeck multi-pane warehouse wall GAP (composite of nornir warehouse) nornir —
Mcp MCP server status served by nornir-mcp bin (not a nornir subcmd) nornir —
Search semantic/symbol search nornir mimir · knowledge (soft) nornir —
Gates release/completeness gates nornir guard (soft) nornir —
Bench benchmark runs + mashups nornir bench edda (nornir-bench) engine in edda
Test test-matrix / coverage nornir test edda (nornir-testmatrix) engine in edda
Leaderboard bench leaderboard GAP (part of nornir bench) edda —
Security modgunn VERDICT scan nornir security modgunn cross-app candidate
⚒ Dwarves build runner + brokkr forge = the pipeline nornir build · nornir brokkr ⚒ dwarves nornir should host dwarves — gRPC (dwarves daemonizes: dwarves serve + durable cron ✅ — daemonize-and-durable-cron.md)
📦 Holger in-process registry pane no nornir holger verb (holger has own CLI) holger nornir hosts holger — direct (holger_embed.rs) ✅
Manual docs/manual browser nornir docs · dwarves docs render/check/book (assembly engine moved to edda nornir-docgen; dwarves renders, nornir keeps the doc_exports history/search) nornir ⇄ dwarves —
🤖 Claude direct Claude chat pane GAP: no CLI verb (interactive) ⇄ needs facett-claude extraction → any host
🧠 Models LLM/embed model download (as jobs) GAP: no CLI verb nornir/shared —

Gaps — tabs with NO mirroring CLI verb (close these)

Timeline · Helix · Bloodstream · TimeTravel · LiveRun · WarehouseDeck · Leaderboard · Claude · Models (9 clear gaps). Soft/served-elsewhere: Mcp (via nornir-mcp bin), Holger (holger's own CLI), Search→mimir, Gates→guard.

dwarves — small on purpose

Real CLI today (SHIPPED): dwarves doctor · pipelines · validate · plan · run · trigger · pipeline · history · badge · repo · vault · login · whoami · logout · serve · release · crate-release · workspace-release · deps · holger-build · agents · agent · saga — a real thin/fat clap CLI (--server/$DWARVES_SERVER routes every verb to dwarves-server over gRPC; else FAT against a repo's brokkr.toml). The D2 parity item is done (badge renders a pipeline's latest-run status SVG via the Badge RPC; release/deps CONSUME the shared nornir-release/nornir-depgraph edda leaves — deps-first publish waves + can_skip_republish + the cross-repo dep graph — behind --features release). crate-release/workspace-release are the standalone release-doctor cascade (DRY-RUN default; --execute opt-in). pipeline is the AGENT-callable half of the CI/CD wizard (generate a *.runa.ron from BUILD·TEST·DEPLOY·TRIGGER, run it — DRY by default). vault keeps secrets encrypted-at-rest; login/whoami/logout are OIDC SSO (RFC 8628 device-authorization) via the SHARED nornir-auth-client (edda) — no hand-rolled auth. holger-build <path> resolves the holger build target — the pipeline that builds holger's three deployment executables (embedded·mini·full) — against holger's declared build-space (crate::holger_build, reusing nornir-build-thing); compile-free plan check, exit 0 iff all three tiers resolve.

Panes — the dwarves-gui tabbed shell (native + wasm) now ships 17 tabs (full list + data paths in three-pane-shell.md): Warehouse · Forge · Pipeline · CI/CD · Builds · Funnel · Claude · Jera · Tools · Status · Release · Benches · Binary · Coderoom · Saga · Settings · Profile. A warehouse-selector header re-binds every warehouse-bound tab on change. Highlights:

Pane Mirror CLI verb State
⚒ Forge (owns it) dwarves run · plan · trigger · history · badge ✅ LIVE thin gRPC to dwarves-server (run history + DAG, auto-polls)
CI/CD (owns it) dwarves pipeline … ✅ the quick-setup wizard — same generator/runner as the CLI
Funnel ⇄ (guest of nornir) mirrors nornir funnel ✅ always embedded / in-process (renders with nornir-server DOWN, no network dial); host-only — the UI knows no nornir address, so there is no $NORNIR_SERVER thin path
Jera (shared) jera ledger ✅ facett_zoneui::JeraCentral over the jera ledger, read live (fixture fallback), per-job zone column
Status (owns it) dwarves badge <pipeline> ✅ badge health-wall reusing brokkr::badge; robot-tested
🤖 Claude ⇄ (shared) (interactive; no verb) ✅ facett-claude over the shared nornir-claude edda leaf — offline stub default, live HTTP behind --features claude-http

Bottom line: the thin/fat CLI (D2) and the dwarf.v1 server (D1) have LANDED, the dwarves-gui shell has grown to the full 17-tab cockpit, and "CLI mirrors UI" holds for the Forge/CI-CD panes. The remaining gap is repointing the remaining fixture-fed tabs onto live server data.