revise February 2025 AI code verification articles
Build and deploy / deploy (push) Successful in 15s
Build and deploy / deploy (push) Successful in 15s
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Цепочка доказательств при расходящемся generated diff</title>
|
||||
<desc id="desc">Шесть узлов показывают переход от фиксированного diff к контракту, статической проверке, тесту, review и ручному сценарию. Расхождение приводит к остановке подготовки merge и вопросу владельцу, а не к автоматическому revert или rollback.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0,0 L12,6 L0,12 Z" fill="#475569"/></marker>
|
||||
</defs>
|
||||
<rect width="1200" height="800" fill="#f8fafc"/>
|
||||
<text x="58" y="61" fill="#0f172a" font-family="Arial, sans-serif" font-size="38" font-weight="700">Evidence chain: наблюдение → решение</text>
|
||||
<text x="58" y="98" fill="#475569" font-family="Arial, sans-serif" font-size="24">Каждый узел отвечает на свой вопрос. Решение принимает человек с полномочиями.</text>
|
||||
|
||||
<g font-family="Arial, sans-serif" text-anchor="middle">
|
||||
<rect x="58" y="175" width="160" height="112" rx="16" fill="#e2e8f0" stroke="#64748b" stroke-width="3"/>
|
||||
<text x="138" y="218" fill="#0f172a" font-size="28" font-weight="700">Fixed diff</text>
|
||||
<text x="138" y="254" fill="#334155" font-size="21">one stated change</text>
|
||||
|
||||
<rect x="250" y="175" width="160" height="112" rx="16" fill="#dbeafe" stroke="#2563eb" stroke-width="3"/>
|
||||
<text x="330" y="218" fill="#172554" font-size="28" font-weight="700">Contract</text>
|
||||
<text x="330" y="254" fill="#1e3a8a" font-size="21">shape + boundary</text>
|
||||
|
||||
<rect x="442" y="175" width="160" height="112" rx="16" fill="#dcfce7" stroke="#16a34a" stroke-width="3"/>
|
||||
<text x="522" y="218" fill="#14532d" font-size="28" font-weight="700">Static</text>
|
||||
<text x="522" y="254" fill="#166534" font-size="21">known pattern</text>
|
||||
|
||||
<rect x="634" y="175" width="160" height="112" rx="16" fill="#fef3c7" stroke="#d97706" stroke-width="3"/>
|
||||
<text x="714" y="218" fill="#78350f" font-size="28" font-weight="700">Test</text>
|
||||
<text x="714" y="254" fill="#92400e" font-size="21">accept + reject</text>
|
||||
|
||||
<rect x="826" y="175" width="160" height="112" rx="16" fill="#f3e8ff" stroke="#9333ea" stroke-width="3"/>
|
||||
<text x="906" y="218" fill="#581c87" font-size="28" font-weight="700">Review</text>
|
||||
<text x="906" y="254" fill="#6b21a8" font-size="21">intent + scope</text>
|
||||
|
||||
<rect x="1018" y="175" width="124" height="112" rx="16" fill="#fee2e2" stroke="#dc2626" stroke-width="3"/>
|
||||
<text x="1080" y="214" fill="#7f1d1d" font-size="25" font-weight="700">Manual</text>
|
||||
<text x="1080" y="246" fill="#991b1b" font-size="19">scenario</text>
|
||||
</g>
|
||||
|
||||
<line x1="220" y1="231" x2="244" y2="231" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="412" y1="231" x2="436" y2="231" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="604" y1="231" x2="628" y2="231" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="796" y1="231" x2="820" y2="231" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<line x1="988" y1="231" x2="1012" y2="231" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
|
||||
<path d="M330,302 C330,390 500,382 500,448" fill="none" stroke="#64748b" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<path d="M714,302 C714,390 700,382 700,448" fill="none" stroke="#64748b" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<path d="M1080,302 C1080,390 900,382 900,448" fill="none" stroke="#64748b" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="370" y="455" width="460" height="125" rx="20" fill="#fff1f2" stroke="#be123c" stroke-width="4"/>
|
||||
<text x="600" y="502" text-anchor="middle" fill="#881337" font-family="Arial, sans-serif" font-size="33" font-weight="700">Evidence расходится?</text>
|
||||
<text x="600" y="543" text-anchor="middle" fill="#9f1239" font-family="Arial, sans-serif" font-size="25">назвать contract, gap и scope</text>
|
||||
|
||||
<line x1="510" y1="586" x2="360" y2="650" stroke="#be123c" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<line x1="690" y1="586" x2="840" y2="650" stroke="#0f766e" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="115" y="660" width="360" height="95" rx="16" fill="#fee2e2" stroke="#dc2626" stroke-width="3"/>
|
||||
<text x="295" y="700" text-anchor="middle" fill="#7f1d1d" font-family="Arial, sans-serif" font-size="28" font-weight="700">STOP preparation</text>
|
||||
<text x="295" y="733" text-anchor="middle" fill="#991b1b" font-family="Arial, sans-serif" font-size="21">не merge, не revert, не rollback</text>
|
||||
<rect x="725" y="660" width="360" height="95" rx="16" fill="#ccfbf1" stroke="#0f766e" stroke-width="3"/>
|
||||
<text x="905" y="700" text-anchor="middle" fill="#134e4a" font-family="Arial, sans-serif" font-size="28" font-weight="700">Human approval</text>
|
||||
<text x="905" y="733" text-anchor="middle" fill="#115e59" font-family="Arial, sans-serif" font-size="21">только с фактическим evidence</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,66 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Матрица риск и способ обнаружения</title>
|
||||
<desc id="desc">Таблица сопоставляет четыре риска с контрактом, статической проверкой, узким тестом, human review и ручным воспроизведением. Отмеченные клетки означают применимое свидетельство, а не гарантию.</desc>
|
||||
<rect width="1200" height="800" fill="#f8fafc"/>
|
||||
<text x="58" y="58" fill="#0f172a" font-family="Arial, sans-serif" font-size="37" font-weight="700">Risk → detecting evidence</text>
|
||||
<text x="58" y="94" fill="#475569" font-family="Arial, sans-serif" font-size="24">✓ — способ может дать релевантное evidence; пустая клетка не означает, что риска нет.</text>
|
||||
|
||||
<rect x="52" y="130" width="300" height="100" fill="#e2e8f0" stroke="#94a3b8" stroke-width="2"/>
|
||||
<rect x="352" y="130" width="150" height="100" fill="#dbeafe" stroke="#94a3b8" stroke-width="2"/>
|
||||
<rect x="502" y="130" width="150" height="100" fill="#dcfce7" stroke="#94a3b8" stroke-width="2"/>
|
||||
<rect x="652" y="130" width="150" height="100" fill="#fef3c7" stroke="#94a3b8" stroke-width="2"/>
|
||||
<rect x="802" y="130" width="150" height="100" fill="#f3e8ff" stroke="#94a3b8" stroke-width="2"/>
|
||||
<rect x="952" y="130" width="196" height="100" fill="#fee2e2" stroke="#94a3b8" stroke-width="2"/>
|
||||
<text x="82" y="188" fill="#0f172a" font-family="Arial, sans-serif" font-size="29" font-weight="700">Риск</text>
|
||||
<text x="382" y="174" fill="#1e3a8a" font-family="Arial, sans-serif" font-size="25" font-weight="700">Contract</text>
|
||||
<text x="385" y="205" fill="#1e3a8a" font-family="Arial, sans-serif" font-size="22">check</text>
|
||||
<text x="530" y="174" fill="#166534" font-family="Arial, sans-serif" font-size="25" font-weight="700">Static</text>
|
||||
<text x="526" y="205" fill="#166534" font-family="Arial, sans-serif" font-size="22">check</text>
|
||||
<text x="677" y="174" fill="#92400e" font-family="Arial, sans-serif" font-size="25" font-weight="700">Focused</text>
|
||||
<text x="696" y="205" fill="#92400e" font-family="Arial, sans-serif" font-size="22">test</text>
|
||||
<text x="827" y="174" fill="#6b21a8" font-family="Arial, sans-serif" font-size="25" font-weight="700">Human</text>
|
||||
<text x="828" y="205" fill="#6b21a8" font-family="Arial, sans-serif" font-size="22">review</text>
|
||||
<text x="977" y="174" fill="#991b1b" font-family="Arial, sans-serif" font-size="23" font-weight="700">Manual</text>
|
||||
<text x="970" y="205" fill="#991b1b" font-family="Arial, sans-serif" font-size="21">scenario</text>
|
||||
|
||||
<g font-family="Arial, sans-serif">
|
||||
<rect x="52" y="230" width="300" height="108" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
|
||||
<text x="78" y="277" fill="#0f172a" font-size="27" font-weight="700">Публичное поле</text>
|
||||
<text x="78" y="309" fill="#334155" font-size="24">переименовано</text>
|
||||
<rect x="352" y="230" width="150" height="108" fill="#bfdbfe" stroke="#cbd5e1" stroke-width="2"/><text x="412" y="297" fill="#1d4ed8" font-size="44">✓</text>
|
||||
<rect x="502" y="230" width="150" height="108" fill="#bbf7d0" stroke="#cbd5e1" stroke-width="2"/><text x="562" y="297" fill="#15803d" font-size="44">✓</text>
|
||||
<rect x="652" y="230" width="150" height="108" fill="#fde68a" stroke="#cbd5e1" stroke-width="2"/><text x="712" y="297" fill="#b45309" font-size="44">✓</text>
|
||||
<rect x="802" y="230" width="150" height="108" fill="#e9d5ff" stroke="#cbd5e1" stroke-width="2"/><text x="862" y="297" fill="#7e22ce" font-size="44">✓</text>
|
||||
<rect x="952" y="230" width="196" height="108" fill="#fecdd3" stroke="#cbd5e1" stroke-width="2"/><text x="1030" y="297" fill="#be123c" font-size="44">✓</text>
|
||||
|
||||
<rect x="52" y="338" width="300" height="108" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
|
||||
<text x="78" y="385" fill="#0f172a" font-size="27" font-weight="700">Вход мутирован</text>
|
||||
<text x="78" y="417" fill="#334155" font-size="24">в preview path</text>
|
||||
<rect x="352" y="338" width="150" height="108" fill="#bfdbfe" stroke="#cbd5e1" stroke-width="2"/><text x="412" y="405" fill="#1d4ed8" font-size="44">✓</text>
|
||||
<rect x="502" y="338" width="150" height="108" fill="#bbf7d0" stroke="#cbd5e1" stroke-width="2"/><text x="562" y="405" fill="#15803d" font-size="44">✓</text>
|
||||
<rect x="652" y="338" width="150" height="108" fill="#fde68a" stroke="#cbd5e1" stroke-width="2"/><text x="712" y="405" fill="#b45309" font-size="44">✓</text>
|
||||
<rect x="802" y="338" width="150" height="108" fill="#e9d5ff" stroke="#cbd5e1" stroke-width="2"/><text x="862" y="405" fill="#7e22ce" font-size="44">✓</text>
|
||||
<rect x="952" y="338" width="196" height="108" fill="#fecdd3" stroke="#cbd5e1" stroke-width="2"/><text x="1030" y="405" fill="#be123c" font-size="44">✓</text>
|
||||
|
||||
<rect x="52" y="446" width="300" height="108" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
|
||||
<text x="78" y="493" fill="#0f172a" font-size="27" font-weight="700">Missing role</text>
|
||||
<text x="78" y="525" fill="#334155" font-size="24">получает доступ</text>
|
||||
<rect x="352" y="446" width="150" height="108" fill="#bfdbfe" stroke="#cbd5e1" stroke-width="2"/><text x="412" y="513" fill="#1d4ed8" font-size="44">✓</text>
|
||||
<rect x="502" y="446" width="150" height="108" fill="#bbf7d0" stroke="#cbd5e1" stroke-width="2"/><text x="562" y="513" fill="#15803d" font-size="44">✓</text>
|
||||
<rect x="652" y="446" width="150" height="108" fill="#fde68a" stroke="#cbd5e1" stroke-width="2"/><text x="712" y="513" fill="#b45309" font-size="44">✓</text>
|
||||
<rect x="802" y="446" width="150" height="108" fill="#e9d5ff" stroke="#cbd5e1" stroke-width="2"/><text x="862" y="513" fill="#7e22ce" font-size="44">✓</text>
|
||||
<rect x="952" y="446" width="196" height="108" fill="#fecdd3" stroke="#cbd5e1" stroke-width="2"/><text x="1030" y="513" fill="#be123c" font-size="44">✓</text>
|
||||
|
||||
<rect x="52" y="554" width="300" height="108" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
|
||||
<text x="78" y="601" fill="#0f172a" font-size="27" font-weight="700">Security context</text>
|
||||
<text x="78" y="633" fill="#334155" font-size="24">не описан</text>
|
||||
<rect x="352" y="554" width="150" height="108" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="2"/><text x="415" y="621" fill="#64748b" font-size="38">?</text>
|
||||
<rect x="502" y="554" width="150" height="108" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="2"/><text x="565" y="621" fill="#64748b" font-size="38">?</text>
|
||||
<rect x="652" y="554" width="150" height="108" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="2"/><text x="715" y="621" fill="#64748b" font-size="38">?</text>
|
||||
<rect x="802" y="554" width="150" height="108" fill="#e9d5ff" stroke="#cbd5e1" stroke-width="2"/><text x="862" y="621" fill="#7e22ce" font-size="44">✓</text>
|
||||
<rect x="952" y="554" width="196" height="108" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="2"/><text x="1030" y="621" fill="#64748b" font-size="38">?</text>
|
||||
</g>
|
||||
<rect x="52" y="696" width="1096" height="76" rx="12" fill="#fff7ed" stroke="#fb923c" stroke-width="2"/>
|
||||
<text x="76" y="728" fill="#9a3412" font-family="Arial, sans-serif" font-size="25" font-weight="700">? = нужен внешний context или отдельное authority.</text>
|
||||
<text x="76" y="758" fill="#9a3412" font-family="Arial, sans-serif" font-size="25" font-weight="700">Матрица не обещает security или correctness.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.6 KiB |
@@ -0,0 +1,46 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Воронка проверки generated diff</title>
|
||||
<desc id="desc">Пять уменьшающихся этапов проверки: контракт, статический контроль, узкий тест, human review и ручное воспроизведение. Справа отмечено, что расхождение доказательств блокирует подготовку merge.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
|
||||
<path d="M0,0 L12,6 L0,12 Z" fill="#475569"/>
|
||||
</marker>
|
||||
</defs>
|
||||
<rect width="1200" height="760" fill="#f8fafc"/>
|
||||
<text x="72" y="62" fill="#0f172a" font-family="Arial, sans-serif" font-size="38" font-weight="700">Один diff: воронка проверяемых вопросов</text>
|
||||
<text x="72" y="100" fill="#475569" font-family="Arial, sans-serif" font-size="25">Каждый этап даёт evidence с границей, а не процент гарантии.</text>
|
||||
|
||||
<rect x="105" y="145" width="720" height="82" rx="16" fill="#dbeafe" stroke="#2563eb" stroke-width="3"/>
|
||||
<text x="145" y="184" fill="#172554" font-family="Arial, sans-serif" font-size="31" font-weight="700">1. Контракт</text>
|
||||
<text x="420" y="184" fill="#1e3a8a" font-family="Arial, sans-serif" font-size="26">форма и owner boundary</text>
|
||||
|
||||
<line x1="465" y1="232" x2="465" y2="258" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<rect x="155" y="265" width="620" height="82" rx="16" fill="#dcfce7" stroke="#16a34a" stroke-width="3"/>
|
||||
<text x="195" y="304" fill="#14532d" font-family="Arial, sans-serif" font-size="31" font-weight="700">2. Static check</text>
|
||||
<text x="465" y="304" fill="#166534" font-family="Arial, sans-serif" font-size="26">известный pattern или rule</text>
|
||||
|
||||
<line x1="465" y1="352" x2="465" y2="378" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<rect x="205" y="385" width="520" height="82" rx="16" fill="#fef3c7" stroke="#d97706" stroke-width="3"/>
|
||||
<text x="245" y="424" fill="#78350f" font-family="Arial, sans-serif" font-size="31" font-weight="700">3. Узкий тест</text>
|
||||
<text x="500" y="424" fill="#92400e" font-family="Arial, sans-serif" font-size="26">accept + negative path</text>
|
||||
|
||||
<line x1="465" y1="472" x2="465" y2="498" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<rect x="255" y="505" width="420" height="82" rx="16" fill="#f3e8ff" stroke="#9333ea" stroke-width="3"/>
|
||||
<text x="295" y="544" fill="#581c87" font-family="Arial, sans-serif" font-size="31" font-weight="700">4. Human review</text>
|
||||
<text x="510" y="544" fill="#6b21a8" font-family="Arial, sans-serif" font-size="24">intent и scope</text>
|
||||
|
||||
<line x1="465" y1="592" x2="465" y2="618" stroke="#475569" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<rect x="305" y="625" width="320" height="82" rx="16" fill="#fee2e2" stroke="#dc2626" stroke-width="3"/>
|
||||
<text x="345" y="661" fill="#7f1d1d" font-family="Arial, sans-serif" font-size="29" font-weight="700">5. Ручной</text>
|
||||
<text x="345" y="691" fill="#991b1b" font-family="Arial, sans-serif" font-size="26">consumer scenario</text>
|
||||
|
||||
<path d="M830,188 C930,188 920,424 780,424" fill="none" stroke="#b91c1c" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="875" y="235" width="260" height="210" rx="18" fill="#fff1f2" stroke="#be123c" stroke-width="4"/>
|
||||
<text x="910" y="285" fill="#881337" font-family="Arial, sans-serif" font-size="30" font-weight="700">Если evidence</text>
|
||||
<text x="910" y="323" fill="#881337" font-family="Arial, sans-serif" font-size="30" font-weight="700">расходится</text>
|
||||
<line x1="910" y1="347" x2="1095" y2="347" stroke="#fda4af" stroke-width="3"/>
|
||||
<text x="910" y="385" fill="#9f1239" font-family="Arial, sans-serif" font-size="26">block preparation</text>
|
||||
<text x="910" y="416" fill="#9f1239" font-family="Arial, sans-serif" font-size="23">не merge, не rollback</text>
|
||||
<text x="885" y="514" fill="#475569" font-family="Arial, sans-serif" font-size="24">Далее: owner question</text>
|
||||
<text x="885" y="546" fill="#475569" font-family="Arial, sans-serif" font-size="24">и human approval</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
Reference in New Issue
Block a user