Files
soleprint/docs/architecture/02-artery-hierarchy.svg
buenosairesam 22356fed66
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
docs: add architecture and veins documentation
- System overview, artery hierarchy, build flow, room config diagrams
- Veins docs: Jira, Slack, Google OAuth
- Shunts docs: MercadoPago mock
- DOT source files with generated SVGs
- HTML viewers with navigation and full-screen mode

Solves:
- Freelance work standardization
- Missing infrastructure replication (shunts)
- Reliable testing environment (BDD -> Gherkin -> Tests)
2026-01-02 22:09:13 -03:00

135 lines
13 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.1 (0)
-->
<!-- Title: ArteryHierarchy Pages: 1 -->
<svg width="972pt" height="487pt"
viewBox="0.00 0.00 972.00 487.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 482.5)">
<title>ArteryHierarchy</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-482.5 968,-482.5 968,4 -4,4"/>
<text xml:space="preserve" text-anchor="middle" x="482" y="-459.3" font-family="Helvetica,sans-Serif" font-size="16.00">Artery &#45; Connector Hierarchy</text>
<g id="clust1" class="cluster">
<title>cluster_main</title>
<polygon fill="#e8f5e9" stroke="#e8f5e9" points="107.12,-8 107.12,-113 956,-113 956,-8 107.12,-8"/>
<text xml:space="preserve" text-anchor="middle" x="531.56" y="-93.8" font-family="Helvetica,sans-Serif" font-size="16.00">Evolution Path</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_mock</title>
<polygon fill="#fff3e0" stroke="#fff3e0" points="107.12,-121 107.12,-226 303.12,-226 303.12,-121 107.12,-121"/>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-206.8" font-family="Helvetica,sans-Serif" font-size="16.00">Testing Path</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_props</title>
<polygon fill="#f5f5f5" stroke="#f5f5f5" points="8,-234 8,-443 402.25,-443 402.25,-234 8,-234"/>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-423.8" font-family="Helvetica,sans-Serif" font-size="16.00">Properties</text>
</g>
<!-- vein -->
<g id="node1" class="node">
<title>vein</title>
<path fill="#c8e6c9" stroke="black" d="M283.12,-77.75C283.12,-77.75 127.12,-77.75 127.12,-77.75 121.12,-77.75 115.12,-71.75 115.12,-65.75 115.12,-65.75 115.12,-28.25 115.12,-28.25 115.12,-22.25 121.12,-16.25 127.12,-16.25 127.12,-16.25 283.12,-16.25 283.12,-16.25 289.12,-16.25 295.12,-22.25 295.12,-28.25 295.12,-28.25 295.12,-65.75 295.12,-65.75 295.12,-71.75 289.12,-77.75 283.12,-77.75"/>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">Vein</text>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-36.8" font-family="Helvetica,sans-Serif" font-size="11.00">Stateless API connector</text>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-23.3" font-family="Helvetica,sans-Serif" font-size="11.00">e.g., Jira, Slack, Google</text>
</g>
<!-- pulse -->
<g id="node2" class="node">
<title>pulse</title>
<path fill="#a5d6a7" stroke="black" d="M638.75,-77.75C638.75,-77.75 482.75,-77.75 482.75,-77.75 476.75,-77.75 470.75,-71.75 470.75,-65.75 470.75,-65.75 470.75,-28.25 470.75,-28.25 470.75,-22.25 476.75,-16.25 482.75,-16.25 482.75,-16.25 638.75,-16.25 638.75,-16.25 644.75,-16.25 650.75,-22.25 650.75,-28.25 650.75,-28.25 650.75,-65.75 650.75,-65.75 650.75,-71.75 644.75,-77.75 638.75,-77.75"/>
<text xml:space="preserve" text-anchor="middle" x="560.75" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">Pulse</text>
<text xml:space="preserve" text-anchor="middle" x="560.75" y="-36.8" font-family="Helvetica,sans-Serif" font-size="11.00">Vein + Room + Depot</text>
<text xml:space="preserve" text-anchor="middle" x="560.75" y="-23.3" font-family="Helvetica,sans-Serif" font-size="11.00">e.g., Jira for AMAR project</text>
</g>
<!-- vein&#45;&gt;pulse -->
<g id="edge1" class="edge">
<title>vein&#45;&gt;pulse</title>
<path fill="none" stroke="black" d="M295.36,-47C345.2,-47 407.45,-47 459.03,-47"/>
<polygon fill="black" stroke="black" points="459.03,-50.5 469.03,-47 459.03,-43.5 459.03,-50.5"/>
<text xml:space="preserve" text-anchor="middle" x="432.5" y="-63" font-family="Helvetica,sans-Serif" font-size="10.00">+ Room</text>
<text xml:space="preserve" text-anchor="middle" x="432.5" y="-50.25" font-family="Helvetica,sans-Serif" font-size="10.00">+ Depot</text>
</g>
<!-- shunt -->
<g id="node4" class="node">
<title>shunt</title>
<path fill="#ffcc80" stroke="black" d="M283.12,-190.75C283.12,-190.75 127.12,-190.75 127.12,-190.75 121.12,-190.75 115.12,-184.75 115.12,-178.75 115.12,-178.75 115.12,-141.25 115.12,-141.25 115.12,-135.25 121.12,-129.25 127.12,-129.25 127.12,-129.25 283.12,-129.25 283.12,-129.25 289.12,-129.25 295.12,-135.25 295.12,-141.25 295.12,-141.25 295.12,-178.75 295.12,-178.75 295.12,-184.75 289.12,-190.75 283.12,-190.75"/>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-176.3" font-family="Helvetica,sans-Serif" font-size="11.00">Shunt</text>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-149.8" font-family="Helvetica,sans-Serif" font-size="11.00">Fake connector for testing</text>
<text xml:space="preserve" text-anchor="middle" x="205.12" y="-136.3" font-family="Helvetica,sans-Serif" font-size="11.00">e.g., mercadopago mock</text>
</g>
<!-- vein&#45;&gt;shunt -->
<g id="edge3" class="edge">
<title>vein&#45;&gt;shunt</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M205.12,-78.18C205.12,-90.4 205.12,-104.63 205.12,-117.75"/>
<polygon fill="black" stroke="black" points="201.63,-117.41 205.13,-127.41 208.63,-117.41 201.63,-117.41"/>
<text xml:space="preserve" text-anchor="middle" x="195.75" y="-100.38" font-family="Helvetica,sans-Serif" font-size="10.00">mock</text>
</g>
<!-- plexus -->
<g id="node3" class="node">
<title>plexus</title>
<path fill="#81c784" stroke="black" d="M936,-77.75C936,-77.75 752.75,-77.75 752.75,-77.75 746.75,-77.75 740.75,-71.75 740.75,-65.75 740.75,-65.75 740.75,-28.25 740.75,-28.25 740.75,-22.25 746.75,-16.25 752.75,-16.25 752.75,-16.25 936,-16.25 936,-16.25 942,-16.25 948,-22.25 948,-28.25 948,-28.25 948,-65.75 948,-65.75 948,-71.75 942,-77.75 936,-77.75"/>
<text xml:space="preserve" text-anchor="middle" x="844.38" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">Plexus</text>
<text xml:space="preserve" text-anchor="middle" x="844.38" y="-36.8" font-family="Helvetica,sans-Serif" font-size="11.00">Full app: backend + frontend + DB</text>
<text xml:space="preserve" text-anchor="middle" x="844.38" y="-23.3" font-family="Helvetica,sans-Serif" font-size="11.00">e.g., WhatsApp with chat UI</text>
</g>
<!-- pulse&#45;&gt;plexus -->
<g id="edge2" class="edge">
<title>pulse&#45;&gt;plexus</title>
<path fill="none" stroke="black" d="M651.24,-47C675.94,-47 703.07,-47 728.97,-47"/>
<polygon fill="black" stroke="black" points="728.86,-50.5 738.86,-47 728.86,-43.5 728.86,-50.5"/>
<text xml:space="preserve" text-anchor="middle" x="695.75" y="-75.75" font-family="Helvetica,sans-Serif" font-size="10.00">+ Backend</text>
<text xml:space="preserve" text-anchor="middle" x="695.75" y="-63" font-family="Helvetica,sans-Serif" font-size="10.00">+ Frontend</text>
<text xml:space="preserve" text-anchor="middle" x="695.75" y="-50.25" font-family="Helvetica,sans-Serif" font-size="10.00">+ DB</text>
</g>
<!-- props -->
<g id="node5" class="node">
<title>props</title>
<path fill="lightgrey" stroke="none" d="M382.25,-407.75C382.25,-407.75 28,-407.75 28,-407.75 22,-407.75 16,-401.75 16,-395.75 16,-395.75 16,-254.25 16,-254.25 16,-248.25 22,-242.25 28,-242.25 28,-242.25 382.25,-242.25 382.25,-242.25 388.25,-242.25 394.25,-248.25 394.25,-254.25 394.25,-254.25 394.25,-395.75 394.25,-395.75 394.25,-401.75 388.25,-407.75 382.25,-407.75"/>
<polygon fill="#eeeeee" stroke="none" points="24,-372.25 24,-403.75 78,-403.75 78,-372.25 24,-372.25"/>
<polygon fill="none" stroke="black" points="24,-372.25 24,-403.75 78,-403.75 78,-372.25 24,-372.25"/>
<text xml:space="preserve" text-anchor="start" x="36.75" y="-385.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="11.00">Type</text>
<polygon fill="#eeeeee" stroke="none" points="78,-372.25 78,-403.75 186,-403.75 186,-372.25 78,-372.25"/>
<polygon fill="none" stroke="black" points="78,-372.25 78,-403.75 186,-403.75 186,-372.25 78,-372.25"/>
<text xml:space="preserve" text-anchor="start" x="115.12" y="-385.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="11.00">State</text>
<polygon fill="#eeeeee" stroke="none" points="186,-372.25 186,-403.75 291,-403.75 291,-372.25 186,-372.25"/>
<polygon fill="none" stroke="black" points="186,-372.25 186,-403.75 291,-403.75 291,-372.25 186,-372.25"/>
<text xml:space="preserve" text-anchor="start" x="211.12" y="-385.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="11.00">Frontend</text>
<polygon fill="#eeeeee" stroke="none" points="291,-372.25 291,-403.75 386.25,-403.75 386.25,-372.25 291,-372.25"/>
<polygon fill="none" stroke="black" points="291,-372.25 291,-403.75 386.25,-403.75 386.25,-372.25 291,-372.25"/>
<text xml:space="preserve" text-anchor="start" x="317.25" y="-385.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="11.00">Deploy</text>
<polygon fill="none" stroke="black" points="24,-340.75 24,-372.25 78,-372.25 78,-340.75 24,-340.75"/>
<text xml:space="preserve" text-anchor="start" x="39.38" y="-352.8" font-family="Helvetica,sans-Serif" font-size="11.00">Vein</text>
<polygon fill="none" stroke="black" points="78,-340.75 78,-372.25 186,-372.25 186,-340.75 78,-340.75"/>
<text xml:space="preserve" text-anchor="start" x="87" y="-352.8" font-family="Helvetica,sans-Serif" font-size="11.00">None (or OAuth)</text>
<polygon fill="none" stroke="black" points="186,-340.75 186,-372.25 291,-372.25 291,-340.75 186,-340.75"/>
<text xml:space="preserve" text-anchor="start" x="195" y="-352.8" font-family="Helvetica,sans-Serif" font-size="11.00">Optional test UI</text>
<polygon fill="none" stroke="black" points="291,-340.75 291,-372.25 386.25,-372.25 386.25,-340.75 291,-340.75"/>
<text xml:space="preserve" text-anchor="start" x="300.38" y="-352.8" font-family="Helvetica,sans-Serif" font-size="11.00">With soleprint</text>
<polygon fill="none" stroke="black" points="24,-309.25 24,-340.75 78,-340.75 78,-309.25 24,-309.25"/>
<text xml:space="preserve" text-anchor="start" x="35.25" y="-321.3" font-family="Helvetica,sans-Serif" font-size="11.00">Shunt</text>
<polygon fill="none" stroke="black" points="78,-309.25 78,-340.75 186,-340.75 186,-309.25 78,-309.25"/>
<text xml:space="preserve" text-anchor="start" x="97.5" y="-321.3" font-family="Helvetica,sans-Serif" font-size="11.00">Configurable</text>
<polygon fill="none" stroke="black" points="186,-309.25 186,-340.75 291,-340.75 291,-309.25 186,-309.25"/>
<text xml:space="preserve" text-anchor="start" x="213.75" y="-321.3" font-family="Helvetica,sans-Serif" font-size="11.00">Config UI</text>
<polygon fill="none" stroke="black" points="291,-309.25 291,-340.75 386.25,-340.75 386.25,-309.25 291,-309.25"/>
<text xml:space="preserve" text-anchor="start" x="300.38" y="-321.3" font-family="Helvetica,sans-Serif" font-size="11.00">With soleprint</text>
<polygon fill="none" stroke="black" points="24,-277.75 24,-309.25 78,-309.25 78,-277.75 24,-277.75"/>
<text xml:space="preserve" text-anchor="start" x="36.38" y="-289.8" font-family="Helvetica,sans-Serif" font-size="11.00">Pulse</text>
<polygon fill="none" stroke="black" points="78,-277.75 78,-309.25 186,-309.25 186,-277.75 78,-277.75"/>
<text xml:space="preserve" text-anchor="start" x="95.62" y="-289.8" font-family="Helvetica,sans-Serif" font-size="11.00">Vein + config</text>
<polygon fill="none" stroke="black" points="186,-277.75 186,-309.25 291,-309.25 291,-277.75 186,-277.75"/>
<text xml:space="preserve" text-anchor="start" x="207" y="-289.8" font-family="Helvetica,sans-Serif" font-size="11.00">Uses vein&#39;s</text>
<polygon fill="none" stroke="black" points="291,-277.75 291,-309.25 386.25,-309.25 386.25,-277.75 291,-277.75"/>
<text xml:space="preserve" text-anchor="start" x="300.38" y="-289.8" font-family="Helvetica,sans-Serif" font-size="11.00">With soleprint</text>
<polygon fill="none" stroke="black" points="24,-246.25 24,-277.75 78,-277.75 78,-246.25 24,-246.25"/>
<text xml:space="preserve" text-anchor="start" x="33" y="-258.3" font-family="Helvetica,sans-Serif" font-size="11.00">Plexus</text>
<polygon fill="none" stroke="black" points="78,-246.25 78,-277.75 186,-277.75 186,-246.25 78,-246.25"/>
<text xml:space="preserve" text-anchor="start" x="94.5" y="-258.3" font-family="Helvetica,sans-Serif" font-size="11.00">Full app state</text>
<polygon fill="none" stroke="black" points="186,-246.25 186,-277.75 291,-277.75 291,-246.25 186,-246.25"/>
<text xml:space="preserve" text-anchor="start" x="214.12" y="-258.3" font-family="Helvetica,sans-Serif" font-size="11.00">Required</text>
<polygon fill="none" stroke="black" points="291,-246.25 291,-277.75 386.25,-277.75 386.25,-246.25 291,-246.25"/>
<text xml:space="preserve" text-anchor="start" x="300" y="-258.3" font-family="Helvetica,sans-Serif" font-size="11.00">Self&#45;contained</text>
</g>
</g>
</svg>