feat(pl24): bayat P4 mimarisindeki araçları görüntülendikçe P5'e taşı
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
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>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { isPl24GroupNode, isPl24LeafNode } from "./pl24-tree";
|
||||
import { isPl24GroupNode, isPl24LeafNode, isStalePl24Architecture } from "./pl24-tree";
|
||||
|
||||
// Canlı P5 yanıtlarından (2026-09-16 keşfi, plv2-artefakt/) alınan gerçek
|
||||
// wid + path çiftleri. Bu dosya "0 parça" sınıfı hatanın regresyon kilidi.
|
||||
@@ -110,3 +110,30 @@ describe("isPl24LeafNode — canlı P5 şekilleri", () => {
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("isStalePl24Architecture — P4→P5 göç tespiti", () => {
|
||||
it("eski PSA/Volvo yolu + artık P5 olan servis → bayat", () => {
|
||||
expect(
|
||||
isStalePl24Architecture({ catalogPath: "/psa/peugeot_parts", currentApiPath: "/p5psa" }),
|
||||
).toBe(true);
|
||||
expect(isStalePl24Architecture({ catalogPath: "/volvo", currentApiPath: "/p5volvo" })).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
it("zaten P5 kaydı bayat değil", () => {
|
||||
expect(isStalePl24Architecture({ catalogPath: "/p5psa", currentApiPath: "/p5psa" })).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
|
||||
it("hâlâ P4 olan markalar (Ford/Opel/Hyundai) dokunulmaz", () => {
|
||||
expect(isStalePl24Architecture({ catalogPath: "/ford", currentApiPath: "/ford" })).toBe(false);
|
||||
expect(isStalePl24Architecture({ catalogPath: "/opel", currentApiPath: "/opel" })).toBe(false);
|
||||
});
|
||||
|
||||
it("eksik bilgi → bayat sayma (güvenli taraf)", () => {
|
||||
expect(isStalePl24Architecture({ catalogPath: null, currentApiPath: "/p5psa" })).toBe(false);
|
||||
expect(isStalePl24Architecture({ catalogPath: "/psa/x", currentApiPath: null })).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user