diff --git a/family/documents/vault-sync/2026-09-25-http402-balance-outage.md b/family/documents/vault-sync/2026-09-25-http402-balance-outage.md new file mode 100644 index 00000000..51ad8741 --- /dev/null +++ b/family/documents/vault-sync/2026-09-25-http402-balance-outage.md @@ -0,0 +1,96 @@ +--- +date: 2026-09-25 +tags: [vault-sync, cron, incident, deepseek, provider, http402] +--- + +# 2026-09-25 — простой sync 4 ч 24 мин: HTTP 402 Insufficient Balance, 53 тика подряд + +## Что случилось + +Самый длинный на сегодня эпизод отказа провайдера LLM. Тики cron-задачи `sync-vault` +(id `29851c413903`) падали с: + +``` +RuntimeError: HTTP 402: Insufficient Balance (request_id: …) +``` + +- Первый упавший тик: `10:45:55` UTC (за 15,0 с) +- Последний упавший: `15:05:29` UTC (за 3,1 с) +- **Всего 53 failed-тика подряд**, каждый падал за 3–8 с — отказ LLM API, не git +- Дыра в `/tmp/vault-sync.log`: `10:45:59 → 15:10:34` = **264,6 мин (4 ч 24,6 мин)** +- Последний успешный тик до сбоя: `10:45:55` (лог-строки `10:45:59`, все три фазы `Pushed ✓`) + +Тик `10:45:55` — пограничный: он успел отработать скрипт (10:45:59 три `Pushed ✓`), но +финальный LLM-раунд упал с 402. Начиная с `10:50:56` скрипт не запускался вообще. + +## Восстановление + +Баланс был пополнен (внешнее действие, не мной). Тик `15:10:29` — **completed** за 22,1 с, +первый же прогон догнал весь бэклог: + +``` +[2026-09-25 15:10:34] [syncthing] Pushed ✓ + [main 4b56818] syncthing: personal/creative/aphorisms.md (правка с телефона, ждала ~4 ч 25 мин) + Merge made by the 'ort' strategy. + work/projects/cpm-web-extension-breakage-validation.md | 14 ++-- + work/tech-design/coredata-code-defined-models.md | 79 +++++++++++++++++ + Updating 9d78fa0..dec30c1 (Fast-forward) +[2026-09-25 15:10:47] [taiga-vault] Pushed ✓ +[2026-09-25 15:10:49] [syncthing-out] Pushed ✓ +``` + +Дальше каденция ровная: `15:15`, `15:20`, `15:25`, `15:30`, `15:35`, `15:40` — все +`completed`, три фазы `Pushed ✓` на каждом. + +## Проверка после восстановления (2026-09-25 15:41 UTC) + +``` +bare 1d5408abe6cab694a53214a155b7b97559b8ffa7 +/vault 1d5408abe6cab694a53214a155b7b97559b8ffa7 +/obsidian-syncthing 1d5408abe6cab694a53214a155b7b97559b8ffa7 +git status --porcelain → пусто (оба клона) +маркеров конфликта (^<<<<<<< / ^>>>>>>>) → 0 +ошибок хука post-receive (host-путь) → 0 +лога 19640 строк +``` + +Бэклог влит полностью, потерь нет — git-синк идемпотентен. + +## Статистика окна (executions.db) + +Таблица обрезается до последних ~1001 записи; окно на момент разбора: +`2026-09-22 04:20 → 2026-09-25 15:40` UTC. + +| статус | всего | +|---|---| +| completed | 946 | +| failed | 54 (53 из них — 402 сегодня + 1 × 503 от 09-23 07:35) | +| running | 1 (текущий) | + +## Вывод: это уже второй 402-эпизод, и он на порядок длиннее + +| эпизод | тиков | длительность | +|---|---|---| +| 2026-09-21 03:55 → 04:20 | 6 | 35,3 мин | +| **2026-09-25 10:45 → 15:05** | **53** | **4 ч 24,6 мин** | + +Тренд плохой: 402 — это про деньги на счёте провайдера, а не про git. Пока баланс пуст, +падают **все** prompt-задачи Hermes (включая sync-vault), потому что каждый тик требует +LLM-раунда. Сегодня четыре с половиной часа не синхронизировался телефон. + +Что стоит сделать (решение владельца, я это не меняю молча): + +1. **Держать запас на балансе DeepSeek / включить авто-пополнение.** Минимальное действие, + снимает 402-эпизоды целиком. +2. **Убрать LLM из петли sync:** `hermes cron edit 29851c413903 --no-agent --script `. + Тогда таймауты и 402 провайдера перестанут ронять синхронизацию. Ловушка известна: + `--script` ждёт файл под `~/.hermes/scripts/`, а `/root/.hermes` в контейнере не + существует и не переживает рекреацию — нужен персистентный путь (симлинк на `/opt/data/`). +3. Альтернатива/дополнение — пин модели или провайдера (`--model` / `--provider`), чтобы + деградация одного провайдера не роняла задачу. + +## Связанные заметки + +- `family/documents/vault-sync/2026-09-21-http402-balance-outage.md` — первый 402-эпизод (6 тиков, 35 мин) +- `family/documents/vault-sync/2026-09-20-morning-sync-outage.md` — эпизод таймаутов провайдера (3 ч 10 мин) +- скилл `vault-sync-infrastructure` → разделы «Разрыв >30 мин» и «Возможное устранение»