critical: Fix service initialization - start services BEFORE validation

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
This commit is contained in:
mindesbunister
2025-12-05 15:43:46 +01:00
parent a2f32eceac
commit 51b63f4a35

View File

@@ -29,7 +29,29 @@ export async function initializePositionManagerOnStartup() {
logger.log('🚀 Initializing Position Manager on startup...') logger.log('🚀 Initializing Position Manager on startup...')
try { 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') const { validateAllOpenTrades } = await import('../database/sync-validator')
logger.log('🔍 Running database sync validation before Position Manager init...') logger.log('🔍 Running database sync validation before Position Manager init...')
const validationResult = await validateAllOpenTrades() const validationResult = await validateAllOpenTrades()
@@ -52,24 +74,6 @@ export async function initializePositionManagerOnStartup() {
if (status.activeTradesCount > 0) { if (status.activeTradesCount > 0) {
logger.log(`📊 Monitoring: ${status.symbols.join(', ')}`) 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) { } catch (error) {
console.error('❌ Failed to initialize Position Manager on startup:', error) console.error('❌ Failed to initialize Position Manager on startup:', error)
} }