Overview
Implement sync infrastructure for SurrealDB Cloud integration, enabling multi-device access with local-first performance. This includes LIVE SELECT subscriptions, conflict detection, and offline operation queuing.
Architecture Reference
See docs/architecture/architecture-target-state.md Section 6: Sync Architecture
See docs/architecture/experiments/surrealdb-cloud-poc-plan.md for PoC details
Architecture
┌──────────────────┐ WebSocket ┌──────────────────┐
│ Desktop App │◄─────────────────────────►│ SurrealDB Cloud │
│ (Local RocksDB) │ LIVE SELECT │ (Coordination) │
└──────────────────┘ └──────────────────┘
│ │
│ Source of Truth │ RLS Enforcement
│ (user's data) │ Rate Limiting
▼ ▼
Full Offline Managed Scaling
Functionality (their problem)
Components
1. SurrealDB Cloud Connection
- WebSocket connection to cloud instance
- JWT authentication with
$auth claims
- Automatic reconnection handling
2. LIVE SELECT Subscriptions
Real-time sync via SurrealDB's LIVE SELECT:
LIVE SELECT * FROM node;
LIVE SELECT * FROM edge;
3. Conflict Resolution: Conflicted Copies
Using the Dropbox model—don't auto-merge, create copies:
- Detection: OCC via
version field
- Rejection: If cloud version higher, update fails
- Resolution: Create new node with
(Conflicted Copy YYYY-MM-DD) suffix
- User Action: Manual merge, user stays in control
4. Offline Operation Queue
Queue operations when offline, replay when reconnected:
struct OfflineOperation {
id: Uuid,
operation: Operation, // Create, Update, Delete
node_id: String,
payload: Value,
created_at: DateTime<Utc>,
retry_count: u32,
}
Acceptance Criteria
Phase 1: Cloud Connection
Phase 2: LIVE SELECT Integration
Phase 3: Conflict Detection
Phase 4: Conflict Resolution
Phase 5: Offline Queue
Phase 6: Quality
Technical Notes
Authentication Flow
- User logs in via OAuth/email
- App receives JWT with claims:
id, role, type_grants
- JWT used for SurrealDB Cloud connection
- RLS evaluated on every query/subscription
Sync Policy Integration
Sync behavior controlled by policies (#784):
- What to pull (lifecycle states, age, node types)
- What to push (immediate vs batched)
- Local eviction strategy
Prerequisites
Dependencies
Related Issues
Overview
Implement sync infrastructure for SurrealDB Cloud integration, enabling multi-device access with local-first performance. This includes LIVE SELECT subscriptions, conflict detection, and offline operation queuing.
Architecture Reference
See
docs/architecture/architecture-target-state.mdSection 6: Sync ArchitectureSee
docs/architecture/experiments/surrealdb-cloud-poc-plan.mdfor PoC detailsArchitecture
Components
1. SurrealDB Cloud Connection
$authclaims2. LIVE SELECT Subscriptions
Real-time sync via SurrealDB's LIVE SELECT:
3. Conflict Resolution: Conflicted Copies
Using the Dropbox model—don't auto-merge, create copies:
versionfield(Conflicted Copy YYYY-MM-DD)suffix4. Offline Operation Queue
Queue operations when offline, replay when reconnected:
Acceptance Criteria
Phase 1: Cloud Connection
Phase 2: LIVE SELECT Integration
Phase 3: Conflict Detection
Phase 4: Conflict Resolution
{title} (Conflicted Copy {date})Phase 5: Offline Queue
Phase 6: Quality
bun run quality:fixbun run test:all)Technical Notes
Authentication Flow
id,role,type_grantsSync Policy Integration
Sync behavior controlled by policies (#784):
Prerequisites
Dependencies
Related Issues