From 51b63f4a35ef6861bc38e054106a54fde9cc2805 Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Fri, 5 Dec 2025 15:43:46 +0100 Subject: [PATCH] critical: Fix service initialization - start services BEFORE validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CRITICAL BUG DISCOVERED (Dec 5, 2025): - validateOpenTrades() returns early at line 111 when no trades found - Service initialization (lines 59-72) happened AFTER validation - Result: When no open trades, services NEVER started - Impact: Stop hunt tracker, smart validation, blocked signal tracking all inactive ROOT CAUSE: - Line 43: await validateOpenTrades() - Line 111: if (openTrades.length === 0) return // EXIT EARLY - Lines 59-72: Service startup code (NEVER REACHED) FIX: - Moved service initialization BEFORE validation - Services now start regardless of open trades count - Order: Start services โ†’ Clean DB โ†’ Validate โ†’ Init Position Manager SERVICES NOW START: - Data cleanup (4-week retention) - Blocked signal price tracker - Stop hunt revenge tracker - Smart entry validation system This explains why: - Line 111 log appeared (validation ran, returned early) - Line 29 log appeared (function started) - Lines 59-72 logs NEVER appeared (code never reached) Git commit SHA: TBD Deployment: Requires rebuild + restart --- lib/startup/init-position-manager.ts | 42 +++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/startup/init-position-manager.ts b/lib/startup/init-position-manager.ts index 6d3eeb2..2040d4f 100644 --- a/lib/startup/init-position-manager.ts +++ b/lib/startup/init-position-manager.ts @@ -29,7 +29,29 @@ export async function initializePositionManagerOnStartup() { logger.log('๐Ÿš€ Initializing Position Manager on startup...') try { - // CRITICAL: Run database sync validator FIRST to clean up duplicates + // CRITICAL (Dec 5, 2025): Start services FIRST, before validation + // Bug fix: validateOpenTrades() returns early if no trades, skipping services + // Services must run regardless of open trades count + + // CRITICAL (Dec 2, 2025): Start data cleanup service for 4-week retention + // User directive: "we want to store the data for 4 weeks" + // Runs daily at 3 AM to delete MarketData records older than 28 days + logger.log('๐Ÿงน Starting data cleanup service...') + startDataCleanup() + + // Start blocked signal price tracking + logger.log('๐Ÿ”ฌ Starting blocked signal price tracker...') + startBlockedSignalTracking() + + // Start stop hunt revenge tracker + logger.log('๐ŸŽฏ Starting stop hunt revenge tracker...') + await startStopHuntTracking() + + // Start smart entry validation queue (Nov 30, 2025) + logger.log('๐Ÿง  Starting smart entry validation system...') + await startSmartValidation() + + // CRITICAL: Run database sync validator to clean up duplicates const { validateAllOpenTrades } = await import('../database/sync-validator') logger.log('๐Ÿ” Running database sync validation before Position Manager init...') const validationResult = await validateAllOpenTrades() @@ -52,24 +74,6 @@ export async function initializePositionManagerOnStartup() { if (status.activeTradesCount > 0) { logger.log(`๐Ÿ“Š Monitoring: ${status.symbols.join(', ')}`) } - - // CRITICAL (Dec 2, 2025): Start data cleanup service for 4-week retention - // User directive: "we want to store the data for 4 weeks" - // Runs daily at 3 AM to delete MarketData records older than 28 days - logger.log('๐Ÿงน Starting data cleanup service...') - startDataCleanup() - - // Start blocked signal price tracking - logger.log('๐Ÿ”ฌ Starting blocked signal price tracker...') - startBlockedSignalTracking() - - // Start stop hunt revenge tracker - logger.log('๐ŸŽฏ Starting stop hunt revenge tracker...') - await startStopHuntTracking() - - // Start smart entry validation queue (Nov 30, 2025) - logger.log('๐Ÿง  Starting smart entry validation system...') - await startSmartValidation() } catch (error) { console.error('โŒ Failed to initialize Position Manager on startup:', error) }