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

mikronova/modgunn

.nornir/assets/framework.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 430" font-family="-apple-system,Segoe UI,Roboto,sans-serif" font-size="14">
  <defs>
    <marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
      <path d="M0,0 L7,3 L0,6 Z" fill="#555"/>
    </marker>
  </defs>
  <text x="30" y="28" font-weight="700" font-size="16">modgunn → the shared COMMON FRAMEWORK (About · 🧰 Tools · lifecycle) — CONSUME, never twin (L5)</text>

  <!-- modgunn CLI surfaces (left column) -->
  <rect x="30" y="60" width="220" height="60" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="140" y="84" text-anchor="middle" font-weight="600">modgunn about</text>
  <text x="140" y="103" text-anchor="middle" fill="#555" font-size="12">about::identity / state_json</text>

  <rect x="30" y="140" width="220" height="70" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="140" y="164" text-anchor="middle" font-weight="600">modgunn tools / demo</text>
  <text x="140" y="183" text-anchor="middle" fill="#555" font-size="12">tools::entries → demo_feed_spec</text>
  <text x="140" y="200" text-anchor="middle" fill="#888" font-size="11">DemoAdvisoryFeed (generate → import → scan)</text>

  <rect x="30" y="230" width="220" height="70" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="140" y="254" text-anchor="middle" font-weight="600">modgunn service --unit</text>
  <text x="140" y="273" text-anchor="middle" fill="#555" font-size="12">service::modgunn_service_spec</text>
  <text x="140" y="290" text-anchor="middle" fill="#888" font-size="11">dedicated `modgunn` system user</text>

  <!-- always-compiled tag on About -->
  <text x="140" y="48" text-anchor="middle" fill="#2b7a2b" font-size="11" font-weight="600">always compiled (serde_json only — lean gate safe)</text>

  <!-- shared crates (right column) -->
  <rect x="470" y="150" width="220" height="60" rx="8" fill="#f3eefb" stroke="#6b2bb3" stroke-width="1.5"/>
  <text x="580" y="174" text-anchor="middle" font-weight="600">jera (edda)</text>
  <text x="580" y="193" text-anchor="middle" fill="#555" font-size="12">container::run_container + jobs ledger</text>

  <rect x="470" y="230" width="220" height="60" rx="8" fill="#f3eefb" stroke="#6b2bb3" stroke-width="1.5"/>
  <text x="580" y="254" text-anchor="middle" font-weight="600">skidbladnir</text>
  <text x="580" y="273" text-anchor="middle" fill="#555" font-size="12">service::{ServiceSpec,Lifecycle}</text>

  <!-- OCI engine (far right) -->
  <rect x="730" y="150" width="150" height="60" rx="8" fill="#fbf3ee" stroke="#b3662b" stroke-width="1.5"/>
  <text x="805" y="174" text-anchor="middle" font-weight="600">draupnir</text>
  <text x="805" y="193" text-anchor="middle" fill="#555" font-size="12">ONE OCI engine</text>

  <rect x="730" y="230" width="150" height="60" rx="8" fill="#fbf3ee" stroke="#b3662b" stroke-width="1.5"/>
  <text x="805" y="254" text-anchor="middle" font-weight="600">systemd/OpenRC</text>
  <text x="805" y="273" text-anchor="middle" fill="#555" font-size="12">rendered unit</text>

  <!-- edges -->
  <line x1="250" y1="175" x2="468" y2="180" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="360" y="168" text-anchor="middle" fill="#6b2bb3" font-size="11">ContainerSpec (job)</text>
  <line x1="250" y1="265" x2="468" y2="260" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="360" y="253" text-anchor="middle" fill="#6b2bb3" font-size="11">ServiceSpec</text>
  <line x1="690" y1="180" x2="728" y2="180" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <line x1="690" y1="260" x2="728" y2="260" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>

  <text x="30" y="345" fill="#888" font-size="12">No bespoke docker call · no thread::spawn · no hand-rolled unit — the demo is a jera job, the service is a skidbladnir spec.</text>
  <text x="30" y="368" fill="#888" font-size="12">Move-to-edda candidates: a shared About card (facett-about) + a `jera::jobs::workspace_sink` / generic ToolMenu (copied by korp+modgunn).</text>
  <text x="30" y="391" fill="#888" font-size="12">Lean-gate: jera + skidbladnir are optional (feature `framework`); `cargo tree --features scan` pulls 0 of them.</text>
</svg>