mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
Add scripts/docs/render-diagrams.mjs as a thin wrapper around @mermaid-js/mermaid-cli (mmdc): - Renders every docs/diagrams/*.mmd into docs/diagrams/exported/*.svg - Writes a Puppeteer config with --no-sandbox for Ubuntu 23.10+/WSL - Exits non-zero on first failure so CI can gate on rendering Expose it as `npm run docs:render-diagrams` and commit the initial 8 rendered SVGs so reviewers see the diagrams without having to install the renderer locally. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 line
29 KiB
XML
1 line
29 KiB
XML
<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1081.95px; background-color: white;" viewBox="0 0 1081.953125 1458.59375" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path d="M751.867,62L751.867,66.167C751.867,70.333,751.867,78.667,751.867,86.333C751.867,94,751.867,101,751.867,104.5L751.867,108" id="my-svg-L_Req_L1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Req_L1_0" data-points="W3sieCI6NzUxLjg2NzE4NzUsInkiOjYyfSx7IngiOjc1MS44NjcxODc1LCJ5Ijo4N30seyJ4Ijo3NTEuODY3MTg3NSwieSI6MTEyfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M751.867,359.828L751.867,365.995C751.867,372.161,751.867,384.495,751.867,403.328C751.867,422.161,751.867,447.495,751.867,470.828C751.867,494.161,751.867,515.495,756.538,536.417C761.208,557.339,770.548,577.849,775.219,588.104L779.889,598.36" id="my-svg-L_L1_L2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L1_L2_0" data-points="W3sieCI6NzUxLjg2NzE4NzUsInkiOjM1OS44MjgxMjV9LHsieCI6NzUxLjg2NzE4NzUsInkiOjM5Ni44MjgxMjV9LHsieCI6NzUxLjg2NzE4NzUsInkiOjQ3Mi44MjgxMjV9LHsieCI6NzUxLjg2NzE4NzUsInkiOjUzNi44MjgxMjV9LHsieCI6NzgxLjU0Njg5MDAzNzcwOTEsInkiOjYwMS45OTk5ODQ5NjIyOTA5fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M689.548,297.509L672.801,314.062C656.053,330.616,622.558,363.722,605.81,385.775C589.063,407.828,589.063,418.828,589.063,424.328L589.063,429.828" id="my-svg-L_L1_Block1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L1_Block1_0" data-points="W3sieCI6Njg5LjU0ODMwNjYxMjkwOTEsInkiOjI5Ny41MDkyNDQxMTI5MDkxfSx7IngiOjU4OS4wNjI1LCJ5IjozOTYuODI4MTI1fSx7IngiOjU4OS4wNjI1LCJ5Ijo0MzMuODI4MTI1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M809.453,302.243L823.139,318.007C836.825,333.771,864.198,365.3,877.884,388.564C891.57,411.828,891.57,426.828,891.57,434.328L891.57,441.828" id="my-svg-L_L1_Probe_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L1_Probe_0" data-points="W3sieCI6ODA5LjQ1MjY1NjYwMzI3NzEsInkiOjMwMi4yNDI2NTU4OTY3MjI5fSx7IngiOjg5MS41NzAzMTI1LCJ5IjozOTYuODI4MTI1fSx7IngiOjg5MS41NzAzMTI1LCJ5Ijo0NDUuODI4MTI1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M891.57,499.828L891.57,505.995C891.57,512.161,891.57,524.495,886.9,540.917C882.23,557.339,872.889,577.849,868.219,588.104L863.548,598.36" id="my-svg-L_Probe_L2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Probe_L2_0" data-points="W3sieCI6ODkxLjU3MDMxMjUsInkiOjQ5OS44MjgxMjV9LHsieCI6ODkxLjU3MDMxMjUsInkiOjUzNi44MjgxMjV9LHsieCI6ODYxLjg5MDYwOTk2MjI5MDksInkiOjYwMS45OTk5ODQ5NjIyOTA5fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M760.429,757.304L745.464,773.686C730.499,790.067,700.57,822.83,685.605,844.712C670.641,866.594,670.641,877.594,670.641,883.094L670.641,888.594" id="my-svg-L_L2_L3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L2_L3_0" data-points="W3sieCI6NzYwLjQyODkyNzc5MzM0NDMsInkiOjc1Ny4zMDM5Mjc3OTMzNDQzfSx7IngiOjY3MC42NDA2MjUsInkiOjg1NS41OTM3NX0seyJ4Ijo2NzAuNjQwNjI1LCJ5Ijo4OTIuNTkzNzV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M883.009,757.304L897.973,773.686C912.938,790.067,942.867,822.83,957.832,863.379C972.797,903.927,972.797,952.26,972.797,976.427L972.797,1000.594" id="my-svg-L_L2_Skip2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L2_Skip2_0" data-points="W3sieCI6ODgzLjAwODU3MjIwNjY1NTcsInkiOjc1Ny4zMDM5Mjc3OTMzNDQzfSx7IngiOjk3Mi43OTY4NzUsInkiOjg1NS41OTM3NX0seyJ4Ijo5NzIuNzk2ODc1LCJ5IjoxMDA0LjU5Mzc1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M608.14,1132.093L596.429,1148.677C584.717,1165.26,561.294,1198.427,549.583,1220.51C537.871,1242.594,537.871,1253.594,537.871,1259.094L537.871,1264.594" id="my-svg-L_L3_Exec_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L3_Exec_0" data-points="W3sieCI6NjA4LjE0MDMwMjI4OTcyMDgsInkiOjExMzIuMDkzNDI3Mjg5NzIwN30seyJ4Ijo1MzcuODcxMDkzNzUsInkiOjEyMzEuNTkzNzV9LHsieCI6NTM3Ljg3MTA5Mzc1LCJ5IjoxMjY4LjU5Mzc1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M730.645,1134.589L741.307,1150.756C751.968,1166.924,773.291,1199.259,783.952,1220.926C794.613,1242.594,794.613,1253.594,794.613,1259.094L794.613,1264.594" id="my-svg-L_L3_Skip3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_L3_Skip3_0" data-points="W3sieCI6NzMwLjY0NTQ3MDY3NzA4MDEsInkiOjExMzQuNTg4OTA0MzIyOTJ9LHsieCI6Nzk0LjYxMzI4MTI1LCJ5IjoxMjMxLjU5Mzc1fSx7IngiOjc5NC42MTMyODEyNSwieSI6MTI2OC41OTM3NX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M443.395,1310.372L390.947,1318.575C338.5,1326.779,233.605,1343.186,181.158,1356.89C128.711,1370.594,128.711,1381.594,128.711,1387.094L128.711,1392.594" id="my-svg-L_Exec_Clear_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Exec_Clear_0" data-points="W3sieCI6NDQzLjM5NDUzMTI1LCJ5IjoxMzEwLjM3MTU4MTg3NzQxNjV9LHsieCI6MTI4LjcxMDkzNzUsInkiOjEzNTkuNTkzNzV9LHsieCI6MTI4LjcxMDkzNzUsInkiOjEzOTYuNTkzNzV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M481.131,1322.594L468.171,1328.76C455.212,1334.927,429.294,1347.26,416.334,1358.927C403.375,1370.594,403.375,1381.594,403.375,1387.094L403.375,1392.594" id="my-svg-L_Exec_TripL1_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Exec_TripL1_0" data-points="W3sieCI6NDgxLjEzMDU1NDE5OTIxODc1LCJ5IjoxMzIyLjU5Mzc1fSx7IngiOjQwMy4zNzUsInkiOjEzNTkuNTkzNzV9LHsieCI6NDAzLjM3NSwieSI6MTM5Ni41OTM3NX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M598.323,1322.594L612.13,1328.76C625.937,1334.927,653.55,1347.26,667.357,1358.927C681.164,1370.594,681.164,1381.594,681.164,1387.094L681.164,1392.594" id="my-svg-L_Exec_TripL2_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Exec_TripL2_0" data-points="W3sieCI6NTk4LjMyMjgxNDk0MTQwNjIsInkiOjEzMjIuNTkzNzV9LHsieCI6NjgxLjE2NDA2MjUsInkiOjEzNTkuNTkzNzV9LHsieCI6NjgxLjE2NDA2MjUsInkiOjEzOTYuNTkzNzV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M632.348,1310.142L685.869,1318.384C739.391,1326.626,846.434,1343.11,899.955,1356.852C953.477,1370.594,953.477,1381.594,953.477,1387.094L953.477,1392.594" id="my-svg-L_Exec_TripL3_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Exec_TripL3_0" data-points="W3sieCI6NjMyLjM0NzY1NjI1LCJ5IjoxMzEwLjE0MjQwMzYwMjE0Mjh9LHsieCI6OTUzLjQ3NjU2MjUsInkiOjEzNTkuNTkzNzV9LHsieCI6OTUzLjQ3NjU2MjUsInkiOjEzOTYuNTkzNzV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_Req_L1_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(751.8671875, 472.828125)"><g class="label" data-id="L_L1_L2_0" transform="translate(-32.8984375, -12)"><foreignObject width="65.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>CLOSED</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(589.0625, 396.828125)"><g class="label" data-id="L_L1_Block1_0" transform="translate(-22.671875, -12)"><foreignObject width="45.34375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>OPEN</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(891.5703125, 396.828125)"><g class="label" data-id="L_L1_Probe_0" transform="translate(-47.5703125, -12)"><foreignObject width="95.140625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>HALF_OPEN</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Probe_L2_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(670.640625, 855.59375)"><g class="label" data-id="L_L2_L3_0" transform="translate(-31.578125, -12)"><foreignObject width="63.15625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>available</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(972.796875, 855.59375)"><g class="label" data-id="L_L2_Skip2_0" transform="translate(-46.703125, -12)"><foreignObject width="93.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>cooling down</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(537.87109375, 1231.59375)"><g class="label" data-id="L_L3_Exec_0" transform="translate(-27.1328125, -12)"><foreignObject width="54.265625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>allowed</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(794.61328125, 1231.59375)"><g class="label" data-id="L_L3_Skip3_0" transform="translate(-23.125, -12)"><foreignObject width="46.25" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>locked</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(128.7109375, 1359.59375)"><g class="label" data-id="L_Exec_Clear_0" transform="translate(-28.8984375, -12)"><foreignObject width="57.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>success</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(403.375, 1359.59375)"><g class="label" data-id="L_Exec_TripL1_0" transform="translate(-93.4140625, -12)"><foreignObject width="186.828125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>408 / 500 / 502 / 503 / 504</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(681.1640625, 1359.59375)"><g class="label" data-id="L_Exec_TripL2_0" transform="translate(-68.9375, -12)"><foreignObject width="137.875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>401 / 403 (account)</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(953.4765625, 1359.59375)"><g class="label" data-id="L_Exec_TripL3_0" transform="translate(-64.9296875, -12)"><foreignObject width="129.859375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>429 quota (model)</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="my-svg-flowchart-Req-0" data-look="classic" transform="translate(751.8671875, 35)"><rect class="basic label-container" style="" x="-59.796875" y="-27" width="119.59375" height="54"/><g class="label" style="" transform="translate(-29.796875, -12)"><rect/><foreignObject width="59.59375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Request</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-L1-1" data-look="classic" transform="translate(751.8671875, 235.9140625)"><polygon points="123.9140625,0 247.828125,-123.9140625 123.9140625,-247.828125 0,-123.9140625" class="label-container" transform="translate(-123.4140625, 123.9140625)"/><g class="label" style="" transform="translate(-84.9140625, -24)"><rect/><foreignObject width="169.828125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Provider Circuit Breaker<br />(scope: whole provider)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-L2-3" data-look="classic" transform="translate(821.71875, 690.2109375)"><polygon points="128.3828125,0 256.765625,-128.3828125 128.3828125,-256.765625 0,-128.3828125" class="label-container" transform="translate(-127.8828125, 128.3828125)"/><g class="label" style="" transform="translate(-89.3828125, -24)"><rect/><foreignObject width="178.765625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Connection Cooldown<br />(scope: one account/key)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Block1-5" data-look="classic" transform="translate(589.0625, 472.828125)"><rect class="basic label-container" style="" x="-94.90625" y="-39" width="189.8125" height="78"/><g class="label" style="" transform="translate(-64.90625, -24)"><rect/><foreignObject width="129.8125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Skip provider<br />(or 503 retry-after)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Probe-7" data-look="classic" transform="translate(891.5703125, 472.828125)"><rect class="basic label-container" style="" x="-71.8046875" y="-27" width="143.609375" height="54"/><g class="label" style="" transform="translate(-41.8046875, -12)"><rect/><foreignObject width="83.609375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Allow probe</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-L3-11" data-look="classic" transform="translate(670.640625, 1043.59375)"><polygon points="151,0 302,-151 151,-302 0,-151" class="label-container" transform="translate(-150.5, 151)"/><g class="label" style="" transform="translate(-100, -36)"><rect/><foreignObject width="200" height="72"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Model Lockout<br />(scope: provider × conn × model)</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Skip2-13" data-look="classic" transform="translate(972.796875, 1043.59375)"><rect class="basic label-container" style="" x="-101.15625" y="-39" width="202.3125" height="78"/><g class="label" style="" transform="translate(-71.15625, -24)"><rect/><foreignObject width="142.3125" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Skip this connection<br />fall back to next</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Exec-15" data-look="classic" transform="translate(537.87109375, 1295.59375)"><rect class="basic label-container" style="" x="-94.4765625" y="-27" width="188.953125" height="54"/><g class="label" style="" transform="translate(-64.4765625, -12)"><rect/><foreignObject width="128.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Execute upstream</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Skip3-17" data-look="classic" transform="translate(794.61328125, 1295.59375)"><rect class="basic label-container" style="" x="-112.265625" y="-27" width="224.53125" height="54"/><g class="label" style="" transform="translate(-82.265625, -12)"><rect/><foreignObject width="164.53125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Fall back to next model</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-Clear-19" data-look="classic" transform="translate(128.7109375, 1423.59375)"><rect class="basic label-container" style="" x="-120.7109375" y="-27" width="241.421875" height="54"/><g class="label" style="" transform="translate(-90.7109375, -12)"><rect/><foreignObject width="181.421875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Clear cooldowns/lockouts</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-TripL1-21" data-look="classic" transform="translate(403.375, 1423.59375)"><rect class="basic label-container" style="" x="-103.953125" y="-27" width="207.90625" height="54"/><g class="label" style="" transform="translate(-73.953125, -12)"><rect/><foreignObject width="147.90625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Trip provider breaker</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-TripL2-23" data-look="classic" transform="translate(681.1640625, 1423.59375)"><rect class="basic label-container" style="" x="-123.8359375" y="-27" width="247.671875" height="54"/><g class="label" style="" transform="translate(-93.8359375, -12)"><rect/><foreignObject width="187.671875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Start connection cooldown</p></span></div></foreignObject></g></g><g class="node default" id="my-svg-flowchart-TripL3-25" data-look="classic" transform="translate(953.4765625, 1423.59375)"><rect class="basic label-container" style="" x="-98.4765625" y="-27" width="196.953125" height="54"/><g class="label" style="" transform="translate(-68.4765625, -12)"><rect/><foreignObject width="136.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Start model lockout</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs></svg> |