Conflict Resolution
What is a Conflict?
Section titled “What is a Conflict?”A conflict occurs when the same wcp_id has been modified in both the source and the target since the last sync. WCP detects this by comparing content hashes stored in SyncLinks.
Resolution Strategies
Section titled “Resolution Strategies”source_wins (default)
Section titled “source_wins (default)”The source app always overwrites the target. No manual intervention needed.
curl -X PUT http://localhost:8000/api/conflicts/strategy \ -H "Content-Type: application/json" \ -d '{"strategy": "source_wins"}'last_write_wins
Section titled “last_write_wins”Whichever side has the most recent modification timestamp wins.
curl -X PUT http://localhost:8000/api/conflicts/strategy \ -d '{"strategy": "last_write_wins"}'manual
Section titled “manual”Conflicts are queued for human review. Sync continues for non-conflicted items. The dashboard shows a conflict card for each pending item.
curl -X PUT http://localhost:8000/api/conflicts/strategy \ -d '{"strategy": "manual"}'Resolving Manually
Section titled “Resolving Manually”In manual mode, each conflict exposes both sides:
{ "id": "conflict_abc123", "wcp_id": "notion:page_xyz", "source": { "app": "notion", "content": "Updated content from Notion", "modified_at": "2026-04-03T10:00:00Z" }, "target": { "app": "sheets", "content": "Different content in Sheets", "modified_at": "2026-04-03T09:55:00Z" }}Resolve via API:
# Use source sidecurl -X POST http://localhost:8000/api/conflicts/conflict_abc123/resolve \ -d '{"winner": "source"}'
# Use target sidecurl -X POST http://localhost:8000/api/conflicts/conflict_abc123/resolve \ -d '{"winner": "target"}'
# Dismiss (skip this conflict)curl -X POST http://localhost:8000/api/conflicts/conflict_abc123/dismissOr use the Dashboard’s Conflicts page — it shows both sides side-by-side with a “Use this” button on each.