Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/DEVICE_VALIDATION_LEDGER.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

| # | Özellik | Nerede | Kabul ölçütü (cihazda ne gözlemlenmeli) | Eklendi |
|---|---------|--------|------------------------------------------|---------|
| 31 | **🔴 Device Validation Pending — Deep Scan Ignition Source Foundation** — Deep Scan Runtime'ın üç durumlu `ignitionConfirmed`'ını GÜVENLİ + deterministik besleyecek çözümleyici katman. ⚠️ **KOD GERÇEĞİ (salt-okunur denetim):** depoda DOĞRUDAN kontak/ACC/key-state yayan HİÇBİR kaynak YOK — VAL `NormalizedVehicleData`, Hiworld CAN protokolü (RPM/BATT_VOLT/GEAR/REVERSE var, ACC/IGN komutu YOK), NativeHAL (AAOS VHAL) ve `useAssistantContextStore` (`status.ignition=null` "sinyal YOK") teyit etti; `commandExecutor.ignitionOn` yalnız remote-command parametresi. `resolveIgnitionState(evidence, now)` SAF çözümleyici: yalnız **authoritative** kaynaklar (`native_acc`/`can_ignition`/`engine_running`/`manual`) onay verir; **yardımcı** kaynaklar (`rpm`/`alternator`/`battery_voltage`/`obd_transport`) tek başına ASLA ON üretmez → `unknown`. **Fail-closed:** kesin doğrulanamazsa `unknown`→`confirmed=null`. Tehlikeli tekil varsayım YOK (hız>0/RPM>0/voltaj/OBD bağlı → ON yasak). **Fizik magic number UYDURULMADI** (kodda motor-çalışıyor RPM eşiği / alternatör voltaj eşiği tanımlı değil → ham sayıya eşik uygulanmaz; yardımcı sinyaller çağıran tarafından bool'a yorumlanıp `engine_running` authoritative kanıtı olur = zero-trust). **Stale/zaman:** her kanıt `observedAt` (Date.now ms, VAL ile aynı taban); yaş>5000ms (VAL SIGNAL_SOURCE_DEFAULTS timeout gerekçesi) veya saat-geri (age<0) → stale, onay için kullanılmaz. **Çelişki:** iki güvenilir authoritative kaynak zıtsa → `unknown` (fail-closed). **Confidence kapısı** 0.7 (VAL base 0.85–0.98 gerekçesi, politika sabiti). **Adapter API:** `getConfirmedValue():boolean\|null`. **YALIN:** `deepScanRuntimeService`'e/SystemBoot'a OTOMATİK BAĞLANMAZ; polling timer YOK (pull `refresh()`/push `submitEvidence()`); import yan etkisiz; yeni bağımlılık yok. Manual override PROD varsayılan KAPALI (dev/test). Bounded (kanıt 16, listener 32); immutable (deep-freeze); privacy (reason `sanitizeText`, VIN/MAC/koordinat/ham/secret snapshot'a girmez); fail-soft (kaynak/listener hatası izole, throw yok). | `platform/deepScan/deepScanIgnitionSource.ts` (yeni), `platform/deepScan/index.ts` (export), `__tests__/deepScanIgnitionSource.test.ts` (yeni, 31 test) | Gerçek araçta (orchestration PR'ı bağlandıktan SONRA): (1) ACC/ON durumu doğru algılanır (gerçek native/CAN ignition kaynağı eklenince); (2) kontak kapalıyken `false` veya `unknown`; (3) RPM tek başına yanlış ON ÜRETMEZ; (4) OBD adaptörü takılı ama kontak kapalıyken ON üretmez; (5) kaynaklar çelişince `unknown`/null; (6) Deep Scan aktif sorguları yalnız doğrulanmış ON ile başlar; (7) BASIC_JS/Mali-400'de CPU/RAM regresyonu yok (saf çözümleyici, timer yok); (8) farklı MCU/CAN kutularında kaynak desteği AYRI raporlanır (şu an hiçbirinde doğrudan kaynak yok → daima `unknown`, fail-closed). ⚠️ **Runtime wiring + gerçek orchestration + doğrudan kaynak entegrasyonu SONRAKİ PR KAPSAMI.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 30 | **🔴 Device Validation Pending — Deep Scan Persistence Foundation** — Deep Scan sonuçlarını araç PARMAK İZİ HASH'ine bağlı, kalıcı, bounded ve fail-soft saklayan katman. `DeepScanPersistenceStore` (safeStorage anahtarı `car-deep-scan-history`, şema v1) araç başına bir `DeepScanRecord` tutar: mod/durum/zaman damgaları · `hasCompletedFullScan` · `completedScanCount`/`changeCheckCount` · keşif listeleri (ECU/PID/DID/firmware, normalize+unique+sort+dedup) · `newDiscoveriesCount`/`changedFirmware`/`changedEcu` · uyarılar · rapor özeti. **Mod kararı:** `resolveMode(hash)` — kayıt yok / tam tarama tamamlanmamış → `full_scan`; tam tarama tamamlanmış → `change_check` (runtime `resolveScanMode` ile UYUMLU). Sayaçlar yalnız GERÇEK tamamlanmada artar (`completeScan`, idempotent: aynı scanId iki kez saymaz; failed/cancelled artırmaz). **Bounded:** 16 araç LRU (tamamlanmamış/en eski önce evict, deterministik tie-break=hash, sıra-bağımsız) · ECU 128 · PID 512 · DID 512 · firmware 128 · uyarı 16. **Yazma politikası:** 5 sn debounce (progress burst'ları tek yazma), complete/dispose'da flush, eMMC dostu. **Gizlilik:** VIN(17-karakter kapısı)/MAC/koordinat/ham response/secret SAKLANMAZ; firmware yalnız ECU + normalize sürüm KİMLİĞİ (MAC/VIN kalıbı reddedilir); serbest metin `sanitizeText`. **Fail-soft:** bozuk JSON/eski şema → boş; tek bozuk kayıt diğerlerini bozmaz; hiçbir public API throw etmez; güvenli varsayılan `full_scan`. **Immutable:** çıktı deep-freeze, girdi mutate edilmez. **YALIN:** runtime servise/SystemBoot'a/Assistant Context'e OTOMATİK BAĞLANMAZ (yalnız ileride orchestration PR'ının kullanacağı temiz API); import yan etkisiz (disk yalnız ilk API çağrısında okunur); yeni bağımlılık yok; timer yalnız dirty durumda. ⚠️ **Gerçek scan orchestration + ignition wiring BU PR KAPSAMI DIŞI.** | `platform/deepScan/deepScanPersistence.ts` (yeni), `platform/deepScan/index.ts` (export), `utils/safeStorage.ts` (`car-deep-scan-history` → LRU_PROTECTED, additive), `__tests__/deepScanPersistence.test.ts` (yeni, 36 test) | Gerçek araçta (orchestration PR'ı bağlandıktan SONRA): (1) tam tarama tamamlanınca araç kaydı OLUŞUR; (2) uygulama restart sonrası kayıt GERİ GELİR (kalıcı); (3) aynı araç tekrar bağlanınca `change_check` seçilir; (4) farklı/yeni araç `full_scan` seçer; (5) bozuk kayıt Deep Scan'i ÇÖKERTMEZ (fail-soft); (6) disk yazımları debounce ile sınırlı (eMMC write-amplification yok); (7) 16 araç sınırı ve eviction doğru (tamamlanmamış/en eski önce); (8) BASIC_JS/Mali-400'de CPU/RAM/eMMC regresyonu yok (pasifken sıfır yük). ⚠️ **Kalıcılık BU PR'da; gerçek orchestration ve ignition wiring AYRI PR.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 29 | **🔴 Device Validation Pending — Deep Scan Runtime Service Foundation** — Yeni araç ilk kez bağlandığında çalışacak Deep Scan sürecinin merkezi runtime FOUNDATION katmanı: durum · faz · ilerleme · keşif sayaçları · olaylar · güvenli çalışma koşulları. `DeepScanRuntimeService` saf bir durum makinesidir — **araca TEK BİR sorgu bile göndermez**, hiçbir OBD/discovery/fingerprint/learning servisini import etmez (kaynak-metin kilidi: tek import `./deepScanModel`), timer/abonelik açmaz → **import edilmesi yan etki üretmez**. 9 durum (idle · waiting_for_ignition · preparing · scanning · analyzing · completed · paused · cancelled · failed) + 12 faz; fazlar AKTİF (araca sorgu: kimlik/protokol/ECU/PID/DID/firmware) ve OFFLINE (analiz/fingerprint/knowledge/evidence/change/rapor) olarak ayrılır. **Mod kararı:** önceki tamamlanmış tarama yoksa `FULL_SCAN`, varsa `CHANGE_CHECK` (aynı araca her bağlantıda tam tarama YOK). **KONTAK GÜVENLİĞİ (fail-closed):** depoda kontak/ACC yayan gerçek kaynak YOK (`IGNITION_OFF` yalnız mesaj sabiti, hiç emit edilmiyor) → `ignitionConfirmed` üç durumlu (`true`/`false`/`null=bilinmiyor`), yalnız `setIgnitionConfirmed()` ile dışarıdan beslenir, servis kontağı ASLA tahmin etmez; `true` değilse aktif faz açılmaz + aktif keşif kaydı reddedilir, yalnız offline fazlar çalışır. Progress deterministik + monotonik (0–100 clamp, geriye düşmez, complete→100, fail/cancel'da korunur, sahte ilerleme yok). Bounded: warnings(16) · listeners(32) · dedup anahtarları(4096). Snapshot + rapor + olay zarfı `Object.freeze`'li; VIN(17-karakter kapısı) · MAC · koordinat · ham CAN hex · API key snapshot'a giremez. **SystemBoot wiring YOK** (kilitli test) — gerçek tarama orchestration ve kalıcı geçmiş deposu AYRI PR kapsamı. | `platform/deepScan/deepScanModel.ts` (yeni), `platform/deepScan/deepScanRuntimeService.ts` (yeni), `platform/deepScan/index.ts` (yeni), `__tests__/deepScanRuntimeService.test.ts` (yeni, 57 test) | Gerçek araçta (orchestration PR'ı bağlandıktan SONRA): (1) **yeni araçta** `FULL_SCAN` + `isFirstScan=true` durumu oluşur; (2) **daha önce öğrenilmiş araçta** `CHANGE_CHECK` seçilir, tam tarama tekrarlanmaz; (3) kontak doğrulanmadan **aktif sorgu başlamaz** (status `waiting_for_ignition`'da kalır, ELM327 trafiği sıfır); (4) kontak kapalıyken araca sorgu **gönderilmez** (adb/ELM log'unda istek yok), yalnız analyzing/report fazları koşar; (5) progress monotonik — geri düşüş gözlenmez; (6) discovery sayaçları gerçek gözlemlerle **birebir** eşleşir (duplicate şişirmez); (7) cancel/pause/resume çalışır; (8) BASIC_JS tier'da CPU/FPS regresyonu yok (servis pasifken sıfır yük). ⚠️ **Restart sonrası kalıcılık BU PR'IN KAPSAMI DEĞİL** — `hasCompletedScanBefore` çağırandan gelir; süreç yeniden başlayınca durum `idle`'a döner. Test edilmeden 🟢 yapma. | 2026-07-10 |
| 28 | **🔴 Device Validation Pending — Unified Assistant Context (OfflineAssistantContext)** — Voice Assistant · Companion AI · Safety Kernel · Offline Conversation · Vehicle Learning · Diagnostic AI · Maintenance AI katmanlarının ayrı ayrı okuduğu kaynakları TEK merkezde toplayan, periyodik + `Object.freeze`'li snapshot yayınlayan store. SAF kurucu (`buildSnapshot`, throw etmez, girdiyi mutate etmez) + fail-soft canlı adaptör (`readLiveSources`, her kaynak izole try/catch). Periyot 5 sn · DeviceTier=low → 10 sn; görev `runtimeManager.scheduleTask` üstünde `criticality:'NORMAL' + deferIdle:true` → hot-path'e (3Hz hız/RPM) GİRMEZ. Dirty-flag ile park hâlinde sıfır maliyet; ağır soğuk-yol bölümleri (identity/learning) 30 sn (low: 60 sn) aralıkla okunur. Gizlilik: VIN/MAC/GPS/ham PID-DID-CAN snapshot'a ASLA girmez (whitelist kurucu; navigasyon hedefi yalnız ad, ≤64 karakter). Hiçbir servise YAZMAZ; severity/driveSafe/diagnostic kararı DEĞİŞMEZ. **Additive: henüz hiçbir tüketiciye ve SystemBoot'a bağlı DEĞİL** → bu PR'da çalışma zamanı davranışı değişmez. Kaynağı olmayan alanlar dürüstçe `null`: `deepScan.*` (genel Deep Scan servisi YOK), `driver.fatigueScore`, `status.ignition`, `media.ducking`, `network.wifi/mobile` (yalnız `navigator.connection.type` kesinse dolar). | `src/store/useAssistantContextStore.ts` (yeni), `src/__tests__/assistantContextStore.test.ts` (yeni, 25 test) | Gerçek araçta (tüketiciye bağlandıktan SONRA): (1) snapshot mid/high tier'da ~5 sn, BASIC_JS/low'da ~10 sn (veya mod çarpanıyla daha seyrek) aralıkla yenilenir; (2) park hâlinde (OBD sessiz) tik sıfır ayırma yapar — CPU profilinde snapshot işi görünmez; (3) BASIC_JS tier'da FPS/CPU regresyonu YOK, hız/RPM göstergesi 3Hz akıcılığını korur; (4) snapshot içeriğinde VIN/MAC/koordinat/ham hex GÖRÜNMEZ (Expert Mode / log denetimi); (5) uzun sürüşte (>1 sa) bellek büyümesi gözlenmez (yalnız son snapshot tutulur); (6) OBD/DTC/tanı servislerinden biri düşse bile snapshot üretilmeye devam eder. ⚠️ Test edilmeden 🟢'a çekme. | 2026-07-10 |
Expand Down
Loading
Loading