diff --git a/family/documents/vault-sync/2026-09-21-http402-balance-outage.md b/family/documents/vault-sync/2026-09-21-http402-balance-outage.md new file mode 100644 index 00000000..9a08e255 --- /dev/null +++ b/family/documents/vault-sync/2026-09-21-http402-balance-outage.md @@ -0,0 +1,88 @@ +--- +date: 2026-09-21 +tags: [vault-sync, cron, incident, deepseek, provider] +--- + +# 2026-09-21 — простой sync 30 мин из-за HTTP 402: Insufficient Balance (провайдер) + +## Что случилось + +Шесть подряд тиков cron-задачи `sync-vault` (id `29851c413903`) упали с ошибкой +провайдера LLM: + +``` +RuntimeError: HTTP 402: Insufficient Balance +``` + +Тики: `03:55:11`, `04:00:12`, `04:05:13`, `04:10:14`, `04:15:15`, `04:20:16` UTC. +Каждый падал за 3–14 с — это отказ на стороне LLM API, не на стороне git. + +Следствие: `/tmp/vault-sync.log` — дыра `03:50:18 → 04:25:34` (35,3 мин, 7 пропущенных слотов). +Последний успешный тик до сбоя: `03:50:10` (completed). + +## Восстановление + +Тик `04:25:18` (ручной прогон `bash /opt/data/sync-vault.sh`) — **completed**, exit 0, +все три фазы `Pushed ✓`. Баланс/провайдер к этому моменту снова отвечал. + +Бэклог за время простоя влит одним махом: + +``` +[2026-09-21 04:25:34] [syncthing] Pushed ✓ + [main 5e02428] syncthing: family/documents/movies-watchlist.md personal/documents/fly-box.md + Merge made by the 'ort' strategy. + family/plans/watchlist-cleanup.md | 78 +++++++++++++++++++++++++++++++----- + Updating 6d83071..80c062f (Fast-forward) + family/documents/movies-watchlist.md | 6 +-- + personal/documents/fly-box.md | 9 ++++- +[2026-09-21 04:25:47] [taiga-vault] Pushed ✓ +[2026-09-21 04:25:49] [syncthing-out] Pushed ✓ +``` + +Проверка выравнивания (все три SHA равны, рабочие каталоги чистые): + +``` +bare 80c062f3fbf5a9909cfc1f8b839b7a4abcd4086a +/vault 80c062f3fbf5a9909cfc1f8b839b7a4abcd4086a +/obsidian-syncthing 80c062f3fbf5a9909cfc1f8b839b7a4abcd4086a +git status --porcelain → пусто (оба клона) +``` + +**Данные не потеряны** — git-синк идемпотентен, следующий удачный тик догнал всё. + +## Причина + +`HTTP 402: Insufficient Balance` — исчерпан баланс аккаунта LLM-провайдера (DeepSeek). +Задача `sync-vault` — prompt-задача, каждый тик требует LLM-раунда, поэтому при нулевом +балансе скрипт вообще не запускается: падает не git, падает агентский раунд. + +Это **новый, ранее не встречавшийся в таком объёме** режим отказа: до этого в +`executions.db` был лишь однократный 402 (в заметке `2026-09-14-cron-api-timeout-sync-outage.md` +он упоминался как повод «проверить баланс провайдера»). + +## Статистика окна (executions.db, окно 2026-09-17 11:40 → 2026-09-21 04:25) + +| статус | всего | +|---|---| +| completed | 979 | +| failed | 20 (6 из них — HTTP 402 сегодня) | +| unknown | 1 | +| running | 1 (текущий) | + +Ошибка 402: ровно 6 записей, окно `03:55:11 → 04:20:16` — единичный эпизод, не серия. + +## Вывод и что делать + +1. Эпизод короткий, самовосстановившийся, потерь данных нет — вмешательство в конфиг + sync **не требуется**. +2. Но 402 — это про деньги на счёте провайдера, а не про git. Пока баланс пуст, падают + **все** cron-задачи Hermes, а не только sync. Стоит проверить баланс DeepSeek и + держать запас / настроить авто-пополнение. +3. Радикальное устранение самой зависимости от LLM в этой петле — перевод задачи в + `--no-agent --script` (см. раздел «Возможное устранение» в скилле + `vault-sync-infrastructure`): тогда 402/таймауты провайдера перестанут ронять sync. + +## Связанные заметки + +- `family/documents/vault-sync/2026-09-20-morning-sync-outage.md` — предыдущий эпизод (3 ч 10 мин, таймауты провайдера) +- скилл `vault-sync-infrastructure` → разделы «Разрыв >30 мин» и «Exit code 0, но push не случился»