nordisk/edda
.nornir/assets/build-info.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 560" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
<defs>
<linearGradient id="board" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0b1c2e"/><stop offset="1" stop-color="#06111d"/>
</linearGradient>
<linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#14384f"/><stop offset="1" stop-color="#0e2a3e"/>
</linearGradient>
<linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#173d57"/><stop offset="1" stop-color="#0c2438"/>
</linearGradient>
<linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#123448"/><stop offset="1" stop-color="#0a2032"/>
</linearGradient>
<marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0 0 L10 5 L0 10 z" fill="#6fd3f5"/>
</marker>
<marker id="arrg" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0 0 L10 5 L0 10 z" fill="#7CFFB2"/>
</marker>
</defs>
<rect x="0" y="0" width="1180" height="560" fill="url(#board)"/>
<g stroke="#143a52" stroke-width="1"><line x1="0" y1="82" x2="1180" y2="82"/><line x1="0" y1="516" x2="1180" y2="516"/></g>
<text x="40" y="42" fill="#eaf6ff" font-size="22" font-weight="700">build-info — the second half of a build</text>
<text x="40" y="64" fill="#9fc9e0" font-size="14.5">one build → two halves: the <tspan fill="#bfe6ff">thing</tspan> (artifact bytes) · the <tspan fill="#7CFFB2">build info</tspan> (columnar record) · <tspan font-family="'DejaVu Sans Mono', monospace" fill="#bfe6ff">BuildInfoSink</tspan> is pluggable</text>
<g font-size="12.5">
<line x1="860" y1="60" x2="900" y2="60" stroke="#7CFFB2" stroke-width="3" marker-end="url(#arrg)"/>
<text x="908" y="64" fill="#cfe6f5">build info</text>
<line x1="1010" y1="60" x2="1050" y2="60" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arr)"/>
<text x="1058" y="64" fill="#cfe6f5">the thing</text>
</g>
<!-- 1. build_variant -->
<rect x="36" y="200" width="230" height="150" rx="12" fill="url(#rail)" stroke="#7CFFB2" stroke-width="2.5"/>
<text x="151" y="230" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">build_variant_with_info</text>
<text x="151" y="249" fill="#9fc9e0" font-size="10.5" text-anchor="middle">one call, two halves routed</text>
<g font-family="'DejaVu Sans Mono', monospace">
<rect x="54" y="264" width="194" height="24" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="151" y="280" fill="#bfe6ff" font-size="9.5" text-anchor="middle">cargo build · --message-format</text>
<rect x="54" y="294" width="194" height="24" rx="5" fill="url(#slot)" stroke="#7CFFB2" stroke-width="1.2"/><text x="151" y="310" fill="#7CFFB2" font-size="9.5" text-anchor="middle">emit(rows) → BuildInfoSink</text>
</g>
<text x="151" y="336" fill="#86b3cc" font-size="9.5" text-anchor="middle">existing build_variant() unchanged (NullSink)</text>
<!-- split up: the thing -->
<line x1="266" y1="240" x2="326" y2="150" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arr)"/>
<rect x="332" y="104" width="238" height="96" rx="12" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="451" y="132" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">① the thing</text>
<text x="451" y="151" fill="#9fc9e0" font-size="10" text-anchor="middle">artifact bytes + content_id</text>
<rect x="350" y="162" width="202" height="24" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="451" y="178" fill="#bfe6ff" font-size="9.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">holger znippy CAS (later)</text>
<!-- split down: the build info -->
<line x1="266" y1="300" x2="326" y2="360" stroke="#7CFFB2" stroke-width="3" marker-end="url(#arrg)"/>
<!-- 2. BuildInfoRow (schema f3) -->
<rect x="332" y="352" width="410" height="150" rx="12" fill="url(#rail)" stroke="#7CFFB2" stroke-width="2.5"/>
<text x="537" y="380" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">② BuildInfoRow — one schema (§f3)</text>
<text x="537" y="399" fill="#9fc9e0" font-size="10.5" text-anchor="middle">kind = provenance | dep | artifact | log | metric | step</text>
<g font-family="'DejaVu Sans Mono', monospace" font-size="9">
<rect x="350" y="412" width="120" height="22" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="410" y="427" fill="#bfe6ff" text-anchor="middle">build_id · step_id</text>
<rect x="476" y="412" width="120" height="22" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="536" y="427" fill="#bfe6ff" text-anchor="middle">ts_micros · kind</text>
<rect x="602" y="412" width="122" height="22" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="663" y="427" fill="#bfe6ff" text-anchor="middle">level · name · value</text>
<rect x="350" y="440" width="180" height="22" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="440" y="455" fill="#bfe6ff" text-anchor="middle">content_id (artifact CAS id)</text>
<rect x="536" y="440" width="188" height="22" rx="5" fill="url(#slot)" stroke="#7CFFB2" stroke-width="1.2"/><text x="630" y="455" fill="#7CFFB2" text-anchor="middle">blob : Binary (nullable)</text>
</g>
<text x="537" y="484" fill="#86b3cc" font-size="9.5" text-anchor="middle">manifest rows from BuildProvenance · live feed = step/log/metric</text>
<line x1="742" y1="427" x2="802" y2="427" stroke="#7CFFB2" stroke-width="3" marker-end="url(#arrg)"/>
<!-- 3. sinks -->
<rect x="808" y="352" width="200" height="150" rx="12" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="908" y="380" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">BuildInfoSink</text>
<text x="908" y="398" fill="#9fc9e0" font-size="10" text-anchor="middle">transport-agnostic seam</text>
<rect x="826" y="410" width="164" height="22" rx="5" fill="url(#slot)" stroke="#7CFFB2" stroke-width="1.2"/><text x="908" y="425" fill="#7CFFB2" font-size="9.5" text-anchor="middle">InMem (default, in-proc)</text>
<rect x="826" y="438" width="164" height="22" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="908" y="453" fill="#bfe6ff" font-size="9.5" text-anchor="middle">Null (no-op)</text>
<rect x="826" y="466" width="164" height="22" rx="5" fill="url(#slot)" stroke="#5aa6cf" stroke-width="1.2" stroke-dasharray="4 3"/><text x="908" y="481" fill="#7fa8c4" font-size="9.5" text-anchor="middle">Flight (later slice)</text>
<!-- 4. arrow batch (feature) -->
<line x1="908" y1="352" x2="908" y2="316" stroke="#6fd3f5" stroke-width="2.5" marker-end="url(#arr)"/>
<rect x="808" y="200" width="336" height="112" rx="12" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="976" y="228" fill="#eaf6ff" font-size="13.5" font-weight="700" text-anchor="middle">Arrow RecordBatch</text>
<text x="976" y="246" fill="#9fc9e0" font-size="10" text-anchor="middle">feature build-info-arrow (opt-in)</text>
<rect x="826" y="258" width="300" height="24" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.2"/><text x="976" y="274" fill="#bfe6ff" font-size="9.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">build_info_schema() · build_info_batch(rows)</text>
<text x="976" y="300" fill="#86b3cc" font-size="9" text-anchor="middle">reuses arrow-array/-schema (znippy pins); core stays dep-light</text>
<!-- ground -->
<rect x="36" y="466" width="756" height="38" rx="10" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2"/>
<text x="58" y="490" fill="#bcd9ec" font-size="11">The thing is the bytes; the build info is the record ABOUT the build — Artifactory build-info as a live columnar stream, dep-light by default.</text>
</svg>