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

nordisk/nornir

.nornir/assets/nordisk-constellation.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 760" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
  <defs>
    <linearGradient id="board" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#0b1c2e"/>
      <stop offset="1" stop-color="#06111d"/>
    </linearGradient>
    <linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#14384f"/>
      <stop offset="1" stop-color="#0e2a3e"/>
    </linearGradient>
    <linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#173d57"/>
      <stop offset="1" stop-color="#0c2438"/>
    </linearGradient>
    <linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#123448"/>
      <stop offset="1" stop-color="#0a2032"/>
    </linearGradient>
    <linearGradient id="core" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#1c5a7a"/>
      <stop offset="1" stop-color="#0e3650"/>
    </linearGradient>
    <linearGradient id="ice" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#e4f5ff" stop-opacity="0.95"/>
      <stop offset="0.55" stop-color="#bfe6ff" stop-opacity="0.6"/>
      <stop offset="1" stop-color="#bfe6ff" stop-opacity="0.08"/>
    </linearGradient>
  </defs>

  <!-- PCB substrate -->
  <rect x="0" y="0" width="1180" height="760" fill="url(#board)"/>
  <g stroke="#143a52" stroke-width="1">
    <line x1="0" y1="76" x2="1180" y2="76"/>
    <line x1="0" y1="712" x2="1180" y2="712"/>
    <line x1="0" y1="394" x2="1180" y2="394" stroke-dasharray="2 6"/>
  </g>
  <g fill="#16415c">
    <circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
    <circle cx="40" cy="732" r="2"/><circle cx="1140" cy="732" r="2"/>
  </g>

  <!-- title -->
  <text x="40" y="44" fill="#eaf6ff" font-size="22" font-weight="700">nordisk constellation</text>
  <text x="318" y="44" fill="#9fc9e0" font-size="15">nornir <tspan fill="#bfe6ff" font-weight="700">stands on</tspan> three nordisk crates &#183; and <tspan fill="#bfe6ff" font-weight="700">orchestrates</tspan> the sibling repos</text>

  <!-- legend -->
  <g font-size="12.5">
    <line x1="744" y1="60" x2="784" y2="60" stroke="#6fd3f5" stroke-width="3"/>
    <text x="792" y="64" fill="#cfe6f5">crate dep / data flow</text>
    <line x1="946" y1="60" x2="986" y2="60" stroke="#7fb0cc" stroke-width="2.5" stroke-dasharray="5 4"/>
    <text x="994" y="64" fill="#cfe6f5">poll / read (cheap)</text>
  </g>

  <!-- band labels -->
  <text x="40" y="100" fill="#7fa8c4" font-size="12" font-weight="700" letter-spacing="1.5">&#9660; CRATE DEPENDENCIES &#8212; what nornir is built from</text>
  <text x="40" y="424" fill="#7fa8c4" font-size="12" font-weight="700" letter-spacing="1.5">&#9660; ORCHESTRATOR &#8212; nornir over the monitored workspaces</text>

  <!-- ===================== nornir CORE chip (top centre) ===================== -->
  <rect x="468" y="120" width="244" height="120" rx="12" fill="url(#core)" stroke="#9fe0ff" stroke-width="2.5"/>
  <text x="590" y="152" fill="#eaf6ff" font-size="18" font-weight="700" text-anchor="middle">nornir</text>
  <text x="590" y="172" fill="#bfe6ff" font-size="10.5" text-anchor="middle">cargo companion &#183; lib + CLI + MCP + server</text>
  <text x="590" y="190" fill="#9fc9e0" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">codeberg nordisk/nornir &#183; v0.4.13</text>
  <text x="590" y="212" fill="#86b3cc" font-size="10" text-anchor="middle">Ur&#240;r warehouse &#183; Ver&#240;andi guard &#183; Skuld release</text>
  <text x="590" y="228" fill="#7fa8c4" font-size="9.5" text-anchor="middle">pure-Rust: no JVM, no SQL server, no C shellout</text>
  <!-- pins -->
  <rect x="520" y="240" width="6" height="8" fill="#6fd3f5"/>
  <rect x="654" y="240" width="6" height="8" fill="#6fd3f5"/>
  <rect x="462" y="176" width="6" height="8" fill="#6fd3f5"/>

  <!-- nornir -> three deps (ice traces fanning down) -->
  <g stroke="#6fd3f5" stroke-width="3" fill="none">
    <path d="M523 248 V270 H180 V300"/>
    <path d="M590 240 V310"/>
    <path d="M657 248 V272 H1000 V300"/>
  </g>
  <g fill="#bfecff"><circle cx="180" cy="300" r="4"/><circle cx="590" cy="310" r="4"/><circle cx="1000" cy="300" r="4"/></g>

  <!-- DEP 1: znippy-zoomies (left) -->
  <rect x="60" y="300" width="240" height="76" rx="10" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2"/>
  <text x="180" y="326" fill="#eaf6ff" font-size="14" font-weight="700" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">znippy-zoomies</text>
  <text x="180" y="343" fill="#9fc9e0" font-size="9.5" text-anchor="middle">gatling no-barrier worker-pool</text>
  <text x="180" y="357" fill="#bfe6ff" font-size="9.5" text-anchor="middle">fans deep-scan syn across all cores</text>
  <text x="180" y="370" fill="#7fa8c4" font-size="9" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">= "0.1.8" &#183; the GATLING + zero-copy law</text>

  <!-- DEP 2: nornir-testmatrix (centre, owned) -->
  <rect x="392" y="300" width="396" height="76" rx="10" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2"/>
  <text x="590" y="326" fill="#eaf6ff" font-size="14" font-weight="700" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">nornir-testmatrix</text>
  <text x="590" y="343" fill="#9fc9e0" font-size="9.5" text-anchor="middle">multi-aspect test engine &#8212; build &#183; unit &#183; doctest &#183; clippy &#183; fmt &#183; audit</text>
  <text x="590" y="357" fill="#bfe6ff" font-size="9.5" text-anchor="middle">rows &#8594; any TestSink &#183; pure std + serde (no iceberg/arrow/eframe)</text>
  <text x="590" y="370" fill="#7fa8c4" font-size="9" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">path = "crates/nornir-testmatrix" &#183; "0.1.0" &#183; nornir's own reusable crate</text>

  <!-- DEP 3: skade-katalog + skade (right) -->
  <rect x="880" y="300" width="240" height="76" rx="10" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2"/>
  <text x="1000" y="326" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">skade-katalog &#183; skade</text>
  <text x="1000" y="343" fill="#9fc9e0" font-size="9.5" text-anchor="middle">Iceberg catalog (redb) + writer/reader</text>
  <text x="1000" y="357" fill="#bfe6ff" font-size="9.5" text-anchor="middle">the warehouse backend &#8212; append &#183; scan</text>
  <text x="1000" y="370" fill="#7fa8c4" font-size="9" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">"0.1.7" + "0.4.9" (no-default) &#183; ../skade</text>

  <!-- "owns / publishes" note on testmatrix -->
  <path d="M712 176 H760 V310 H788" stroke="#7fb0cc" stroke-width="2" fill="none" stroke-dasharray="4 3"/>
  <text x="772" y="262" fill="#86b3cc" font-size="9.5" text-anchor="middle" transform="rotate(90 772 262)">owns + publishes</text>

  <!-- ===================== ORCHESTRATOR BAND ===================== -->
  <!-- registry + descriptor (left) -->
  <rect x="36" y="448" width="186" height="150" rx="10" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2.5"/>
  <text x="129" y="474" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">workspace + registry</text>
  <text x="129" y="492" fill="#9fc9e0" font-size="9.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">nornir-workspace.toml</text>
  <text x="129" y="506" fill="#86b3cc" font-size="9" text-anchor="middle">descriptor = where source comes from</text>
  <text x="129" y="520" fill="#86b3cc" font-size="9" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">[repos.x] git=&#8230; / path=&#8230; / branch</text>
  <text x="129" y="540" fill="#9fc9e0" font-size="9.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">registry (redb)</text>
  <text x="129" y="554" fill="#bfe6ff" font-size="9" text-anchor="middle">mode: monitored | pushed | external</text>
  <text x="129" y="568" fill="#86b3cc" font-size="9" text-anchor="middle">poll interval &#183; per-member sync state</text>
  <text x="129" y="586" fill="#7fa8c4" font-size="9" text-anchor="middle">server-global &#183; $NORNIR_ROOT</text>
  <rect x="222" y="478" width="6" height="8" fill="#6fd3f5"/>
  <rect x="222" y="540" width="6" height="8" fill="#7fb0cc"/>

  <!-- registry -> clone -->
  <g stroke="#6fd3f5" stroke-width="3" fill="none"><path d="M222 482 H280"/></g>
  <circle cx="280" cy="482" r="4" fill="#bfecff"/>
  <!-- poll (dashed) loop hint -->
  <path d="M222 544 H262 V610 H300" stroke="#7fb0cc" stroke-width="2.5" fill="none" stroke-dasharray="6 4"/>
  <text x="280" y="604" fill="#86b3cc" font-size="9.5" text-anchor="middle">ls-remote poll &#8212; HEAD changed?</text>

  <!-- git clone/fetch chip -->
  <rect x="280" y="448" width="170" height="104" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="365" y="474" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">git clone / fetch</text>
  <text x="365" y="492" fill="#9fc9e0" font-size="9.5" text-anchor="middle">pure-Rust gix + russh</text>
  <text x="365" y="506" fill="#86b3cc" font-size="9" text-anchor="middle">HTTPS (rustls) &#183; SSH (deploy key)</text>
  <text x="365" y="520" fill="#86b3cc" font-size="9" text-anchor="middle">no git/ssh subprocess, no libgit2</text>
  <text x="365" y="538" fill="#7fa8c4" font-size="9" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">&#8594; &lt;root&gt;/&lt;ws&gt;/git/&lt;member&gt;</text>
  <rect x="274" y="478" width="6" height="8" fill="#6fd3f5"/>
  <rect x="450" y="478" width="6" height="8" fill="#6fd3f5"/>

  <!-- clone -> republish -->
  <g stroke="#6fd3f5" stroke-width="3" fill="none"><path d="M450 482 H508"/></g>
  <circle cx="508" cy="482" r="4" fill="#bfecff"/>

  <!-- republish (knowledge scan) chip -->
  <rect x="508" y="448" width="186" height="104" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="601" y="474" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">republish hook</text>
  <text x="601" y="492" fill="#9fc9e0" font-size="9.5" text-anchor="middle">knowledge scan &#183; dep-graph</text>
  <text x="601" y="506" fill="#86b3cc" font-size="9" text-anchor="middle">syn fanned by znippy gatling</text>
  <text x="601" y="520" fill="#bfe6ff" font-size="9" text-anchor="middle">opt-in deep-scan: whole dep closure</text>
  <text x="601" y="538" fill="#7fa8c4" font-size="9" text-anchor="middle">through the server's single warehouse handle</text>
  <rect x="502" y="478" width="6" height="8" fill="#6fd3f5"/>
  <rect x="694" y="478" width="6" height="8" fill="#6fd3f5"/>

  <!-- republish -> warehouse -->
  <g stroke="#6fd3f5" stroke-width="3" fill="none"><path d="M694 482 H752"/></g>
  <circle cx="752" cy="482" r="4" fill="#bfecff"/>

  <!-- per-workspace warehouse chip -->
  <rect x="752" y="448" width="186" height="104" rx="11" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2.5"/>
  <text x="845" y="474" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">per-workspace warehouse</text>
  <text x="845" y="492" fill="#9fc9e0" font-size="9.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">&lt;root&gt;/&lt;ws&gt;/builds</text>
  <text x="845" y="506" fill="#bfe6ff" font-size="9" text-anchor="middle">Iceberg tables via skade + skade-katalog</text>
  <text x="845" y="520" fill="#86b3cc" font-size="9" text-anchor="middle">single-writer redb &#183; append-only</text>
  <text x="845" y="538" fill="#7fa8c4" font-size="9" text-anchor="middle">release_events &#183; dep_graph &#183; test_results &#183; &#8230;</text>
  <rect x="746" y="478" width="6" height="8" fill="#6fd3f5"/>
  <rect x="938" y="478" width="6" height="8" fill="#7fb0cc"/>

  <!-- warehouse -> viz (dashed read) -->
  <path d="M938 482 H996" stroke="#7fb0cc" stroke-width="2.5" fill="none" stroke-dasharray="6 4"/>
  <circle cx="996" cy="482" r="4" fill="#bfecff"/>

  <!-- viz chip -->
  <rect x="996" y="448" width="148" height="104" rx="10" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2"/>
  <text x="1070" y="474" fill="#eaf6ff" font-size="13" font-weight="700" text-anchor="middle">viz + MCP</text>
  <text x="1070" y="491" fill="#9fc9e0" font-size="9" text-anchor="middle">urdr-threads</text>
  <text x="1070" y="505" fill="#86b3cc" font-size="8.5" text-anchor="middle">swim-lane / member</text>
  <text x="1070" y="518" fill="#bfe6ff" font-size="8.5" text-anchor="middle">woven dep-graph threads</text>
  <text x="1070" y="534" fill="#7fa8c4" font-size="8.5" text-anchor="middle">gRPC thin clients (read)</text>

  <!-- ===================== GROUND RAIL: the constellation members ===================== -->
  <rect x="36" y="632" width="1108" height="56" rx="10" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2"/>
  <g fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5">
    <circle cx="76" cy="660" r="4"/><circle cx="1108" cy="660" r="4"/>
  </g>
  <text x="98" y="659" fill="#dff1ff" font-size="14" font-weight="700">monitored repos</text>
  <g font-family="'DejaVu Sans Mono', monospace" font-size="11.5" fill="#bfe6ff">
    <text x="260" y="659">holger</text>
    <text x="350" y="659" fill="#9fe0ff">skade</text>
    <text x="430" y="659" fill="#9fe0ff">znippy</text>
    <text x="528" y="659">knut</text>
    <text x="600" y="659" fill="#9fe0ff">facett</text>
    <text x="688" y="659">korp</text>
    <text x="752" y="659">njord</text>
  </g>
  <text x="98" y="678" fill="#7fa8c4" font-size="10" font-family="'DejaVu Sans Mono', monospace">each cloned + built into its own warehouse &#183; skade/znippy/facett are also crate deps (above)</text>
  <text x="852" y="659" fill="#86b3cc" font-size="10.5" text-anchor="start">git@codeberg.org:nordisk/&#8230;</text>
</svg>