Files
progcode/web/public/assets/editorial/2023/e2e-stability-2023-triage-loop.svg
T
huncode 3d310bd605
Build and deploy / deploy (push) Successful in 16s
revise August 2023 e2e stability articles
2026-07-31 15:08:57 +03:00

62 lines
5.7 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
<title id="title">Цикл triage flaky e2e-теста</title>
<desc id="desc">Пять шагов замкнутого цикла: зафиксировать initial и retry outcome, проверить selector, проверить readiness, связать evidence с попыткой, сделать маленький diff с rollback. При недостатке фактов цикл возвращается к карточке, а не повышает timeout.</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="#486581"/></marker>
</defs>
<rect width="1200" height="800" fill="#f8fafc"/>
<rect x="48" y="42" width="1104" height="84" rx="18" fill="#102a43"/>
<text x="84" y="92" fill="#ffffff" font-family="Arial, sans-serif" font-size="34" font-weight="700">Flaky triage: один факт → одна проверка → малый diff</text>
<text x="84" y="116" fill="#d9e2ec" font-family="Arial, sans-serif" font-size="17">Цикл не ищет «идеальный timeout»: он сохраняет объяснимый контракт и rollback.</text>
<path d="M369 251 C470 182, 593 177, 686 224" fill="none" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M840 299 C913 365, 913 469, 830 521" fill="none" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M700 599 C580 662, 442 649, 356 592" fill="none" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M205 520 C133 454, 134 341, 214 286" fill="none" stroke="#486581" stroke-width="5" marker-end="url(#arrow)"/>
<g>
<rect x="95" y="195" width="280" height="138" rx="20" fill="#e0f2fe" stroke="#0284c7" stroke-width="3"/>
<text x="123" y="237" fill="#075985" font-family="Arial, sans-serif" font-size="24" font-weight="700">1. Карточка</text>
<text x="123" y="270" fill="#102a43" font-family="Arial, sans-serif" font-size="18">initial outcome</text>
<text x="123" y="295" fill="#102a43" font-family="Arial, sans-serif" font-size="18">retry outcome</text>
<text x="123" y="318" fill="#334e68" font-family="Arial, sans-serif" font-size="15">Не удалять initial error.</text>
</g>
<g>
<rect x="700" y="195" width="280" height="138" rx="20" fill="#ecfdf5" stroke="#059669" stroke-width="3"/>
<text x="728" y="237" fill="#047857" font-family="Arial, sans-serif" font-size="24" font-weight="700">2. Selector</text>
<text x="728" y="270" fill="#102a43" font-family="Arial, sans-serif" font-size="18">user-facing locator</text>
<text x="728" y="295" fill="#102a43" font-family="Arial, sans-serif" font-size="18">ровно один match?</text>
<text x="728" y="318" fill="#334e68" font-family="Arial, sans-serif" font-size="15">Нет → отдельный locator diff.</text>
</g>
<g>
<rect x="700" y="493" width="280" height="138" rx="20" fill="#fff7ed" stroke="#ea580c" stroke-width="3"/>
<text x="728" y="535" fill="#9a3412" font-family="Arial, sans-serif" font-size="24" font-weight="700">3. Readiness</text>
<text x="728" y="568" fill="#102a43" font-family="Arial, sans-serif" font-size="18">terminal UI-state</text>
<text x="728" y="593" fill="#102a43" font-family="Arial, sans-serif" font-size="18">после действия?</text>
<text x="728" y="616" fill="#334e68" font-family="Arial, sans-serif" font-size="15">Не ждать spinner или sleep.</text>
</g>
<g>
<rect x="95" y="493" width="280" height="138" rx="20" fill="#f5f3ff" stroke="#7c3aed" stroke-width="3"/>
<text x="123" y="535" fill="#5b21b6" font-family="Arial, sans-serif" font-size="24" font-weight="700">4. Evidence</text>
<text x="123" y="568" fill="#102a43" font-family="Arial, sans-serif" font-size="18">trace/log/snapshot</text>
<text x="123" y="593" fill="#102a43" font-family="Arial, sans-serif" font-size="18">какой attempt?</text>
<text x="123" y="616" fill="#334e68" font-family="Arial, sans-serif" font-size="15">Один артефакт — один вопрос.</text>
</g>
<g>
<rect x="421" y="338" width="358" height="166" rx="24" fill="#102a43"/>
<text x="455" y="386" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">5. Решение</text>
<text x="455" y="421" fill="#d9e2ec" font-family="Arial, sans-serif" font-size="19">малый diff в одном слое</text>
<text x="455" y="448" fill="#d9e2ec" font-family="Arial, sans-serif" font-size="19">owner + rollback + next check</text>
<text x="455" y="479" fill="#fbbf24" font-family="Arial, sans-serif" font-size="17" font-weight="700">Timeout не меняется автоматически</text>
</g>
<path d="M375 264 L416 354" fill="none" stroke="#94a3b8" stroke-width="4" stroke-dasharray="8 8" marker-end="url(#arrow)"/>
<path d="M700 264 L782 354" fill="none" stroke="#94a3b8" stroke-width="4" stroke-dasharray="8 8" marker-end="url(#arrow)"/>
<path d="M700 560 L782 488" fill="none" stroke="#94a3b8" stroke-width="4" stroke-dasharray="8 8" marker-end="url(#arrow)"/>
<path d="M375 560 L416 488" fill="none" stroke="#94a3b8" stroke-width="4" stroke-dasharray="8 8" marker-end="url(#arrow)"/>
<rect x="172" y="690" width="856" height="61" rx="14" fill="#e0e7ff" stroke="#6366f1" stroke-width="2"/>
<text x="205" y="728" fill="#312e81" font-family="Arial, sans-serif" font-size="22" font-weight="700">Недостаточно фактов? Вернуться к карточке и собрать один недостающий сигнал.</text>
</svg>