2026-05-15 - 2026-05-22
Overview
98 Issues closed from 1 user
Closed
#102 [priority: high] Bloated state types — GameState (71 fields), CombatState (58), PrestigeState (39)
Closed
#103 [priority: high] gameStore.ts tick() orchestrates 7 stores with tangled cross-store coupling
Closed
#99 [priority: high] 10+ monster functions (>150 LOC) with deep nesting and high cyclomatic complexity
Closed
#100 [priority: high] Duplicate functions across files (calculateDesignTime, calculateDesignCapacityCost, generateSwarmEnemies)
Closed
#98 [priority: critical] 13+ files use as any type casts bypassing TypeScript's type safety
Closed
#97 [priority: critical] Near-zero test coverage — 155 of 235 files untested, including all core game logic
Closed
#96 [priority: critical] Legacy store.ts coexists with modular stores/ — incomplete migration
Closed
#95 [priority: critical] 3 import cycles in production code (store↔utils, equipment↔utils, golems↔utils)
Closed
#94 [priority: 4] Recreate Spire Combat Page — Full Spire Climbing Experience
Closed
#87 [priority: 4] Recreate Crafting Tab with Fabricator and Enchanter Sub-Tabs
Closed
#93 [priority: 4] Recreate Spire Summary Tab (Outside Spire)
Closed
#89 [priority: 4] Recreate Guardian Pacts Tab (Invoker Attunement)
Closed
#88 [priority: 4] Recreate Golemancy Tab — Golem Loadout Configuration
Closed
#90 [priority: 4] Recreate Equipment Tab — Equip/Unequip Gear
Closed
#91 [priority: 4] Recreate Prestige Tab — Insight Upgrade Purchasing
Closed
#86 [priority: 4] Recreate Attunements Tab
Closed
#92 [priority: 4] Recreate Debug Tab — Modular Debugging Functions
Closed
#85 [priority: 4] Recreate Achievements Tab
Closed
#75 [priority: 4] Main game component (page.tsx) has 12+ individual store subscriptions causing excessive re-renders
Closed
#76 [priority: 3] createGatherMana hardcodes click mana to 1 — ignores all skill/upgrade bonuses
Closed
#77 [priority: 3] tick() passes empty skill objects to computeMaxMana/computeRegen — skill bonuses ignored
Closed
#72 [priority: 4] calcDamage called with empty skills — all skill-based damage bonuses ignored in combat
Closed
#74 [priority: 4] use-toast.ts listener leak — duplicate listeners accumulate on every state change
Closed
#71 [priority: 4] uiStore not persisted — paused/gameOver/victory lost on page refresh
Closed
#73 [priority: 4] useGameLoop recreates interval every tick due to unstable tick reference
Closed
#70 [priority: 4] discipline-slice.ts mutates nested element objects directly — bypasses Zustand reactivity
Closed
#68 [priority: 5] Special effects (Executioner/Berserker) completely broken — hasSpecial({}) always false
Closed
#69 [priority: 5] 23 missing test files — test suite is completely broken
Closed
#84 [priority: 6] Consolidate all tab components into src/components/game/tabs/
Closed
#78 [priority: 3] cancelDesign logic inverted — cancels wrong design slot
Closed
#79 [priority: 3] startDesigningEnchantment never uses designProgress2 slot (Enchant Mastery broken)
Closed
#80 [priority: 3] Combat store partialize missing floorHP/floorMaxHP/castProgress — state lost on refresh
Closed
#81 [priority: 3] Prestige store partialize missing defeatedGuardians/signedPacts/pact progress
Closed
#82 [priority: 3] SteadyStream has identical behavior to EternalFlow — latent bug
Closed
#83 [priority: 3] Mana Tide pulse factor incorrect — ranges 0.5x-1.0x instead of 0.5x-1.5x
Closed
#67 Codebase Audit: Data, Constants & Types Analysis
Closed
#66 📋 Project-wide issue prioritization complete — 36 issues ranked [priority: 1-5]
Closed
#63 🟡 StudyProgress: orphaned component — exported but never rendered
Closed
#64 🟡 CraftingProgress: orphaned component — exported but never rendered
Closed
#61 🟡 ConfirmDialog: dead code — fully implemented but never imported
Closed
#62 🟡 CalendarDisplay: orphaned component with duplicate displayName
Closed
#58 🟡 AchievementsDisplay: fully built component is orphaned — never rendered
Closed
#59 🟡 LootInventoryDisplay: fully built component is orphaned — never rendered
Closed
#60 🟡 Duplicate LootInventoryDisplay implementations
Closed
#34 fix: Missing types import in upgrade-effects.types.ts — build error
Closed
#35 fix: Enemy healthRegen field is set but never consumed by combat logic
Closed
#49 chore: uiStore.ts has identical duplicate reset() and resetUI() functions
Closed
#32 chore: Remove duplicate LootInventoryDisplay component
Closed
#33 fix: DisciplinesTab.tsx uses getState() during render — breaks React subscription
Closed
#30 fix: canEquipInSlot uses instance ID as type ID — two-handed weapon check broken
Closed
#31 chore: Remove duplicate discipline definition files (dead code)
Closed
#29 fix: gameStore.ts passes empty object to processCombatTick as first argument
Closed
#26 fix: discipline-slice.ts directly mutates state outside of set()
Closed
#27 fix: combatStore.ts persist partialize saves wrong field for activeSpell
Closed
#28 fix: totalManaGathered incorrectly accumulates spell costs instead of mana gathered
Closed
#23 fix: Missing PrestigeDef and LootDrop type definitions
Closed
#24 fix: EquipmentCategory used but not imported in enchantments/index.ts
Closed
#25 fix: grimoire property on SpellDef raw-spells but not in type definition
Closed
#22 fix: Missing ManaType type export from elements.ts breaks discipline type safety
Closed
#41 fix: Missing enchantment effects for several spells (rotTouch, soulRend, master, legendary)
Closed
#36 chore: Duplicate RARITY_COLORS constants with different values
Closed
#37 fix: Duplicate EnchantmentEffectDef types with incompatible shapes
Closed
#38 fix: EquipmentSlot type defined differently in two places
Closed
#39 fix: RoomType type defined in two places
Closed
#40 fix: golems/utils.ts and equipment/utils.ts duplicate local constants instead of importing from index
Closed
#42 fix: pactMaster achievement requires 12 pacts but only 9 guardians exist
Closed
#43 fix: lifeEssenceDrop references banned life mana type
Closed
#44 fix: ascension skill category in attunements.ts references banned mechanic
Closed
#45 fix: drain spell description references banned "life force" concept
Closed
#55 🟡 DisciplinesTab: statBonus and baseValue props are swapped/mismatched
Closed
#56 🟡 DisciplinesTab: tab filtering broken — all attunements render simultaneously
Closed
#46 fix: GameStateDebug "Fill Mana" loop can freeze UI with large mana values
Closed
#47 fix: ConfirmDialog silently swallows async errors from onConfirm
Closed
#48 fix: doPrestige return type mismatch — interface says void but returns boolean
Closed
#50 fix: getUnlockedAttunements filter logic shows inactive-but-unlocked attunements
Closed
#65 🟡 GameContext: context provider never wired into the app
Closed
#57 🔴 CraftingTab: stale/broken export in game/index.ts
Closed
#53 🔴 DisciplinesTab: activeAttunement property missing from store
Closed
#54 🔴 DisciplinesTab: activate/deactivate crash — gameState is undefined
Closed
#51 🔴 DisciplinesTab: broken import path @/types/disciplines — module not found
Closed
#52 🔴 DisciplinesTab: canProceedDiscipline called with wrong arguments
Closed
#21 Docker build fails with 3 errors: JSX syntax, missing module, missing file
Closed
#20 fix: resolve 7 circular dependency chains in src/lib/game
Closed
#18 Refactor: Resolve Structural Inconsistencies and Dead Code
Closed
#17 [TASK-017]: Fix Frozen Lockfile CI Build Failure
Closed
#11 [TASK-008] Enchanting system stabilization — store as single source of truth (Phase 2)
Closed
#12 [TASK-009] Attunement expansion — new attunements + path choice at prestige (Phase 4)
Closed
#13 [TASK-010] Prestige rework — loop memories + path bonuses (Phase 5)
Closed
#14 [TASK-011] Full UI redesign — remaining tabs (Phase 6)
Closed
#9 [Bug] Memory type missing — breaks MemorySlotPicker, prestigeStore
Closed
#8 [Bug] EquipmentSlot type missing — breaks EnchantmentPreparer, crafting-actions, data imports
Closed
#7 [Bug] EquipmentCategory type missing — breaks EnchantmentDesigner
Closed
#16 Add Disciples System and DisciplesTab Component
Closed
#15 Migrate Legacy Skills System to Active Disciplines [Highest Priority]
Closed
#3 TASK-007: gameStore.ts still uses old computeEffects(), not new computeStats()
Closed
#4 TASK-007: Duplicate stat functions across multiple modules — consolidate into computeStats()
Closed
#6 TASK-007: Remove legacy skill-evolution-modules/ and skill-evolution.ts after migration
Closed
#2 TASK-007: Missing evolution paths for 30+ skills in SKILL_EVOLUTION_PATHS
88 Issues created by 1 user
Opened
#15 Migrate Legacy Skills System to Active Disciplines [Highest Priority]
Opened
#16 Add Disciples System and DisciplesTab Component
Opened
#17 [TASK-017]: Fix Frozen Lockfile CI Build Failure
Opened
#18 Refactor: Resolve Structural Inconsistencies and Dead Code
Opened
#20 fix: resolve 7 circular dependency chains in src/lib/game
Opened
#21 Docker build fails with 3 errors: JSX syntax, missing module, missing file
Opened
#22 fix: Missing ManaType type export from elements.ts breaks discipline type safety
Opened
#23 fix: Missing PrestigeDef and LootDrop type definitions
Opened
#24 fix: EquipmentCategory used but not imported in enchantments/index.ts
Opened
#25 fix: grimoire property on SpellDef raw-spells but not in type definition
Opened
#26 fix: discipline-slice.ts directly mutates state outside of set()
Opened
#27 fix: combatStore.ts persist partialize saves wrong field for activeSpell
Opened
#28 fix: totalManaGathered incorrectly accumulates spell costs instead of mana gathered
Opened
#29 fix: gameStore.ts passes empty object to processCombatTick as first argument
Opened
#30 fix: canEquipInSlot uses instance ID as type ID — two-handed weapon check broken
Opened
#31 chore: Remove duplicate discipline definition files (dead code)
Opened
#32 chore: Remove duplicate LootInventoryDisplay component
Opened
#33 fix: DisciplinesTab.tsx uses getState() during render — breaks React subscription
Opened
#34 fix: Missing types import in upgrade-effects.types.ts — build error
Opened
#35 fix: Enemy healthRegen field is set but never consumed by combat logic
Opened
#36 chore: Duplicate RARITY_COLORS constants with different values
Opened
#37 fix: Duplicate EnchantmentEffectDef types with incompatible shapes
Opened
#38 fix: EquipmentSlot type defined differently in two places
Opened
#39 fix: RoomType type defined in two places
Opened
#40 fix: golems/utils.ts and equipment/utils.ts duplicate local constants instead of importing from index
Opened
#41 fix: Missing enchantment effects for several spells (rotTouch, soulRend, master, legendary)
Opened
#42 fix: pactMaster achievement requires 12 pacts but only 9 guardians exist
Opened
#43 fix: lifeEssenceDrop references banned life mana type
Opened
#44 fix: ascension skill category in attunements.ts references banned mechanic
Opened
#45 fix: drain spell description references banned "life force" concept
Opened
#46 fix: GameStateDebug "Fill Mana" loop can freeze UI with large mana values
Opened
#47 fix: ConfirmDialog silently swallows async errors from onConfirm
Opened
#48 fix: doPrestige return type mismatch — interface says void but returns boolean
Opened
#49 chore: uiStore.ts has identical duplicate reset() and resetUI() functions
Opened
#50 fix: getUnlockedAttunements filter logic shows inactive-but-unlocked attunements
Opened
#51 🔴 DisciplinesTab: broken import path @/types/disciplines — module not found
Opened
#52 🔴 DisciplinesTab: canProceedDiscipline called with wrong arguments
Opened
#53 🔴 DisciplinesTab: activeAttunement property missing from store
Opened
#54 🔴 DisciplinesTab: activate/deactivate crash — gameState is undefined
Opened
#55 🟡 DisciplinesTab: statBonus and baseValue props are swapped/mismatched
Opened
#56 🟡 DisciplinesTab: tab filtering broken — all attunements render simultaneously
Opened
#57 🔴 CraftingTab: stale/broken export in game/index.ts
Opened
#58 🟡 AchievementsDisplay: fully built component is orphaned — never rendered
Opened
#59 🟡 LootInventoryDisplay: fully built component is orphaned — never rendered
Opened
#60 🟡 Duplicate LootInventoryDisplay implementations
Opened
#61 🟡 ConfirmDialog: dead code — fully implemented but never imported
Opened
#62 🟡 CalendarDisplay: orphaned component with duplicate displayName
Opened
#63 🟡 StudyProgress: orphaned component — exported but never rendered
Opened
#64 🟡 CraftingProgress: orphaned component — exported but never rendered
Opened
#65 🟡 GameContext: context provider never wired into the app
Opened
#66 📋 Project-wide issue prioritization complete — 36 issues ranked [priority: 1-5]
Opened
#67 Codebase Audit: Data, Constants & Types Analysis
Opened
#68 [priority: 5] Special effects (Executioner/Berserker) completely broken — hasSpecial({}) always false
Opened
#69 [priority: 5] 23 missing test files — test suite is completely broken
Opened
#70 [priority: 4] discipline-slice.ts mutates nested element objects directly — bypasses Zustand reactivity
Opened
#71 [priority: 4] uiStore not persisted — paused/gameOver/victory lost on page refresh
Opened
#72 [priority: 4] calcDamage called with empty skills — all skill-based damage bonuses ignored in combat
Opened
#73 [priority: 4] useGameLoop recreates interval every tick due to unstable tick reference
Opened
#74 [priority: 4] use-toast.ts listener leak — duplicate listeners accumulate on every state change
Opened
#75 [priority: 4] Main game component (page.tsx) has 12+ individual store subscriptions causing excessive re-renders
Opened
#76 [priority: 3] createGatherMana hardcodes click mana to 1 — ignores all skill/upgrade bonuses
Opened
#77 [priority: 3] tick() passes empty skill objects to computeMaxMana/computeRegen — skill bonuses ignored
Opened
#78 [priority: 3] cancelDesign logic inverted — cancels wrong design slot
Opened
#79 [priority: 3] startDesigningEnchantment never uses designProgress2 slot (Enchant Mastery broken)
Opened
#80 [priority: 3] Combat store partialize missing floorHP/floorMaxHP/castProgress — state lost on refresh
Opened
#81 [priority: 3] Prestige store partialize missing defeatedGuardians/signedPacts/pact progress
Opened
#82 [priority: 3] SteadyStream has identical behavior to EternalFlow — latent bug
Opened
#83 [priority: 3] Mana Tide pulse factor incorrect — ranges 0.5x-1.0x instead of 0.5x-1.5x
Opened
#84 [priority: 6] Consolidate all tab components into src/components/game/tabs/
Opened
#85 [priority: 4] Recreate Achievements Tab
Opened
#86 [priority: 4] Recreate Attunements Tab
Opened
#87 [priority: 4] Recreate Crafting Tab with Fabricator and Enchanter Sub-Tabs
Opened
#88 [priority: 4] Recreate Golemancy Tab — Golem Loadout Configuration
Opened
#89 [priority: 4] Recreate Guardian Pacts Tab (Invoker Attunement)
Opened
#90 [priority: 4] Recreate Equipment Tab — Equip/Unequip Gear
Opened
#91 [priority: 4] Recreate Prestige Tab — Insight Upgrade Purchasing
Opened
#92 [priority: 4] Recreate Debug Tab — Modular Debugging Functions
Opened
#93 [priority: 4] Recreate Spire Summary Tab (Outside Spire)
Opened
#94 [priority: 4] Recreate Spire Combat Page — Full Spire Climbing Experience
Opened
#95 [priority: critical] 3 import cycles in production code (store↔utils, equipment↔utils, golems↔utils)
Opened
#96 [priority: critical] Legacy store.ts coexists with modular stores/ — incomplete migration
Opened
#97 [priority: critical] Near-zero test coverage — 155 of 235 files untested, including all core game logic
Opened
#98 [priority: critical] 13+ files use as any type casts bypassing TypeScript's type safety
Opened
#99 [priority: high] 10+ monster functions (>150 LOC) with deep nesting and high cyclomatic complexity
Opened
#100 [priority: high] Duplicate functions across files (calculateDesignTime, calculateDesignCapacityCost, generateSwarmEnemies)
Opened
#101 [priority: high] Inconsistent error handling — mixed return-null/throw/false patterns with no error context
Opened
#102 [priority: high] Bloated state types — GameState (71 fields), CombatState (58), PrestigeState (39)
Opened
#103 [priority: high] gameStore.ts tick() orchestrates 7 stores with tangled cross-store coupling