Files
settled-reach/docs/diagrams/architecture/testability.svg
T
jpmschweitzerandClaude Opus 5 0817befcba docs(diagrams): SVG replaces PNG, and a map of the wiki generator flow
d2 emits SVG natively; its PNG path wants a ~150 MB headless-Chromium
download and prompts interactively, so every PNG here was produced by an
out-of-band magick step. There is no Chromium on this system. Dropping PNG
removes the dependency rather than trading one format for another, and cuts
docs/diagrams/ from 17 MB to 3.3 MB. SVG renders in Gitea and in clide
(`clide draw --file <path>`, which takes .d2 source directly), and diffs as
text.

One PNG is kept on purpose: design/star-map-concentric.png has no .d2 source.

Also renders the 7 star-map .d2 files for the first time. star-map-plan.md
listed their renders as a deliverable in March and the step never ran; the
new `make check-diagrams` is what surfaced it.

New: docs/diagrams/data-flow/wiki-generator-flow.d2 — which way the arrows
point for any file under wiki/. Every edge was read in the tool's own source
rather than inferred. It records the trap that keeps costing us: scaffold_bodies.py
writes a body page once and never overwrites it, and the generator then reads
that frontmatter directly — so a hand-edit there is not reverted, it is obeyed,
and silently changes world generation.

Two rendering traps found the expensive way and now written down:

- A d2 `|md` block becomes an SVG <foreignObject>. ImageMagick and flutter_svg
  both silently drop it, so the legend was in the file and invisible in every
  viewer except a browser. Plain labels render as real <text> everywhere.
- Container boxes fight the layout engine. Grouping nodes whose flow-depths
  differ forces long edge routes; this diagram went from an unreadable 2.4:1
  sprawl to a legible 0.75:1 by deleting five containers and changing nothing
  else. Colour classes carry the grouping instead.

make diagrams / make check-diagrams render and gate. Repo-specific rules in
.claude/rules/diagrams.md; d2 syntax and the traps live in the user-scope
d2-diagram skill, whose PNG default was flipped to SVG to match.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 01:49:19 +02:00

115 lines
40 KiB
XML

<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="v0.8.1-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 3051 909"><svg class="d2-3315428149 d2-svg" width="3051" height="909" viewBox="-78 -121 3051 909"><rect x="-78.000000" y="-121.000000" width="3051.000000" height="909.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-3315428149 .text {
font-family: "d2-3315428149-font-regular";
}
@font-face {
font-family: d2-3315428149-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-3315428149 .text-bold {
font-family: "d2-3315428149-font-bold";
}
@font-face {
font-family: d2-3315428149-font-bold;
src: url("data:application/font-woff;base64,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");
}
.d2-3315428149 .text-italic {
font-family: "d2-3315428149-font-italic";
}
@font-face {
font-family: d2-3315428149-font-italic;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
stroke-linejoin: round;
}
.connection {
stroke-linecap: round;
stroke-linejoin: round;
}
.blend {
mix-blend-mode: multiply;
opacity: 0.5;
}
.d2-3315428149 .fill-N1{fill:#0A0F25;}
.d2-3315428149 .fill-N2{fill:#676C7E;}
.d2-3315428149 .fill-N3{fill:#9499AB;}
.d2-3315428149 .fill-N4{fill:#CFD2DD;}
.d2-3315428149 .fill-N5{fill:#DEE1EB;}
.d2-3315428149 .fill-N6{fill:#EEF1F8;}
.d2-3315428149 .fill-N7{fill:#FFFFFF;}
.d2-3315428149 .fill-B1{fill:#0D32B2;}
.d2-3315428149 .fill-B2{fill:#0D32B2;}
.d2-3315428149 .fill-B3{fill:#E3E9FD;}
.d2-3315428149 .fill-B4{fill:#E3E9FD;}
.d2-3315428149 .fill-B5{fill:#EDF0FD;}
.d2-3315428149 .fill-B6{fill:#F7F8FE;}
.d2-3315428149 .fill-AA2{fill:#4A6FF3;}
.d2-3315428149 .fill-AA4{fill:#EDF0FD;}
.d2-3315428149 .fill-AA5{fill:#F7F8FE;}
.d2-3315428149 .fill-AB4{fill:#EDF0FD;}
.d2-3315428149 .fill-AB5{fill:#F7F8FE;}
.d2-3315428149 .stroke-N1{stroke:#0A0F25;}
.d2-3315428149 .stroke-N2{stroke:#676C7E;}
.d2-3315428149 .stroke-N3{stroke:#9499AB;}
.d2-3315428149 .stroke-N4{stroke:#CFD2DD;}
.d2-3315428149 .stroke-N5{stroke:#DEE1EB;}
.d2-3315428149 .stroke-N6{stroke:#EEF1F8;}
.d2-3315428149 .stroke-N7{stroke:#FFFFFF;}
.d2-3315428149 .stroke-B1{stroke:#0D32B2;}
.d2-3315428149 .stroke-B2{stroke:#0D32B2;}
.d2-3315428149 .stroke-B3{stroke:#E3E9FD;}
.d2-3315428149 .stroke-B4{stroke:#E3E9FD;}
.d2-3315428149 .stroke-B5{stroke:#EDF0FD;}
.d2-3315428149 .stroke-B6{stroke:#F7F8FE;}
.d2-3315428149 .stroke-AA2{stroke:#4A6FF3;}
.d2-3315428149 .stroke-AA4{stroke:#EDF0FD;}
.d2-3315428149 .stroke-AA5{stroke:#F7F8FE;}
.d2-3315428149 .stroke-AB4{stroke:#EDF0FD;}
.d2-3315428149 .stroke-AB5{stroke:#F7F8FE;}
.d2-3315428149 .background-color-N1{background-color:#0A0F25;}
.d2-3315428149 .background-color-N2{background-color:#676C7E;}
.d2-3315428149 .background-color-N3{background-color:#9499AB;}
.d2-3315428149 .background-color-N4{background-color:#CFD2DD;}
.d2-3315428149 .background-color-N5{background-color:#DEE1EB;}
.d2-3315428149 .background-color-N6{background-color:#EEF1F8;}
.d2-3315428149 .background-color-N7{background-color:#FFFFFF;}
.d2-3315428149 .background-color-B1{background-color:#0D32B2;}
.d2-3315428149 .background-color-B2{background-color:#0D32B2;}
.d2-3315428149 .background-color-B3{background-color:#E3E9FD;}
.d2-3315428149 .background-color-B4{background-color:#E3E9FD;}
.d2-3315428149 .background-color-B5{background-color:#EDF0FD;}
.d2-3315428149 .background-color-B6{background-color:#F7F8FE;}
.d2-3315428149 .background-color-AA2{background-color:#4A6FF3;}
.d2-3315428149 .background-color-AA4{background-color:#EDF0FD;}
.d2-3315428149 .background-color-AA5{background-color:#F7F8FE;}
.d2-3315428149 .background-color-AB4{background-color:#EDF0FD;}
.d2-3315428149 .background-color-AB5{background-color:#F7F8FE;}
.d2-3315428149 .color-N1{color:#0A0F25;}
.d2-3315428149 .color-N2{color:#676C7E;}
.d2-3315428149 .color-N3{color:#9499AB;}
.d2-3315428149 .color-N4{color:#CFD2DD;}
.d2-3315428149 .color-N5{color:#DEE1EB;}
.d2-3315428149 .color-N6{color:#EEF1F8;}
.d2-3315428149 .color-N7{color:#FFFFFF;}
.d2-3315428149 .color-B1{color:#0D32B2;}
.d2-3315428149 .color-B2{color:#0D32B2;}
.d2-3315428149 .color-B3{color:#E3E9FD;}
.d2-3315428149 .color-B4{color:#E3E9FD;}
.d2-3315428149 .color-B5{color:#EDF0FD;}
.d2-3315428149 .color-B6{color:#F7F8FE;}
.d2-3315428149 .color-AA2{color:#4A6FF3;}
.d2-3315428149 .color-AA4{color:#EDF0FD;}
.d2-3315428149 .color-AA5{color:#F7F8FE;}
.d2-3315428149 .color-AB4{color:#EDF0FD;}
.d2-3315428149 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3315428149);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-3315428149);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3315428149);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3315428149);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3315428149);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3315428149);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3315428149);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3315428149);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="cnVubmVycw=="><g class="shape" ><rect x="23.000000" y="20.000000" width="365.000000" height="395.000000" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="205.500000" y="7.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">Test Runners</text></g><g class="b3V0cHV0"><g class="shape" ><path d="M 151 572 H 259 C 260 572 261 572 262 573 L 279 589 C 280 590 280 591 280 592 V 659 C 280 659 280 659 280 659 H 151 C 150 659 150 659 150 659 V 573 C 150 572 150 572 151 572 Z" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /><path d="M 279 659 H 151 C 150 659 150 659 150 658 V 573 C 150 572 150 572 151 572 H 258 C 259 572 259 572 259 573 V 590 C 259 591 260 592 261 592 H 279 C 280 592 280 592 280 593 V 658 C 279 659 280 659 279 659 Z" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="215.000000" y="621.000000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">Test Output</text></g><g class="aXBjX2xheWVycw=="><g class="shape" ><rect x="2029.000000" y="20.000000" width="373.000000" height="667.000000" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="2215.500000" y="7.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">IPC Test Layers</text></g><g class="cGhhc2Vz"><g class="shape" ><rect x="2442.000000" y="20.000000" width="430.000000" height="667.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="2657.000000" y="7.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">Test Phases</text></g><g class="Y29uc3RyYWludHM="><g class="shape" ><rect x="450.000000" y="20.000000" width="1539.000000" height="142.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="1219.500000" y="7.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">Production Code Constraints</text></g><g class="cnVubmVycy5ydXN0X3J1bm5lcg=="><g class="shape" ><rect x="53.000000" y="303.000000" width="142.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="124.000000" y="341.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="124.000000" dy="0.000000">cargo nextest</tspan><tspan x="124.000000" dy="18.500000">(Rust)</tspan></text></g><g class="cnVubmVycy5nb2RvdF9ydW5uZXI="><g class="shape" ><rect x="255.000000" y="303.000000" width="103.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="306.500000" y="341.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="306.500000" dy="0.000000">gdUnit4</tspan><tspan x="306.500000" dy="18.500000">(Godot)</tspan></text></g><g class="cnVubmVycy53cmFwcGVy"><g class="shape" ><rect x="119.000000" y="50.000000" width="193.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="215.500000" y="88.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="215.500000" dy="0.000000">bash wrapper scripts</tspan><tspan x="215.500000" dy="18.500000">(tests/ directory)</tspan></text></g><g class="aXBjX2xheWVycy5sMQ=="><g class="shape" ><rect x="2087.000000" y="50.000000" width="257.000000" height="82.000000" stroke="#c8d8f0" fill="#2a3040" style="stroke-width:2;" /></g><text x="2215.500000" y="88.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2215.500000" dy="0.000000">Layer 1 — Fixture Serialization</tspan><tspan x="2215.500000" dy="18.500000">Roundtrip (fast · every edit)</tspan></text></g><g class="aXBjX2xheWVycy5sMg=="><g class="shape" ><rect x="2065.000000" y="303.000000" width="301.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="2215.500000" y="341.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2215.500000" dy="0.000000">Layer 2 — Mock Subprocess Protocol</tspan><tspan x="2215.500000" dy="18.500000">State machine (medium · every PR)</tspan></text></g><g class="aXBjX2xheWVycy5sMw=="><g class="shape" ><rect x="2059.000000" y="575.000000" width="313.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" /></g><text x="2215.500000" y="613.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2215.500000" dy="0.000000">Layer 3 — Real Subprocess Integration</tspan><tspan x="2215.500000" dy="18.500000">(slow · daily / pre-merge)</tspan></text></g><g class="cGhhc2VzLnBoMQ=="><g class="shape" ><rect x="2511.000000" y="50.000000" width="292.000000" height="82.000000" stroke="#c8d8f0" fill="#2a3040" style="stroke-width:2;" /></g><text x="2657.000000" y="88.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2657.000000" dy="0.000000">Phase 1 (Sprint 1-2)</tspan><tspan x="2657.000000" dy="18.500000">Infra + collision / pathfinding / time</tspan></text></g><g class="cGhhc2VzLnBoMg=="><g class="shape" ><rect x="2472.000000" y="303.000000" width="370.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="2657.000000" y="341.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2657.000000" dy="0.000000">Phase 2 (Sprint 3-4)</tspan><tspan x="2657.000000" dy="18.500000">Monologue pipeline + info boundary negatives</tspan></text></g><g class="cGhhc2VzLnBoMw=="><g class="shape" ><rect x="2514.000000" y="575.000000" width="287.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" /></g><text x="2657.500000" y="613.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2657.500000" dy="0.000000">Phase 3 (Sprint 5+)</tspan><tspan x="2657.500000" dy="18.500000">CauseChain + divergent snapshots</tspan></text></g><g class="Y29uc3RyYWludHMuYzE="><g class="shape" ><rect x="480.000000" y="58.000000" width="263.000000" height="66.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="611.500000" y="96.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">No cfg(test) in production code</text></g><g class="Y29uc3RyYWludHMuYzI="><g class="shape" ><rect x="803.000000" y="58.000000" width="330.000000" height="66.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;" /></g><text x="968.000000" y="96.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">ECS World setup replaces mock injection</text></g><g class="Y29uc3RyYWludHMuYzM="><g class="shape" ><rect x="1193.000000" y="50.000000" width="313.000000" height="82.000000" stroke="#c8d8f0" fill="#2a3040" style="stroke-width:2;" /></g><text x="1349.500000" y="88.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1349.500000" dy="0.000000">CauseChain = production component</tspan><tspan x="1349.500000" dy="18.500000">(monologue provenance + debugging)</tspan></text></g><g class="Y29uc3RyYWludHMuYzQ="><g class="shape" ><rect x="1566.000000" y="50.000000" width="393.000000" height="82.000000" stroke="#c8d8f0" fill="#2a3040" style="stroke-width:2;" /></g><text x="1762.500000" y="88.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1762.500000" dy="0.000000">Deterministic replay (D-010 P4)</tspan><tspan x="1762.500000" dy="18.500000">SimulationTime · SimRng · InputQueue injectable</tspan></text></g><g class="KHJ1bm5lcnMucnVzdF9ydW5uZXIgLSZndDsgb3V0cHV0KVswXQ=="><marker id="mk-d2-3315428149-3962577600" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#333340" class="connection" stroke-width="2" /> </marker><path d="M 123.750000 387.000000 C 123.750000 425.000000 134.800003 517.200012 176.488768 568.886527" stroke="#333340" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-3962577600)" mask="url(#d2-3315428149)" /><text x="131.500000" y="484.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="131.500000" dy="0.000000">JSON summary</tspan><tspan x="131.500000" dy="18.500000">+ JUnit XML (CI)</tspan></text></g><g class="KHJ1bm5lcnMuZ29kb3RfcnVubmVyIC0mZ3Q7IG91dHB1dClbMF0="><path d="M 306.250000 387.000000 C 306.250000 425.000000 295.200012 517.200012 253.511233 568.886528" stroke="#333340" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-3962577600)" mask="url(#d2-3315428149)" /><text x="298.500000" y="484.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="298.500000" dy="0.000000">JSON summary</tspan><tspan x="298.500000" dy="18.500000">+ JUnit XML (CI)</tspan></text></g><g class="cnVubmVycy4od3JhcHBlciAtJmd0OyBydXN0X3J1bm5lcilbMF0="><marker id="mk-d2-3315428149-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 172.335786 133.414214 C 133.750000 172.000000 123.750000 254.699997 123.750000 299.500000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-3488378134)" mask="url(#d2-3315428149)" /></g><g class="cnVubmVycy4od3JhcHBlciAtJmd0OyBnb2RvdF9ydW5uZXIpWzBd"><path d="M 257.664214 133.414214 C 296.250000 172.000000 306.250000 254.699997 306.250000 299.500000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-3488378134)" mask="url(#d2-3315428149)" /></g><g class="aXBjX2xheWVycy4obDEgLSZndDsgbDIpWzBd"><marker id="mk-d2-3315428149-1961329247" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#c8d8f0" class="connection" stroke-width="2" /> </marker><path d="M 2215.750000 134.000000 C 2215.750000 172.000000 2215.750000 254.699997 2215.750000 299.500000" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-1961329247)" mask="url(#d2-3315428149)" /><text x="2215.500000" y="223.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">gates</text></g><g class="aXBjX2xheWVycy4obDIgLSZndDsgbDMpWzBd"><path d="M 2215.750000 387.000000 C 2215.750000 425.000000 2215.750000 517.700012 2215.750000 570.500000" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-1961329247)" mask="url(#d2-3315428149)" /><text x="2215.500000" y="485.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">gates</text></g><g class="cGhhc2VzLihwaDEgLSZndDsgcGgyKVswXQ=="><path d="M 2657.250000 134.000000 C 2657.250000 172.000000 2657.250000 254.699997 2657.250000 299.500000" stroke="#333340" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-3962577600)" mask="url(#d2-3315428149)" /><text x="2657.000000" y="223.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">unblocks</text></g><g class="cGhhc2VzLihwaDIgLSZndDsgcGgzKVswXQ=="><path d="M 2657.250000 387.000000 C 2657.250000 425.000000 2657.250000 517.700012 2657.250000 570.500000" stroke="#333340" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-3315428149-3962577600)" mask="url(#d2-3315428149)" /><text x="2657.000000" y="485.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">unblocks</text></g><mask id="d2-3315428149" maskUnits="userSpaceOnUse" x="-78" y="-121" width="3051" height="909">
<rect x="-78" y="-121" width="3051" height="909" fill="white"></rect>
<rect x="78.000000" y="468.000000" width="107" height="37" fill="black"></rect>
<rect x="245.000000" y="468.000000" width="107" height="37" fill="black"></rect>
<rect x="2195.000000" y="207.000000" width="41" height="21" fill="black"></rect>
<rect x="2195.000000" y="469.000000" width="41" height="21" fill="black"></rect>
<rect x="2625.000000" y="207.000000" width="64" height="21" fill="black"></rect>
<rect x="2625.000000" y="469.000000" width="64" height="21" fill="black"></rect>
</mask></svg></svg>