=== Witen Blocker Changelog ===

= 0.6.51 =
* Enter your password and optional authenticator or recovery code together on the login form. A valid password awaiting a two-factor code no longer generates failure reports, audit entries, or login lockouts.
* Show the authenticator QR code, secret, and eight recovery codes during setup. Enable two-factor authentication only after confirming a working authenticator code and saving the recovery codes.
* Require your current password and an authenticator or recovery code before disabling two-factor authentication, revealing its secret, or generating new recovery codes. Administrators must verify their own identity before resetting another user.
* Stop bundled background queue dispatch during deactivation and uninstall, before plugin files are removed.
* Open the Spam folder from the dashboard count and explain that it records comments Witen marked over time.
* Resolve visitor addresses through Witen SDK 1.6. Cloudflare edges that arrive as IPv4-mapped IPv6 addresses are no longer counted or banned as visitors.
* Never ban CDN edge addresses or send them for enforcement. Failed logins through an edge are still recorded.
* Attribute Cloudflare Worker traffic to its Worker zone, so one Worker cannot get a shared Cloudflare address banned.
* Report spoofed client-IP headers by header name only. Header values are never sent.
* Replace the setting that trusted proxy headers from any sender with Trusted proxies in Settings. Visitor headers are read only from published CDN ranges or proxies you list. Existing setups migrate on upgrade, and a notice asks for your proxy's addresses when one is needed.
* Name your own Cloudflare Worker zones, so requests from your Workers keep the real visitor address.

= 0.6.50 =
* Allow Starter and Growth plans to select global and SSH threat feeds consistently in settings and service synchronization.
* Group controls into Dashboard, Firewall, Login, Scan, and Settings while keeping existing page links working.
* Guide first-time activations to local protection and optional setup, with connection details in expandable diagnostics.
* Show the two-factor field only after password verification for accounts using it. Passwords are never retained between attempts.
* Translate more admin labels and show unscanned file integrity accurately.
* Make login limits editable on production sites and apply wp-config.php login constants consistently.
* Show active local protection and bundled bot identities without requiring an account.
* Add Settings and recovery links, a deactivation warning, and a warning for unverified proxy addresses.

= 0.6.49 =
* Bundle Witen SDK 1.4.7 with independent login observation windows, generic login outcomes, and capability discovery matching Warden's documented schema.

= 0.6.48 =
* Block malicious URLs injected into comment author names, including Breeze Cache exploit probes (CVE-2026-3844).
* Apply the check to both the comment form and REST submissions before a comment is stored.
* Keep detected comment spam in the spam folder when WordPress calculates its approval status.
* Record spam after a comment is saved, without duplicate reports or counting failed submissions.

= 0.6.47 =
* Block page-template traversal attempts (CVE-2026-87902) before template selection, including encoded values and POST parameters.
* Reject these requests locally without depending on Collector DNS or installing an IP ban.
* Report the detection and denied outcome without sending query parameters or form contents.
* Rewrite the directory readme around protection, setup, and everyday use.

= 0.6.46 =
* Clarify setup instructions, service disclosures, and the plugin directory description.

= 0.6.45 =
* Retry reporting in the background with persistent backoff and visible failure details.
* Keep rejected records for diagnosis without stalling valid reports or falling back from Warden to HTTPS.
* Keep login reporting off the request path and avoid redundant Apache rule checks.

= 0.6.44 =
* Normalize legacy WordPress source labels for new and queued Warden reports without changing event IDs.

= 0.6.43 =
* Authenticate local Warden callers with private installation credentials.

= 0.6.42 =
* Remove cross-sensor overlap and pivot reports from the dashboard.

= 0.6.41 =
* Distinguish denied requests from observations and manual policy changes.
* Correct request receipt duration and SDK cache compatibility.

= 0.6.40 =
* Store bundled bot identities in readable JSON with their source and license.
* Require explicit socket configuration before sharing events with local Warden.
* Clarify socket-mode consent and narrow admin request-check annotations.
* Reject malformed enrollment responses without consuming the setup token.

= 0.6.39 =
* Use WordPress APIs for plugin paths, upload scans, and Apache upload-protection rules.
* Reject malformed settings before saving and validate client IPs before applying proxy trust.
* Keep SDK response caches in private per-site options and use temporary files for catalog validation and scan reports.
* Prevent integrity file lookups from following symlinks or leaving the configured content directory.
* Distribute the unchanged public catalog verification key as a text file and clarify crawler hostname metadata.

= 0.6.38 =
* Exclude loopback and unspecified addresses from all request blocking, login bans, and security-event recording.

= 0.6.37 =
* Reject malformed backup restore content and identifiers before modifying files.
* Restrict shared-file backup requests to the main site and honor backup opt-out.
* Allow opted-in background restores without weakening administrator permissions.
* Format nine bundled PHP SDK classes without changing their behavior.

= 0.6.36 =
* Require enrollment, administrator permission, and a nonce before sending a manual IP lookup to the collector.
* Load bundled admin and comment assets through WordPress enqueue APIs.
* Scope bulk selection to its form and handle bot categories as literal values.
* Reject malformed background credentials and stop work if token consumption fails.
* Separate hosted backup entitlement from threat-feed selection and clarify service disclosures.

= 0.6.35 =
* Initialize each site after upgrades and network activation, and clean up background schedules on deactivation.

= 0.6.34 =
* Include the complete GPLv2-or-later license for the plugin and shared PHP library.

= 0.6.33 =
* Fix two-factor recovery-code entry, prevent recovery-code reuse during concurrent logins, and reject enabled two-factor login when the stored secret is unavailable.
* Keep Cloudflare range lookups off visitor requests and defer background service requests until enrollment.
* Preserve files outside the plugin cache during uninstall and remove per-site state across multisite networks.
* Clarify installation, consent, privacy disclosures, and authenticator setup.

= 0.6.32 =
* Describe shared IP observations, local event recording, configured connections, scan results, and hardening coverage without implying verified protection or delivery.
* Clarify blocklist and comment-spam counters, login URL behavior, server-signature scope, and the outage, bot-policy, and data-sharing FAQs.

= 0.6.31 =
* Clarify standalone connection setup and remove internal credential-exchange language from customer notices.

= 0.6.30 =
* Refresh blocklists and network intelligence correctly through local Warden socket connections.
* Keep development files and build metadata out of the installable package.

= 0.6.29 =
* Persist the recovered event total immediately when upgrading from an older release.

= 0.6.28 =
* Preserve a useful event count when upgrading sites that already have recent event history.

= 0.6.27 =
* Keep the Events Reported total across requests and restarts.
* Avoid false delayed-maintenance warnings on low-traffic WP-Cron sites.
* Clear recovered maintenance warnings after a successful background run.

= 0.6.26 =
* Create the bot catalog cache directory on fresh WordPress installations.
* Document every runtime external service and satisfy WordPress.org Plugin Check requirements.

= 0.6.25 =
* Delegate transport, credential, cache, and decision-receipt behavior to the shared Witen PHP SDK.
* Use per-sensor credentials consistently in direct Collector and local Warden runtime modes.

= 0.6.24 =
* Reconcile clean WordPress plugin and theme updates into the file-integrity baseline without accepting unrelated filesystem drift.

= 0.6.23 =
* Classify bundled bot identities into search, AI/LLM, SEO, social-preview, and monitoring policy groups instead of Other Crawlers.

= 0.6.22 =
* Restore the bundled verified-bot snapshot used when Warden socket mode intentionally avoids direct Collector HTTP requests.

= 0.6.21 =
* Keep all WordPress-layer policy controls authoritative in the WordPress dashboard when using Warden socket transport.
* Label socket transport explicitly instead of describing it as a local connection mode.

= 0.6.20 =
* Recognize observed Docker, Python, IDE, development, and WordPress credential-file probes.
* Preserve conservative handling for ambiguous config and documentation paths.

= 0.6.19 =
* Initial WordPress.org submission.
