revise August 2021 storage contract articles
Build and deploy / deploy (push) Successful in 16s

This commit is contained in:
2026-07-31 13:02:44 +03:00
parent 2a30c8816c
commit 35769c4149
7 changed files with 953 additions and 1 deletions
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1280" viewBox="0 0 1200 1280" role="img" aria-labelledby="title desc">
<title id="title">Безопасная эволюция контракта profile.settings</title>
<desc id="desc">Вертикальная последовательность: зафиксировать version one и samples, добавить reader version two с различением absent и null, затем добавить writer version two с optional timezone и проверить матрицу. Внизу показан запрет на narrowing старых значений и смену семантики.</desc>
<rect width="1200" height="1280" fill="#0c1424"/>
<rect x="48" y="44" width="1104" height="112" rx="24" fill="#162946" stroke="#8ec5ff" stroke-width="3"/>
<text x="92" y="98" font-family="Arial, sans-serif" font-size="42" font-weight="700" fill="#ffffff">Эволюция договора: reader раньше writer</text>
<text x="92" y="132" font-family="Arial, sans-serif" font-size="25" fill="#bed3ed">Каждый шаг имеет sample и проверяемый verdict</text>
<line x1="600" y1="226" x2="600" y2="1020" stroke="#7899bf" stroke-width="10" stroke-linecap="round"/>
<circle cx="600" cy="260" r="31" fill="#71b9ff"/>
<rect x="112" y="198" width="420" height="150" rx="20" fill="#1b3557" stroke="#71b9ff" stroke-width="3"/>
<text x="144" y="252" font-family="Arial, sans-serif" font-size="31" font-weight="700" fill="#ffffff">1. Зафиксировать v1</text>
<text x="144" y="292" font-family="Arial, sans-serif" font-size="24" fill="#d7e9ff">core-поля, samples, owner, daily</text>
<text x="144" y="325" font-family="Arial, sans-serif" font-size="22" fill="#aac9e8">не менять meaning задним числом</text>
<circle cx="600" cy="468" r="31" fill="#77e2bd"/>
<rect x="668" y="404" width="420" height="154" rx="20" fill="#19443d" stroke="#77e2bd" stroke-width="3"/>
<text x="700" y="458" font-family="Arial, sans-serif" font-size="31" font-weight="700" fill="#ffffff">2. Добавить reader v2</text>
<text x="700" y="498" font-family="Arial, sans-serif" font-size="24" fill="#dbfff2">v1 → timezone: absent</text>
<text x="700" y="531" font-family="Arial, sans-serif" font-size="22" fill="#aee8d4">null остаётся explicit clear</text>
<circle cx="600" cy="680" r="31" fill="#77e2bd"/>
<rect x="112" y="616" width="420" height="154" rx="20" fill="#19443d" stroke="#77e2bd" stroke-width="3"/>
<text x="144" y="670" font-family="Arial, sans-serif" font-size="31" font-weight="700" fill="#ffffff">3. Добавить writer v2</text>
<text x="144" y="710" font-family="Arial, sans-serif" font-size="24" fill="#dbfff2">+ optional timezone</text>
<text x="144" y="743" font-family="Arial, sans-serif" font-size="22" fill="#aee8d4">старый core и meaning сохранены</text>
<circle cx="600" cy="892" r="31" fill="#f5c768"/>
<rect x="668" y="828" width="420" height="154" rx="20" fill="#4b3b21" stroke="#f5c768" stroke-width="3"/>
<text x="700" y="882" font-family="Arial, sans-serif" font-size="31" font-weight="700" fill="#ffffff">4. Проверить matrix</text>
<text x="700" y="922" font-family="Arial, sans-serif" font-size="24" fill="#fff0bf">v1→v1, v1→v2, v2→v1, v2→v2</text>
<text x="700" y="955" font-family="Arial, sans-serif" font-size="22" fill="#f6d982">negative case: reject</text>
<path d="M600 300 V428" stroke="#71b9ff" stroke-width="7" fill="none" marker-end="url(#arrow)"/>
<path d="M600 508 V640" stroke="#77e2bd" stroke-width="7" fill="none" marker-end="url(#arrow)"/>
<path d="M600 720 V852" stroke="#f5c768" stroke-width="7" fill="none" marker-end="url(#arrow)"/>
<rect x="70" y="1070" width="1060" height="150" rx="24" fill="#3a2431" stroke="#ff91a8" stroke-width="3"/>
<text x="108" y="1128" font-family="Arial, sans-serif" font-size="31" font-weight="700" fill="#fff5f7">Стоп до rollout</text>
<text x="350" y="1128" font-family="Arial, sans-serif" font-size="27" fill="#ffe0e6">narrowing · required вместо optional</text>
<text x="108" y="1176" font-family="Arial, sans-serif" font-size="24" fill="#ffbecb">Новый смысл старого key: сначала transition и owner decision.</text>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0,0 L12,6 L0,12 z" fill="#b9d4f3"/></marker>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB