fix(pl24): model listesi giriş noktasını catmeta'dan çöz (Volvo browse) #269

Merged
root merged 2 commits from dev into main 2026-09-20 10:18:51 +03:00
Owner

PR #268 prod'a alındıktan sonraki doğrulamada çıktı. Browse onarması Peugeot'yu taşıdı ama Volvo'da korumalı dala düştü.

[pl24-browse-heal] peugeot_parts: 64 stale row(s) → 39 fresh model(s)
[pl24-browse-heal] volvo_parts: upstream returned no models — keeping 59 stale row(s)

Kök neden

BACKEND_MODEL_PATH tablosunda p5volvo yok. Yedek keşif yedi bilinen yolu sırayla deniyor, ama Volvo'nunki /extern/vehicles/models — yani çoğul vehicles — ve bu listede yok. Sonuç: Volvo/Polestar browse sıfır model tohumluyor, emekli P4 listesini sunmaya devam ediyor.

Aynı keşif p5psa için de her çağrıda beş boşa probe isteği harcıyordu (sonunda doğru yolu buluyordu, ama paylaşılan günlük bütçeden).

Otoritatif kaynak

Her P5 backend'i kendi /extern/catmeta yanıtında giriş noktasını söylüyor. Canlı doğrulandı (2026-09-20):

backend data.catalogEntryPoint.path sonuç
p5volvo /p5volvo/extern/vehicles/models 60 model (XC90, V40…)
p5psa /p5psa/extern/vehicle/catalogs 39 model

Değişiklik

  • p5psa ve p5volvo BACKEND_MODEL_PATH'e sabitlendi. Sıfır ek istek.
  • resolveModelPathFromCatmeta(): haritada olmayan bir backend artık yedi kör probe yerine tek otoritatif catmeta çağrısı yapıyor. Sonuç backend başına 30 gün cache'leniyor (olumsuz sonuç dahil), yani backend ömrü boyunca tek istek. PL24 bir ucu taşırsa kendiliğinden düzeliyor; hata durumunda null dönüp eski yedeğe düşüyor.
  • Ayrıca normalizeLabel'daki yanıltıcı karakter sınıfı ([\u0300-\u036f]\p{M}) temizlendi; gerçek Volvo/PSA/Subaru yakalamalarıyla çıktı birebir aynı.

Test

8 yeni test (pl24-model-path.spec.ts): catmeta yolunun göreli hale indirgenmesi, cache'ten okuma, olumsuz cache, HTTP hatası, ağ hatası, /extern/ ile başlamayan yolun reddi. api paketi 638 test geçiyor, tsc ve biome temiz.

Deploy sonrası

Volvo'nun günlük onarma kilidi (pl24:browse-heal:Volvo) düşürülecek ki 59 bayat satır ertesi günü beklemeden taşınsın.

🤖 Generated with Claude Code

PR #268 prod'a alındıktan sonraki doğrulamada çıktı. Browse onarması Peugeot'yu taşıdı ama Volvo'da korumalı dala düştü. ``` [pl24-browse-heal] peugeot_parts: 64 stale row(s) → 39 fresh model(s) [pl24-browse-heal] volvo_parts: upstream returned no models — keeping 59 stale row(s) ``` ## Kök neden `BACKEND_MODEL_PATH` tablosunda `p5volvo` yok. Yedek keşif yedi bilinen yolu sırayla deniyor, ama Volvo'nunki `/extern/vehicles/models` — yani **çoğul** `vehicles` — ve bu listede yok. Sonuç: Volvo/Polestar browse sıfır model tohumluyor, emekli P4 listesini sunmaya devam ediyor. Aynı keşif `p5psa` için de her çağrıda beş boşa probe isteği harcıyordu (sonunda doğru yolu buluyordu, ama paylaşılan günlük bütçeden). ## Otoritatif kaynak Her P5 backend'i kendi `/extern/catmeta` yanıtında giriş noktasını söylüyor. Canlı doğrulandı (2026-09-20): | backend | `data.catalogEntryPoint.path` | sonuç | |---|---|---| | p5volvo | `/p5volvo/extern/vehicles/models` | 60 model (XC90, V40…) | | p5psa | `/p5psa/extern/vehicle/catalogs` | 39 model | ## Değişiklik - `p5psa` ve `p5volvo` `BACKEND_MODEL_PATH`'e sabitlendi. Sıfır ek istek. - `resolveModelPathFromCatmeta()`: haritada olmayan bir backend artık yedi kör probe yerine tek otoritatif catmeta çağrısı yapıyor. Sonuç backend başına 30 gün cache'leniyor (olumsuz sonuç dahil), yani backend ömrü boyunca tek istek. PL24 bir ucu taşırsa kendiliğinden düzeliyor; hata durumunda `null` dönüp eski yedeğe düşüyor. - Ayrıca `normalizeLabel`'daki yanıltıcı karakter sınıfı (`[\u0300-\u036f]` → `\p{M}`) temizlendi; gerçek Volvo/PSA/Subaru yakalamalarıyla çıktı birebir aynı. ## Test 8 yeni test (`pl24-model-path.spec.ts`): catmeta yolunun göreli hale indirgenmesi, cache'ten okuma, olumsuz cache, HTTP hatası, ağ hatası, `/extern/` ile başlamayan yolun reddi. api paketi **638 test geçiyor**, tsc ve biome temiz. ## Deploy sonrası Volvo'nun günlük onarma kilidi (`pl24:browse-heal:Volvo`) düşürülecek ki 59 bayat satır ertesi günü beklemeden taşınsın. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
root added 2 commits 2026-09-20 09:32:44 +03:00
Prod'da browse onarması Peugeot'yu taşıdı (64 bayat satır → 39 güncel
model) ama Volvo'da "upstream returned no models" ile korumalı dala
düştü. Sebep: `BACKEND_MODEL_PATH`'te p5volvo yok ve yedek keşif yedi
bilinen yolu deniyor — Volvo'nunki `/extern/vehicles/models`, yani
ÇOĞUL "vehicles", listede yok. Volvo/Polestar browse bu yüzden sıfır
model tohumluyor ve emekli P4 listesini sunmaya devam ediyordu.

Otoritatif kaynak her P5 backend'inin kendi `/extern/catmeta`
yanıtındaki `data.catalogEntryPoint.path`. Canlı doğrulandı:
  p5volvo → /p5volvo/extern/vehicles/models  (60 model: XC90, V40…)
  p5psa   → /p5psa/extern/vehicle/catalogs

İki değişiklik:
- p5psa ve p5volvo `BACKEND_MODEL_PATH`'e sabitlendi (sıfır ek istek).
  p5psa zaten çalışıyordu ama her çağrıda beş boşa probe isteğiyle
  yeniden keşfediliyordu.
- `resolveModelPathFromCatmeta()`: haritada olmayan backend artık yedi
  kör probe yerine tek otoritatif catmeta çağrısı yapıyor. Sonuç
  backend başına 30 gün cache'leniyor (olumsuz sonuç dahil), yani
  backend ömrü boyunca tek istek; PL24 bir ucu taşırsa kendiliğinden
  düzeliyor. Hata durumunda null → eski yedeğe düşer.

8 yeni test. api 638 test geçiyor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
style(pl24): normalizeLabel'daki yanıltıcı karakter sınıfını düzelt
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
bd9f4bd3f8
`[̀-ͯ]` bir aralık sınıfı; biome bunu "bir taban karakter +
birleştirici karakter çiftini de eşleyebilir" diye işaretliyordu.
NFD zaten her aksanı kendi işaretine ayırdığı için doğrudan `\p{M}`
(tüm birleştirici işaretler) hem doğru hem daha geniş.

Gerçek Volvo/PSA/Subaru yakalamalarıyla çıktı birebir aynı kaldı.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
root merged commit e8ffa6a5db into main 2026-09-20 10:18:51 +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#269