Алгоритм (полный уровень 4):
1. baseline = kb-health.py → score_before
2. создать ветку auto-fix/DATE
3. Opus через claude -p --permission-mode acceptEdits читает health-отчёт,
правит файлы (fm, broken paths, undated todos), коммитит в ветку
4. score_after = kb-health.py
5. если score_after < score_before → merge + push + удалить ветку
иначе → reset, ничего не применять
Запускать на code-server (LXC 132) где есть Max OAuth. Вручную или cron.
Ограничения жёсткие: не удалять файлы, не трогать factual inventories,
не пушить самостоятельно из Opus — merge решает метрика.
6 категорий штрафов со взвешенной суммой:
- broken_wikilinks (×10) — [[foo]] не ведёт никуда
- broken_paths (×10) — [text](./foo.md) не существует
- missing_frontmatter (×3) — .md без frontmatter-заголовка
- orphan_files (×2) — нет входящих wikilinks и не в служебных папках
- undated_todos (×1) — "- [ ]" без YYYY-MM-DD
- duplicate_basenames (×5) — одинаковое имя в разных папках
Baseline сегодня: score=493 (158 файлов).
Выход: audit/DATE-health.md (человекочит) + audit/health-latest.json (для agent-loop).
False-positives зачинены:
- wikilinks внутри backticks/fenced code игнорим
- ../ и ./ пути резолвятся от файла-источника
- CLAUDE.md/README.md не требуют frontmatter
- kb-audit-npm.py: NPM API → сверка с npm-proxy-hosts.md
детектит новые/удалённые hosts + смену backend/SSL
- kb-audit-creds.py: HEAD/GET-ping всех URL из credentials.md
с fallback на GET при 501/405, skip embedded-creds URLs
- kb-audit-dns.py: dig @8.8.8.8 и @10.0.0.1 для всех доменов NPM
детектит NXDOMAIN + split-horizon
Первый прогон нашёл:
- NPM: 2 новых host (router/vpn.dttb.ru), 2 изменения (bitrix24 backend, git SSL)
- Creds: все 12 URL reachable ✓
- DNS: itilegent.ru не резолвится (публичные записи протухли)
Добавлены разделы:
- "Something went wrong" после удаления модели из models.providers.zai.models
- Kiro 402 credits_exhausted — месячный кредит AWS, reset 1 числа
- cx/gpt-5.4 free plan rolling 3h window, не подходит для primary
- Как добавить Kiro-учётку через OmniRoute UI (нужен SSH-туннель или or.dttb.ru в NPM)
Обновлена memory feedback_openclaw_models.md:
- В 2026.4.15 в config нужен префикс zai/, но sessions.json оставлять как есть
- После очистки каталога — /new в Telegram, sed по sessions.json ломает
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- kb_audit_helpers.py — общие функции parse_live/inventory/deleted
- kb-audit-apply.py — применяет только structural факт-правки:
* new VMID → добавить в "🔴 Остановленные" (только для stopped)
* missing VMID → переместить в "🗑️ Удалённые" с датой
- Коммитит как kb-audit-bot <kb-audit@dttb.ru> — фильтруемо в git log
- Safety: live<5 хостов → abort
- Не трогает описания/IP/назначения — только структурные поля из pct list
Cron обновлён: audit → apply → propose (остаток для ручного ревью)
- kb-audit.py: сравнивает живой pct list/qm list с proxmox-inventory.md
→ audit/YYYY-MM-DD-drift.md (только факты, без LLM)
- kb-audit-propose.sh: прогоняет drift через Opus (Max OAuth на code-server)
→ audit/YYYY-MM-DD-proposed.md (patch на ревью)
- scripts/README.md: архитектура и cron-конфиг
Рекомендуемый cron на code-server: 0 6 * * 0 (воскр 06:00)
Правки не применяются автоматом — только ревью + ручной git apply.