From 0ad3a29d34d09f7559e86a1ef0019d6a6410dd25 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 03:18:09 +0000 Subject: [PATCH 1/2] fix(persister): add startAutoSave and always load data on app start This fixes the data loss issue reported in #3269 where notes disappear after updates. Root cause: 1. The local persister was missing startAutoSave(), so changes were never persisted back to SQLite after the initial load. 2. The LocalPersisterLoaded flag prevented persister.load() from being called on subsequent app launches, even after updates. Changes: - Always call persister.load() on app start to ensure data is loaded - Add startAutoSave() to persist changes back to SQLite - The LocalPersisterLoaded flag now only controls whether migrations run (to prevent running migrations multiple times across windows) Fixes #3269 Co-Authored-By: john@hyprnote.com --- .../store/tinybase/persister/local/index.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/desktop/src/store/tinybase/persister/local/index.ts b/apps/desktop/src/store/tinybase/persister/local/index.ts index 08f4ada16e..7ce7d35f5b 100644 --- a/apps/desktop/src/store/tinybase/persister/local/index.ts +++ b/apps/desktop/src/store/tinybase/persister/local/index.ts @@ -129,15 +129,23 @@ export function useLocalPersister(store: Store) { const loadedResult = await commands.getLocalPersisterLoaded(); const alreadyLoaded = loadedResult.status === "ok" && loadedResult.data; + // Always load data from SQLite on app start, regardless of the flag. + // The flag only controls whether migrations should run (to prevent + // running migrations multiple times across windows). + console.info("[localPersister] load_start", { + elapsedMs: Date.now() - loadStart, + }); + const persisterLoadStart = Date.now(); + await persister.load(); + console.info("[localPersister] load_end", { + elapsedMs: Date.now() - persisterLoadStart, + }); + + // Start auto-save to persist changes back to SQLite. + // This was previously missing, causing data loss when the app was closed. + await persister.startAutoSave(); + if (!alreadyLoaded) { - console.info("[localPersister] load_start", { - elapsedMs: Date.now() - loadStart, - }); - const persisterLoadStart = Date.now(); - await persister.load(); - console.info("[localPersister] load_end", { - elapsedMs: Date.now() - persisterLoadStart, - }); await commands.setLocalPersisterLoaded(true); (store as Store).transaction(() => {}); @@ -148,10 +156,6 @@ export function useLocalPersister(store: Store) { await persister.save(); } } - } else { - console.info("[localPersister] already_loaded", { - elapsedMs: Date.now() - loadStart, - }); } console.info("[localPersister] ready", { From fb3864c6594e984bd54c1ab72f28235f1dc86c77 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 03:30:20 +0000 Subject: [PATCH 2/2] simplify: just run load() on every startup regardless of flag Co-Authored-By: yujonglee --- apps/desktop/src/store/tinybase/persister/local/index.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/desktop/src/store/tinybase/persister/local/index.ts b/apps/desktop/src/store/tinybase/persister/local/index.ts index 7ce7d35f5b..d704d60c9d 100644 --- a/apps/desktop/src/store/tinybase/persister/local/index.ts +++ b/apps/desktop/src/store/tinybase/persister/local/index.ts @@ -129,9 +129,6 @@ export function useLocalPersister(store: Store) { const loadedResult = await commands.getLocalPersisterLoaded(); const alreadyLoaded = loadedResult.status === "ok" && loadedResult.data; - // Always load data from SQLite on app start, regardless of the flag. - // The flag only controls whether migrations should run (to prevent - // running migrations multiple times across windows). console.info("[localPersister] load_start", { elapsedMs: Date.now() - loadStart, }); @@ -141,10 +138,6 @@ export function useLocalPersister(store: Store) { elapsedMs: Date.now() - persisterLoadStart, }); - // Start auto-save to persist changes back to SQLite. - // This was previously missing, causing data loss when the app was closed. - await persister.startAutoSave(); - if (!alreadyLoaded) { await commands.setLocalPersisterLoaded(true);