Gunnar

mikronova/draupnir

.nornir/assets/boot-fleet-readback.svg

<svg xmlns="http://www.w3.org/2000/svg" width="760" height="368" viewBox="0 0 760 368" font-family="ui-sans-serif,system-ui,sans-serif" font-size="12">
  <style>
    .box{fill:#0f1720;stroke:#2b3948;stroke-width:1.5}
    .lbl{fill:#cfe3f5}.dim{fill:#7fa0b8}.acc{fill:#6fd3f5}
    .eng{fill:#12202b;stroke:#3a6d86}
    .pure{fill:#101d16;stroke:#3a865a}
    .warn{fill:#22160f;stroke:#8a5a30}
    .err{fill:#22110f;stroke:#8a3a30}
    .arr{stroke:#6fd3f5;stroke-width:1.6;fill:none;marker-end:url(#a)}
    .t{fill:#e6f2fb}.mono{font-family:ui-monospace,monospace;fill:#a9c7dd;font-size:11px}
  </style>
  <defs><marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3.2" orient="auto">
    <path d="M0,0 L8,3.2 L0,6.4 Z" fill="#6fd3f5"/></marker></defs>
  <rect width="760" height="368" fill="#0a1017"/>
  <text x="16" y="26" class="t" font-size="14" font-weight="700">draupnir · boot_fleet_and_await  <tspan class="dim" font-weight="400">(boot N members — roll up who is actually ready)</tspan></text>

  <!-- consumer -->
  <rect class="box" x="16" y="58" width="168" height="66" rx="8"/>
  <text x="30" y="80" class="acc" font-weight="700">jera dispatcher</text>
  <text x="30" y="98" class="mono">Roster / WorkPayload</text>
  <text x="30" y="114" class="mono">boot_fleet_and_await(spec,n)</text>

  <!-- plan_fleet -->
  <rect class="box eng" x="228" y="58" width="150" height="66" rx="8"/>
  <text x="242" y="80" class="acc" font-weight="700">plan_fleet(spec,n)</text>
  <text x="242" y="100" class="mono">node-1 … node-n</text>
  <text x="242" y="116" class="dim">one image, n names</text>

  <!-- per-member boot_and_await -->
  <rect class="box pure" x="424" y="46" width="216" height="92" rx="8"/>
  <text x="438" y="68" class="acc" font-weight="700">boot_and_await(member)</text>
  <text x="438" y="88" class="mono">per member · bounded opts</text>
  <text x="438" y="106" class="mono">validate + boot + await On</text>
  <text x="438" y="126" class="dim">one dead node can't hang the rest</text>

  <path class="arr" d="M184,90 L226,90"/>
  <path class="arr" d="M378,90 L422,90"/>

  <!-- rollup -->
  <rect class="box" x="424" y="176" width="320" height="52" rx="8"/>
  <text x="438" y="198" class="lbl">FleetReadback  <tspan class="dim">members[] + ready()/failed()/all_ready()</tspan></text>
  <text x="438" y="216" class="mono">infallible — a partial fleet is always observable</text>
  <path class="arr" d="M532,138 L532,174"/>

  <!-- per-member outcomes -->
  <rect class="box pure" x="16" y="176" width="180" height="40" rx="8"/>
  <text x="30" y="201" class="acc" font-weight="700">Up(Machine)  <tspan class="dim">ready</tspan></text>
  <rect class="box warn" x="16" y="226" width="180" height="40" rx="8"/>
  <text x="30" y="251" class="lbl">Timeout(detail) <tspan class="dim">never up in budget</tspan></text>
  <rect class="box err" x="16" y="276" width="180" height="40" rx="8"/>
  <text x="30" y="301" class="lbl">Error(detail) <tspan class="dim">bad spec / no backend</tspan></text>

  <path class="arr" d="M424,196 C300,196 220,196 198,196"/>
  <path class="arr" d="M424,206 C300,240 240,246 198,246"/>
  <path class="arr" d="M424,214 C300,300 240,296 198,296"/>

  <text x="16" y="346" class="dim">Ok → Up · Err(Backend) → Timeout (readback/backend didn't bring it up in budget) · Err(Spec|Unsupported) → Error (hard misconfig)</text>
  <text x="16" y="362" class="dim">the fleet analogue of boot_and_await — reuses it per member (no twin); ready = Up count, failed = the rest; all_ready = non-empty and none failed</text>
</svg>