Skip to content

Commit 5a95e82

Browse files
authored
layout simplification (#2387)
The current layout system uses a complex bidirectional atom architecture that forces every layout change to round-trip through the backend WaveObject, even though **the backend never reads this data** - it only queues actions via `PendingBackendActions`. By switching to a "write cache" pattern where local atoms are the source of truth and backend writes are fire-and-forget, we can eliminate ~70% of the complexity while maintaining full persistence. ---- Every layout change (split, close, focus, magnify) currently follows this flow: ``` User action ↓ treeReducer() mutates layoutState ↓ layoutState.generation++ ← Only purpose: trigger the write ↓ Bidirectional atom setter (checks generation) ↓ Write to WaveObject {rootnode, focusednodeid, magnifiednodeid} ↓ WaveObject update notification ↓ Bidirectional atom getter runs ↓ ALL dependent atoms recalculate (every isFocused, etc.) ↓ React re-renders with updated state ``` --- ## Proposed "Write Cache" Architecture ### Core Concept ``` User action ↓ Update LOCAL atom (immediate, synchronous) ↓ React re-renders (single tick, all atoms see new state) ↓ [async, fire-and-forget] Persist to WaveObject ``` ### Key Principles 1. **Local atoms are source of truth** during runtime 2. **WaveObject is persistence layer** only (read on init, write async) 3. **Backend actions still work** via `PendingBackendActions` 4. **No generation tracking needed** (no need to trigger writes)
1 parent bbe5d90 commit 5a95e82

16 files changed

Lines changed: 1192 additions & 295 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ out/
1616
make/
1717
artifacts/
1818
mikework/
19+
.env
1920

2021
# Yarn Modern
2122
.pnp.*

0 commit comments

Comments
 (0)