Repository navigation
Conversation
Akryum
commented
Jun 4, 2026
- Move cache storage and merge logic into core store-engine modules
- Bridge Vue cache through fine-grained signals for item, list, and relation updates
- Add store-engine tests for writes, layers, observers, tombstones, serialization, and CRDT behavior
- Add Vue cache granularity coverage and legacy benchmarks
There was a problem hiding this comment.
Code Review
This pull request introduces a new framework-agnostic storage engine under packages/core/src/store-engine and refactors the Vue package to act as a thin reactivity bridge over it. This architecture provides fine-grained reactivity, ensuring that single-item writes do not trigger full collection list re-runs. The review feedback highlights several critical issues, including memory leaks in the Vue cache bridge (due to signals not being dropped on item eviction or cache reset), a bug in index mapping where explicit null updates are ignored, a bug in replaceModuleContents when handling arrays, a performance bottleneck in clearCollection due to multiple synchronous flushes, and dangling timers in the staggering controller upon engine disposal.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
@rstore/connector-toolkit
@rstore/core
@rstore/devtools
@rstore/directus
@rstore/monospace
@rstore/nuxt
@rstore/nuxt-directus
@rstore/nuxt-drizzle
@rstore/nuxt-monospace
@rstore/nuxt-multiplayer
@rstore/nuxt-multiplayer-server
@rstore/offline
@rstore/shared
@rstore/vite-directus
@rstore/vite-monospace
@rstore/vue
commit: |
8cbc12c to
a746816
Compare
fe9642d to
79c6168
Compare
851370b to
a39ad93
Compare
451bd8c to
60bcbd0
Compare
67aca6e to
de62e09
Compare
- Move cache storage and merge logic into core store-engine modules - Bridge Vue cache through fine-grained signals for item, list, and relation updates - Add store-engine tests for writes, layers, observers, tombstones, serialization, and CRDT behavior - Add Vue cache granularity coverage and legacy benchmarks
…e cases - Release item signals + engine observers on delete/GC/reset to stop unbounded subscription growth; add SignalRegistry.size() introspection - Drop an item from its index bucket when an indexed field is cleared to null, while preserving partial-update inheritance for untouched fields - Truncate array module state in place on setState/clear to avoid stale slots and holes - Batch clearCollection deletes behind a single flush (was O(N) observer dispatches) - Cancel the staggering budget-reset timer on engine dispose so it can't re-drive a torn-down engine Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Port main's Vue cache features onto the store engine after rebasing: - engine: queued prune, operation receipts, diagnostics inspection, write-dropped callback, committed-row reads, included relation tracking, tombstone maxSize, caller key form on tombstones - engine: publish each staggered writeItems slice; marker and hooks stay at batch end - vue: saved query state retention, page refs across getState/setState, absence write generations, dispose hook, unwritten wrapper release - drop superseded vue cache modules and adapt tests to engine semantics - nuxt: depend on h3 1.x so generated types do not pick the hoisted h3 2 pulled in by Devframe
de62e09 to
0befe73
Compare
…ands findFirst wraps its response before the queued cache write commits. The first read of that wrapper activated its item cell even though the engine had no row, and readItem's wrapper fast path then served it as cached while the cache was paused. Only activate cells for committed rows; an unwritten result stays dormant on its fallback.