Skip to content

feat(sensors): on-demand tüketicileri Orientation Sensor Gate'e taşı (PR 2/3)#57

Merged
selimmujdeci merged 1 commit into
mainfrom
fix/orientation-sensor-gate-on-demand-consumers
Jul 11, 2026
Merged

feat(sensors): on-demand tüketicileri Orientation Sensor Gate'e taşı (PR 2/3)#57
selimmujdeci merged 1 commit into
mainfrom
fix/orientation-sensor-gate-on-demand-consumers

Conversation

@selimmujdeci

Copy link
Copy Markdown
Owner

Amaç

Orientation Sensor Gate 3-PR sırasının 2. adımı. Yaşam-döngüsüyle açılıp kapanan dört sensör tüketicisini, doğrudan window event aboneliği yerine Orientation Sensor Gate (#40) üzerinden çalıştırır.

Taşınan tüketiciler

Tüketici Ham event → Gate
arAlignmentService deviceorientationabsolute + deviceorientation + devicemotion subscribeOrientationAbsolute/subscribeOrientation/subscribeMotion (3 release ref)
dashcamService devicemotion subscribeMotion (_motionRelease)
blackBoxService._startAccelerometer devicemotion gate release aynen döner (_accelUnsub sözleşmesi değişmez)
deviceApi.subscribeToAccelerometer devicemotion gate release döner (sentryEngine _unsubAccel yolu değişmez)

Lifecycle / release modeli

Her tüketici gate release'ini kendi lifecycle alanında tutar; start/stop idempotent (mevcut guard'lar korundu); duplicate acquire yok; stop/dispose'ta release çağrılır; tüketici gate'in sahibi değil, gate'i dispose etmez.

Davranış koruması

  • Handler'lar, callback sırası/işaretleri, smoothing/filtering aynı.
  • Permission: feature-detect ('DeviceMotionEvent' in window) korundu, iOS requestPermission eklenmedi.
  • Event payload aynı callback'e ulaşır (gate event'i olduğu gibi geçirir).
  • arAlignment capture-fazı kaldırıldı — pencere-hedefli device event teslimatı faz-bağımsız, davranış değişmez.

Visibility

Tüketiciler kendi visibilitychange listener'ını EKLEMEZ — gate merkezî olarak yönetir (çift listener yok). Background'da fiziksel listener gate tarafından sökülür; foreground'da yalnız aktif consumer geri bağlanır.

Performans etkisi

Aynı ham event için birden fazla fiziksel JS listener yerine tek gate listener + background pause + temiz ownership. Event başına yeni allocation yok · yeni timer/rAF/polling yok · callback gövdesi büyümedi · yeni bağımlılık yok · import yan etkisiz.

⚠️ Bilinen sınırlama (dürüst)

gpsService ve smartDrivingEngine bu PR'da DEĞİŞMEDİ (hâlâ always-on). Bu yüzden:

  • Settings ekranında native sensör kaydı devam edebilir.
  • Native 60 Hz sampling devam edebilir.
  • Bu PR native samplingPeriod düşüşü iddia etmez ve Settings CPU sorununu çözmez.

Bunlar PR 3 kapsamıdır (always-on compass + smartDriving talep-güdümlü acquire + background pause).

Test & Doğrulama

  • 30/30 migrasyon testi (gate acquire/release, tek fiziksel listener paylaşımı, visibility, event geçişi, gpsService/smartDrivingEngine değişmedi kilidi, permission korundu).
  • tsc -b --noEmit temiz · ESLint temiz · tam suite 3174/3174 yeşil (regresyon yok) · prod build OK.

Değişen dosyalar

platform/arAlignmentService.ts · platform/dashcamService.ts · platform/security/blackBoxService.ts · platform/deviceApi.ts · __tests__/orientationGateConsumerMigration.test.ts (yeni) · docs/DEVICE_VALIDATION_LEDGER.md (#41 🔴)

gpsService / smartDrivingEngine / SystemBoot / Platform Kernel PR #55 / MapLibre / OBD-CAN / SQL — dokunulmadı. Merge YAPILMADI.

🤖 Generated with Claude Code

…(PR 2/3)

Yaşam-döngüsüyle açılıp kapanan dört sensör tüketicisini ham
window.addEventListener yerine Orientation Sensor Gate (#40) üzerinden
çalıştırır. Her tüketici gate release'ini kendi lifecycle alanında tutar;
start/stop idempotent, duplicate acquire yok, gate'in sahibi değil.

Taşınanlar:
- arAlignmentService: deviceorientationabsolute+deviceorientation+
  devicemotion → subscribeOrientationAbsolute/subscribeOrientation/
  subscribeMotion (3 release ref; capture-fazı kaldırıldı — pencere-hedefli
  device event teslimatı faz-bağımsız, davranış değişmez)
- dashcamService: devicemotion → subscribeMotion (_motionRelease)
- blackBoxService._startAccelerometer: gate release aynen döner
  (_accelUnsub sözleşmesi değişmez)
- deviceApi.subscribeToAccelerometer: gate release döner
  (sentryEngine _unsubAccel yolu değişmez)

Davranış korundu: handler'lar/callback sırası/işaretleri/smoothing/
permission (feature-detect korundu, iOS requestPermission eklenmedi) aynı;
event payload aynı callback'e ulaşır. Tüketiciler kendi visibilitychange
listener'ını EKLEMEZ (gate yönetir). Event başına yeni allocation yok,
yeni timer/rAF/polling yok, yeni bağımlılık yok, import yan etkisiz.

Kazanım: aynı ham event için tek gate listener + background pause + temiz
ownership. ⚠️ gpsService ve smartDrivingEngine DEĞİŞMEDİ (hâlâ always-on)
→ Settings'te native sensör kaydı ve native 60 Hz DEVAM EDEBİLİR; bu PR
native samplingPeriod düşüşü İDDİA ETMEZ, Settings CPU'yu ÇÖZMEZ (PR 3).

Test: 30 migrasyon testi (gate acquire/release, tek fiziksel listener,
visibility, event geçişi, gps/smartDriving değişmedi kilidi).
tsc -b temiz · ESLint temiz · tam suite 3174 yeşil · prod build OK.
Ledger #41 🔴 (Mali-400 bekliyor).

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

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

@selimmujdeci selimmujdeci merged commit 2d21168 into main Jul 11, 2026
8 checks passed
selimmujdeci pushed a commit that referenced this pull request Jul 12, 2026
… cihaz bekliyor

Bracket->dot + release scan guard host-dogrulandi (CI yesil); taze APK'da eski
anahtar yoklugu + BYOK akisi cihazda dogrulanmali. Provider rotate manuel adim.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141GKY1eQru4Ap1PWN4VVst
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