feat(pl24): PSA+Volvo → P5, reaktif drill freni, 1 saatlik kesinti için Telegram uyarısı #263

Merged
root merged 3 commits from dev into main 2026-09-17 14:26:27 +03:00
Owner

Faz 1'in kalan üç parçası: reaktif drill freni, PL24 kesinti alarmı, PSA + Volvo'nun P5'e taşınması. Analiz /home/s/ss/plv2.md.

1. Reaktif drill freni (02ec385)

Ban'ı süren hacim backfill değil, her yeni decode'da çalışan tam ağaç drill'iydi: PL24_TR_DISABLED main lane'i park etmişken bile yeni kategorilerin %100'ü aynı gün decode edilen araçlardan geldi (bir Passat 1.251, bir L200 2.323 kategori).

  • PREFETCH_PL24_FAST_DEPTH=1 — reaktif lane yalnız üst gruplar + doğrudan çocukları. Derini kullanıcı o düğümü açınca veya bütçeli backfill'de gelir.
  • PREFETCH_PL24_DELAY_MS=8000 ±%50 jitter — yalnız backfill; kullanıcı lane'i hiç yavaşlamaz.
  • Telemetride gerçek hesap etiketi (activeAccount()); prod'da ham tr yazıyordu.

2. PL24 girişi 1 saat başarısızsa Telegram uyarısı (3cfa3d5)

İki hesap banı da günler sonra, DB satır sayılarından fark edildi (tr 07-24 → 08-18'de; de 09-04 → 09-16'da). Artık bir saat içinde haber gelir.

  • Global TelegramService (Süper Panel ile aynı bot; yapılandırılmamışsa sessizce devre dışı).
  • Kesinti saati Redis'te (pl24:auth:fail-since:<hesap>) → api+worker ve yeniden başlatmalar aynı başlangıcı görür, crash-loop saati sıfırlayamaz.
  • 60 dakikayı geçince tek uyarı (hesap kodu, süre, son hata, "banlanmış olabilir"), 6 saat tekrar bastırma; düzelince sessiz "🟢 düzeldi".
  • Devre kesici açıkken de saat işler — aksi halde hesap en ölü olduğu anda saat duruyordu.
  • Telegram kanalı canlı test edildi: mesaj ulaştı ✓

3. PSA + Volvo → P5, eksik kataloglar, ağaç sınıflandırması (dde6f6a)

Canlı gerçek: manufacturers API peugeot/citroen/citroenDs/psa_opel/psa_vauxhall'ı /p5psa, volvo/polestar'ı /p5volvo, subaru'yu /p5subaru veriyor. Eski Volvo P4 ucu 503 (ölü); eski PSA P4 ucu 200 ama verisi 2024-02-13'te donmuş (P5: 2026-09-07).

  • Servis tablosu: PSA + Volvo P5'e; yeni psa_opel_parts, psa_vauxhall_parts, subaru_parts, abarth/alfa/jeep/lancia. WMI: ZAR→alfa, ZLA→lancia, VXK→psa_opel, yeni JF1/JF2→subaru, 1C4/1J4→jeep.
  • Parser (canlı yanıt şekillerine göre):
    • normalizeLabel() — JS toLowerCase Türkçe "İ"yi i + birleşen nokta yapıyordu, bu yüzden PSA'nın "AKTARMA SİSTEMLERİ"/"GÖVDE TİPİ" etiketleri hiçbir zaman eşleşmiyor, şanzıman ve gövde sessizce null kalıyordu.
    • parsePsaModelYear() — "AM 2005" → 2005; "MAJÖR ENDEKS" yıl değil (Citroën'lerin 2001 görünme sebebi). damToModelYear() — PSA DAM alanından üretim yılı. PSA VIN'lerinde 10. karakter model yılı olmadığı için VIN fallback'i en sona alındı.
    • PSA alt grup kodu: record.id illusPath ve birden çok illüstrasyon paylaşıyor (canlı: 36 kayıt / 11 id) → benzersiz kod values.illustration.
    • Volvo BOM başlık satırı (id:"null_null") hayalet parça olarak geçiyordu → elendi. Adet: qty · coef (PSA) · unit (Volvo).
  • Ağaç sınıflandırması birleştirildi (pl24-tree.ts) — dört ayrı sezgisel birbiriyle çelişiyordu:
    • linkWid.includes("group") p5psa illusTable ve p5volvo/p5subaru illustrationsTable'ı kaçırıyordu → o seviye yaprak sanılıp parça olarak çekiliyor, sessiz boş panel veriyordu (2026-06 isPsaParent olayının aynısı).
    • case-sensitive includes("/bomdetails") camelCase /details/vin/bomDetails'i kaçırıyordu → bugün Mitsubishi %99,9, Fiat %80, Renault %70 bomDetails yaprağı 0 parça; bu düzeltme onları da kapsıyor.

Eski veri korundu: P4 kodu ve eski yollar dokunulmadı; mevcut 322 PSA + 36 Volvo aracı eski ağaçlarıyla çalışmaya devam eder. Yeniden decode + ölü kod sökümü ayrı iş (Faz 2).

Doğrulama

  • Yeni pl24-tree.spec.ts: 7 test, canlı VW/PSA/Volvo/Subaru wid+path çiftleriyle regresyon kilidi.
  • Etkilenen paketler: 208 test geçti, tsc + biome temiz.
  • Dev deploy 2495 temiz boot (Nest application successfully started); dev'de PL24 kapalı olduğu için canlı P5 doğrulaması prod'da yapılacak.

Merge sonrası beklenen

İlk Peugeot/Citroën decode'u /p5psa/extern/directAccess → scope → mainGroups → illus → bomDetails zincirini kullanır (2026-09 verisi, 2024 değil); Volvo decode'u yeniden çalışır; yeni decode başına PL24 isteği binlerden ~40'a iner.

🤖 Generated with Claude Code

Faz 1'in kalan üç parçası: reaktif drill freni, PL24 kesinti alarmı, **PSA + Volvo'nun P5'e taşınması**. Analiz `/home/s/ss/plv2.md`. ## 1. Reaktif drill freni (`02ec385`) Ban'ı süren hacim backfill değil, her yeni decode'da çalışan **tam ağaç drill**'iydi: `PL24_TR_DISABLED` main lane'i park etmişken bile yeni kategorilerin %100'ü aynı gün decode edilen araçlardan geldi (bir Passat 1.251, bir L200 2.323 kategori). - `PREFETCH_PL24_FAST_DEPTH=1` — reaktif lane yalnız üst gruplar + doğrudan çocukları. Derini kullanıcı o düğümü açınca veya bütçeli backfill'de gelir. - `PREFETCH_PL24_DELAY_MS=8000` ±%50 jitter — yalnız backfill; kullanıcı lane'i hiç yavaşlamaz. - Telemetride gerçek hesap etiketi (`activeAccount()`); prod'da ham `tr` yazıyordu. ## 2. PL24 girişi 1 saat başarısızsa Telegram uyarısı (`3cfa3d5`) İki hesap banı da **günler sonra**, DB satır sayılarından fark edildi (tr 07-24 → 08-18'de; de 09-04 → 09-16'da). Artık bir saat içinde haber gelir. - Global `TelegramService` (Süper Panel ile aynı bot; yapılandırılmamışsa sessizce devre dışı). - Kesinti saati Redis'te (`pl24:auth:fail-since:<hesap>`) → api+worker ve yeniden başlatmalar aynı başlangıcı görür, crash-loop saati sıfırlayamaz. - 60 dakikayı geçince **tek** uyarı (hesap kodu, süre, son hata, "banlanmış olabilir"), 6 saat tekrar bastırma; düzelince sessiz "🟢 düzeldi". - Devre kesici açıkken de saat işler — aksi halde hesap en ölü olduğu anda saat duruyordu. - Telegram kanalı canlı test edildi: mesaj ulaştı ✓ ## 3. PSA + Volvo → P5, eksik kataloglar, ağaç sınıflandırması (`dde6f6a`) **Canlı gerçek:** manufacturers API peugeot/citroen/citroenDs/psa_opel/psa_vauxhall'ı `/p5psa`, volvo/polestar'ı `/p5volvo`, subaru'yu `/p5subaru` veriyor. Eski Volvo P4 ucu **503** (ölü); eski PSA P4 ucu 200 ama verisi **2024-02-13'te donmuş** (P5: 2026-09-07). - **Servis tablosu**: PSA + Volvo P5'e; yeni `psa_opel_parts`, `psa_vauxhall_parts`, `subaru_parts`, `abarth/alfa/jeep/lancia`. WMI: ZAR→alfa, ZLA→lancia, VXK→psa_opel, yeni JF1/JF2→subaru, 1C4/1J4→jeep. - **Parser** (canlı yanıt şekillerine göre): - `normalizeLabel()` — JS `toLowerCase` Türkçe "İ"yi `i` + birleşen nokta yapıyordu, bu yüzden PSA'nın "AKTARMA SİSTEMLERİ"/"GÖVDE TİPİ" etiketleri **hiçbir zaman** eşleşmiyor, şanzıman ve gövde sessizce null kalıyordu. - `parsePsaModelYear()` — "AM 2005" → 2005; "MAJÖR ENDEKS" yıl değil (Citroën'lerin 2001 görünme sebebi). `damToModelYear()` — PSA DAM alanından üretim yılı. PSA VIN'lerinde 10. karakter model yılı olmadığı için VIN fallback'i en sona alındı. - PSA alt grup kodu: `record.id` illusPath ve birden çok illüstrasyon paylaşıyor (canlı: 36 kayıt / 11 id) → benzersiz kod `values.illustration`. - Volvo BOM başlık satırı (`id:"null_null"`) hayalet parça olarak geçiyordu → elendi. Adet: qty · coef (PSA) · unit (Volvo). - **Ağaç sınıflandırması birleştirildi** (`pl24-tree.ts`) — dört ayrı sezgisel birbiriyle çelişiyordu: - `linkWid.includes("group")` p5psa `illusTable` ve p5volvo/p5subaru `illustrationsTable`'ı kaçırıyordu → o seviye yaprak sanılıp parça olarak çekiliyor, sessiz boş panel veriyordu (2026-06 `isPsaParent` olayının aynısı). - case-sensitive `includes("/bomdetails")` camelCase `/details/vin/bomDetails`'i kaçırıyordu → **bugün Mitsubishi %99,9, Fiat %80, Renault %70 bomDetails yaprağı 0 parça**; bu düzeltme onları da kapsıyor. **Eski veri korundu:** P4 kodu ve eski yollar dokunulmadı; mevcut 322 PSA + 36 Volvo aracı eski ağaçlarıyla çalışmaya devam eder. Yeniden decode + ölü kod sökümü ayrı iş (Faz 2). ## Doğrulama - Yeni `pl24-tree.spec.ts`: 7 test, canlı VW/PSA/Volvo/Subaru wid+path çiftleriyle regresyon kilidi. - Etkilenen paketler: **208 test geçti**, `tsc` + `biome` temiz. - Dev deploy 2495 temiz boot (`Nest application successfully started`); dev'de PL24 kapalı olduğu için canlı P5 doğrulaması prod'da yapılacak. ## Merge sonrası beklenen İlk Peugeot/Citroën decode'u `/p5psa/extern/directAccess` → scope → mainGroups → illus → bomDetails zincirini kullanır (2026-09 verisi, 2024 değil); Volvo decode'u yeniden çalışır; yeni decode başına PL24 isteği binlerden ~40'a iner. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
root added 1 commit 2026-09-17 13:45:30 +03:00
perf(pl24): reaktif drill derinliğini sınırla, backfill'i jitter'lı aralıkla yavaşlat
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
02ec3856d5
Faz 1 / adım 2b (analiz: /home/s/ss/plv2.md, bulgu consumers_jobs-03).

SORUN: Ban'ı süren hacim backfill değil, her yeni decode'da çalışan fast-lane
TAM AĞAÇ drill'iydi. 2026-08-18→09-04 arasında (PL24_TR_DISABLED main lane'i
park etmişken) yeni kategorilerin %100'ü aynı gün decode edilen araçlardan
geldi: günde 3-17 decode → 1.4k-6.8k kategori (bir Passat 1.251, bir L200
2.323). Araç başına drill derinliği sınırsızdı ve PL24 istekleri arasında hiç
bekleme yoktu.

DEĞİŞİKLİK:
- `PREFETCH_PL24_FAST_DEPTH` (varsayılan 1): PL24 reaktif/fast lane yalnız üst
  gruplar + doğrudan çocuklarını gezer. Daha derini ya kullanıcı o düğümü
  açtığında (lazy) ya da bütçeli backfill lane'inde çekilir. Diğer kaynaklar ve
  PL24 main lane MAX_DEPTH kullanmaya devam eder. Fast lane'in derinlik tavanına
  ulaşması normal durum olduğu için log seviyesi warn değil log.
- `PREFETCH_PL24_DELAY_MS` (varsayılan 8000) + ±%50 jitter: PL24 BACKFILL
  işlerine per-job bekleme. Kullanıcının fast lane'i asla yavaşlatılmaz.
  Metronom gibi düzenli akış otomasyon imzasıdır; jitter onu kırar.
- Telemetri düzeltmesi: `proxy_logs`'a ham hesap etiketi ("tr") yerine gerçekte
  kullanılan hesap yazılıyor (PL24_TR_DISABLED altında "de"). Yeni
  `PL24AuthService.activeAccount()`.

Test: `__testables` ile maxDepthFor/jitter dışa açıldı + derinlik tavanı testi.
Etkilenen paketler: 198 test geçti. tsc + biome temiz.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
root added 1 commit 2026-09-17 13:53:17 +03:00
feat(pl24): PL24 girişi 1 saat başarısızsa Telegram uyarısı
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
3cfa3d588a
İki hesap banı da günler sonra, DB satır sayılarından fark edildi (tr 07-24 →
08-18'de, de 09-04 → 09-16'da). Üçüncüsünde bir saat içinde haber olsun.

- Yeni global `TelegramService` (aynı bot: TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID;
  yapılandırılmamışsa sessizce devre dışı, istek yolunu asla etkilemez).
- `PL24AuthService` kesinti saatini Redis'te tutuyor (`pl24:auth:fail-since:<hesap>`),
  böylece api+worker ve yeniden başlatmalar aynı başlangıcı görür — crash-loop
  saati sıfırlayamaz. Başarılı login saati siler.
- Kesinti 60 dakikayı geçince tek sefer uyarı (`pl24:auth:alerted:<hesap>` NX,
  6 saat) — hesap kodu, süre, son hata ve "banlanmış olabilir" notu ile.
  Düzelince sessiz "🟢 düzeldi" mesajı.
- Devre kesici açıkken de saat işler: kesici login denemesini bastırdığı için
  aksi halde hesap en ölü olduğu anda saat duruyordu.
- compose'a eksik env referansları: TELEGRAM_*, PL24_HTTP_DAILY_MAX,
  PL24_HTTP_USER_RESERVE, PREFETCH_PL24_FAST_DEPTH, PREFETCH_PL24_DELAY_MS
  (Coolify env'i ancak compose'da referanslıysa container'a ulaşıyor).

Test: 3 yeni test (1 saat dolmadan susar, dolunca tek sefer uyarır, düzelince
kurtarma mesajı + saat sıfırlanır). Redis stub'ı gerçek SET NX semantiğine
çekildi (alarm tekrarının bastırılması buna dayanıyor). 80 PL24 testi geçti.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
root added 1 commit 2026-09-17 14:00:32 +03:00
feat(pl24): PSA + Volvo'yu P5'e taşı, eksik katalogları ekle, ağaç sınıflandırmasını birleştir
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
dde6f6a15c
Faz 1 / adım 3-4 (analiz: /home/s/ss/plv2.md §3.3/§3.5, bulgular types_wmi-01/02/03/04/05,
p5core-02/03/04/05, psa-04/05/06, consumers_jobs-01/02).

CANLI GERÇEK (2026-09-16 keşfi): PL24 manufacturers API'si peugeot/citroen/
citroenDs/psa_opel/psa_vauxhall'ı `/p5psa`, volvo/polestar'ı `/p5volvo`,
subaru'yu `/p5subaru` olarak veriyor. Eski Volvo P4 ucu **503** döndürüyor
(ölü); eski PSA P4 ucu 200 döndürüyor ama verisi **2024-02-13'te donmuş**
(P5 upds 2026-09-07). Kodumuz her ikisini de P4'e yönlendiriyordu.

SERVİS TABLOSU:
- peugeot/citroen/citroenDs + YENİ psa_opel_parts, psa_vauxhall_parts → /p5psa
- volvo/polestar → /p5volvo · YENİ subaru_parts → /p5subaru
- YENİ abarth/alfa/jeep/lancia → /p5fiat
- WMI düzeltmeleri: ZAR→alfa, ZLA→lancia (fiatp'den), VXK→psa_opel (PSA-platform
  Corsa F/Mokka B), YENİ JF1/JF2→subaru, 1C4/1J4→jeep. SERVICE_TO_BRAND genişledi.
- P4 kodu ve eski yollar DOKUNULMADI: mevcut 322 PSA + 36 Volvo aracı eski
  ağaçlarıyla çalışmaya devam eder (veri göçü ayrı iş).

PARSER (canlı yanıt şekillerine göre):
- `normalizeLabel()`: JS toLowerCase Türkçe "İ"yi "i̇" (i + birleşen nokta)
  yapıyordu → PSA'nın "AKTARMA SİSTEMLERİ"/"GÖVDE TİPİ" etiketleri HİÇBİR ZAMAN
  eşleşmiyordu, şanzıman/gövde sessizce null kalıyordu. Artık tr-locale +
  diakritik temizliği + ı→i.
- `parsePsaModelYear()`: "AM 2005" → 2005; "MAJÖR ENDEKS" bir yıl DEĞİL (bu
  yüzden Citroën'ler 2001 görünüyordu). `damToModelYear()`: PSA DAM alanı
  (1976-01-01'den gün) → üretim yılı, model yılı Temmuz'da döner.
  PSA VIN'lerinde 10. karakter model yılı olmadığı için VIN fallback'i en sona.
- Alan listeleri: motor/engine (PSA "MOTOR", Volvo "Motor"), aktarma_sistemleri,
  mission, govde_tipi, kaporta_stili, türü→series.
- Alt grup kodu: PSA'da `record.id` = illusPath ve birden çok illüstrasyon
  paylaşıyor (canlı: 36 kayıt / 11 id) → benzersiz kod `values.illustration`.
- Parça filtresi: Volvo BOM'unun başlık satırı (id "null_null", link yok,
  unavailable) hayalet parça olarak geçiyordu → elendi.
- Adet: qty (VAG/Subaru) · coef (PSA) · unit (Volvo). Uygulanabilirlik:
  modelDescription · restriction.

AĞAÇ SINIFLANDIRMASI (yeni `pl24-tree.ts`, tek kaynak):
Dört ayrı sezgisel vardı ve birbiriyle çelişiyordu:
- `linkWid.includes("group")` → p5psa `illusTable`, p5volvo/p5subaru
  `illustrationsTable` yakalanmıyordu → o seviye yaprak sanılıp parça olarak
  çekiliyor, partno'suz kayıtlar 0 parçaya dönüşüyor, panel sessizce boş
  kalıyordu (2026-06 isPsaParent olayının aynısı).
- case-sensitive `includes("/bomdetails")` → p5psa/p5volvo'nun camelCase
  `/details/vin/bomDetails` yaprakları grup sanılıyor, parçaları hiç prefetch
  edilmiyordu (bugün Mitsubishi %99,9 / Fiat %80 / Renault %70 bomDetails
  yaprağı 0 parça — aynı kök neden).
Artık `isPl24LeafNode`/`isPl24GroupNode` tek kaynak; categories.service (2 yer),
catalog.service (2 yer) ve prefetch-worker aynı fonksiyonu kullanıyor.

Test: yeni `pl24-tree.spec.ts` (7 test, canlı VW/PSA/Volvo/Subaru wid+path
çiftleriyle regresyon kilidi). Etkilenen paketler: 208 test geçti. tsc + biome temiz.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
root changed title from perf(pl24): reaktif drill derinliğini sınırla, backfill'i jitter'lı aralıkla yavaşlat to feat(pl24): PSA+Volvo → P5, reaktif drill freni, 1 saatlik kesinti için Telegram uyarısı 2026-09-17 14:06:34 +03:00
root merged commit 4cae337241 into main 2026-09-17 14:26:27 +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#263