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 |
|---|---------|--------|------------------------------------------|---------|
| 39 | **🔴 Device Validation Pending — Platform Core Event Bridge Foundation** — Vehicle HAL ve Capability Registry'deki GERÇEK değişiklikleri tip-güvenli, bounded, SALT-OKUNUR biçimde Platform Event Bus'a aktaran İKİ köprü. **Vehicle:** `createVehicleHalEventBridge({hal,bus})` — HAL `subscribe` TAM snapshot verir (per-signal delta yok); köprü snapshot'ı kendi son-değer haritasıyla DIFF'leyip yalnız değişen supported sinyalleri yayınlar. `vehicle.signal.changed` **TRANSIENT** (history dışı, küçük payload: signalId/value özeti/quality/confidence/source/stale/supported/timestamp; **full HAL snapshot/raw CAN TAŞINMAZ**; O(1) dedup, hot-path allocation yok). `vehicle.ignition.changed` (retained) yalnız ignition supported+boolean değişince — **foundation'da ignition kaynağı YOK→supported=false→ASLA yayınlanmaz**. `vehicle.connection.changed` (retained) "en az bir supported sinyal" geçişinde (HAL'e dayalı gerçek olgu; veri yoksa false→SESSİZ). `vehicle.identity.changed` (retained) yalnız identity.supported (fingerprint) değişince (ham fingerprint yalnız metadata, payloadta DEĞİL). `vehicle.health.changed` YAYINLANMAZ (HAL'de health kaynağı yok→uydurulmaz). **Capability:** `createCapabilityEventBridge({registry,bus})` — Registry change event yalnız `{type,id,revision,at}` verir; köprü record'u `getCapability(id)` ile çeker. `capability.record.registered/changed/removed` (changed imza-dedup: aynıysa event yok); `capability.snapshot.changed` **RETAINED, küçük payload** {revision, counts, changedIds(bounded)} — **full registry TAŞINMAZ**; sayımlar start'ta BİR KEZ `createSnapshot()` ile tohumlanır, sonra INCREMENTAL O(1) (**değişiklik başına snapshot allocation YOK**); record payload whitelist (id/domain/status/available/quality/confidence/source/stale/reason/limitations bounded, Registry'ce zaten sanitize). **Ortak:** start/stop/dispose İDEMPOTENT; tek abonelik; **kaynakların SAHİBİ DEĞİL→dispose HAL/Registry/Bus'ı dispose ETMEZ**; dispose sonrası callback no-op; publishedCount/droppedCount (Bus reddi/publish hatası→droppedCount, kaynak servis etkilenmez); fail-soft (HAL/Registry subscribe hatası, tek bozuk signal/record izole, public API throw etmez); privacy (VIN/MAC/koordinat/ham CAN/anahtar event'e girmez); immutable payload; katalog event isimleri; HAL/Registry/Bus'ı DOĞRUDAN import ETMEZ (yalnız TYPE→import yan etkisiz); **timer/polling YOK, yeni bağımlılık YOK, global singleton YOK**. Güvenlik KARARI üretmez (yalnız taşır); Event Bus recursion/priority/bounded kuralları DEĞİŞMEZ. **SystemBoot wiring · provider adapter auto-start · Platform Kernel wiring YOK — AYRI PR.** | `platform/eventBus/bridges/vehicleHalEventBridge.ts` (yeni), `platform/eventBus/bridges/capabilityEventBridge.ts` (yeni), `platform/eventBus/bridges/index.ts` (yeni), `platform/eventBus/index.ts` (export), `__tests__/vehicleHalEventBridge.test.ts` (yeni, ~24 test), `__tests__/capabilityEventBridge.test.ts` (yeni, ~24 test) | Gerçek cihazda (SystemBoot/Platform Kernel wiring PR'ı köprüleri gerçek HAL/Registry/Bus'a bağladıktan SONRA): (1) gerçek araç sinyal değişiklikleri Event Bus'a **duplicate olmadan** ulaşıyor; (2) 3 Hz sinyaller (vehicle.signal.changed transient) history/RAM ŞİŞİRMİYOR; (3) capability değişiklikleri doğru event'lerle (registered/changed/removed/snapshot) yayınlanıyor; (4) kaynağı olmayan ignition/connection event'i UYDURULMUYOR (foundation'da sessiz); (5) listener/publish hatası HAL veya Registry'yi ETKİLEMİYOR (droppedCount artar); (6) stop/dispose sonrası abonelik sızıntısı yok; (7) BASIC_JS/Mali-400'de CPU/FPS regresyonu yok (O(1) dedup, timer yok, full snapshot allocation yok, pasifken sıfır yük). ⚠️ **SystemBoot/Platform Kernel wiring AYRI PR.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 38 | **🔴 Device Validation Pending — Platform Core Real Providers Foundation** — Vehicle HAL Provider Adapter ve Capability Provider Adapter için İLK gerçek, SALT-OKUNUR provider implementasyonları. **Vehicle:** `createUnifiedVehicleStoreProvider({store})` mevcut `useUnifiedVehicleStore`'u (fused worker/CAN/OBD/GPS) adapter'ın `VehicleStoreSource`'ına (getSnapshot/subscribe) uyarlar — store SALT-OKUNUR, her snapshot YENİ dondurulmuş alt-küme (speed/rpm/fuel/odometer/reverse + CAN extras), `rpm undefined→null`, **TPMS yalnız gerçek 4-elemanlı numerik veri varsa**, **ignition EXPOSE EDİLMEZ** (kaynak yok), metadata UYDURULMAZ; store DOĞRUDAN import EDİLMEZ (yapısal DI→import yan etkisiz); provider oluşturulmadan abone OLMAZ; subscribe idempotent unsub + dispose zero-leak. **Capability:** `createRuntimeCapabilityProviders({env,probes})` yalnız KANITLANABİLİR provider üretir. **Kanıt sınıfı:** browser-API presence (geolocation/mediaDevices/bluetooth) → `degraded`/düşük conf (donanım KESİNLEŞMEZ), API yok→unknown; `navigator.connection.type` kesin wifi/cellular→available, aksi unknown; mikrofon izin granted olmadıkça available DEĞİL (denied→restricted); native secure storage authoritative→available/yüksek conf; modül runtime (deep_scan/vehicle_learning/assistant_context/ota/safety_kernel/offline_commands/offline_conversation/push/cloud_commands): **modül var ama runtime bağlı değil→degraded/experimental**, runtime hazır→available, yok→unknown; AI BYOK (gemini/groq/claude/cloud): configured+usable→available, configured→degraded, değil→unavailable; offline map/routing gerçek paket/graf yoksa→unavailable. **KAYNAK YOK:** `ai.grok`(xAI entegrasyonu yok→provider HİÇ ÜRETİLMEZ), `ai.local_model`(gerçek yerel LLM yok→yalnız high-tier+probe, low/mid'de OLUŞTURULMAZ). **Runtime readiness ≠ module existence** (dosya/export var tek başına available DEĞİL). Fabrikalar DI; **global singleton YOK**; probe/navigator yalnız `read()`'te (fabrika yan etkisiz); ağır modül IMPORT YOK (yalnız TYPE); timer/polling YOK; her read try/catch (throw etmez); sonuçlar dondurulmuş; privacy (VIN/MAC/anahtar probe payload'ından sızmaz). **SystemBoot wiring · Event Bus publish · Registry auto-start · UI · Assistant Context değişikliği YOK — hepsi AYRI PR.** | `platform/vehicleHal/providers/unifiedVehicleStoreProvider.ts` (yeni), `platform/vehicleHal/providers/index.ts` (yeni), `platform/vehicleHal/index.ts` (export), `platform/capability/providers/runtimeCapabilityProviders.ts` (yeni), `platform/capability/providers/index.ts` (yeni), `platform/capability/index.ts` (export), `__tests__/unifiedVehicleStoreProvider.test.ts` (yeni, ~16 test), `__tests__/runtimeCapabilityProviders.test.ts` (yeni, ~38 test) | Gerçek cihazda (SystemBoot/Registry/HAL wiring PR'ı bağlandıktan SONRA): (1) gerçek araç state'i (hız/RPM/soğutma/yakıt/voltaj) Vehicle HAL Provider Adapter'a doğru aktarılıyor; (2) GPS/Bluetooth/Wi-Fi/cellular capability sonuçları gerçek cihaz API'leriyle uyumlu; (3) izni olmayan özellik (mikrofon) available GÖRÜNMÜYOR; (4) secure storage yalnız gerçek native kanıtla available; (5) Grok/local model/offline map olmayan cihazda available GÖRÜNMÜYOR (grok provider bile yok); (6) provider stop/dispose sonrası subscription sızıntısı yok; (7) BASIC_JS/Mali-400'de CPU/RAM regresyonu yok (fabrika yan etkisiz, timer yok, pasifken sıfır yük). ⚠️ **SystemBoot/Event Bus wiring AYRI PR.** Test edilmeden 🟢 yapma. | 2026-07-11 |
| 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 |
Expand Down
Loading
Loading