MHM Rentiva v4.27.4–v4.27.6: Migration Şerit Mimarisi, Lisans Slug İletimi, WordPress.org Cilası
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 !== $currentolduğ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:ignoreyorumları (denetim amaçlıerror_log()çağrıları, Plugin Check'in tanımayı reddettiğimhm_rentiva_öneki taşıyan hook'lar, kabul edilenmeta_query/post__not_inperformans takasları, çekirdek-kontrollü tablo adları$wpdb->prepare()üzerinden bağlanmış ledger sorguları). - Plugin Check'in önek konvansiyonuna uyacak şekilde
$pending_messagestemplate-scope değişkeni$mhm_rentiva_pending_messages'a yeniden adlandırıldı. readme.txtChangelog 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.jsonv4.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
| Kontrol | v4.27.4 | v4.27.5 | v4.27.6 |
|---|---|---|---|
| PHPUnit | 740/740, 2642 assertion, 6 skipped | değişmedi | değişmedi |
| PHPCS | 0 / 0 | 0 / 0 | 0 / 0 |
| Plugin Check ERROR | değişmedi | değişmedi | 1 → 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ı.
