fix: Smart Validation Queue respects symbol enabled status (Bug #79)
CRITICAL FIX - Stops Telegram notification spam for disabled symbols Problem: - User receiving unwanted notifications for FARTCOIN (enabled=false) - Three notification types: QUEUED, VALIDATED, ENTERING NOW - Smart Validation Queue queued quality 50-89 signals WITHOUT checking enabled - Data collection working correctly, but validation queue also triggered Root Cause: - check-risk/route.ts lines 442-455 added signals to queue without enabled check - Validation queue sends Telegram at multiple stages (queued, validated, entering) - Execute endpoint checks enabled (line 290) but TOO LATE (after notifications) The Fix: - Added enabled status check BEFORE queueing signals - Check: getActualPositionSizeForSymbol(symbol, config).enabled - If disabled: Skip queue, save to database silently (data collection only) - If enabled: Queue normally with notifications (SOL/BTC/ETH production trading) Files Changed: - app/api/trading/check-risk/route.ts: Lines 442-470 (added enabled check) - .github/copilot-instructions.md: Bug #79 documented in Common Pitfalls Expected Result: - No more FARTCOIN Telegram notifications - 1-minute data collection continues silently - Only enabled symbols (SOL/BTC/ETH) send validation notifications Severity: 6/10 (annoying but not financially harmful) Status: Code fixed, awaiting deployment verification
This commit is contained in:
75
.github/copilot-instructions.md
vendored
75
.github/copilot-instructions.md
vendored
@@ -3253,7 +3253,80 @@ This section contains the **TOP 10 MOST CRITICAL** pitfalls that every AI agent
|
|||||||
|
|
||||||
📚 **Full Documentation:** `docs/COMMON_PITFALLS.md` (73 pitfalls with code examples, git commits, deployment dates)
|
📚 **Full Documentation:** `docs/COMMON_PITFALLS.md` (73 pitfalls with code examples, git commits, deployment dates)
|
||||||
|
|
||||||
79. **CRITICAL: n8n Undefined Field Reference - SHORT Signals Failing (CRITICAL - Dec 12, 2025):**
|
79. **CRITICAL: Smart Validation Queue Ignores Symbol Enabled Status - Telegram Spam (CRITICAL - Dec 15, 2025):**
|
||||||
|
- **Symptom:** Receiving Telegram notifications ("SIGNAL QUEUED", "SIGNAL VALIDATED", "ENTERING NOW") for symbols not trading (e.g., FARTCOIN enabled=false)
|
||||||
|
- **User Report:** "can you please check for the fartcoin data collection. i dont want to receive notifications in telegram as we are not trading it currently"
|
||||||
|
- **Financial Impact:** Notification spam for data-collection-only symbols, user confusion, unnecessary monitoring
|
||||||
|
- **Root Cause:**
|
||||||
|
* File: `app/api/trading/check-risk/route.ts` lines 442-455
|
||||||
|
* Smart Validation Queue queues quality 50-89 signals WITHOUT checking if symbol trading enabled
|
||||||
|
* Code pattern:
|
||||||
|
```typescript
|
||||||
|
if (isInValidationRange) {
|
||||||
|
const validationQueue = getSmartValidationQueue()
|
||||||
|
const normalizedSymbol = normalizeTradingViewSymbol(body.symbol)
|
||||||
|
// BUG: No check for enabled status before queueing
|
||||||
|
await validationQueue.addSignal({ symbol: normalizedSymbol, ... })
|
||||||
|
}
|
||||||
|
```
|
||||||
|
* Validation queue sends Telegram notifications at multiple stages (queued, validated, entering)
|
||||||
|
* Execute endpoint checks enabled status (line 290-310) but TOO LATE (after notifications sent)
|
||||||
|
- **Evidence:**
|
||||||
|
* Docker logs: "⏰ Smart validation queued: FARTCOIN-PERP SHORT @ $13.21 (quality: 60)"
|
||||||
|
* Docker logs: "✅ VALIDATED ENTRY BYPASS: Quality 60 accepted"
|
||||||
|
* Config: `fartcoin: { enabled: false }` at line 147
|
||||||
|
* System correctly collecting 1-min data but also sending validation notifications
|
||||||
|
- **THE FIX (Dec 15, 2025):**
|
||||||
|
```typescript
|
||||||
|
// BEFORE (lines 442-455 - BROKEN):
|
||||||
|
if (isInValidationRange) {
|
||||||
|
const validationQueue = getSmartValidationQueue()
|
||||||
|
const normalizedSymbol = normalizeTradingViewSymbol(body.symbol)
|
||||||
|
await validationQueue.addSignal({ ... }) // ❌ No enabled check
|
||||||
|
}
|
||||||
|
|
||||||
|
// AFTER (FIXED):
|
||||||
|
if (isInValidationRange) {
|
||||||
|
const validationQueue = getSmartValidationQueue()
|
||||||
|
const normalizedSymbol = normalizeTradingViewSymbol(body.symbol)
|
||||||
|
|
||||||
|
// Check if symbol trading enabled BEFORE queueing
|
||||||
|
const { enabled } = getActualPositionSizeForSymbol(normalizedSymbol, config)
|
||||||
|
|
||||||
|
if (!enabled) {
|
||||||
|
console.log(`⛔ Skipping validation queue: ${normalizedSymbol} trading disabled (data collection only)`)
|
||||||
|
} else {
|
||||||
|
await validationQueue.addSignal({ ... }) // ✅ Only queue if enabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- **Why This Matters:**
|
||||||
|
* **This is a REAL MONEY system** - data collection symbols should be silent
|
||||||
|
* User only wants notifications for SOL-PERP, BTC-PERP, ETH-PERP (enabled symbols)
|
||||||
|
* Validation queue designed for marginal quality signals (50-89) to confirm before execution
|
||||||
|
* But shouldn't send notifications for symbols user isn't trading
|
||||||
|
* 1-minute data collection continues silently (correct behavior)
|
||||||
|
- **Prevention Rules:**
|
||||||
|
1. ALWAYS check enabled status before adding signals to validation queue
|
||||||
|
2. NEVER send Telegram notifications for disabled symbols
|
||||||
|
3. Data collection (BlockedSignal database) should continue for analysis
|
||||||
|
4. Validation queue is for TRADING validation, not data collection
|
||||||
|
5. Execute endpoint enabled check (line 290-310) is backup, not primary
|
||||||
|
6. Check-risk endpoint must be first line of defense for symbol filtering
|
||||||
|
- **Red Flags Indicating This Bug:**
|
||||||
|
* Telegram notifications for symbols with enabled=false in config
|
||||||
|
* User asks "why am I receiving notifications for X?"
|
||||||
|
* Docker logs show "Smart validation queued" for disabled symbols
|
||||||
|
* System correctly saves to BlockedSignal but also sends Telegram
|
||||||
|
* Multiple notification types (QUEUED, VALIDATED, ENTERING) for data collection signals
|
||||||
|
- **Files Changed:**
|
||||||
|
* app/api/trading/check-risk/route.ts: Lines 442-470 (added enabled check before queueing)
|
||||||
|
- **Git commit:** [CURRENT] "fix: Smart Validation Queue respects symbol enabled status" (Dec 15, 2025)
|
||||||
|
- **Deployment:** Pending build + restart
|
||||||
|
- **Status:** ✅ CODE FIXED - Awaiting deployment verification
|
||||||
|
- **Expected Result:** No more FARTCOIN Telegram notifications, 1-min data collection continues silently
|
||||||
|
|
||||||
|
80. **CRITICAL: n8n Undefined Field Reference - SHORT Signals Failing (CRITICAL - Dec 12, 2025):**
|
||||||
- **Symptom:** SHORT signals stopped at Execute Trade1 node with error "JSON parameter needs to be valid JSON"
|
- **Symptom:** SHORT signals stopped at Execute Trade1 node with error "JSON parameter needs to be valid JSON"
|
||||||
- **User Report:** "last short signal stopped in n8n at the execute trade 1 with the error JSON parameter needs to be valid JSON"
|
- **User Report:** "last short signal stopped in n8n at the execute trade 1 with the error JSON parameter needs to be valid JSON"
|
||||||
- **Financial Impact:** Part of $1,000+ losses - SHORT trades not executing in production
|
- **Financial Impact:** Part of $1,000+ losses - SHORT trades not executing in production
|
||||||
|
|||||||
@@ -447,23 +447,32 @@ export async function POST(request: NextRequest): Promise<NextResponse<RiskCheck
|
|||||||
// CRITICAL FIX (Dec 1, 2025): Normalize TradingView symbol format to Drift format
|
// CRITICAL FIX (Dec 1, 2025): Normalize TradingView symbol format to Drift format
|
||||||
const normalizedSymbol = normalizeTradingViewSymbol(body.symbol)
|
const normalizedSymbol = normalizeTradingViewSymbol(body.symbol)
|
||||||
|
|
||||||
const queued = await validationQueue.addSignal({
|
// CRITICAL FIX (Dec 15, 2025): Check if symbol trading is enabled BEFORE queueing
|
||||||
blockReason: 'SMART_VALIDATION_QUEUED',
|
// Don't send Telegram notifications for data-collection-only symbols
|
||||||
symbol: normalizedSymbol,
|
const { enabled } = getActualPositionSizeForSymbol(normalizedSymbol, config)
|
||||||
direction: body.direction,
|
|
||||||
originalPrice: currentPrice,
|
|
||||||
qualityScore: qualityScore.score,
|
|
||||||
atr: body.atr,
|
|
||||||
adx: body.adx,
|
|
||||||
rsi: body.rsi,
|
|
||||||
volumeRatio: body.volumeRatio,
|
|
||||||
pricePosition: body.pricePosition,
|
|
||||||
indicatorVersion: body.indicatorVersion || 'v5',
|
|
||||||
timeframe: body.timeframe || '5',
|
|
||||||
})
|
|
||||||
|
|
||||||
if (queued) {
|
if (!enabled) {
|
||||||
console.log(`🧠 Signal queued for smart validation: ${normalizedSymbol} ${body.direction} (quality ${qualityScore.score})`)
|
console.log(`⛔ Skipping validation queue: ${normalizedSymbol} trading disabled (data collection only)`)
|
||||||
|
console.log(` Signal will be saved to database for analysis without notifications`)
|
||||||
|
} else {
|
||||||
|
const queued = await validationQueue.addSignal({
|
||||||
|
blockReason: 'SMART_VALIDATION_QUEUED',
|
||||||
|
symbol: normalizedSymbol,
|
||||||
|
direction: body.direction,
|
||||||
|
originalPrice: currentPrice,
|
||||||
|
qualityScore: qualityScore.score,
|
||||||
|
atr: body.atr,
|
||||||
|
adx: body.adx,
|
||||||
|
rsi: body.rsi,
|
||||||
|
volumeRatio: body.volumeRatio,
|
||||||
|
pricePosition: body.pricePosition,
|
||||||
|
indicatorVersion: body.indicatorVersion || 'v5',
|
||||||
|
timeframe: body.timeframe || '5',
|
||||||
|
})
|
||||||
|
|
||||||
|
if (queued) {
|
||||||
|
console.log(`🧠 Signal queued for smart validation: ${normalizedSymbol} ${body.direction} (quality ${qualityScore.score})`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(`❌ Signal quality too low for validation: ${qualityScore.score} (need 50-89 range)`)
|
console.log(`❌ Signal quality too low for validation: ${qualityScore.score} (need 50-89 range)`)
|
||||||
|
|||||||
Reference in New Issue
Block a user