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

nordisk/dwarves

.nornir/assets/holger-artifact-store.svg

<svg xmlns="http://www.w3.org/2000/svg" width="820" height="330" font-family="monospace" font-size="13">
  <style>
    .box{fill:#0f2233;stroke:#6fd3f5;stroke-width:1.5}
    .reuse{fill:#12331f;stroke:#7fe0a0;stroke-width:1.5}
    .t{fill:#dbeafe}.dim{fill:#9fb6c6}.acc{fill:#7fe0a0}
    .arr{stroke:#6fd3f5;stroke-width:1.5;fill:none;marker-end:url(#a)}
    .arr2{stroke:#7fe0a0;stroke-width:1.5;fill:none;marker-end:url(#b)}
  </style>
  <defs>
    <marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 Z" fill="#6fd3f5"/></marker>
    <marker id="b" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 Z" fill="#7fe0a0"/></marker>
  </defs>

  <text x="12" y="20" class="acc">dwarves → holger artifact store — REUSE the shared registry, never a local twin CAS</text>

  <!-- build step -->
  <rect class="box" x="12" y="46" width="180" height="66"/>
  <text x="24" y="68" class="t">a build step RANs</text>
  <text x="24" y="86" class="dim">produces 0..N artifacts</text>
  <text x="24" y="102" class="dim">StepOutcome.artifact_files</text>

  <!-- seam -->
  <rect class="box" x="250" y="46" width="200" height="66"/>
  <text x="262" y="68" class="t">ArtifactStore (seam)</text>
  <text x="262" y="86" class="dim">put_artifacts → id/manifest</text>
  <text x="262" y="102" class="dim">get(id) → bytes | manifest</text>

  <!-- holger -->
  <rect class="reuse" x="512" y="34" width="292" height="92"/>
  <text x="524" y="54" class="acc">holger (artifact registry)</text>
  <text x="524" y="74" class="dim">Holger::put / backend.put</text>
  <text x="524" y="90" class="dim">immutable, content-addressed</text>
  <text x="524" y="106" class="dim">SEALED VIA znippy (blake3)</text>

  <line class="arr" x1="192" y1="79" x2="248" y2="79"/>
  <line class="arr" x1="450" y1="79" x2="510" y2="79"/>

  <!-- action cache index -->
  <rect class="box" x="250" y="158" width="200" height="60"/>
  <text x="262" y="180" class="t">action cache (INDEX)</text>
  <text x="262" y="198" class="dim">input_id → artifact_id</text>
  <text x="262" y="212" class="dim">(1 file: its id; N: manifest id)</text>

  <line class="arr" x1="350" y1="112" x2="350" y2="156"/>
  <text x="356" y="138" class="dim">records the id: one artifact's</text>
  <text x="356" y="152" class="dim">content id, else the manifest's</text>

  <!-- cross-machine resolve -->
  <rect class="box" x="512" y="166" width="292" height="76"/>
  <text x="524" y="188" class="acc">a HIT on ANY machine</text>
  <text x="524" y="206" class="dim">cache: input_id → artifact_id</text>
  <text x="524" y="222" class="dim">get → bytes, or a manifest → every member</text>

  <line class="arr2" x1="658" y1="126" x2="658" y2="164"/>
  <line class="arr2" x1="450" y1="196" x2="510" y2="196"/>

  <text x="12" y="276" class="dim">No holger endpoint configured  ⇒  ArtifactStore = None  ⇒  NO-OP (pre-store behaviour, the label only).</text>
  <text x="12" y="296" class="dim">A store the forge can't reach NEVER fails a build (best-effort push; fall back to the runner's label).</text>
  <text x="12" y="316" class="dim">Off-by-default `holger` feature links holger-server-lib + znippy in-process; the default forge links none of it.</text>
</svg>