Gunnar

mikronova/draupnir

.nornir/assets/oci-image-build-extract.svg

<svg xmlns="http://www.w3.org/2000/svg" width="720" height="300" viewBox="0 0 720 300" font-family="ui-sans-serif,system-ui,sans-serif" font-size="12">
  <style>
    .box{fill:#0f1720;stroke:#2b3948;stroke-width:1.5;rx:8}
    .lbl{fill:#cfe3f5}.dim{fill:#7fa0b8}.acc{fill:#6fd3f5}
    .eng{fill:#12202b;stroke:#3a6d86}
    .arr{stroke:#6fd3f5;stroke-width:1.6;fill:none;marker-end:url(#a)}
    .t{fill:#e6f2fb}.mono{font-family:ui-monospace,monospace;fill:#a9c7dd;font-size:11px}
  </style>
  <defs><marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3.2" orient="auto">
    <path d="M0,0 L8,3.2 L0,6.4 Z" fill="#6fd3f5"/></marker></defs>
  <rect width="720" height="300" fill="#0a1017"/>
  <text x="16" y="26" class="t" font-size="14" font-weight="700">draupnir OCI · build_image + extract_path  <tspan class="dim" font-weight="400">(kills the podman build/cp twin)</tspan></text>

  <!-- BUILD row -->
  <text x="16" y="58" class="acc" font-weight="700">build_image</text>
  <rect class="box" x="16" y="70" width="120" height="46" rx="8"/>
  <text x="30" y="90" class="lbl">context dir</text><text x="30" y="106" class="mono">Containerfile+…</text>
  <rect class="box" x="176" y="70" width="110" height="46" rx="8"/>
  <text x="190" y="90" class="lbl">context_tar</text><text x="190" y="106" class="mono">(pure, tested)</text>
  <rect class="box eng" x="326" y="70" width="150" height="46" rx="8"/>
  <text x="340" y="90" class="lbl">Docker.build_image</text><text x="340" y="106" class="mono">body_full(tar)</text>
  <rect class="box" x="516" y="70" width="120" height="46" rx="8"/>
  <text x="530" y="96" class="lbl">image :tag</text>
  <path class="arr" d="M136,93 L174,93"/>
  <path class="arr" d="M286,93 L324,93"/>
  <path class="arr" d="M476,93 L514,93"/>

  <!-- EXTRACT row -->
  <text x="16" y="168" class="acc" font-weight="700">extract_path</text>
  <rect class="box" x="16" y="180" width="120" height="46" rx="8"/>
  <text x="30" y="200" class="lbl">image :tag</text><text x="30" y="216" class="mono">/out</text>
  <rect class="box eng" x="176" y="180" width="150" height="46" rx="8"/>
  <text x="190" y="200" class="lbl">create (no start)</text><text x="190" y="216" class="mono">throwaway ctr</text>
  <rect class="box eng" x="366" y="180" width="160" height="46" rx="8"/>
  <text x="380" y="200" class="lbl">download_from_ctr</text><text x="380" y="216" class="mono">tar stream</text>
  <rect class="box" x="566" y="180" width="120" height="46" rx="8"/>
  <text x="580" y="200" class="lbl">unpack →</text><text x="580" y="216" class="mono">host_dest</text>
  <path class="arr" d="M136,203 L174,203"/>
  <path class="arr" d="M326,203 L364,203"/>
  <path class="arr" d="M526,203 L564,203"/>
  <!-- build image feeds extract -->
  <path class="arr" d="M576,116 C576,150 100,150 76,178"/>
  <text x="300" y="146" class="dim">built image → extract its artifacts</text>

  <text x="16" y="266" class="dim">zero-shell · one bollard engine (reused) · BootSpec unchanged · tar rides backend-oci</text>
  <text x="16" y="286" class="dim">honest Error::Backend when the podman/Docker socket is unreachable — never a fake image or partial extract</text>
</svg>