<?xml version='1.0' encoding='utf-8'?>
<mxfile host="app.diagrams.net" modified="2026-08-02T01:58:41Z" agent="BlackKnightController story exporter" version="24.7.17"><diagram id="ionos-lab-edge-story" name="Git to Lab to IONOS"><mxGraphModel dx="1920" dy="1080" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1920" pageHeight="1080" math="0" shadow="0"><root><mxCell id="0" /><mxCell id="1" parent="0" /><mxCell id="title" value="Auzietek / BlackKnightController — Git to Lab to IONOS&amp;lt;br&amp;gt;&amp;lt;font style=&amp;#x27;font-size:15px;color:#486581&amp;#x27;&amp;gt;Evidence-backed publish loop: approve, validate, promote, observe, remember.&amp;lt;/font&amp;gt;" style="text;html=1;strokeColor=none;fillColor=none;fontSize=24;fontStyle=1;fontColor=#102a43;align=left;" parent="1" vertex="1"><mxGeometry x="70" y="28" width="1100" height="70" as="geometry" /></mxCell><mxCell id="group:control_band" value="CONTROL / DELIVERY BAND" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#c7dce1;fontColor=#486581;fontStyle=1;fontSize=13;verticalAlign=top;spacingTop=12;arcSize=10;" parent="1" vertex="1"><mxGeometry x="70" y="120" width="1780" height="390" as="geometry" /></mxCell><mxCell id="group:evidence_band" value="EVIDENCE / OPERATIONS BAND" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#c7dce1;fontColor=#486581;fontStyle=1;fontSize=13;verticalAlign=top;spacingTop=12;arcSize=10;" parent="1" vertex="1"><mxGeometry x="70" y="560" width="1780" height="270" as="geometry" /></mxCell><mxCell id="node:channel" value="&lt;b&gt;Git + bkc-channel&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Astra guidance, Auzie approval, payloads and receipts&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#e9d5ff;strokeColor=#7c3aed;fontColor=#3b0764;fontSize=16;" parent="1" vertex="1"><mxGeometry x="125" y="230" width="260" height="116" as="geometry" /></mxCell><mxCell id="node:bkc" value="&lt;b&gt;BlackKnightController&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Turns intent into inventory, backup, publish and validation pipelines&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#ccfbf1;strokeColor=#0f766e;fontColor=#134e4a;fontSize=16;" parent="1" vertex="1"><mxGeometry x="485" y="220" width="310" height="138" as="geometry" /></mxCell><mxCell id="node:lab" value="&lt;b&gt;Lab validation&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;OpenStack BKC, edge routes, disposable deployments, smoke tests&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#dbeafe;strokeColor=#2563eb;fontColor=#1e3a8a;fontSize=16;" parent="1" vertex="1"><mxGeometry x="900" y="230" width="300" height="116" as="geometry" /></mxCell><mxCell id="node:ionos" value="&lt;b&gt;IONOS production&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;VPS swarm, nginx, DNS, certificates, public promotion&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#ffedd5;strokeColor=#ea580c;fontColor=#7c2d12;fontSize=16;" parent="1" vertex="1"><mxGeometry x="1300" y="220" width="310" height="138" as="geometry" /></mxCell><mxCell id="node:sites" value="&lt;b&gt;Public sites&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Auzietek, BlackKnightController, Linux Users, Retro Users&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#dcfce7;strokeColor=#16a34a;fontColor=#14532d;fontSize=16;" parent="1" vertex="1"><mxGeometry x="1325" y="385" width="260" height="86" as="geometry" /></mxCell><mxCell id="node:git_revision" value="&lt;b&gt;Git revision&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Code, scene, content payload and approval history&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#fef3c7;strokeColor=#b7791f;fontColor=#5f370e;fontSize=16;" parent="1" vertex="1"><mxGeometry x="135" y="650" width="255" height="100" as="geometry" /></mxCell><mxCell id="node:backup" value="&lt;b&gt;Backup artifacts&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;DB dumps, configs, media, checksums, rollback manifest&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#fef3c7;strokeColor=#b7791f;fontColor=#5f370e;fontSize=16;" parent="1" vertex="1"><mxGeometry x="505" y="650" width="275" height="100" as="geometry" /></mxCell><mxCell id="node:telemetry" value="&lt;b&gt;Grafana + health&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Public probes, nginx logs, GeoIP, app metrics, fleet health&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#e0f2fe;strokeColor=#0284c7;fontColor=#0c4a6e;fontSize=16;" parent="1" vertex="1"><mxGeometry x="910" y="650" width="300" height="100" as="geometry" /></mxCell><mxCell id="node:fragments" value="&lt;b&gt;Fragments + receipts&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Known-good decisions, gaps, dry-runs, accepted layouts&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;arcSize=16;shadow=1;fillColor=#ede9fe;strokeColor=#7c3aed;fontColor=#3b0764;fontSize=16;" parent="1" vertex="1"><mxGeometry x="1315" y="650" width="300" height="100" as="geometry" /></mxCell><mxCell id="edge:0:channel:bkc" value="request" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0f766e;fontColor=#0f766e;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:channel" target="node:bkc"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:1:bkc:lab" value="deploy" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0f766e;fontColor=#0f766e;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:bkc" target="node:lab"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:2:lab:ionos" value="promote" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0f766e;fontColor=#0f766e;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:lab" target="node:ionos"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:3:ionos:sites" value="serve" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0f766e;fontColor=#0f766e;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:ionos" target="node:sites"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:4:channel:git_revision" value="record" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7c3aed;fontColor=#7c3aed;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:channel" target="node:git_revision"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:5:bkc:backup" value="backup" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7c3aed;fontColor=#7c3aed;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:bkc" target="node:backup"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:6:sites:telemetry" value="observe" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7c3aed;fontColor=#7c3aed;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:sites" target="node:telemetry"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="edge:7:telemetry:fragments" value="record" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7c3aed;fontColor=#7c3aed;fontSize=12;strokeWidth=3;endArrow=block;" parent="1" edge="1" source="node:telemetry" target="node:fragments"><mxGeometry relative="1" as="geometry" /></mxCell><mxCell id="callout:safe_promotion" value="&lt;b&gt;Safe promotion&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;Backup, lab smoke, public smoke, rollback path, then receipts.&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#2f855a;fontColor=#14532d;fontSize=13;arcSize=10;" parent="1" vertex="1"><mxGeometry x="116" y="875" width="460" height="90" as="geometry" /></mxCell><mxCell id="callout:controlled_transport" value="&lt;b&gt;Controlled transport&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;IPFire, routed lab edges and DNS/API work are explicit pipeline subjects.&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fffbeb;strokeColor=#b7791f;fontColor=#5f370e;fontSize=13;arcSize=10;" parent="1" vertex="1"><mxGeometry x="730" y="875" width="460" height="90" as="geometry" /></mxCell><mxCell id="callout:ai_truth_boundary" value="&lt;b&gt;Evidence loop&lt;/b&gt;&lt;br&gt;&lt;font style='font-size:12px;color:#334155'&gt;AI can assist layout. Fragments and receipts teach future runs without changing truth.&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f3ff;strokeColor=#7c3aed;fontColor=#3b0764;fontSize=13;arcSize=10;" parent="1" vertex="1"><mxGeometry x="1340" y="875" width="460" height="90" as="geometry" /></mxCell><mxCell id="caption" value="Generated from BKC evidence. AI assisted grouping; human review accepted the presentation layout." style="text;html=1;strokeColor=none;fillColor=none;fontSize=13;fontColor=#486581;align=left;" parent="1" vertex="1"><mxGeometry x="70" y="1004" width="900" height="40" as="geometry" /></mxCell></root></mxGraphModel></diagram></mxfile>