feat(pl24): bayat P4 mimarisindeki araçları görüntülendikçe P5'e taşı #265

Open
root wants to merge 1 commits from dev into main
Owner

Faz 2'nin ilk parçası: veri göçü. Analiz /home/s/ss/plv2.md, bulgular psa-07 / consumers_jobs-05.

Sorun

PSA ve Volvo upstream'de P5'e taşındı (PR #263), ama daha önce decode edilmiş araçlar hâlâ eski yollara işaret ediyor:

küme araç kullanıcıya bağlı kategori
PSA (/psa/… yollu) 324 302 33.535
Volvo (/volvo/… yollu) 36 34 10.195

Yani 302 kullanıcı aracı donmuş 2024-02-13 anlık görüntüsünden, 34'ü ölü P4 ucundan besleniyor. İki engel var: decodeVin'in db_hit kısa devresi yüzünden kod düzeltmesi bu satırlara asla ulaşmıyor, ve categories tablosundaki (vehicle_id, name, source) tekil indeksi yüzünden yeni ağaç eskisinin üzerine yazılamıyor.

Yaklaşım: toplu fırtına değil, görüntülendikçe onarma

Tek hayatta kalan hesaba 360 aracı arka arkaya sormak, ban'ları doğuran desenin ta kendisi. Bunun yerine her araç ilk açılışında bir kez taşınıyor:

  • isStalePl24Architecture() — 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ı silip yenisini tek transaction'da yazar, raw_data'yı yeni catalogInfo ile günceller, fully_fetched'i düşürür, cat:tree / prefetch:complete / prefetch:noresult anahtarlarını temizler.

Bilinçli temkinlilik

  • Yeniden decode başarısız olur veya kategori dönmezse eski 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).
  • Üstte PL24 günlük bütçesi + hız sınırı zaten var; her onarma ~2 upstream isteği.

Doğrulama

  • isStalePl24Architecture: 4 test (bayat tespiti, zaten-P5, hâlâ-P4 markalar, eksik bilgi → güvenli taraf).
  • Onarma akışı: 4 test (ağaç gerçekten değişiyor, P5 kayda dokunulmuyor, boş decode eski ağacı koruyor, günlük kilit çalışıyor).
  • 221 test geçti, tsc + biome temiz.

Merge sonrası beklenen

Bir kullanıcı Peugeot/Citroën/Volvo aracını açtığında log'da [pl24-heal] <VIN> migrated to /p5psa: 120 stale → N fresh categories görünür ve o araç kalıcı olarak güncel katalog verisine geçer. Göç, kullanıcı trafiğine yayıldığı için upstream'e ani yük binmez.

🤖 Generated with Claude Code

Faz 2'nin ilk parçası: veri göçü. Analiz `/home/s/ss/plv2.md`, bulgular psa-07 / consumers_jobs-05. ## Sorun PSA ve Volvo upstream'de P5'e taşındı (PR #263), ama **daha önce decode edilmiş araçlar hâlâ eski yollara işaret ediyor**: | küme | araç | kullanıcıya bağlı | kategori | |---|---|---|---| | PSA (`/psa/…` yollu) | 324 | 302 | 33.535 | | Volvo (`/volvo/…` yollu) | 36 | 34 | 10.195 | Yani 302 kullanıcı aracı donmuş **2024-02-13** anlık görüntüsünden, 34'ü **ölü** P4 ucundan besleniyor. İki engel var: `decodeVin`'in `db_hit` kısa devresi yüzünden kod düzeltmesi bu satırlara asla ulaşmıyor, ve `categories` tablosundaki `(vehicle_id, name, source)` tekil indeksi yüzünden yeni ağaç eskisinin üzerine yazılamıyor. ## Yaklaşım: toplu fırtına değil, görüntülendikçe onarma Tek hayatta kalan hesaba 360 aracı arka arkaya sormak, ban'ları doğuran desenin ta kendisi. Bunun yerine her araç **ilk açılışında bir kez** taşınıyor: - `isStalePl24Architecture()` — 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ı silip yenisini **tek transaction'da** yazar, `raw_data`'yı yeni `catalogInfo` ile günceller, `fully_fetched`'i düşürür, `cat:tree` / `prefetch:complete` / `prefetch:noresult` anahtarlarını temizler. ## Bilinçli temkinlilik - Yeniden decode başarısız olur veya kategori dönmezse **eski 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). - Üstte PL24 günlük bütçesi + hız sınırı zaten var; her onarma ~2 upstream isteği. ## Doğrulama - `isStalePl24Architecture`: 4 test (bayat tespiti, zaten-P5, hâlâ-P4 markalar, eksik bilgi → güvenli taraf). - Onarma akışı: 4 test (ağaç gerçekten değişiyor, P5 kayda dokunulmuyor, boş decode eski ağacı koruyor, günlük kilit çalışıyor). - **221 test geçti**, `tsc` + `biome` temiz. ## Merge sonrası beklenen Bir kullanıcı Peugeot/Citroën/Volvo aracını açtığında log'da `[pl24-heal] <VIN> migrated to /p5psa: 120 stale → N fresh categories` görünür ve o araç kalıcı olarak güncel katalog verisine geçer. Göç, kullanıcı trafiğine yayıldığı için upstream'e ani yük binmez. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
root added 1 commit 2026-09-17 16:53:46 +03:00
feat(pl24): bayat P4 mimarisindeki araçları görüntülendikçe P5'e taşı
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
ddc223f745
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>
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin dev:dev
git checkout dev
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#265