Files
obsidian-vault/family/documents/vault-sync/2026-10-17-mode-flip-filemode-fix.md
T

3.1 KiB
Raw Blame History

date, tags
date tags
2026-10-17
vault-sync
git
mode-flip
fix

2026-10-17 — mode-flip 644↔755: fileMode выключен в sync-vault.sh

Симптом

В /tmp/vault-sync.log накопилось 1705 строк mode change (файл на 51 316 строк). Фазы syncthing / syncthing-out каждые 5 минут создавали коммиты вида:

[2026-10-17 20:20:35] syncthing-out: "work/zoom-transcripts/2026-10-15 ..." work/zoom-transcripts/index.json
 3 files changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 work/zoom-transcripts/index.json

и обратные 100755 => 100644. Содержимое не менялось — пустые коммиты с режимом.

Причина

  • /obsidian-syncthing (клон, куда пишет телефон через Syncthing): core.fileMode = true
  • /vault (агент): core.fileMode = false

Syncthing на телефоне/десктопе пишет файлы как -rwxrwxr-- (0754/0755), агентский клон — 0644. Оба коммитят в один bare → режим «пинг-понгом» уезжает и возвращается. Класс описан в skill vault-sync-infrastructure (случай 2026-09-26, personal/tech), там же стояло «решение владельца, Taiga молча не меняет».

Что сделано

В /opt/data/sync-vault.sh добавлен идемпотентный блок перед тремя фазами:

for d in /vault /obsidian-syncthing; do
  [ "$(git -C "$d" config --get core.fileMode || true)" = "false" ] \
    || git -C "$d" config core.fileMode false || true
done

Ставится каждый прогон, а не разово: .git/ клона /obsidian-syncthing сам синкается Syncthing'ом с других устройств и может быть перезаписан (та же механика, что с флипом origin 2026-09-26).

Проверка

  • bash -n /opt/data/sync-vault.sh — ок
  • git -C /vault config --get core.fileMode → false; git -C /obsidian-syncthing config --get core.fileMode → false
  • два прогона подряд: HEAD bare до c71c153c7b90…, после c71c153c7b90… — новых коммитов нет, в логе только Already up to date.
  • git status --porcelain пуст в /vault и /obsidian-syncthing
  • строки mode change после 20:21:02 не появляются (последние три — применение старого коммита c71c153 фазой 1, не новый churn)

Откат

# убрать блок из /opt/data/sync-vault.sh
git -C /obsidian-syncthing config core.fileMode true

На ZFS exec-бит для заметок смысла не несёт, fileMode=false безопасен. Разовая нормализация через git add --chmod=644 -A без выключения filemode бесполезна — вернётся на следующем массовом проходе Syncthing.