78 lines
5.0 KiB
XML
78 lines
5.0 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1540" role="img" aria-labelledby="title desc">
|
|
<title id="title">Границы delivery, effect ledger и manual route</title>
|
|
<desc id="desc">Вертикальная схема показывает, что delivery относится к запуску consumer, effect ledger относится к доменному результату, а manual route останавливает автоматический путь; duplicate не создаёт второй эффект.</desc>
|
|
<defs>
|
|
<marker id="arrow" viewBox="0 0 12 12" refX="10" refY="6" markerWidth="10" markerHeight="10" orient="auto-start-reverse">
|
|
<path d="M 1 1 L 11 6 L 1 11 z" fill="#b3c4e4"/>
|
|
</marker>
|
|
<style>
|
|
.bg { fill: #101525; }
|
|
.card { fill: #1b2740; stroke: #4c6792; stroke-width: 3; }
|
|
.effect { fill: #263b2d; stroke: #70d09d; stroke-width: 3; }
|
|
.duplicate { fill: #382a4d; stroke: #caa4ff; stroke-width: 3; }
|
|
.manual { fill: #49302d; stroke: #ffab84; stroke-width: 3; }
|
|
.line { stroke: #b3c4e4; stroke-width: 5; fill: none; marker-end: url(#arrow); }
|
|
.branch { stroke: #caa4ff; stroke-width: 5; fill: none; marker-end: url(#arrow); }
|
|
.warnline { stroke: #ffb070; stroke-width: 5; fill: none; marker-end: url(#arrow); }
|
|
.title { fill: #ffffff; font: 700 34px Arial, sans-serif; }
|
|
.tag { fill: #a1d4ff; font: 700 21px Arial, sans-serif; letter-spacing: 1px; }
|
|
.label { fill: #f0f5ff; font: 600 27px Arial, sans-serif; }
|
|
.body { fill: #d3def2; font: 24px Arial, sans-serif; }
|
|
.small { fill: #b8c7e0; font: 22px Arial, sans-serif; }
|
|
</style>
|
|
</defs>
|
|
<rect width="720" height="1540" rx="32" class="bg"/>
|
|
<text x="360" y="62" text-anchor="middle" class="title">Границы delivery-контракта</text>
|
|
<text x="360" y="96" text-anchor="middle" class="small">одно слово — одна ответственность</text>
|
|
|
|
<rect x="80" y="140" width="560" height="174" rx="22" class="card"/>
|
|
<text x="115" y="183" class="tag">A · DELIVERY</text>
|
|
<text x="115" y="225" class="label">Consumer получил message id</text>
|
|
<text x="115" y="260" class="body">это запуск обработки, не доменный эффект</text>
|
|
<text x="115" y="291" class="small">возможно повторное появление того же id</text>
|
|
<path d="M360 314 L360 370" class="line"/>
|
|
|
|
<rect x="80" y="390" width="560" height="178" rx="22" class="effect"/>
|
|
<text x="115" y="433" class="tag">B · EFFECT KEY</text>
|
|
<text x="115" y="475" class="label">Ledger ищет effectKey</text>
|
|
<text x="115" y="510" class="body">нет ключа → записать один эффект</text>
|
|
<text x="115" y="541" class="small">есть ключ → принять duplicate без нового эффекта</text>
|
|
|
|
<path d="M235 568 L235 630" class="line"/>
|
|
<path d="M485 568 L485 630" class="branch"/>
|
|
<text x="137" y="611" class="small">новый эффект</text>
|
|
<text x="455" y="611" class="small">duplicate</text>
|
|
|
|
<rect x="54" y="650" width="350" height="170" rx="22" class="effect"/>
|
|
<text x="84" y="692" class="tag">C · RESULT</text>
|
|
<text x="84" y="734" class="label">Effect записан</text>
|
|
<text x="84" y="769" class="body">одна доменная запись</text>
|
|
<text x="84" y="800" class="small">ключ хранит связь с intent</text>
|
|
|
|
<rect x="424" y="650" width="242" height="170" rx="22" class="duplicate"/>
|
|
<text x="454" y="692" class="tag">C · SAME KEY</text>
|
|
<text x="454" y="734" class="label">Suppress</text>
|
|
<text x="454" y="769" class="body">без нового</text>
|
|
<text x="454" y="800" class="body">effect</text>
|
|
|
|
<path d="M235 820 L235 875" class="line"/>
|
|
<path d="M485 820 L485 875" class="branch"/>
|
|
<rect x="80" y="895" width="560" height="164" rx="22" class="card"/>
|
|
<text x="115" y="938" class="tag">D · DECISION</text>
|
|
<text x="115" y="980" class="label">Решить текущую delivery</text>
|
|
<text x="115" y="1015" class="body">ack только после ответа ledger</text>
|
|
<text x="115" y="1046" class="small">это не claim о протоколе или transport</text>
|
|
<path d="M360 1059 L360 1115" class="line"/>
|
|
|
|
<rect x="80" y="1135" width="560" height="145" rx="22" class="manual"/>
|
|
<text x="115" y="1178" class="tag">E · TERMINAL PATH</text>
|
|
<text x="115" y="1220" class="label">Unknown / terminal → manual review</text>
|
|
<text x="115" y="1255" class="body">reason · attempts · required check</text>
|
|
<path d="M360 1280 L360 1334" class="warnline"/>
|
|
|
|
<rect x="80" y="1354" width="560" height="126" rx="22" class="card"/>
|
|
<text x="115" y="1396" class="tag">ГРАНИЦА УВЕРЕННОСТИ</text>
|
|
<text x="115" y="1435" class="label">Fixture проверяет договор, не брокер</text>
|
|
<text x="115" y="1465" class="small">сеть, storage и внешний эффект проверяются отдельно</text>
|
|
</svg>
|