rewrite 2026-09 and 2027 articles for reader-facing quality
Build and deploy / deploy (push) Successful in 18s

This commit is contained in:
2026-07-31 22:26:56 +03:00
parent 3bfc3f21c4
commit 440c8721dc
69 changed files with 4424 additions and 3533 deletions
@@ -1,7 +1,39 @@
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="590" viewBox="0 0 720 590" role="img" aria-labelledby="title desc">
<title id="title">Матрица обязанностей контракта</title><desc id="desc">Четыре строки различают query, command, read model и problem envelope. Красная нижняя строка запрещает доменный вывод из отправленной команды.</desc>
<rect width="720" height="590" fill="#f8fafc"/><text x="34" y="48" font-family="Arial,sans-serif" font-size="28" font-weight="700" fill="#152238">Boundary: право на вывод</text>
<rect x="32" y="82" width="656" height="54" fill="#173a78"/><text x="52" y="118" font-family="Arial,sans-serif" font-size="23" font-weight="700" fill="#fff">Форма</text><text x="246" y="118" font-family="Arial,sans-serif" font-size="23" font-weight="700" fill="#fff">Даёт UI</text><text x="500" y="118" font-family="Arial,sans-serif" font-size="23" font-weight="700" fill="#fff">Не даёт UI</text>
<g font-family="Arial,sans-serif" font-size="22" fill="#152238"><rect x="32" y="136" width="656" height="76" fill="#e8f0fe"/><text x="52" y="182">query</text><text x="246" y="182">вопрос к model</text><text x="500" y="182">изменение domain</text><rect x="32" y="212" width="656" height="76" fill="#eef7e9"/><text x="52" y="258">command</text><text x="246" y="258">intent</text><text x="500" y="258">успешный факт</text><rect x="32" y="288" width="656" height="76" fill="#fff3df"/><text x="52" y="334">read model</text><text x="246" y="334">status + actions</text><text x="500" y="334">скрытую причину</text><rect x="32" y="364" width="656" height="76" fill="#f2edfb"/><text x="52" y="410">problem</text><text x="246" y="410">code + retry</text><text x="500" y="410">догадку о retry</text></g>
<rect x="32" y="472" width="656" height="74" rx="12" fill="#fce8ea" stroke="#b3263a" stroke-width="3"/><text x="52" y="518" font-family="Arial,sans-serif" font-size="23" font-weight="700" fill="#8a1f2d">Отправка command ≠ новый domain fact</text><text x="34" y="574" font-family="Arial,sans-serif" font-size="19" fill="#526273">Матрица для plan review; не описание реального API.</text>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 420" role="img" aria-labelledby="title desc">
<title id="title">HTTP результат и следующий шаг UI</title>
<desc id="desc">Таблица-схема связывает 2xx, 409 и 422, 429 и 5xx с разрешённым действием интерфейса и показывает, что отправка команды сама по себе не меняет модель экрана.</desc>
<rect width="720" height="420" rx="24" fill="#f7f3ea"/>
<g font-family="Arial, sans-serif" fill="#202124">
<text x="42" y="48" font-size="24" font-weight="700">Статус задаёт ветку, не весь смысл</text>
<text x="42" y="75" font-size="16" fill="#5f6368">каждому результату — свой следующий шаг</text>
<g font-size="16" font-weight="700">
<rect x="42" y="112" width="118" height="48" rx="8" fill="#d7e8ff" stroke="#2b5f9e" stroke-width="2"/>
<rect x="178" y="112" width="206" height="48" rx="8" fill="#d7e8ff" stroke="#2b5f9e" stroke-width="2"/>
<rect x="402" y="112" width="250" height="48" rx="8" fill="#d7e8ff" stroke="#2b5f9e" stroke-width="2"/>
<text x="101" y="143" text-anchor="middle">результат</text>
<text x="281" y="143" text-anchor="middle">что известно</text>
<text x="527" y="143" text-anchor="middle">следующий шаг UI</text>
</g>
<g font-size="16">
<rect x="42" y="174" width="118" height="42" rx="8" fill="#d9f1e1" stroke="#2e7d51" stroke-width="2"/>
<rect x="178" y="174" width="206" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<rect x="402" y="174" width="250" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<text x="101" y="201" text-anchor="middle" font-weight="700">200 + JSON</text>
<text x="192" y="201">valid representation</text>
<text x="416" y="201">render from model</text>
<rect x="42" y="224" width="118" height="42" rx="8" fill="#fff1cf" stroke="#a87400" stroke-width="2"/>
<rect x="178" y="224" width="206" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<rect x="402" y="224" width="250" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<text x="101" y="251" text-anchor="middle" font-weight="700">409 / 422</text>
<text x="192" y="251">domain rejection</text>
<text x="416" y="251">show reason or refetch</text>
<rect x="42" y="274" width="118" height="42" rx="8" fill="#fff1cf" stroke="#a87400" stroke-width="2"/>
<rect x="178" y="274" width="206" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<rect x="402" y="274" width="250" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<text x="101" y="301" text-anchor="middle" font-weight="700">429 / 5xx</text>
<text x="192" y="301">temporary failure</text>
<text x="416" y="301">bounded retry policy</text>
</g>
<rect x="42" y="344" width="610" height="42" rx="10" fill="#ffe2dc" stroke="#b84b3b" stroke-width="2"/>
<text x="347" y="371" text-anchor="middle" font-size="17" font-weight="700">command sent ≠ screen state changed: read the next model</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB