Files
progcode/web/public/assets/editorial/2024/feature-flags-2024-decision-tree.svg
huncode 04dbb60f16
Build and deploy / deploy (push) Successful in 18s
revise August 2024 feature flag articles
2026-07-31 16:27:37 +03:00

53 lines
5.4 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1060" role="img" aria-labelledby="title desc">
<title id="title">Дерево решения для release feature flag</title>
<desc id="desc">Схема показывает, что до создания release-флага нужно заполнить карточку контракта. Без карточки работа уходит на review. После карточки отдельно выбираются server-side protected decision, client-side presentation и cleanup path.</desc>
<defs>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L10,5 L0,10 Z" fill="#74d5c0"/>
</marker>
</defs>
<rect width="720" height="1060" rx="28" fill="#0f1d2e"/>
<rect x="28" y="26" width="664" height="112" rx="20" fill="#16334b" stroke="#3f6680"/>
<text x="58" y="72" fill="#f5fbff" font-family="Arial, sans-serif" font-size="28" font-weight="700">Фича-флаг — контракт выпуска</text>
<text x="58" y="105" fill="#b8cedd" font-family="Arial, sans-serif" font-size="18">Сначала граница решения и removal path, потом boolean.</text>
<rect x="72" y="174" width="576" height="88" rx="18" fill="#4b2932" stroke="#e08091" stroke-width="2"/>
<text x="102" y="211" fill="#ffe9ed" font-family="Arial, sans-serif" font-size="22" font-weight="700">Симптом</text>
<text x="102" y="239" fill="#f7c6cf" font-family="Arial, sans-serif" font-size="18">Временный switch создан без срока и владельца.</text>
<path d="M360 262 L360 304" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
<rect x="152" y="316" width="416" height="94" rx="18" fill="#174760" stroke="#74d5c0" stroke-width="2"/>
<text x="182" y="354" fill="#eafff9" font-family="Arial, sans-serif" font-size="23" font-weight="700">Есть карточка контракта?</text>
<text x="182" y="383" fill="#b5e6da" font-family="Arial, sans-serif" font-size="17">owner · audience · fallback · expiry · delete</text>
<path d="M152 364 L96 364 L96 468" fill="none" stroke="#e9b45f" stroke-width="3" marker-end="url(#arrow)"/>
<text x="105" y="347" fill="#f4c979" font-family="Arial, sans-serif" font-size="17" font-weight="700">нет</text>
<rect x="42" y="480" width="212" height="130" rx="18" fill="#513f25" stroke="#e9b45f" stroke-width="2"/>
<text x="66" y="520" fill="#fff1cf" font-family="Arial, sans-serif" font-size="21" font-weight="700">Review, не флаг</text>
<text x="66" y="551" fill="#f2d5a1" font-family="Arial, sans-serif" font-size="16">Назначить owner,</text>
<text x="66" y="575" fill="#f2d5a1" font-family="Arial, sans-serif" font-size="16">описать fallback и</text>
<text x="66" y="599" fill="#f2d5a1" font-family="Arial, sans-serif" font-size="16">дату removal review.</text>
<path d="M568 364 L624 364 L624 468" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
<text x="571" y="347" fill="#9ee9d8" font-family="Arial, sans-serif" font-size="17" font-weight="700">да</text>
<rect x="466" y="480" width="212" height="130" rx="18" fill="#1d4a44" stroke="#74d5c0" stroke-width="2"/>
<text x="490" y="520" fill="#e7fff7" font-family="Arial, sans-serif" font-size="20" font-weight="700">Граница решения</text>
<text x="490" y="551" fill="#b9eadc" font-family="Arial, sans-serif" font-size="16">protected input?</text>
<text x="490" y="575" fill="#b9eadc" font-family="Arial, sans-serif" font-size="16">server decision</text>
<text x="490" y="599" fill="#b9eadc" font-family="Arial, sans-serif" font-size="16">presentation → client</text>
<path d="M572 610 L572 662" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
<rect x="112" y="676" width="496" height="150" rx="18" fill="#16334b" stroke="#3f6680" stroke-width="2"/>
<text x="142" y="718" fill="#f5fbff" font-family="Arial, sans-serif" font-size="22" font-weight="700">Наблюдение — отдельная обязанность</text>
<text x="142" y="750" fill="#c2d9e8" font-family="Arial, sans-serif" font-size="17">version ответа · outcome · render error · fallback path</text>
<text x="142" y="780" fill="#c2d9e8" font-family="Arial, sans-serif" font-size="17">Не превращать provider event в доказательство exposure.</text>
<text x="142" y="808" fill="#86acc2" font-family="Arial, sans-serif" font-size="15">Сигналы выбирает команда; схема не измеряет production.</text>
<path d="M360 826 L360 878" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
<rect x="72" y="892" width="576" height="136" rx="18" fill="#24415c" stroke="#a6d6ff" stroke-width="2"/>
<text x="102" y="934" fill="#eff9ff" font-family="Arial, sans-serif" font-size="22" font-weight="700">Cleanup path записан до enable</text>
<text x="102" y="964" fill="#c4e7ff" font-family="Arial, sans-serif" font-size="17">freeze final variant → remove branches</text>
<text x="102" y="989" fill="#c4e7ff" font-family="Arial, sans-serif" font-size="17">remove config → keep behaviour test</text>
<text x="102" y="1014" fill="#91bbd7" font-family="Arial, sans-serif" font-size="15">Disable уменьшает риск; только cleanup удаляет зависимость.</text>
</svg>