<mxfile host="app.diagrams.net" agent="architecture-diagram" version="24.0.0">
  <diagram name="Discord Bot Platform — High-Level Architecture" id="02-high-level-architecture">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="470" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="_st1" value="Chat service" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.evt" value="&lt;b&gt;Commit Events&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;per-server stream&lt;/font&gt;" style="shape=process;size=0.08;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#4a3200;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="40" y="150" width="170" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico2" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,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;" vertex="1" parent="n.evt">
          <mxGeometry x="21" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st3" value="Fan-out" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="380" y="60" width="190" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.filt" value="&lt;b&gt;Entitlement Filter&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;intents x permissions&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="380" y="90" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico4" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.filt">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.part" value="&lt;b&gt;Server Partitions&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;Event Hubs&lt;/font&gt;" style="shape=process;size=0.08;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#4a3200;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="380" y="210" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico5" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAYAAABxLuKEAAAABmJLR0QA/wD/AP+gvaeTAAAEv0lEQVR4nO2bXWhcRRTH/2fuR9Jt6qLEj6pgq2hbYqKggtQiSglUofggKj6ZyMYNhIhIm4jgx4toGlBMIJ/IoqAIgohvMdFarBGqATVp1YKtVBARkjZsaja7d+b44Camuzt313D33g2d39vec2bmnz/3zpm5dwIYDAaDIXRo/Y+BgYErHMe5vyiJ6IxSKhOerOqRy+ViruvuKLwuhPgqmUwurv5eM2Z4eDglpWwLR15tYtt2qrOz82kAEADAzKSUeipaWdEjpWxjZgsALABobGzcCeC5SFXVBjQ9Pf3uxMTEeQEAnudRuRaXGyJqAbWKMUaDDQC2bbNfEhGlmdkLR1LVcQA06IKrXtgAwMxLruv6dfZIMpk8Gqi8iBgZGTlIRJ/q4isrK0uAeZS0GGM0GGM0GGM0GGM02JUkCSF8y/nrP925Q7FIAKTvj6EsiPdfaPr25P/UGCiWZUmllDYei8UkkDemu7t7fmxs7DSA2woTmfnPWCz2g99gzPYhAnf5KiJAQd0C4Iny8quHUuprAKcAXFsiPJdIJBaAvDFEpADs2uhgDLWFUNF2y3exFAb5dy5N5fLMHKPBGKPBGKOhoqpUTXqOttyoJO/2yyHis/37534NSxMQkDFEyMG3oK9lrhRdkvydKF0h/oMp0zt513V9rTOLvnkBEtAdY78JkllWVKfLIKGYpHinROiaCgaoBzJxAJvLmBf3nDgN4Nkg+qoVzOSrwRijIZBH6dWjD9jLan6vZP3KlhRyXkPDibf2frMcxJgA0HN81zbBrvZvUJT1juz7Jb2RvgMx5m85/zKAl3xvPwE4y0vjAJ4piDBQfj+RU3RJ3eudbO7gDMb020EAcPnwZEtbf+uP75Xrv5BgyjVwQ0XVmnF1UVvC28wo+l5ewM+/L+75A5hb15CbKvCTiNTtlUgrJPIFXt/+2ecry5ytrpACzOSrwRijwRijIfI5pmeq5UOA7/FNIpy9EHcfGrt7JheSrGCMYeALEA6CfftTxPRZidaPo1x5Ydx85fnMdgDnVi9JwjHBeBL/fnLVkSPGMd++NUR+/KNnqllVooNY3dTXevJcubygMHOMBmOMBmOMhkAm38OfNz9GzK8BZPnlEeONvtbZ8SDGrDaBGCMYBxh0a7k8JjwMoNCY3wDsLNP0whYbCxuUtyEiX8egPnuHyLhFm8v1ZCxr4ciDs0thSQJqwJj8+5INvTOpJmby1bB2x4yOju4TQhxQSl2y2LIs6/tEIvFR+NKqR/4c3r0lQlOrZw1tAOjv798KYFIpVV+YKaXk8fHxMx0dHTPVlRsOqVRqdzab/QSln5ZDqVQq3t7enhEAUFdXFwNQZEoeklJe7zsaVfi9hynyuSSbzW6Hfgpx0+n0NiCoTWRd9hUsO8dZ6NcxxMTSdr4MYrwwCMSYfGX5OIi+agVTlTQYYzQYYzSsnsFz/E4yMvN9g4ODuqq1qfA8r0kI/f1ARA6QN8bzvHoi35dovWXimwZmhpRSG/c8rx4wj5IWY4wGY4wGAQBEdDFqIbVCPB5PA+s+WwwNDS2X2kReThDRxa6urgZg3ZbAsqxWZv4AwFUl2pxCiAcDqwkzbyWiov+ZIKK/HMd5NApNBoPBYMjzD7S7anQZuyyIAAAAAElFTkSuQmCC;" vertex="1" parent="n.part">
          <mxGeometry x="21" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st6" value="Sessions" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="750" y="60" width="190" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.gw" value="&lt;b&gt;Gateway Shards&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;AKS stateful pods&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="750" y="90" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico7" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.gw">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.sess" value="&lt;b&gt;Session &amp; Resume&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;Azure Cache for Redis&lt;/font&gt;" style="shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=11;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#1e3a1e;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="750" y="210" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico8" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,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;" vertex="1" parent="n.sess">
          <mxGeometry x="12" y="39" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st9" value="Edge" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1110" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.ws" value="&lt;b&gt;WebSocket Edge&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;Front Door + L4&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#4a3200;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1110" y="90" width="170" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico10" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAABzklEQVRoge3XsYsUMRjG4efURgQbQQ4OxSu2EEEEwVo7Qey8VlGxFnv/BnsFCy0Ee7sDRXsrUQQREexszgOFc3HXIg7sjJPc3TK7k4H8IEXyzYT3JfnyJRQKhUKhznEc6FvEPBzBa0zxEaN+5eyf64L4qn2zBxM5LdWxRn8Nb3A69VNOBtpYxUsJE7kbYBcTh1rGjuLgIhVFOJyIrWITl/Ap9tF5fFZPpNxaMrE3MxC4l/ZV2CWo58BazFlmnMTFqjNr4OfSpczHb7yvOrMGHgtLlDMT3BFyFaw0PjinvxJ+BTcS8Qlu4uly5Oyfe+KJ+0fE3BAK2QS38KQtmLuBpHjaK3Ff7DT6ne75q/iAt7jQxYQtrOOHsOfHwvW6Ezb+TVgl1LuuJm7hFG7jbFcTNsVPDafguSZUveaRNggDMfGDMJASn52B5lViA8+kj9cpvixMUZotPMLDtuBl/ydsjm0i3NlQr8T35VXYYqzgTNWZNfB9+VrmZtw2uC68OfveIru1bTOvx2YSj/BK+nk5xoNEfJHs4LlwrYkykl6JrI7RGCkTgzBA3MRgDNBuYrtXRXPQNPGiXzl1mqdQjBO4i1/CCbS1MEWFQqFQWCZ/AdclH6RcD+9yAAAAAElFTkSuQmCC;" vertex="1" parent="n.ws">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.api" value="&lt;b&gt;API Edge&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;auth, rate limit&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#4a3200;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1110" y="210" width="170" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico11" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAABzklEQVRoge3XsYsUMRjG4efURgQbQQ4OxSu2EEEEwVo7Qey8VlGxFnv/BnsFCy0Ee7sDRXsrUQQREexszgOFc3HXIg7sjJPc3TK7k4H8IEXyzYT3JfnyJRQKhUKhznEc6FvEPBzBa0zxEaN+5eyf64L4qn2zBxM5LdWxRn8Nb3A69VNOBtpYxUsJE7kbYBcTh1rGjuLgIhVFOJyIrWITl/Ap9tF5fFZPpNxaMrE3MxC4l/ZV2CWo58BazFlmnMTFqjNr4OfSpczHb7yvOrMGHgtLlDMT3BFyFaw0PjinvxJ+BTcS8Qlu4uly5Oyfe+KJ+0fE3BAK2QS38KQtmLuBpHjaK3Ff7DT6ne75q/iAt7jQxYQtrOOHsOfHwvW6Ezb+TVgl1LuuJm7hFG7jbFcTNsVPDafguSZUveaRNggDMfGDMJASn52B5lViA8+kj9cpvixMUZotPMLDtuBl/ydsjm0i3NlQr8T35VXYYqzgTNWZNfB9+VrmZtw2uC68OfveIru1bTOvx2YSj/BK+nk5xoNEfJHs4LlwrYkykl6JrI7RGCkTgzBA3MRgDNBuYrtXRXPQNPGiXzl1mqdQjBO4i1/CCbS1MEWFQqFQWCZ/AdclH6RcD+9yAAAAAElFTkSuQmCC;" vertex="1" parent="n.api">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st12" value="Bots" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1450" y="60" width="210" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.bots" value="&lt;b&gt;Bot Processes&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#8c8c8c;fontColor=#333333;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1450" y="130" width="210" height="50" as="geometry" />
        </mxCell>
        <mxCell id="_ico13" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAB40lEQVRoge3Yz6sOURzH8dfjXlfuQkoW6ooiIUk2imRna+kvYCMLUlIsWNhYKFtZKUp3y80/YGOHKD+6RCGJErnyazF3MsbM85z73HnmTDnv+tQ0c2bm8znnzJyZL4lEIpH4n+k1dJ21mMJKfMFjvG7o2iNjChfwFL8q9ARnsTqWwTrGcE7W01XGy/qEo5ob7UWxAjPCjJd1DRPtW/7DOG4bznyuqyKOxPkAgyE6jD24IXtOPmMWV7B9VObX4WtDAb73OfYDZ4xglC41ZD5UJ5s038PLlgPMYUOIuSUBbTbJ3vltMoFDIQ1DArRtPmdvSKOQALFW0kXfdxlO4IV253+uOyEmx2v2b8U0tgTHbZ57w564Ex/E6fWynuE4loeaX4VXHTBe1kNsCwlwuQNm6/RuUIg1+NYBo/30SGk6FV+jB7G0X8IOsBlH6g5Oi9/DIZotmi6OQKwVd6Gsl33e4O8AUf+WFsjGfKMYoPNVhAKT+UYxwIMIRoblTdXO3eI/oCGakxUX/qGHux0wOEg3q8zn7JP9l8Y2Waef2NUvAJzqgNE6XRxknmwqnZ5PG9twUdfVf/5Xsh/3O2D8I46pKbUMqr+MzQc5gB2y1Xqy7xnN8BbPcUtWknzfwj0TiUQikWif37lJeEKjXHZHAAAAAElFTkSuQmCC;" vertex="1" parent="n.bots">
          <mxGeometry x="9" y="15" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.hooks" value="&lt;b&gt;Interaction Endpoints&lt;/b&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#8c8c8c;fontColor=#333333;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1450" y="210" width="210" height="50" as="geometry" />
        </mxCell>
        <mxCell id="_ico14" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAB40lEQVRoge3Yz6sOURzH8dfjXlfuQkoW6ooiIUk2imRna+kvYCMLUlIsWNhYKFtZKUp3y80/YGOHKD+6RCGJErnyazF3MsbM85z73HnmTDnv+tQ0c2bm8znnzJyZL4lEIpH4n+k1dJ21mMJKfMFjvG7o2iNjChfwFL8q9ARnsTqWwTrGcE7W01XGy/qEo5ob7UWxAjPCjJd1DRPtW/7DOG4bznyuqyKOxPkAgyE6jD24IXtOPmMWV7B9VObX4WtDAb73OfYDZ4xglC41ZD5UJ5s038PLlgPMYUOIuSUBbTbJ3vltMoFDIQ1DArRtPmdvSKOQALFW0kXfdxlO4IV253+uOyEmx2v2b8U0tgTHbZ57w564Ex/E6fWynuE4loeaX4VXHTBe1kNsCwlwuQNm6/RuUIg1+NYBo/30SGk6FV+jB7G0X8IOsBlH6g5Oi9/DIZotmi6OQKwVd6Gsl33e4O8AUf+WFsjGfKMYoPNVhAKT+UYxwIMIRoblTdXO3eI/oCGakxUX/qGHux0wOEg3q8zn7JP9l8Y2Waef2NUvAJzqgNE6XRxknmwqnZ5PG9twUdfVf/5Xsh/3O2D8I46pKbUMqr+MzQc5gB2y1Xqy7xnN8BbPcUtWknzfwj0TiUQikWif37lJeEKjXHZHAAAAAElFTkSuQmCC;" vertex="1" parent="n.hooks">
          <mxGeometry x="9" y="15" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_spine15" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="220" y="190" as="sourcePoint" />
            <mxPoint x="370" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine16" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="580" y="190" as="sourcePoint" />
            <mxPoint x="740" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine17" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="950" y="190" as="sourcePoint" />
            <mxPoint x="1100" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine18" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="1290" y="190" as="sourcePoint" />
            <mxPoint x="1440" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_e19" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;endArrow=open;endFill=0;strokeColor=#d79b00;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;verticalAlign=bottom;fontFamily=Segoe UI;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.part" target="n.gw">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="660" y="260" />
              <mxPoint x="660" y="140" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_e20" value="resume buffer" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;jettySize=auto;orthogonalLoop=1;endArrow=block;endFill=1;strokeColor=#5a6570;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;verticalAlign=bottom;fontFamily=Segoe UI;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.gw" target="n.sess">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_e21" value="actions" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;jettySize=auto;orthogonalLoop=1;endArrow=block;endFill=1;strokeColor=#5a6570;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;verticalAlign=bottom;fontFamily=Segoe UI;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.api" target="n.evt">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1200" y="330" />
              <mxPoint x="130" y="330" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="title" value="Discord Bot Platform — High-Level Architecture" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=20;fontStyle=1;fontColor=#16202c;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="1610" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#c9d3de;" vertex="1" parent="1">
          <mxGeometry x="40" y="50" width="1610" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg22" value="" style="rounded=1;arcSize=30;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
          <mxGeometry x="40" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg23" value="Queue / topic" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="70" y="370" width="80" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg24" value="" style="rounded=1;arcSize=30;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
          <mxGeometry x="180" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg25" value="Application we own" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="200" y="370" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg26" value="" style="rounded=1;arcSize=30;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
          <mxGeometry x="330" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg27" value="Data store" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="360" y="370" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg28" value="" style="rounded=1;arcSize=30;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
          <mxGeometry x="450" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg29" value="Interface / broker" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="480" y="370" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg30" value="" style="rounded=1;arcSize=30;html=1;fillColor=#f5f5f5;strokeColor=#8c8c8c;" vertex="1" parent="1">
          <mxGeometry x="610" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg31" value="External / third party" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="640" y="370" width="130" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg32" value="" style="html=1;endArrow=none;dashed=1;strokeColor=#d79b00;strokeWidth=1.4;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="790" y="380" as="sourcePoint" />
            <mxPoint x="810" y="380" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_lg33" value="event / async" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="820" y="370" width="80" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg34" value="" style="html=1;endArrow=none;strokeColor=#5a6570;strokeWidth=1.4;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="920" y="380" as="sourcePoint" />
            <mxPoint x="950" y="380" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_lg35" value="synchronous" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="950" y="370" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="note" value="Control plane (registry, installs, commands, tokens) is drawn in view 06." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="400" width="1610" height="20" as="geometry" />
        </mxCell>
        <mxCell id="foot-rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#e3e9ef;" vertex="1" parent="1">
          <mxGeometry x="40" y="420" width="1610" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Integration Platform Architecture   ·   date 2026-10" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontColor=#9aa7b4;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="440" width="1610" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
