feat(rpartstore): RPartStore Renault/Dacia VIN-decode kaynağı + PL24 bütçe yanlış-alarm fix #271

Merged
root merged 2 commits from dev into main 2026-09-25 14:28:32 +03:00
Owner

dev → main promote.

  • feat(rpartstore) 71568e2: rpartstore.renault.com (Renault Group bayi portalı, STOMP-over-WebSocket) yeni decode kaynağı. Sıra Renault/Dacia için pcat + PL24 + emex yarışı → rpartstore → Vinpin (pasif). Günlük sert kota RPARTSTORE_DAILY_CAP=10, migration 0037 rpartstore_decodes, kuyruk rpartstore-decode (concurrency 1, 1 iş/6 s). Dev'de uçtan uca doğrulandı (VF1RFB00459111914 → MEGANE 4 SEDAN, 5 s).
  • fix(pl24) 41147f3: kendi bütçe frenimiz "hesap banlandı" alarmı üretmesin.

Prod Coolify env: RPARTSTORE_ENABLED/USER/PASS/DAILY_CAP eklendi, VINPIN_ENABLED=false yapıldı (Vinpin son çare olarak koda bağlı kalır).

🤖 Generated with Claude Code

dev → main promote. - **feat(rpartstore)** `71568e2`: rpartstore.renault.com (Renault Group bayi portalı, STOMP-over-WebSocket) yeni decode kaynağı. Sıra Renault/Dacia için pcat + PL24 + emex yarışı → rpartstore → Vinpin (pasif). Günlük sert kota `RPARTSTORE_DAILY_CAP=10`, migration 0037 `rpartstore_decodes`, kuyruk `rpartstore-decode` (concurrency 1, 1 iş/6 s). Dev'de uçtan uca doğrulandı (VF1RFB00459111914 → MEGANE 4 SEDAN, 5 s). - **fix(pl24)** `41147f3`: kendi bütçe frenimiz "hesap banlandı" alarmı üretmesin. Prod Coolify env: `RPARTSTORE_ENABLED/USER/PASS/DAILY_CAP` eklendi, `VINPIN_ENABLED=false` yapıldı (Vinpin son çare olarak koda bağlı kalır). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
root added 1 commit 2026-09-21 20:53:16 +03:00
fix(pl24): kendi bütçe frenimiz "hesap banlandı" alarmı üretmesin
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
41147f3f05
Prod 2026-09-21 19:10 (İstanbul) itibarıyla Telegram "🔴 PL24 giriş
yapılamıyor — hesap banlanmış olabilir" dedi. Hesap sağlamdı:
kullanıcı tarayıcıdan giriş yapabildi, aynı gün 143 başarılı auth
çağrısı ve **0 × 401** vardı. Gerçek sebep alarmın kendi metninde:
"PL24 daily HTTP budget exhausted (user lane: 1205/1200)" — yani
upstream değil, BİZİM günlük tavanımız.

Zincir: `attemptLogin` içindeki `budget.consume()` fırlatıyor → dış
`catch` bunu `{ error }` olarak düzleştiriyor → `loginWithLock`
`!result.sessionToken` dalına giriyor → `breakerFail()` + kesinti
sayacı → bir saat sonra ban alarmı. Yani kendi frenimiz hem devre
kesiciyi tetikliyor hem de operatörü yanlış yere çağırıyor.

- `PL24BudgetExceededError` artık `attemptLogin` ve
  `authorizeServiceForAccount` içinde olduğu gibi yukarı çıkıyor;
  giriş/yetkilendirme hatasına çevrilmiyor. Devre kesici tetiklenmiyor,
  kesinti sayacı başlamıyor, Telegram susuyor. Çağıran taraf PL24'ü
  atlayıp pcat/emex'e düşüyor — bugün de öyle oluyordu, ama artık
  sessizce ve doğru gerekçeyle.
- Şerit bazlı sayaç eklendi: `pl24:http:<gün>:{user,worker}`. Paylaşılan
  toplam tavanın NE ZAMAN dolduğunu söylüyordu ama KİMİN harcadığını
  söylemiyordu; tavanı veriyle boyutlandırmak için bu şart. Bugün
  toplam 1200'e vurdu ve 16:10 UTC'den sonra her kullanıcı decode'u
  reddedildi, ama ne kadarının ısıtma prefetch'i ne kadarının ekran
  başında bekleyen biri olduğu `proxy_logs`'tan çıkarılamıyordu.

5 yeni test. api 650 test geçiyor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
root added 1 commit 2026-09-25 13:58:13 +03:00
feat(rpartstore): Renault/Dacia için RPartStore VIN-decode fallback kaynağı
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
71568e2274
rpartstore.renault.com (Renault Group bayi portalı) yeni decode kaynağı olarak
eklendi. Portal REST değil STOMP 1.2 over WebSocket konuşuyor; login Okta OIE
(IDX JSON API + PKCE), tarayıcı gerekmiyor. Sıralama Renault/Dacia için:
pcat + PL24 + emex yarışı → rpartstore → (bayrağı açıksa) Vinpin son çare.

- integrations/rpartstore: STOMP codec, Okta login, oturum (trace-id ile
  çok-mesajlı cevap eşleme), istemci (Redis'te 1 saatlik token), Renault/Dacia
  yönlendirme, RPartStore → PL24 catalog_vehicles model eşleyici (roman rakam,
  karoseri niteleyici, yanlış-pazar cezası).
- rpartstore_decodes tablosu (migration 0037) + rpartstore-decode BullMQ
  kuyruğu; worker concurrency 1 + 1 iş / 6 s limiter (portal 2 arama / 10 s).
- Günlük sert kota RPARTSTORE_DAILY_CAP (varsayılan 10, İstanbul günü):
  işlemci göndermeden önce Redis INCR ile rezervasyon yapar, aşan VIN'ler
  `capped` olur ve 24 saat sonra tekrar denenir; API kota doluysa kuyruğa
  hiç almaz. Kısa vadeli rate-limit cevabında retryAfter kadar bekleyip bir
  kez tekrar dener.
- VehiclesService.tryRpartstoreFallback: Vinpin fallback ile aynı sözleşme
  (decoding/catalogVehicle cevapları, tek başarısızlık log satırı).
- Env: RPARTSTORE_ENABLED/USER/PASS/DAILY_CAP/BROKER_URL/APP_VERSION
  (compose api+worker). Vinpin koda dokunulmadan pasif kalır (VINPIN_ENABLED).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
root changed title from fix(pl24): kendi bütçe frenimiz "hesap banlandı" alarmı üretmesin to feat(rpartstore): RPartStore Renault/Dacia VIN-decode kaynağı + PL24 bütçe yanlış-alarm fix 2026-09-25 14:28:31 +03:00
root merged commit a0d7e736a4 into main 2026-09-25 14:28:32 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/sase.tr#271