Bu belge, kod tabanı ile README / CONTRIBUTING arasındaki boşluğu kapatır; özellikle modül haritası, durum yönetimi geçişi, test/DI beklentileri ve analitik şeffaflık maddelerini toplar.
| Alan | Ana servis / store örnekleri | Not |
|---|---|---|
| Piyasa verisi | MarketDataStore, TwelveDataService, YahooFinanceProvider, BorsaPyProvider |
Çoklu sağlayıcı; Heimdall yönlendirme |
| BIST | BorsaPyProvider, BistDataService, TahtaEngine, KAPDataService |
Opsiyonel backend |
| Portföy / işlem | PortfolioStore, PaperBroker, PositionPlanStore |
Gerçek aracı yok; paper |
| Konsey / karar | ArgusGrandCouncil, ArgusDecisionEngine |
Çok modüllü skor birleşimi |
| Teknik | OrionAnalysisService, OrionMultiFrameEngine, ChartPatternEngine |
|
| Makro | MacroRegimeService, AetherAllocationEngine, FRED/TCMB servisleri |
|
| Chiron / öğrenme | ChironDataLakeService, ChironLearningJob, backtest motorları |
|
| Alkindus / RAG | AlkindusRAGEngine, PineconeService, GeminiEmbeddingService |
Opsiyonel Pinecone |
| Hermes / haber | HermesLLMService, GeminiNewsService, RSSNewsProvider |
|
| Trade Brain | TradeBrainExecutor, HorizonEngine, SelfQuestionEngine |
|
| Autopilot | AutoPilotService, ArgusAutoPilotEngine |
Güvenlik katmanları ile |
| Teşhis | HeimdallOrchestrator, ServiceHealthMonitor |
Liste tam değildir; yeni motor eklendiğinde bu tablo güncellenmelidir.
Bugün: TradingViewModel (geniş facade) ile AppStateCoordinator ve çok sayıda *.shared singleton birlikte çalışıyor.
Hedef: Tek görünür koordinasyon yüzeyi (AppStateCoordinator veya seçilen başka facade); ağır veri Store/ViewModel alt bileşenlerinde; mümkün olan yerde protokol + enjeksiyon.
Önerilen sıra (atlanmadan ilerlemek için kontrol listesi):
- Yeni özellikler yalnızca
PortfolioStore/MarketDataStore/ ilgili store üzerinden eklenir;TradingViewModel'e yalnızca ince proxy eklenir. - Ekranlar mümkün olduğunca
environmentObject(coordinator)+ domain store ile beslenir; doğrudanXxx.sharedçağrısı eklenmez. - Her tamamlanan ekran için
TradingViewModel'deki tekrarlayan@Published/ hesaplanmış alan bir alt modüle taşınır ve test notu düşülür. DIContainerveDependencyValuesiçin kritik servislerdeDependencyKeytanımlanır (önce test edilebilir saf mantık).TradingViewModelyalnızca geriye dönük uyumluluk için ince facade kalacak şekilde inceltilir (uzun vadeli).
DIContainer:@MainActorservis protokolleri vereset()/configure(...)ile test izolasyonu.DependencyValues(Services/DI/DependencyContainer.swift): SwiftUI ortamı için;testortamı boş başlar,DependencyKeyeklendikçe doldurulur.- Protokol soyutlama:
DataProvider: Sendable,FundamentalsProviderProtocol: Sendable,PortfolioStoreProtocoltanımlıdır (Services/Providers/DataProviderProtocol.swift). Yeni singleton'lar bu kalıba uygun şekilde protokol arkasına alınmalıdır. - Testlerde: Saf mantık için doğrudan struct/fonksiyon testi; servisler için
DIContainer.shared.reset()+configureveya ilerideDependencyKeyile sahte değer.
ArgusLogger(actor): Üretimde OSLog; DEBUG'da konsol. Yeni kodda hamprintkullanılmamalı.- Fire-and-forget statik API:
ArgusLogger.info("...", category: "XXX")—awaitgerektirmez; tüm kritik dosyalarda bu kalıba geçildi. ArgusLogger.Modulestatik yardımcıları: DEBUG odaklı; ağır iş yok.
argusTestshedefi Xcode projesine bağlıdır; şemaargusaltında test çalıştırır.- Mevcut testler:
TradeValidatorTests,CachePolicyTests,SymbolMapperTests,MarketViewModelTests,TradingViewModelFacadeTests,PortfolioViewModelTests,SignalViewModelTests,PulsingFABViewTests. - Öncelik: doğrulanabilir saf mantık (
TradeValidator, cache politikası, hesap motorları), ardından ViewModel facade. - CI: GitHub Actions ile
Secrets.xcconfig.example→Secrets.xcconfigkopyası sonrasıxcodebuild test. - CI hedefi: Workflow varsayılan olarak
iPhone 16simülatörünü kullanır. Runner'da yoksaxcodebuild -scheme argus -showdestinationsçıktısına göre.github/workflows/ios.ymliçindeki-destinationgüncellenmelidir. - Yerel: CoreSimulator / bellek hatasıyla derleme kırılırsa ortam sorunudur; Xcode'da bir simülatör kurup tekrar deneyin.
- Uygulama yatırım tavsiyesi değildir; gösterilen skorlar, konsey çıktıları ve simülasyonlar model varsayımlarına bağlıdır.
- Backtest / forward test: geçmişe sızıntı (lookahead) ve survivorship gibi riskler tamamen elimine edilemez; sonuçlar yönlendirici kabul edilmelidir.
- Kullanıcıya dönük metinlerde veri gecikmesi, sağlayıcı kesintisi ve model belirsizliği mümkün olduğunca açık tutulmalıdır.
| Konu | Durum |
|---|---|
| Test hedefi + paylaşılan scheme | Tamamlandı |
| CI iş akışı | Tamamlandı |
Canlı mimari belgesi (ARCHITECTURE.md) |
Tamamlandı |
| CONTRIBUTING test/DI bölümü | Güncellendi |
argusApp başlangıç logları → ArgusLogger |
Tamamlandı |
TradeBrainView yardımcı bileşen ayrımı |
Tamamlandı |
print → ArgusLogger sistematik geçiş |
Tamamlandı (~240+ çağrı: Store'lar, TradeBrain, Council, Chiron, Heimdall, Groq, Keychain, Makro, TEFAS, ViewModel'ler) |
ArgusLogger fire-and-forget statik API |
Tamamlandı (nonisolated static — await gerektirmez) |
TradingViewModel god-class bölme |
SSoTBindings + ExportHelpers ayrıldı (1584→1325 satır) |
| Ek testler | TradeValidator, CachePolicy, SymbolMapper testleri eklendi |
| Singleton azaltma: protokol soyutlama | PortfolioStoreProtocol + DataProvider: Sendable tanımlandı |
Kalan print temizliği (uzun kuyruk ~80 dosya) |
Süreğen |
| Singleton → DI tam geçiş | Süreğen (§2 kontrol listesi) |
Bu tablo her önemli PR'da güncellenmelidir.