Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
Faz 2 / veri göçü (analiz: /home/s/ss/plv2.md, bulgu psa-07 / consumers_jobs-05). SORUN: PSA ve Volvo upstream'de P5'e taşındı, ama daha önce decode edilmiş araçlar hâlâ eski yollara işaret ediyor: 324 PSA aracı (302'si bir kullanıcıya bağlı, 33.535 kategori) donmuş 2024-02-13 anlık görüntüsünden, 36 Volvo aracı (34'ü kullanıcılı, 10.195 kategori) ölü P4 ucundan besleniyor. `decodeVin`'in db_hit kısa devresi yüzünden kod düzeltmesi bu satırlara ASLA ulaşmıyor; ayrıca `categories` tablosundaki (vehicle_id, name, source) tekil indeksi yüzünden yeni ağaç eskisinin üzerine yazılamıyor. YAKLAŞIM: toplu yeniden decode fırtınası yerine **görüntülendikçe kendi kendini onarma**. Tek hayatta kalan hesaba 360 aracı arka arkaya sormak yerine, her araç ilk açılışında bir kez taşınır. - `isStalePl24Architecture()` (pl24-tree.ts): saklı catalogPath `/psa`|`/volvo` ama servis bugün P5 ise bayat. Hâlâ P4 olan markalar (Ford/Opel/Hyundai/Kia/ Nissan) ve zaten P5 olan kayıtlar dokunulmaz. - `CategoriesService.healStalePl24Architecture()`: cache'i atlayarak yeniden decode eder, eski ağacı SİLİP yenisini tek transaction'da yazar, raw_data'yı yeni catalogInfo ile günceller, `fully_fetched`'i düşürür ve `cat:tree` / `prefetch:complete` / `prefetch:noresult` anahtarlarını temizler. Bilinçli olarak temkinli: - Yeniden decode başarısız olur veya kategori dönmezse ESKİ ağaç korunur (bayat veri, veri yokluğundan iyidir). - Deneme `pl24:heal:<vehicleId>` ile günde bir kez (setNx) — çözülemeyen bir VIN her sayfa görüntülemesinde PL24'e gidemez. - Eski satırlar ancak yeni ağaç elde edildikten SONRA siliniyor (tekil indeks). - PL24 bütçesi/hız sınırı zaten üstte: her onarma ~2 upstream isteği. Test: `isStalePl24Architecture` 4 test (bayat tespiti, zaten-P5, hâlâ-P4 markalar, eksik bilgi) + onarma akışı 4 test (ağaç değişir, P5 kayda dokunulmaz, boş decode eski ağacı korur, günlük kilit). 221 test geçti; tsc + biome temiz. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>