scripts: kb-audit + propose — еженедельный drift-детектор для inventory

- 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.
This commit is contained in:
dttb
2026-04-18 00:23:07 +03:00
parent 13469e8ec3
commit 6368738ade
4 changed files with 266 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
#!/bin/bash
# kb-audit-propose — прогоняет последний drift-отчёт через Claude Opus,
# получает предложенные правки в inventory-файл.
# Запускать ПОСЛЕ kb-audit.py.
# Работает на code-server (где есть claude CLI с Max подпиской).
set -u
VAULT="$(cd "$(dirname "$0")/.." && pwd)"
DATE=$(date +%Y-%m-%d)
DRIFT="$VAULT/audit/${DATE}-drift.md"
OUT="$VAULT/audit/${DATE}-proposed.md"
if [ ! -f "$DRIFT" ]; then
echo "drift-отчёт не найден: $DRIFT. Запусти сначала kb-audit.py" >&2
exit 1
fi
# если уже есть сегодняшний proposed — skip (не дёргаем Opus попусту)
if [ -f "$OUT" ] && [ "$OUT" -nt "$DRIFT" ]; then
echo "proposed уже свежее drift: $OUT" >&2
exit 0
fi
cd "$VAULT" || exit 1
PROMPT="Ниже: а) отчёт drift-аудита инфраструктуры Proxmox, б) актуальный файл inventory.
Задача: предложи конкретные правки в projects/dttb/proxmox-inventory.md чтобы устранить drift.
НЕ правь файл сам. Выдай:
1. Краткое резюме (1-3 предложения) что изменилось
2. Список конкретных блоков для добавления/удаления/изменения (формат markdown diff блоков с пояснением)
3. Предупреждения если что-то неоднозначное
Не выдумывай данных которых нет в drift-отчёте. Используй factual IP/hostname только из отчёта."
{
echo "$PROMPT"
echo ""
echo "---"
echo "## DRIFT-ОТЧЁТ"
echo ""
cat "$DRIFT"
echo ""
echo "---"
echo "## ТЕКУЩИЙ INVENTORY"
echo ""
cat "$VAULT/projects/dttb/proxmox-inventory.md"
} | claude -p --permission-mode plan > "$OUT.tmp" 2>&1
if [ -s "$OUT.tmp" ]; then
{
echo "---"
echo "date: $DATE"
echo "type: audit-proposed"
echo "source: kb-audit-propose.sh (Opus 4.7)"
echo "tags: [audit, proposed, inventory]"
echo "---"
echo ""
echo "# Предложенные правки inventory — $DATE"
echo ""
echo "Сгенерировано Claude Opus на основе [[${DATE}-drift|drift-отчёта]]."
echo "**Правки НЕ применены.** Ревью — ты. Apply — вручную."
echo ""
cat "$OUT.tmp"
} > "$OUT"
rm "$OUT.tmp"
echo "proposed saved: $OUT"
else
echo "Claude вернул пустой ответ" >&2
rm -f "$OUT.tmp"
exit 2
fi