revise February 2026 resilience articles
Build and deploy / deploy (push) Successful in 17s

This commit is contained in:
2026-07-31 18:59:19 +03:00
parent fd381cd2f5
commit 9812aa0c63
7 changed files with 804 additions and 1 deletions
@@ -0,0 +1,62 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="840" viewBox="0 0 1200 840" role="img" aria-labelledby="title desc">
<title id="title">Матрица fixed режимов деградации</title>
<desc id="desc">Таблица показывает четыре synthetic состояния: временный timeout, отсутствие необязательной части, неограниченный fan-out и исчерпанный бюджет. Для каждого состояния названы разрешённое действие, добавленная работа и граница.</desc>
<rect width="1200" height="840" fill="#f8fafc"/>
<rect x="34" y="28" width="1132" height="92" rx="18" fill="#102a43"/>
<text x="68" y="79" fill="#ffffff" font-family="Arial, sans-serif" font-size="38" font-weight="700">Матрица: исход не даёт право на новый маршрут</text>
<text x="68" y="105" fill="#cfe8ff" font-family="Arial, sans-serif" font-size="22">Все значения — fixed synthetic literals, а не данные о сервисе.</text>
<rect x="42" y="164" width="288" height="74" fill="#1f3b5b"/>
<rect x="330" y="164" width="330" height="74" fill="#1f3b5b"/>
<rect x="660" y="164" width="252" height="74" fill="#1f3b5b"/>
<rect x="912" y="164" width="246" height="74" fill="#1f3b5b"/>
<text x="186" y="210" text-anchor="middle" fill="#ffffff" font-family="Arial, sans-serif" font-size="28" font-weight="700">fixed symptom</text>
<text x="495" y="210" text-anchor="middle" fill="#ffffff" font-family="Arial, sans-serif" font-size="28" font-weight="700">permitted action</text>
<text x="786" y="210" text-anchor="middle" fill="#ffffff" font-family="Arial, sans-serif" font-size="28" font-weight="700">work added</text>
<text x="1035" y="210" text-anchor="middle" fill="#ffffff" font-family="Arial, sans-serif" font-size="28" font-weight="700">named boundary</text>
<rect x="42" y="238" width="1116" height="126" fill="#fff7d6" stroke="#d69e2e" stroke-width="2"/>
<text x="68" y="288" fill="#744210" font-family="Arial, sans-serif" font-size="28" font-weight="700">temporary timeout</text>
<text x="68" y="322" fill="#744210" font-family="Arial, sans-serif" font-size="23">one named injection</text>
<text x="356" y="288" fill="#5d4500" font-family="Arial, sans-serif" font-size="28">edge performs one retry</text>
<text x="356" y="322" fill="#5d4500" font-family="Arial, sans-serif" font-size="23">after a fixed backoff slot</text>
<text x="686" y="288" fill="#5d4500" font-family="Arial, sans-serif" font-size="28">+1 attempt</text>
<text x="686" y="322" fill="#5d4500" font-family="Arial, sans-serif" font-size="23">fan-out remains one</text>
<text x="938" y="288" fill="#5d4500" font-family="Arial, sans-serif" font-size="27">retry budget</text>
<text x="938" y="322" fill="#5d4500" font-family="Arial, sans-serif" font-size="23">max attempts: 2</text>
<rect x="42" y="364" width="1116" height="126" fill="#eef2ff" stroke="#6b6bdf" stroke-width="2"/>
<text x="68" y="414" fill="#3730a3" font-family="Arial, sans-serif" font-size="28" font-weight="700">optional part absent</text>
<text x="68" y="448" fill="#3730a3" font-family="Arial, sans-serif" font-size="23">fixed route outcome</text>
<text x="356" y="414" fill="#3730a3" font-family="Arial, sans-serif" font-size="28">named-summary output</text>
<text x="356" y="448" fill="#3730a3" font-family="Arial, sans-serif" font-size="23">no nested retry</text>
<text x="686" y="414" fill="#3730a3" font-family="Arial, sans-serif" font-size="28">+1 work unit</text>
<text x="686" y="448" fill="#3730a3" font-family="Arial, sans-serif" font-size="23">no new route search</text>
<text x="938" y="414" fill="#3730a3" font-family="Arial, sans-serif" font-size="27">named fallback</text>
<text x="938" y="448" fill="#3730a3" font-family="Arial, sans-serif" font-size="23">one fixed output</text>
<rect x="42" y="490" width="1116" height="126" fill="#fff1f0" stroke="#d84a3f" stroke-width="2"/>
<text x="68" y="540" fill="#7a271a" font-family="Arial, sans-serif" font-size="28" font-weight="700">fan-out is unbounded</text>
<text x="68" y="574" fill="#7a271a" font-family="Arial, sans-serif" font-size="23">any number is not a limit</text>
<text x="356" y="540" fill="#7a271a" font-family="Arial, sans-serif" font-size="28">stop review</text>
<text x="356" y="574" fill="#7a271a" font-family="Arial, sans-serif" font-size="23">set a finite integer bound</text>
<text x="686" y="540" fill="#7a271a" font-family="Arial, sans-serif" font-size="28">+0 accepted</text>
<text x="686" y="574" fill="#7a271a" font-family="Arial, sans-serif" font-size="23">expansion is refused</text>
<text x="938" y="540" fill="#7a271a" font-family="Arial, sans-serif" font-size="27">stop-unbounded</text>
<text x="938" y="574" fill="#7a271a" font-family="Arial, sans-serif" font-size="23">replication</text>
<rect x="42" y="616" width="1116" height="126" fill="#e7f8ef" stroke="#21865b" stroke-width="2"/>
<text x="68" y="666" fill="#135d3d" font-family="Arial, sans-serif" font-size="28" font-weight="700">budget exhausted</text>
<text x="68" y="700" fill="#135d3d" font-family="Arial, sans-serif" font-size="23">limit reads before expansion</text>
<text x="356" y="666" fill="#135d3d" font-family="Arial, sans-serif" font-size="28">return degraded result</text>
<text x="356" y="700" fill="#135d3d" font-family="Arial, sans-serif" font-size="23">do not choose another path</text>
<text x="686" y="666" fill="#135d3d" font-family="Arial, sans-serif" font-size="28">+0 attempts</text>
<text x="686" y="700" fill="#135d3d" font-family="Arial, sans-serif" font-size="23">cascade terminates</text>
<text x="938" y="666" fill="#135d3d" font-family="Arial, sans-serif" font-size="27">terminal action</text>
<text x="938" y="700" fill="#135d3d" font-family="Arial, sans-serif" font-size="23">fixed output only</text>
<line x1="330" y1="164" x2="330" y2="742" stroke="#9fb3c8" stroke-width="2"/>
<line x1="660" y1="164" x2="660" y2="742" stroke="#9fb3c8" stroke-width="2"/>
<line x1="912" y1="164" x2="912" y2="742" stroke="#9fb3c8" stroke-width="2"/>
<text x="42" y="796" fill="#486581" font-family="Arial, sans-serif" font-size="22">Matrix checks contracts of a fixed model, not availability, latency or capacity of a production system.</text>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

@@ -0,0 +1,56 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
<title id="title">Каскад fixed сценария и ранняя точка ограничения</title>
<desc id="desc">Схема показывает один логический запрос, временный timeout, единственного владельца retry, выбор одной реплики, именованный fallback и terminal action после исчерпания бюджета.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#355070"/>
</marker>
<marker id="stop-arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#b42318"/>
</marker>
</defs>
<rect width="1200" height="800" fill="#f8fafc"/>
<rect x="38" y="32" width="1124" height="84" rx="18" fill="#102a43"/>
<text x="72" y="82" fill="#ffffff" font-family="Arial, sans-serif" font-size="38" font-weight="700">Fixed каскад: limit стоит до расширения маршрута</text>
<text x="72" y="105" fill="#cfe8ff" font-family="Arial, sans-serif" font-size="22">Одна дополнительная попытка не превращается в новую волну retry, fallback и fan-out.</text>
<rect x="60" y="190" width="240" height="128" rx="16" fill="#e6f4ff" stroke="#2b6cb0" stroke-width="3"/>
<text x="180" y="236" text-anchor="middle" fill="#102a43" font-family="Arial, sans-serif" font-size="29" font-weight="700">logical request</text>
<text x="180" y="270" text-anchor="middle" fill="#334e68" font-family="Arial, sans-serif" font-size="24">fixed input</text>
<text x="180" y="300" text-anchor="middle" fill="#334e68" font-family="Arial, sans-serif" font-size="24">2 units of work</text>
<rect x="390" y="190" width="250" height="128" rx="16" fill="#fff1f0" stroke="#b42318" stroke-width="3"/>
<text x="515" y="236" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="29" font-weight="700">primary-a</text>
<text x="515" y="270" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">fixed timeout</text>
<text x="515" y="300" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">named injection</text>
<rect x="730" y="174" width="300" height="160" rx="16" fill="#fff7d6" stroke="#b7791f" stroke-width="4"/>
<text x="880" y="220" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="31" font-weight="700">limit point</text>
<text x="880" y="258" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">edge owns retry</text>
<text x="880" y="290" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">budget: 2 extra attempts</text>
<text x="880" y="318" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="22">before route expansion</text>
<rect x="850" y="470" width="280" height="128" rx="16" fill="#e7f8ef" stroke="#21865b" stroke-width="3"/>
<text x="990" y="516" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="29" font-weight="700">primary-b</text>
<text x="990" y="550" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="24">one selected replica</text>
<text x="990" y="580" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="24">fixed complete</text>
<rect x="410" y="470" width="290" height="128" rx="16" fill="#eef2ff" stroke="#5b5bd6" stroke-width="3"/>
<text x="555" y="516" text-anchor="middle" fill="#3730a3" font-family="Arial, sans-serif" font-size="29" font-weight="700">named-summary</text>
<text x="555" y="550" text-anchor="middle" fill="#3730a3" font-family="Arial, sans-serif" font-size="24">one work unit</text>
<text x="555" y="580" text-anchor="middle" fill="#3730a3" font-family="Arial, sans-serif" font-size="24">no nested retry</text>
<rect x="62" y="612" width="340" height="116" rx="16" fill="#fff1f0" stroke="#b42318" stroke-width="3"/>
<text x="232" y="657" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="29" font-weight="700">budget exhausted</text>
<text x="232" y="691" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">return fixed degraded result</text>
<path d="M300 254 H370" fill="none" stroke="#355070" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M640 254 H708" fill="none" stroke="#355070" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M880 334 V422 H990 V450" fill="none" stroke="#355070" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M760 334 V422 H555 V450" fill="none" stroke="#5b5bd6" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M730 280 C590 365, 270 420, 232 590" fill="none" stroke="#b42318" stroke-width="5" stroke-dasharray="13 10" marker-end="url(#stop-arrow)"/>
<text x="1005" y="392" text-anchor="middle" fill="#334e68" font-family="Arial, sans-serif" font-size="22">max fan-out: 1</text>
<text x="570" y="392" text-anchor="middle" fill="#4c3a9b" font-family="Arial, sans-serif" font-size="22">optional result unavailable</text>
<text x="390" y="640" fill="#7a271a" font-family="Arial, sans-serif" font-size="22">no new retry, no broad fan-out</text>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

@@ -0,0 +1,56 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
<title id="title">Контур review для fixed сценария устойчивости</title>
<desc id="desc">Последовательность начинается с именованного synthetic failure injection, проходит через trace и четыре проверки ограничений. Красные ветви останавливают review, зелёная ветвь передаёт карточку только на synthetic resilience review.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#355070"/>
</marker>
<marker id="red-arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#b42318"/>
</marker>
</defs>
<rect width="1200" height="800" fill="#f8fafc"/>
<rect x="38" y="30" width="1124" height="86" rx="18" fill="#102a43"/>
<text x="72" y="81" fill="#ffffff" font-family="Arial, sans-serif" font-size="38" font-weight="700">Контур review: сначала ограничить работу</text>
<text x="72" y="106" fill="#cfe8ff" font-family="Arial, sans-serif" font-size="22">Зелёный выход — synthetic hand-off; красный — stop без нового маршрута.</text>
<circle cx="160" cy="314" r="100" fill="#fff1f0" stroke="#b42318" stroke-width="4"/>
<text x="160" y="292" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="28" font-weight="700">1. named</text>
<text x="160" y="326" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="27">failure</text>
<text x="160" y="358" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="27">injection</text>
<circle cx="405" cy="314" r="100" fill="#e6f4ff" stroke="#2b6cb0" stroke-width="4"/>
<text x="405" y="292" text-anchor="middle" fill="#102a43" font-family="Arial, sans-serif" font-size="28" font-weight="700">2. read</text>
<text x="405" y="326" text-anchor="middle" fill="#102a43" font-family="Arial, sans-serif" font-size="27">fixed</text>
<text x="405" y="358" text-anchor="middle" fill="#102a43" font-family="Arial, sans-serif" font-size="27">trace</text>
<circle cx="650" cy="314" r="100" fill="#fff7d6" stroke="#b7791f" stroke-width="4"/>
<text x="650" y="276" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="27" font-weight="700">3. check</text>
<text x="650" y="310" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">retry owner</text>
<text x="650" y="342" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">fan-out</text>
<text x="650" y="374" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">fallback name</text>
<circle cx="895" cy="314" r="100" fill="#e7f8ef" stroke="#21865b" stroke-width="4"/>
<text x="895" y="276" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="27" font-weight="700">4. check</text>
<text x="895" y="310" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="25">limit point</text>
<text x="895" y="342" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="25">comparison key</text>
<text x="895" y="374" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="25">terminal action</text>
<path d="M260 314 H285" fill="none" stroke="#355070" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M505 314 H530" fill="none" stroke="#355070" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M750 314 H775" fill="none" stroke="#355070" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="842" y="536" width="316" height="122" rx="18" fill="#135d3d"/>
<text x="1000" y="580" text-anchor="middle" fill="#ffffff" font-family="Arial, sans-serif" font-size="29" font-weight="700">synthetic review</text>
<text x="1000" y="616" text-anchor="middle" fill="#d4f5df" font-family="Arial, sans-serif" font-size="24">human hand-off only</text>
<path d="M895 414 V516" fill="none" stroke="#21865b" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="48" y="534" width="496" height="126" rx="18" fill="#fff1f0" stroke="#b42318" stroke-width="4"/>
<text x="296" y="578" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="30" font-weight="700">stop and repair record</text>
<text x="296" y="614" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">two retry owners, unnamed fallback,</text>
<text x="296" y="642" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">wide fan-out or mismatch</text>
<path d="M650 414 C620 492, 535 530, 550 568" fill="none" stroke="#b42318" stroke-width="6" stroke-dasharray="14 10" marker-end="url(#red-arrow)"/>
<path d="M895 414 C830 485, 610 516, 544 584" fill="none" stroke="#b42318" stroke-width="6" stroke-dasharray="14 10" marker-end="url(#red-arrow)"/>
<text x="58" y="726" fill="#486581" font-family="Arial, sans-serif" font-size="24">No network, service, clock, telemetry or production claim exists inside this loop.</text>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB