Ana içeriğe geç

MHM Rentiva v4.27.4–v4.27.6: Migration Şerit Mimarisi, Lisans Slug İletimi, WordPress.org Cilası

· 4 dakikalık okuma
MaxHandMade
Maintainer

2026-04-23'te art arda yayımlanan üç patch sürümünü kapsayan retrospektif bir yazı: kritik migration mimarisi düzeltmesi (v4.27.4), ürün bazlı lisans bağlama uyumu (v4.27.5) ve WordPress.org gönderim hazırlığı (v4.27.6). v4.30.x güvenlik sprint'inden sonra geriye dönük olarak yayınlanıyor.

v4.27.4 — Migration Şerit Mimarisi Düzeltmesi (KRİTİK)

v4.27.1 (i18n locale leak) ve v4.27.2 (Settings Testing kirlenme) içinde gelen veri-temizlik migrasyonları güncellenmiş sitelerde aslında hiç çalışmıyordu — v4.27.0 hazırlığı sırasında temizlenmiş bir gerileme migration tetikleyicisini sessizce bozmuştu.

Kök neden

plugins_loaded migration callback'i tek bir kısa devre kullanıyordu:

if ( $stored_version === MHM_RENTIVA_VERSION ) {
return; // TÜM migrasyonları atla
}

Ancak mhm_rentiva_single_site_activation() (her ZIP-replace güncelleme yolunda plugins_loaded'dan ÖNCE çalışır) yeni sürümü zaten option'a damgalamış oluyordu. plugins_loaded çalıştığında $stored === $current zaten true → tüm flag-kapılı temizlikler sonsuza dek atlanıyordu.

mhmrentiva.com canlıda kanıt: Brand Name 1 olarak görünüyordu, döviz istatistikleri 0,00 ₺ yerine 0,00 1 render oluyordu (çünkü v4.27.2 kirlenme migrasyonu hiçbir zaman çalışmadı).

Fix — iki-şerit mimarisi

plugins_loaded callback'i iki bağımsız şeride bölündü:

  • Şerit A (şema drift, sürüm-kapılı): sadece $stored !== $current olduğunda çalışır. Aynı sürümün birden fazla yüklemesi arası idempotent.
  • Şerit B (bayrak-kapılı veri temizlikleri): her istekte çalışır, ancak her migrasyonun kendi mhm_rentiva_<flag> opsiyonu vardır ve başarılı çalışma sonrası flip eder. Gerçekten idempotent.

Her iki şerit de kendi hata yalıtımına sahiptir; B'deki bir hata A'yı engellemez ya da tersine.

Test kapsamı

tests/Migration/MigrationLaneIndependenceTest.php — bölünmeyi koruyan 3 yeni test, 8 assertion.

Ampirik doğrulama

Deploy sonrası mhmrentiva.com'un Chrome DevTools MCP ile tarayıcı turu: 0 yinelenen uyarı, istatistikler 0,00 ₺ (U+20BA), Brand Name "MHM Rentiva". 11 admin sekmesinde manuel tek seferlik Reset to Defaults ile migrasyonların çalışmadığı dönemden kalan artık state temizlendi.

v4.27.5 — Lisans İstemcisi Ürün-Slug İletimi

mhm-license-server v1.8.0+ ile uyumlu — bu sürüm ürün-bazlı lisans bağlama getirdi. v4.27.5 öncesinde bir müşteri ucuz MHM Currency Switcher Aylık anahtarı satın alıp Rentiva Pro'yu aktive etmek için kullanabiliyordu — sunucunun lisansın belirli bir ürün için verildiğini doğrulayacak yolu yoktu.

Değişiklik

LicenseManager::activate() ve validate() istek gövdeleri artık product_slug => 'mhm-rentiva' içeriyor. Sunucu bunu lisans satırının saklı slug'ı ile karşılaştırır ve uyuşmazlıkları product_mismatch hatasıyla reddeder.

Bonus düzeltme

Ek Hizmetler admin sayfası iki Dokümantasyon düğmesi gösteriyordu — küresel all_admin_notices docs hook'u + sayfanın kendi başlığı, ikisi de yangınlandı. Hook artık vehicle_addon ekranını atlıyor; sayfa başlığının düğmesi tek kaynak.

v4.27.6 — WordPress.org Gönderim Cilası

WordPress.org eklenti dizini gönderimi için Plugin Check (PCP) uyumu: 1 ERROR + 115 WARNING → 0 ERROR + 61 WARNING. Kalan uyarılar Plugin Check'in projenin phpcs.xml önek yapılandırmasını okumamasından kaynaklanan yanlış pozitiflerin tümü.

Somut düzeltmeler

  • Demo görsel içe aktarıcısında unlink()wp_delete_file() (tek gerçek ERROR).
  • Projenin kuralları zaten dışlayan uyarılar için gerekçeli phpcs:ignore yorumları (denetim amaçlı error_log() çağrıları, Plugin Check'in tanımayı reddettiği mhm_rentiva_ öneki taşıyan hook'lar, kabul edilen meta_query / post__not_in performans takasları, çekirdek-kontrollü tablo adları $wpdb->prepare() üzerinden bağlanmış ledger sorguları).
  • Plugin Check'in önek konvansiyonuna uyacak şekilde $pending_messages template-scope değişkeni $mhm_rentiva_pending_messages'a yeniden adlandırıldı.
  • readme.txt Changelog bölümü WP.org'un 5000 karakter sınırına uyacak şekilde kısaltıldı; eski sürümler GitHub'a bağlandı.
  • changelog-tr.json v4.27.5 backfill + yeni v4.27.6 girişi.

Fonksiyonel değişiklik yok

740/740 PHPUnit hâlâ geçiyor. PHPCS temiz. Eklenti aynı şekilde davranıyor — sadece Plugin Check gürültüsü azaltıldı.

✅ Üçü için doğrulama

Kontrolv4.27.4v4.27.5v4.27.6
PHPUnit740/740, 2642 assertion, 6 skippeddeğişmedideğişmedi
PHPCS0 / 00 / 00 / 0
Plugin Check ERRORdeğişmedideğişmedi1 → 0

🎓 Yakalanan dersler (hafıza)

  • feedback_migration_lane_architecture.md — activation hook'ları sürümü plugins_loaded'dan önce damgaladığında, sürüm kapısı tüm bayrak-kapılı migrasyonları kırar. Sürüm-drift ve veri-temizleme şeritlerini her zaman ayır.
  • feedback_empirical_dom_verification.md — Chrome DevTools MCP ile DOM düzeyinde doğrulama, %100 PHPUnit + 0 PHPCS'in mutlu mutlu yayınlayacağı runtime DB-state bug'larını yakalamanın tek yolu.

🔜 Sıradaki

v4.27.x şemsiyesi burada kapandı. Sıradaki büyük v4.28.0 idi (Popüler Rotalar) — ancak çapraz ürün saldırı yüzeyi güvenlik denetimi yol haritasını Lisans Güvenlik Sertleştirme sprint'ine (v4.30.x) yeniden öncelikledi, 2026-04-24/25'te yayımlandı.


GitHub Sürümleri: v4.27.4 · v4.27.5 · v4.27.6