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.
Bu yazı, 6.0.0'dan önce çıkmış bir sürümün kaydıdır; 6.0.0 eklentinin içerik tiplerini, taksonomilerini, ayarlarını, meta anahtarlarını ve hook'larını yeniden adlandırdı. Aşağıdaki tanımlayıcılar o sürümlerin gerçekten kullandığı adlardır ve bilerek öyle bırakılmıştır. Güncel adlar ve dönüşüm tablosu için 6.0.7 sürüm yazısına bakın.
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ı.
GitHub Sürümleri: v4.27.4 · v4.27.5 · v4.27.6
