[2026-09-15] vault-sync: операционный документ README.md (как работает, как запустить синк руками)

This commit is contained in:
Alexey Martemyanov
2026-09-15 11:37:04 +06:00
parent 71efdd0dac
commit 787ad01cff
5 changed files with 260 additions and 0 deletions
+1
View File
@@ -122,3 +122,4 @@ curl -s -X POST -H @/tmp/h1 -H "Content-Type: application/json" \
- [[family/how-to/home-automation]] — единый справочник: топология, железо, Zigbee, Modbus, команды, сценарии, питфоллы
- [[family/documents/home-automation-wishlist]] — роадмап идей и приоритетов
- [[family/how-to/vault-sync-pipeline]] — правки в vault не доедут до телефона без прогона sync-петли
+1
View File
@@ -9,6 +9,7 @@ updated: 2026-09-15
> **Единственный справочник по домашней автоматизации.** Всё: топология, железо, Zigbee, Modbus, доступ, команды, сценарии, питфоллы.
> **Автоматизации** (16 шт., логика, дефекты) — [[family/how-to/ha-automations]].
> 📄 Правка этой доки не появится на телефоне после `git push` — нужен прогон sync-петли: [[family/how-to/vault-sync-pipeline]].
---
+128
View File
@@ -0,0 +1,128 @@
---
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]] — ранняя сводка