crates/storage-git-gix/parked-gix/assets/gunnar-znippy-cycle.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 1744.5" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
<!-- GENERATED. Do not hand-edit: every number here carries a measurement, and
editing the picture instead of the datum is how a diagram starts lying. -->
<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>
<linearGradient id="hot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1c5a3a"/><stop offset="1" stop-color="#0f3a26"/>
</linearGradient>
<linearGradient id="cold" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#3a2320"/><stop offset="1" stop-color="#281414"/>
</linearGradient>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
<path d="M0 0 L10 5 L0 10 z" fill="context-stroke"/>
</marker>
</defs>
<rect x="0" y="0" width="1180" height="1744.5" fill="url(#board)"/>
<g stroke="#143a52" stroke-width="1">
<line x1="0" y1="76" x2="1180" y2="76"/>
<line x1="0" y1="1696.5" x2="1180" y2="1696.5"/>
</g>
<g fill="#16415c">
<circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
<circle cx="40" cy="1716.5" r="2"/><circle cx="1140" cy="1716.5" r="2"/>
</g>
<text x="40" y="44" fill="#eaf6ff" font-size="22" font-weight="700">gunnar</text>
<text x="143.2" y="38" fill="#9fc9e0" font-size="13">the write and read cycle through Arrow IPC and znippy — per git operation, and over time</text>
<text x="143.2" y="56" fill="#7fa8c4" font-size="10.5">every box and arrow carries the file:line it lives at</text>
<g font-size="11">
<line x1="908" y1="30" x2="944" y2="30" stroke="#6fd3f5" stroke-width="3"/>
<text x="952" y="34" fill="#cfe6f5">verified call edge</text>
<line x1="908" y1="48" x2="944" y2="48" stroke="#e0a86a" stroke-width="2.5" stroke-dasharray="7 5"/>
<text x="952" y="52" fill="#cfe6f5">built, nothing reads it</text>
<line x1="908" y1="66" x2="944" y2="66" stroke="#f0a9a0" stroke-width="2.5" stroke-dasharray="3 4"/>
<text x="952" y="70" fill="#cfe6f5">never produced on this path</text>
</g>
<!-- ==================== -->
<!-- PANEL 1 - the five reserved sections -->
<text x="40" y="108" fill="#6fd3f5" font-size="15" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">1</text>
<text x="74" y="108" fill="#eaf6ff" font-size="15" text-anchor="start" font-weight="700">The five reserved sections, and whether anything reads them</text>
<text x="74" y="125" fill="#9fc9e0" font-size="11" text-anchor="start">plugins/native/znippy-plugin-git/src/ · reserved = ordinary list / decompress / iceberg readers skip them</text>
<line x1="40" y1="134" x2="1140" y2="134" stroke="#143a52" stroke-width="1"/>
<rect x="40" y="152" width="204" height="224" rx="10" fill="url(#chip)" stroke="#6fd3f5" stroke-width="2"/>
<text x="142" y="176" fill="#eaf6ff" font-size="13.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_refs__</text>
<text x="142" y="192" fill="#9fc9e0" font-size="10" text-anchor="middle">Arrow IPC · push log</text>
<rect x="50" y="204" width="184" height="19" rx="4" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.1"/>
<text x="56" y="217.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">name</text>
<text x="228" y="217.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8</text>
<rect x="50" y="227" width="184" height="19" rx="4" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.1"/>
<text x="56" y="240.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">target</text>
<text x="228" y="240.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8? null=del</text>
<rect x="50" y="250" width="184" height="19" rx="4" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.1"/>
<text x="56" y="263.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peeled</text>
<text x="228" y="263.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8?</text>
<rect x="50" y="273" width="184" height="19" rx="4" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.1"/>
<text x="56" y="286.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">symref_target</text>
<text x="228" y="286.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8?</text>
<rect x="50" y="296" width="184" height="19" rx="4" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.1"/>
<text x="56" y="309.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">push_seq</text>
<text x="228" y="309.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">UInt64 order</text>
<rect x="50" y="319" width="184" height="19" rx="4" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.1"/>
<text x="56" y="332.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">updated_ms</text>
<text x="228" y="332.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">UInt64 wall</text>
<text x="40" y="392" fill="#5f8ba6" font-size="8.5" text-anchor="start">built</text>
<text x="244" y="392" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/refs.rs:93</text>
<text x="40" y="405" fill="#5f8ba6" font-size="8.5" text-anchor="start">writes</text>
<text x="244" y="405" fill="#8fe6b8" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/lib.rs:633</text>
<text x="40" y="418" fill="#5f8ba6" font-size="8.5" text-anchor="start">reads</text>
<text x="244" y="418" fill="#8fe6b8" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/unfold.rs:110</text>
<text x="40" y="437" fill="#a7e6c2" font-size="8.8" text-anchor="start">producer and consumer both live in</text>
<text x="40" y="448" fill="#a7e6c2" font-size="8.8" text-anchor="start">gunnar-coldtier, which no server build</text>
<text x="40" y="459" fill="#a7e6c2" font-size="8.8" text-anchor="start">constructs</text>
<rect x="264" y="152" width="204" height="224" rx="10" fill="url(#cold)" stroke="#f0a9a0" stroke-width="2" stroke-dasharray="3 4"/>
<text x="366" y="176" fill="#eaf6ff" font-size="13.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_secrets__</text>
<text x="366" y="192" fill="#9fc9e0" font-size="10" text-anchor="middle">Arrow IPC · same log</text>
<rect x="274" y="204" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="280" y="217.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">name</text>
<text x="452" y="217.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8</text>
<rect x="274" y="227" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="280" y="240.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">ciphertext</text>
<text x="452" y="240.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Binary? sealed</text>
<rect x="274" y="250" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="280" y="263.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">recipient</text>
<text x="452" y="263.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8? label</text>
<rect x="274" y="273" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="280" y="286.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">push_seq</text>
<text x="452" y="286.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">UInt64</text>
<rect x="274" y="296" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="280" y="309.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">updated_ms</text>
<text x="452" y="309.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">UInt64</text>
<text x="264" y="392" fill="#5f8ba6" font-size="8.5" text-anchor="start">built</text>
<text x="468" y="392" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/secrets.rs:89</text>
<text x="264" y="405" fill="#5f8ba6" font-size="8.5" text-anchor="start">writes</text>
<text x="468" y="405" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="264" y="418" fill="#5f8ba6" font-size="8.5" text-anchor="start">reads</text>
<text x="468" y="418" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="264" y="437" fill="#e6b7ad" font-size="8.8" text-anchor="start">FoldRequest carries no secrets, so the</text>
<text x="264" y="448" fill="#e6b7ad" font-size="8.8" text-anchor="start">archive section has no input; the store is</text>
<text x="264" y="459" fill="#e6b7ad" font-size="8.8" text-anchor="start">sealed separately at stores.rs:279</text>
<rect x="488" y="152" width="204" height="224" rx="10" fill="url(#cold)" stroke="#f0a9a0" stroke-width="2" stroke-dasharray="3 4"/>
<text x="590" y="176" fill="#eaf6ff" font-size="13.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_oid__</text>
<text x="590" y="192" fill="#9fc9e0" font-size="10" text-anchor="middle">raw · stree keyspace</text>
<rect x="498" y="204" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="504" y="217.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">magic/ver</text>
<text x="676" y="217.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">ZNPYGOID v2</text>
<rect x="498" y="227" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="504" y="240.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">keys[n]</text>
<text x="676" y="240.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">i64 oid[..8]</text>
<rect x="498" y="250" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="504" y="263.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">rows[n]</text>
<text x="676" y="263.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">u64 lookup</text>
<rect x="498" y="273" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="504" y="286.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">ords[n]</text>
<text x="676" y="286.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">u32 ordinal</text>
<rect x="498" y="296" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="504" y="309.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">oids[n]</text>
<text x="676" y="309.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">verify step</text>
<text x="590" y="332" fill="#7fa8c4" font-size="9" text-anchor="middle">8B prefix is a FILTER</text>
<text x="488" y="392" fill="#5f8ba6" font-size="8.5" text-anchor="start">built</text>
<text x="692" y="392" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/oid_index.rs:79</text>
<text x="488" y="405" fill="#5f8ba6" font-size="8.5" text-anchor="start">writes</text>
<text x="692" y="405" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="488" y="418" fill="#5f8ba6" font-size="8.5" text-anchor="start">reads</text>
<text x="692" y="418" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="488" y="437" fill="#e6b7ad" font-size="8.8" text-anchor="start">pack_tier returns an empty section list; the</text>
<text x="488" y="448" fill="#e6b7ad" font-size="8.8" text-anchor="start">pack's own .idx is the oid index, O(log n)</text>
<text x="488" y="459" fill="#e6b7ad" font-size="8.8" text-anchor="start">over a 256-bucket fanout</text>
<rect x="712" y="152" width="204" height="224" rx="10" fill="url(#cold)" stroke="#f0a9a0" stroke-width="2" stroke-dasharray="3 4"/>
<text x="814" y="176" fill="#eaf6ff" font-size="13.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_graph__</text>
<text x="814" y="192" fill="#9fc9e0" font-size="10" text-anchor="middle">Arrow IPC · commit graph</text>
<rect x="722" y="204" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="728" y="217.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">oid</text>
<text x="900" y="217.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8</text>
<rect x="722" y="227" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="728" y="240.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">parents</text>
<text x="900" y="240.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">List<Utf8></text>
<rect x="722" y="250" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="728" y="263.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">tree</text>
<text x="900" y="263.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8?</text>
<rect x="722" y="273" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="728" y="286.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">committer_time</text>
<text x="900" y="286.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Int64? s</text>
<rect x="722" y="296" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="728" y="309.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">generation</text>
<text x="900" y="309.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">UInt32 gen</text>
<text x="814" y="332" fill="#7fa8c4" font-size="9" text-anchor="middle">gen = 1 + max(parents)</text>
<text x="712" y="392" fill="#5f8ba6" font-size="8.5" text-anchor="start">built</text>
<text x="916" y="392" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/graph.rs:47</text>
<text x="712" y="405" fill="#5f8ba6" font-size="8.5" text-anchor="start">writes</text>
<text x="916" y="405" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="712" y="418" fill="#5f8ba6" font-size="8.5" text-anchor="start">reads</text>
<text x="916" y="418" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="712" y="437" fill="#e6b7ad" font-size="8.8" text-anchor="start">gunnar's ancestry walk is O(commits) object</text>
<text x="712" y="448" fill="#e6b7ad" font-size="8.8" text-anchor="start">reads instead</text>
<rect x="936" y="152" width="204" height="224" rx="10" fill="url(#cold)" stroke="#f0a9a0" stroke-width="2" stroke-dasharray="3 4"/>
<text x="1038" y="176" fill="#eaf6ff" font-size="13.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_reach__</text>
<text x="1038" y="192" fill="#9fc9e0" font-size="10" text-anchor="middle">Arrow IPC · roaring bitmaps</text>
<rect x="946" y="204" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="952" y="217.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">commit_oid</text>
<text x="1124" y="217.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Utf8</text>
<rect x="946" y="227" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="952" y="240.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">cardinality</text>
<text x="1124" y="240.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">UInt64</text>
<rect x="946" y="250" width="184" height="19" rx="4" fill="url(#slot)" stroke="#4a6f88" stroke-width="1.1"/>
<text x="952" y="263.5" fill="#bfe6ff" font-size="9.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">bitmap</text>
<text x="1124" y="263.5" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">Binary roaring</text>
<text x="1038" y="286" fill="#7fa8c4" font-size="9" text-anchor="middle">over object ORDINALS</text>
<text x="1038" y="309" fill="#7fa8c4" font-size="9" text-anchor="middle">want−have = ANDNOT</text>
<text x="1038" y="332" fill="#7fa8c4" font-size="9" text-anchor="middle">policy: 512 tips + stride</text>
<text x="936" y="392" fill="#5f8ba6" font-size="8.5" text-anchor="start">built</text>
<text x="1140" y="392" fill="#86b3cc" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">src/reach.rs:65</text>
<text x="936" y="405" fill="#5f8ba6" font-size="8.5" text-anchor="start">writes</text>
<text x="1140" y="405" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="936" y="418" fill="#5f8ba6" font-size="8.5" text-anchor="start">reads</text>
<text x="1140" y="418" fill="#f0a9a0" font-size="8.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">— none</text>
<text x="936" y="437" fill="#e6b7ad" font-size="8.8" text-anchor="start">gunnar answers want−have from a git</text>
<text x="936" y="448" fill="#e6b7ad" font-size="8.8" text-anchor="start">.bitmap over object ordinals, O(words); this</text>
<text x="936" y="459" fill="#e6b7ad" font-size="8.8" text-anchor="start">section is a second, unused encoding</text>
<!-- ==================== -->
<!-- ENCLOSING FACT - znippy is not in gunnar's resolved graph -->
<rect x="40" y="499" width="1100" height="77.8" rx="8" fill="url(#cold)" stroke="#f0a9a0" stroke-width="2" stroke-dasharray="3 4"/>
<text x="56" y="521" fill="#f0a9a0" font-size="13" text-anchor="start" font-weight="700">the five sections sit outside a server build's dependency graph</text>
<text x="56" y="537" fill="#e6b7ad" font-size="9.6" text-anchor="start">Cargo.toml:55 excludes crates/gunnar-coldtier from the workspace. znippy's codec cmake-builds C and C++ from a downloaded tarball during `cargo build`, and cargo reads a path dependency's manifest at</text>
<text x="56" y="549.6" fill="#e6b7ad" font-size="9.6" text-anchor="start">resolve time even when the feature is off, so a `znippy` feature would need a sibling checkout on every machine that builds gunnar. gunnar's Cargo.lock holds 0 znippy entries (oden 2026-08-04), and inside</text>
<text x="56" y="562.2" fill="#e6b7ad" font-size="9.6" text-anchor="start">a workspace member the three index sections exist only as comments.</text>
<!-- ==================== -->
<!-- PANEL 2 - per git operation, bytes in and bytes out -->
<text x="40" y="602.8" fill="#6fd3f5" font-size="15" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">2</text>
<text x="74" y="602.8" fill="#eaf6ff" font-size="15" text-anchor="start" font-weight="700">Per git operation: where the bytes enter, what touches them, where they leave</text>
<text x="74" y="619.8" fill="#9fc9e0" font-size="11" text-anchor="start">solid = verified call edge · dashed amber = written and never read · dotted coral = never produced on this path</text>
<line x1="40" y1="628.8" x2="1140" y2="628.8" stroke="#143a52" stroke-width="1"/>
<rect x="40" y="646.8" width="1100" height="22" rx="5" fill="url(#rail)" stroke="#3c6a86" stroke-width="1"/>
<text x="50" y="662.3" fill="#dff1ff" font-size="11.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">git push</text>
<text x="172" y="662.3" fill="#9fc9e0" font-size="10" text-anchor="start">receive-pack</text>
<text x="1130" y="662.3" fill="#7fa8c4" font-size="9" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">in: pkt-line cmds + PACK, ssh/http out: pack-<id>.pack/.idx + ref CAS</text>
<rect x="40" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="107.43" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">pkt-line</text>
<text x="107.43" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">cmd list, sideband</text>
<text x="107.43" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">server/transport.rs:830</text>
<path d="M177.86 703.8 H191.86" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="187.86" cy="703.8" r="3" fill="#bfecff"/>
<rect x="200.86" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="268.29" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">serve_session</text>
<text x="268.29" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle"><old> <new> <ref></text>
<text x="268.29" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/receive_pack.rs:449</text>
<path d="M338.71 703.8 H352.71" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="348.71" cy="703.8" r="3" fill="#bfecff"/>
<rect x="361.71" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="429.14" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">index_thin_pack</text>
<text x="429.14" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">O(bytes), SHA-1-bound</text>
<text x="429.14" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/read.rs:138</text>
<path d="M499.57 703.8 H513.57" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="509.57" cy="703.8" r="3" fill="#bfecff"/>
<rect x="522.57" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="590" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">gate</text>
<text x="590" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">connectivity, O(new objects)</text>
<text x="590" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/receive_pack.rs:906</text>
<path d="M660.43 703.8 H674.43" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="670.43" cy="703.8" r="3" fill="#bfecff"/>
<rect x="683.43" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="750.86" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">ref CAS</text>
<text x="750.86" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">MustExistAndMatch(old)</text>
<text x="750.86" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/receive_pack.rs:1111</text>
<path d="M821.29 703.8 H835.29" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="831.29" cy="703.8" r="3" fill="#bfecff"/>
<rect x="844.29" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="911.71" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">transaction</text>
<text x="911.71" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">gix-ref lock, commit</text>
<text x="911.71" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/fs.rs:869</text>
<path d="M982.14 703.8 H996.14" fill="none" stroke="#f0a9a0" stroke-width="2.6" stroke-dasharray="3 4" marker-end="url(#arrow)"/>
<circle cx="992.14" cy="703.8" r="3" fill="#bfecff"/>
<rect x="1005.14" y="678.8" width="134.86" height="50" rx="7" fill="url(#chip)" stroke="#f0a9a0" stroke-width="1.6" stroke-dasharray="3 4"/>
<text x="1072.57" y="697.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_refs__</text>
<text x="1072.57" y="711.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">one RecordBatch per push</text>
<text x="1072.57" y="723.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/refs.rs:93</text>
<text x="40" y="744.8" fill="#f0a9a0" font-size="9.5" text-anchor="start">The live ref transaction lands in gix-ref and arrow_log. znippy's RefLog is constructed inside a fold (gunnar-coldtier/src/lib.rs:186) from a ref snapshot pushed as one batch, so a sealed __gunnar_refs__ carries</text>
<text x="40" y="757.3" fill="#f0a9a0" font-size="9.5" text-anchor="start">one frame holding the current namespace rather than one frame per push.</text>
<rect x="40" y="783.8" width="1100" height="22" rx="5" fill="url(#rail)" stroke="#3c6a86" stroke-width="1"/>
<text x="50" y="799.3" fill="#dff1ff" font-size="11.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">git fetch / clone</text>
<text x="172" y="799.3" fill="#9fc9e0" font-size="10" text-anchor="start">upload-pack</text>
<text x="1130" y="799.3" fill="#7fa8c4" font-size="9" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">in: ls-refs, want/have out: PACK on the wire</text>
<rect x="40" y="815.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="120.83" y="834.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">advertise</text>
<text x="120.83" y="848.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">v2 caps, ls-refs</text>
<text x="120.83" y="860.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/upload_pack.rs:584</text>
<path d="M204.67 840.8 H218.67" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="214.67" cy="840.8" r="3" fill="#bfecff"/>
<rect x="227.67" y="815.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="308.5" y="834.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">negotiate</text>
<text x="308.5" y="848.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">haves/wants, HaveMemo</text>
<text x="308.5" y="860.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/negotiate.rs:320</text>
<path d="M392.33 840.8 H406.33" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="402.33" cy="840.8" r="3" fill="#bfecff"/>
<rect x="415.33" y="815.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="496.17" y="834.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">select_objects</text>
<text x="496.17" y="848.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">want−have, bitmap or walk</text>
<text x="496.17" y="860.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/graph.rs:1857</text>
<path d="M580 840.8 H594" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="590" cy="840.8" r="3" fill="#bfecff"/>
<rect x="603" y="815.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="683.83" y="834.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">objects.packed()</text>
<text x="683.83" y="848.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">P-001 seam on ObjectStore</text>
<text x="683.83" y="860.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/object.rs:179</text>
<path d="M767.67 840.8 H781.67" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="777.67" cy="840.8" r="3" fill="#bfecff"/>
<rect x="790.67" y="815.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="871.5" y="834.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">write_pack_copy</text>
<text x="871.5" y="848.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">byte-range copy, O(bytes)</text>
<text x="871.5" y="860.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/copy.rs:1145</text>
<path d="M955.33 840.8 H969.33" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="965.33" cy="840.8" r="3" fill="#bfecff"/>
<rect x="978.33" y="815.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="1059.17" y="834.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">send_pack</text>
<text x="1059.17" y="848.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">sideband out</text>
<text x="1059.17" y="860.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/upload_pack.rs:1608</text>
<text x="40" y="881.8" fill="#a7e6c2" font-size="9.5" text-anchor="start">The copy branch is taken whenever the store has packs (upload_pack.rs:1396); its applied output is objects_copied_from_pack against objects_recompressed. Selection is answered from a git .bitmap when one is</text>
<text x="40" y="894.3" fill="#a7e6c2" font-size="9.5" text-anchor="start">present and falls back to a closure walk when it is not — the archive's own reach encoding is a second representation of the same set and is not the one gunnar reads.</text>
<rect x="40" y="920.8" width="1100" height="22" rx="5" fill="url(#rail)" stroke="#3c6a86" stroke-width="1"/>
<text x="50" y="936.3" fill="#dff1ff" font-size="11.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">gc / repack</text>
<text x="172" y="936.3" fill="#9fc9e0" font-size="10" text-anchor="start">fold, then re-seal</text>
<text x="1130" y="936.3" fill="#7fa8c4" font-size="9" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">in: N packs + loose objects out: 1 consolidated pack</text>
<rect x="40" y="952.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="120.83" y="971.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">snapshot</text>
<text x="120.83" y="985.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">only what is named dies</text>
<text x="120.83" y="997.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/repack.rs:2127</text>
<path d="M204.67 977.8 H218.67" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="214.67" cy="977.8" r="3" fill="#bfecff"/>
<rect x="227.67" y="952.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="308.5" y="971.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">write_pack_file</text>
<text x="308.5" y="985.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">AsIs expansion, sync_all</text>
<text x="308.5" y="997.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/repack.rs:1836</text>
<path d="M392.33 977.8 H406.33" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="402.33" cy="977.8" r="3" fill="#bfecff"/>
<rect x="415.33" y="952.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="496.17" y="971.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">verify</text>
<text x="496.17" y="985.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">verify_pack_holds</text>
<text x="496.17" y="997.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/repack.rs:1374</text>
<path d="M580 977.8 H594" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="590" cy="977.8" r="3" fill="#bfecff"/>
<rect x="603" y="952.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="683.83" y="971.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">sync_dir</text>
<text x="683.83" y="985.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">new pack DURABLE</text>
<text x="683.83" y="997.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/repack.rs:1514</text>
<path d="M767.67 977.8 H781.67" fill="none" stroke="#e0a86a" stroke-width="2.6" stroke-dasharray="7 5" marker-end="url(#arrow)"/>
<circle cx="777.67" cy="977.8" r="3" fill="#bfecff"/>
<rect x="790.67" y="952.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#e0a86a" stroke-width="1.6" stroke-dasharray="7 5"/>
<text x="871.5" y="971.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">3b ColdTier::fold</text>
<text x="871.5" y="985.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">? aborts the whole repack</text>
<text x="871.5" y="997.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/repack.rs:1540</text>
<path d="M955.33 977.8 H969.33" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="965.33" cy="977.8" r="3" fill="#bfecff"/>
<rect x="978.33" y="952.8" width="161.67" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="1059.17" y="971.8" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">unlink old</text>
<text x="1059.17" y="985.8" fill="#9fc9e0" font-size="8.8" text-anchor="middle">midx, then .idx, then .pack</text>
<text x="1059.17" y="997.8" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/repack.rs:2204</text>
<text x="40" y="1018.8" fill="#ffcf7a" font-size="9.5" text-anchor="start">The ordering is the durability contract: the fold at repack.rs:1540 sits after sync_dir at :1514 and before the first unlink at :2204, so a failed fold costs a retry and never a repository with neither copy. `gc`</text>
<text x="40" y="1031.3" fill="#ffcf7a" font-size="9.5" text-anchor="start">builds RepackOptions::new() at gunnar-cli/src/server/admin.rs:383, so the packfile is the cold tier and the control plane reports total_cold_bytes 0 (control_plane.rs:903). The reasoning is in</text>
<text x="40" y="1043.8" fill="#ffcf7a" font-size="9.5" text-anchor="start">.nornir/cold-tier-decision.md.</text>
<rect x="40" y="1070.3" width="1100" height="22" rx="5" fill="url(#rail)" stroke="#3c6a86" stroke-width="1"/>
<text x="50" y="1085.8" fill="#dff1ff" font-size="11.5" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">secrets</text>
<text x="172" y="1085.8" fill="#9fc9e0" font-size="10" text-anchor="start">host key, deploy keys, webhook tokens</text>
<text x="1130" y="1085.8" fill="#7fa8c4" font-size="9" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">in: ed25519 minted in-process out: sealed arrow_log rows</text>
<rect x="40" y="1102.3" width="199.2" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="139.6" y="1121.3" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">ensure_host_key</text>
<text x="139.6" y="1135.3" fill="#9fc9e0" font-size="8.8" text-anchor="middle">minted, never shelled out</text>
<text x="139.6" y="1147.3" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/host_key.rs:103</text>
<path d="M242.2 1127.3 H256.2" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="252.2" cy="1127.3" r="3" fill="#bfecff"/>
<rect x="265.2" y="1102.3" width="199.2" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="364.8" y="1121.3" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">SecretStore::put</text>
<text x="364.8" y="1135.3" fill="#9fc9e0" font-size="8.8" text-anchor="middle">trait + blanket impls</text>
<text x="364.8" y="1147.3" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/secret.rs:25</text>
<path d="M467.4 1127.3 H481.4" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="477.4" cy="1127.3" r="3" fill="#bfecff"/>
<rect x="490.4" y="1102.3" width="199.2" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="590" y="1121.3" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">Stores::secrets()</text>
<text x="590" y="1135.3" fill="#9fc9e0" font-size="8.8" text-anchor="middle">the D26 boot-path handle</text>
<text x="590" y="1147.3" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">server/stores.rs:278</text>
<path d="M692.6 1127.3 H706.6" fill="none" stroke="#6fd3f5" stroke-width="2.6" marker-end="url(#arrow)"/>
<circle cx="702.6" cy="1127.3" r="3" fill="#bfecff"/>
<rect x="715.6" y="1102.3" width="199.2" height="50" rx="7" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.6"/>
<text x="815.2" y="1121.3" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">SealedSecretStore</text>
<text x="815.2" y="1135.3" fill="#9fc9e0" font-size="8.8" text-anchor="middle">AEAD under a KEK</text>
<text x="815.2" y="1147.3" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/seal.rs:397</text>
<path d="M917.8 1127.3 H931.8" fill="none" stroke="#f0a9a0" stroke-width="2.6" stroke-dasharray="3 4" marker-end="url(#arrow)"/>
<circle cx="927.8" cy="1127.3" r="3" fill="#bfecff"/>
<rect x="940.8" y="1102.3" width="199.2" height="50" rx="7" fill="url(#chip)" stroke="#f0a9a0" stroke-width="1.6" stroke-dasharray="3 4"/>
<text x="1040.4" y="1121.3" fill="#eaf6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">__gunnar_secrets__</text>
<text x="1040.4" y="1135.3" fill="#9fc9e0" font-size="8.8" text-anchor="middle">never reaches an archive</text>
<text x="1040.4" y="1147.3" fill="#5f8ba6" font-size="7.6" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">src/secrets.rs:89</text>
<text x="40" y="1168.3" fill="#a7e6c2" font-size="9.5" text-anchor="start">Stores::secrets() (stores.rs:279) constructs SealedSecretStore over the raw ArrowLogSecretStore, the KEK comes from Kek::for_control_dir at stores.rs:223, and serve.rs:387 takes that handle. Sealing happens at</text>
<text x="40" y="1180.8" fill="#a7e6c2" font-size="9.5" text-anchor="start">the store; __gunnar_secrets__ is a separate archive-side encoding that FoldRequest carries no input for (repack.rs:188).</text>
<!-- ==================== -->
<!-- PANEL 3 - over time: one frame per push, packs accumulate, a re-seal compacts -->
<text x="40" y="1225.3" fill="#6fd3f5" font-size="15" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">3</text>
<text x="74" y="1225.3" fill="#eaf6ff" font-size="15" text-anchor="start" font-weight="700">Over time — the part a box diagram cannot show</text>
<text x="74" y="1242.3" fill="#9fc9e0" font-size="11" text-anchor="start">each push appends one self-contained Arrow frame · packs accumulate · a re-seal compacts</text>
<line x1="40" y1="1251.3" x2="1140" y2="1251.3" stroke="#143a52" stroke-width="1"/>
<text x="40" y="1271.3" fill="#bcd9ec" font-size="11" text-anchor="start" font-weight="700">the live push log — one RecordBatch per push, fsynced</text>
<text x="40" y="1285.3" fill="#7fa8c4" font-size="9" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">plugins/native/znippy-plugin-git/src/pushlog.rs:266 append() · frame = [ schema | batch | EOS ] · the frame boundary is the transaction</text>
<rect x="40" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<rect x="46" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="61" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="78" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="101" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<rect x="126" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="141" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">EOS</text>
<text x="99" y="1331.3" fill="#9fc9e0" font-size="8.2" text-anchor="middle">push 1</text>
<rect x="166" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<rect x="172" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="187" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="204" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="227" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<rect x="252" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="267" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">EOS</text>
<text x="225" y="1331.3" fill="#9fc9e0" font-size="8.2" text-anchor="middle">push 2</text>
<rect x="292" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<rect x="298" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="313" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="330" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="353" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<rect x="378" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="393" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">EOS</text>
<text x="351" y="1331.3" fill="#9fc9e0" font-size="8.2" text-anchor="middle">push 3</text>
<rect x="418" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<rect x="424" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="439" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="456" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="479" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<rect x="504" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="519" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">EOS</text>
<text x="477" y="1331.3" fill="#9fc9e0" font-size="8.2" text-anchor="middle">push 4</text>
<rect x="544" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<rect x="550" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="565" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="582" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="605" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<rect x="630" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="645" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">EOS</text>
<text x="603" y="1331.3" fill="#9fc9e0" font-size="8.2" text-anchor="middle">push 5</text>
<rect x="670" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.4"/>
<rect x="676" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="691" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="708" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="731" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<rect x="756" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#4a8fb0" stroke-width="1"/>
<text x="771" y="1315.8" fill="#a9d8ee" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">EOS</text>
<text x="729" y="1331.3" fill="#9fc9e0" font-size="8.2" text-anchor="middle">push 6</text>
<rect x="796" y="1297.3" width="118" height="40" rx="5" fill="url(#slot)" stroke="#f0a9a0" stroke-width="1.4" stroke-dasharray="3 4"/>
<rect x="802" y="1305.3" width="30" height="14" rx="2" fill="#0a2032" stroke="#7a4038" stroke-width="1"/>
<text x="817" y="1315.8" fill="#e6b7ad" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">schema</text>
<rect x="834" y="1305.3" width="46" height="14" rx="2" fill="#0a2032" stroke="#7a4038" stroke-width="1"/>
<text x="857" y="1315.8" fill="#e6b7ad" font-size="7.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">batch</text>
<text x="855" y="1331.3" fill="#f0a9a0" font-size="8.2" text-anchor="middle">torn — discarded whole</text>
<text x="1140" y="1351.3" fill="#86b3cc" font-size="9" text-anchor="end">scan_frames reads forward while frames parse and stops at the first that does not — pushlog.rs:126</text>
<text x="40" y="1351.3" fill="#86b3cc" font-size="9" text-anchor="start">frame = 2056 B · schema 448 B (21.8%) · batch 1600 B · 4 refs/push, oden 2026-08-03</text>
<text x="40" y="1383.3" fill="#bcd9ec" font-size="11" text-anchor="start" font-weight="700">what accumulates is packs, not payload — the append is flat, the pack count is not</text>
<text x="40" y="1397.3" fill="#7fa8c4" font-size="9" text-anchor="start">oden 2026-08-03 · arm gunnar.coldtier_growth · 1000 real pushes onto a 512 KiB tree · repeated at loadavg 36.3 and 56.7,</text>
<text x="40" y="1409.3" fill="#7fa8c4" font-size="9" text-anchor="start">agreeing to better than 0.01%</text>
<text x="84" y="1434.3" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">10 pushes</text>
<rect x="92" y="1424.3" width="106.26" height="8" rx="2" fill="url(#cold)" stroke="#7a4038" stroke-width="1"/>
<rect x="92" y="1434.3" width="53.39" height="8" rx="2" fill="url(#hot)" stroke="#2f7d54" stroke-width="1"/>
<text x="206.26" y="1432.3" fill="#f0a9a0" font-size="8.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">archive 32.3 kB</text>
<text x="153.39" y="1442.3" fill="#a7e6c2" font-size="8.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">objects 18.0 kB → 1.79x</text>
<text x="84" y="1460.3" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">100 pushes</text>
<rect x="92" y="1450.3" width="284.6" height="8" rx="2" fill="url(#cold)" stroke="#7a4038" stroke-width="1"/>
<rect x="92" y="1460.3" width="216.18" height="8" rx="2" fill="url(#hot)" stroke="#2f7d54" stroke-width="1"/>
<text x="384.6" y="1458.3" fill="#f0a9a0" font-size="8.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">archive 230.5 kB</text>
<text x="316.18" y="1468.3" fill="#a7e6c2" font-size="8.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">objects 108.4 kB → 2.13x</text>
<text x="84" y="1486.3" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">1000 pushes</text>
<rect x="92" y="1476.3" width="490" height="8" rx="2" fill="url(#cold)" stroke="#7a4038" stroke-width="1"/>
<rect x="92" y="1486.3" width="356.62" height="8" rx="2" fill="url(#hot)" stroke="#2f7d54" stroke-width="1"/>
<text x="590" y="1484.3" fill="#f0a9a0" font-size="8.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">archive 2.22 MB</text>
<text x="456.62" y="1494.3" fill="#a7e6c2" font-size="8.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">objects 510.1 kB → 4.35x</text>
<text x="92" y="1509.3" fill="#5f8ba6" font-size="8.4" text-anchor="start">bar length ∝ log10(bytes) — the span is 68.8x and a linear axis would show one bar and two slivers</text>
<text x="92" y="1521.3" fill="#86b3cc" font-size="8.8" text-anchor="start">per-push append: 1556 / 1558 / 1557 B, flat · the growth is 1000 packs, rows_replaced 0 throughout</text>
<rect x="704" y="1409.3" width="436" height="140" rx="8" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2"/>
<text x="922" y="1427.3" fill="#dff1ff" font-size="12" text-anchor="middle" font-weight="700">the re-seal</text>
<text x="922" y="1442.3" fill="#bcd9ec" font-size="9" text-anchor="middle">seal() — the compaction repack() calls</text>
<text x="922" y="1463.3" fill="#f0a9a0" font-size="14" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">2 219 778 B</text>
<text x="922" y="1479.3" fill="#6fd3f5" font-size="13" text-anchor="middle">↓</text>
<text x="922" y="1497.3" fill="#8fe6b8" font-size="16" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace" font-weight="700">427 820 B</text>
<text x="922" y="1515.3" fill="#a7e6c2" font-size="9.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">5.19x reclaimed · 2.4 ms CPU</text>
<text x="922" y="1531.3" fill="#7fa8c4" font-size="8.6" text-anchor="middle">staged · fsync · rename · fsync parent</text>
<!-- ==================== -->
<!-- GROUND RAIL - the claim -->
<rect x="40" y="1591.3" width="1100" height="109.2" rx="10" fill="url(#rail)" stroke="#7fc8ea" stroke-width="2"/>
<circle cx="64" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="144" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="224" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="304" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="384" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="464" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="544" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="624" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="704" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="784" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="864" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="944" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="1024" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<circle cx="1104" cy="1691.5" r="4" fill="#0a1c2c" stroke="#7fc8ea" stroke-width="1.5"/>
<text x="58" y="1615.3" fill="#dff1ff" font-size="15" text-anchor="start" font-weight="700">where each seam stands</text>
<text x="58" y="1635.3" fill="#bcd9ec" font-size="9.8" text-anchor="start">RepackOptions::cold_tier() has no caller in a server crate; `gc` builds RepackOptions::new() at gunnar-cli/src/server/admin.rs:383, so the packfile is the cold tier. SealedSecretStore is constructed</text>
<text x="58" y="1648.1" fill="#bcd9ec" font-size="9.8" text-anchor="start">on the boot path at crates/gunnar-cli/src/server/stores.rs:279, so the secret STORE is sealed while the archive section __gunnar_secrets__ has no producer. __gunnar_oid__, __gunnar_graph__ and</text>
<text x="58" y="1660.9" fill="#bcd9ec" font-size="9.8" text-anchor="start">__gunnar_reach__ are not emitted at all, because GitIndexBuilder::pack_tier returns an empty section list by construction (plugins/native/znippy-plugin-git/src/sections.rs:249) — the pack's own</text>
<text x="58" y="1673.7" fill="#bcd9ec" font-size="9.8" text-anchor="start">.idx is the oid index, and the other two derive from object payloads a pack tier never inflates.</text>
</svg>