Ana içeriğe geç

Rentiva v4.38.1 — Audit-driven yama

· 3 dakikalık okuma
MaxHandMade
Maintainer

v4.38.0'ın üzerine küçük ama önemli bir yama. Vendor Directory yayınından sonra v4.37.0 → v4.38.0 zincirine /wp-conductor post-merge audit'i çalıştırdık — iki gerçek bulgu ve yeni test kapsamının ortaya çıkardığı uyuyan bir üretim defekti çıktı. v4.38.1 hepsini kapatıyor; altı release'lik deploy paketini temiz şekilde göndermek için.

Ne değişti

🔴 YÜKSEK — Admin slug düzenlemede çakışma

WordPress admin'den bir bayinin profil slug'ını düzenlediğinizde, save yolu slug'ı VendorSlugManager::change_slug() üzerinden geçirmek yerine doğrudan update_user_meta() ile yazıyordu. v4.37.0 Phase 1.3'ten kalan bir // later TODO'su.

Pratik etki: İki admin (veya admin + kendi profilini düzenleyen bayi) aynı raw slug'ı farklı bayilere verirse ikisi de başarılı olur. VendorProfileProvider::lookup_by_slug() ilk eşleşeni döndürür → ikinci bayinin public profil URL'si sessizce yanlış bayiyi render ederdi — ücretli Pro müşterileri için, bir marketplace'te, kalıcı olarak.

Save yolu artık change_slug() üzerinden geçiyor; sanitize + çakışma suffix'i (-2, -3...) + history sanitize'i tek atomik adımda yapıyor.

🟡 ORTA — Directory araç sayısı ile Profile tutarsızlığı

VendorDirectoryProvider::count_active_vehicles_for() _mhm_vehicle_lifecycle_status'ten bağımsız olarak her publish aracı sayıyordu. Profile tarafındaki collect_vehicles() ise lifecycle='active' filtresi uyguluyor. Sonuç: 2 aktif + 3 paused araçlı bir bayi dizin kartında "5 araç" gösterirken profilde "2 araç" görünüyordu. Marketplace veri tutarsızlığı = güven kaybı.

Count sorgusuna aynı meta_query lifecycle filtresi eklendi.

🐛 Uyuyan üretim defekti — pagination strict-type TypeError

Bu yamadaki yeni kombinasyon testleri v4.38.0'ın mevcut testlerinin hiç çalıştırmadığı bir şeyi yakaladı: dizin pagination partial'ı str_replace()'in birinci argümanına $big = 999999999 (int) geçiyordu. PHP 8.1+ strict types TypeError fırlatır.

Mevcut testler hiçbir zaman per_page=12'yi aşacak kadar bayi seed'lemiyordu, bu yüzden defekt uyuyordu. PHP 8.x üretim siteleri 13. aktif bayi sonuç setini ilk sayfayı geçtiği anda dizin sayfasını çökertirdi. Açıkça (string)'e cast yapıldı — WP core'un kendi callers'ında kullandığı pattern'le aynı.

Bu, v4.38.0'ı tek başına yayınlamamanın en güçlü argümanı.

📌 Phase 5/6/7 paper-cut'ları

v4.38.0 audit'inin önceden ertelenmiş olarak belgelediği üç küçük parite düzeltmesi:

  • VendorDirectorySeo register guard — bir SEO eklentisi (Yoast / Rank Math / AIOSEO / SEOPress / The SEO Framework / SmartCrawl) sözleşmeyi sahipleniyorsa veya mhm_rentiva_vendor_directory_seo_disable filtresi true ise erken dönüş. VendorProfileSeo'nun register guard'ı ile parite. Ayrıca build_meta_description($default, $vendor_count, $vehicle_count) için 3-arg filter imzasını DocBlock'la belgeledim.
  • VendorDirectoryCacheInvalidator — iki parite guard'ı: user_meta hook'larında !is_string($meta_key) kısa devre (meta_key'in array geldiği nadir WP edge case'i — VendorProfileCacheInvalidator'da zaten vardı) ve lifecycle hook'unda $new_status === $old_status no-op erken dönüşü (aynı sınıftaki on_comment_status no-op'u ile parite). 30dk dizin önbelleğini boşa düşüren gereksiz flush'ları önler.
  • Pagination/sort kombinasyon testleri + .current scope — pagination overflow, city filtresi ile alpha sort ve sayfa 2 paged query string'i kapsayan üç yeni test. .current pagination class'ının .mhm-vendor-directory-pagination scope'u içinde kaldığını doğrular; tema .current kuralları artık stil hijack edemez.

Pipeline gate'leri

  • PHPUnit: 1044 → 1058 test, 3289 → 3320 assertion, 7 atlanan, 0 fail
  • PHPCS: 0 hata (tüm proje, CI paritesi)
  • Bağımsız kod incelemesi: merge'e hazır, KRİTİK/YÜKSEK bulgu yok

Deploy notu

v4.38.1'i v4.37.0 + v4.37.1 + v4.37.2 + v4.37.3 + v4.38.0 zinciriyle birlikte yayınlayın — tek mhmrentiva.com deploy'unda altı release. Ayrı bir upgrade yolu gerekmez.