summaryrefslogtreecommitdiff
path: root/docs/design/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/design/README.md')
-rw-r--r--docs/design/README.md26
1 files changed, 13 insertions, 13 deletions
diff --git a/docs/design/README.md b/docs/design/README.md
index 678addb..7486251 100644
--- a/docs/design/README.md
+++ b/docs/design/README.md
@@ -41,29 +41,29 @@ For someone new to the project:
The CRDT is being implemented as a Rust crate in `/crdt`:
- ✅ Vector clock implementation
- ✅ Basic Doc structure with operation log
-- ⏳ Core domain types (Cell, Row, Grid)
-- ⏳ CreateGrid operation
-- ⏳ Subdivide operation
-- ⏳ Fractional indexing
+- ✅ Core domain types (Cell, Row, Grid, DerivedId)
+- ✅ CreateGrid operation
+- ✅ ChangeSubdivisions operation
+- ❌ Fractional indexing (decided not to use in operations)
- ⏳ Conflict detection
- ⏳ Branch-based merge
## Design Principles
-1. **Convergence** - All replicas eventually reach the same state
-2. **Commutativity** - Operations can be applied in any order
-3. **Idempotency** - Re-applying operations is safe
-4. **No Silent Data Loss** - Conflicts are explicit, not silently resolved
-5. **Causal Consistency** - Operations respect causality
-6. **Domain Invariants** - Preserve musical constraints (e.g., row duration)
+1. **Causal Consistency** - Operations respect causality via vector clocks
+2. **Deterministic Realization** - Each branch produces consistent state from its operation sequence
+3. **No Silent Data Loss** - Conflicts are explicit, not silently resolved
+4. **Domain Invariants** - Preserve musical constraints (e.g., row duration)
+5. **User Control** - Explicit conflict resolution for ambiguous concurrent edits
+6. **Simplicity Over Commutativity** - Branch-based resolution instead of forcing all operations to commute
## Key Architectural Decisions
- **Operation-based CRDT** (not state-based) for semantic operations
- **Vector clocks** for causality tracking (future: consider Hybrid Logical Clocks)
-- **Fractional indexing** for stable positions
-- **Tombstones** for deletions (never truly remove cells)
-- **Conflict detection** rather than automatic LWW
+- **Deterministic IDs** using `DerivedId` (no fractional indexing in operations)
+- **Range-based subdivision** instead of tombstones (simpler semantics)
+- **Branch-based conflict resolution** rather than automatic commutativity
- **User-driven resolution** for ambiguous concurrent edits
## Future Work