<mxfile host="app.diagrams.net" agent="architecture-deliverables" version="24.0.0">
  <diagram name="CI/CD and Environment Promotion" id="12-cicd-environments">
    <mxGraphModel dx="1400" dy="900" background="#ffffff" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1560" pageHeight="590" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="_st1" value="Source" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="60" width="180" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.git" value="&lt;b&gt;Git Repository&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;trunk + short branches&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="40" y="90" width="180" height="90" as="geometry" />
        </mxCell>
        <mxCell id="n.iac" value="&lt;b&gt;Infrastructure as Code&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="40" y="210" width="180" height="90" as="geometry" />
        </mxCell>
        <mxCell id="n.pa" value="&lt;b&gt;Prompt &amp; Eval Assets&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;versioned with code&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="40" y="330" width="180" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_st2" value="Build" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="380" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.ci" value="&lt;b&gt;CI Pipeline&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="380" y="120" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.img" value="&lt;b&gt;Container Build&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;SBOM, signed&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="380" y="220" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.ut" value="&lt;b&gt;Unit &amp; Contract Tests&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="380" y="320" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="_st3" value="Gates" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="700" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.sec" value="&lt;b&gt;Security Scan&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;SAST, deps, image&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="700" y="120" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.ev" value="&lt;b&gt;RAG Eval Gate&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;recall, groundedness&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="700" y="220" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.cost" value="&lt;b&gt;Cost Guard&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;cost per query&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="700" y="320" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="_st4" value="Environments" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1020" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.dev" value="&lt;b&gt;Development&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="1020" y="120" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.stg" value="&lt;b&gt;Staging&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;production-like corpus&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="1020" y="220" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.prd" value="&lt;b&gt;Production&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;canary 10%&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="1020" y="320" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="_st5" value="Operate" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1350" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.gitops" value="&lt;b&gt;GitOps Sync&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;desired state&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="1350" y="120" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.tel" value="&lt;b&gt;Telemetry&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontColor=#3a2b44;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="1350" y="220" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="n.rb" value="&lt;b&gt;Rollback&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;one revert commit&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;" vertex="1" parent="1">
          <mxGeometry x="1350" y="320" width="170" height="70" as="geometry" />
        </mxCell>
        <mxCell id="_spine6" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="230" y="250" as="sourcePoint" />
            <mxPoint x="370" y="250" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine7" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="560" y="250" as="sourcePoint" />
            <mxPoint x="690" y="250" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine8" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="880" y="250" as="sourcePoint" />
            <mxPoint x="1010" y="250" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine9" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="1200" y="250" as="sourcePoint" />
            <mxPoint x="1340" y="250" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_e10" value="quality regression, block" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;endArrow=block;endFill=1;strokeColor=#b85450;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;verticalAlign=bottom;fontFamily=Segoe UI;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.ev" target="n.ci">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="630" y="260" />
              <mxPoint x="630" y="160" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_e11" value="auto revert on SLO breach" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;endArrow=block;endFill=1;strokeColor=#b85450;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;verticalAlign=bottom;fontFamily=Segoe UI;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.rb" target="n.prd">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="title" value="CI/CD and Environment Promotion" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=20;fontStyle=1;fontColor=#16202c;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="1470" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#c9d3de;" vertex="1" parent="1">
          <mxGeometry x="40" y="50" width="1470" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg12" value="" style="rounded=1;arcSize=30;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
          <mxGeometry x="40" y="490" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg13" value="Application we own" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="70" y="490" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg14" value="" style="rounded=1;arcSize=30;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
          <mxGeometry x="200" y="490" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg15" value="Decision point" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="230" y="490" width="90" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg16" value="" style="rounded=1;arcSize=30;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
          <mxGeometry x="340" y="490" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg17" value="Security / platform" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="370" y="490" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg18" value="" style="html=1;endArrow=none;dashed=1;strokeColor=#b85450;strokeWidth=1.4;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="500" y="500" as="sourcePoint" />
            <mxPoint x="530" y="500" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_lg19" value="failure / alternate" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="530" y="490" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="note" value="A prompt or chunking change goes through the same gates as a code change. Both move answer quality." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="520" width="1470" height="20" as="geometry" />
        </mxCell>
        <mxCell id="foot-rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#e3e9ef;" vertex="1" parent="1">
          <mxGeometry x="40" y="540" width="1470" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Platform Engineering" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontColor=#9aa7b4;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="550" width="1470" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
