.nornir/assets/git-refs.svg
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="360" font-family="monospace" font-size="13">
<style>
.box{rx:6;ry:6;stroke-width:1.5}
.snap{fill:#123448;stroke:#4f9ec0}
.branch{fill:#233a2b;stroke:#4fae76}
.tag{fill:#3a3323;stroke:#c0a24f}
.t{fill:#e8e4da}.dim{fill:#9a948a}
.arr{stroke:#6fd3f5;stroke-width:1.6;fill:none;marker-end:url(#a)}
.ff{stroke:#4fae76;stroke-width:1.6;fill:none;marker-end:url(#g);stroke-dasharray:4 3}
.hdr{fill:#e8e4da;font-size:15px;font-weight:bold}
.lbl{fill:#e8e4da;font-size:12px;font-weight:bold}
</style>
<defs>
<marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 Z" fill="#6fd3f5"/></marker>
<marker id="g" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 Z" fill="#4fae76"/></marker>
</defs>
<rect width="760" height="360" fill="#14110d"/>
<text x="16" y="26" class="hdr">skade git-like refs — branches, tags, WAP, rollback (100% within Iceberg)</text>
<!-- snapshot chain -->
<text x="16" y="66" class="dim">snapshot history (parent → child)</text>
<rect class="box snap" x="16" y="76" width="120" height="42"/><text x="30" y="102" class="t">S1 1001</text>
<rect class="box snap" x="176" y="76" width="120" height="42"/><text x="190" y="102" class="t">S2 1002</text>
<rect class="box snap" x="336" y="76" width="120" height="42"/><text x="350" y="102" class="t">S3 1003</text>
<path class="arr" d="M136,97 L174,97"/>
<path class="arr" d="M296,97 L334,97"/>
<!-- refs pointing at snapshots -->
<rect class="box tag" x="176" y="160" width="120" height="40"/><text x="190" y="185" class="t">tag v1</text>
<path class="arr" d="M236,158 L236,120"/>
<rect class="box branch" x="336" y="160" width="120" height="40"/><text x="350" y="185" class="t">main</text>
<path class="arr" d="M396,158 L396,120"/>
<rect class="box branch" x="16" y="160" width="120" height="40"/><text x="30" y="185" class="t">feature</text>
<path class="arr" d="M76,158 L76,120"/>
<!-- WAP audit branch + fast-forward publish -->
<text x="516" y="66" class="dim">write-audit-publish</text>
<rect class="box branch" x="516" y="76" width="150" height="42"/><text x="530" y="102" class="t">audit 1004</text>
<rect class="box branch" x="516" y="160" width="150" height="42"/><text x="530" y="185" class="t">main (production)</text>
<path class="ff" d="M591,158 L591,120"/>
<text x="600" y="146" class="lbl" fill="#4fae76">publish_branch</text>
<text x="516" y="230" class="dim">fast-forward main ← audit</text>
<text x="516" y="248" class="dim">(refuses non-fast-forward)</text>
<!-- rollback -->
<text x="16" y="262" class="dim">rollback_to(1001): move main back along its ancestry (git reset --hard)</text>
<path class="ff" d="M396,232 C300,300 180,300 96,208" />
<text x="200" y="300" class="lbl" fill="#4fae76">rollback (ancestor-only, reversible)</text>
<text x="16" y="336" class="dim">every move = SetSnapshotRef / RemoveSnapshotRef via commit_table — one redb txn/fsync, RefSnapshotIdMatch CAS guard</text>
</svg>