== Changelog ==

= 0.3.1 =

_Release date: 2026-08-14_

* Default store URL is now `https://www.robotstxt.software` (was `https://plugins.robotstxt.es`). Applies to new activations and fresh installs; existing saved URLs are preserved. The catalog API at the new domain is verified live.
* Plugin version 0.3.0 → 0.3.1.

= 0.3.0 =

_Release date: 2026-08-13_

**Highlights**

* Classic install/activate/update flow: the catalog actions now run on a full page load (`admin-post.php` with per-action-and-slug nonces) and report the outcome through standard admin notices (green success / red error) at the top of the page, replacing the previous AJAX flow.

**Added**

* Activate action — installed-but-inactive plugins show an "Activate" button that calls `activate_plugins()`.
* Update action — plugins with a newer catalog version show an "Update" button that re-downloads the ZIP and runs the `Plugin_Upgrader` with `overwrite` enabled.
* Install/Activate/Update buttons are nonce links (`robotstxt_manager_{action}_{slug}` nonce actions) to `admin-post.php`, all `manage_options`-gated.
* Redirect-based notices: handlers redirect back to the catalog page carrying `robotstxt_manager_result` (success/error) and `robotstxt_manager_message`, rendered as dismissible standard notices.

**Changed**

* `Robotstxt_Manager_Installer` rewritten from an AJAX handler to three admin-post handlers (`robotstxt_manager_install`, `robotstxt_manager_activate`, `robotstxt_manager_update`); download logic (Bearer account-key auth, ZIP validation, temp-file cleanup) unchanged.
* Removed the AJAX endpoint, `manager-install.js`, and its script localization.
* Plugin version 0.2.0 → 0.3.0.

**Compatibility**

* WordPress: 7.0 - 7.1 (declared floor of the ecosystem; scan-confirmed lower)
* PHP: 8.4 - 8.5 (declared floor of the ecosystem; scan-confirmed lower)

= 0.2.0 =

_Release date: 2026-08-12_

**Highlights**

* Phase 2: the Install action. Free and premium plugins can be installed directly from the ROBOTSTXT catalog into the local site, authenticated with the account-level API key (requires Plugins Core 1.4.0+).

**Added**

* `Robotstxt_Manager_Installer` — AJAX handler (`wp_ajax_robotstxt_manager_install_plugin`, nonce-protected, `manage_options`-gated) that resolves the plugin in the remote catalog, downloads the ZIP (free plugins with a published public `download_url` directly; everything else via Core's authenticated `/download` endpoint with an `Authorization: Bearer <account API key>` header), validates the archive (ZIP magic bytes), installs it via `Plugin_Upgrader`, and cleans up the temp file on every path.
* `public/js/manager-install.js` — wires the Install buttons to the AJAX action with in-flight state and result rendering.
* Catalog view: enabled Install buttons for compatible plugins (free and premium).

**Changed**

* Plugin version 0.1.3 → 0.2.0. Description updated to reflect Phase 2.

**Compatibility**

* WordPress: 7.0 - 7.1 (declared floor of the ecosystem; scan-confirmed lower)
* PHP: 8.4 - 8.5 (declared floor of the ecosystem; scan-confirmed lower)

= 0.1.3 =

_Release date: 2026-08-12_

**Changed**

* Version bumped 0.1.2 → 0.1.3.
* `composer.json` PHP requirement updated from `>=8.4` to `>=7.4` to match the real PHPCompatibility scan floor and the plugin header.
* `composer.lock` regenerated.
* `.pot` file regenerated for v0.1.3.

**Compatibility**

* WordPress: 4.7 - 7.1
* PHP: 7.4 - 8.5

**Tests**

* PHP Coding Standards: PHP_CodeSniffer 3.13.6
* WordPress Coding Standards: WPCS 3.4.1
* PHPStan: level 9, 0 errors
* PHPCompatibility: 7.4–8.5 clean
* wp-compat: 0 errors against WP 4.7

= 0.1.2 =

_Release date: 2026-08-12_

**Highlights**

* Documentation refresh: readme.txt and changelog.txt aligned to the standard templates.

**Changed**

* Version bumped 0.1.1 → 0.1.2.
* readme.txt: added Extra Configurations section, Automatic download subsection in Installation, Previous versions link in Changelog.
* changelog.txt: 0.1.1 entry reformatted to follow the standard template (Highlights, Changed, Compatibility, Tests).
* PHPCompatibility scan (5.6–8.5): real PHP floor is **7.2**. Project declares **8.4** (ecosystem exception).
* wp-compat scan against WordPress 4.7: **zero WPCompat errors**. Real WP floor is **≤ 4.7**. Project declares **7.0** (ecosystem support window).

**Compatibility**

* WordPress: 4.7 - 7.1
* PHP: 7.4 - 8.5

**Tests**

* PHP Coding Standards: PHP_CodeSniffer 3.13.6
* WordPress Coding Standards: WPCS 3.4.1
* PHPStan: level 9, 0 errors
* PHPCompatibility: 8.4–8.5 clean (real floor 7.2)
* wp-compat: 0 errors against WP 4.7

= 0.1.1 =

_Release date: 2026-08-12_

**Highlights**

* Compatibility scans completed and documented. No code changes.

**Changed**

* Version bumped 0.1.0 → 0.1.1.
* PHPCompatibility scan (5.6–8.5) completed: real PHP floor is **7.2** (highest-required feature is `object` return type, introduced in PHP 7.2). The project deliberately declares **8.4** to match the ROBOTSTXT ecosystem — this is a documented exception to `AGENTS-deploy.md` §"PHP compatibility check".
* wp-compat scan against WordPress 4.7: **zero WPCompat errors**. The Manager's code uses only WordPress APIs available since 4.7 or earlier. The real WordPress floor is **≤ 4.7**; the project declares `Requires at least: 7.0` to match the ecosystem support window.
* `.pot` file regenerated for v0.1.1.

**Compatibility**

* WordPress: 4.7 - 7.1
* PHP: 7.4 - 8.5

**Tests**

* PHP Coding Standards: PHP_CodeSniffer 3.13.6
* WordPress Coding Standards: WPCS 3.4.1
* PHPStan: level 9, 0 errors
* PHPCompatibility: 8.4–8.5 clean (real floor 7.2)
* wp-compat: 0 errors against WP 4.7

= 0.1.0 =

_Release date: 2026-08-12_

**Highlights**

* Phase 1 scaffold of Manager (by ROBOTSTXT) — client-side dashboard for the ROBOTSTXT plugin ecosystem. Read-only catalog view with local install-state resolution.

**Added**

* Plugin header, autoloader (Composer with manual fallback), lifecycle hooks, constants (`ROBOTSTXT_MANAGER_VERSION`, `ROBOTSTXT_MANAGER_DIR`, `ROBOTSTXT_MANAGER_URL`, `ROBOTSTXT_MANAGER_BASENAME`).
* `Robotstxt_Manager_Loader` action/filter queue (identical pattern to Core/Mollie/Sync).
* `Robotstxt_Manager_Encryption` — AES-256-CBC encrypt/decrypt for the API key, using WordPress `AUTH_KEY` + `AUTH_SALT` for key derivation. Same pattern as Core's Forgejo token encryption.
* `Robotstxt_Manager_Core_Client` — HTTP client for the remote Plugins Core REST API. Authenticated via `Authorization: Bearer <key>` header. Implements `test_connection()`, `get_catalog()` (cached in transient), `clear_catalog_cache()`.
* `Robotstxt_Manager_Settings` — Settings API page with Store URL, API Key (masked, encrypted, last-4 hint, delete-on-empty preservation), Catalog Cache TTL, Data-on-Uninstall opt-in. AJAX "Test connection" button with nonce + capability check.
* `Robotstxt_Manager_Admin` — Top-level admin menu (label "ROBOTSTXT") with catalog table view. Resolves local install/active/update state for every catalog entry using `get_plugins()` + `is_plugin_active()`. "Refresh catalog" admin-post action.
* `uninstall.php` with opt-in data deletion (default: preserve all options and transients).
* Per-project tooling: Composer, PHPCS + WPCS + PHPCompatibility, PHPStan level 9 + wp-compat, PHPUnit. `bin/preflight.sh` and `bin/deploy.sh`.

**Compatibility**

* WordPress: 4.7 - 7.1
* PHP: 7.4 - 8.5

**Tests**

* Phase 1 scaffold — plugin-header tests included. Additional tests for Core client, settings, and admin rendering in follow-up phases.
