- SkillDebug.tsx: Use useSkillStore.getState().incrementSkillLevel() and setSkillLevel() instead of direct setState
- ElementDebug.tsx: Use getState() for consistency
- AttunementDebug.tsx: When unlocking Enchanter, also unlock transference element
- GameStateDebug.tsx: Use proper store actions (debugSetFloor, resetFloorHP, debugSetTime) and fix Switch component usage
The startStudyingSkill() and startStudyingSpell() functions in skillStore.ts
were setting currentStudyTarget but not updating currentAction in combatStore.
Added useCombatStore.getState().setAction('study') calls to both functions
so the game tick properly processes study progress.
- FIX 6: GrimoireTab now properly handles loading state and shows message when no grimoire spells are available
- FIX 7: Added spireMode store read and useEffect to switch to spire tab when enterSpireMode() is called
- Added startCraftingEquipment action that validates and initializes equipment crafting
- Added cancelEquipmentCrafting action that cancels crafting and refunds mana
- Used CraftingEquipment functions directly instead of deprecated wrapper actions
- Updated craftingStore imports to include useManaStore and useUIStore
- Fixed crafting/index.tsx barrel file export (removed non-existent type exports)
- Fixed syntax errors in craftingStore.ts (missing commas in function params)
Fixes issue where EquipmentCrafter component couldn't find these actions on craftingStore.
- SkillsTab.tsx: Replace useGameStore with useSkillStore for currentStudyTarget
- SkillUpgradeDialog.tsx: Migrate to useSkillStore, fix commitSkillUpgrades call
- SkillRow.tsx: Remove parallel study feature (startParallelStudySkill doesn't exist in skillStore), remove hasParallelStudy reference
- Update index.ts export to point to new SkillsTab location
- Delete old legacy tabs/SkillsTab.tsx file
- Fixed src/components/game/GameContext/Provider.tsx
- Fixed src/components/game/GameContext/types.ts
The upgrade-effects.ts imports these from special-effects.ts but doesn't re-export them.
- Updated AGENTS.md to include store/ directory and clarify store architecture
- Updated GAME_BRIEFING.md Code Architecture section with store/ and legacy store info
- Updated skills.md with skill state management information
- Includes other refactoring changes (store hooks, component updates, etc.)
- Fix GrimoireTab to handle SSR safely (SPELLS_DEF undefined during server-side rendering)
- Use useState and useEffect to only access constants on client-side
- Build now succeeds consistently
- Fix game loop store mismatch (page.tsx now uses modular stores matching gameHooks.ts)
- Fix StatsTab.tsx type errors (signedPacts now from usePrestigeStore)
- Fix React hooks violations (all hooks called before conditional returns)
- Add ErrorBoundary to page.tsx for better error handling
- Fix getStudySpeedMultiplier called with correct arguments
- Build succeeds consistently
- Fix game loop store mismatch (page.tsx was using old store, gameHooks using new store)
- Fix StatsTab.tsx calling getStudySpeedMultiplier with wrong arguments
- Add ErrorBoundary to page.tsx for better error handling
- Fix import syntax issues in page.tsx
- Ensure build succeeds with fixes
- Updated StatsTab to use hooks directly (useSkillStore, usePrestigeStore, etc.)
- Updated DebugTab to use hooks directly
- Updated all debug child components (GameStateDebug, SkillDebug, AttunementDebug, etc.)
- Updated all stats child components (ManaStatsSection, CombatStatsSection, etc.)
- Fixed UpgradeEffectsSection.tsx syntax errors
- Updated page.tsx to not pass store prop to StatsTab and DebugTab
- All components now use modular stores directly instead of receiving store prop
- Refactored page.tsx (613→252 lines) with GameOverScreen and LeftPanel extracted
- Refactored StatsTab.tsx (584→92 lines) with section components
- Refactored SkillsTab.tsx (434→54 lines) with sub-components
- Created modular structure for GameContext, LootInventory, and other components
- All extracted components organized into feature directories
1. Fixed exitSpireMode in store.ts to allow exit at any floor for re-entry resume
2. Removed floor restriction on Exit Spire button in page.tsx
3. Updated descend button label to use currentAction for 'Climbing' status
- Deleted old src/components/game/SpireTab.tsx (duplicate of tabs/SpireTab.tsx)
- Verified SWARM_CONFIG: 15% chance, 3-6 enemies at 40% HP
- Verified UI in tabs/SpireTab.tsx correctly renders each swarm enemy individually
- Verified generateSwarmEnemies() and generateRoomType() logic is correct
- Updated SpireModeUI Activity Log in page.tsx to use activityLog state instead of log
- Added ActivityLogEntry import from @/lib/game/types
- Applied event type styling for: damage_dealt, enemy_defeated, floor_cleared, floor_transition, special_effect
- Increased ScrollArea height from h-32 to h-48 for better visibility
- Changed from store.log.slice(0, 20) to store.activityLog.slice(0, 50)
- Added empty state message 'No activity yet...'
- Added proper key usage with entry.id instead of array index
- Added ActivityLogEntry type to game types
- Added activityLog state to GameState interface
- Added addActivityLogEntry helper function in store.ts
- Added addActivityLog action to GameStore
- Hooked into combat events: damage_dealt, enemy_defeated, floor_cleared, floor_transition
- Hooked into special effects: dodge, armor_proc, special_effect (First Strike, Combo Master, etc.)
- Hooked into golem attacks and puzzle solving
- Updated SpireTab (tabs/SpireTab.tsx) to display activity log with colored entries
- Latest entries first, scrollable list with event type-based styling