Replace 12 dynamic `await import()` calls with domain events emitted through the existing systemEvents bus, breaking circular dependencies between services (economy/inventory/leveling -> quest, * -> dashboard). - Add `emitAsync` to SystemEventEmitter for sequential listener awaiting, preserving DB transaction atomicity for quest progress tracking - Add DOMAIN event constants (BALANCE_CHANGED, XP_GAINED, ITEM_COLLECTED, ITEM_USED, TRANSFER_COMPLETED, DAILY_CLAIMED, TRIVIA_*, EXAM_PASSED) - Create shared/lib/eventWiring.ts to register all domain event listeners - Convert quest event calls to `await systemEvents.emitAsync()` (5 calls) - Convert dashboard event calls to `systemEvents.emit()` fire-and-forget (5 calls) - Convert exam.service.ts userService import to static import (1 call) - Convert dashboard.service.ts events import to static import (1 call) - Leave inventory.service.ts validateAndExecuteEffect import unchanged (Task 3) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9.9 KiB
9.9 KiB