Files
progcode/web/public/assets/editorial/2021/data-consistency-diagnosis-2021.svg
T
huncode c561263bfc
Build and deploy / deploy (push) Successful in 14s
revise April 2021 data consistency articles
2026-07-31 12:32:46 +03:00

80 lines
5.1 KiB
XML
Raw 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 xmlns="http://www.w3.org/2000/svg" width="720" height="1380" viewBox="0 0 720 1380" role="img" aria-labelledby="title desc">
<title id="title">Диагностика расхождения owner и проекции</title>
<desc id="desc">Вертикальная диагностическая схема собирает owner version, projection version, event id и compensation key. Затем отделяет version gap, конфликт одинаковой версии и повтор события; рискованный следующий шаг заблокирован до доказательств.</desc>
<defs>
<style>
.bg { fill: #0b1220; }
.frame { fill: #101c31; stroke: #2e4264; stroke-width: 3; }
.input { fill: #173954; stroke: #66c5f2; stroke-width: 3; }
.evidence { fill: #294050; stroke: #a8c8e7; stroke-width: 3; }
.decision { fill: #503b1b; stroke: #f6c45a; stroke-width: 3; }
.action { fill: #1d473e; stroke: #72d7b7; stroke-width: 3; }
.stop { fill: #552b35; stroke: #ff8992; stroke-width: 3; }
.title { fill: #f5f8ff; font: 700 32px Arial, sans-serif; }
.section { fill: #ffffff; font: 700 26px Arial, sans-serif; }
.copy { fill: #d9e5f5; font: 22px Arial, sans-serif; }
.small { fill: #b8cbe0; font: 20px Arial, sans-serif; }
.accent { fill: #8de0ff; font: 700 22px Arial, sans-serif; }
.arrow { fill: none; stroke: #8de0ff; stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrowhead); }
.branch { fill: none; stroke: #f6c45a; stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#yellowhead); }
</style>
<marker id="arrowhead" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#8de0ff"/>
</marker>
<marker id="yellowhead" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#f6c45a"/>
</marker>
</defs>
<rect class="bg" width="720" height="1380" rx="32"/>
<rect class="frame" x="34" y="30" width="652" height="104" rx="22"/>
<text class="title" x="62" y="73">Разные статусы одного заказа</text>
<text class="copy" x="62" y="108">Сначала блокируем effect, затем собираем evidence</text>
<rect class="stop" x="68" y="174" width="584" height="100" rx="20"/>
<text class="section" x="96" y="216">1. Не выполнять следующий effect</text>
<text class="copy" x="96" y="249">отгрузка, доступ или повторный reserve — paused</text>
<path class="arrow" d="M360 274 L360 312"/>
<rect class="evidence" x="68" y="322" width="584" height="188" rx="20"/>
<text class="section" x="96" y="366">2. Собрать evidence packet</text>
<text class="copy" x="96" y="403">owner state + version</text>
<text class="copy" x="96" y="434">projection state + version</text>
<text class="copy" x="96" y="465">source + event id + compensation key</text>
<text class="small" x="96" y="494">один object id, один момент наблюдения</text>
<path class="arrow" d="M360 510 L360 548"/>
<rect class="decision" x="68" y="558" width="584" height="122" rx="20"/>
<text class="section" x="96" y="602">3. Сравнить version</text>
<text class="accent" x="96" y="639">owner &gt; projection, равно или event duplicate?</text>
<path class="branch" d="M236 680 L136 730 L136 762"/>
<path class="branch" d="M484 680 L584 730 L584 762"/>
<text class="small" x="82" y="724">gap</text>
<text class="small" x="548" y="724">same</text>
<rect class="action" x="44" y="772" width="296" height="176" rx="20"/>
<text class="section" x="72" y="816">4a. Version gap</text>
<text class="copy" x="72" y="853">найти missing event</text>
<text class="copy" x="72" y="883">или deferred record</text>
<text class="small" x="72" y="916">replay только по contract</text>
<rect class="input" x="380" y="772" width="296" height="176" rx="20"/>
<text class="section" x="408" y="816">4b. Version same</text>
<text class="copy" x="408" y="853">сверить transform rule</text>
<text class="copy" x="408" y="883">event ledger и effect</text>
<text class="small" x="408" y="916">не стирать ledger вслепую</text>
<path class="arrow" d="M192 948 L192 1000 L360 1000 L360 1038"/>
<path class="arrow" d="M528 948 L528 1000 L360 1000"/>
<rect class="evidence" x="68" y="1048" width="584" height="150" rx="20"/>
<text class="section" x="96" y="1092">5. Проверить компенсацию</text>
<text class="copy" x="96" y="1129">reason + исходная version + один key</text>
<text class="small" x="96" y="1160">key не доказывает внешний effect</text>
<path class="arrow" d="M360 1198 L360 1236"/>
<rect class="action" x="68" y="1246" width="584" height="96" rx="20"/>
<text class="section" x="96" y="1286">6. Выбрать контролируемое действие</text>
<text class="copy" x="96" y="1319">replay, correction с журналом или manual decision</text>
</svg>