From 707a1eef31909b539236710aa3331c020cf67327 Mon Sep 17 00:00:00 2001 From: n8n-gitea Date: Wed, 27 May 2026 10:45:39 +0200 Subject: [PATCH] fix: add error logging, missing persist fields, and version to store configs - safe-persist.ts: add console.error logging to setItem catch block (was silently swallowing all errors) - manaStore.ts: add meditateTicks to partialize (was lost on refresh) - combatStore.ts: add currentAction, currentRoom, comboHitCount, floorHitCount, totalSpellsCast, totalDamageDealt, totalCraftsCompleted to partialize - All 8 stores: add version: 1 to persist configs for future schema migration safety Fixes #147 --- docs/circular-deps.txt | 2 +- docs/dependency-graph.json | 2 +- src/lib/game/stores/attunementStore.ts | 1 + src/lib/game/stores/combatStore.ts | 8 ++++++++ src/lib/game/stores/craftingStore.ts | 1 + src/lib/game/stores/discipline-slice.ts | 2 +- src/lib/game/stores/gameStore.ts | 1 + src/lib/game/stores/manaStore.ts | 3 ++- src/lib/game/stores/prestigeStore.ts | 1 + src/lib/game/stores/uiStore.ts | 2 +- src/lib/game/utils/safe-persist.ts | 1 + 11 files changed, 19 insertions(+), 5 deletions(-) diff --git a/docs/circular-deps.txt b/docs/circular-deps.txt index cf43f62..80b8e88 100644 --- a/docs/circular-deps.txt +++ b/docs/circular-deps.txt @@ -1,4 +1,4 @@ # Circular Dependencies -Generated: 2026-05-26T19:57:33.588Z +Generated: 2026-05-26T19:57:56.106Z No circular dependencies found. ✅ diff --git a/docs/dependency-graph.json b/docs/dependency-graph.json index 4a2ee0d..3854d17 100644 --- a/docs/dependency-graph.json +++ b/docs/dependency-graph.json @@ -1,6 +1,6 @@ { "_meta": { - "generated": "2026-05-26T19:57:31.715Z", + "generated": "2026-05-26T19:57:54.313Z", "description": "Import dependency graph for src/lib/game. Keys are files, values are arrays of files they import.", "usage": "To find what a file affects, search for its path in the VALUES. To find what a file depends on, look at its KEY entry." }, diff --git a/src/lib/game/stores/attunementStore.ts b/src/lib/game/stores/attunementStore.ts index 8253eff..d5a15a7 100644 --- a/src/lib/game/stores/attunementStore.ts +++ b/src/lib/game/stores/attunementStore.ts @@ -87,6 +87,7 @@ export const useAttunementStore = create()( { storage: createSafeStorage(), name: 'mana-loop-attunements', + version: 1, partialize: (state) => ({ attunements: state.attunements, }), diff --git a/src/lib/game/stores/combatStore.ts b/src/lib/game/stores/combatStore.ts index 20beb71..1658008 100644 --- a/src/lib/game/stores/combatStore.ts +++ b/src/lib/game/stores/combatStore.ts @@ -307,20 +307,28 @@ export const useCombatStore = create()( { storage: createSafeStorage(), name: 'mana-loop-combat', + version: 1, partialize: (state) => ({ currentFloor: state.currentFloor, maxFloorReached: state.maxFloorReached, spells: state.spells, activeSpell: state.activeSpell, + currentAction: state.currentAction, floorHP: state.floorHP, floorMaxHP: state.floorMaxHP, castProgress: state.castProgress, spireMode: state.spireMode, + currentRoom: state.currentRoom, clearedFloors: state.clearedFloors, golemancy: state.golemancy, equipmentSpellStates: state.equipmentSpellStates, + comboHitCount: state.comboHitCount, + floorHitCount: state.floorHitCount, activityLog: state.activityLog, achievements: state.achievements, + totalSpellsCast: state.totalSpellsCast, + totalDamageDealt: state.totalDamageDealt, + totalCraftsCompleted: state.totalCraftsCompleted, }), } ) diff --git a/src/lib/game/stores/craftingStore.ts b/src/lib/game/stores/craftingStore.ts index bee8aa6..a7200eb 100644 --- a/src/lib/game/stores/craftingStore.ts +++ b/src/lib/game/stores/craftingStore.ts @@ -356,6 +356,7 @@ export const useCraftingStore = create()( { storage: createSafeStorage(), name: 'mana-loop-crafting', + version: 1, partialize: (state) => ({ designProgress: state.designProgress, designProgress2: state.designProgress2, diff --git a/src/lib/game/stores/discipline-slice.ts b/src/lib/game/stores/discipline-slice.ts index 4d797db..3b5e6d8 100644 --- a/src/lib/game/stores/discipline-slice.ts +++ b/src/lib/game/stores/discipline-slice.ts @@ -216,6 +216,6 @@ export const useDisciplineStore = create()( return { rawMana, elements, unlockedEffects: newUnlockedEffects }; }, }), - { storage: createSafeStorage(), name: 'mana-loop-discipline-store', partialize: (state) => ({ disciplines: state.disciplines, activeIds: state.activeIds, concurrentLimit: state.concurrentLimit, totalXP: state.totalXP, processedPerks: state.processedPerks }) } + { storage: createSafeStorage(), name: 'mana-loop-discipline-store', version: 1, partialize: (state) => ({ disciplines: state.disciplines, activeIds: state.activeIds, concurrentLimit: state.concurrentLimit, totalXP: state.totalXP, processedPerks: state.processedPerks }) } ) ); \ No newline at end of file diff --git a/src/lib/game/stores/gameStore.ts b/src/lib/game/stores/gameStore.ts index fcf6a47..f38486f 100644 --- a/src/lib/game/stores/gameStore.ts +++ b/src/lib/game/stores/gameStore.ts @@ -386,6 +386,7 @@ export const useGameStore = create()( { storage: createSafeStorage(), name: 'mana-loop-game-storage', + version: 1, partialize: (state) => ({ day: state.day, hour: state.hour, diff --git a/src/lib/game/stores/manaStore.ts b/src/lib/game/stores/manaStore.ts index c5ecca6..1e16d05 100755 --- a/src/lib/game/stores/manaStore.ts +++ b/src/lib/game/stores/manaStore.ts @@ -205,7 +205,8 @@ export const useManaStore = create()( { storage: createSafeStorage(), name: 'mana-loop-mana', - partialize: (state) => ({ rawMana: state.rawMana, totalManaGathered: state.totalManaGathered, elements: state.elements }), + version: 1, + partialize: (state) => ({ rawMana: state.rawMana, meditateTicks: state.meditateTicks, totalManaGathered: state.totalManaGathered, elements: state.elements }), } ) ); diff --git a/src/lib/game/stores/prestigeStore.ts b/src/lib/game/stores/prestigeStore.ts index e452870..d98f1d6 100644 --- a/src/lib/game/stores/prestigeStore.ts +++ b/src/lib/game/stores/prestigeStore.ts @@ -273,6 +273,7 @@ export const usePrestigeStore = create()( { storage: createSafeStorage(), name: 'mana-loop-prestige', + version: 1, partialize: (state) => ({ loopCount: state.loopCount, insight: state.insight, diff --git a/src/lib/game/stores/uiStore.ts b/src/lib/game/stores/uiStore.ts index 99bcd39..4e08109 100755 --- a/src/lib/game/stores/uiStore.ts +++ b/src/lib/game/stores/uiStore.ts @@ -66,6 +66,6 @@ export const useUIStore = create()( }); }, }), - { storage: createSafeStorage(), name: 'mana-loop-ui-storage', partialize: (state) => ({ logs: state.logs, paused: state.paused, gameOver: state.gameOver, victory: state.victory }) } + { storage: createSafeStorage(), name: 'mana-loop-ui-storage', version: 1, partialize: (state) => ({ logs: state.logs, paused: state.paused, gameOver: state.gameOver, victory: state.victory }) } ) ); diff --git a/src/lib/game/utils/safe-persist.ts b/src/lib/game/utils/safe-persist.ts index 7747bbb..8705d62 100644 --- a/src/lib/game/utils/safe-persist.ts +++ b/src/lib/game/utils/safe-persist.ts @@ -30,6 +30,7 @@ export function createSafeStorage(): any { try { localStorage.setItem(name, JSON.stringify(value)); } catch (error) { + console.error('[safe-persist] Failed to persist:', name, error); } }, removeItem: (name: string): void => {