Files
progcode/web/public/assets/editorial/2025/engineering-automation-2025-preview-approval-rollback.svg
T
huncode fa6d1c3eac
Build and deploy / deploy (push) Successful in 15s
revise May 2025 engineering automation articles
2026-07-31 17:48:51 +03:00

68 lines
4.9 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 375 940" role="img" aria-labelledby="title desc">
<title id="title">Цепочка защиты массовой инженерной операции</title>
<desc id="desc">Вертикальный маршрут: preview, ограниченный scope, authority, approval, simulated execute, audit trail, verification и красная ветка безопасной остановки с отдельным rollback plan.</desc>
<rect width="375" height="940" fill="#0b1220"/>
<text x="24" y="32" fill="#f8fafc" font-family="Arial, sans-serif" font-size="18" font-weight="700">Один change — семь разных доказательств</text>
<text x="24" y="54" fill="#a5b4fc" font-family="Arial, sans-serif" font-size="12">Каждый переход имеет свой contract и stop path</text>
<g font-family="Arial, sans-serif">
<g>
<rect x="24" y="80" width="327" height="74" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="108" fill="#dbeafe" font-size="15" font-weight="700">1 · PREVIEW / DRY-RUN</text>
<text x="42" y="130" fill="#bfdbfe" font-size="12">proposal, selector, targets, digest</text>
<text x="42" y="146" fill="#bfdbfe" font-size="12">не равен будущему execution</text>
</g>
<path d="M187 154v20" stroke="#60a5fa" stroke-width="2"/>
<path d="M182 169l5 6 5-6" fill="none" stroke="#60a5fa" stroke-width="2"/>
<g>
<rect x="24" y="182" width="327" height="68" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="209" fill="#dbeafe" font-size="15" font-weight="700">2 · BOUNDED SCOPE</text>
<text x="42" y="231" fill="#bfdbfe" font-size="12">allowed selector + max target count</text>
</g>
<path d="M187 250v20" stroke="#60a5fa" stroke-width="2"/>
<path d="M182 265l5 6 5-6" fill="none" stroke="#60a5fa" stroke-width="2"/>
<g>
<rect x="24" y="278" width="327" height="68" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="305" fill="#dbeafe" font-size="15" font-weight="700">3 · AUTHORITY</text>
<text x="42" y="327" fill="#bfdbfe" font-size="12">level и scope limit, не оценка смысла</text>
</g>
<path d="M187 346v20" stroke="#60a5fa" stroke-width="2"/>
<path d="M182 361l5 6 5-6" fill="none" stroke="#60a5fa" stroke-width="2"/>
<g>
<rect x="24" y="374" width="327" height="68" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="401" fill="#dbeafe" font-size="15" font-weight="700">4 · APPROVAL</text>
<text x="42" y="423" fill="#bfdbfe" font-size="12">binds preview digest, target digest, authority</text>
</g>
<path d="M187 442v20" stroke="#34d399" stroke-width="2"/>
<path d="M182 457l5 6 5-6" fill="none" stroke="#34d399" stroke-width="2"/>
<g>
<rect x="24" y="470" width="327" height="68" rx="12" fill="#123524" stroke="#34d399"/>
<text x="42" y="497" fill="#d1fae5" font-size="15" font-weight="700">5 · EXECUTE</text>
<text x="42" y="519" fill="#a7f3d0" font-size="12">re-check preconditions before any write</text>
</g>
<path d="M187 538v20" stroke="#34d399" stroke-width="2"/>
<path d="M182 553l5 6 5-6" fill="none" stroke="#34d399" stroke-width="2"/>
<g>
<rect x="24" y="566" width="327" height="68" rx="12" fill="#123524" stroke="#34d399"/>
<text x="42" y="593" fill="#d1fae5" font-size="15" font-weight="700">6 · AUDIT TRAIL</text>
<text x="42" y="615" fill="#a7f3d0" font-size="12">event и links; не observed state</text>
</g>
<path d="M187 634v20" stroke="#fbbf24" stroke-width="2"/>
<path d="M182 649l5 6 5-6" fill="none" stroke="#fbbf24" stroke-width="2"/>
<g>
<rect x="24" y="662" width="327" height="68" rx="12" fill="#3b2f0b" stroke="#fbbf24"/>
<text x="42" y="689" fill="#fef3c7" font-size="15" font-weight="700">7 · VERIFICATION</text>
<text x="42" y="711" fill="#fde68a" font-size="12">independent reader: expected vs observed</text>
</g>
<path d="M187 730v20" stroke="#fb7185" stroke-width="2"/>
<path d="M182 745l5 6 5-6" fill="none" stroke="#fb7185" stroke-width="2"/>
<g>
<rect x="24" y="758" width="327" height="128" rx="12" fill="#4c1020" stroke="#fb7185" stroke-width="2"/>
<text x="42" y="788" fill="#ffe4e6" font-size="16" font-weight="700">STOP → NEW ROLLBACK PLAN</text>
<text x="42" y="813" fill="#fecdd3" font-size="12">mismatch / unknown / stale evidence</text>
<text x="42" y="833" fill="#fecdd3" font-size="12">new scope → new authority → new preview</text>
<text x="42" y="853" fill="#fecdd3" font-size="12">rollback plan ≠ permission to execute it</text>
</g>
</g>
<text x="24" y="918" fill="#94a3b8" font-family="Arial, sans-serif" font-size="11">Один барьер не снимает весь риск: он защищает свой переход.</text>
</svg>