From 14c3ad3a21a9ebde11eff7e21ddf2e1bad921918 Mon Sep 17 00:00:00 2001 From: Taiga Date: Fri, 4 Sep 2026 02:07:27 +0000 Subject: [PATCH] [2026-09-04 02:07:27] taiga-vault: family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md family/how-to/vault-git-sync.md --- ...git-identity-loss-silent-commit-failure.md | 54 +++++++++++++++++++ family/how-to/vault-git-sync.md | 2 + 2 files changed, 56 insertions(+) create mode 100644 family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md diff --git a/family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md b/family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md new file mode 100644 index 00000000..e5b7a8e6 --- /dev/null +++ b/family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md @@ -0,0 +1,54 @@ +# 2026-09-04 — Потеря git identity → молчаливый отказ коммитов в sync + +## Симптом + +Трёхфазный sync (`/opt/data/sync-vault.sh`) отрабатывал с exit 0 и «Pushed ✓» по всем +фазам, но изменения с телефона (клон `/obsidian-syncthing`) НЕ доходили до bare-репозитория. + +- `git status --porcelain` в `/obsidian-syncthing` показывал staged `M`/`D`/`A` — файлы + индексировались (`git add -A`), но коммит не происходил. +- В логе `/tmp/vault-sync.log` — только «Pushed ✓» + «Already up to date.» без единой + строки `[main ]` после 2026-09-02 12:17. + +## Причина + +В контейнере отсутствовала git identity (`user.name`/`user.email` не заданы): + +``` +git commit → fatal: unable to auto-detect email address (got 'root@4e97770b2f2f.(none)') +``` + +`sync-vault-lib.sh` глушит ошибку коммита (`2>/dev/null || true`), поэтому фаза «успешно» +шла дальше: fetch/merge/push не находили новых коммитов → «Already up to date.». + +Identity жила в `/root/.gitconfig`, который **не переживает рекреацию контейнера**. +Последний коммит со старой identity — 2026-09-02 12:17 (4bcd0987, `Taiga `), +после инцидента hermes-taiga-crashloop и пересоздания контейнера (бэкапы +`.bak-per-user-20260902-1229`) конфиг слетел. Изменения с телефона копились +~1.5 суток (до 2026-09-04 02:06). + +## Исправление + +В `/opt/data/sync-vault.sh` добавлена идемпотентная установка identity при каждом запуске +(рядом с уже существующим safe.directory — тот же паттерн): + +```bash +git config --global user.name "Taiga" +git config --global user.email "taiga@hermes" +``` + +Проверено: sync закоммитил все накопленные изменения одним коммитом `2b45264` +(23 файла, +654/−459, автор `Taiga `), все три репозитория сошлись на нём, +деревья чистые. + +## Наблюдение (не блокер) + +В коммите много `mode change 100755 => 100644` — нормализация exec-бита, файлы на диске +и в индексе теперь 644, churn не повторяется. Если режимные изменения начнут снова +появляться при записях с телефона — выставить `git config core.filemode false` +в `/obsidian-syncthing` (безопасно на ZFS, см. vault-sync-infrastructure skill). + +## Затронутые файлы + +- `/opt/data/sync-vault.sh` — добавлена установка git identity +- Коммит `2b45264` в bare `/vault.git` (source of truth) diff --git a/family/how-to/vault-git-sync.md b/family/how-to/vault-git-sync.md index cdb89533..3faefe13 100644 --- a/family/how-to/vault-git-sync.md +++ b/family/how-to/vault-git-sync.md @@ -14,6 +14,8 @@ tags: > **STATE 2026-09-02 (позднее обновление):** Eagle/bare repo снова **синхронны** (ahead=0/behind=0, `2fab879`). Ранее (см. ниже) git-sync стоял из-за битых прав `storage/git` — **починено** полной dacl-заменой (`family/documents/vault-sync/2026-09-02-restore-privilege-scope.md` §RESOLVED). > +> **STATE 2026-09-04:** починена потеря git identity в контейнере Taiga (слетела при рекреации после crashloop 09-02) — коммиты молча не проходили ~1.5 суток, изменения телефона не доезжали до bare. Фикс: `sync-vault.sh` теперь идемпотентно ставит `user.name "Taiga"` / `user.email "taiga@hermes"` при каждом запуске. Накопленное закоммичено (`2b45264`). Подробно: `family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md`. +> > **⛔ НОВАЯ проблема 2026-09-02 (не решена):** оба **Taiga-клиента** (`/storage/obsidian` и `/storage/obsidian-syncthing`) **отстали на месяц** — HEAD `ceea848` (2026-08-01) vs bare repo `2fab879` (2026-09-02). Причина: контейнер `hermes-taiga` в **crash-loop** (16339 рестартов) — `uv run hermes gateway run` не может докачать депы (pytz/markdown-it-py) с PyPI, т.к. весь HTTP идёт через **мёртвый `socks5://vless-proxy:1080`**, а `UV_CACHE_DIR=/tmp/uv-cache` пустеет на каждом рестарте. Taiga 3-phase sync (крон внутри агента) не выполняется => телефон видит устаревший vault. Подробно: `family/documents/vault-sync/2026-09-02-hermes-taiga-crashloop.md`. Фикс НЕ применён (ждёт Alex). > **Триггер cron на маке (Eagle) — это launchd, НЕ Hermes cron:** `~/Library/LaunchAgents/com.sync-vault.plist` → `/Users/admin/scripts/sync-vault.sh`, `StartInterval=300` (5 мин). Скрипт `sync-vault-lib.sh` намеренно глушит dead remote (`git fetch` fail → `exit 0`), поэтому launchd показывает `last exit code = 0` даже при фактически стоящем sync. Системный crontab на маке пуст.