Files
obsidian-vault/family/how-to/vault-sync-pipeline.md
T

129 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Vault sync — архитектура и ручной прогон"
aliases: [vault-sync, синк vault, sync-vault.sh, телефон не видит vault]
tags: [family, how-to, vault, sync, syncthing, cron]
created: 2026-09-15
updated: 2026-09-15
---
# Vault sync — архитектура и ручной прогон
> **Зачем документ:** правки в vault (Obsidian) на Mac **не появляются на телефоне сами по себе**. Есть отдельная петля синхронизации с тремя фазами, которая гоняется cron-задачей. Без прогона этой петли телефон правку не увидит.
> **Инциденты синка** (таймауты LLM, «тик completed но скрипт не запущен») — [[family/documents/vault-sync/2026-09-14-cron-api-timeout-sync-outage]].
---
## 1. Три звена (не путать!)
| Звено | Что это | Кто驱动 |
|---|---|---|
| **1. Рабочий клон Mac** | `/Users/admin/obsidian` — где правит агент | агент (git add/commit/push) |
| **2. Bare-репозиторий** | `/mnt/RED_2TB/storage/git/obsidian-vault.git` на NAS (`mallexxx.duckdns.org`) | приём push от Mac |
| **3. SyncThing-папка** | `/mnt/RED_2TB/storage/obsidian-syncthing` на NAS | **раздаёт на телефон** через SyncThing |
> ⚠️ **ГЛАВНАЯ ОШИБКА:** думать, что `git push` с Mac = правка на телефоне.
> **`git push` доезжает только до bare (звено 2).** Телефон читает **звено 3** — `obsidian-syncthing`. Между ними — петля `sync-vault.sh`, которая делает pull в звено 3.
### Проверка расхождения (диагностика «телефон не видит»)
```bash
# Mac
cd /Users/admin/obsidian && git log --oneline -1
# NAS: все клоны должны быть на ТОМ ЖЕ коммите, что Mac
ssh truenas_admin@mallexxx.duckdns.org '
cd /mnt/RED_2TB/storage/git/obsidian-vault.git && echo -n "bare: " && git log --oneline -1 main
cd /mnt/RED_2TB/storage/obsidian-syncthing && echo -n "syncthing: " && git log --oneline -1
cd /mnt/RED_2TB/storage/obsidian && echo -n "obsidian: " && git log --oneline -1'
```
**Если `syncthing:` отстаёт** — телефон правку не увидит, пока не прогонится sync-петля.
---
## 2. sync-vault.sh — три фазы
**Скрипт:** `/opt/data/sync-vault.sh` — живёт **в окружении Hermes (контейнер)**, НЕ на NAS.
На NAS его нет (`ls /opt/data/sync-vault.sh` → нет файла), поэтому пулль «руками оттуда» не выйдет.
**Лог:** `/tmp/vault-sync.log` (тоже в контейнере).
Скрипт печатает по три timestamped строки `Pushed ✓` — по одной на фазу:
| Фаза | Что делает |
|---|---|
| `[syncthing]` | стягивает изменения с Eagle/Кракена, коммитит и пушит |
| `[taiga-vault]` | пушит изменения из `vault/` |
| `[syncthing-out]` | пушит в SyncThing-папку → **то, что увидит телефон** |
> **Признак успеха:** три строки `Pushed ✓`. Если в логе за тик **ноль строк** — скрипт вообще не запускался (см. инцидент 2026-09-14, «второй режим отказа»).
---
## 3. Как прогнать синк вручную
**Cron-задача Hermes:** `sync-vault`, **id `29851c413903`**, расписание `*/5 * * * *`, prompt = `bash /opt/data/sync-vault.sh >> /tmp/vault-sync.log 2>&1`.
```bash
# 1) Найти задачу
cronjob action='list'
# 2) Прогнать принудительно
cronjob action='run' job_id='29851c413903'
```
**⚠️ Питфолл:** задача оформлена как **prompt**, а не как `--script`, поэтому её исполняет LLM-раунд. Последствия:
- провайдер не отвечает → тик висит до 600 с, очередь блокируется на 30–57 мин;
- агент может ответить текстом **без вызова инструмента** → статус `completed`, но скрипт **не запущен** (~6,6 % тиков).
**Правильный фикс (не сделан, требует решения Alex):** `--no-agent --script <script>`.
**Проверка результата после прогона:**
```bash
# в контейнере Hermes
tail -6 /tmp/vault-sync.log # ожидаем три «Pushed ✓»
# на NAS — все три клона на одном коммите
ssh truenas_admin@mallexxx.duckdns.org '
cd /mnt/RED_2TB/storage/obsidian-syncthing && git log --oneline -1'
```
---
## 4. Питфолл: `git fetch origin` на NAS не работает
В клонах на NAS remote настроен как **`origin → /vault.git`** — это путь **внутри контейнера Hermes**, а не на NAS.
```
$ cd /mnt/RED_2TB/storage/obsidian-syncthing && git remote -v
origin /vault.git (fetch)
origin /vault.git (push)
```
```bash
git fetch origin # → Please make sure you have the correct access rights and the repository exists
git merge --ff-only origin/main # → Already up to date (ложь — реально отстаёт)
```
> **Вывод:** «Always up to date» на NAS **не значит, что приехало** — remote ведёт в недоступный путь.
> Пулль в NAS-клоны **из NAS невозможен**. Обновление звена 3 делает **только** `sync-vault.sh` из контейнера Hermes.
> Не тратить время на `git fetch` по SSH на NAS — идти сразу в `cronjob action='run'`.
---
## 5. Контрольный список «правка должна дойти до телефона»
1. `cd /Users/admin/obsidian && git add -A && git commit -m "..."` — коммит на Mac.
2. `git push nas HEAD`**проверить**, что push прошёл (`4f156ee..71efdd0 HEAD -> main`).
`git status --short` → пусто = рабочее дерево чисто.
3. **Прогнать sync-петлю:** `cronjob action='run' job_id='29851c413903'`.
4. Проверить: `tail /tmp/vault-sync.log` → три `Pushed ✓`; NAS-клон `obsidian-syncthing` на том же коммите.
5. Только после шага 3–4 правка появится на телефоне.
> ⚠️ `git push` **без** шага 3 = правка есть на Mac и в bare, но **телефон её не видит**. Это и есть исходная жалоба «какого хуя я её на телефоне по syncthing не вижу».
---
## Связанные заметки
- [[family/documents/vault-sync/2026-09-14-cron-api-timeout-sync-outage]] — инциденты синка, аудит executions.db
- [[personal/tasks/vault-sync-cron]] — журнал прогонов
- [[family/how-to/vault-sync-summary]] — ранняя сводка