# Changelog - 2026-04-14

Bu doküman, 14 Nisan 2026 tarihinde `Suggest-Bet-BE` üzerinde yapılan önemli teknik değişiklikleri özetler.

## 1. Full Stack Çalıştırma Scriptleri

- `src/scripts/run-full-stack.ts` eklendi.
- `src/scripts/run-all-fe-compatible.ts` eklendi.
- `package.json` içine şu scriptler eklendi veya güncellendi:
  - `full:run`
  - `run:all`
- Amaç:
  - AI engine ve NestJS'i birlikte ayağa kaldırmak
  - AI engine health check tamamlanmadan backend başlatmamak
  - process shutdown akışını kontrollü yönetmek
  - FE uyumlu profile ile `NestJS:3000`, `AI engine:8000` kullanabilmek

## 2. Port ve Env Standardizasyonu

- `.env.example` port değerleri netleştirildi.
- Kullanım ayrımı:
  - `npm run full:run`: backend-native profile
  - `npm run run:all`: frontend-compatible profile

## 3. Matches Browse Davranışı

- `src/modules/matches/matches.service.ts` güncellendi.
- Varsayılan browse filtresi sadece upcoming yerine `live + upcoming` davranacak şekilde düzenlendi.
- Etki:
  - `/api/matches/query` status verilmeden çağrıldığında canlı maçlar da döner.
  - `/tr/matches` sayfası live match'leri de görebilir.

## 4. VQWEN Model Entegrasyonu

- `ai-engine/models/betting_engine.py` güncellendi.
- `ai-engine/services/v2_router.py` güncellendi.
- Davranış:
  - `v2_artifacts/calibrated_*.joblib` yoksa sistem artık doğrudan `ai-engine/models/vqwen/*.pkl` modellerine fallback yapıyor.
  - Bu sayede predictor boş priors yerine gerçek model kullanıyor.

## 5. Feature Extraction İyileştirmeleri

- `ai-engine/features/extractor.py` güncellendi.
- Eklendi veya iyileştirildi:
  - gerçek `rest_diff`
  - gerçek `h2h_home_win_rate`
  - lineup/sidelined JSON'ından availability türetimi
  - rolling form fallback'leri
- `matches` ve `live_matches` tablo farkları dikkate alındı.
- Tarihsel maçlarda olmayan kolonlar yüzünden extractor patlamayacak hale getirildi.

## 6. AI Engine PostgreSQL Bağlantı Düzeltmesi

- `ai-engine/data/database.py` güncellendi.
- Düzeltmeler:
  - `.env` otomatik yükleme
  - `DATABASE_URL` içindeki Prisma `?schema=public` parametresini asyncpg ile uyumlu normalize etme
  - `search_path` ayarı ile bağlantıyı kararlı hale getirme

## 7. Runtime Backtest Scripti

- `ai-engine/scripts/backtest_v2_runtime.py` eklendi.
- `package.json` içine `ai:backtest` scripti eklendi.
- Amaç:
  - V2/VQWEN tahminlerini bitmiş maçlar üstünde hızlıca ölçebilmek
  - accuracy, playable accuracy ve ROI görmek

## 8. VQWEN Top League Re-Training

- `ai-engine/scripts/train_vqwen_v3.py` güncellendi.
- `top_leagues.json` okunacak şekilde düzenlendi.
- Sadece top league maçlarıyla eğitim yapılacak hale getirildi.
- `package.json` içine `ai:train:vqwen` scripti eklendi.
- Eğitim metadata dosyası üretildi:
  - `ai-engine/models/vqwen/vqwen_training_meta.json`
- Sonuç:
  - `vqwen_ms.pkl`
  - `vqwen_ou25.pkl`
  - `vqwen_btts.pkl`
  dosyaları top league dataset ile yeniden üretildi.

## 9. V20+ Market Coverage Genişletmesi

Korner hariç daha fazla bahis tipini V20+ orchestration içinde görünür ve kullanılabilir hale getirmek için değişiklikler yapıldı.

### 9.1 Odds Parsing Genişletmesi

- `ai-engine/services/single_match_orchestrator.py` güncellendi.
- `RELATIONAL_ODDS_KEYS` genişletildi.
- Yeni parse edilen market/odds anahtarları:
  - `ht_ou15_o`
  - `ht_ou15_u`
  - `cards_o`
  - `cards_u`
  - `hcap_h`
  - `hcap_d`
  - `hcap_a`

### 9.2 Yeni Helper Fonksiyonları

- `single_match_orchestrator.py` içine eklendi:
  - `_is_first_half_ou15_category`
  - `_is_cards_ou_category`
  - `_is_football_handicap_category`
  - `_set_football_handicap_odds`

### 9.3 Market Requirement Genişletmesi

- `ODDS_REQUIRED_MARKETS` genişletildi.
- Yeni marketler:
  - `HT_OU15`
  - `CARDS`
  - `HCAP`

### 9.4 Market Board ve Bet Summary Genişletmesi

- `single_match_orchestrator.py` içinde response üretimi genişletildi.
- `market_board` artık şu marketleri de içeriyor:
  - `HT_OU15`
  - `CARDS`
  - `HCAP`
- `_build_market_rows()` artık şu marketler için de row üretiyor:
  - `HT_OU15`
  - `CARDS`
  - `HCAP`

### 9.5 Market Calibration

- Yeni marketler için calibration / minimum confidence tanımları eklendi:
  - `HT_OU15`
  - `CARDS`
  - `HCAP`

## 10. Other Markets Calculator İyileştirmesi

- `ai-engine/core/calculators/other_markets_calculator.py` yeniden düzenlendi.
- Eklendi:
  - `cards_over_prob`
  - `cards_under_prob`
  - `cards_confidence`
  - `handicap_home_prob`
  - `handicap_draw_prob`
  - `handicap_away_prob`
  - `handicap_confidence`
- Korner tarafı özellikle kapsam dışı bırakıldı.

## 11. V20 Ensemble Model Genişletmesi

- `ai-engine/models/v20_ensemble.py` güncellendi.
- `FullMatchPrediction` içine şu alanlar eklendi:
  - `cards_over_prob`
  - `cards_under_prob`
  - `cards_confidence`
  - `handicap_home_prob`
  - `handicap_draw_prob`
  - `handicap_away_prob`
  - `handicap_confidence`
- `to_dict()` çıktısı da cards ve handicap için daha zengin veri dönecek şekilde genişletildi.

## 12. Derleme ve Doğrulama Notları

- Python tarafında şu dosyalar `py_compile` ile doğrulandı:
  - `ai-engine/core/calculators/other_markets_calculator.py`
  - `ai-engine/models/v20_ensemble.py`
  - `ai-engine/services/single_match_orchestrator.py`
- `npm run build` son denemede kullanıcı tarafından manuel olarak kesildi.
- Bu yüzden changelog yazıldığı anda en son TypeScript/Nest build sonucu tekrar alınmış kabul edilmemeli.

## 13. Açık Kalan / Sonraki Adımlar

- Yeni marketlerin runtime API çıktısı gerçek maç üstünde uçtan uca test edilmeli.
- `npm run build` tekrar tam çalıştırılmalı.
- Mümkünse bir örnek `/v20plus/analyze/:matchId` çağrısıyla şu marketler doğrulanmalı:
  - `HT_OU15`
  - `CARDS`
  - `HCAP`
- Korner marketleri bilinçli olarak dahil edilmedi.
