Files
settled-reach/docs/diagrams/architecture/ipc-bridge.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

114 lines
39 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 5278 1283"><svg class="d2-2295538336 d2-svg" width="5278" height="1283" viewBox="-101 -141 5278 1283"><rect x="-101.000000" y="-141.000000" width="5278.000000" height="1283.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-2295538336 .text {
font-family: "d2-2295538336-font-regular";
}
@font-face {
font-family: d2-2295538336-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-2295538336 .text-bold {
font-family: "d2-2295538336-font-bold";
}
@font-face {
font-family: d2-2295538336-font-bold;
src: url("data:application/font-woff;base64,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");
}
.d2-2295538336 .text-italic {
font-family: "d2-2295538336-font-italic";
}
@font-face {
font-family: d2-2295538336-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-2295538336 .fill-N1{fill:#0A0F25;}
.d2-2295538336 .fill-N2{fill:#676C7E;}
.d2-2295538336 .fill-N3{fill:#9499AB;}
.d2-2295538336 .fill-N4{fill:#CFD2DD;}
.d2-2295538336 .fill-N5{fill:#DEE1EB;}
.d2-2295538336 .fill-N6{fill:#EEF1F8;}
.d2-2295538336 .fill-N7{fill:#FFFFFF;}
.d2-2295538336 .fill-B1{fill:#0D32B2;}
.d2-2295538336 .fill-B2{fill:#0D32B2;}
.d2-2295538336 .fill-B3{fill:#E3E9FD;}
.d2-2295538336 .fill-B4{fill:#E3E9FD;}
.d2-2295538336 .fill-B5{fill:#EDF0FD;}
.d2-2295538336 .fill-B6{fill:#F7F8FE;}
.d2-2295538336 .fill-AA2{fill:#4A6FF3;}
.d2-2295538336 .fill-AA4{fill:#EDF0FD;}
.d2-2295538336 .fill-AA5{fill:#F7F8FE;}
.d2-2295538336 .fill-AB4{fill:#EDF0FD;}
.d2-2295538336 .fill-AB5{fill:#F7F8FE;}
.d2-2295538336 .stroke-N1{stroke:#0A0F25;}
.d2-2295538336 .stroke-N2{stroke:#676C7E;}
.d2-2295538336 .stroke-N3{stroke:#9499AB;}
.d2-2295538336 .stroke-N4{stroke:#CFD2DD;}
.d2-2295538336 .stroke-N5{stroke:#DEE1EB;}
.d2-2295538336 .stroke-N6{stroke:#EEF1F8;}
.d2-2295538336 .stroke-N7{stroke:#FFFFFF;}
.d2-2295538336 .stroke-B1{stroke:#0D32B2;}
.d2-2295538336 .stroke-B2{stroke:#0D32B2;}
.d2-2295538336 .stroke-B3{stroke:#E3E9FD;}
.d2-2295538336 .stroke-B4{stroke:#E3E9FD;}
.d2-2295538336 .stroke-B5{stroke:#EDF0FD;}
.d2-2295538336 .stroke-B6{stroke:#F7F8FE;}
.d2-2295538336 .stroke-AA2{stroke:#4A6FF3;}
.d2-2295538336 .stroke-AA4{stroke:#EDF0FD;}
.d2-2295538336 .stroke-AA5{stroke:#F7F8FE;}
.d2-2295538336 .stroke-AB4{stroke:#EDF0FD;}
.d2-2295538336 .stroke-AB5{stroke:#F7F8FE;}
.d2-2295538336 .background-color-N1{background-color:#0A0F25;}
.d2-2295538336 .background-color-N2{background-color:#676C7E;}
.d2-2295538336 .background-color-N3{background-color:#9499AB;}
.d2-2295538336 .background-color-N4{background-color:#CFD2DD;}
.d2-2295538336 .background-color-N5{background-color:#DEE1EB;}
.d2-2295538336 .background-color-N6{background-color:#EEF1F8;}
.d2-2295538336 .background-color-N7{background-color:#FFFFFF;}
.d2-2295538336 .background-color-B1{background-color:#0D32B2;}
.d2-2295538336 .background-color-B2{background-color:#0D32B2;}
.d2-2295538336 .background-color-B3{background-color:#E3E9FD;}
.d2-2295538336 .background-color-B4{background-color:#E3E9FD;}
.d2-2295538336 .background-color-B5{background-color:#EDF0FD;}
.d2-2295538336 .background-color-B6{background-color:#F7F8FE;}
.d2-2295538336 .background-color-AA2{background-color:#4A6FF3;}
.d2-2295538336 .background-color-AA4{background-color:#EDF0FD;}
.d2-2295538336 .background-color-AA5{background-color:#F7F8FE;}
.d2-2295538336 .background-color-AB4{background-color:#EDF0FD;}
.d2-2295538336 .background-color-AB5{background-color:#F7F8FE;}
.d2-2295538336 .color-N1{color:#0A0F25;}
.d2-2295538336 .color-N2{color:#676C7E;}
.d2-2295538336 .color-N3{color:#9499AB;}
.d2-2295538336 .color-N4{color:#CFD2DD;}
.d2-2295538336 .color-N5{color:#DEE1EB;}
.d2-2295538336 .color-N6{color:#EEF1F8;}
.d2-2295538336 .color-N7{color:#FFFFFF;}
.d2-2295538336 .color-B1{color:#0D32B2;}
.d2-2295538336 .color-B2{color:#0D32B2;}
.d2-2295538336 .color-B3{color:#E3E9FD;}
.d2-2295538336 .color-B4{color:#E3E9FD;}
.d2-2295538336 .color-B5{color:#EDF0FD;}
.d2-2295538336 .color-B6{color:#F7F8FE;}
.d2-2295538336 .color-AA2{color:#4A6FF3;}
.d2-2295538336 .color-AA4{color:#EDF0FD;}
.d2-2295538336 .color-AA5{color:#F7F8FE;}
.d2-2295538336 .color-AB4{color:#EDF0FD;}
.d2-2295538336 .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-2295538336);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-2295538336);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2295538336);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2295538336);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2295538336);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2295538336);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2295538336);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2295538336);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="Z29kb3Q="><g class="shape" ><path d="M 700 467 L 0 701 L 700 936 L 2100 936 L 2800 701 L 2100 467 Z" stroke="#c8d8f0" fill="#2a3040" style="stroke-width:2;" /></g><text x="1400.000000" y="454.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">Godot Client</text></g><g class="dHJhbnNwb3J0"><g class="shape" ><rect x="2376.000000" y="107.000000" width="295.000000" height="284.000000" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="2523.500000" y="94.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">Transport Layer</text></g><g class="cnVzdA=="><g class="shape" ><path d="M 3608 0 L 3118 232 L 3608 464 L 4587 464 L 5076 232 L 4587 0 Z" stroke="#c8d8f0" fill="#2a3040" style="stroke-width:2;" /></g><text x="4097.000000" y="-13.000000" fill="#c8d0e0" class="text" style="text-anchor:middle;font-size:28px">Rust Simulation Server</text></g><g class="bXNncGFja19vdXQ="><g class="shape" ><path d="M 922 975 H 1162 C 1186 975 1186 1005 1186 1008 C 1186 1011 1186 1041 1162 1041 H 922 C 898 1041 898 1011 898 1008 C 898 1005 898 975 922 975 Z" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /><path d="M 1162 975 C 1138 975 1138 1005 1138 1008 C 1138 1011 1138 1041 1162 1041" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="1030.000000" y="1013.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">PlayerInput (MessagePack)</text></g><g class="bXNncGFja19pbg=="><g class="shape" ><path d="M 4604 882 H 4893 C 4917 882 4917 912 4917 915 C 4917 918 4917 948 4893 948 H 4604 C 4580 948 4580 918 4580 915 C 4580 912 4580 882 4604 882 Z" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /><path d="M 4893 882 C 4869 882 4869 912 4869 915 C 4869 918 4869 948 4893 948" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="4736.500000" y="920.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">ObserverSnapshot (MessagePack)</text></g><g class="Z29kb3QucmVuZGVyZXI="><g class="shape" ><rect x="2468.000000" y="557.000000" width="111.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="2523.500000" y="595.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">Renderer</text></g><g class="Z29kb3QudWk="><g class="shape" ><rect x="2471.000000" y="683.000000" width="106.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="2524.000000" y="721.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">UI + HUD</text></g><g class="Z29kb3QuYXVkaW8="><g class="shape" ><rect x="2449.000000" y="809.000000" width="149.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="2523.500000" y="847.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">AudioManager</text></g><g class="Z29kb3QuaW5wdXQ="><g class="shape" ><rect x="159.000000" y="679.000000" width="143.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="230.500000" y="717.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">Input Capture</text></g><g class="Z29kb3QuYnJpZGdlX2NsaWVudA=="><g class="shape" ><rect x="1504.000000" y="658.000000" width="337.000000" height="66.000000" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="1672.500000" y="696.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">SimBridge (LocalBridge / NetworkBridge)</text></g><g class="dHJhbnNwb3J0LnNw"><g class="shape" ><rect x="2406.000000" y="137.000000" width="235.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" /></g><text x="2523.500000" y="175.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2523.500000" dy="0.000000">Single-player</tspan><tspan x="2523.500000" dy="18.500000">Unix socket / localhost TCP</tspan></text></g><g class="dHJhbnNwb3J0Lm1w"><g class="shape" ><rect x="2459.000000" y="279.000000" width="130.000000" height="82.000000" stroke="#333340" fill="#2a3040" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" /></g><text x="2524.000000" y="317.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="2524.000000" dy="0.000000">Multiplayer</tspan><tspan x="2524.000000" dy="18.500000">Remote TCP</tspan></text></g><g class="cnVzdC5icmlkZ2Vfc2VydmVy"><g class="shape" ><rect x="3277.000000" y="249.000000" width="193.000000" height="66.000000" stroke="#c8d8f0" fill="#1a1e24" style="stroke-width:2;" /></g><text x="3373.500000" y="287.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">SimBridge (recv end)</text></g><g class="cnVzdC5lY3M="><g class="shape" ><rect x="3883.000000" y="249.000000" width="155.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="3960.500000" y="287.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">bevy_ecs World</text></g><g class="cnVzdC5wZXJjZXB0aW9u"><g class="shape" ><rect x="4660.000000" y="86.000000" width="177.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="4748.500000" y="124.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">Perception System</text></g><g class="cnVzdC5haQ=="><g class="shape" ><rect x="4672.000000" y="212.000000" width="153.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="4748.500000" y="250.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">AI + Storyteller</text></g><g class="cnVzdC5rZw=="><g class="shape" ><rect x="4664.000000" y="338.000000" width="170.000000" height="66.000000" stroke="#333340" fill="#1a1e24" style="stroke-width:2;" /></g><text x="4749.000000" y="376.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px">Knowledge Graph</text></g><g class="KGdvZG90LmlucHV0IC0mZ3Q7IG1zZ3BhY2tfb3V0KVswXQ=="><marker id="mk-d2-2295538336-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 304.000000 711.750000 C 540.400024 711.750000 678.400024 764.400024 988.679311 972.769971" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-1961329247)" mask="url(#d2-2295538336)" /><text x="674.000000" y="760.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="674.000000" dy="0.000000">semantic actions</tspan><tspan x="674.000000" dy="18.500000">(MoveNorth, Interact, UsePerceptionMode)</tspan></text></g><g class="KG1zZ3BhY2tfb3V0IC0mZ3Q7IGdvZG90LmJyaWRnZV9jbGllbnQpWzBd"><marker id="mk-d2-2295538336-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 1075.380709 973.553058 C 1290.800049 747.799988 1376.800049 691.000000 1500.000000 691.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="KGdvZG90LmJyaWRnZV9jbGllbnQgLSZndDsgdHJhbnNwb3J0LnNwKVswXQ=="><path d="M 1745.814677 656.909199 C 1984.000000 546.549988 2294.600098 458.750000 2482.513980 221.883641" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" marker-end="url(#mk-d2-2295538336-1961329247)" mask="url(#d2-2295538336)" /><text x="2159.000000" y="502.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">single-player</text></g><g class="KGdvZG90LmJyaWRnZV9jbGllbnQgLSZndDsgdHJhbnNwb3J0Lm1wKVswXQ=="><path d="M 1767.886231 657.085070 C 1988.400024 579.349976 2290.600098 519.950012 2462.045766 363.446757" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" marker-end="url(#mk-d2-2295538336-1961329247)" mask="url(#d2-2295538336)" /><text x="2140.000000" y="555.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">multiplayer</text></g><g class="KHRyYW5zcG9ydC5zcCAtJmd0OyBydXN0LmJyaWRnZV9zZXJ2ZXIpWzBd"><path d="M 2643.000000 178.000000 C 2768.199951 178.000000 2831.800049 178.000000 2879.500000 178.000000 C 2927.199951 178.000000 3152.806885 192.100006 3288.328522 246.998190" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" marker-end="url(#mk-d2-2295538336-1961329247)" mask="url(#d2-2295538336)" /></g><g class="KHRyYW5zcG9ydC5tcCAtJmd0OyBydXN0LmJyaWRnZV9zZXJ2ZXIpWzBd"><path d="M 2591.500000 320.000000 C 2757.899902 320.000000 2831.800049 320.000000 2879.500000 320.000000 C 2927.199951 320.000000 3149.800049 315.200012 3273.044804 296.597011" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" marker-end="url(#mk-d2-2295538336-1961329247)" mask="url(#d2-2295538336)" /></g><g class="cnVzdC4oYnJpZGdlX3NlcnZlciAtJmd0OyBlY3MpWzBd"><marker id="mk-d2-2295538336-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 3471.500000 281.500000 C 3635.100098 281.500000 3717.899902 281.500000 3879.500000 281.500000" stroke="#333340" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3962577600)" mask="url(#d2-2295538336)" /><text x="3676.500000" y="287.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">dispatch input</text></g><g class="cnVzdC4oZWNzIC0mZ3Q7IHBlcmNlcHRpb24pWzBd"><path d="M 4033.084601 247.654792 C 4253.454102 144.899002 4379.200195 119.000000 4656.000000 119.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="cnVzdC4oZWNzIC0mZ3Q7IGFpKVswXQ=="><path d="M 4039.989409 272.794452 C 4254.799805 250.600006 4381.600098 245.000000 4668.000000 245.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="cnVzdC4oZWNzIC0mZ3Q7IGtnKVswXQ=="><path d="M 4039.936443 301.500189 C 4254.799805 357.000000 4379.899902 371.000000 4659.500000 371.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="KHJ1c3QuZWNzIC0mZ3Q7IG1zZ3BhY2tfaW4pWzBd"><path d="M 4039.862587 312.228540 C 4254.799805 396.299988 4390.399902 510.399994 4713.363918 878.991500" stroke="#c8d8f0" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-1961329247)" mask="url(#d2-2295538336)" /><text x="4418.000000" y="532.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px"><tspan x="4418.000000" dy="0.000000">ObserverSnapshot</tspan><tspan x="4418.000000" dy="17.666667">(entities, fog, sound events,</tspan><tspan x="4418.000000" dy="17.666667">monologue triggers, HUD widgets)</tspan></text></g><g class="KG1zZ3BhY2tfaW4gLSZndDsgZ29kb3QuYnJpZGdlX2NsaWVudClbMF0="><path d="M 4578.000001 915.001845 C 4363.200195 915.200012 4239.299805 915.250000 4134.750000 915.250000 C 4030.199951 915.250000 3903.699951 915.250000 3818.500000 915.250000 C 3733.300049 915.250000 3615.899902 915.250000 3525.000000 915.250000 C 3434.100098 915.250000 3322.399902 915.250000 3245.750000 915.250000 C 3169.100098 915.250000 3086.199951 915.250000 3038.500000 915.250000 C 2990.800049 915.250000 2927.199951 915.250000 2879.500000 915.250000 C 2831.800049 915.250000 2744.699951 915.250000 2661.750000 915.250000 C 2578.800049 915.250000 2468.199951 915.250000 2385.250000 915.250000 C 2302.300049 915.250000 1980.599976 877.049988 1730.426151 726.314337" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="Z29kb3QuKGJyaWRnZV9jbGllbnQgLSZndDsgcmVuZGVyZXIpWzBd"><path d="M 1795.929883 657.725071 C 1994.000000 603.849976 2291.199951 590.250000 2464.000000 590.250000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="Z29kb3QuKGJyaWRnZV9jbGllbnQgLSZndDsgdWkpWzBd"><path d="M 1842.995261 702.387604 C 2003.400024 713.450012 2291.699951 716.250000 2466.500000 716.250000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><g class="Z29kb3QuKGJyaWRnZV9jbGllbnQgLSZndDsgYXVkaW8pWzBd"><path d="M 1755.852515 725.003782 C 1986.000000 818.650024 2287.399902 842.250000 2445.000000 842.250000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2295538336-3488378134)" mask="url(#d2-2295538336)" /></g><mask id="d2-2295538336" maskUnits="userSpaceOnUse" x="-101" y="-141" width="5278" height="1283">
<rect x="-101" y="-141" width="5278" height="1283" fill="white"></rect>
<rect x="533.000000" y="744.000000" width="282" height="37" fill="black"></rect>
<rect x="2113.000000" y="486.000000" width="92" height="21" fill="black"></rect>
<rect x="2099.000000" y="539.000000" width="82" height="21" fill="black"></rect>
<rect x="3627.000000" y="271.000000" width="99" height="21" fill="black"></rect>
<rect x="4304.000000" y="516.000000" width="228" height="53" fill="black"></rect>
</mask></svg></svg>