From e9807caa045333f5ece4f3509e8ac27778322190 Mon Sep 17 00:00:00 2001 From: Hermes Date: Sat, 20 Jun 2026 09:00:02 +0600 Subject: [PATCH] [2026-06-20] kraken: family/how-to/vault-git-sync.md --- family/how-to/vault-git-sync.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/family/how-to/vault-git-sync.md b/family/how-to/vault-git-sync.md index 9a836fc1..340a7822 100644 --- a/family/how-to/vault-git-sync.md +++ b/family/how-to/vault-git-sync.md @@ -1,6 +1,6 @@ --- title: Vault Git Sync — Architecture & Scripts -updated: '2026-06-02' +updated: '2026-06-20' type: tech tags: - vault @@ -124,6 +124,29 @@ cd ~/Developer/vault-sync-test && bash test-sync.sh ## History +- **2026-06-20**: Kraken ACL fix. mcpvault (Hermes контейнер, uid 10000) не мог писать в существующие файлы vault из-за прав (EACCES). Подробно: + + **Проблема 1 — права доступа:** файлы в vault создаются от uid 1000 (kraken через git на хосте), а mcpvault в контейнере работает от uid 10000. `patch_note` падал: `EACCES: permission denied`. `delete_note` + `write_note` срабатывали, но mcpvault при write перезаписывает файл целиком, переформатируя YAML фронтматер (убирает кавычки, меняет стиль) — шум в git-diff. + + **Проблема 2 — экранирование backtick в patch_note:** mcpvault `patch_note` не может найти строку, содержащую тройные обратные кавычки (`` ``` ``). Пришлось якориться на соседнюю строку без backtick — например, на `\n\n## Заголовок` вместо `\`\`\`\n\n## Заголовок`. + + **Решение — ACL ext4 (setfacl):** + ```bash + sudo setfacl -R -m u:10000:rwx /srv/.../obsidian # mcpvault — write + sudo setfacl -R -d -m u:10000:rwx /srv/.../obsidian # default для новых файлов + sudo setfacl -R -m g:kraken:rwx /srv/.../obsidian # kraken (uid 1000) — write + sudo setfacl -R -d -m g:kraken:rwx /srv/.../obsidian # default для новых файлов + ``` + + **Итоговая совместимость:** uid 10000 (mcpvault) и uid 1000 (kraken/git) могут читать и писать одни и те же файлы. `patch_note` работает без EACCES. + + **Ограничение (mcpvault patch_note + backtick):** `patch_note` не может найти строку, содержащую тройные обратные кавычки (`` ``` ``). Пример: нужно было вставить новый раздел между closing code fence `\`\`\`` и заголовком `## Исправления (v0.0.92...`. Варианты `oldString`, которые **НЕ сработали**: + - `"}\n\n\`\`\`\n\n## Исправления (v0.0.92..."` — не найдено + - `"\`\`\`\n\n\n## Исправления (v0.0.92..."` — не найдено + - Любая комбинация пустых строк между `\`\`\`` и заголовком — не найдено + + **Что сработало:** якориться на соседнюю строку **без** обратных кавычек. Вместо `\`\`\`\n\n## Исправления...` использовать `\n\n## Исправления (v0.0.92...` — замена пустой строки + заголовка, куда перед заголовком вставляется новый контент, а сам заголовок остаётся. `patch_note(oldString="\n\n## Исправления (v0.0.92...")` — найдено и отработало. + - **2026-05-23**: Taiga deleted 32+ wiki files. Root cause: `git add -A` before merge staged deletions of files outside sparse cone. Fixed with scoped `git add`. - **2026-06-01**: "Керамика" lost from gift-ideas. Root cause: `git add $SPARSE_PATHS` failed silently when `.obsidian/` absent — patch+move not committed. - **2026-06-02**: Full architecture migration. Taiga `/vault` converted from `GIT_DIR=bare GIT_WORK_TREE` workaround to proper sparse clone. All clients unified on same `commit→fetch→merge→push` algorithm. Sync interval: every 5 min.