The consolidation has to be the only way to add tooling, or it re-fragments the way the tree did — ~160 files and four naming conventions, because nothing ruled out adding one more. - Skill(reach) (T-1254), for both audiences. Using it: discover through --help, the domain index, the global flags an agent needs (--no-input, --detach with `jobs log --follow`), the stdout/stderr/verdict contract, and "read the exit status, never a field". Extending it: add a verb, add a domain, the seven invariants the conformance test enforces, a worked ReachError-with-fix example, the parity-first porting method, and the traps this repo has already paid for (the stamp registry, the canvas registry, archived generators that destroy data if run). - CLAUDE.md (T-1255): no tooling is developed outside the CLI. The two exceptions are named so they aren't relitigated: Blender payloads and the Rust crates. Wording as confirmed by Jeroen, 2026-08-20. - docs/diagrams/architecture/reach-cli.d2: the door, core, the domains, the carve-out, the one guarded exec, and the enforced invariants as a legend. D-263 now links to it; the amendment that had removed the dangling forward reference asked for exactly this. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
109 lines
37 KiB
XML
109 lines
37 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 2362 1541"><svg class="d2-631834103 d2-svg" width="2362" height="1541" viewBox="-101 -101 2362 1541"><rect x="-101.000000" y="-101.000000" width="2362.000000" height="1541.000000" rx="0.000000" fill="#1E1E2E" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
|
|
.d2-631834103 .text-bold {
|
|
font-family: "d2-631834103-font-bold";
|
|
}
|
|
@font-face {
|
|
font-family: d2-631834103-font-bold;
|
|
src: url("data:application/font-woff;base64,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");
|
|
}
|
|
.d2-631834103 .text-italic {
|
|
font-family: "d2-631834103-font-italic";
|
|
}
|
|
@font-face {
|
|
font-family: d2-631834103-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-631834103 .fill-N1{fill:#CDD6F4;}
|
|
.d2-631834103 .fill-N2{fill:#BAC2DE;}
|
|
.d2-631834103 .fill-N3{fill:#A6ADC8;}
|
|
.d2-631834103 .fill-N4{fill:#585B70;}
|
|
.d2-631834103 .fill-N5{fill:#45475A;}
|
|
.d2-631834103 .fill-N6{fill:#313244;}
|
|
.d2-631834103 .fill-N7{fill:#1E1E2E;}
|
|
.d2-631834103 .fill-B1{fill:#CBA6f7;}
|
|
.d2-631834103 .fill-B2{fill:#CBA6f7;}
|
|
.d2-631834103 .fill-B3{fill:#6C7086;}
|
|
.d2-631834103 .fill-B4{fill:#585B70;}
|
|
.d2-631834103 .fill-B5{fill:#45475A;}
|
|
.d2-631834103 .fill-B6{fill:#313244;}
|
|
.d2-631834103 .fill-AA2{fill:#f38BA8;}
|
|
.d2-631834103 .fill-AA4{fill:#45475A;}
|
|
.d2-631834103 .fill-AA5{fill:#313244;}
|
|
.d2-631834103 .fill-AB4{fill:#45475A;}
|
|
.d2-631834103 .fill-AB5{fill:#313244;}
|
|
.d2-631834103 .stroke-N1{stroke:#CDD6F4;}
|
|
.d2-631834103 .stroke-N2{stroke:#BAC2DE;}
|
|
.d2-631834103 .stroke-N3{stroke:#A6ADC8;}
|
|
.d2-631834103 .stroke-N4{stroke:#585B70;}
|
|
.d2-631834103 .stroke-N5{stroke:#45475A;}
|
|
.d2-631834103 .stroke-N6{stroke:#313244;}
|
|
.d2-631834103 .stroke-N7{stroke:#1E1E2E;}
|
|
.d2-631834103 .stroke-B1{stroke:#CBA6f7;}
|
|
.d2-631834103 .stroke-B2{stroke:#CBA6f7;}
|
|
.d2-631834103 .stroke-B3{stroke:#6C7086;}
|
|
.d2-631834103 .stroke-B4{stroke:#585B70;}
|
|
.d2-631834103 .stroke-B5{stroke:#45475A;}
|
|
.d2-631834103 .stroke-B6{stroke:#313244;}
|
|
.d2-631834103 .stroke-AA2{stroke:#f38BA8;}
|
|
.d2-631834103 .stroke-AA4{stroke:#45475A;}
|
|
.d2-631834103 .stroke-AA5{stroke:#313244;}
|
|
.d2-631834103 .stroke-AB4{stroke:#45475A;}
|
|
.d2-631834103 .stroke-AB5{stroke:#313244;}
|
|
.d2-631834103 .background-color-N1{background-color:#CDD6F4;}
|
|
.d2-631834103 .background-color-N2{background-color:#BAC2DE;}
|
|
.d2-631834103 .background-color-N3{background-color:#A6ADC8;}
|
|
.d2-631834103 .background-color-N4{background-color:#585B70;}
|
|
.d2-631834103 .background-color-N5{background-color:#45475A;}
|
|
.d2-631834103 .background-color-N6{background-color:#313244;}
|
|
.d2-631834103 .background-color-N7{background-color:#1E1E2E;}
|
|
.d2-631834103 .background-color-B1{background-color:#CBA6f7;}
|
|
.d2-631834103 .background-color-B2{background-color:#CBA6f7;}
|
|
.d2-631834103 .background-color-B3{background-color:#6C7086;}
|
|
.d2-631834103 .background-color-B4{background-color:#585B70;}
|
|
.d2-631834103 .background-color-B5{background-color:#45475A;}
|
|
.d2-631834103 .background-color-B6{background-color:#313244;}
|
|
.d2-631834103 .background-color-AA2{background-color:#f38BA8;}
|
|
.d2-631834103 .background-color-AA4{background-color:#45475A;}
|
|
.d2-631834103 .background-color-AA5{background-color:#313244;}
|
|
.d2-631834103 .background-color-AB4{background-color:#45475A;}
|
|
.d2-631834103 .background-color-AB5{background-color:#313244;}
|
|
.d2-631834103 .color-N1{color:#CDD6F4;}
|
|
.d2-631834103 .color-N2{color:#BAC2DE;}
|
|
.d2-631834103 .color-N3{color:#A6ADC8;}
|
|
.d2-631834103 .color-N4{color:#585B70;}
|
|
.d2-631834103 .color-N5{color:#45475A;}
|
|
.d2-631834103 .color-N6{color:#313244;}
|
|
.d2-631834103 .color-N7{color:#1E1E2E;}
|
|
.d2-631834103 .color-B1{color:#CBA6f7;}
|
|
.d2-631834103 .color-B2{color:#CBA6f7;}
|
|
.d2-631834103 .color-B3{color:#6C7086;}
|
|
.d2-631834103 .color-B4{color:#585B70;}
|
|
.d2-631834103 .color-B5{color:#45475A;}
|
|
.d2-631834103 .color-B6{color:#313244;}
|
|
.d2-631834103 .color-AA2{color:#f38BA8;}
|
|
.d2-631834103 .color-AA4{color:#45475A;}
|
|
.d2-631834103 .color-AA5{color:#313244;}
|
|
.d2-631834103 .color-AB4{color:#45475A;}
|
|
.d2-631834103 .color-AB5{color:#313244;}.appendix text.text{fill:#CDD6F4}.md{--color-fg-default:#CDD6F4;--color-fg-muted:#BAC2DE;--color-fg-subtle:#A6ADC8;--color-canvas-default:#1E1E2E;--color-canvas-subtle:#313244;--color-border-default:#CBA6f7;--color-border-muted:#CBA6f7;--color-neutral-muted:#313244;--color-accent-fg:#CBA6f7;--color-accent-emphasis:#CBA6f7;--color-attention-subtle:#BAC2DE;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-normal-d2-631834103);mix-blend-mode:color-burn}.sketch-overlay-B2{fill:url(#streaks-normal-d2-631834103);mix-blend-mode:color-burn}.sketch-overlay-B3{fill:url(#streaks-dark-d2-631834103);mix-blend-mode:overlay}.sketch-overlay-B4{fill:url(#streaks-dark-d2-631834103);mix-blend-mode:overlay}.sketch-overlay-B5{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-B6{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-AA2{fill:url(#streaks-normal-d2-631834103);mix-blend-mode:color-burn}.sketch-overlay-AA4{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-AA5{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-AB4{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-AB5{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-N1{fill:url(#streaks-normal-d2-631834103);mix-blend-mode:color-burn}.sketch-overlay-N2{fill:url(#streaks-normal-d2-631834103);mix-blend-mode:color-burn}.sketch-overlay-N3{fill:url(#streaks-normal-d2-631834103);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-dark-d2-631834103);mix-blend-mode:overlay}.sketch-overlay-N5{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-N6{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.sketch-overlay-N7{fill:url(#streaks-darker-d2-631834103);mix-blend-mode:lighten}.light-code{display: none}.dark-code{display: block}]]></style><g class="YWdlbnQ= caller"><g class="shape" ><rect x="522.000000" y="72.000000" width="211.000000" height="82.000000" rx="4.000000" stroke="#8fd9ae" fill="#1f6f43" style="stroke-width:2;" /></g><text x="627.500000" y="110.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="627.500000" dy="0.000000">agents + humans</tspan><tspan x="627.500000" dy="18.500000">reach <domain> <verb></tspan></text></g><g class="aG9va3M= caller"><g class="shape" ><rect x="793.000000" y="72.000000" width="218.000000" height="82.000000" rx="4.000000" stroke="#8fd9ae" fill="#1f6f43" style="stroke-width:2;" /></g><text x="902.000000" y="110.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="902.000000" dy="0.000000">git hooks</tspan><tspan x="902.000000" dy="18.500000">reach --no-input check …</tspan></text></g><g class="bWFrZQ== caller"><g class="shape" ><rect x="1071.000000" y="72.000000" width="277.000000" height="82.000000" rx="4.000000" stroke="#8fd9ae" fill="#1f6f43" style="stroke-width:2;" /></g><text x="1209.500000" y="110.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1209.500000" dy="0.000000">make (orchestration only)</tspan><tspan x="1209.500000" dy="18.500000">one-line delegates, e.g. regen-db</tspan></text></g><g class="bWFpbg== door"><g class="shape" ><path d="M 835 326 L 741 384 L 835 443 L 1022 443 L 1116 384 L 1022 326 Z" stroke="#9dc0f0" fill="#2b4c7e" style="stroke-width:2;" /></g><text x="928.500000" y="374.000000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="928.500000" dy="0.000000">tooling/main.py</tspan><tspan x="928.500000" dy="17.666667">routing only · DOMAINS registry</tspan><tspan x="928.500000" dy="17.666667">lazy: --help imports no domain</tspan></text></g><g class="Y29tbWFuZA== core"><g class="shape" ><rect x="112.000000" y="799.000000" width="311.000000" height="82.000000" rx="4.000000" stroke="#d3a8e6" fill="#5c2d6e" style="stroke-width:2;" /></g><text x="267.500000" y="837.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="267.500000" dy="0.000000">core/command.py @command</tspan><tspan x="267.500000" dy="18.500000">job identity ⊃ handle_errors ⊃ logged</tspan></text></g><g class="Y29uc29sZQ== core"><g class="shape" ><rect x="182.000000" y="1239.000000" width="400.000000" height="82.000000" rx="4.000000" stroke="#d3a8e6" fill="#5c2d6e" style="stroke-width:2;" /></g><text x="382.000000" y="1277.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="382.000000" dy="0.000000">core/console.py</tspan><tspan x="382.000000" dy="18.500000">stdout = data · stderr = JSONL events + one verdict</tspan></text></g><g class="ZXJyb3Jz core"><g class="shape" ><rect x="0.000000" y="1018.000000" width="235.000000" height="82.000000" rx="4.000000" stroke="#d3a8e6" fill="#5c2d6e" style="stroke-width:2;" /></g><text x="117.500000" y="1056.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="117.500000" dy="0.000000">core/errors.py ReachError</tspan><tspan x="117.500000" dy="18.500000">every raise carries fix=</tspan></text></g><g class="cHJvY2Vzcw== core"><g class="shape" ><rect x="1039.000000" y="1018.000000" width="389.000000" height="82.000000" rx="4.000000" stroke="#d3a8e6" fill="#5c2d6e" style="stroke-width:2;" /></g><text x="1233.500000" y="1056.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1233.500000" dy="0.000000">core/process.py — the ONE guarded exec</tspan><tspan x="1233.500000" dy="18.500000">argv lists · missing-binary remedy · cargo_binary</tspan></text></g><g class="am9icw== core"><g class="shape" ><rect x="295.000000" y="1018.000000" width="244.000000" height="82.000000" rx="4.000000" stroke="#d3a8e6" fill="#5c2d6e" style="stroke-width:2;" /></g><text x="417.000000" y="1056.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="417.000000" dy="0.000000">core/jobs.py + domains/jobs</tspan><tspan x="417.000000" dy="18.500000">--detach · log --follow · wait</tspan></text></g><g class="cm91dGVy domain"><g class="shape" ><rect x="774.000000" y="564.000000" width="309.000000" height="98.000000" rx="4.000000" stroke="#e0b070" fill="#7a4b12" style="stroke-width:2;" /></g><text x="928.500000" y="602.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="928.500000" dy="0.000000">domains/<d>/router.py</tspan><tspan x="928.500000" dy="17.666667">transport: args in, format out</tspan><tspan x="928.500000" dy="17.666667">the only place typer may be imported</tspan></text></g><g class="c2VydmljZQ== domain"><g class="shape" ><rect x="946.000000" y="791.000000" width="272.000000" height="98.000000" rx="4.000000" stroke="#e0b070" fill="#7a4b12" style="stroke-width:2;" /></g><text x="1082.000000" y="829.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1082.000000" dy="0.000000">domains/<d>/*.py (services)</tspan><tspan x="1082.000000" dy="17.666667">plain args in, data out</tspan><tspan x="1082.000000" dy="17.666667">callable from tests without a CLI</tspan></text></g><g class="bGlzdA== domain"><g class="shape" ><rect x="1278.000000" y="783.000000" width="398.000000" height="114.000000" rx="4.000000" stroke="#e0b070" fill="#7a4b12" style="stroke-width:2;" /></g><text x="1477.000000" y="821.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1477.000000" dy="0.000000">14 domains</tspan><tspan x="1477.000000" dy="17.250000">check · validate · atlas {map, planet} · ledger · wiki</tspan><tspan x="1477.000000" dy="17.250000">assets · character · godot · visual · generate</tspan><tspan x="1477.000000" dy="17.250000">blender · pr · jobs · dev</tspan></text></g><g class="cGF5bG9hZHM= outside"><g class="shape" ><rect x="1264.000000" y="1239.000000" width="367.000000" height="82.000000" rx="4.000000" stroke="#9a9aa4" fill="#3a3a42" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" /></g><text x="1447.500000" y="1277.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1447.500000" dy="0.000000">tooling/scripts/blender/ (41 payloads)</tspan><tspan x="1447.500000" dy="18.500000">run under Blender's Python — never imported</tspan></text></g><g class="YXJjaGl2ZQ== outside"><g class="shape" ><rect x="1408.000000" y="72.000000" width="292.000000" height="82.000000" rx="4.000000" stroke="#9a9aa4" fill="#3a3a42" style="stroke-width:2;stroke-dasharray:8.000000,7.892511;" /></g><text x="1554.000000" y="110.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1554.000000" dy="0.000000">tooling/archive/</tspan><tspan x="1554.000000" dy="18.500000">provenance — never run, not linted</tspan></text></g><g class="ZXh0Ymlu ext"><g class="shape" ><path d="M 835 1245 C 835 1221 1001 1221 1020 1221 C 1038 1221 1204 1221 1204 1245 V 1315 C 1204 1339 1038 1339 1020 1339 C 1001 1339 835 1339 835 1315 V 1245 Z" stroke="#9a9aa4" fill="#2a2a30" style="stroke-width:2;" /><path d="M 835 1245 C 835 1269 1001 1269 1020 1269 C 1038 1269 1204 1269 1204 1245" stroke="#9a9aa4" fill="#2a2a30" style="stroke-width:2;" /></g><text x="1019.500000" y="1297.500000" fill="#ffffff" class="text-bold" style="text-anchor:middle;font-size:16px">cargo · godot · blender · ffmpeg · git · xvfb-run</text></g><g class="bGVnZW5k"><g class="shape" ><rect x="1760.000000" y="0.000000" width="400.000000" height="226.000000" stroke="#9a9aa4" fill="#1b1b22" style="stroke-width:2;" /></g><text x="1960.000000" y="38.500000" fill="#c8d0e0" class="text-bold" style="text-anchor:middle;font-size:16px"><tspan x="1960.000000" dy="0.000000">ENFORCED BY tooling/test_conformance.py</tspan><tspan x="1960.000000" dy="16.454545"> </tspan><tspan x="1960.000000" dy="16.454545">1 typer only in router.py / main.py / core/cli.py</tspan><tspan x="1960.000000" dy="16.454545">2 no print(): everything through console</tspan><tspan x="1960.000000" dy="16.454545">3 every verb is @command, and has help</tspan><tspan x="1960.000000" dy="16.454545">4 every ReachError names a fix</tspan><tspan x="1960.000000" dy="16.454545">5 no subprocess outside core/process.py</tspan><tspan x="1960.000000" dy="16.454545">6 the Blender carve-out stays outside the package</tspan><tspan x="1960.000000" dy="16.454545"> </tspan><tspan x="1960.000000" dy="16.454545">Colour: green caller · blue the door · purple core</tspan><tspan x="1960.000000" dy="16.454545">amber domains · grey dashed outside the package</tspan></text></g><g class="KGFnZW50IC0mZ3Q7IG1haW4pWzBd"><marker id="mk-d2-631834103-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="#CBA6f7" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 627.000000 156.000000 C 627.000000 251.600006 663.599976 289.200012 806.237237 340.642939" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /></g><g class="KGhvb2tzIC0mZ3Q7IG1haW4pWzBd"><path d="M 901.500000 156.000000 C 901.500000 251.600006 903.799988 286.000000 912.103408 322.101780" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /></g><g class="KG1ha2UgLSZndDsgbWFpbilbMF0="><path d="M 1209.000000 156.000000 C 1209.000000 251.600006 1176.000000 288.799988 1047.729290 338.553487" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /></g><g class="KG1haW4gLSZndDsgcm91dGVyKVswXQ=="><path d="M 928.983471 444.999932 C 928.599976 491.399994 928.500000 515.700012 928.500000 560.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="928.500000" y="509.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">loads ONE domain, on use</text></g><g class="KHJvdXRlciAtJmd0OyBjb21tYW5kKVswXQ=="><path d="M 772.276898 638.826905 C 368.649994 705.700012 267.250000 737.900024 267.250000 795.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="489.000000" y="691.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">wraps every verb</text></g><g class="KHJvdXRlciAtJmd0OyBzZXJ2aWNlKVswXQ=="><path d="M 998.874880 662.666090 C 1065.250000 710.299988 1082.250000 736.299988 1082.250000 787.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="1065.500000" y="717.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">delegates</text></g><g class="KHJvdXRlciAtJmd0OyBsaXN0KVswXQ=="><marker id="mk-d2-631834103-2177206569" 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="#CBA6f7" class="connection fill-B2" stroke-width="2" /> </marker><path d="M 1085.210970 643.893189 C 1398.449951 706.700012 1477.250000 734.700012 1477.250000 779.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B2" style="stroke-width:2;stroke-dasharray:6.000000,5.919384;" marker-end="url(#mk-d2-631834103-2177206569)" mask="url(#d2-631834103)" /></g><g class="KGNvbW1hbmQgLSZndDsgZXJyb3JzKVswXQ=="><path d="M 212.933539 881.743463 C 136.899002 942.099976 117.500000 969.700012 117.500000 1014.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /></g><g class="KGNvbW1hbmQgLSZndDsgam9icylbMF0="><path d="M 321.566453 881.743473 C 397.600006 942.099976 417.000000 969.700012 417.000000 1014.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /></g><g class="KHNlcnZpY2UgLSZndDsgY29uc29sZSlbMF0="><path d="M 944.069142 877.021332 C 706.000000 941.299988 646.000000 977.799988 646.000000 1008.250000 C 646.000000 1038.699951 611.400024 1176.300049 476.638580 1237.838454" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="646.000000" y="1001.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">the only output path</text></g><g class="KGVycm9ycyAtJmd0OyBjb25zb2xlKVswXQ=="><path d="M 117.500000 1101.500000 C 117.500000 1148.300049 152.100006 1176.300049 286.861420 1237.838453" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="179.000000" y="1194.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">verdict + fix</text></g><g class="KHNlcnZpY2UgLSZndDsgcHJvY2VzcylbMF0="><path d="M 1146.573877 889.734063 C 1215.400024 943.700012 1233.000000 969.700012 1233.000000 1014.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="1212.000000" y="946.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">any external program</text></g><g class="KHByb2Nlc3MgLSZndDsgZXh0YmluKVswXQ=="><path d="M 1145.194537 1100.360408 C 1044.598999 1148.300049 1019.000000 1172.599976 1019.000000 1217.000000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /></g><g class="KHByb2Nlc3MgLSZndDsgcGF5bG9hZHMpWzBd"><path d="M 1320.805460 1100.360415 C 1421.400024 1148.300049 1447.000000 1176.300049 1447.000000 1235.500000" stroke="#CBA6f7" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-631834103-3488378134)" mask="url(#d2-631834103)" /><text x="1416.000000" y="1151.000000" fill="#BAC2DE" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">reach blender run</text></g><mask id="d2-631834103" maskUnits="userSpaceOnUse" x="-101" y="-101" width="2362" height="1541">
|
|
<rect x="-101" y="-101" width="2362" height="1541" fill="white"></rect>
|
|
<rect x="841.000000" y="493.000000" width="175" height="21" fill="black"></rect>
|
|
<rect x="432.000000" y="675.000000" width="114" height="21" fill="black"></rect>
|
|
<rect x="1031.000000" y="701.000000" width="69" height="21" fill="black"></rect>
|
|
<rect x="577.000000" y="985.000000" width="138" height="21" fill="black"></rect>
|
|
<rect x="139.000000" y="1178.000000" width="80" height="21" fill="black"></rect>
|
|
<rect x="1139.000000" y="930.000000" width="146" height="21" fill="black"></rect>
|
|
<rect x="1356.000000" y="1135.000000" width="120" height="21" fill="black"></rect>
|
|
</mask></svg></svg>
|