== Changelog == = 1.3.38 - 2026-06-22 = * Fixed: Subscription renewal payment rules now fire for all payment gateways, including token-based gateways (e.g. CreditGuard) that call `update_status()` directly instead of `payment_complete()` * Fixed: Renewal payment events now appear in the renewal order's Insight Dashboard timeline instead of floating outside all timelines * Fixed: Renewal rules now fire for every subscription in a grouped renewal order, not just the first * Fixed: Zero-amount (free tier) subscription renewals now trigger renewal rules correctly * Fixed: Subscription status-change events no longer throw due to missing idempotency key in `synthesize_subscription_event()` * Improved: Concurrent renewal event processing is protected by a distributed cache lock to prevent double-execution = 1.3.37 - 2026-06-04 = * Fixed: Insight Dashboard timeline now surfaces payment events and rule execution labels correctly * Fixed: Process group status correctly shows the highest-priority outcome — error takes precedence over success and info * Fixed: Timeline height cutoff and "Unknown Rule" labels resolved in process group view = 1.3.36 - 2026-05-31 = * Dev: changelog.txt now included in release zip = 1.3.35 - 2026-05-29 = * Fixed: Insight Dashboard showed raw dot-notation strings (e.g. `core.log.event.order_completed`) instead of English labels — `load_plugin_textdomain()` was never called so the bundled translation file was never loaded * Fixed: `RefundDeletionDiagnostics::build_summary()` passed translation keys directly to `sprintf()` without `__()`, so refund and deletion event summaries were never translated regardless of locale * Fixed: 6 missing translation entries for `_simple` and `order_refunded` event keys added to `en_US.po`; `.mo` recompiled = 1.3.34 - 2026-05-29 = * Fixed: Insight Dashboard loading error caused by Alpine.js defer timing race condition = 1.3.33 - 2026-05-29 = * Fixed: HPOS order meta lookups now use `wc_get_orders()` instead of raw SQL with wrong table and column names — all three lookup methods silently returned empty results on every HPOS store * Fixed: Removed phantom `find_order_by_meta_hpos_optimized()` call that threw a fatal Error (caught silently) on every transaction ID lookup for HPOS stores * Fixed: Direct `get_post_meta()` calls on order and refund IDs in event processing and refund diagnostics replaced with WC CRUD API — correct behaviour for full HPOS mode without compatibility mode = 1.3.31 - 2026-05-28 = * Added: Add Order Note action is now available in the free plugin = 1.3.30 - 2026-05-28 = * Improved: Automated WP/WC compatibility matrix testing integrated into the release pipeline = 1.3.29 - 2026-05-26 = * Added: Dedicated Settings page — configure log retention, auto-refresh interval, display theme, and per-page log count from one place * Added: Custom Rules List page — search, status filter, bulk activate/deactivate/trash, and per-rule execution stats replace the native WordPress list table * Added: Component icons — all rule builder triggers, conditions, and actions now display an icon in the picker and on the canvas * Improved: Full admin UI overhaul — new design system with consistent spacing, typography, color tokens, and dark mode across all admin pages * Improved: Insight Dashboard — bookmarkable filter URLs, filter pane density, improved dark mode compatibility * Improved: Rule Builder — component icon rendering, responsive outer layout, breadcrumb wrapping * Improved: Diagnostics page — verbose category sections, left-aligned output, restored detail pane content * Fixed: OrderMetaManager cache key queries referenced a non-existent column in wp_options; replaced with md5-based in-memory keys * Fixed: Diagnostics page debug console.log calls no longer appear in production browser consoles = 1.3.28 - 2026-05-18 = * Added: Custom webhook connections in Insight Dashboard — configure a slug-based webhook URL with none, bearer token, or HMAC-SHA256 authentication * Added: Discount total source option for the Order Amount condition — rules can now compare the order's discount total against a threshold * Added: Site URL change detection — surfaces an admin notice when the site URL changes, with an Acknowledge button to dismiss * Fixed: Timeline event ordering, parent-child hierarchy, and parent_id writing — resolves race conditions and ensures rule execution events nest correctly under their triggering business events = 1.3.27 - 2026-03-26 = * Improved: Rule Builder mobile responsivity — fixed broken responsive breakpoint, enlarged touch targets on mobile, and improved layout on narrow screens * Improved: Rule Builder condition component summaries are now more descriptive and extensible * Improved: Insight Dashboard mobile responsivity and several UI improvements * Fixed: Gateway adapter validation no longer blocked by missing log method = 1.3.26 - 2026-03-16 = * Fixed: Critical error on page load caused by database safety check running even when no update was needed = 1.3.25 - 2026-03-15 = * Fixed: Insight dashboard filter pane display issues * Improved: Log event source attribution in the Insights dashboard * Improved: Translations and i18n string coverage = 1.3.24 - 2026-03-14 = * Improved: Initial release on WordPress.org = 1.3.23 - 2026-02-24 = * Improved: Initial release on WordPress.org