= 2.1.0 (2026-08-19) =

* Updated Freemius SDK to 2.13.4.
* Tested up to WordPress 7.1.
* Free: New `includes/SystemInfo.php` — single source of truth for PHP EOL dates (adds 8.5 => 2029-12-31; verified against endoflife.date 2026-08-11), PHP memory limit/usage helpers, server IP, and the Markdown system-info table. `Pro\HealthAdvisor` now reads PHP EOL dates from it (its own `PHP_EOL_DATES` const removed) so free and PRO data can never drift.
* Free: Memory limit + live usage % + server IP in footer/admin bar/dashboard widget behind new option `version_info_show_memory` (boolean, default true, registered in `version_info_general_group` WITH a matching row in the General form — see the 2.0.3 settings-group rule). Rows/segments are omitted entirely when `memory_get_usage` is disabled or `SERVER_ADDR`/`LOCAL_ADDR` are absent; `memory_limit = -1` renders as "(no limit)".
* Free: PHP EOL countdown — widget row `php_eol` always shown; footer/admin-bar segment only within 365 days of EOL or past EOL.
* Free: Copy-as-Markdown — admin-bar child node `version_info_copy_md` + widget button `#vi-copy-md` (rendered outside the kses'd item loop). One inline vanilla-JS handler: `navigator.clipboard` on secure contexts, textarea + `execCommand('copy')` fallback elsewhere; payload built server-side and JSON-encoded with `JSON_HEX_*` flags.
* PRO: `HealthAdvisor::test_ssl_expiry()` — `stream_socket_client` + `openssl_x509_parse` probe (every capability `function_exists`-guarded, `verify_peer` off so expired certs still handshake), thresholds 21/7 days, non-HTTPS and failed probes return informational passes. New transient `vi_ssl_expiry` (12h success / 1h failure, filter `version_info_ssl_cache_ttl`) added to Purge VI Caches. Site Health test `version_info_ssl_expiry`. Widget row reads cache only (`get_cached_ssl_expiry()`, `all_checks(false)`) — dashboard paints never block on the probe.
* PRO: `test_php_minimum()` rewritten as a graded ladder against new `WP_PHP_MATRIX` const (7.4 minimum / 8.3 recommended / 8.5 fully supported per Make WordPress Core 2026-01-09 + 2026-05-22). Result slug and Site Health ID unchanged.
* PRO: `MYSQL_EOL_DATES` gains 9.7 LTS => 2034-04-21. New `HealthAdvisor::all_checks()` feeds both the settings tab and the widget summary.
* PRO: `EmailAlerts` registration moved from `AgencyFeatures` to `ProFeatures` (same commit — split registration would double-send). `email_alerts` moved from `AGENCY_TABS` to `PRO_TABS`; doc slug now `pro-features-email-alerts` (docs redirect in place). Options/group/sanitizers untouched — Agency customers' settings carry over.
* Fix: `SettingsPage::render()` uses `is_plan_or_trial('agency')` to match `Plugin::maybe_init_pro()` — Agency-trial tabs unlock correctly.
* Fix: `VERSION_INFO_VERSION` constant stale at 2.0.1 since 2.0.2; now 2.1.0 and kept in lockstep with the header.

= 2.0.3 (2026-05-27) =

* Fix: Saving the Server Location tab no longer disables the dashboard widget (or the admin-bar / footer / Show Live System Resources toggles). The location options now live in their own `version_info_location_group` settings group instead of sharing `version_info_general_group` with the General-tab checkboxes — previously, saving on Server Location would clobber the General-tab options to false because unchecked checkboxes aren't in `$_POST`. Reported by Steve Guccione — thanks!

= 2.0.2 (2026-05-26) =

* PRO: New General-settings toggle "Show Live System Resources in Dashboard Widget" enriches the WP admin dashboard widget with the full collected dataset — CPU load with bar + sparkline + load avg + cores, system memory with bar + sparkline + used/total, PHP memory + peak, disk usage with bar, database size with data/index split + table count, environment + detection source, server location, server OS + hostname + IP, server uptime, plugin/theme/core update availability, cron next-event/overdue, Health Advisor critical/warning/good summary, last detected version change, PHP runtime limits (memory_limit / max_execution_time / upload_max_filesize / post_max_size / max_input_vars), HTTPS, WP_DEBUG + debug.log size, object-cache backend, WP + PHP timezones. (Driven by direct customer feedback.)
* PRO: CPU and Memory rows now render a compact inline-SVG sparkline alongside the percent bar that builds a rolling 30-sample history (~7.5 min at the dashboard's 15s Heartbeat cadence) so admins can see direction-of-travel at a glance. Sparkline stroke recolors green/orange/red on the same 70%/90% thresholds as the bar.
* PRO: New `LocationProvider` resolves Server Location in this order: 30-day transient cache → configured provider lookup → reverse-DNS fallback → graceful "Unknown". Failed lookups short-cache for 1 hour to avoid hammering a dead network on every render.
* PRO: New "Detect now" button on Settings → General busts the location transient + re-runs the lookup over admin-ajax (nonce + manage_options-gated).
* PRO: Widget now also shows Server OS (`php_uname()`), Hostname (`gethostname()`), Server IP (`$_SERVER['SERVER_ADDR']`), Server Port, Document Root (masked through `[ABSPATH]`), DB Max Connections, DB Max Allowed Packet, and Server Uptime (`/proc/uptime`, "Unavailable" on Windows). Closes the parity gap with the long-stale wp-server-stats plugin (last released 2017-11-24) without inheriting its `shell_exec()` dependency that breaks on managed hosts.
* PRO: Server Location now ships four selectable providers — **Version Info Geolocation (anonymous)** (default — our own Cloudflare Worker at geo.versioninfoplugin.com, logs nothing, returns city/region/country/postal/timezone/lat-long/ASN/CF colo), **Cloudflare cdn-cgi/trace** (country only, free, anonymous), **ip-api.com** (the legacy default, what wp-server-stats used), and **MaxMind GeoLite2 City Web Service** (requires free license key). An enable/disable checkbox above the dropdown lets you turn auto-detect off entirely. New doc page at https://docs.versioninfoplugin.com/pro-features-server-location/ describes the privacy/accuracy trade-offs in depth.
* PRO: System Resources tab now includes a collapsible **PHP Modules** section (every loaded extension with version) and a one-click **Purge VI Caches** button that bursts every `vi_*` transient at once.
* PRO: CPU, memory, and disk rows in the dashboard widget display compact color-coded percent bars matching the System Resources tab. CPU and memory bars redraw live on every WordPress Heartbeat tick — no page reload required.
* PRO: Aggregate widget extras cached for 5 minutes behind a transient (filterable via `version_info_widget_extras_ttl`) so the widget stays snappy.
* Settings → General now dynamically hides the "Show Live System Resources in Dashboard Widget" row until the parent "Show Version Info as Dashboard Widget" toggle is enabled — keeps the form uncluttered until the option is meaningful. Hide/show is instant via inline JS; the child's checked state survives parent toggles.
* Agency: New "Lock Tab to Current User" checkbox on the White Label tab. When enabled, the White Label tab is hidden from every other administrator and direct POST writes to white-label options are blocked from non-owners. The lock auto-releases if the owner's account is deleted (via `deleted_user` hook), and also self-heals on load if the recorded owner ID no longer corresponds to a real user.
* Agency: New "Hide Doc Links" checkbox on the White Label tab. When enabled, in-plugin links to `docs.versioninfoplugin.com` are suppressed across every settings tab so client-facing dashboards never expose the underlying plugin's documentation domain.
* New: Inline doc links on every settings tab pointing at the matching `docs.versioninfoplugin.com` page for the feature being configured.

= 2.0.1 (2026-05-17) =

* Backwards compatibility: now supports WP 4.7+ and PHP 5.6+, matching the plugin's purpose of inspecting older environments.
* Refactored to remove PHP 7.0+/7.1+/7.4+/8.0+/8.1+ syntax (declare(strict_types), scalar/return type declarations, null coalescing ??, Throwable, typed properties, arrow functions, match, str_starts_with, mixed, nullable returns, void returns, private const, array_is_list).
* Feature-detect wp_date() and wp_timezone_string() so the plugin degrades gracefully on WP 4.7–5.2.
* Health Advisor's PHP minimum check now flags pre-7.4 as a recommendation rather than declaring PHP < 8.1 a critical risk.
* Compatibility verified against WordPress 7.0.

= 2.0.0 =

* Major architecture refactor with PSR-4 autoloading and Freemius SDK integration.
* PRO: CPU/RAM monitoring, database size tracking, environment indicators, version history, health advisor, JSON system export.
* Agency: white-labeling, role-based visibility, multisite network dashboard, email alerts, error log viewer.
* (Previously bumped PHP minimum to 8.1 — reverted in 2.0.1.)

= 1.3.3 =

* Verified WordPress 6.9 compatibility.

= 1.3.2 = 

* Added settings for displaying the version info on WP-Admin bar and dashboard widget.
* Added namespace, sanitization, and other security improvements.
* Prepared plugin strings for translation.
* Translations added for 13 most common Wordpress languages.

= 1.3.1 = 

* Updated compatibility details. 
* Changed to GPL. 

= 1.3.0 =

Due to the current tumult surrounding the .org repository, I have decided to put this plugin up for adoption. With this update, it has been successfully transferred to the new owner, @gauchoplugins. All future updates and maintenance will be handled by the new owner. Thank you for your support and understanding.

= 1.2.1 =

* remove putenv to staging 🤦

= 1.2.0 =

* If WP_ENVIRONMENT_TYPE is defined (either through PHP env var or constant), display this info.