Conflict & Health
How memrynote handles conflicting edits across devices, and where to see sync health.
Conflict Resolution
| Domain | Strategy |
|---|---|
| Notes & journal entries | CRDT (Yjs) — concurrent edits merge automatically |
| Tasks & projects | Field-level vector clocks — non-overlapping edits merge cleanly; same-field collisions resolve last-writer-wins by tick-sum |
| Inbox items, templates, settings | Doc-level vector clocks — last writer wins on conflict |
CRDT Merging (Notes / Journals)
Yjs is commutative — two devices typing different paragraphs in the same note merge without losing either side. Even concurrent edits to the same paragraph merge into a sensible result.
You don't see conflict UI for notes because there's nothing to resolve.
Field-Level Merge (Tasks / Projects)
Each field on a task or project carries its own vector clock. Examples:
- Device A changes due date; Device B changes priority. Both apply.
- Both devices change status. The higher tick-sum wins; ties favor the remote write deterministically.
This is much friendlier than naive last-writer-wins on the whole record.
Doc-Level Conflicts
For inbox items, templates, and other lower-frequency types, a same-record concurrent change resolves with a single doc-level vector clock. memrynote surfaces a banner if a true unresolvable case occurs (rare).
Conflict Indicators
When a conflict requires your attention (very rare given the strategies above), memrynote:
- Shows a yellow banner on the affected item
- Adds an entry to Sync History
- Lets you choose to keep your version, the remote version, or merge manually
Sync History
A panel that lists recent sync events:
- Pushes (succeeded / failed)
- Pulls (counts of new items)
- Conflicts (with links to the items)
- Auth events (sign-in, key rotation, device link)
Open from the sync status indicator menu.
Health View
The Inbox → Health tab shows:
- Failed sync jobs with retry buttons
- Items with broken source URLs
- Items missing required fields
- Low-storage warnings (if approaching the vault quota)
This is the actionable punch list — fix everything here and sync should be clean.
Common Sync Errors
| Error | Likely cause | Fix |
|---|---|---|
| "Authentication expired" | Refresh token expired | Sign in again |
| "Quota exceeded" | Vault size hit storage limit | Upgrade plan or clean attachments |
| "Network unreachable" | Offline | Reconnect; sync auto-resumes |
| "Server temporarily unavailable" | Cloudflare hiccup | Wait; backoff retries automatically |
| "Blob hash mismatch" | Corruption (rare) | Push the affected item again from the source device |
| "Crypto version mismatch" | Sync server behind a desktop release | Wait for server to update or downgrade desktop |
Resolving a Conflict Manually
If the rare manual-conflict banner appears on a non-CRDT item:
- Click the banner
- Compare the two versions side-by-side
- Pick Keep mine, Keep remote, or copy text between them and save
- The conflict marker clears
For CRDT items (notes / journals), there's no manual conflict step — the merge always succeeds.
What memrynote Won't Do
memrynote doesn't auto-merge across record types — e.g. it won't combine two competing project structures. The vector clock comparison stays within a single record.
It also doesn't store a permanent "conflict log" — once resolved, the conflict is gone. Sync History keeps the metadata for a few weeks for debugging.
See Also
- How Sync Works
- Sync Protocol — architecture deep-dive
- CRDT & Notes Sync — for the Yjs internals