diff --git a/family/documents/vault-sync/2026-09-28-http402-balance-outage-3.md b/family/documents/vault-sync/2026-09-28-http402-balance-outage-3.md new file mode 100644 index 00000000..34df14f9 --- /dev/null +++ b/family/documents/vault-sync/2026-09-28-http402-balance-outage-3.md @@ -0,0 +1,88 @@ +--- +date: 2026-09-28 +tags: [vault-sync, cron, incident, deepseek, provider, http402] +--- + +# 2026-09-28 — третий 402-эпизод: sync стоял 74 мин (13 тиков), 06:15–07:20 UTC + +## Что случилось + +Тики cron-задачи `sync-vault` (id `29851c413903`) падали с + +``` +RuntimeError: HTTP 402: Insufficient Balance (request_id: …) +``` + +| параметр | значение | +|---|---| +| первый упавший тик | `06:15:43` UTC (7,4 с) | +| последний упавший | `07:20:02` UTC (7,6 с) | +| упавших тиков | **13** (каждый 4,3–8,9 с — отказ LLM API, не git) | +| последний успешный до сбоя | `06:10:42` (21,6 с; лог-строки `06:10:51/55/57`) | +| дыра в `/tmp/vault-sync.log` | `06:10:57 → 07:25:07` = **74,2 мин** | + +Скрипт в упавших тиках не запускался вообще (prompt-задача без `--no-agent`), поэтому +фаза «телефон → bare» и обе обратные фазы не выполнялись. + +## Восстановление (само) + +Первый успешный тик — `07:25:02` (completed за 25,1 с): догнал бэклог Eagle/Kraken +`Updating 1e44c42..6dfedbc` (`personal/plans/balda-callee-prism-plan.md` +63/−9, +`personal/plans/balda-mm-pr8-review-fixes.md` — mode-flip), три фазы `Pushed ✓`. + +Второй тик (проверочный, Taiga, `07:30:03`) влил остаток бэклога `Updating 6dfedbc..0ac3efb`: +`family/projects/media-toolbox-taiga.md`, `personal/plans/flaresolverr-taiga-deploy.md`, +`personal/tech/flaresolverr-taiga.md` — 3 файла, +259/−265 (переписаны два flaresolverr-файла). +Потерь нет — git-синк идемпотентен, всё доехало за два тика. + +## Проверка после восстановления (2026-09-28 07:32 UTC) + +``` +bare 0ac3efb2f552fcb017a7ac48a16c8888b00f6409 +/vault 0ac3efb2f552fcb017a7ac48a16c8888b00f6409 +/obsidian-syncthing 0ac3efb2f552fcb017a7ac48a16c8888b00f6409 +git status --porcelain → пусто в обоих клонах +git ls-files -u → 0 в обоих клонах +маркеры конфликта вне fenced-блоков → 0 (python-обход) +origin /obsidian-syncthing → file:///vault.git, insteadOf → 2 правила +Push failed 1 (историческая гонка 09-27 10:46), Fetch failed 4 (исторические 09-26 09:40) +ошибок хука post-receive (host-путь) 0, «No such file» 0, лог 28547 строк +``` + +## Статистика окна (executions.db) + +Таблица обрезается до последних ~1001 записи; окно: `2026-09-24 20:10 → 2026-09-28 07:30` UTC. + +| статус | всего | +|---|---| +| non-completed | 68 | +| из них 402 `09-25 10:45→15:05` | 53 | +| из них 402 `09-28 06:15→07:20` | **13 (этот эпизод)** | +| из них 503 `09-23 07:35` | 1 | +| из них running (текущий тик) | 1 | + +## Вывод: третий 402-эпизод, тренд по длительности хуже не стал + +| эпизод | тиков | длительность | +|---|---|---| +| 2026-09-21 03:55 → 04:20 | 6 | 35,3 мин | +| 2026-09-25 10:45 → 15:05 | 53 | 264,6 мин | +| **2026-09-28 06:15 → 07:20** | **13** | **74,2 мин** | + +Эпизоды повторяются с периодичностью ~3 суток и всегда заканчиваются сами (внешнее +пополнение баланса). 402 — это про деньги на счёте провайдера, а не про git; пока баланс +пуст, падают **все** prompt-задачи Hermes, потому что каждый тик требует LLM-раунда. + +Что стоит сделать (решение владельца, Taiga молча не меняет): + +1. **Запас на балансе DeepSeek / авто-пополнение** — снимает 402-эпизоды целиком. +2. **Убрать LLM из петли sync:** `hermes cron edit 29851c413903 --no-agent --script ` + (ловушка: `--script` ждёт файл под `~/.hermes/scripts/`, а `/root/.hermes` в контейнере + не переживает рекреацию — нужен персистентный путь, симлинк на `/opt/data/`). +3. Пин модели/провайдера (`--model` / `--provider`) как страховка от деградации одного провайдера. + +## Связанные заметки + +- `family/documents/vault-sync/2026-09-21-http402-balance-outage.md` — первый эпизод (6 тиков, 35 мин) +- `family/documents/vault-sync/2026-09-25-http402-balance-outage.md` — второй, худший эпизод (53 тика, 4 ч 25 мин) +- скилл `vault-sync-infrastructure` → разделы «Разрыв >30 мин» и «Возможное устранение»