diff --git a/DEV_LOG.md b/DEV_LOG.md index f628e85..e58a2bc 100644 --- a/DEV_LOG.md +++ b/DEV_LOG.md @@ -253,6 +253,11 @@ This document tracks all modifications, npm packages, active compilation states, * **Ensemble Mapping Correction**: Fixed the prediction probability mapping by refactoring `getPredictionProb` to accept and evaluate the specific `ticker` context parameter. This completely resolved the SVM mirroring anomaly and accurately calculates consensus averages from the correct asset data. * **Multi-Asset Logging & Filtering**: Exchanged the single-asset BTC log for a dynamic multi-asset log. Added a sleek, glassmorphic asset filter tab-bar containing `[ BTC ]`, `[ ETH ]`, and `[ SOL ]` buttons right above the feedback loop table, filtering logs dynamically per active asset. Logs preserve respective entry price snapshots and 15-probability matrices in `localStorage`. +## [2026-06-14] - Active-Log Multi-Asset Ticker Hotfix (#ISSUE-021-HOTFIX) + +### Modified +* **Active Learning Feedback Loop Logging Context**: Refactored `handleLogManualForecast` inside `CryptoDemo.tsx` to dynamically query and snapshot ticker data (symbol, real-time price, and full 15-cell ML matrix) from the active feedback tab filter (`feedbackFilterAsset`) instead of the top-level coin select (`activeCoin`). Updated the logged success feedback banner dynamically as well. + ### Active Bugs / Compile Status * **Active Bugs**: None. * **Type Checker Status**: Verified 100% clean type verification (`npx tsc --noEmit` returns exit code 0). diff --git a/components/modules/crypto/CryptoDemo.tsx b/components/modules/crypto/CryptoDemo.tsx index 5c227a3..4510306 100644 --- a/components/modules/crypto/CryptoDemo.tsx +++ b/components/modules/crypto/CryptoDemo.tsx @@ -533,22 +533,23 @@ export default function CryptoDemo() { // Manual logging of active forecast for all 15 models & horizons const handleLogManualForecast = () => { - const entryPrice = parseFloat(activeCoin.price.replace(/[^0-9.]/g, '')); + const logCoin = customCoins[feedbackFilterAsset] || coins[feedbackFilterAsset] || defaultCoins[feedbackFilterAsset]; + const entryPrice = parseFloat(logCoin.price.replace(/[^0-9.]/g, '')); // Save snapshot of all predictions const predictionsMap: Record> = {}; ESTIMATORS.forEach((est) => { predictionsMap[est.id] = { - T1: getPredictionProb(activeCoin.ticker, est.id, 'T1'), - T5: getPredictionProb(activeCoin.ticker, est.id, 'T5'), - T10: getPredictionProb(activeCoin.ticker, est.id, 'T10') + T1: getPredictionProb(logCoin.ticker, est.id, 'T1'), + T5: getPredictionProb(logCoin.ticker, est.id, 'T5'), + T10: getPredictionProb(logCoin.ticker, est.id, 'T10') }; }); const now = Date.now(); const newForecast: Forecast = { id: 'fc-' + now, - ticker: activeCoin.ticker, + ticker: logCoin.ticker, entryPrice, resolved: false, timestamp: now, @@ -564,7 +565,7 @@ export default function CryptoDemo() { setForecasts(nextForecasts); localStorage.setItem('crypto_bayes_forecasts', JSON.stringify(nextForecasts)); - setLearningLoopLog(`Registered active multi-model forecast for ${activeCoin.ticker} at $${entryPrice}. Evaluating T+1 (24h), T+5 (5d), and T+10 (10d).`); + setLearningLoopLog(`Registered active multi-model forecast for ${logCoin.ticker} at $${entryPrice}. Evaluating T+1 (24h), T+5 (5d), and T+10 (10d).`); setTimeout(() => setLearningLoopLog(''), 8000); };