feat(doctor): диагностика в dry-run по умолчанию, ремонты по явному запросу

Доктор мутировал систему при каждом диагностическом запуске: отключал
rebind protection dnsmasq, делал kill -9 процессу на портах 4534/9090,
стирал syslog во время OOM-аудита и подменял resolv.conf на 1.1.1.1 как
побочный эффект "проверки".

- run_doctor_checks() теперь только диагностирует в dry-run: каждая мутация
  идёт через обёртки doc_set/doc_commit/doc_run/doc_unlink, которые
  записывают планируемое действие и сообщают "WILL FIX (doctor --fix)";
  ремонты выполняются только через "tachyon doctor --fix" или repair=true
- recovery-проверки (сервис остановлен) следуют тому же правилу
- параллельные запуски доктора из LuCI, Telegram и cron сериализуются
  mkdir-локом со взятием устаревшего лока через 15 минут тишины
- трекер применённых фиксов пишется атомарно (tmp+mv)
- OOM-проверка больше не стирает logread (это форензика) и атрибутирует
  kill именно sing-box
- ai_doctor прогонял весь набор проверок дважды (внутри local_rule_doctor и
  напрямую); результаты считаются один раз и переиспользуются
- curl к LLM/Clash/подпискам получили connect + total таймауты, зависший
  эндпоинт больше не подвешивает доктора
This commit is contained in:
Dushnilin
2026-08-21 19:20:05 +03:00
parent 300ad50417
commit 7d222fbfe1
2 changed files with 514 additions and 235 deletions
+6 -2
View File
@@ -17,7 +17,7 @@ fail() {
}
# 1. Verify runtime.uc owns local_rule_doctor
grep -Fq 'function local_rule_doctor()' "$TACHYON_LIB/diagnostics/runtime.uc" ||
grep -Fq 'function local_rule_doctor(' "$TACHYON_LIB/diagnostics/runtime.uc" ||
fail "runtime.uc must define local_rule_doctor heuristic engine"
# 2. Run ai-doctor without API key (local offline mode)
@@ -64,8 +64,12 @@ grep -Fq 'function run_recovery_checks()' "$TACHYON_LIB/diagnostics/runtime.uc"
fail "runtime.uc must define run_recovery_checks()"
grep -Fq 'function verify_system()' "$TACHYON_LIB/diagnostics/runtime.uc" ||
fail "runtime.uc must define verify_system()"
grep -Fq 'let verify = verify_system();' "$TACHYON_LIB/diagnostics/runtime.uc" ||
grep -Fq 'let verify = (pre_verify != null) ? pre_verify : verify_system();' "$TACHYON_LIB/diagnostics/runtime.uc" ||
fail "local_rule_doctor no longer feeds live verification into its analysis"
# ai_doctor must run the suite exactly once and share results with the
# heuristic engine instead of executing every probe twice.
grep -Fq 'let local_res = local_rule_doctor(res, verify);' "$TACHYON_LIB/diagnostics/runtime.uc" ||
fail "ai_doctor must reuse doctor/verify results instead of re-running the suite"
grep -Fq 'wan_fail_streak: int(st.wan_fail_streak || 0)' "$TACHYON_LIB/service/watchdog.uc" ||
fail "watchdog status export no longer reports probe streaks to AI Doctor"