diff --git a/family/documents/vault-sync/2026-09-02-dubious-ownership-and-merge-cleanup.md b/family/documents/vault-sync/2026-09-02-dubious-ownership-and-merge-cleanup.md new file mode 100644 index 00000000..e10e3b51 --- /dev/null +++ b/family/documents/vault-sync/2026-09-02-dubious-ownership-and-merge-cleanup.md @@ -0,0 +1,48 @@ +--- +tags: [vault-sync, git, incident, safe-directory, taiga, merge-conflict] +created: 2026-09-02 +updated: 2026-09-02 +status: 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 при каждом запуске): +```bash +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_KEY` vs `***`) → оставлен `JACKETT_KEY`. +- `family/how-to/htpc-emulators-setup.md` — блок Ryujinx: у nas/main детальная таблица (компоненты, 36 игр, symlink-схема), у HEAD более свежая дата статуса (22.06) → объединено: дата 22.06 + полный блок nas/main. Данные не потеряны. +- Разрешение в коммите вместе с заметкой; запушено в bare, фаза 3 донесёт до телефона. + +## Уроки +1. **`/vault.git` должен быть в safe.directory** — скрипт теперь добавляет его сам, идемпотентно. +2. **`sync-vault-lib.sh` коммитит маркеры конфликта** (`git add -A && git commit "merge conflict — committed markers"`) и пушит их — маркеры уезжают на телефон. После любого sync желательна проверка `git grep '^<<<<<<< '`; сам скрипт — кандидат на улучшение (коммитить маркеры, но НЕ пушить до ручного разрешения, или помечать). +3. После 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 diff --git a/family/how-to/htpc-emulators-setup.md b/family/how-to/htpc-emulators-setup.md index c7ecd273..92a27571 100644 --- a/family/how-to/htpc-emulators-setup.md +++ b/family/how-to/htpc-emulators-setup.md @@ -393,12 +393,8 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus ## Ryujinx (Nintendo Switch) -<<<<<<< HEAD **Версия:** 1.3.3 (Ryubing fork, Flatpak `io.github.ryubing.Ryujinx`) **Статус:** ✅ Работает (22.06.2026) -======= -**Версия:** 1.3.3 (Ryubing fork, Flatpak `io.github.ryubing.Ryujinx`) -**Статус:** ✅ Работает (10.06.2026) **Компоненты:** | Компонент | Статус | Путь | @@ -450,7 +446,6 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus **Transmission:** `/data/Switch Roms` (case-sensitive, с пробелом) мапится в `/run/media/system/Data/Switch Roms/` через mount `/data` → `/run/media/system/Data` ->>>>>>> nas/main → Подробно: [[switch-emulation-rom-infra]] ### Компоненты diff --git a/family/how-to/switch-emulation-rom-infra.md b/family/how-to/switch-emulation-rom-infra.md index 7857a680..8cf7feed 100644 --- a/family/how-to/switch-emulation-rom-infra.md +++ b/family/how-to/switch-emulation-rom-infra.md @@ -204,11 +204,7 @@ Web UI: `http://192.168.1.15:9117` ### API — как Eagle ищет игру ```bash # Поиск через Jackett Torznab API -<<<<<<< HEAD curl "http://192.168.1.15:9117/api/v2.0/indexers/rutracker/results/torznab/?apikey=JACKETT_KEY&t=search&q=Donkey+Kong+Tropical+Freeze+Switch&cat=8000" -======= -curl "http://192.168.1.15:9117/api/v2.0/indexers/rutracker/results/torznab/?apikey=***&t=search&q=Donkey+Kong+Tropical+Freeze+Switch&cat=8000" ->>>>>>> nas/main # Возвращает XML/JSON с magnet-ссылками и метаданными ```