<svg width="100%" viewBox="0 0 1000 240" role="img" xmlns="http://www.w3.org/2000/svg">
  <title>Edge release — tagged builds, self-updating Pis</title>
  <desc>Pushing a v* tag triggers release.yml, which publishes a bundle + manifest; each Pi checks the manifest hourly with jitter, applies the update, runs a 180s health gate, and auto-rolls-back if unhealthy.</desc>
  <style>
    text{font-family:"Anthropic Sans",-apple-system,system-ui,"Segoe UI",sans-serif}
    .t{font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central}
    .s{font-size:12px;text-anchor:middle;dominant-baseline:central}
    rect{stroke-width:.5}
    .neutral{fill:#444441;stroke:#b4b2a9} .nt{fill:#d3d1c7} .ns{fill:#b4b2a9}
    .purple{fill:#3c3489;stroke:#afa9ec}  .pt{fill:#ceccf6} .ps{fill:#afa9ec}
    .teal{fill:#085041;stroke:#5dcaa5}    .tt{fill:#9fe1cb} .ts{fill:#5dcaa5}
    .green{fill:#27500a;stroke:#97c459}   .gt{fill:#c0dd97} .gs{fill:#97c459}
    .orange{fill:#712b13;stroke:#f0997b}  .ot{fill:#f5c4b3} .os{fill:#f0997b}
    .arrow{fill:none;stroke:#9c9a92;stroke-width:1.5}
    .arrow-ok{fill:none;stroke:#1d9e75;stroke-width:1.5}
    .arrow-warn{fill:none;stroke:#d97757;stroke-width:1.5}
  </style>
  <defs>
    <marker id="a" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
      <path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
    </marker>
  </defs>

  <rect class="neutral" x="20"  y="90" width="150" height="60" rx="8"/>
  <text class="t nt" x="95"  y="114">git tag v*</text>
  <text class="s ns" x="95"  y="132">push the tag</text>

  <rect class="purple" x="190" y="90" width="170" height="60" rx="8"/>
  <text class="t pt" x="275" y="114">release.yml</text>
  <text class="s ps" x="275" y="132">builds bundle</text>

  <rect class="teal" x="380" y="90" width="170" height="60" rx="8"/>
  <text class="t tt" x="465" y="114">CDN</text>
  <text class="s ts" x="465" y="132">sudohomes.com/…</text>

  <rect class="green" x="570" y="90" width="180" height="60" rx="8"/>
  <text class="t gt" x="660" y="114">Pi · sudo-update.timer</text>
  <text class="s gs" x="660" y="132">hourly manifest check (jitter)</text>

  <rect class="green" x="770" y="40"  width="200" height="60" rx="8"/>
  <text class="t gt" x="870" y="64">180s health gate</text>
  <text class="s gs" x="870" y="82">keep new version</text>

  <rect class="orange" x="770" y="140" width="200" height="60" rx="8"/>
  <text class="t ot" x="870" y="164">auto-rollback</text>
  <text class="s os" x="870" y="182">restore snapshot</text>

  <path class="arrow"      d="M 170 120 L 188 120" marker-end="url(#a)"/>
  <path class="arrow"      d="M 360 120 L 378 120" marker-end="url(#a)"/>
  <path class="arrow"      d="M 550 120 L 568 120" marker-end="url(#a)"/>
  <path class="arrow-ok"   d="M 750 110 L 768  70" marker-end="url(#a)"/>
  <path class="arrow-warn" d="M 750 130 L 768 170" marker-end="url(#a)" stroke-dasharray="4 3"/>
</svg>
