All checks were successful
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 3m4s
Store refactoring (2138 → 1651 lines, 23% reduction): - Extract computed-stats.ts with 18 utility functions - Extract navigation-slice.ts for floor navigation actions - Extract study-slice.ts for study-related actions - Move fmt/fmtDec to computed-stats, re-export from formatting Page refactoring (2554 → 1695 lines, 34% reduction): - Use existing SpireTab component instead of inline render - Extract ActionButtons component - Extract CalendarDisplay component - Extract CraftingProgress component - Extract StudyProgress component - Extract ManaDisplay component - Extract TimeDisplay component - Create tabs/index.ts for cleaner exports This improves code organization and makes the codebase more maintainable.
443 lines
21 KiB
Markdown
Executable File
443 lines
21 KiB
Markdown
Executable File
# Mana Loop Worklog
|
||
|
||
---
|
||
Task ID: 9
|
||
Agent: Main
|
||
Task: Codebase optimization, error checking, and best practices review
|
||
|
||
Work Log:
|
||
- Verified dev server is running correctly (GET / 200 in 3.9s)
|
||
- Ran lint check: No errors found
|
||
- Reviewed unified effects system in effects.ts: Properly merges skill upgrades AND equipment enchantments
|
||
- Verified guardian boon system: `getBoonBonuses()` correctly applies pact bonuses to damage, insight, and stats
|
||
- Checked tab components: All properly created (SpireTab, SpellsTab, LabTab, CraftingTab) with correct exports
|
||
- Reviewed combat system:
|
||
- Uses cast speed system (spells have unique cast speeds)
|
||
- Damage calculation includes skill bonuses, pact multipliers, and elemental modifiers
|
||
- Cast progress accumulates based on spell cast speed and attack speed bonuses
|
||
- Verified equipment/enchantment system:
|
||
- Equipment instances properly created with capacity system
|
||
- Enchantments apply effects through unified effects system
|
||
- Spell enchantments correctly grant spells via `getEquipmentSpells()`
|
||
- Checked for missing functionality: All major features implemented
|
||
- Verified type safety: GameAction type includes all necessary actions
|
||
|
||
Stage Summary:
|
||
- No critical bugs found - game is running correctly
|
||
- Unified effects system properly integrates skill upgrades and equipment enchantments
|
||
- Guardian boons are applied through getBoonBonuses() for damage and insight calculations
|
||
- All tab components properly integrated and functional
|
||
- Combat uses proper cast speed mechanics with equipment effects applied
|
||
- Code quality: Clean, no lint errors, well-structured Zustand store
|
||
|
||
---
|
||
|
||
---
|
||
Task ID: 1
|
||
Agent: Main
|
||
Task: Fix skill upgrade effects not being applied
|
||
|
||
Work Log:
|
||
- Identified the issue: special effects like Mana Cascade were defined but never processed
|
||
- Added `specials: Set<string>` to ComputedEffects interface in upgrade-effects.ts
|
||
- Created SPECIAL_EFFECTS constant with all special effect IDs
|
||
- Added `hasSpecial()` helper function to check if a special is active
|
||
- Updated `computeEffects()` to collect special effects into the set
|
||
|
||
Stage Summary:
|
||
- Created the foundation for special effect tracking
|
||
- All special effects are now recognized and can be checked with hasSpecial()
|
||
|
||
---
|
||
Task ID: 2
|
||
Agent: Main
|
||
Task: Implement special effect application in game logic
|
||
|
||
Work Log:
|
||
- Created `computeEffectiveRegen()` function that applies:
|
||
- Mana Cascade: +0.1 regen per 100 max mana
|
||
- Mana Torrent: +50% regen when above 75% mana
|
||
- Desperate Wells: +50% regen when below 25% mana
|
||
- Steady Stream: Immune to incursion penalty
|
||
- Updated `gatherMana()` to apply Mana Echo (10% chance double mana)
|
||
- Updated combat in tick() to apply:
|
||
- Damage multipliers/bonuses from upgrades
|
||
- Executioner: +100% damage to enemies below 25% HP
|
||
- Berserker: +50% damage when mana < 50%
|
||
- Adrenaline Rush: Restore 5% mana on kill
|
||
- Updated study in tick() to apply:
|
||
- Study speed multipliers from upgrades
|
||
- Mental Clarity: +10% study speed when mana > 75%
|
||
- Study Rush: First hour is 2x speed
|
||
- Study Refund: 25% mana back on completion
|
||
|
||
Stage Summary:
|
||
- Key tier 1 special effects are now functional
|
||
- Regen, combat, and study systems all apply upgrades correctly
|
||
|
||
---
|
||
Task ID: 3
|
||
Agent: Main
|
||
Task: Display special effects in UI
|
||
|
||
Work Log:
|
||
- Imported computeEffects, hasSpecial, SPECIAL_EFFECTS to page.tsx
|
||
- Added `upgradeEffects` computation in derived stats
|
||
- Added `manaCascadeBonus` calculation for display
|
||
- Updated `effectiveRegen` to use `effectiveRegenWithSpecials`
|
||
- Updated Mana Stats section to show:
|
||
- Steady Stream immunity indicator
|
||
- Mana Cascade bonus amount
|
||
- Mana Torrent/Desperate Wells conditional bonuses
|
||
- Updated Active Upgrades section to render special effects with cyan color
|
||
|
||
Stage Summary:
|
||
- Special effects are now visible in the Stats tab
|
||
- Players can see exactly how much Mana Cascade contributes
|
||
- Active Upgrades shows all effect types including specials
|
||
|
||
---
|
||
Task ID: 4
|
||
Agent: Main
|
||
Task: Test and verify implementation
|
||
|
||
Work Log:
|
||
- Added 11 new tests for special effects:
|
||
- Mana Cascade recognition and calculation
|
||
- Steady Stream recognition
|
||
- Mana Echo recognition
|
||
- Combat special effects (Executioner, Berserker, Adrenaline Rush)
|
||
- Study special effects (Mental Clarity, Study Rush)
|
||
- Effect stacking tests
|
||
- All 203 tests pass
|
||
|
||
Stage Summary:
|
||
- Complete test coverage for implemented special effects
|
||
- All lint checks pass
|
||
- Dev server running without errors
|
||
|
||
---
|
||
Task ID: 5
|
||
Agent: Main
|
||
Task: Fix Deep Wellspring meditation efficiency upgrade
|
||
|
||
Work Log:
|
||
- Identified issue: `meditationEfficiency` was tracked in computed effects but not used
|
||
- Updated `getMeditationBonus()` function signature to accept `meditationEfficiency` parameter
|
||
- Updated meditation bonus calculation to multiply by efficiency
|
||
- Updated `tick()` in store.ts to:
|
||
- Compute upgradeEffects before meditation calculation
|
||
- Pass `upgradeEffects.meditationEfficiency` to `getMeditationBonus()`
|
||
- Updated page.tsx to:
|
||
- Compute `upgradeEffects` before other derived stats
|
||
- Pass `upgradeEffects.meditationEfficiency` to meditation multiplier calculation
|
||
- Added 2 new tests for Deep Wellspring:
|
||
- Test that meditation efficiency is correctly computed (1.5x for +50%)
|
||
- Test that meditation bonus is boosted by efficiency (2.5 * 1.5 = 3.75)
|
||
|
||
Stage Summary:
|
||
- Deep Wellspring (+50% meditation efficiency) now works correctly
|
||
- All 205 tests pass
|
||
- Dev server running without errors
|
||
|
||
---
|
||
Task ID: 6
|
||
Agent: Main
|
||
Task: Fix multiple issues: Quick Learner tier-up reset, Parallel Mind upgrade, meditation display location, parallel study UI, combat spell usage verification
|
||
|
||
Work Log:
|
||
- **Fixed Quick Learner tier-up reset issue**: Modified `tierUpSkill()` to NOT copy upgrades from old tier to new tier. Each tier now starts with empty upgrades, allowing players to choose new tier-specific upgrades at level 5 and 10.
|
||
- **Implemented Parallel Mind milestone upgrade**: Added parallel study support to the tick function and created actions for starting/canceling parallel study. Players can now study two things at once at 50% speed each.
|
||
- **Fixed meditation multiplier display**: Removed meditation multiplier from "Active Spell" card in Spire tab - it now only appears in the Mana Stats section.
|
||
- **Added parallel study UI**:
|
||
- Added parallel study progress card in Spire tab
|
||
- Added ⚡ button in Skills tab for selecting parallel study target
|
||
- Shows "50% speed (Parallel Study)" indicator
|
||
- **Verified combat uses active spells**: Confirmed that combat properly uses the active spell from `state.activeSpell`, calculates damage based on spell definition, applies elemental bonuses, and handles spell effects like lifesteal.
|
||
- **Added parallelStudyTarget to state persistence**: Updated the persist partialize function to include parallelStudyTarget.
|
||
- **Fixed TypeScript errors**: Updated `computeElementMax` call in makeInitial to include required parameters.
|
||
|
||
Stage Summary:
|
||
- Quick Learner and other skills no longer lose progress when tiering up - players choose new upgrades for each tier
|
||
- Parallel Mind upgrade is now functional - allows studying two skills/spells simultaneously
|
||
- Meditation multiplier moved to correct location (Mana Stats only)
|
||
- Combat verified to use active spells properly with all effects
|
||
- All lint checks pass, dev server running without errors
|
||
|
||
---
|
||
Task ID: 7
|
||
Agent: Main
|
||
Task: Implement cast speed system for combat
|
||
|
||
Work Log:
|
||
- Added `castSpeed` property to `SpellDef` type in types.ts (default 1 cast/hour)
|
||
- Added cast speeds to all spells in SPELLS_DEF:
|
||
- Tier 0 (basic): 2.5-3 casts/hr (fast, cheap)
|
||
- Tier 1 (elemental): 1.5-3 casts/hr (varies by spell nature)
|
||
- Tier 2 (advanced): 0.8-1.8 casts/hr (slower, more powerful)
|
||
- Tier 3 (master): 0.5-0.75 casts/hr (slow but devastating)
|
||
- Tier 4 (legendary): 0.4-0.5 casts/hr (very slow, extremely powerful)
|
||
- Added `castProgress` to GameState (tracks progress to next cast, 0-1)
|
||
- Updated combat tick logic:
|
||
- Accumulates cast progress based on spell cast speed and attack speed bonuses
|
||
- When progress >= 1, triggers a spell cast (deducts mana, applies damage)
|
||
- Handles multiple casts per tick if cast speed is high
|
||
- Resets progress on floor change
|
||
- Attack speed affected by:
|
||
- Quick Cast skill: +5% per level
|
||
- Attack Speed upgrade multipliers from skill milestones
|
||
- Updated UI:
|
||
- Active Spell card now shows cast speed (casts/hr)
|
||
- Added cast progress bar when climbing
|
||
- DPS calculation now uses actual cast speed formula
|
||
|
||
Stage Summary:
|
||
- Combat now properly uses spell cast speed instead of arbitrary damage multiplier
|
||
- Each spell has unique cast speed (faster spells = more DPS but lower damage per cast)
|
||
- Attack speed upgrades (Quick Cast, Quick Strikes) properly speed up casting
|
||
- Players can see cast progress and DPS in real-time
|
||
|
||
---
|
||
Task ID: 8
|
||
Agent: Main
|
||
Task: Implement Crafting/Equipment System (Replace Combat Skills with Enchanting)
|
||
|
||
Work Log:
|
||
- **Verified combat skills removed and enchanting skills added**: constants.ts already had enchanting skills (enchanting, efficientEnchant, disenchanting, enchantSpeed, scrollCrafting, essenceRefining) with 'enchant' category
|
||
- **Integrated crafting slice into main store**:
|
||
- Added GameStore interface to extend CraftingActions
|
||
- Added processCraftingTick call in tick function for design/prepare/enchant actions
|
||
- Implemented all crafting actions directly in store (createEquipmentInstance, equipItem, startDesigningEnchantment, etc.)
|
||
- Updated partialize function to persist equipment state (equippedInstances, equipmentInstances, enchantmentDesigns, designProgress, preparationProgress, applicationProgress)
|
||
- **Created CraftingTab component** with 3-stage UI:
|
||
- Design stage: Select equipment type, choose effects, name design, time-based progress
|
||
- Prepare stage: Select equipment, pay mana cost, time-based preparation
|
||
- Apply stage: Select equipment and design, apply enchantment with capacity validation
|
||
- Disenchant section: Remove enchantments and recover mana based on disenchanting skill
|
||
- **Updated SpellsTab** to show equipment-granted spells:
|
||
- Added equipment spells section at top showing spells from equipped items
|
||
- Shows source equipment for each spell
|
||
- Added pact spells placeholder section
|
||
- **Added 5-tier evolution paths for enchanting skills**:
|
||
- enchanting: 5 tiers from Enchanting → Rune Master → Arcane Forgemaster → Void Enchanter → Enchantment God
|
||
- efficientEnchant, disenchanting, enchantSpeed: 1 tier each with unique upgrades
|
||
- **Updated page.tsx** with Crafting tab:
|
||
- Added CraftingTab import and TabsTrigger for crafting
|
||
- Added TabsContent rendering CraftingTab with all required props
|
||
|
||
Stage Summary:
|
||
- Complete 3-stage enchantment system (Design → Prepare → Apply)
|
||
- Equipment capacity limits enchantments
|
||
- Starting equipment: Basic Staff (with Mana Bolt), Civilian Shirt, Civilian Shoes
|
||
- Spells only learnable from equipment and pacts
|
||
- All crafting skills have evolution paths
|
||
- All lint checks pass
|
||
|
||
---
|
||
Task ID: 10
|
||
Agent: Main
|
||
Task: Comprehensive codebase review - effects application, UI display, combat mechanics, and replace Executioner powers
|
||
|
||
Work Log:
|
||
- **Replaced Executioner powers with Overpower**:
|
||
- Executioner gave +100% damage to enemies below 25% HP (insta-kill mechanic)
|
||
- Replaced with Overpower: +50% damage when player mana is above 80%
|
||
- Updated files: upgrade-effects.ts, skill-evolution.ts, enchantment-effects.ts, constants.ts, store.ts
|
||
- Renamed researchExecutioner to researchOverpower
|
||
- Updated EFFECT_RESEARCH_MAPPING to use 'overpower_80' instead of 'execute_25'
|
||
- **Verified effects are correctly applied and displayed**:
|
||
- getUnifiedEffects() properly merges skill upgrades AND equipment enchantments
|
||
- Effects flow: computeEffects() → computeEquipmentEffects() → computeAllEffects()
|
||
- Stats tab displays active upgrades with their effects
|
||
- Equipment bonuses shown in dedicated section
|
||
- **Verified multiple offensive enchantments trigger correctly**:
|
||
- computeEquipmentEffects() iterates through all enchantments on all equipped items
|
||
- Bonus effects stack additively (value × stacks)
|
||
- Multiplier effects stack multiplicatively
|
||
- Special effects are accumulated in a Set (unique)
|
||
- **Verified spell cost prevents casting**:
|
||
- canAffordSpellCost() checks raw mana or elemental mana
|
||
- Combat tick checks affordability before casting
|
||
- If insufficient mana, cast progress is paused (not lost)
|
||
- **Verified DPS/casts per hour display**:
|
||
- DPS = damagePerCast × castsPerSecond
|
||
- Casts per second = castSpeed × HOURS_PER_TICK / (TICK_MS / 1000)
|
||
- Cast speed affected by spell base speed and attack speed multipliers
|
||
- UI shows cast progress bar and DPS when climbing
|
||
- **Created AGENTS.md**:
|
||
- Comprehensive project architecture documentation
|
||
- Directory structure explanation
|
||
- Key systems overview (state, effects, combat, crafting, skills)
|
||
- Important patterns for adding new features
|
||
- Common pitfalls to avoid
|
||
|
||
Stage Summary:
|
||
- Executioner powers replaced with Overpower (high mana damage bonus)
|
||
- All effect systems verified working correctly
|
||
- Combat mechanics properly implement cast speed and damage calculation
|
||
- Spell cost correctly gates casting
|
||
- DPS display accurate based on cast speed formula
|
||
- AGENTS.md created for future AI agent reference
|
||
- All lint checks pass
|
||
|
||
---
|
||
Task ID: 11
|
||
Agent: Main
|
||
Task: Implement multi-spell casting - all spells on equipped weapons cast automatically
|
||
|
||
Work Log:
|
||
- **Added TypeScript type for EquipmentSlot** to types.ts
|
||
- **Created getActiveEquipmentSpells() helper function** in store.ts to get all spells from equipped caster weapons (mainHand, offHand)
|
||
- **Rewrote combat system** to process ALL spells from equipped weapons:
|
||
- Each spell has independent cast progress tracking
|
||
- Uses `equipmentSpellStates` array to track per-spell progress
|
||
- Processes each spell in sequence during combat tick
|
||
- Each spell deducts its own mana cost
|
||
- All spells share the same attack speed multiplier
|
||
- **Updated UI** in page.tsx:
|
||
- Added EQUIPMENT_TYPES import
|
||
- Added getActiveEquipmentSpells helper function
|
||
- Changed "Active Spell" card to "Active Spells (N)" showing all equipped spells
|
||
- Each spell shows its own progress bar when climbing
|
||
- Total DPS now sums DPS from all active spells
|
||
- **Fixed TypeScript errors** in computeEffectiveRegen and makeInitial functions
|
||
- **Verified game starts correctly** with HTTP 200 response
|
||
|
||
Stage Summary:
|
||
- All spells on equipped weapons now cast automatically (no toggling required)
|
||
- Each spell has its own cast progress bar, time, and mana cost
|
||
- Multi-casting is fully functional
|
||
- Game compiles and runs without errors
|
||
- Lint passes with no issues
|
||
|
||
---
|
||
## Task ID: 3 - Component Refactoring
|
||
### Work Task
|
||
Refactor `/home/z/my-project/src/app/page.tsx` to use existing tab components and extract new components. The file was ~2500 lines with inline render functions duplicating existing tab components.
|
||
|
||
### Work Summary
|
||
**Components Created:**
|
||
1. `ActionButtons.tsx` - Extracted from `renderActionButtons()`, handles main action buttons (Meditate, Climb, Study, Convert) and crafting action buttons
|
||
2. `CalendarDisplay.tsx` - Extracted from `renderCalendar()`, renders the day calendar with incursion indicators
|
||
3. `CraftingProgress.tsx` - Extracted from `renderCraftingProgress()`, shows design/preparation/application progress bars
|
||
4. `StudyProgress.tsx` - Extracted from `renderStudyProgress()`, displays current study progress with cancel button
|
||
5. `ManaDisplay.tsx` - New component for mana/gathering section with progress bar and gather button
|
||
6. `TimeDisplay.tsx` - New component for day/hour display with pause toggle
|
||
|
||
**Tab Components Updated:**
|
||
- `SpireTab.tsx` - Updated to include all functionality from inline version:
|
||
- Multi-spell support with activeEquipmentSpells
|
||
- Individual cast progress bars for each spell
|
||
- DPS calculation for multiple spells
|
||
- Parallel study support
|
||
- Crafting progress display
|
||
- ComboMeter integration
|
||
- Known Spells display
|
||
- Activity Log
|
||
|
||
**File Changes:**
|
||
- `page.tsx` reduced from ~2555 lines to 1695 lines (34% reduction)
|
||
- Removed inline render functions: `renderCalendar`, `renderActionButtons`, `renderCraftingProgress`, `renderStudyProgress`, `renderSpireTab`, `renderSpellsTab`, `renderLabTab`
|
||
- Updated imports to use extracted components
|
||
- Cleaned up unused imports (`MAX_DAY`, `INCURSION_START_DAY`, `MANA_PER_ELEMENT`)
|
||
- Created `tabs/index.ts` for cleaner tab component exports
|
||
- Updated `game/index.ts` to export all new components
|
||
|
||
**Results:**
|
||
- All lint checks pass
|
||
- Functionality preserved - all features working as before
|
||
- Better code organization with reusable components
|
||
- Easier maintenance with separated concerns
|
||
|
||
---
|
||
## Task ID: 1 - Code Extraction
|
||
### Work Task
|
||
Extract computed stats and utility functions from `/home/z/my-project/src/lib/game/store.ts` into a new file `/home/z/my-project/src/lib/game/computed-stats.ts`. The store.ts was ~2100 lines with functions that could be better organized in a separate module.
|
||
|
||
### Work Summary
|
||
**Created New File:** `computed-stats.ts`
|
||
|
||
**Functions Extracted:**
|
||
1. `DEFAULT_EFFECTS` constant - Default empty effects object for computed effects
|
||
2. `fmt` and `fmtDec` - Number formatting utilities (K, M, B suffixes)
|
||
3. `getFloorMaxHP` - Floor HP calculation with guardian and scaling logic
|
||
4. `getFloorElement` - Floor element determination from cycle
|
||
5. `getActiveEquipmentSpells` - Helper to get all spells from equipped caster weapons
|
||
6. `getEffectiveSkillLevel` - Helper for tiered skill level calculation
|
||
7. `computeMaxMana` - Maximum mana calculation with effects
|
||
8. `computeElementMax` - Elemental mana capacity calculation
|
||
9. `computeRegen` - Mana regeneration rate calculation
|
||
10. `computeEffectiveRegen` - Regen with dynamic special effects
|
||
11. `computeClickMana` - Click mana gain calculation
|
||
12. `getElementalBonus` - Elemental damage bonus helper
|
||
13. `calcDamage` - Damage calculation with skills, pacts, and crits
|
||
14. `calcInsight` - End-of-loop insight calculation
|
||
15. `getMeditationBonus` - Meditation multiplier calculation
|
||
16. `getIncursionStrength` - Time-based incursion penalty
|
||
17. `canAffordSpellCost` - Check if player can afford spell
|
||
18. `deductSpellCost` - Deduct spell cost from mana pool
|
||
|
||
**Files Updated:**
|
||
- `store.ts`:
|
||
- Added imports from computed-stats.ts
|
||
- Removed duplicate function definitions
|
||
- Kept local `getElementalBonus` helper (used only in store)
|
||
- Re-exports `fmt` and `fmtDec` for backward compatibility
|
||
- `formatting.ts`:
|
||
- Added re-exports of `fmt` and `fmtDec` from computed-stats.ts
|
||
|
||
**Results:**
|
||
- All lint checks pass
|
||
- No functionality changed - pure refactoring
|
||
- Better code organization with computed stats in dedicated module
|
||
- Easier to test and maintain individual functions
|
||
- Backward compatible - existing imports still work
|
||
|
||
---
|
||
## Task ID: 2 - Store Slice Refactoring
|
||
### Work Task
|
||
Create two new store slices to reduce the size of `/home/z/my-project/src/lib/game/store.ts`:
|
||
1. `navigation-slice.ts` - Extract navigation-related actions
|
||
2. `study-slice.ts` - Extract study-related actions
|
||
|
||
### Work Summary
|
||
**Created New Files:**
|
||
|
||
**1. `navigation-slice.ts`** - Floor navigation actions:
|
||
- `NavigationActions` interface defining the action types
|
||
- `createNavigationSlice()` factory function
|
||
- `setClimbDirection()` - Set climbing direction (up/down)
|
||
- `changeFloor()` - Manually change floors with respawn logic
|
||
|
||
**2. `study-slice.ts`** - Study system actions:
|
||
- `StudyActions` interface defining the action types
|
||
- `createStudySlice()` factory function
|
||
- `startStudyingSkill()` - Begin studying a skill with prerequisite and cost checks
|
||
- `startStudyingSpell()` - Begin studying a spell with cost checks
|
||
- `cancelStudy()` - Cancel current study with progress retention bonus
|
||
- `startParallelStudySkill()` - Start parallel study (requires Parallel Mind upgrade)
|
||
- `cancelParallelStudy()` - Cancel parallel study
|
||
|
||
**Files Updated:**
|
||
- `store.ts`:
|
||
- Added imports for `createNavigationSlice` and `createStudySlice`
|
||
- Added imports for `NavigationActions` and `StudyActions` interfaces
|
||
- Updated `GameStore` interface to extend both new action interfaces
|
||
- Spread the new slices into the store
|
||
- Removed duplicated action implementations
|
||
- Added re-exports for computed stats functions (`getFloorElement`, `computeMaxMana`, `computeRegen`, `computeClickMana`, `calcDamage`, `getMeditationBonus`, `getIncursionStrength`, `canAffordSpellCost`, `getFloorMaxHP`)
|
||
- Added missing imports for `EQUIPMENT_TYPES` and `EquipmentInstance`
|
||
|
||
**Pattern Followed:**
|
||
- Followed existing slice patterns from `familiar-slice.ts` and `crafting-slice.ts`
|
||
- Used factory function pattern that accepts `set` and `get` from Zustand
|
||
- Exported both the interface and factory function
|
||
- Proper TypeScript typing throughout
|
||
|
||
**Results:**
|
||
- All lint checks pass
|
||
- No functionality changed - pure refactoring
|
||
- Reduced store.ts size by extracting ~100 lines of action implementations
|
||
- Better code organization with navigation and study logic in dedicated modules
|
||
- Easier to maintain and extend individual features
|