Zum Hauptinhalt springen

WebDAV Sync

Überblick

WebDAV Sync ist der geräteübergreifende Synchronisierungsmechanismus für Synthesis Workbench und ersetzt das veraltete Git Sync. Er tauscht deterministische Durable-State-Bundle-Snapshots über das WebDAV-Protokoll aus.

Funktioniert mit jedem WebDAV-konformen Server (Nextcloud, ownCloud, Synology usw.). Kein Git erforderlich.

Voraussetzungen

  • Ein zugänglicher WebDAV-Server
  • WebDAV-Anmeldedaten (Benutzername + Passwort oder anwendungsspezifisches Token)

Konfiguration

Zotero → Einstellungen → Zotero Agents → WebDAV Sync

EinstellungTypStandardBeschreibung
WebDAV Sync aktivierenbooleanfalseHauptschalter
Basis-URLstring""WebDAV-Server-URL, z. B. https://nextcloud.example.com/remote.php/dav/files/user/
Remote-Pfadstring"zotero-agents"Remote-Verzeichnis unter der Basis-URL
Benutzernamestring""WebDAV-Benutzername (optional)
Passwort / App-Tokenverschlüsselt""Passwort oder Token (AES-256-GCM-verschlüsselt)
Auto-SyncbooleanfalseSync automatisch nach Synthesis-Änderungen auslösen
Auto-RetrybooleanfalseVorübergehende Fehler automatisch wiederholen

Aktions-Schaltflächen:

  • Einstellungen speichern: Nicht-Anmeldedaten-Einstellungen persistieren
  • Anmeldedaten speichern: Passwort/Token verschlüsselt speichern
  • Verbindung testen: Eine PROPFIND-Anfrage senden, um die Konnektivität zu überprüfen

Remote-Dateistruktur

<remotePath>/
├── HEAD.json # Aktueller Snapshot-Zeiger
└── snapshots/
└── <snapshotId>/
├── manifest.json # Durable-Bundle-Manifest
└── bundles/ # Deterministische Durable-Bundle-Dateien

HEAD.json enthält snapshot_id, manifest_hash, updated_at, producer_version. Snapshots werden vollständig hochgeladen, bevor HEAD aktualisiert wird – unterbrochene Syncs beschädigen niemals das Remote.

Was synchronisiert wird

SynchronisiertNicht synchronisiert
ThemenSQLite-Laufzeitdatenbanken
Konzepte (Konzepte, Sinnvarianten, Aliase, Relationen)Laufzeitprotokolle
Themen-Graph (Knoten, Kanten)Workspace-Dateien
Referenzen (Bindungen, Umleitungen)Warteschlangen- und Sperrzustand
Review-ElementeNeu aufbaubare Projektionen (Zitationslayout, Metriken, Cache)
Tags (kontrolliertes Vokabular)Anmeldedaten
Verwandte ObjekteTemporäre Dateien

Sync-Ablauf

idle → queued → syncing → idle
├── blocked_conflict (manuelle Beilegung erforderlich)
└── failed_retryable / failed_permanent
SchrittBeschreibung
1. HEADRemote-HEAD.json lesen
2. DownloadManifest + Bundles herunterladen, wenn ein neuerer Snapshot vorhanden ist
3. VorschauImportierten Snapshot validieren, Entity-Hashes vergleichen
4. KonfliktprüfungBeidseitige Änderungen erkennen
5. AnwendenRemote-Snapshot in den lokalen Canonical Store importieren
6. ExportAktuellen lokalen Zustand als Bundles exportieren
7. UploadManifest + Bundles hochladen
8. HEAD-AktualisierungHEAD.json zuletzt aktualisieren (ETag/If-Match für Nebenläufigkeitssicherheit)

Konfliktbehandlung

Die Konflikterkennung basiert auf Entity-Hash-Vergleichen. Ein Konflikt wird ausgelöst, wenn dieselbe Entity sowohl lokal als auch remote geändert wurde.

Konflikttypen:

  • Beidseitige Entity-Modifikation
  • Update-vs.-Tombstone-Konflikt
  • Review-Element-Divergenz
  • Referenz-Bindungs-/Umleitungsziel-Divergenz

Lösungsaktionen:

AktionBeschreibung
keep_localLokalen Zustand behalten, Konflikt-Gate schließen, nächsten Export in die Warteschlange stellen
clear_after_manual_editNach manueller Zusammenführung erneut validieren; den Konfliktmarker bei Beilegung löschen

Das Sync-Panel auf der Workbench-Home-Seite zeigt Konfliktdetails und Aktions-Schaltflächen.

Sicherheit

  • Anmeldedatenverschlüsselung: AES-256-GCM, keyed zum Host-Bridge-Master-Token (PBKDF2-SHA256, 100.000 Iterationen)
  • Klartext wird niemals zurückgegeben: Anmeldedaten sind nach dem Speichern nicht lesbar
  • URL-Bereinigung: Anmeldedaten werden aus der Protokollausgabe entfernt
  • HTTP Basic Auth: Standard-Basic-Authentifizierung über HTTPS

Einschränkungen

EinschränkungDetail
Standardmäßig manuellAuto-Sync und Auto-Retry sind standardmäßig ausgeschaltet
Keine Kompressionv1-Snapshots sind rohe JSON-Bundles
Keine Bereinigung alter SnapshotsRemote-Snapshots sammeln sich an; manuelle Bereinigung erforderlich
Kein Merge auf FeldebeneKonflikte liegen auf Entity-Ebene vor
Single-Device-AnnahmeGleichzeitige Schreibvorgänge von mehreren Geräten können Konflikte verursachen

Nächste Schritte