.nornir/assets/common-infra-waves.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 380" font-family="-apple-system,Segoe UI,Roboto,sans-serif" font-size="13">
<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>
<marker id="v" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
<path d="M0,0 L7,3 L0,6 Z" fill="#7a3fb3"/>
</marker>
</defs>
<text x="24" y="28" font-weight="700" font-size="16">Tier-0.5 common-infra — dependency-ordered bring-up</text>
<text x="24" y="46" fill="#888" font-size="11">common_infra() → as_product() → orchestrate::start_waves() (the ONE Kahn wave engine)</text>
<!-- Wave 0 -->
<text x="150" y="78" text-anchor="middle" fill="#2b5fb3" font-weight="700" font-size="12">Wave 0 — roots</text>
<rect x="40" y="88" width="220" height="46" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
<text x="150" y="108" text-anchor="middle" font-weight="600">cert-manager</text>
<text x="150" y="124" text-anchor="middle" fill="#555" font-size="11">ns cert-manager · TLS issuer</text>
<rect x="40" y="150" width="220" height="46" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
<text x="150" y="170" text-anchor="middle" font-weight="600">ingress-nginx</text>
<text x="150" y="186" text-anchor="middle" fill="#555" font-size="11">ns ingress-nginx · L7 edge 80/443</text>
<!-- Wave 1 -->
<text x="470" y="78" text-anchor="middle" fill="#2f8f4e" font-weight="700" font-size="12">Wave 1 — after their deps</text>
<rect x="360" y="88" width="220" height="46" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
<text x="470" y="108" text-anchor="middle" font-weight="600">holger-registry</text>
<text x="470" y="124" text-anchor="middle" fill="#555" font-size="11">ns holger · StatefulSet + PVC 50Gi</text>
<rect x="360" y="150" width="220" height="46" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
<text x="470" y="170" text-anchor="middle" font-weight="600">openbao</text>
<text x="470" y="186" text-anchor="middle" fill="#555" font-size="11">ns openbao · StatefulSet + PVC 10Gi</text>
<!-- dep edges wave0 -> wave1 -->
<path d="M260,110 L360,110" fill="none" stroke="#555" stroke-width="1.4" marker-end="url(#a)"/>
<path d="M260,118 C300,140 320,168 360,172" fill="none" stroke="#555" stroke-width="1.3" marker-end="url(#a)"/>
<path d="M260,168 C300,150 320,124 360,120" fill="none" stroke="#555" stroke-width="1.3" marker-end="url(#a)"/>
<text x="300" y="102" fill="#888" font-size="10">after</text>
<!-- each spec renders to k8s manifests -->
<rect x="360" y="214" width="220" height="42" rx="6" fill="#fdf2ec" stroke="#c26a2b" stroke-width="1.3"/>
<text x="470" y="234" text-anchor="middle" font-weight="600" font-size="12">k8s manifests (data)</text>
<text x="470" y="249" text-anchor="middle" fill="#555" font-size="10">StatefulSet/Deployment · Service · PVC</text>
<path d="M470,196 L470,214" fill="none" stroke="#c26a2b" stroke-width="1.4" marker-end="url(#a)"/>
<text x="484" y="209" fill="#888" font-size="10">renderer_for(Kubernetes)</text>
<!-- OpenBao structural-populate hook -->
<rect x="620" y="150" width="230" height="66" rx="8" fill="#f6eefb" stroke="#7a3fb3" stroke-width="1.5"/>
<text x="735" y="172" text-anchor="middle" font-weight="600">OpenBao PopulatePlan</text>
<text x="735" y="189" text-anchor="middle" fill="#555" font-size="11">k8s-auth + per-env policy/role</text>
<text x="735" y="204" text-anchor="middle" fill="#555" font-size="11">pure DATA → OpenBao::apply (live)</text>
<path d="M580,173 L620,178" fill="none" stroke="#7a3fb3" stroke-width="1.4" marker-end="url(#v)"/>
<text x="588" y="166" fill="#7a3fb3" font-size="10">once up →</text>
<text x="24" y="330" fill="#888" font-size="11">The RENDERER half is pure + laptop-testable: waves are computed offline, specs render to manifest DATA,</text>
<text x="24" y="348" fill="#888" font-size="11">the populate plan is asserted offline. The DEFERRED back half is the live cluster apply + live OpenBao::apply HTTP.</text>
<text x="24" y="366" fill="#888" font-size="11">Waves: [[cert-manager, ingress-nginx], [holger-registry, openbao]] — one dep edge change re-shapes them (RED-when-broken).</text>
</svg>