67 lines
4.0 KiB
XML
67 lines
4.0 KiB
XML
<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>
|