Skip to content

feat(obd): otomatik PID/DID keşif yakalama boru hattı (PR-DISC-1)#22

Merged
selimmujdeci merged 2 commits into
mainfrom
feat/discovery-capture-pipeline
Jul 9, 2026
Merged

feat(obd): otomatik PID/DID keşif yakalama boru hattı (PR-DISC-1)#22
selimmujdeci merged 2 commits into
mainfrom
feat/discovery-capture-pipeline

Conversation

@selimmujdeci

Copy link
Copy Markdown
Owner

Konu

Automatic PID/DID Discovery Capture Pipeline — araçtan gözlemlenen ancak katalogda (StandardPidRegistry / araç DID profili) bulunmayan PID ve DID'leri otomatik yakalayan altyapı.

Tamamen ADDITIVE — hiçbir mevcut dosya değişmedi. PID registry / DTC kataloğu / native katman / hot-poll mantığı / SQL-Supabase migration'a DOKUNULMADI. Ağ çağrısı YOK (offline-first). PR #11'e dokunulmadı.

Yeni dosyalar (7) — src/platform/obd/discovery/

Dosya Katman / sorumluluk
discoveryModel.ts Saf veri modeli (DiscoveryRecord) + dedup kimliği + FNV-1a hash (React/native importu yok)
DiscoveryCache.ts Hash-tabanlı, bounded (FIFO eviction) deduplikasyon → aynı ECU+mode+PID/DID tek kez
DiscoveryQueue.ts Offline-first kalıcı FIFO kuyruk (safeStorage; bounded; drain/peekAll ile ileride uploader'a hazır — ağ yok)
discoveryExport.ts Sürümlü yerel JSON export zarfı (Supabase yok)
DiscoveryCaptureService.ts Merkezî orkestratör (registry filtresi + dedup + kuyruk + tanı event)
index.ts Modül genel yüzeyi (facade)
src/__tests__/discoveryCapture.test.ts 21 test

Değişen dosyalar: yok (0).

Mimari özeti (Clean Architecture / SOLID — GEMINI.md kalite kuralları)

Bir PID/DID gözlemi capture(input) ile şu boru hattından geçer:

  1. Registry filtresi — katalogda VARSA yok sayılır (reason: 'known') → registry'de olanları tekrar kaydetme.
  2. Hash dedup (DiscoveryCache) — aynı kimlik ikinci gözlemde elenir (reason: 'duplicate').
  3. Yeni + benzersizse → offline kuyruğa yazılır + tanı log'una discovery event'i düşer.

Bağımlılık tersine çevirme (DIP): isPidKnown (varsayılan STANDARD_PID_MAPsalt-okunur, registry'ye dokunulmaz), isDidKnown (setKnownDids ile profil DID'leri), emitDiagnostic (varsayılan recordDiag) dışarıdan enjekte edilebilir → gevşek bağlaşım + test edilebilirlik.

Tanı log entegrasyonu (item 6): yeni keşif, mevcut ecuQuery stage'iyle recordDiag'a info event olarak yazılır — obdDiagnosticTypes değişmedi.

Discovery modeli

timestamp · vehicleProfile · ecuAddress · protocol · mode · pidOrDid · request · rawResponse · decodedValue? · supported · discoverySource (PID/DID) · firmwareVersion? — hepsi görev tanımıyla birebir; opsiyoneller gerçekten bilinmeyebilenler (uydurma yok).

Test sayısı

21 test (yeşil): model/hash · cache (dedup + bounded) · queue (enqueue/peekAll/drain/bounded/kalıcılık) · export JSON · servis kuralları (known/duplicate/yeni DID/setKnownDids/farklı-ECU/reset) · varsayılan ecuQuery event wiring. tsc -b temiz; regresyon kasası 110/110.

Risk analizi

Çok düşük. Tamamen additive, izole modül; hiçbir mevcut kod yolu (hot-poll, native, registry, DTC) değişmedi — singleton export edilir ama henüz hiçbir tüketiciye bağlanmadı (altyapı PR'ı). Tüm yapılar bounded (bellek/disk sabit → zero-leak); soğuk-yol (hot-path'e girmez); yeni bağımlılık yok. Güvenlik: kayıtlarda MAC/PII yok (yalnız PID/DID + ham hex); export/kuyruk yalnız yerel, ağ yok.

🤖 Generated with Claude Code

Araçtan gözlemlenen ancak katalogda (StandardPidRegistry / araç DID profili)
bulunmayan PID ve DID'leri otomatik yakalayan altyapı. Tamamen ADDITIVE
(mevcut dosya değişmedi): PID registry / DTC kataloğu / native katman / hot-poll
mantığı / SQL-Supabase'e DOKUNULMADI. Ağ çağrısı YOK (offline-first).

Yeni modül src/platform/obd/discovery/ (Clean Architecture katmanları):
- discoveryModel.ts        — saf veri modeli (DiscoveryRecord) + dedup kimliği +
                             FNV-1a hash (React/native importu yok)
- DiscoveryCache.ts        — hash-tabanlı, SINIRLI (bounded, FIFO eviction) dedup
                             → aynı ECU+mode+PID/DID tek kez (zero-leak)
- DiscoveryQueue.ts        — offline-first kalıcı FIFO kuyruk (safeStorage; bounded;
                             drain/peekAll ile ileride uploader'a hazır — ağ YOK)
- discoveryExport.ts       — sürümlü yerel JSON export zarfı (Supabase YOK)
- DiscoveryCaptureService.ts — merkezî orkestratör: registry filtresi (bilineni
                             atla) + dedup + kuyruk + tanı event'i. Bağımlılıklar
                             enjekte edilebilir (DIP): isPidKnown (varsayılan
                             STANDARD_PID_MAP salt-okunur), isDidKnown (setKnownDids),
                             emitDiagnostic (varsayılan recordDiag → 'ecuQuery')
- index.ts                 — modül genel yüzeyi (facade)

Tanı log entegrasyonu: yeni PID/DID bulununca mevcut 'ecuQuery' stage'iyle
recordDiag'a 'info' event düşer (obdDiagnosticTypes DEĞİŞMEDİ).

Test src/__tests__/discoveryCapture.test.ts (21 kilit):
- duplicate keşif oluşmuyor · registry PID tekrar kaydedilmiyor · yeni DID
  yakalanıyor · hash dedup + bounded eviction · queue enqueue/drain/bounded/
  kalıcılık · export JSON sürümlü zarf · varsayılan emitör 'ecuQuery' event yazıyor

Güvenlik/performans/bakım: MAC/PII yazılmaz (yalnız PID/DID/ham hex); tüm yapılar
bounded (bellek/disk sabit); soğuk-yol (hot-path'e girmez); yeni bağımlılık yok.

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

vercel Bot commented Jul 9, 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 9, 2026 3:12pm
carospro Ready Ready Preview, Comment Jul 9, 2026 3:12pm

Comment thread src/__tests__/discoveryCapture.test.ts Fixed
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.

2 participants