This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1120" viewBox="0 0 900 1120" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Цикл совместимости потребителя и платформенного контракта</title>
|
||||
<desc id="desc">Вертикальный цикл связывает именованный контракт и потребителя через проверку семейства, поверхности, гарантии и escape hatch. Зелёная ветка передаёт только synthetic review hand-off, красные ветки возвращают конкретный статус stop в карточку inventory.</desc>
|
||||
<defs>
|
||||
<marker id="greenArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#246B5A"/>
|
||||
</marker>
|
||||
<marker id="redArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#B7443E"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="900" height="1120" fill="#F7FAFC"/>
|
||||
<rect x="34" y="28" width="832" height="96" rx="20" fill="#173B4D"/>
|
||||
<text x="70" y="73" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="34" font-weight="700">Consumer compatibility loop</text>
|
||||
<text x="70" y="103" fill="#C8E8E2" font-family="Arial, sans-serif" font-size="24">сначала сравнимость, потом compatible</text>
|
||||
|
||||
<rect x="108" y="162" width="500" height="110" rx="18" fill="#E9F0FF" stroke="#506FB5" stroke-width="3"/>
|
||||
<text x="142" y="207" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">1. Named contract</text>
|
||||
<text x="142" y="243" fill="#315366" font-family="Arial, sans-serif" font-size="25">family · version · surface · errors</text>
|
||||
<path d="M358 272 L358 314" stroke="#246B5A" stroke-width="5" marker-end="url(#greenArrow)"/>
|
||||
|
||||
<rect x="108" y="332" width="500" height="110" rx="18" fill="#FFFFFF" stroke="#6F8DA0" stroke-width="3"/>
|
||||
<text x="142" y="377" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">2. Named consumer</text>
|
||||
<text x="142" y="413" fill="#315366" font-family="Arial, sans-serif" font-size="25">family · supported version · required fields</text>
|
||||
<path d="M358 442 L358 484" stroke="#246B5A" stroke-width="5" marker-end="url(#greenArrow)"/>
|
||||
|
||||
<rect x="108" y="502" width="500" height="110" rx="18" fill="#FFF6DD" stroke="#A66E12" stroke-width="3"/>
|
||||
<text x="142" y="547" fill="#5B4210" font-family="Arial, sans-serif" font-size="30" font-weight="700">3. Compare family</text>
|
||||
<text x="142" y="583" fill="#5B4210" font-family="Arial, sans-serif" font-size="25">different family → stop before fields</text>
|
||||
<path d="M358 612 L358 654" stroke="#246B5A" stroke-width="5" marker-end="url(#greenArrow)"/>
|
||||
|
||||
<rect x="108" y="672" width="500" height="110" rx="18" fill="#FFFFFF" stroke="#6F8DA0" stroke-width="3"/>
|
||||
<text x="142" y="717" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">4. Check surface</text>
|
||||
<text x="142" y="753" fill="#315366" font-family="Arial, sans-serif" font-size="25">fields · guarantees · documented hatch</text>
|
||||
<path d="M358 782 L358 824" stroke="#246B5A" stroke-width="5" marker-end="url(#greenArrow)"/>
|
||||
|
||||
<rect x="108" y="842" width="500" height="110" rx="18" fill="#EAF4F1" stroke="#246B5A" stroke-width="3"/>
|
||||
<text x="142" y="887" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">5. Synthetic hand-off</text>
|
||||
<text x="142" y="923" fill="#315366" font-family="Arial, sans-serif" font-size="25">status + reasons + next action</text>
|
||||
|
||||
<rect x="640" y="495" width="210" height="202" rx="18" fill="#FFF0EE" stroke="#B7443E" stroke-width="3"/>
|
||||
<text x="667" y="539" fill="#8B2C27" font-family="Arial, sans-serif" font-size="25" font-weight="700">STOP card</text>
|
||||
<text x="667" y="581" fill="#8B2C27" font-family="Arial, sans-serif" font-size="22">incomparable</text>
|
||||
<text x="667" y="612" fill="#8B2C27" font-family="Arial, sans-serif" font-size="22">incompatible</text>
|
||||
<text x="667" y="643" fill="#8B2C27" font-family="Arial, sans-serif" font-size="22">implicit</text>
|
||||
<text x="667" y="674" fill="#8B2C27" font-family="Arial, sans-serif" font-size="22">undocumented</text>
|
||||
<path d="M608 557 L632 557" stroke="#B7443E" stroke-width="5" marker-end="url(#redArrow)"/>
|
||||
<path d="M745 697 L745 994 L358 994 L358 968" stroke="#B7443E" stroke-width="5" stroke-dasharray="11 10" fill="none" marker-end="url(#redArrow)"/>
|
||||
<text x="126" y="1029" fill="#8B2C27" font-family="Arial, sans-serif" font-size="24">return reason to inventory</text>
|
||||
<text x="126" y="1061" fill="#8B2C27" font-family="Arial, sans-serif" font-size="24">do not hide it in a version</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1180" viewBox="0 0 900 1180" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Контрактная поверхность платформенного API</title>
|
||||
<desc id="desc">Вертикальная схема показывает путь от сигнала потребителя к именованной операции, поверхности запроса и ответа, гарантии, документированному escape hatch и compatibility gate. Скрытый обход останавливается.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#246B5A"/>
|
||||
</marker>
|
||||
<marker id="stopArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#B7443E"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="900" height="1180" fill="#F7FAFC"/>
|
||||
<rect x="34" y="28" width="832" height="92" rx="20" fill="#173B4D"/>
|
||||
<text x="70" y="71" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="34" font-weight="700">Контрактная поверхность</text>
|
||||
<text x="70" y="101" fill="#C8E8E2" font-family="Arial, sans-serif" font-size="24">ожидание имеет имя, версию и предел</text>
|
||||
|
||||
<rect x="78" y="156" width="744" height="116" rx="18" fill="#EAF4F1" stroke="#246B5A" stroke-width="3"/>
|
||||
<text x="112" y="202" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">1. Сигнал consumer</text>
|
||||
<text x="112" y="238" fill="#315366" font-family="Arial, sans-serif" font-size="25">Нужен state? Нужен raw envelope? Назвать решение.</text>
|
||||
<path d="M450 272 L450 314" stroke="#246B5A" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="78" y="330" width="744" height="116" rx="18" fill="#FFF6DD" stroke="#A66E12" stroke-width="3"/>
|
||||
<text x="112" y="376" fill="#5B4210" font-family="Arial, sans-serif" font-size="30" font-weight="700">2. Public contract</text>
|
||||
<text x="112" y="412" fill="#5B4210" font-family="Arial, sans-serif" font-size="25">readFixedRecord · family read-v1 · version 1.3.0</text>
|
||||
<path d="M450 446 L450 488" stroke="#246B5A" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="52" y="508" width="246" height="154" rx="18" fill="#FFFFFF" stroke="#6F8DA0" stroke-width="3"/>
|
||||
<text x="78" y="555" fill="#173B4D" font-family="Arial, sans-serif" font-size="29" font-weight="700">Request</text>
|
||||
<text x="78" y="593" fill="#315366" font-family="Arial, sans-serif" font-size="25">required:</text>
|
||||
<text x="78" y="626" fill="#315366" font-family="Arial, sans-serif" font-size="25">recordId</text>
|
||||
|
||||
<rect x="327" y="508" width="246" height="154" rx="18" fill="#FFFFFF" stroke="#6F8DA0" stroke-width="3"/>
|
||||
<text x="353" y="555" fill="#173B4D" font-family="Arial, sans-serif" font-size="29" font-weight="700">Response</text>
|
||||
<text x="353" y="593" fill="#315366" font-family="Arial, sans-serif" font-size="25">required:</text>
|
||||
<text x="353" y="626" fill="#315366" font-family="Arial, sans-serif" font-size="25">id · state</text>
|
||||
|
||||
<rect x="602" y="508" width="246" height="154" rx="18" fill="#FFFFFF" stroke="#6F8DA0" stroke-width="3"/>
|
||||
<text x="628" y="555" fill="#173B4D" font-family="Arial, sans-serif" font-size="29" font-weight="700">Errors</text>
|
||||
<text x="628" y="593" fill="#315366" font-family="Arial, sans-serif" font-size="25">listed:</text>
|
||||
<text x="628" y="626" fill="#315366" font-family="Arial, sans-serif" font-size="25">fixed-not-found</text>
|
||||
<path d="M450 662 L450 704" stroke="#246B5A" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="78" y="722" width="744" height="108" rx="18" fill="#E9F0FF" stroke="#506FB5" stroke-width="3"/>
|
||||
<text x="112" y="766" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">3. Named guarantee</text>
|
||||
<text x="112" y="802" fill="#315366" font-family="Arial, sans-serif" font-size="25">state — fixed symbol; order and latency are not promised</text>
|
||||
<path d="M450 830 L450 872" stroke="#246B5A" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="78" y="890" width="744" height="126" rx="18" fill="#EAF4F1" stroke="#246B5A" stroke-width="3"/>
|
||||
<text x="112" y="936" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">4. Documented escape hatch</text>
|
||||
<text x="112" y="972" fill="#315366" font-family="Arial, sans-serif" font-size="25">raw-envelope-v1: one representation, no hidden promises</text>
|
||||
<path d="M450 1016 L450 1054" stroke="#246B5A" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="78" y="1062" width="744" height="88" rx="18" fill="#173B4D"/>
|
||||
<text x="112" y="1098" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="27" font-weight="700">5. Gate: family + version + fields</text>
|
||||
<text x="112" y="1130" fill="#C8E8E2" font-family="Arial, sans-serif" font-size="26">→ synthetic hand-off</text>
|
||||
|
||||
<path d="M78 214 L34 214 L34 913 L52 913" stroke="#B7443E" stroke-width="5" stroke-dasharray="11 10" fill="none" marker-end="url(#stopArrow)"/>
|
||||
<rect x="56" y="840" width="238" height="72" rx="14" fill="#FFF0EE" stroke="#B7443E" stroke-width="3"/>
|
||||
<text x="78" y="871" fill="#8B2C27" font-family="Arial, sans-serif" font-size="23" font-weight="700">secret flag</text>
|
||||
<text x="78" y="899" fill="#8B2C27" font-family="Arial, sans-serif" font-size="22">STOP: no boundary</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1060" viewBox="0 0 900 1060" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Матрица гарантии, исключения и совместимости</title>
|
||||
<desc id="desc">Двумерная матрица связывает явность гарантии и сопоставимость семейства consumer. Только верхняя правая зелёная клетка допускает ограниченный synthetic hand-off; остальные клетки останавливают review по конкретной причине.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto">
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#173B4D"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="900" height="1060" fill="#F7FAFC"/>
|
||||
<rect x="34" y="28" width="832" height="96" rx="20" fill="#173B4D"/>
|
||||
<text x="70" y="73" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="34" font-weight="700">Guarantee / exception matrix</text>
|
||||
<text x="70" y="103" fill="#C8E8E2" font-family="Arial, sans-serif" font-size="24">compatible — не ярлык поля, а проверка пары</text>
|
||||
|
||||
<text x="355" y="162" text-anchor="middle" fill="#315366" font-family="Arial, sans-serif" font-size="26" font-weight="700">Guarantee</text>
|
||||
<text x="355" y="194" text-anchor="middle" fill="#315366" font-family="Arial, sans-serif" font-size="26" font-weight="700">не записана</text>
|
||||
<text x="701" y="162" text-anchor="middle" fill="#315366" font-family="Arial, sans-serif" font-size="26" font-weight="700">Guarantee</text>
|
||||
<text x="701" y="194" text-anchor="middle" fill="#315366" font-family="Arial, sans-serif" font-size="26" font-weight="700">записана</text>
|
||||
<text x="46" y="346" fill="#315366" font-family="Arial, sans-serif" font-size="28" font-weight="700">family</text>
|
||||
<text x="46" y="380" fill="#315366" font-family="Arial, sans-serif" font-size="28" font-weight="700">не та</text>
|
||||
<text x="46" y="694" fill="#315366" font-family="Arial, sans-serif" font-size="28" font-weight="700">family</text>
|
||||
<text x="46" y="728" fill="#315366" font-family="Arial, sans-serif" font-size="28" font-weight="700">та же</text>
|
||||
|
||||
<rect x="202" y="222" width="306" height="270" rx="20" fill="#FFF0EE" stroke="#B7443E" stroke-width="3"/>
|
||||
<text x="232" y="276" fill="#8B2C27" font-family="Arial, sans-serif" font-size="30" font-weight="700">STOP</text>
|
||||
<text x="232" y="320" fill="#8B2C27" font-family="Arial, sans-serif" font-size="26">incomparable</text>
|
||||
<text x="232" y="354" fill="#8B2C27" font-family="Arial, sans-serif" font-size="26">consumer</text>
|
||||
<text x="232" y="414" fill="#8B2C27" font-family="Arial, sans-serif" font-size="23">Не сравнивать</text>
|
||||
<text x="232" y="446" fill="#8B2C27" font-family="Arial, sans-serif" font-size="23">похожие поля.</text>
|
||||
|
||||
<rect x="548" y="222" width="306" height="270" rx="20" fill="#FFF0EE" stroke="#B7443E" stroke-width="3"/>
|
||||
<text x="578" y="276" fill="#8B2C27" font-family="Arial, sans-serif" font-size="30" font-weight="700">STOP</text>
|
||||
<text x="578" y="320" fill="#8B2C27" font-family="Arial, sans-serif" font-size="26">incomparable</text>
|
||||
<text x="578" y="354" fill="#8B2C27" font-family="Arial, sans-serif" font-size="26">consumer</text>
|
||||
<text x="578" y="414" fill="#8B2C27" font-family="Arial, sans-serif" font-size="23">Family важнее</text>
|
||||
<text x="578" y="446" fill="#8B2C27" font-family="Arial, sans-serif" font-size="23">совпавшей версии.</text>
|
||||
|
||||
<rect x="202" y="560" width="306" height="270" rx="20" fill="#FFF6DD" stroke="#A66E12" stroke-width="3"/>
|
||||
<text x="232" y="614" fill="#5B4210" font-family="Arial, sans-serif" font-size="30" font-weight="700">STOP</text>
|
||||
<text x="232" y="658" fill="#5B4210" font-family="Arial, sans-serif" font-size="26">implicit</text>
|
||||
<text x="232" y="692" fill="#5B4210" font-family="Arial, sans-serif" font-size="26">guarantee</text>
|
||||
<text x="232" y="752" fill="#5B4210" font-family="Arial, sans-serif" font-size="23">Order, latency,</text>
|
||||
<text x="232" y="784" fill="#5B4210" font-family="Arial, sans-serif" font-size="23">future field — не факт.</text>
|
||||
|
||||
<rect x="548" y="560" width="306" height="270" rx="20" fill="#EAF4F1" stroke="#246B5A" stroke-width="3"/>
|
||||
<text x="578" y="614" fill="#173B4D" font-family="Arial, sans-serif" font-size="30" font-weight="700">CHECK</text>
|
||||
<text x="578" y="658" fill="#173B4D" font-family="Arial, sans-serif" font-size="26">surface +</text>
|
||||
<text x="578" y="692" fill="#173B4D" font-family="Arial, sans-serif" font-size="26">documented hatch</text>
|
||||
<text x="578" y="752" fill="#173B4D" font-family="Arial, sans-serif" font-size="23">Только затем:</text>
|
||||
<text x="578" y="784" fill="#173B4D" font-family="Arial, sans-serif" font-size="23">synthetic hand-off.</text>
|
||||
|
||||
<path d="M701 830 L701 904" stroke="#173B4D" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="170" y="920" width="700" height="82" rx="18" fill="#173B4D"/>
|
||||
<text x="205" y="956" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="28" font-weight="700">Escape hatch без name + boundary</text>
|
||||
<text x="205" y="986" fill="#C8E8E2" font-family="Arial, sans-serif" font-size="24">всегда STOP: undocumented-escape-hatch</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
Reference in New Issue
Block a user