Skip to content

feat(status-bar): OEM Vehicle Status Bar — OBD/GPS/AI göstergeleri#90

Open
selimmujdeci wants to merge 2 commits into
mainfrom
feat/oem-vehicle-status-bar
Open

feat(status-bar): OEM Vehicle Status Bar — OBD/GPS/AI göstergeleri#90
selimmujdeci wants to merge 2 commits into
mainfrom
feat/oem-vehicle-status-bar

Conversation

@selimmujdeci

Copy link
Copy Markdown
Owner

Özet

Ana ekran status bar'ına (Wi-Fi/BT'nin yanı, ses'ten önce) OEM seviyesinde OBD / GPS / AI göstergeleri ekler. Mevcut kaynaklardan bounded metadata türetir — yeni state/polling/timer/rAF/health-ping YOK, animasyon CSS-only (motion-safe + prefers-reduced-motion).

Değişen dosyalar (5)

Dosya Ne
src/platform/vehicleStatusModel.ts (yeni) PURE türetme katmanı (React/DOM/zaman yan-etkisi yok; now dışarıdan → clock-jump/test güvenli)
src/components/common/VehicleStatusIndicators.tsx (yeni) Sunum bileşeni (memo); mevcut hook'ları model'e bağlar, OEM ikon + bounded popover
src/components/common/StatusControls.tsx (+4) Import + render (Wi-Fi/BT'den sonra, ses'ten önce)
src/__tests__/vehicleStatusModel.test.ts (yeni) 41 test
docs/DEVICE_VALIDATION_LEDGER.md 🔴 #67 kaydı

Kullanılan mevcut state kaynakları (yeni paralel state yok)

  • Wi-Fi: useDeviceStatus().wifiConnected + navigator.onLine
  • Bluetooth: mevcut native device state
  • OBD: useOBDState()connectionState / source / lastSeenMs
  • GPS: useGPSState()location.accuracy / location.timestamp / isTracking / unavailable / error
  • AI: sensitiveKeyStore.has() (yalnız boolean) + getAiHealthSnapshot().healthy (circuit breaker)

OBD freshness modeli

connected YALNIZ: transport connected + source === 'real' + son gerçek paket freshness içinde.
0–3s → healthy · 3–10s → stale · >10s → disconnected. Mock/none asla bağlı sayılmaz; saat-atlaması (negatif yaş) son bilineni korur.

AI görünürlük + health modeli

  • Yapılandırılmış sağlayıcı yok / AI kapalı → ikon hiç render edilmez (hidden)
  • Anahtar değeri değil yalnız has() boolean okunur — secret state/DOM/log'a taşınmaz
  • checkinghealthy (≥1 provider ready) → fallback (ana down, yedek ready) → error (hepsi down)

OEM tasarım

Monokrom Lucide ikon + küçük durum noktası (ok=accent/yeşil · warn=amber · error=kırmızı · muted=düşük opaklık) — büyük rozet yok, aynı boyut/stroke/spacing. Tıklayınca bounded popover (yalnız kısa durum metni; yeni polling yok, gizli veri yok).

Kapsam dışı (dokunulmadı)

OBD/BT/GPS/AI servis davranışı · PR #88 parser/handshake · Event Bus · diagnostics payload · SQL/Supabase · native kod.

Test & CI

  • 41 yeni test (Wi-Fi/BT/OBD-freshness/GPS/AI senaryoları + gizlilik/perf kaynak-tarama guard'ları)
  • Tam suite: 3905 yeşil / 213 dosya — regresyon yok
  • tsc -b --noEmit temiz · ESLint 0 error · production build OK

Ledger

🔴 #67 — cihazda doğrulanmadı. Kabul kriteri gerçek head unit'te (Xiaomi + low-tier K24/Mali-400/T507): Wi-Fi ile aynı hiza, OBD yalnız gerçek+fresh veride healthy + stale geçişi, AI yapılandırma yokken görünmez, secret sızıntısı yok, statik ekranda ek jank yok.

Bilinen riskler

  • Gerçek head unit'te doğrulanmadı (Mali-400/K24 layout taşması + gerçek OBD freshness geçişi cihazda görülmeli).
  • AI health şu an global circuit'ten türetiliyor (provider başına ayrı readiness değil) → readyProviderCount coarse; fallback ayrımı ana provider ready boolean'ına dayanıyor.

⚠️ Merge edilmeyecek — inceleme için açıldı.

🤖 Generated with Claude Code

…af türetme, sıfır yeni state)

Ana ekran status bar'ına (Wi-Fi/BT yanı, ses'ten önce) OEM seviyesinde OBD/GPS/AI
göstergeleri ekler. Mevcut kaynaklardan bounded metadata türetir; yeni state/polling/
timer/rAF/health-ping YOK, animasyon CSS-only (motion-safe + reduced-motion).

- vehicleStatusModel.ts: PURE türetme (now dışarıdan; clock-jump/test güvenli)
- OBD sahte-connected koruması: connected = transport connected + source=real + fresh
  (0-3s healthy / 3-10s stale / >10s disconnected); mock/none asla bağlı sayılmaz
- AI sıkı görünürlük: yapılandırılmış sağlayıcı yok/kapalı → ikon render edilmez;
  yalnız sensitiveKeyStore.has() boolean okunur, secret state/DOM/log'a taşınmaz
- OEM tasarım: monokrom ikon + küçük durum noktası (ok/warn/error/muted), bounded popover
- StatusControls entegrasyonu minimal (+4 satır: import + render)

Kapsam dışı korundu: OBD/BT/GPS/AI servis davranışı, PR #88 parser/handshake,
Event Bus, diagnostics payload, SQL, native — DEĞİŞMEDİ.

Doğrulama: 41 yeni test + tam suite 3905 yeşil (213 dosya), tsc -b temiz, lint 0,
production build OK. Ledger: 🔴 #67 (cihazda doğrulanmadı).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019s53JVK4gGqdZfmJz8aZc6
@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
car-launcher-pro Ready Ready Preview, Comment Jul 13, 2026 6:57pm
carospro Ready Ready Preview, Comment Jul 13, 2026 6:57pm

Taze APK zircon'a (Xiaomi 23090RA98I) yüklendi + başlatıldı; ekran görüntüsüyle:
OBD/GPS ikonları Wi-Fi/BT ile aynı hizada (layout taşması yok), AI ikonu gizli
(sağlayıcı yok → sıkı görünürlük cihazda kanıtlandı), OBD sahte-connected üretmedi.
Kalan (araç şart): gerçek OBD freshness geçişi + Mali-400/K24 layout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019s53JVK4gGqdZfmJz8aZc6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant