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 |
|---|---------|--------|------------------------------------------|---------|
| 37 | **🔴 Device Validation Pending — Capability Provider Adapter Foundation** — Gerçek runtime/cihaz/platform kanıtlarını SALT-OKUNUR biçimde Capability Registry kayıtlarına aktaran provider adapter köprüsü (gerçek kanıt → adapter → Registry). ⚠️ **KOD GERÇEĞİ (salt-okunur analiz):** doğrulanabilir kaynaklar sınırlı — `deviceCapabilities`(WebGL/CSS/SAB/cores browser probe→device/platform) · `vehicleHal.getCapability/hasSignal`(araç sinyali, foundation'da hepsi false) · browser API(gps/mic/bluetooth/storage → yalnız "API var", donanım erişimini KESİNLEŞTİRMEZ) · config/lisans(oem.*/ai-provider BYOK anahtarı). **Runtime kaynağı HİÇ YOK:** `vehicle.ignition`(kontak kaynağı yok)·`ai.grok`(xAI yok)·`navigation.offline_map`(tile paketi yoksa) → unknown/unavailable KALIR. UI/dosya/modül varlığı kanıt DEĞİL. **Adapter:** donanımı DOĞRUDAN taramaz — yalnız DI `providers`'ı okur (foundation'da YERLEŞİK gerçek provider YOK; gerçek prob'lar ayrı wiring PR'ı). **Provider sözleşmesi:** `{id, domain, source, authoritative?, refreshPolicy?, read()}` (read sync/async, kaynak yoksa null). Provider sonucu→Registry evidence'ına normalize→`resolveCapability(id, evidence, domain)` (status'ü REGISTRY çözer — karar kuralları DEĞİŞMEZ). **YALNIZ değişeni günceller** (imza-tabanlı dedup→duplicate Registry update yok, O(1)). **API:** start/refresh/refreshProvider/stop/getStatus/getLastRefreshAt/getProviderResults/reset/dispose. **Refresh:** start'ta ilk refresh + açık çağrı; **steady-state timer/polling YOK**; provider'lar PARALEL (`Promise.allSettled` → biri diğerini bloke etmez); opt-in DI timeout (settle'da temizlenir→leak yok), timeout/hata/null→güvenli **unknown**. **DeviceTier:** varlık uydurmaz — Registry tier engelini uygular (low'da ai.local_model restricted); high tier kanıtsız açmaz. **Fail-soft:** provider throw/Registry update hatası izole, public API throw etmez, dispose sonrası no-op. **Gizlilik:** provider/details/reason sanitize (VIN/MAC/koordinat/secret/API-key sızmaz). **Immutable:** getProviderResults dondurulmuş kopya (nested dahil), girdi mutate edilmez. **YALIN:** Registry'yi DOĞRUDAN import ETMEZ (yapısal DI + type-only import→import yan etkisiz); Event Bus'a yayınlamaz; SystemBoot'a bağlanmaz; persistence/cloud yok; native tarama/OBD-CAN sorgusu yok; yeni bağımlılık yok; provider bounded 128. Registry'nin SAHİBİ DEĞİL→dispose Registry'yi dispose etmez. | `platform/capability/capabilityProviderAdapter.ts` (yeni), `platform/capability/index.ts` (export), `__tests__/capabilityProviderAdapter.test.ts` (yeni, 41 test) | Gerçek cihazda (gerçek provider wiring PR'ı bağlandıktan SONRA): (1) GPS/Bluetooth/Wi-Fi/kamera capability'leri doğru doğrulanıyor (native kanıtla available); (2) donanımı olmayan özellik available GÖRÜNMÜYOR; (3) gerçek kontak kaynağı olmayan cihazda `vehicle.ignition` unknown kalıyor; (4) TPMS kaynağı olmayan araçta available görünmüyor; (5) provider hatası Registry'yi/diğer provider'ları çökertmiyor; (6) aynı kanıt tekrarında duplicate capability update yok; (7) BASIC_JS/Mali-400'de CPU/RAM regresyonu yok (O(1) dedup, timer yok, paralel bounded read). ⚠️ **Gerçek provider implementasyonları · Event Bus · SystemBoot wiring · persistence AYRI PR'lar.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 36 | **🔴 Device Validation Pending — Vehicle HAL Provider Adapter Foundation** — Mevcut normalize araç durumunu (UnifiedVehicleStore fused worker/CAN/OBD/GPS) Vehicle HAL sinyal modeline aktaran ilk resmi SALT-OKUNUR provider adapter köprüsü. ⚠️ **KOD GERÇEĞİ (salt-okunur analiz):** UnifiedVehicleStore şu alanları taşır — `speed`(km/h,null=yok)·`rpm`(fused/`canRpm`)·`fuel`(%)·`odometer`·`reverse` + CAN extras `canCoolantTemp`/`canOilTemp`/`canThrottle`/`canBatteryVolt`/`canGearPos`/`canAmbientTemp`/`canTpmsKpa`/`canDoorOpen`/`canParkingBrake`; **per-signal source/quality/confidence metadata YOK** (fused nativeSource bile store'da yok); **gerçek ignition kaynağı YOK.** Store zaten dirty-check ile dedupe eder. **Aktarılan sinyaller:** speed/rpm/fuel_level/odometer(>0)/coolant_temp/oil_temp/throttle/battery_voltage/gear/ambient_temp/tpms + reverse/door_state/parking_brake (yalnız aktif araç varken=en az bir numerik sinyal mevcut). **supported=false KALAN:** `vehicle.ignition` (kaynak yok, ASLA ingest edilmez), TPMS (canTpmsKpa null iken). **Metadata yok → dürüst eşleme:** CAN-adlı store alanları `source=can`(quality high, confidence 0.9, VAL CAN base ~0.92 gerekçeli), füzyon alanları `source=inferred`(quality medium, 0.6); **magic confidence uydurulmadı** (VAL SIGNAL_SOURCE_DEFAULTS taban gerekçesi). Nullable numerik null→ingest YOK; boolean sinyaller default false'u kaynak sanmamak için aktif-araç kapısına tabi. **Değişiklik modeli:** adapter kendi son-değer haritasıyla YALNIZ değişeni ingest eder (duplicate yok, O(1), tam snapshot clone YOK, hot-path allocation yok). **Lifecycle:** start/stop/refresh/dispose İDEMPOTENT; duplicate subscription yok; store aboneliğini kullanır (yeni timer/polling YOK); dispose sonrası callback no-op; **HAL'in SAHİBİ DEĞİL → dispose HAL'i dispose ETMEZ.** **Fail-soft:** store okunamazsa/HAL ingest hatasında/tek sinyal bozukken diğerleri sürer, public API throw etmez. **Gizlilik:** yalnız numerik/boolean/array değer aktarılır (VIN/MAC/koordinat/ham/kimlik YOK). **YALIN:** store'u DOĞRUDAN import ETMEZ (yapısal `source` DI → import yan etkisiz); Event Bus'a yayınlamaz; Capability Registry'yi güncellemez; SystemBoot'a bağlanmaz; native/OBD/CAN sorgusu başlatmaz; poll frekansı değiştirmez; yeni bağımlılık yok. | `platform/vehicleHal/vehicleHalProviderAdapter.ts` (yeni), `platform/vehicleHal/index.ts` (export), `__tests__/vehicleHalProviderAdapter.test.ts` (yeni, 32 test) | Gerçek araçta (wiring PR'ı `useUnifiedVehicleStore.getState/subscribe`'ı bağladıktan SONRA): (1) hız/RPM/soğutma/yakıt/voltaj HAL'de kaynakla uyumlu (`getSpeed()` vb. gerçek değer); (2) aynı sinyal tekrarında duplicate update yok; (3) kaynağı olmayan ignition ve (verisiz) TPMS destekleniyor GÖRÜNMEZ; (4) reconnect sonrası abonelik duplicate olmuyor (start idempotent); (5) adapter stop/dispose sonrası callback kalmıyor; (6) BASIC_JS/Mali-400'de CPU/FPS regresyonu yok (O(1) değişiklik kontrolü, timer yok, mevcut subscribe akışı). ⚠️ **Event Bus · Capability Registry · SystemBoot wiring AYRI PR'lar.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 35 | **🔴 Device Validation Pending — Platform Event Bus Foundation** — Platform modüllerinin birbirini DOĞRUDAN çağırması yerine tip-güvenli, bounded, fail-soft, izole bir olay omurgası üzerinden haberleşmesini sağlayan foundation. Bugün olay/abonelik ≥5 desende parçalı (≥40 servis kendi `_listeners=new Set`'ini tutuyor; DOM CustomEvent; Zustand subscribe; mini-bus errorBus/VehicleEventHub; native listener), ORTAK event-adı standardı YOK. `PlatformEventBus` (createPlatformEventBus DI) bunu birleştirir. **Model:** 6 priority (safety/critical/high/normal/low/background) · 16 domain · 15 source · PlatformEvent(id/name/domain/source/priority/timestamp/**sequence**/payload/correlation/causation/vehicleFingerprintHash/replayable/retained/experimental). **İsim standardı** `domain.entity.action` (regex zorunlu). **~43 event katalog** (platform/vehicle/capability/deep_scan/health/navigation/eagle_eye/assistant/remote/fleet) — GERÇEK modüle BAĞLI DEĞİL (yalnız isim+contract). **API:** publish/publishName/subscribe/subscribeDomain/once/unsubscribe(idempotent)/hasSubscribers/listenerCount/getStats/getRecentEvents/clearRecentEvents/reset/dispose. **Dispatch:** listener'lar subscription-priority (yüksek→düşük) sonra kayıt sırası; **safety event re-entrant kuyrukta ÖNCE** dispatch (öncelikli drain); listener exception İZOLE (safety dahil engellenmez). **Sequence** monotonik (saat-geri'de bile artar). **Retained** (vehicle.connection/ignition/health.thermal/capability.snapshot) son değer tutar, yeni abone `replayLast` OPT-IN ile alır (varsayılan replay YOK), bounded. **History** bounded (256, BASIC_JS düşük config), **transient** (vehicle.signal.changed 3Hz) history DIŞI, priority-aware eviction (background önce, **safety KORUNUR**), yalnız sanitize özet. **Recursion** bounded depth (16) → aşım drop+recursionDropCount. **Gizlilik:** VIN/MAC/koordinat/ham hex/secret event'e giremez (vehicleFingerprintHash yalnız anonim 8-64 hex, VIN reddedilir; history payload özeti sanitize). **YALIN:** güvenlik KARARI ÜRETMEZ (yalnız taşır); SystemBoot'a BAĞLANMAZ; GLOBAL SINGLETON YOK (yalnız factory/class); **HİÇ import YOK** (tamamen bağımsız); timer YOK; polling YOK; import yan etkisiz; Map/Set O(1); hot-path'te JSON stringify YOK; yeni bağımlılık yok. Bounded (event-adı 256/listener 512/event-başına 64/domain 32/history 256/retained 32); immutable (event+payload deep-freeze, stats/history frozen); fail-soft (bozuk event reddedilir, dispose sonrası no-op, listener içinde unsubscribe/dispose güvenli). Gerçek modül davranışı DEĞİŞMEZ. | `platform/eventBus/platformEventBus.ts` (yeni), `platform/eventBus/index.ts` (yeni), `__tests__/platformEventBus.test.ts` (yeni, 46 test) | Gerçek cihazda (modül wiring PR'ları bağlandıktan SONRA): (1) event sırası deterministik; (2) duplicate listener oluşmuyor; (3) bir listener exception diğer modülleri etkilemiyor; (4) safety event normal event'ten önce teslim; (5) yüksek frekanslı transient event (vehicle.signal) history/RAM şişirmiyor; (6) dispose sonrası listener/timer sızıntısı yok; (7) BASIC_JS/Mali-400'de publish CPU/FPS regresyonu yok (O(1), timer yok, hot-path'te stringify yok). ⚠️ **Capability Registry/Vehicle HAL/Deep Scan wiring + event migration + persistence AYRI PR'lar.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 34 | **🔴 Device Validation Pending — Vehicle HAL Foundation** — CarOS Pro'daki TÜM modüllerin araçla YALNIZ bu katman üzerinden konuştuğu tek resmi Hardware Abstraction Layer. Bugün araç verisi Native VHAL/CAN(Hiworld/K24/NWD)/OBD/GPS → SignalNormalizer → VAL → VehicleCompute.worker → VehicleState → `useUnifiedVehicleStore` (**~40 dosyada** okunuyor) + Assistant Context + Battery Service + gauge SAB ile AYRI okunuyor; per-signal quality/confidence/source/stale/supported/unit veren ORTAK API yoktu. `VehicleHal` bu boşluğu doldurur. **15 sinyal kataloğu** (speed/rpm/coolant_temp/oil_temp/fuel_level/battery_voltage/throttle/ambient_temp/odometer/gear/reverse/ignition/door_state/parking_brake/tpms), her biri `supported=false` tohumlu (kaynak yok). **Signal modeli:** id·value·quality(low/medium/high/unknown)·confidence(0-1)·source(native/can/obd/deep_scan/inferred/none)·timestamp·stale·unit·supported. **Snapshot:** revision·updatedAt·signals(deep-freeze, id-sıralı). **API:** getSnapshot/getSignal(id)/hasSignal/subscribe/unsubscribe/refresh/reset/dispose + tipli erişimciler (getSpeed/getRPM/getCoolantTemp/getFuelLevel/getBatteryVoltage/getIgnition/getGear/getDoorState/getReverse/getThrottle/getOdometer/getTpms) + getVehicleIdentity + getCapability(HAL-yerel). **HAL ilkesi:** donanımdan bağımsız, KAYNAĞI GİZLER, aynı API her araçta çalışır, veri yoksa null/supported=false (fail-closed), hiçbir tüketici CAN/ELM327/Hiworld bilmez. **Veri ÜRETMEZ/YORUMLAMAZ** — yalnız tip doğrulama (number sinyale boolean/NaN→null), magic sanity eşiği YOK. **Gizlilik:** HAM VIN reddedilir (getVehicleIdentity yalnız fingerprint hash 8-64 hex, 17-karakter=VIN reddedilir), protokol sanitize, ham CAN frame/OBD response SAKLANMAZ. **YALIN:** SystemBoot/native/VAL/UnifiedVehicleStore'a BAĞLANMAZ (import YOK — tamamen bağımsız foundation); timer YOK; polling YOK; import yan etkisiz; yeni bağımlılık yok; Map O(1). Bounded (katalog sabit 15 · listener 32 · tpms 6); immutable (snapshot/signal deep-freeze); fail-soft (provider/listener izole, throw yok); duplicate event önleme (değişmezse emit yok); stale (yaş>5000ms veya saat-geri). ⚠️ **Gerçek kaynak wiring (VAL/UnifiedVehicleStore → HAL.ingest) + modüllerin HAL'e taşınması AYRI PR'lar.** | `platform/vehicleHal/vehicleHal.ts` (yeni), `platform/vehicleHal/index.ts` (yeni), `__tests__/vehicleHal.test.ts` (yeni, 35 test) | Gerçek araçta (kaynak wiring PR'ı bağlandıktan SONRA): (1) `getSpeed()/getRPM()/getBatteryVoltage()` gerçek değer döner (CAN/OBD/HAL kaynağından, tüketici kaynağı BİLMEDEN); (2) kaynağı olmayan sinyal (ör. `getIgnition()` şu an) null/supported=false; (3) sinyal eskirse stale=true (taze gösterilmez); (4) bir provider düşse HAL çökmez, diğer sinyaller okunur; (5) HAM VIN hiçbir yere sızmaz (yalnız fingerprint hash); (6) BASIC_JS/Mali-400'de HAL CPU/RAM regresyonu yok (O(1) lookup, timer yok, pasifken sıfır yük); (7) tüm modüller CAN/OBD/Hiworld yerine yalnız HAL kullanır. ⚠️ **Gerçek kaynak wiring + modül taşıma SONRAKİ PR KAPSAMI.** Test edilmeden 🟢 yapma. | 2026-07-11 |
Expand Down
Loading
Loading