Files
OmniRoute/docs/diagrams/exported/resilience-3layers.svg
diegosouzapw 519fdf41b8 chore(docs): add npm run docs:render-diagrams and export SVGs
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>
2026-05-13 13:54:09 -03:00

1 line
29 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>