diff options
Diffstat (limited to 'docs/design/README.md')
| -rw-r--r-- | docs/design/README.md | 26 |
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 |
