revise May 2025 engineering automation articles
Build and deploy / deploy (push) Successful in 15s

This commit is contained in:
2026-07-31 17:48:51 +03:00
parent 4930c69d90
commit fa6d1c3eac
7 changed files with 1255 additions and 1 deletions
@@ -0,0 +1,47 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 375 720" role="img" aria-labelledby="title desc">
<title id="title">Матрица authority и границ автоматизации</title>
<desc id="desc">Таблица показывает, что authority level допускает ограниченный selector и число targets, но не заменяет preview, approval binding, audit trail и verification.</desc>
<rect width="375" height="720" fill="#0b1220"/>
<text x="20" y="34" fill="#f8fafc" font-family="Arial, sans-serif" font-size="18" font-weight="700">Authority ограничивает scope</text>
<text x="20" y="55" fill="#a5b4fc" font-family="Arial, sans-serif" font-size="12">Она не делает change верным и не заменяет verification</text>
<g font-family="Arial, sans-serif" font-size="11">
<rect x="20" y="82" width="335" height="46" rx="8" fill="#1e293b"/>
<text x="32" y="104" fill="#cbd5e1" font-weight="700">Проверка</text>
<text x="172" y="104" fill="#cbd5e1" font-weight="700">Разрешает?</text>
<text x="264" y="104" fill="#cbd5e1" font-weight="700">Не доказывает</text>
<rect x="20" y="128" width="335" height="94" fill="#172554" stroke="#334155"/>
<text x="32" y="153" fill="#dbeafe" font-weight="700">selector + max targets</text>
<text x="32" y="174" fill="#bfdbfe">bounded A+B</text>
<text x="172" y="164" fill="#86efac">ДА</text>
<text x="264" y="153" fill="#bfdbfe">смысл change</text>
<text x="264" y="174" fill="#bfdbfe">observed result</text>
<rect x="20" y="222" width="335" height="94" fill="#3b2f0b" stroke="#334155"/>
<text x="32" y="247" fill="#fef3c7" font-weight="700">selector + 3 targets</text>
<text x="32" y="268" fill="#fde68a">limit = 2</text>
<text x="172" y="258" fill="#fda4af">STOP</text>
<text x="264" y="247" fill="#fde68a">нужно новое</text>
<text x="264" y="268" fill="#fde68a">authority решение</text>
<rect x="20" y="316" width="335" height="94" fill="#4c1020" stroke="#334155"/>
<text x="32" y="341" fill="#ffe4e6" font-weight="700">approval digest ≠ preview</text>
<text x="32" y="362" fill="#fecdd3">targets A+C вместо A+B</text>
<text x="172" y="352" fill="#fda4af">STOP</text>
<text x="264" y="341" fill="#fecdd3">review нельзя</text>
<text x="264" y="362" fill="#fecdd3">переносить</text>
<rect x="20" y="410" width="335" height="94" fill="#123524" stroke="#334155"/>
<text x="32" y="435" fill="#d1fae5" font-weight="700">bound preview + approval</text>
<text x="32" y="456" fill="#a7f3d0">preconditions re-checked</text>
<text x="172" y="446" fill="#86efac">EXECUTE</text>
<text x="264" y="435" fill="#a7f3d0">не равен</text>
<text x="264" y="456" fill="#a7f3d0">verified state</text>
<rect x="20" y="504" width="335" height="94" fill="#1e293b" stroke="#334155"/>
<text x="32" y="529" fill="#e2e8f0" font-weight="700">audit event exists</text>
<text x="32" y="550" fill="#cbd5e1">links preserved</text>
<text x="172" y="540" fill="#fbbf24">TRACE</text>
<text x="264" y="529" fill="#cbd5e1">observed state</text>
<text x="264" y="550" fill="#cbd5e1">на target</text>
</g>
<rect x="20" y="624" width="335" height="62" rx="10" fill="#4c1020" stroke="#fb7185"/>
<text x="34" y="649" fill="#ffe4e6" font-family="Arial, sans-serif" font-size="13" font-weight="700">Правило fail-closed</text>
<text x="34" y="670" fill="#fecdd3" font-family="Arial, sans-serif" font-size="12">unknown / mismatch / limit → no execute</text>
<text x="20" y="708" fill="#94a3b8" font-family="Arial, sans-serif" font-size="10">Authority — gate scope, а не универсальная гарантия.</text>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,60 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 375 860" role="img" aria-labelledby="title desc">
<title id="title">Петля evidence для инженерной автоматизации</title>
<desc id="desc">Вертикальная петля показывает, как preview и dry-run создают evidence, authority и approval проверяют scope, execute и audit trail фиксируют попытку, а verification наблюдает target. Красная ветка создаёт только rollback plan.</desc>
<rect width="375" height="860" fill="#0b1220"/>
<text x="22" y="33" fill="#f8fafc" font-family="Arial, sans-serif" font-size="18" font-weight="700">Evidence loop, а не «зелёный job»</text>
<text x="22" y="54" fill="#a5b4fc" font-family="Arial, sans-serif" font-size="12">Каждая карточка отвечает на другой вопрос</text>
<g font-family="Arial, sans-serif">
<g>
<rect x="24" y="82" width="327" height="78" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="110" fill="#dbeafe" font-size="15" font-weight="700">PREVIEW / DRY-RUN</text>
<text x="42" y="132" fill="#bfdbfe" font-size="12">что предлагается; какой источник</text>
<text x="42" y="148" fill="#bfdbfe" font-size="12">и какая side-effect boundary</text>
</g>
<path d="M187 160v22" stroke="#60a5fa" stroke-width="2"/>
<path d="M182 177l5 6 5-6" fill="none" stroke="#60a5fa" stroke-width="2"/>
<g>
<rect x="24" y="190" width="327" height="78" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="218" fill="#dbeafe" font-size="15" font-weight="700">SCOPE + AUTHORITY</text>
<text x="42" y="240" fill="#bfdbfe" font-size="12">exact ids, digest, selector, max count</text>
<text x="42" y="256" fill="#bfdbfe" font-size="12">scope wider than limit → STOP</text>
</g>
<path d="M187 268v22" stroke="#60a5fa" stroke-width="2"/>
<path d="M182 285l5 6 5-6" fill="none" stroke="#60a5fa" stroke-width="2"/>
<g>
<rect x="24" y="298" width="327" height="78" rx="12" fill="#172554" stroke="#60a5fa"/>
<text x="42" y="326" fill="#dbeafe" font-size="15" font-weight="700">APPROVAL BINDING</text>
<text x="42" y="348" fill="#bfdbfe" font-size="12">operation + preview + target + authority</text>
<text x="42" y="364" fill="#bfdbfe" font-size="12">digest mismatch → STOP</text>
</g>
<path d="M187 376v22" stroke="#34d399" stroke-width="2"/>
<path d="M182 393l5 6 5-6" fill="none" stroke="#34d399" stroke-width="2"/>
<g>
<rect x="24" y="406" width="327" height="76" rx="12" fill="#123524" stroke="#34d399"/>
<text x="42" y="434" fill="#d1fae5" font-size="15" font-weight="700">EXECUTE + AUDIT EVENT</text>
<text x="42" y="456" fill="#a7f3d0" font-size="12">attempt recorded with links and result</text>
<text x="42" y="472" fill="#a7f3d0" font-size="12">receipt is not target state</text>
</g>
<path d="M187 482v22" stroke="#fbbf24" stroke-width="2"/>
<path d="M182 499l5 6 5-6" fill="none" stroke="#fbbf24" stroke-width="2"/>
<g>
<rect x="24" y="512" width="327" height="76" rx="12" fill="#3b2f0b" stroke="#fbbf24"/>
<text x="42" y="540" fill="#fef3c7" font-size="15" font-weight="700">INDEPENDENT VERIFY</text>
<text x="42" y="562" fill="#fde68a" font-size="12">authoritative reader compares expected</text>
<text x="42" y="578" fill="#fde68a" font-size="12">and observed state on exact scope</text>
</g>
<path d="M187 588v22" stroke="#fb7185" stroke-width="2"/>
<path d="M182 605l5 6 5-6" fill="none" stroke="#fb7185" stroke-width="2"/>
<g>
<rect x="24" y="618" width="327" height="120" rx="12" fill="#4c1020" stroke="#fb7185" stroke-width="2"/>
<text x="42" y="648" fill="#ffe4e6" font-size="16" font-weight="700">UNKNOWN / MISMATCH → STOP</text>
<text x="42" y="672" fill="#fecdd3" font-size="12">preserve reason and observed subset</text>
<text x="42" y="692" fill="#fecdd3" font-size="12">new inventory → new bounded rollback plan</text>
<text x="42" y="712" fill="#fecdd3" font-size="12">new authority + preview + approval before write</text>
</g>
<path d="M187 738v28c0 12 18 12 18 0v-626" fill="none" stroke="#818cf8" stroke-width="2" stroke-dasharray="5 5"/>
<path d="M200 144l5 -7 5 7" fill="none" stroke="#818cf8" stroke-width="2"/>
</g>
<text x="22" y="807" fill="#c4b5fd" font-family="Arial, sans-serif" font-size="12">Пунктир: новый plan начинается с нового preview и approval.</text>
<text x="22" y="834" fill="#94a3b8" font-family="Arial, sans-serif" font-size="10">Audit = trace; verification = observed state. Они не равны.</text>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

@@ -0,0 +1,67 @@
<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>

After

Width:  |  Height:  |  Size: 4.9 KiB