Files
progcode/web/public/assets/editorial/2026/data-contracts-2026-contract-evolution.svg
T
huncode ec4cfbbd60
Build and deploy / deploy (push) Successful in 14s
revise March 2026 data contract articles
2026-07-31 19:01:51 +03:00

67 lines
4.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 720" role="img" aria-labelledby="title desc">
<title id="title">Эволюция fixed контракта данных через compatibility gate</title>
<desc id="desc">Слева baseline schema версии 1.0, справа candidate schema версии 1.1 с полем priority. Между ними gate проверяет direction, manifest и consumer. Скрытое поле routingHint ведёт к отдельному stop.</desc>
<defs>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
<path d="M0,0 L10,5 L0,10 z" fill="#24415d"/>
</marker>
<marker id="stopArrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
<path d="M0,0 L10,5 L0,10 z" fill="#b23a48"/>
</marker>
<style>
.bg { fill: #f6f8fb; }
.card { fill: #ffffff; stroke: #24415d; stroke-width: 3; }
.gate { fill: #e7f3ef; stroke: #237a57; stroke-width: 3; }
.stop { fill: #fdecee; stroke: #b23a48; stroke-width: 3; }
.line { stroke: #24415d; stroke-width: 4; fill: none; marker-end: url(#arrow); }
.stop-line { stroke: #b23a48; stroke-width: 4; fill: none; marker-end: url(#stopArrow); }
.title { font: 700 34px Arial, sans-serif; fill: #18324a; }
.label { font: 700 24px Arial, sans-serif; fill: #18324a; }
.text { font: 20px Arial, sans-serif; fill: #294860; }
.small { font: 18px Arial, sans-serif; fill: #294860; }
.good { font: 700 19px Arial, sans-serif; fill: #126244; }
.bad { font: 700 18px Arial, sans-serif; fill: #8d2632; }
.mono { font: 18px "Courier New", monospace; fill: #18324a; }
</style>
</defs>
<rect class="bg" width="960" height="720" rx="28"/>
<text class="title" x="64" y="68">Изменение схемы — это пара reader и writer</text>
<rect class="card" x="56" y="128" width="232" height="360" rx="20"/>
<text class="label" x="82" y="172">baseline v1.0</text>
<text class="small" x="82" y="206">fixed-work-item</text>
<line x1="82" y1="226" x2="260" y2="226" stroke="#b9cad8" stroke-width="2"/>
<text class="mono" x="82" y="268">id: string *</text>
<text class="mono" x="82" y="310">state: string *</text>
<text class="mono" x="82" y="352">note: string</text>
<text class="small" x="82" y="420">* required surface</text>
<text class="small" x="82" y="452">reader knows this</text>
<path class="line" d="M290 308 C322 308 332 308 356 308"/>
<rect class="gate" x="362" y="150" width="246" height="320" rx="20"/>
<text class="label" x="392" y="194">compatibility gate</text>
<line x1="392" y1="214" x2="578" y2="214" stroke="#91c9af" stroke-width="2"/>
<text class="good" x="392" y="252">1. direction named</text>
<text class="good" x="392" y="292">2. required stays</text>
<text class="good" x="392" y="332">3. manifest matches</text>
<text class="good" x="392" y="372">4. consumer accepts</text>
<text class="small" x="392" y="426">output: review hand-off</text>
<path class="line" d="M610 308 C642 308 654 308 680 308"/>
<rect class="card" x="686" y="128" width="220" height="360" rx="20"/>
<text class="label" x="712" y="172">candidate v1.1</text>
<text class="small" x="712" y="206">fixed-work-item</text>
<line x1="712" y1="226" x2="878" y2="226" stroke="#b9cad8" stroke-width="2"/>
<text class="mono" x="712" y="268">id: string *</text>
<text class="mono" x="712" y="310">state: string *</text>
<text class="mono" x="712" y="352">note: string</text>
<text class="mono" x="712" y="394">priority: integer</text>
<text class="good" x="712" y="448">declared addition</text>
<path class="stop-line" d="M796 492 C796 536 754 550 704 550 L610 550"/>
<rect class="stop" x="274" y="530" width="330" height="126" rx="18"/>
<text class="bad" x="302" y="574">routingHint вне manifest</text>
<text class="bad" x="302" y="610">stop-undocumented-schema-field</text>
<text class="small" x="302" y="638">сначала назвать или убрать поле</text>
</svg>