Files
memory-os/references/webdav-migration.md
2026-09-06 13:51:22 +00:00

2.0 KiB

WebDAV Migration & Sync Pipeline Fix — 2026-07-16

Change: s3fs → WebDAV as Obsidian Vault Source

Problem: The s3fs mount at /opt/hermes/obsidian-vault/ (via Garage S3 s3.nixg.ru) was empty — only . and .. in the directory, no actual files. sync_obsidian_to_wiki.py couldn't copy anything. C1 was blocked.

Diagnosis:

  • /etc/fstab had s3fs entry pointing at s3.nixg.ru (Garage)
  • mount | grep s3fs showed the mount was active but directory contained 0 files
  • /mnt/yandex-disk/ (Yandex Disk via davfs2 WebDAV) had a working obsidian/mozg/ vault with 65 .md files

Fix: Changed OBSIDIAN_VAULT from /opt/hermes/obsidian-vault to /mnt/yandex-disk/obsidian/mozg/.

First run: 74 files copied in 44 seconds, 0 errors.

Blocker 2: sync → ingest chain broken

Symptom: The sync script finishes copying, then tries to call wiki_continuous_ingest.py with bare python3 — crashes with ModuleNotFoundError: No module named 'arq'.

Root cause: sync_obsidian_to_wiki.py line 162 does os.system(f"python3 {ingest_script}"). System python3 does NOT have arq (only installed in project .venv/).

Fix: Changed to /opt/hermes/memory-os/.venv/bin/python3 {ingest_script}.

Safety Guarantee

The user explicitly asked for protection against Hermes deleting files in their Obsidian vault. Confirmed:

  • Code-level: sync_obsidian_to_wiki.py only reads source (via os.walk() + copy2()). All deletions (unlink()) target WIKI_TARGET, never OBSIDIAN_VAULT. This was true before the change and remains true after.
  • Filesystem-level: davfs2 mounts with file_mode=600 — the user process itself can only write with explicit sudo. The sync script runs as user estorozhenko.
  • Memory-level: Added read-only guarantee to user profile.

Lesson: When the user expresses concern about data safety, (1) show code evidence that it's already safe, (2) add explicit protection in memory/skill, (3) explain trade-offs (read-only mount vs full POSIX) so they can make informed decisions.