fix: add error logging, missing persist fields, and version to store configs
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m25s

- 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
This commit is contained in:
2026-05-27 10:45:39 +02:00
parent 2fa16c5749
commit 707a1eef31
11 changed files with 19 additions and 5 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Circular Dependencies
Generated: 2026-05-26T19:57:33.588Z
Generated: 2026-05-26T19:57:56.106Z
No circular dependencies found. ✅
+1 -1
View File
@@ -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."
},
+1
View File
@@ -87,6 +87,7 @@ export const useAttunementStore = create<AttunementStoreState>()(
{
storage: createSafeStorage(),
name: 'mana-loop-attunements',
version: 1,
partialize: (state) => ({
attunements: state.attunements,
}),
+8
View File
@@ -307,20 +307,28 @@ export const useCombatStore = create<CombatStore>()(
{
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,
}),
}
)
+1
View File
@@ -356,6 +356,7 @@ export const useCraftingStore = create<CraftingStore>()(
{
storage: createSafeStorage(),
name: 'mana-loop-crafting',
version: 1,
partialize: (state) => ({
designProgress: state.designProgress,
designProgress2: state.designProgress2,
+1 -1
View File
@@ -216,6 +216,6 @@ export const useDisciplineStore = create<DisciplineStore>()(
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 }) }
)
);
+1
View File
@@ -386,6 +386,7 @@ export const useGameStore = create<GameCoordinatorStore>()(
{
storage: createSafeStorage(),
name: 'mana-loop-game-storage',
version: 1,
partialize: (state) => ({
day: state.day,
hour: state.hour,
+2 -1
View File
@@ -205,7 +205,8 @@ export const useManaStore = create<ManaStore>()(
{
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 }),
}
)
);
+1
View File
@@ -273,6 +273,7 @@ export const usePrestigeStore = create<PrestigeStore>()(
{
storage: createSafeStorage(),
name: 'mana-loop-prestige',
version: 1,
partialize: (state) => ({
loopCount: state.loopCount,
insight: state.insight,
+1 -1
View File
@@ -66,6 +66,6 @@ export const useUIStore = create<UIState>()(
});
},
}),
{ 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 }) }
)
);
+1
View File
@@ -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 => {