refactor: complete error handling standardization (issue #101)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m26s

Prestige Store:
- Convert doPrestige() to return Result<void> with specific error codes
  (INVALID_PRESTIGE_ID, PRESTIGE_MAX_LEVEL, INSUFFICIENT_INSIGHT)
- Convert startPactRitual() to return Result<void> with specific error codes
  (GUARDIAN_NOT_DEFEATED, PACT_ALREADY_SIGNED, PACT_SLOTS_FULL,
   INSUFFICIENT_MANA, RITUAL_IN_PROGRESS)

Combat Actions:
- Add try/catch wrapper inside processCombatTick with safe fallback defaults
- Add makeDefaultCombatTickResult helper for error recovery

LocalStorage Error Handling:
- Create safe-persist.ts utility wrapping localStorage with error handling
  (corrupted JSON, quota exceeded, unexpected failures)
- Update all 8 Zustand stores to use createSafeStorage() in persist middleware

UI Updates:
- Update GuardianPactsTab to use Result pattern for ritual error messages

Tests:
- Update store-actions-combat-prestige.test.ts for Result return types
- Update store-actions.test.ts ManaStore tests for Result pattern
- Remove duplicate Prestige/Discipline sections from store-actions.test.ts
- All files under 400 line limit

601 tests pass (3 pre-existing failures in spire-utils.test.ts)
This commit is contained in:
2026-05-22 09:19:20 +02:00
parent 8a7ddaae27
commit 49f8de01ca
21 changed files with 542 additions and 547 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
# Circular Dependencies
Generated: 2026-05-20T17:48:45.265Z
Generated: 2026-05-20T19:05:27.642Z
Found: 4 circular chain(s) — these MUST be fixed before modifying involved files.
1. Processed 126 files (1.4s) (3 warnings)
1. Processed 126 files (1.3s) (3 warnings)
2. 1) stores/gameStore.ts > stores/gameActions.ts
3. 2) stores/gameStore.ts > stores/gameLoopActions.ts
4. 3) stores/gameStore.ts > stores/tick-pipeline.ts
+8 -3
View File
@@ -1,6 +1,6 @@
{
"_meta": {
"generated": "2026-05-20T17:48:43.703Z",
"generated": "2026-05-20T19:05:26.102Z",
"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."
},
@@ -85,14 +85,16 @@
],
"crafting-actions/application-actions.ts": [
"crafting-apply.ts",
"stores/craftingStore.types.ts",
"types.ts"
],
"crafting-actions/computed-getters.ts": [
"data/enchantment-effects.ts",
"types.ts"
"stores/craftingStore.types.ts"
],
"crafting-actions/crafting-equipment-actions.ts": [
"crafting-equipment.ts",
"stores/craftingStore.types.ts",
"types.ts"
],
"crafting-actions/design-actions.ts": [
@@ -100,13 +102,15 @@
"crafting-utils.ts",
"effects/special-effects.ts",
"effects/upgrade-effects.ts",
"stores/craftingStore.types.ts",
"types.ts"
],
"crafting-actions/disenchant-actions.ts": [
"types.ts"
"stores/craftingStore.types.ts"
],
"crafting-actions/equipment-actions.ts": [
"crafting-utils.ts",
"stores/craftingStore.types.ts",
"types.ts"
],
"crafting-actions/index.ts": [
@@ -534,6 +538,7 @@
"types/attunements.ts",
"types/elements.ts",
"types/equipment.ts",
"types/equipmentSlot.ts",
"types/game.ts",
"types/spells.ts"
],
+2
View File
@@ -334,7 +334,9 @@ Mana-Loop/
│ │ │ ├── index.ts
│ │ │ ├── mana-utils.ts
│ │ │ ├── pact-utils.ts
│ │ │ ├── result.ts
│ │ │ ├── room-utils.ts
│ │ │ ├── safe-persist.ts
│ │ │ └── spire-utils.ts
│ │ ├── constants.ts
│ │ ├── crafting-apply.ts