auto-sync: 2026-06-07 23:20:01

This commit is contained in:
Stream
2026-06-07 23:20:01 +03:00
parent ecbdb9cab1
commit 7afccd40bf
2 changed files with 162 additions and 0 deletions

View File

@@ -0,0 +1,162 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Статусная модель оркестратора — полный workflow</title>
<style>
body { margin:0; background:#0f1419; color:#e6e6e6; font-family:-apple-system,Segoe UI,Roboto,sans-serif; padding:24px; }
h1 { font-size:20px; font-weight:600; margin:0 0 4px; }
.sub { color:#8b98a5; font-size:13px; margin-bottom:18px; }
.wrap { overflow-x:auto; }
.legend { display:flex; gap:18px; flex-wrap:wrap; margin:14px 0 20px; font-size:12px; }
.legend span { display:inline-flex; align-items:center; gap:6px; }
.sw { width:14px; height:14px; border-radius:3px; display:inline-block; }
svg { display:block; }
text { font-family:-apple-system,Segoe UI,Roboto,sans-serif; }
</style>
</head>
<body>
<h1>🌊 Статусная модель оркестратора — полный workflow (позитив + негатив)</h1>
<div class="sub">Зелёная стрелка = успешный выход · Красная = негативный (откат/блок) · Пунктир = действие человека (вход-триггер)</div>
<div class="legend">
<span><i class="sw" style="background:#1f6feb"></i> вход-триггер (человек жмёт)</span>
<span><i class="sw" style="background:#2d333b;border:1px solid #444c56"></i> стадия конвейера (орк ставит)</span>
<span><i class="sw" style="background:#9e6a03"></i> approve-pending деплоя</span>
<span><i class="sw" style="background:#1a7f37"></i> терминал успеха</span>
<span><i class="sw" style="background:#b62324"></i> блок/затык/фейл</span>
<span><i class="sw" style="background:#6e40c9"></i> ожидание ввода/ревью</span>
</div>
<div class="wrap">
<svg width="1180" height="980" viewBox="0 0 1180 980" xmlns="http://www.w3.org/2000/svg">
<defs>
<marker id="ok" markerWidth="9" markerHeight="9" refX="7" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 z" fill="#3fb950"/></marker>
<marker id="bad" markerWidth="9" markerHeight="9" refX="7" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 z" fill="#f85149"/></marker>
<marker id="hum" markerWidth="9" markerHeight="9" refX="7" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 z" fill="#58a6ff"/></marker>
<marker id="ret" markerWidth="9" markerHeight="9" refX="7" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 z" fill="#d29922"/></marker>
</defs>
<!-- ===== CONNECTORS (drawn first) ===== -->
<!-- main happy path vertical column x=300 -->
<g fill="none" stroke-width="2">
<!-- Backlog->Todo -->
<path d="M300,68 L300,92" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Todo->InProgress(human) -->
<path d="M300,128 L300,152" stroke="#58a6ff" stroke-dasharray="5,4" marker-end="url(#hum)"/>
<!-- InProgress->Analysis -->
<path d="M300,188 L300,212" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Analysis->In Review -->
<path d="M300,248 L300,272" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- In Review->Approved(human) -->
<path d="M300,308 L300,332" stroke="#58a6ff" stroke-dasharray="5,4" marker-end="url(#hum)"/>
<!-- Approved->Architecture -->
<path d="M300,368 L300,392" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Architecture->Development -->
<path d="M300,428 L300,452" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Development->Review -->
<path d="M300,488 L300,512" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Review->Testing -->
<path d="M300,548 L300,572" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Testing->Awaiting Deploy -->
<path d="M300,608 L300,632" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Awaiting Deploy->Confirm Deploy(human) -->
<path d="M300,668 L300,692" stroke="#58a6ff" stroke-dasharray="5,4" marker-end="url(#hum)"/>
<!-- Confirm Deploy->Deploying -->
<path d="M300,728 L300,752" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Deploying->Monitoring -->
<path d="M300,788 L300,812" stroke="#3fb950" marker-end="url(#ok)"/>
<!-- Monitoring->Done -->
<path d="M300,848 L300,872" stroke="#3fb950" marker-end="url(#ok)"/>
</g>
<!-- NEGATIVE / branch connectors (right side & loops) -->
<g fill="none" stroke-width="1.8">
<!-- Review REQUEST_CHANGES -> Development (retry, loop left) -->
<path d="M232,530 C150,530 150,470 232,470" stroke="#d29922" marker-end="url(#ret)"/>
<!-- Testing FAIL -> Development (retry, loop left) -->
<path d="M232,590 C110,590 110,470 232,470" stroke="#d29922" marker-end="url(#ret)"/>
<!-- retries exhausted -> Blocked (from Development area to Blocked box) -->
<path d="M368,484 C520,510 620,508 632,520" stroke="#f85149" marker-end="url(#bad)"/>
<!-- Rejected (human) from In Review -> previous stage (back up) -->
<path d="M368,290 C470,290 470,170 368,170" stroke="#58a6ff" stroke-dasharray="5,4" marker-end="url(#hum)"/>
<!-- Deploying FAIL -> Blocked -->
<path d="M368,770 C560,770 700,770 700,564" stroke="#f85149" marker-end="url(#bad)"/>
<!-- Monitoring UNHEALTHY -> Blocked -->
<path d="M368,830 C600,830 720,830 712,566" stroke="#f85149" marker-end="url(#bad)"/>
<!-- Approved-on-deploy (wrong) -> no-op self loop note handled in text -->
<!-- Needs Input <-> dev stage (agent asks) -->
<path d="M368,476 C520,476 560,438 745,438" stroke="#8957e5" stroke-dasharray="2,3" marker-end="url(#bad)"/>
<!-- Blocked -> (human fixes) In Progress restart -->
<path d="M700,508 C700,360 470,360 368,350" stroke="#58a6ff" stroke-dasharray="5,4" marker-end="url(#hum)"/>
</g>
<!-- edge labels -->
<g font-size="11" fill="#8b98a5">
<text x="120" y="555">REQUEST_CHANGES / FAIL → retry ≤3</text>
<text x="500" y="500">retry-cap / budget / crash → Blocked</text>
<text x="392" y="240">Rejected (человек) → откат</text>
<text x="430" y="760" fill="#f85149">deploy fail</text>
<text x="430" y="822" fill="#f85149">UNHEALTHY 5xx</text>
<text x="545" y="428" fill="#8957e5">Needs Input (агент спросил)</text>
<text x="470" y="345" fill="#58a6ff">человек починил → рестарт</text>
</g>
<!-- ===== NODES ===== -->
<!-- helper: rects -->
<g font-size="13" text-anchor="middle">
<!-- Backlog -->
<rect x="232" y="40" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="59" fill="#adbac7">Backlog</text>
<!-- Todo -->
<rect x="232" y="100" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="119" fill="#adbac7">Todo</text>
<!-- In Progress (trigger) -->
<rect x="232" y="160" width="136" height="28" rx="6" fill="#1f6feb" stroke="#388bfd"/><text x="300" y="179" fill="#fff">In Progress ▶ старт</text>
<!-- Analysis (NEW) -->
<rect x="232" y="220" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="239" fill="#adbac7">Analysis ✦</text>
<!-- In Review -->
<rect x="232" y="280" width="136" height="28" rx="6" fill="#6e40c9" stroke="#8957e5"/><text x="300" y="299" fill="#fff">In Review</text>
<!-- Approved (human) -->
<rect x="232" y="340" width="136" height="28" rx="6" fill="#1f6feb" stroke="#388bfd"/><text x="300" y="359" fill="#fff">Approved (BRD)</text>
<!-- Architecture -->
<rect x="232" y="400" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="419" fill="#adbac7">Architecture</text>
<!-- Development -->
<rect x="232" y="460" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="479" fill="#adbac7">Development</text>
<!-- Review -->
<rect x="232" y="520" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="539" fill="#adbac7">Review</text>
<!-- Testing -->
<rect x="232" y="580" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="599" fill="#adbac7">Testing</text>
<!-- Awaiting Deploy (NEW) -->
<rect x="232" y="640" width="136" height="28" rx="6" fill="#9e6a03" stroke="#bb8009"/><text x="300" y="659" fill="#fff">Awaiting Deploy ✦</text>
<!-- Confirm Deploy (human) -->
<rect x="232" y="700" width="136" height="28" rx="6" fill="#1f6feb" stroke="#388bfd"/><text x="300" y="719" fill="#fff">Confirm Deploy ▶</text>
<!-- Deploying (NEW) -->
<rect x="232" y="760" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="779" fill="#adbac7">Deploying ✦</text>
<!-- Monitoring (NEW) -->
<rect x="232" y="820" width="136" height="28" rx="6" fill="#2d333b" stroke="#444c56"/><text x="300" y="839" fill="#adbac7">Monitoring ✦</text>
<!-- Done -->
<rect x="232" y="880" width="136" height="32" rx="6" fill="#1a7f37" stroke="#2ea043"/><text x="300" y="900" fill="#fff">✓ Done</text>
<!-- Blocked (right) -->
<rect x="632" y="508" width="160" height="56" rx="6" fill="#b62324" stroke="#da3633"/>
<text x="712" y="532" fill="#fff">⛔ Blocked</text>
<text x="712" y="552" fill="#ffd7d5" font-size="10">retry-cap·budget·crash·deploy-fail</text>
<!-- Needs Input (far right) -->
<rect x="745" y="424" width="120" height="28" rx="6" fill="#6e40c9" stroke="#8957e5"/><text x="805" y="443" fill="#fff">Needs Input</text>
<!-- Cancelled (bottom right standalone) -->
<rect x="632" y="880" width="120" height="28" rx="6" fill="#373e47" stroke="#545d68"/><text x="692" y="899" fill="#8b98a5">Cancelled</text>
</g>
<!-- note about Approved-on-deploy no-op -->
<g font-size="11">
<rect x="930" y="700" width="230" height="64" rx="6" fill="#161b22" stroke="#30363d"/>
<text x="942" y="720" fill="#e6a23c">⚠ Approved на стадии deploy</text>
<text x="942" y="738" fill="#8b98a5">= no-op (ORCH-59). Прод</text>
<text x="942" y="754" fill="#8b98a5">запускает ТОЛЬКО Confirm Deploy.</text>
</g>
<!-- ✦ = новый статус legend -->
<text x="40" y="950" font-size="12" fill="#8b98a5">✦ — новый/переименованный статус (предложение). ▶ — кнопка-триггер человека.</text>
</svg>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB