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

nordisk/holger

docs/v2/img/the-ron-example-flow.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2168 1801" width="2168" height="1801" role="img" aria-label="artifact flow" font-family="'DejaVu Sans','Segoe UI',system-ui,sans-serif" data-level="3">
<style>
  .rule{stroke:#143a52;stroke-width:1}
  .dot{fill:#16415c}
  .title{fill:#eaf6ff;font-size:21px;font-weight:700}
  .sub{fill:#9fc9e0;font-size:12.5px}
  .bandlabel{fill:#7fa8c4;font-size:11px;letter-spacing:.06em}
  .card{stroke-width:1.6}
  .card.repo{fill:url(#chip);stroke:#5aa6cf}
  .card.group{fill:url(#slot);stroke:#5aa6cf;stroke-dasharray:6 3}
  .card.remote{fill:url(#slot);stroke:#7fb0cc}
  .card.storage{fill:url(#slot);stroke:#4f8fae}
  .card.door{fill:url(#rail);stroke:#7fc8ea}
  .card.mirrorsrc{fill:url(#rail);stroke:#6fd3f5;stroke-width:2.2}
  .card.source{fill:url(#rail);stroke:#c9a86f;stroke-width:2}
  .card.step{fill:url(#chip);stroke:#b48cf0;stroke-width:1.8}
  .card.gate{fill:url(#slot);stroke:#e0b453;stroke-width:1.8;stroke-dasharray:6 3}
  .card.console{fill:url(#rail);stroke:#8fb8ff}
  .card.front{fill:url(#rail);stroke:#8fb8ff;stroke-width:2}
  .card.main{fill:url(#chip);stroke:#6fd3f5;stroke-width:2.6}
  .card.twin{fill:url(#chip);stroke:#6fd3f5;stroke-width:1.8}
  .card.downstream{fill:url(#rail);stroke:#8ef0b4;stroke-width:2.2}
  .card.consumer{fill:url(#slot);stroke:#7fb0cc;stroke-dasharray:4 4}
  .card.none{fill:url(#slot);stroke:#56687a;stroke-width:1.4;stroke-dasharray:4 4}
  .card.good{stroke:#5fd38a}
  .card.warn{stroke:#e0b453;stroke-width:2.2}
  .card.bad{stroke:#f07878;stroke-width:2.6}
  .name{fill:#eaf6ff;font-size:14.5px;font-weight:700}
  .kindword{fill:#6f9fbb;font-size:9px;letter-spacing:.11em}
  .stage{fill:#bfe6ff;font-size:10px;font-weight:700;letter-spacing:.04em}
  .detail{fill:#9fc9e0;font-size:10.5px;font-family:'DejaVu Sans Mono',ui-monospace,SFMono-Regular,Menlo,monospace}
  .sep{stroke:#2a5b78;stroke-width:1}
  .rowlabel{fill:#86b3cc;font-size:10.5px}
  .factvalue{fill:#bfe6ff;font-size:10.5px;font-family:'DejaVu Sans Mono',ui-monospace,SFMono-Regular,Menlo,monospace}
  .rowvalue{fill:#eaf6ff;font-size:12px;font-weight:700}
  .factvalue.unknown,.rowvalue.unknown{fill:#6f9fbb;font-weight:400;font-style:italic}
  .edge{fill:none;stroke:#7fb0cc;stroke-width:1.6}
  .edge.promote{stroke:#6fd3f5;stroke-width:3}
  .edge.pull{stroke:#7fb0cc;stroke-width:2;stroke-dasharray:5 4}
  .edge.mirror{stroke:#8ef0b4;stroke-width:3}
  .edge.member{stroke:#4f8fae;stroke-width:1.4;stroke-dasharray:2 4}
  .edge.stores{stroke:#4f8fae;stroke-width:1.6}
  .edge.serves{stroke:#4f8fae;stroke-width:1.6}
  .edge.ingests{stroke:#4f8fae;stroke-width:1.6;stroke-dasharray:8 3}
  .edge.feeds{stroke:#c9a86f;stroke-width:2.4}
  .edge.checks{stroke:#b48cf0;stroke-width:1.6;stroke-dasharray:3 3}
  .edge.consoleedge{stroke:#8fb8ff;stroke-width:1.6}
  .edge.fronts{stroke:#8fb8ff;stroke-width:2.4}
  .edge.follows{stroke:#6fd3f5;stroke-width:2.4;stroke-dasharray:7 3}
  .edge.syncs{stroke:#8ef0b4;stroke-width:3}
  .edge.served{stroke:#c9a86f;stroke-width:2;stroke-dasharray:6 4}
  .edgelabel{fill:#cfe6f5;font-size:10px}
  .edgelabel.unknown{fill:#6f9fbb;font-style:italic}
  .head.promote{fill:#6fd3f5}
  .head.pull{fill:#7fb0cc}
  .head.mirror{fill:#8ef0b4}
  .head.member,.head.stores,.head.serves,.head.ingests{fill:#4f8fae}
  .head.feeds,.head.served{fill:#c9a86f}
  .head.checks{fill:#b48cf0}
  .head.consoleedge,.head.fronts{fill:#8fb8ff}
  .head.follows{fill:#6fd3f5}
  .head.syncs{fill:#8ef0b4}
  .legendtext{fill:#cfe6f5;font-size:11px}
  .pill{fill:#0b1c2e;stroke:#1d4560;stroke-width:1}
  .card.frame{fill:#0a1a2a;fill-opacity:.55;stroke-width:2.4}
  .card.mirror{fill:url(#chip);stroke:#6fd3f5;stroke-width:1.6;stroke-dasharray:7 3}
  .port{fill:#06111d;stroke:#eaf6ff;stroke-width:1.8}
  .card.diode{fill:url(#slot);stroke:#f0a85f;stroke-width:2.2;stroke-dasharray:9 4}
  .card.inbox{fill:url(#rail);stroke:#f0a85f;stroke-width:2.2}
  .edge.export{stroke:#f0a85f;stroke-width:3;stroke-dasharray:12 5}
  .edge.carries{stroke:#f0a85f;stroke-width:3;stroke-dasharray:12 5}
  .head.export,.head.carries{fill:#f0a85f}
  .edge.silent{stroke-dasharray:8 6;opacity:.75}
  .edge.unknown{stroke:#7a8794}
  .hit{fill:transparent}
  .navlink{fill:#8fd8ff;font-size:13px;font-weight:700;text-decoration:underline}
  a .card{cursor:pointer}
</style>
<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>
<marker id="head-feeds" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head feeds" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-pull" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head pull" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-mirror" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head mirror" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-promote" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head promote" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-checks" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head checks" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-member" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head member" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-stores" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head stores" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-serves" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head serves" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-ingests" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head ingests" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-consoleedge" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head consoleedge" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-fronts" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head fronts" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-follows" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head follows" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-syncs" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head syncs" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-export" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head export" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-carries" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head carries" d="M0 0 L8 4 L0 8 z"/></marker>
<marker id="head-served" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path class="head served" d="M0 0 L8 4 L0 8 z"/></marker>
</defs>
<rect x="0" y="0" width="2168" height="1801" fill="url(#board)"/>
<line class="rule" x1="0" y1="92" x2="2168" y2="92"/>
<circle class="dot" cx="12" cy="12" r="2"/>
<circle class="dot" cx="2156" cy="12" r="2"/>
<circle class="dot" cx="12" cy="1789" r="2"/>
<circle class="dot" cx="2156" cy="1789" r="2"/>
<text class="title" x="32" y="36">artifact flow</text>
<a href="flow?open="><text class="navlink" data-zoom="flow?open=" x="2136" y="36" text-anchor="end">fold everything</text></a>
<text class="sub" x="32" y="56">level 3 · the full RON · promotion ladder “intake” · drawn from the RON · audit is off: what it would count reads “not recorded”</text>
<line class="edge feeds" data-legend="feeds" x1="32.0" y1="76.0" x2="62.0" y2="76.0" marker-end="url(#head-feeds)"/>
<text class="legendtext" x="70.0" y="80.0">source feeds</text>
<line class="edge promote" data-legend="promote" x1="158.8" y1="76.0" x2="188.8" y2="76.0" marker-end="url(#head-promote)"/>
<text class="legendtext" x="196.8" y="80.0">promotion rung</text>
<line class="edge checks" data-legend="checks" x1="297.4" y1="76.0" x2="327.4" y2="76.0" marker-end="url(#head-checks)"/>
<text class="legendtext" x="335.4" y="80.0">step / gate checks</text>
<line class="edge stores" data-legend="stores" x1="459.6" y1="76.0" x2="489.6" y2="76.0" marker-end="url(#head-stores)"/>
<text class="legendtext" x="497.6" y="80.0">bytes rest in</text>
<line class="edge serves" data-legend="serves" x1="592.3" y1="76.0" x2="622.3" y2="76.0" marker-end="url(#head-serves)"/>
<text class="legendtext" x="630.3" y="80.0">served through</text>
<g transform="translate(0 0.0)">
<g data-node="estate:main" data-kind="main" data-open="open">
<rect class="card frame main" x="32.0" y="378.0" width="2040.0" height="1357.0" rx="14"/>
<a href="flow?open=">
<rect class="hit" x="32.0" y="378.0" width="2040.0" height="137.0"/>
<text class="kindword" x="45.0" y="395.0">HOLGER SERVER</text>
<text class="stage" x="2059.0" y="395.0" text-anchor="end">▾ fold</text>
<text class="name" x="45.0" y="413.0">this holger</text>
<text class="detail" x="45.0" y="425.0">holger-server</text>
</a>
<line class="sep" x1="45.0" y1="515.0" x2="2059.0" y2="515.0"/>
<text class="rowlabel" x="45.0" y="442.0">state</text>
<text class="rowvalue" data-row="estate:main/state" x="251.0" y="442.0" text-anchor="end">answering</text>
<text class="rowlabel" x="45.0" y="460.0">artifacts</text>
<text class="rowvalue unknown" data-row="estate:main/artifacts" x="251.0" y="460.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="45.0" y="478.0">waiting for approval</text>
<text class="rowvalue unknown" data-row="estate:main/waiting for approval" x="251.0" y="478.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="45.0" y="496.0">quarantined</text>
<text class="rowvalue unknown" data-row="estate:main/quarantined" x="251.0" y="496.0" text-anchor="end">not recorded</text>
</g>
<text class="bandlabel" data-band="Flow" x="60" y="533.0">THE FLOW · declared in the RON: sources, repositories, the ladder, the doors</text>
<text class="bandlabel" data-band="Chain" x="60" y="847.0">THE INTAKE CHAIN · declared steps and gates (steps: / promotion.intake)</text>
<text class="bandlabel" data-band="Storage" x="60" y="1549.0">WHERE THE BYTES REST · storage_endpoints</text>
<path class="edge stores" data-edge="incoming-&gt;storage:disk" data-kind="stores" d="M304.0 663.0 L320.0 663.0 L320.0 1563.0 L108.8 1563.0 L108.8 1579.0" marker-end="url(#head-stores)"/>
<path class="edge serves" data-edge="incoming-&gt;door:door" data-kind="serves" d="M304.0 663.0 L331.0 663.0 L331.0 551.0 L1513.0 551.0 L1513.0 563.0" marker-end="url(#head-serves)"/>
<path class="edge stores" data-edge="quarantine-&gt;storage:disk" data-kind="stores" d="M408.0 672.0 L392.0 672.0 L392.0 1555.0 L157.6 1555.0 L157.6 1579.0" marker-end="url(#head-stores)"/>
<path class="edge serves" data-edge="quarantine-&gt;door:door" data-kind="serves" d="M652.0 672.0 L679.0 672.0 L679.0 542.0 L1574.0 542.0 L1574.0 563.0" marker-end="url(#head-serves)"/>
<path class="edge stores" data-edge="approved-&gt;storage:disk" data-kind="stores" d="M756.0 663.0 L740.0 663.0 L740.0 1547.0 L206.4 1547.0 L206.4 1579.0" marker-end="url(#head-stores)"/>
<path class="edge serves" data-edge="approved-&gt;door:door" data-kind="serves" d="M1000.0 663.0 L1027.0 663.0 L1027.0 533.0 L1635.0 533.0 L1635.0 563.0" marker-end="url(#head-serves)"/>
<path class="edge stores" data-edge="production-&gt;storage:disk" data-kind="stores" d="M1104.0 663.0 L1088.0 663.0 L1088.0 1539.0 L255.2 1539.0 L255.2 1579.0" marker-end="url(#head-stores)"/>
<path class="edge serves" data-edge="production-&gt;door:door" data-kind="serves" d="M1348.0 663.0 C1400.0 663.0 1400.0 636.0 1452.0 636.0" marker-end="url(#head-serves)"/>
<path class="edge promote" data-edge="incoming-&gt;quarantine" data-kind="promote" d="M304.0 663.0 C356.0 663.0 356.0 672.0 408.0 672.0" marker-end="url(#head-promote)"/>
<path class="edge promote" data-edge="quarantine-&gt;approved" data-kind="promote" d="M652.0 672.0 C704.0 672.0 704.0 663.0 756.0 663.0" marker-end="url(#head-promote)"/>
<path class="edge promote" data-edge="approved-&gt;production" data-kind="promote" d="M1000.0 663.0 C1052.0 663.0 1052.0 663.0 1104.0 663.0" marker-end="url(#head-promote)"/>
<path class="edge feeds" data-edge="source:team-&gt;incoming" data-kind="feeds" d="M154.0 241.0 L154.0 350.0 L1052.0 350.0 L1052.0 378.0 L1052.0 549.0 L182.0 549.0 L182.0 563.0" marker-end="url(#head-feeds)"/>
<path class="edge feeds" data-edge="source:vendor-&gt;incoming" data-kind="feeds" d="M450.0 286.0 L450.0 350.0 L1052.0 350.0 L1052.0 378.0 L1052.0 544.0 L182.0 544.0 L182.0 563.0" marker-end="url(#head-feeds)"/>
<path class="edge checks" data-edge="step:scan · license-&gt;quarantine" data-kind="checks" d="M652.0 968.0 L668.0 968.0 L668.0 797.0 L469.0 797.0 L469.0 781.0" marker-end="url(#head-checks)"/>
<path class="edge checks" data-edge="step:scan · sbom-&gt;quarantine" data-kind="checks" d="M652.0 1180.0 L668.0 1180.0 L668.0 805.0 L530.0 805.0 L530.0 781.0" marker-end="url(#head-checks)"/>
<path class="edge checks" data-edge="step:approval-&gt;approved" data-kind="checks" d="M1000.0 959.0 L1016.0 959.0 L1016.0 779.0 L878.0 779.0 L878.0 763.0" marker-end="url(#head-checks)"/>
<path class="edge checks" data-edge="gate:rules · the floor-&gt;quarantine" data-kind="checks" d="M652.0 1392.0 L668.0 1392.0 L668.0 813.0 L591.0 813.0 L591.0 781.0" marker-end="url(#head-checks)"/>
<g data-node="source:team" data-kind="source">
<rect class="card source" x="32.0" y="158.0" width="244.0" height="83.0" rx="10"/>
<text class="kindword" x="45.0" y="175.0">SOURCE</text>
<text class="name" x="45.0" y="193.0">team</text>
<text class="detail" x="45.0" y="205.0">upload</text>
<text class="rowlabel" x="45.0" y="222.0">fetched</text>
<text class="rowvalue unknown" data-row="source:team/fetched" x="263.0" y="222.0" text-anchor="end">not recorded</text>
</g>
<g data-node="source:vendor" data-kind="source">
<rect class="card source" x="328.0" y="158.0" width="244.0" height="128.0" rx="10"/>
<text class="kindword" x="341.0" y="175.0">SOURCE</text>
<text class="name" x="341.0" y="193.0">vendor</text>
<text class="detail" x="341.0" y="205.0">upload</text>
<text class="rowlabel" x="341.0" y="222.0">importers</text>
<text class="factvalue" data-fact="source:vendor/importers" x="559.0" y="222.0" text-anchor="end">ci</text>
<text class="rowlabel" x="341.0" y="240.0">gates</text>
<text class="factvalue" data-fact="source:vendor/gates" x="559.0" y="240.0" text-anchor="end">…ium, deny AGPL-3.0-only</text>
<line class="sep" x1="341.0" y1="249.0" x2="559.0" y2="249.0"/>
<text class="rowlabel" x="341.0" y="267.0">fetched</text>
<text class="rowvalue unknown" data-row="source:vendor/fetched" x="559.0" y="267.0" text-anchor="end">not recorded</text>
</g>
<g data-node="incoming" data-kind="repo">
<rect class="card repo" x="60.0" y="563.0" width="244.0" height="200.0" rx="10"/>
<text class="kindword" x="73.0" y="580.0">REPOSITORY</text>
<text class="stage" x="291.0" y="580.0" text-anchor="end">INCOMING</text>
<text class="name" x="73.0" y="598.0">incoming</text>
<text class="detail" x="73.0" y="610.0">raw</text>
<text class="rowlabel" x="73.0" y="627.0">bytes at</text>
<text class="factvalue" data-fact="incoming/bytes at" x="291.0" y="627.0" text-anchor="end">…var/lib/holger/incoming</text>
<line class="sep" x1="73.0" y1="636.0" x2="291.0" y2="636.0"/>
<text class="rowlabel" x="73.0" y="654.0">artifacts</text>
<text class="rowvalue unknown" data-row="incoming/artifacts" x="291.0" y="654.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="73.0" y="672.0">bytes stored</text>
<text class="rowvalue unknown" data-row="incoming/bytes stored" x="291.0" y="672.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="73.0" y="690.0">fetches 24 h</text>
<text class="rowvalue unknown" data-row="incoming/fetches 24 h" x="291.0" y="690.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="73.0" y="708.0">fetches total</text>
<text class="rowvalue unknown" data-row="incoming/fetches total" x="291.0" y="708.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="73.0" y="726.0">sent 24 h</text>
<text class="rowvalue unknown" data-row="incoming/sent 24 h" x="291.0" y="726.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="73.0" y="744.0">sent total</text>
<text class="rowvalue unknown" data-row="incoming/sent total" x="291.0" y="744.0" text-anchor="end">not recorded</text>
</g>
<g data-node="quarantine" data-kind="repo">
<rect class="card repo" x="408.0" y="563.0" width="244.0" height="218.0" rx="10"/>
<text class="kindword" x="421.0" y="580.0">REPOSITORY</text>
<text class="stage" x="639.0" y="580.0" text-anchor="end">QUARANTINE</text>
<text class="name" x="421.0" y="598.0">quarantine</text>
<text class="detail" x="421.0" y="610.0">raw</text>
<text class="rowlabel" x="421.0" y="627.0">bytes at</text>
<text class="factvalue" data-fact="quarantine/bytes at" x="639.0" y="627.0" text-anchor="end">…r/lib/holger/quarantine</text>
<text class="rowlabel" x="421.0" y="645.0">floor scans</text>
<text class="factvalue" data-fact="quarantine/floor scans" x="639.0" y="645.0" text-anchor="end">… vulnerability, secrets</text>
<line class="sep" x1="421.0" y1="654.0" x2="639.0" y2="654.0"/>
<text class="rowlabel" x="421.0" y="672.0">artifacts</text>
<text class="rowvalue unknown" data-row="quarantine/artifacts" x="639.0" y="672.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="421.0" y="690.0">bytes stored</text>
<text class="rowvalue unknown" data-row="quarantine/bytes stored" x="639.0" y="690.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="421.0" y="708.0">fetches 24 h</text>
<text class="rowvalue unknown" data-row="quarantine/fetches 24 h" x="639.0" y="708.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="726.0">fetches total</text>
<text class="rowvalue unknown" data-row="quarantine/fetches total" x="639.0" y="726.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="744.0">sent 24 h</text>
<text class="rowvalue unknown" data-row="quarantine/sent 24 h" x="639.0" y="744.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="762.0">sent total</text>
<text class="rowvalue unknown" data-row="quarantine/sent total" x="639.0" y="762.0" text-anchor="end">not recorded</text>
</g>
<g data-node="approved" data-kind="repo">
<rect class="card repo" x="756.0" y="563.0" width="244.0" height="200.0" rx="10"/>
<text class="kindword" x="769.0" y="580.0">REPOSITORY</text>
<text class="stage" x="987.0" y="580.0" text-anchor="end">APPROVED</text>
<text class="name" x="769.0" y="598.0">approved</text>
<text class="detail" x="769.0" y="610.0">raw</text>
<text class="rowlabel" x="769.0" y="627.0">bytes at</text>
<text class="factvalue" data-fact="approved/bytes at" x="987.0" y="627.0" text-anchor="end">…var/lib/holger/approved</text>
<line class="sep" x1="769.0" y1="636.0" x2="987.0" y2="636.0"/>
<text class="rowlabel" x="769.0" y="654.0">artifacts</text>
<text class="rowvalue unknown" data-row="approved/artifacts" x="987.0" y="654.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="769.0" y="672.0">bytes stored</text>
<text class="rowvalue unknown" data-row="approved/bytes stored" x="987.0" y="672.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="769.0" y="690.0">fetches 24 h</text>
<text class="rowvalue unknown" data-row="approved/fetches 24 h" x="987.0" y="690.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="769.0" y="708.0">fetches total</text>
<text class="rowvalue unknown" data-row="approved/fetches total" x="987.0" y="708.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="769.0" y="726.0">sent 24 h</text>
<text class="rowvalue unknown" data-row="approved/sent 24 h" x="987.0" y="726.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="769.0" y="744.0">sent total</text>
<text class="rowvalue unknown" data-row="approved/sent total" x="987.0" y="744.0" text-anchor="end">not recorded</text>
</g>
<g data-node="production" data-kind="repo">
<rect class="card repo" x="1104.0" y="563.0" width="244.0" height="200.0" rx="10"/>
<text class="kindword" x="1117.0" y="580.0">REPOSITORY</text>
<text class="stage" x="1335.0" y="580.0" text-anchor="end">PRODUCTION</text>
<text class="name" x="1117.0" y="598.0">production</text>
<text class="detail" x="1117.0" y="610.0">raw</text>
<text class="rowlabel" x="1117.0" y="627.0">bytes at</text>
<text class="factvalue" data-fact="production/bytes at" x="1335.0" y="627.0" text-anchor="end">…r/lib/holger/production</text>
<line class="sep" x1="1117.0" y1="636.0" x2="1335.0" y2="636.0"/>
<text class="rowlabel" x="1117.0" y="654.0">artifacts</text>
<text class="rowvalue unknown" data-row="production/artifacts" x="1335.0" y="654.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="1117.0" y="672.0">bytes stored</text>
<text class="rowvalue unknown" data-row="production/bytes stored" x="1335.0" y="672.0" text-anchor="end">unlisted</text>
<text class="rowlabel" x="1117.0" y="690.0">fetches 24 h</text>
<text class="rowvalue unknown" data-row="production/fetches 24 h" x="1335.0" y="690.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="1117.0" y="708.0">fetches total</text>
<text class="rowvalue unknown" data-row="production/fetches total" x="1335.0" y="708.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="1117.0" y="726.0">sent 24 h</text>
<text class="rowvalue unknown" data-row="production/sent 24 h" x="1335.0" y="726.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="1117.0" y="744.0">sent total</text>
<text class="rowvalue unknown" data-row="production/sent total" x="1335.0" y="744.0" text-anchor="end">not recorded</text>
</g>
<g data-node="door:door" data-kind="door">
<rect class="card door" x="1452.0" y="563.0" width="244.0" height="146.0" rx="10"/>
<text class="kindword" x="1465.0" y="580.0">EXPOSED ENDPOINT</text>
<text class="name" x="1465.0" y="598.0">door</text>
<text class="detail" x="1465.0" y="610.0">grpc 127.0.0.1:50051</text>
<text class="rowlabel" x="1465.0" y="627.0">http</text>
<text class="factvalue" data-fact="door:door/http" x="1683.0" y="627.0" text-anchor="end">127.0.0.1:8080</text>
<text class="rowlabel" x="1465.0" y="645.0">tls</text>
<text class="factvalue" data-fact="door:door/tls" x="1683.0" y="645.0" text-anchor="end">cleartext</text>
<line class="sep" x1="1465.0" y1="654.0" x2="1683.0" y2="654.0"/>
<text class="rowlabel" x="1465.0" y="672.0">requests today</text>
<text class="rowvalue unknown" data-row="door:door/requests today" x="1683.0" y="672.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="1465.0" y="690.0">errors since boot</text>
<text class="rowvalue" data-row="door:door/errors since boot" x="1683.0" y="690.0" text-anchor="end">0</text>
</g>
<g data-node="observed pullers" data-kind="consumer">
<rect class="card consumer" x="1800.0" y="563.0" width="244.0" height="119.0" rx="10"/>
<text class="kindword" x="1813.0" y="580.0">OBSERVED PULLERS</text>
<text class="name" x="1813.0" y="598.0">observed pullers</text>
<text class="detail" x="1813.0" y="610.0">audit is off · nothing recorded</text>
<text class="rowlabel" x="1813.0" y="627.0">pullers</text>
<text class="rowvalue unknown" data-row="observed pullers/pullers" x="2031.0" y="627.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="1813.0" y="645.0">fetches</text>
<text class="rowvalue unknown" data-row="observed pullers/fetches" x="2031.0" y="645.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="1813.0" y="663.0">bytes sent</text>
<text class="rowvalue unknown" data-row="observed pullers/bytes sent" x="2031.0" y="663.0" text-anchor="end">not recorded</text>
</g>
<g data-node="step:scan · license" data-kind="step">
<rect class="card step" x="408.0" y="877.0" width="244.0" height="182.0" rx="10"/>
<text class="kindword" x="421.0" y="894.0">INTAKE STEP</text>
<text class="name" x="421.0" y="912.0">scan · license</text>
<text class="detail" x="421.0" y="924.0">checks license</text>
<text class="rowlabel" x="421.0" y="941.0">required</text>
<text class="factvalue" data-fact="step:scan · license/required" x="639.0" y="941.0" text-anchor="end">yes</text>
<line class="sep" x1="421.0" y1="950.0" x2="639.0" y2="950.0"/>
<text class="rowlabel" x="421.0" y="968.0">in queue</text>
<text class="rowvalue unknown" data-row="step:scan · license/in queue" x="639.0" y="968.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="986.0">passed</text>
<text class="rowvalue unknown" data-row="step:scan · license/passed" x="639.0" y="986.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1004.0">quarantined</text>
<text class="rowvalue unknown" data-row="step:scan · license/quarantined" x="639.0" y="1004.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1022.0">rejected</text>
<text class="rowvalue unknown" data-row="step:scan · license/rejected" x="639.0" y="1022.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1040.0">findings</text>
<text class="rowvalue unknown" data-row="step:scan · license/findings" x="639.0" y="1040.0" text-anchor="end">not recorded</text>
</g>
<g data-node="step:scan · sbom" data-kind="step">
<rect class="card step" x="408.0" y="1089.0" width="244.0" height="182.0" rx="10"/>
<text class="kindword" x="421.0" y="1106.0">INTAKE STEP</text>
<text class="name" x="421.0" y="1124.0">scan · sbom</text>
<text class="detail" x="421.0" y="1136.0">checks scan</text>
<text class="rowlabel" x="421.0" y="1153.0">required</text>
<text class="factvalue" data-fact="step:scan · sbom/required" x="639.0" y="1153.0" text-anchor="end">yes</text>
<line class="sep" x1="421.0" y1="1162.0" x2="639.0" y2="1162.0"/>
<text class="rowlabel" x="421.0" y="1180.0">in queue</text>
<text class="rowvalue unknown" data-row="step:scan · sbom/in queue" x="639.0" y="1180.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1198.0">passed</text>
<text class="rowvalue unknown" data-row="step:scan · sbom/passed" x="639.0" y="1198.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1216.0">quarantined</text>
<text class="rowvalue unknown" data-row="step:scan · sbom/quarantined" x="639.0" y="1216.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1234.0">rejected</text>
<text class="rowvalue unknown" data-row="step:scan · sbom/rejected" x="639.0" y="1234.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1252.0">findings</text>
<text class="rowvalue unknown" data-row="step:scan · sbom/findings" x="639.0" y="1252.0" text-anchor="end">not recorded</text>
</g>
<g data-node="gate:rules · the floor" data-kind="gate">
<rect class="card gate" x="408.0" y="1301.0" width="244.0" height="182.0" rx="10"/>
<text class="kindword" x="421.0" y="1318.0">GATE</text>
<text class="name" x="421.0" y="1336.0">rules · the floor</text>
<text class="detail" x="421.0" y="1348.0">every source; a gate may only tighten…</text>
<text class="rowlabel" x="421.0" y="1365.0">signed</text>
<text class="factvalue" data-fact="gate:rules · the floor/signed" x="639.0" y="1365.0" text-anchor="end">not required</text>
<text class="rowlabel" x="421.0" y="1383.0">cve max</text>
<text class="factvalue" data-fact="gate:rules · the floor/cve max" x="639.0" y="1383.0" text-anchor="end">high</text>
<line class="sep" x1="421.0" y1="1392.0" x2="639.0" y2="1392.0"/>
<text class="rowlabel" x="421.0" y="1410.0">in queue</text>
<text class="rowvalue unknown" data-row="gate:rules · the floor/in queue" x="639.0" y="1410.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1428.0">passed</text>
<text class="rowvalue unknown" data-row="gate:rules · the floor/passed" x="639.0" y="1428.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1446.0">quarantined</text>
<text class="rowvalue unknown" data-row="gate:rules · the floor/quarantined" x="639.0" y="1446.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="421.0" y="1464.0">rejected</text>
<text class="rowvalue unknown" data-row="gate:rules · the floor/rejected" x="639.0" y="1464.0" text-anchor="end">not recorded</text>
</g>
<g data-node="step:approval" data-kind="step">
<rect class="card step" x="756.0" y="877.0" width="244.0" height="164.0" rx="10"/>
<text class="kindword" x="769.0" y="894.0">INTAKE STEP</text>
<text class="name" x="769.0" y="912.0">approval</text>
<text class="detail" x="769.0" y="924.0">checks approval</text>
<text class="rowlabel" x="769.0" y="941.0">approvers</text>
<text class="factvalue" data-fact="step:approval/approvers" x="987.0" y="941.0" text-anchor="end">2</text>
<line class="sep" x1="769.0" y1="950.0" x2="987.0" y2="950.0"/>
<text class="rowlabel" x="769.0" y="968.0">in queue</text>
<text class="rowvalue unknown" data-row="step:approval/in queue" x="987.0" y="968.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="769.0" y="986.0">passed</text>
<text class="rowvalue unknown" data-row="step:approval/passed" x="987.0" y="986.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="769.0" y="1004.0">quarantined</text>
<text class="rowvalue unknown" data-row="step:approval/quarantined" x="987.0" y="1004.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="769.0" y="1022.0">rejected</text>
<text class="rowvalue unknown" data-row="step:approval/rejected" x="987.0" y="1022.0" text-anchor="end">not recorded</text>
</g>
<g data-node="storage:disk" data-kind="storage">
<rect class="card storage" x="60.0" y="1579.0" width="244.0" height="128.0" rx="10"/>
<text class="kindword" x="73.0" y="1596.0">STORAGE ENDPOINT</text>
<text class="name" x="73.0" y="1614.0">disk</text>
<text class="detail" x="73.0" y="1626.0">znippy</text>
<text class="rowlabel" x="73.0" y="1643.0">path</text>
<text class="factvalue" data-fact="storage:disk/path" x="291.0" y="1643.0" text-anchor="end">/var/lib/holger/store</text>
<line class="sep" x1="73.0" y1="1652.0" x2="291.0" y2="1652.0"/>
<text class="rowlabel" x="73.0" y="1670.0">used</text>
<text class="rowvalue unknown" data-row="storage:disk/used" x="291.0" y="1670.0" text-anchor="end">not recorded</text>
<text class="rowlabel" x="73.0" y="1688.0">free</text>
<text class="rowvalue unknown" data-row="storage:disk/free" x="291.0" y="1688.0" text-anchor="end">not recorded</text>
</g>
<circle class="port" data-port="estate:main/intake" cx="1052.0" cy="378.0" r="5"><title>intake</title></circle>
<rect class="pill" x="316.4" y="650.5" width="79.2" height="15" rx="4"/>
<text class="edgelabel unknown" data-edge-label="incoming-&gt;quarantine" x="356.0" y="661.5" text-anchor="middle">not recorded</text>
<rect class="pill" x="664.4" y="650.5" width="79.2" height="15" rx="4"/>
<text class="edgelabel unknown" data-edge-label="quarantine-&gt;approved" x="704.0" y="661.5" text-anchor="middle">not recorded</text>
<rect class="pill" x="1012.4" y="646.0" width="79.2" height="15" rx="4"/>
<text class="edgelabel unknown" data-edge-label="approved-&gt;production" x="1052.0" y="657.0" text-anchor="middle">not recorded</text>
</g>
</svg>