HOME / CHANGELOG
Changelog
Every release, honestly documented — including the bugs we caught in real environments and how we fixed them.
Fixed
- Export report blank page (release blocker) — the printable report was JSON-encoded by the REST server (leading quote, escaped
</style>), leaving an unterminated style element and a blank browser page. Reports now stream verbatim HTML with correctContent-TypeandContent-Dispositionheaders; unknown scan ids answer 404 instead of silently serving the latest report. - Mobile/tablet admin content slid under the sidebars — the app shell cancelled WordPress’s legacy admin padding that modern releases zero out, overlapping the native admin menu on desktop and clipping the mobile toggle. The shell now relies on core offsets, and a breakpoint listener closes/restores the navigation drawer on rotation or resize instead of leaving it floating without its veil.
- Unhandled exceptions could surface as a silent empty 200 page — when no platform exception handler exists to delegate to, the observer now emits the standard 500 failure signal before returning (verified live on PHP 8.5/FPM).
- Plugin Check remediation pass: escaped error titles, cast route arguments,
wp_rand()everywhere, writable-check hardening, corrected the “Tested up to” header.
Changed
- Developer metadata consolidated under Backendly (backend.ly) across the plugin header, the Safe Mode drop-in and package metadata.
Fixed
- Exception handler could loop forever on platform re-throw (critical) — the observer re-entered itself ~18,000 times on PHP 8.5 until the stack limit killed the request. The handler now delegates at most once per request and returns cleanly when there is nothing to delegate to.
- Uninstall silently did nothing on real sites (critical) — the uninstall guard relied on a constant WordPress does not define during uninstall, leaving tables, options and the drop-in behind. The script now follows the core uninstall contract and purges rate-limit options and transients as well.
- Emergency recovery could be denied by earlier failed attempts (high) — the drop-in counted every token validation attempt against the per-IP limiter, including successful ones, and could refuse valid recovery links after repeated attempts — notably behind reverse proxies where clients share an address. Policy reworked: only failures count, valid tokens always pass and clear the counter.
- Multisite: capabilities are now provisioned on all sites at network activation and for sites created later; multisite access is restricted to super admins, with per-site admin access correctly denied.
Fixed
- Theme fatals surfaced as empty 200 responses on some hosting stacks — the failure signal was lost when PHP stopped execution after a returning handler. The observer now guarantees the 500 signal path.
- Multisite network activation now provisions management capability on every site in the network, including sites created after activation.
- Real-environment QA pass: 14 defects found and fixed across recovery, REST, export and admin shells; 76 automated scenarios green.
Added
- Initial release of the reliability engine — intelligent error engine with fingerprinted events; incident management with lifecycle and evidence; root cause analysis with weighted evidence and confidence tiers; prevention engine with hourly trend sweeps; six-component explainable risk model.
- Command-center dashboard, change timeline with automatic pre-update recovery snapshots, 16-check diagnostics suite, Database / Performance / Cron Doctors, API & Webhook Doctor.
- WooCommerce intelligence (self-gating, HPOS-aware, read-only with respect to orders), smart alerts with deduplication, throttling and quiet hours, branded HTML email channel.
- Recovery architecture: Safe Mode quarantine drop-in, single-use HMAC-signed expiring recovery links with per-IP rate limiting and audit logging, recovery points, rollback, verified treatments.
- Structured, AI-ready diagnostic-context endpoint; activity logs; structured and printable reports; multisite support with super-admin access control; clean uninstall contract.