diff --git a/SDS_TEST_PLAN.md b/SDS_TEST_PLAN.md new file mode 100644 index 0000000..eb3094b --- /dev/null +++ b/SDS_TEST_PLAN.md @@ -0,0 +1,103 @@ +# Minimal SDS Integration Test Plan + +## Overview +This branch implements a minimal proof-of-concept for SDS (Scalable Data Sync) integration in OpChan, focusing exclusively on vote consistency. + +## What Changed + +### 1. Core SDS Implementation +- **New Package**: Added `@waku/sds` dependency +- **MinimalSDSWrapper**: Basic implementation at `src/lib/waku/sds/minimal-sds.ts` + - Manages Lamport timestamps for causal ordering + - Tracks causal history (last 3 message IDs) + - Provides `isCausallyNewer()` comparison + +### 2. Vote Message Enhancement +- Vote messages now include SDS metadata: + ```typescript + { + sds: { + channelId: "opchan:votes:all", + lamportTimestamp: number, + causalHistory: string[] + } + } + ``` + +### 3. Conflict Resolution +- When receiving votes, the system now: + 1. Checks if a vote already exists for the same target+author + 2. Uses Lamport timestamps to determine which is newer + 3. Only updates if the incoming vote is causally newer + 4. Logs all decisions for debugging + +### 4. Visual Indicators +- Added SDS status badge in header showing "SDS: Active (Votes)" +- Debug console logs show SDS operations + +## Test Scenarios + +### Scenario 1: Basic Vote Ordering +1. User A upvotes a post +2. User A changes to downvote +3. Verify the downvote is applied (newer Lamport timestamp) + +### Scenario 2: Concurrent Votes +1. Open two browser tabs with same wallet +2. Vote differently in each tab quickly +3. Verify the last vote wins based on causal ordering + +### Scenario 3: Network Delays +1. Vote on a post +2. Disconnect network +3. Change vote +4. Reconnect +5. Verify votes are ordered correctly when synced + +### Scenario 4: Vote History +1. Vote multiple times on same content +2. Check console logs for SDS debug messages +3. Verify causal history is maintained + +## Debug Output + +Enable browser console to see SDS operations: +``` +[SDS HH:MM:SS] VOTE SENDING - postId:userAddress +[SDS HH:MM:SS] VOTE NEW - postId:userAddress +[SDS HH:MM:SS] VOTE UPDATED - postId:userAddress (old: 5, new: 7) +[SDS HH:MM:SS] VOTE IGNORED_OLDER - postId:userAddress +``` + +## Verification + +### Console Commands +```javascript +// Check current vote state +messageManager.messageCache.votes + +// Check if message has SDS metadata +messageManager.messageCache.votes['postId:address'].sds +``` + +### Expected Behavior +- Votes should never "flip back" to older states +- Lamport timestamps should increase monotonically +- Causal history should contain previous vote IDs + +## Limitations + +This minimal implementation: +- Only applies to votes (not posts, comments, or moderation) +- Uses a single channel for all votes (not optimal for scale) +- Doesn't implement full SDS features (sync messages, bloom filters) +- No persistence of SDS state between sessions + +## Next Steps + +If this test is successful: +1. Extend to comments for thread ordering +2. Add per-cell channels for better scalability +3. Implement sync messages for reliability +4. Add persistence of channel state +5. Implement gap detection and recovery \ No newline at end of file