5.8 KiB
tags, created, updated, status
| tags | created | updated | status | ||||||
|---|---|---|---|---|---|---|---|---|---|
|
2026-09-02 | 2026-09-02 | resolved 2026-09-02 — sync-vault.sh fixed (safe.directory /vault.git), sync работает, конфликты разрешены |
Incident 2026-09-02: hermes-taiga vault-sync молча падал (dubious ownership /vault.git) + разбор накопленных merge-конфликтов
Контекст: после crash-loop (см. 2026-09-02-hermes-taiga-crashloop) агент поднялся, первый cron-sync в 12:13 отработал молча и впустую — все 3 фазы в логе: Fetch failed (origin offline?) — skipping merge/push. На вид graceful skip, по факту sync стоял.
Корень: safe.directory без /vault.git
sync-vault.sh добавлял safe.directory только для /vault и /obsidian-syncthing, но НЕ для /vault.git — bare remote, из которого все три фазы делают git fetch file:///vault.git. Я (агент) работаю под root, а /vault.git принадлежит uid 950 (truenas_admin) → git отказывает: fatal: detected dubious ownership in repository at '/vault.git' (exit 128). sync-vault-lib.sh глушит ошибку fetch (exit 0) → каждый час: commit локально, push не происходит, изменений никто не видит. Тот же паттерн «молчаливой смерти sync» уже фиксировался для launchd на маке (см. 2026-09-02-restore-privilege-scope §1).
Фикс (в /opt/data/sync-vault.sh): идемпотентный цикл вместо двух безусловных --add (которые к тому же дублировали записи в ~/.gitconfig при каждом запуске):
for d in /vault /obsidian-syncthing /vault.git; do
git config --global --get-all safe.directory 2>/dev/null | grep -qxF "$d" \
|| git config --global --add safe.directory "$d"
done
Разбор мержа после фикса
Повторный прогон (12:14) прошёл: фаза 1 запушила телефонные изменения (новый файл work/projects/cpm-extension-health-pixels-privacy-triage.md), фаза 2 дала merge-конфликт, фаза 3 утащила конфликтную версию в телефонную копию.
Конфликт 1 (сегодняшний): family/how-to/truenas-sata-ports-and-zfs-pools.md
- Локальная сторона (HEAD, коммит
811f807): правка сессии от 17.08 поверх базы 01.08 — агент был в crash-loop весь август,/vaultотставал на месяц (база ceea848/01.08). - Сторона origin/main: актуальная линия bare (правки до 24.08: падение HGST, спасение данных на IronWolf, пересоздание пула RED_2TB ONLINE).
sync-vault-lib.shзакоммитил маркеры (d5ede3f merge conflict — committed markers) и запушил → маркеры ушли на телефон.- Разрешено: взята версия origin/main (^2,
6807731) — локальная сторона полностью устаревшая/поглощённая, уникальных данных нет. Коммит5bdd673запушен.
Конфликты 2 и 3 (старые, с 18.06.2026, маркеры nas/main)
Нашлись при проверке git grep '^<<<<<<< ' — закоммичены ещё июньским инцидентом (68090c8 [2026-06-18] taiga-vault: merge conflict — committed markers), висели в контенте vault (и на телефоне) больше 2 месяцев:
family/how-to/switch-emulation-rom-infra.md— различие только в плейсхолдере apikey (JACKETT_KEYvs***) → оставленJACKETT_KEY.family/how-to/htpc-emulators-setup.md— блок Ryujinx: у nas/main детальная таблица (компоненты, 36 игр, symlink-схема), у HEAD более свежая дата статуса (22.06) → объединено: дата 22.06 + полный блок nas/main. Данные не потеряны.- Разрешение в коммите вместе с заметкой; запушено в bare, фаза 3 донесёт до телефона.
Уроки
/vault.gitдолжен быть в safe.directory — скрипт теперь добавляет его сам, идемпотентно.sync-vault-lib.shкоммитит маркеры конфликта (git add -A && git commit "merge conflict — committed markers") и пушит их — маркеры уезжают на телефон. После любого sync желательна проверкаgit grep '^<<<<<<< '; сам скрипт — кандидат на улучшение (коммитить маркеры, но НЕ пушить до ручного разрешения, или помечать).- После crash-loop/долгого простоя агента merge локальной устаревшей копии с bare почти гарантированно даст конфликты — локальная сторона обычно устаревшая, истина в bare/маке.
Связанные заметки
- 2026-09-02-hermes-taiga-crashloop — родитель: почему sync стоял с августа
- 2026-09-02-restore-privilege-scope — родитель: поломка прав после restore (решена), паттерн «молчаливый sync»
- vault-git-sync / obsidian-sync — архитектура sync