.nornir/assets/arrow58_patch_fork.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 580" 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="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto">
<path d="M0,0 L8,3 L0,6 Z" fill="#6fd3f5"/>
</marker>
<marker id="arrowd" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto">
<path d="M0,0 L8,3 L0,6 Z" fill="#7fb0cc"/>
</marker>
</defs>
<!-- PCB substrate -->
<rect x="0" y="0" width="1180" height="580" fill="url(#board)"/>
<g stroke="#143a52" stroke-width="1">
<line x1="0" y1="78" x2="1180" y2="78"/>
<line x1="0" y1="534" x2="1180" y2="534"/>
</g>
<g fill="#16415c">
<circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
<circle cx="40" cy="552" r="2"/><circle cx="1140" cy="552" r="2"/>
</g>
<!-- title -->
<text x="40" y="40" fill="#eaf6ff" font-size="22" font-weight="700">znippy-iceberg → Arrow 58</text>
<text x="40" y="62" fill="#9fc9e0" font-size="15">healing the split brain via a root <tspan fill="#bfe6ff" font-weight="700" font-family="'DejaVu Sans Mono', monospace">[patch.crates-io]</tspan> → sibling <tspan fill="#bfe6ff" font-weight="700">../iceberg-arrow58</tspan> fork</text>
<!-- legend -->
<g font-size="12.5">
<line x1="690" y1="44" x2="730" y2="44" stroke="#6fd3f5" stroke-width="3"/>
<text x="738" y="48" fill="#cfe6f5">local build path</text>
<line x1="880" y1="44" x2="920" y2="44" stroke="#7fb0cc" stroke-width="2.5" stroke-dasharray="5 4"/>
<text x="928" y="48" fill="#cfe6f5">cargo publish strips [patch]</text>
</g>
<g font-size="11.5">
<rect x="690" y="58" width="12" height="12" rx="2" fill="#0f2e2a" stroke="#7CFFB2" stroke-width="1.4"/>
<text x="708" y="68" fill="#7CFFB2">already 58</text>
<rect x="800" y="58" width="12" height="12" rx="2" fill="#3a3015" stroke="#ffcf6f" stroke-width="1.4"/>
<text x="818" y="68" fill="#ffcf6f">57 straggler → bumped</text>
</g>
<!-- ===================== SPLIT-BRAIN WORKSPACE (left) ===================== -->
<rect x="36" y="108" width="232" height="372" rx="12" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2.5"/>
<text x="152" y="136" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">znippy workspace</text>
<text x="152" y="156" fill="#9fc9e0" font-size="10.5" text-anchor="middle">the Arrow-major split brain</text>
<!-- common: already 58 -->
<rect x="58" y="176" width="188" height="50" rx="5" fill="url(#slot)" stroke="#7CFFB2" stroke-width="1.6"/>
<text x="152" y="196" fill="#bfe6ff" font-size="11" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">znippy-common</text>
<text x="152" y="214" fill="#7CFFB2" font-size="10.5" text-anchor="middle" font-weight="700">arrow 58.3.0 • already aligned</text>
<!-- compress: already 58 -->
<rect x="58" y="234" width="188" height="50" rx="5" fill="url(#slot)" stroke="#7CFFB2" stroke-width="1.6"/>
<text x="152" y="254" fill="#bfe6ff" font-size="11" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">znippy-compress</text>
<text x="152" y="272" fill="#7CFFB2" font-size="10.5" text-anchor="middle" font-weight="700">arrow 58.3.0 • already aligned</text>
<!-- iceberg: the straggler -->
<rect x="58" y="296" width="188" height="68" rx="5" fill="url(#slot)" stroke="#ffcf6f" stroke-width="1.8"/>
<text x="152" y="316" fill="#bfe6ff" font-size="11" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">znippy-iceberg</text>
<text x="152" y="334" fill="#ffcf6f" font-size="10.5" text-anchor="middle" font-weight="700">arrow 57 — straggler</text>
<text x="152" y="350" fill="#9fc9e0" font-size="9.5" text-anchor="middle">links iceberg 0.9.1 + skade 0.4.x (both 57)</text>
<text x="152" y="388" fill="#ff9a9a" font-size="10" text-anchor="middle">57↔58 RecordBatch won't cross the</text>
<text x="152" y="404" fill="#ff9a9a" font-size="10" text-anchor="middle">type boundary — lockfile version war</text>
<text x="152" y="430" fill="#86b3cc" font-size="10" text-anchor="middle">compress (58) pipeline cannot hand</text>
<text x="152" y="446" fill="#86b3cc" font-size="10" text-anchor="middle">a batch to the (57) Iceberg sink</text>
<rect x="268" y="326" width="6" height="8" fill="#6fd3f5"/>
<!-- straggler -> Cargo.toml bump -->
<path d="M274 330 H332" stroke="#6fd3f5" stroke-width="3" fill="none" marker-end="url(#arrow)"/>
<!-- ===================== znippy-iceberg Cargo.toml bump ===================== -->
<rect x="338" y="138" width="206" height="180" rx="11" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="441" y="166" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">znippy-iceberg</text>
<text x="441" y="185" fill="#9fc9e0" font-size="10.5" text-anchor="middle">Cargo.toml — arrow 57 → 58</text>
<rect x="360" y="200" width="162" height="96" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<text x="372" y="220" fill="#bfe6ff" font-size="10.5" font-family="'DejaVu Sans Mono', monospace">arrow-array = "58"</text>
<text x="372" y="238" fill="#bfe6ff" font-size="10.5" font-family="'DejaVu Sans Mono', monospace">arrow-schema = "58"</text>
<text x="372" y="256" fill="#bfe6ff" font-size="10.5" font-family="'DejaVu Sans Mono', monospace">arrow-ipc = "58"</text>
<text x="372" y="274" fill="#bfe6ff" font-size="10.5" font-family="'DejaVu Sans Mono', monospace">arrow-cast = "58"</text>
<text x="441" y="290" fill="#7CFFB2" font-size="9.5" text-anchor="middle" font-weight="700">own deps now 58</text>
<rect x="544" y="214" width="6" height="8" fill="#6fd3f5"/>
<!-- ===================== root [patch.crates-io] ===================== -->
<rect x="338" y="338" width="206" height="142" rx="11" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
<text x="441" y="364" fill="#eaf6ff" font-size="14" font-weight="700" text-anchor="middle">root Cargo.toml</text>
<text x="441" y="382" fill="#9fc9e0" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">[patch.crates-io]</text>
<rect x="360" y="396" width="162" height="74" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<text x="372" y="414" fill="#bfe6ff" font-size="9.5" font-family="'DejaVu Sans Mono', monospace">iceberg = ../iceberg-arrow58</text>
<text x="372" y="430" fill="#bfe6ff" font-size="9.5" font-family="'DejaVu Sans Mono', monospace">skade = ../skade/skade</text>
<text x="372" y="446" fill="#bfe6ff" font-size="9.5" font-family="'DejaVu Sans Mono', monospace">skade-katalog = ../skade</text>
<text x="441" y="463" fill="#9fc9e0" font-size="9" text-anchor="middle">redirect iceberg/skade to 58 builds</text>
<rect x="544" y="404" width="6" height="8" fill="#6fd3f5"/>
<!-- bump -> fork & patch -> fork (both feed the resolve) -->
<path d="M550 218 H600 V300 H636" stroke="#6fd3f5" stroke-width="3" fill="none" marker-end="url(#arrow)"/>
<path d="M550 408 H600 V320 H636" stroke="#6fd3f5" stroke-width="3" fill="none" marker-end="url(#arrow)"/>
<!-- ===================== ../iceberg-arrow58 fork ===================== -->
<rect x="642" y="240" width="206" height="160" rx="12" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2.5"/>
<text x="745" y="268" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">../iceberg-arrow58</text>
<text x="745" y="287" fill="#9fc9e0" font-size="10.5" text-anchor="middle">sibling fork repo</text>
<rect x="664" y="302" width="162" height="34" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<text x="745" y="316" fill="#bfe6ff" font-size="10" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">iceberg 0.9.1</text>
<text x="745" y="330" fill="#7CFFB2" font-size="9.5" text-anchor="middle" font-weight="700">arrow 57 → 58 (no source change)</text>
<text x="745" y="358" fill="#86b3cc" font-size="10" text-anchor="middle">pure version bump • shared with skade</text>
<text x="745" y="376" fill="#86b3cc" font-size="9.5" text-anchor="middle">../skade/skade carries the 58 skade build</text>
<text x="745" y="392" fill="#7fa8c4" font-size="9" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">to_naive_date warns only (upstream code)</text>
<rect x="848" y="312" width="6" height="8" fill="#6fd3f5"/>
<!-- fork -> cargo build resolve -->
<path d="M854 316 H902" stroke="#6fd3f5" stroke-width="3" fill="none" marker-end="url(#arrow)"/>
<!-- ===================== cargo build resolves ===================== -->
<rect x="908" y="252" width="234" height="136" rx="12" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2.5"/>
<text x="1025" y="280" fill="#eaf6ff" font-size="14.5" font-weight="700" text-anchor="middle">cargo build</text>
<text x="1025" y="299" fill="#9fc9e0" font-size="10.5" text-anchor="middle">local resolve → fork</text>
<rect x="930" y="312" width="190" height="34" rx="5" fill="url(#slot)" stroke="#7CFFB2" stroke-width="1.6"/>
<text x="1025" y="326" fill="#7CFFB2" font-size="11" text-anchor="middle" font-weight="700">Arrow 58 everywhere</text>
<text x="1025" y="340" fill="#9fc9e0" font-size="9.5" text-anchor="middle">split brain closed • one major</text>
<text x="1025" y="364" fill="#86b3cc" font-size="10" text-anchor="middle">RecordBatch flows compress → sink,</text>
<text x="1025" y="380" fill="#86b3cc" font-size="10" text-anchor="middle">no bridge — both sides finally agree</text>
<!-- ===================== published dashed branch ===================== -->
<path d="M441 480 V506 H720" stroke="#7fb0cc" stroke-width="2.5" fill="none" stroke-dasharray="5 4" marker-end="url(#arrowd)"/>
<rect x="726" y="486" width="280" height="40" rx="9" fill="#0a2032" stroke="#3c6a86" stroke-width="1.4" stroke-dasharray="3 3"/>
<text x="866" y="503" fill="#bfe6ff" font-size="11.5" font-weight="700" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">cargo publish strips [patch]</text>
<text x="866" y="518" fill="#7fa8c4" font-size="9.5" text-anchor="middle">published znippy-iceberg → stock iceberg 0.9.1 + skade 0.4.x</text>
<!-- ===================== FOOTER ===================== -->
<text x="40" y="558" fill="#5e86a0" font-size="11" font-family="'DejaVu Sans Mono', monospace">3939e8e · bump znippy-iceberg arrow 57→58 + root [patch.crates-io] → ../iceberg-arrow58 · exit: drop [patch] when upstream ships arrow-58 iceberg/skade</text>
</svg>