.nornir/assets/graphar-chunk-codec.svg
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="300" font-family="monospace" font-size="13">
<rect width="720" height="300" fill="#0d1117"/>
<text x="16" y="28" fill="#e6edf3" font-size="15">graphar chunk codec — write_chunk_bytes ⇄ read_chunk_bytes</text>
<!-- RecordBatch -->
<rect x="24" y="70" width="150" height="60" rx="6" fill="#161b22" stroke="#6fd3f5"/>
<text x="99" y="96" fill="#e6edf3" text-anchor="middle">RecordBatch[]</text>
<text x="99" y="116" fill="#7d8590" text-anchor="middle" font-size="11">arrow-array 58</text>
<!-- write -->
<line x1="174" y1="100" x2="250" y2="100" stroke="#6fd3f5" marker-end="url(#a)"/>
<text x="212" y="92" fill="#6fd3f5" text-anchor="middle" font-size="11">write</text>
<!-- codec -->
<rect x="250" y="46" width="220" height="200" rx="6" fill="#161b22" stroke="#7fb0cc"/>
<text x="360" y="70" fill="#e6edf3" text-anchor="middle">FileType</text>
<text x="360" y="98" fill="#9ecbff" text-anchor="middle" font-size="12">ArrowIpc ~148us/iter</text>
<text x="360" y="120" fill="#e6edf3" text-anchor="middle" font-size="12">Parquet ~2480µs/iter</text>
<text x="360" y="142" fill="#7d8590" text-anchor="middle" font-size="12">Csv · Json · Orc</text>
<line x1="270" y1="158" x2="450" y2="158" stroke="#30363d"/>
<text x="360" y="182" fill="#7d8590" text-anchor="middle" font-size="11">roundtrip preserves</text>
<text x="360" y="200" fill="#7d8590" text-anchor="middle" font-size="11">rows + columns (all 5)</text>
<text x="360" y="224" fill="#3fb950" text-anchor="middle" font-size="11">→ testmatrix cell / format</text>
<!-- read -->
<line x1="470" y1="100" x2="546" y2="100" stroke="#6fd3f5" marker-end="url(#a)"/>
<text x="508" y="92" fill="#6fd3f5" text-anchor="middle" font-size="11">read</text>
<rect x="546" y="70" width="150" height="60" rx="6" fill="#161b22" stroke="#6fd3f5"/>
<text x="621" y="96" fill="#e6edf3" text-anchor="middle">RecordBatch[]</text>
<text x="621" y="116" fill="#7d8590" text-anchor="middle" font-size="11">rows == in</text>
<text x="16" y="280" fill="#7d8590" font-size="11">light baseline (this box, 1000-row) — heavy sweep deferred to the bench box (Loki/Odin)</text>
<defs><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 z" fill="#6fd3f5"/></marker></defs>
</svg>