70 lines
4.7 KiB
XML
70 lines
4.7 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 840 1040" role="img" aria-labelledby="title desc">
|
||
<title id="title">Маршрут решения при неполной цепочке поставки</title>
|
||
<desc id="desc">Дерево решения для учебного выпуска: сравнить deploy input с digest, digest с subject declaration, отдельно определить verification и границу секрета. При каждом отсутствующем факте статус остаётся manual review, а не подтверждённое provenance.</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="#355d8b"/>
|
||
</marker>
|
||
<style>
|
||
.bg { fill: #f6f8fb; }
|
||
.title { font: 700 34px system-ui, sans-serif; fill: #162235; }
|
||
.subtitle { font: 400 21px system-ui, sans-serif; fill: #52667f; }
|
||
.label { font: 700 24px system-ui, sans-serif; fill: #1c3049; }
|
||
.body { font: 400 21px system-ui, sans-serif; fill: #405a79; }
|
||
.small { font: 400 18px system-ui, sans-serif; fill: #65768b; }
|
||
.box { fill: #ffffff; stroke: #b9c9de; stroke-width: 2; }
|
||
.decision { fill: #eaf3ff; stroke: #5087c7; stroke-width: 2; }
|
||
.review { fill: #fff0f0; stroke: #c86060; stroke-width: 2; }
|
||
.next { fill: #edf8f1; stroke: #5d9b76; stroke-width: 2; }
|
||
.arrow { stroke: #355d8b; stroke-width: 4; fill: none; marker-end: url(#arrow); }
|
||
.no { font: 700 19px system-ui, sans-serif; fill: #a13f3f; }
|
||
.yes { font: 700 19px system-ui, sans-serif; fill: #347150; }
|
||
</style>
|
||
</defs>
|
||
<rect class="bg" width="840" height="1040" rx="28"/>
|
||
<text class="title" x="54" y="66">Deploy виден: как не придумать provenance</text>
|
||
<text class="subtitle" x="54" y="102">Каждый ответ «нет» — остановка вывода и новый вопрос evidence.</text>
|
||
|
||
<rect class="box" x="60" y="142" width="720" height="92" rx="18"/>
|
||
<text class="label" x="90" y="180">Старт: есть только deploy event</text>
|
||
<text class="body" x="90" y="212">Не считать его доказательством source или artifact.</text>
|
||
<path class="arrow" d="M285 234 L285 258"/>
|
||
|
||
<rect class="decision" x="60" y="260" width="450" height="104" rx="18"/>
|
||
<text class="label" x="88" y="302">Deploy input = digest?</text>
|
||
<text class="small" x="88" y="334">Нужен общий ключ сопоставления.</text>
|
||
<path class="arrow" d="M510 312 L540 312"/>
|
||
<text class="no" x="518" y="298">нет</text>
|
||
<rect class="review" x="550" y="260" width="230" height="104" rx="18"/>
|
||
<text class="label" x="574" y="300">Manual review</text>
|
||
<text class="body" x="574" y="330">Найти deploy input.</text>
|
||
<path class="arrow" d="M285 364 L285 408"/>
|
||
<text class="yes" x="300" y="394">да</text>
|
||
|
||
<rect class="decision" x="60" y="410" width="450" height="104" rx="18"/>
|
||
<text class="label" x="88" y="452">Subject = digest?</text>
|
||
<text class="small" x="88" y="484">Declaration не заменяет сравнение.</text>
|
||
<path class="arrow" d="M510 462 L540 462"/>
|
||
<text class="no" x="518" y="448">нет</text>
|
||
<rect class="review" x="550" y="410" width="230" height="104" rx="18"/>
|
||
<text class="label" x="574" y="450">Manual review</text>
|
||
<text class="body" x="574" y="480">Не использовать statement.</text>
|
||
<path class="arrow" d="M285 514 L285 562"/>
|
||
<text class="yes" x="300" y="548">да</text>
|
||
|
||
<rect class="next" x="60" y="564" width="720" height="180" rx="18"/>
|
||
<text class="label" x="90" y="608">Следующий технический шаг</text>
|
||
<text class="body" x="90" y="644">Отдельно определить verification identity и claims.</text>
|
||
<text class="body" x="90" y="678">Отдельно проверить secret boundary без значения секрета.</text>
|
||
<text class="small" x="90" y="716">Только затем обсуждать provenance и решение о release.</text>
|
||
|
||
<path class="arrow" d="M420 744 L420 780"/>
|
||
<rect class="review" x="60" y="782" width="720" height="96" rx="18"/>
|
||
<text class="label" x="90" y="822">До проверки: provenance not-verified</text>
|
||
<text class="body" x="90" y="854">Release остаётся manual-review-required, а не подтверждённым.</text>
|
||
|
||
<rect class="box" x="60" y="910" width="720" height="82" rx="18"/>
|
||
<text class="label" x="90" y="946">Остановка вывода безопаснее</text>
|
||
<text class="body" x="90" y="974">выдуманного подтверждения.</text>
|
||
</svg>
|