Fixed: Updated createGatherMana in gameActions.ts to use computeClickMana with discipline effects instead of hardcoding click mana to 1. The mana-channeling discipline's `clickManaMultiplie…
Fixed: Updated calcDamage in combat-utils.ts to accept an optional DisciplineBonuses parameter. Discipline bonuses from spell-casting (baseDamageBonus) and void-manipulation (baseDamageMu…
Starting work on Issue 77: tick() passes empty skill objects to computeMaxMana/computeRegen — skill bonuses ignored. Part of the same skill→discipline migration gap.
Starting work on Issue 76: createGatherMana hardcodes click mana to 1 — ignores all skill/upgrade bonuses. Part of the same skill→discipline migration gap.
Starting work on Issue 72: calcDamage called with empty skills — all skill-based damage bonuses ignored in combat. This is part of the skill→discipline migration gap. Will wire discipline…
Fixed: Changed useEffect dependency from [state] to [] in useToast(). This prevents duplicate listeners from accumulating on every state change.
Fixed: Changed useGameLoop to use useEffect with empty dependency array [] and useGameStore.getState().tick() inside the interval callback. This prevents interval recreation on every tick.
Fixed: Added persist middleware to useUIStore with storage key mana-loop-ui-storage. Now paused, gameOver, victory, and logs survive page refresh.
Starting work on Issue 74: use-toast.ts listener leak — duplicate listeners accumulate on every state change. Fixing by changing [state] dependency to [].
Starting work on Issue 73: useGameLoop recreates interval every tick due to unstable tick reference. Fixing to use getState() inside interval callback with empty dependency array.
Starting work on Issue 71: uiStore not persisted — paused/gameOver/victory lost on page refresh. Adding persist middleware to useUIStore.
Fixed: Replaced direct nested object mutation elements[def.manaType].current -= drain with immutable spread pattern `elements[def.manaType] = { ...elements[def.manaType], current: elements[def.ma…
Starting work on Issue 70: discipline-slice.ts mutates nested element objects directly, bypassing Zustand reactivity. The shallow copy on line 97 (const elements = { ...mana.elements }) doesn't…