simbiot-harness/docs/self-diagnostics.html

91 lines
No EOL
7.6 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Simbiot Harness — самодиагностика</title>
<style>
:root{--bg:#0d1117;--card:#161b22;--line:#30363d;--tx:#e6edf3;--dim:#8b949e;--ok:#3fb950;--warn:#d29922;--bad:#f85149;--acc:#58a6ff}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--tx);font:15px/1.55 -apple-system,'Segoe UI',Roboto,sans-serif;padding:24px}
.wrap{max-width:860px;margin:0 auto}
h1{font-size:22px;margin-bottom:4px}
.sub{color:var(--dim);font-size:13px;margin-bottom:20px}
.verdict{background:linear-gradient(90deg,#12261a,#161b22);border:1px solid var(--ok);border-radius:10px;padding:14px 18px;margin-bottom:20px;font-size:15px}
.verdict b{color:var(--ok)}
table{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:20px;font-size:14px}
th{background:#1c2128;text-align:left;padding:9px 12px;color:var(--dim);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.04em}
td{padding:9px 12px;border-top:1px solid var(--line);vertical-align:top}
td.num{font-variant-numeric:tabular-nums}
.ok{color:var(--ok);font-weight:600}
.warn{color:var(--warn);font-weight:600}
.bad{color:var(--bad);font-weight:600}
.acc{color:var(--acc)}
.dim{color:var(--dim)}
h2{font-size:14px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin:22px 0 10px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin-bottom:8px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.stat .v{font-size:20px;font-weight:700}
.stat .l{font-size:12px;color:var(--dim);margin-top:2px}
ul.notes{list-style:none}
ul.notes li{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin-bottom:8px;font-size:14px}
.foot{color:var(--dim);font-size:12px;margin-top:24px;border-top:1px solid var(--line);padding-top:12px}
code{background:#1c2128;border:1px solid var(--line);border-radius:5px;padding:1px 6px;font-size:12.5px}
</style>
</head>
<body>
<div class="wrap">
<h1>🩺 Simbiot Harness — самодиагностика</h1>
<div class="sub">Снимок 2026-10-01 09:12 UTC · сгенерировано мин-уровнем из event store + <code>cli.py status</code> по запросу Alex (m-516173335/336)</div>
<div class="verdict">
Общий вердикт: <b>ЗДОРОВ</b> — все 4 уровня тикают, очередь идёт, эскалаций открыто 0,
падений циклов сегодня 1 (разобрано и закрыто на 09:11, повторов нет).
</div>
<h2>Циклы (beat)</h2>
<table>
<tr><th>Уровень</th><th>Тиков всего</th><th>Последний тик (UTC)</th><th>Состояние</th></tr>
<tr><td><b>sec</b> — пульс</td><td class="num">150 261</td><td class="num">09:12:16</td><td class="ok">OK, секундный ритм без пауз</td></tr>
<tr><td><b>min</b> — триаж/мелочи</td><td class="num">1 986</td><td class="num">09:12:01</td><td><span class="ok">OK</span> · <span class="dim">stale last_error от 08:35 — само разрешено, счётчик не сбрасывается</span></td></tr>
<tr><td><b>hour</b> — задачи/дайджест</td><td class="num">44</td><td class="num">09:00 → 09:11:59</td><td class="ok">OK · тик закрылся дайджестом (~12 мин, 1 эскалация разобрана)</td></tr>
<tr><td><b>day</b> — стратегия</td><td class="num">3</td><td class="num">00:00:00</td><td><span class="ok">OK</span> · <span class="dim">night tick 00:00–00:53, ошибок не оставил</span></td></tr>
</table>
<h2>Счётчики</h2>
<div class="grid">
<div class="stat"><div class="v acc">8</div><div class="l">задач в ready (очередь)</div></div>
<div class="stat"><div class="v ok">46</div><div class="l">задач закрыто всего</div></div>
<div class="stat"><div class="v ok">0</div><div class="l">открытых эскалаций</div></div>
<div class="stat"><div class="v">400</div><div class="l">дайджестов накоплено</div></div>
<div class="stat"><div class="v acc">132 / 130</div><div class="l">вход/ответы TG за 24 ч — backlog нет</div></div>
<div class="stat"><div class="v acc">31 / 31</div><div class="l">доставок файлов/сообщений за 24 ч (idempotent ledger, все tg_ok)</div></div>
<div class="stat"><div class="v">907</div><div class="l">LLM-вызовов сегодня (BudgetSpent)</div></div>
</div>
<h2>Что болело / что болит</h2>
<ul class="notes">
<li><span class="ok">✅ Разобрано</span> — <b>min-тик 08:35</b>: guard «бюджет исчерпан» вызывал requeue, а тот кидал ValueError на ready-статус → падение тика <span class="dim">(e-261001083543, acked и разобрано часовым в тике 09:00–09:11; задача «list» штатно закрыта)</span>.</li>
<li><span class="ok">✅ Прошло</span> — вчерашние таймауты <code>_llm_worker</code> (min 300s / hour 2880s, последний раз 30.09 16:48) сегодня не повторились ни разу.</li>
<li><span class="ok">✅ Прошло</span> — «cannot schedule new futures after shutdown» (29.09, после рестарта демона) — не встречается.</li>
<li><span class="warn">⚠ Наблюдение</span> — у min в <code>status</code> висит last_error от 08:35, хотя инцидент разобран: счётчик ошибок не сбрасывается, косметика — можно добавить сброс при успешном тике.</li>
<li><span class="warn">⚠ Наблюдение</span> — активной периодической самопроверки нет: здоровье видно только из digests/escalations; можно добавить hourly health-check-пробу (ticks растут, CycleError=0, inbox пуст) в часовой дайджест.</li>
</ul>
<h2>Чем себя диагностирую</h2>
<table>
<tr><th>Механизм</th><th>Что даёт</th></tr>
<tr><td><code>cli.py status</code></td><td>beat по 4 уровням: ticks, last_tick, errors, spend — жив ли каждый такт</td></tr>
<tr><td><code>cli.py escalations</code></td><td>реестр падений/проблем с ack-трекингом: ничего не потеряно</td></tr>
<tr><td>Event store (events)</td><td>CycleError, TaskFailed, DeliverySent/Skipped — с трейсбинами, можно раскрутить любую ошибку</td></tr>
<tr><td>delivery_ledger</td><td>идемпотентность отправок в TG: дублей не бывает, пропуски видны</td></tr>
<tr><td>Дайджесты (400+)</td><td>ритучевые отчёты каждого уровня — история, а не только «сейчас»</td></tr>
</table>
<div class="foot">
Источник: sqlite event store (<code>harness/harness.db</code>: CycleError, InvocationStarted, MessageReceived, DeliverySent…) + <code>cli.py status</code> на 2026-10-01T09:12Z.<br>
Simbiot Harness · кооператив 42 · мин-уровень, тик 09:12
</div>
</div>
</body>
</html>