Three features in one release
This release cuts a single 0.0.17 covering three features that landed on main since the last release (0.0.15) without their own release PRs.
Feature 057 — Reinstall WordPress Core
New ability acrossai/reinstall-wp-core under the Core category. Reinstalls the currently-installed WordPress version by handing a synthetic offer with `response = 'reinstall'` to WP core's `Core_Upgrader::upgrade()` — same code path the WordPress dashboard's "Reinstall now" button uses. Uses `allow_relaxed_file_ownership=false` so ownership mismatches surface as errors instead of silent partial-upgrades. Requires BOTH `manage_options` AND `update_core`; honours `DISALLOW_FILE_MODS` via `File_Mods_Guard`; multisite-guarded; refuses when core is being actively updated to a different version (use `acrossai/update-wp-core` for that). Complements the existing `acrossai/update-wp-core`, `acrossai/rollback-wp-core`, and `acrossai/check-wp-core-update` abilities. PR #87.
Feature 058 — BREAKING: slug rename to acrossai/<verb>-<subject>
Two orthogonal changes shipped together:
- Namespace shortens from
acrossai-abilities-manager/(27 chars) toacrossai/(9 chars). Matches the WordPress core MCP adapter convention (mcp-adapter/discover-abilities,mcp-adapter/execute-ability) and the broader LLM tool-use ecosystem. - Suffixes flip to verb-first form. 163 slug suffixes changed (e.g.
site-title-get→get-site-title,theme-activate→activate-theme,plugin-list→list-plugins). 56 already-verb-first suffixes only had their namespace shortened. Slugs now read the same word order as theirlabel.
Also flipped 162 PHP class files + class names to match slugs (Site_Title_Get.php → Get_Site_Title.php, class Site_Title_Get → class Get_Site_Title). Internal-only; PSR-4 autoload picks up the new names automatically.
No backwards-compatibility aliases. No automatic data migration — the plugin is small-user; users clear pre-existing overrides + ACL rules keyed on old slugs from the admin UI and re-add them under the new names.
External callers (custom code, saved MCP client configs, ACL entries, scripts calling /wp-json/wp-abilities/v1/abilities/acrossai-abilities-manager/<old>/run) must update their slug references to /wp-json/wp-abilities/v1/abilities/acrossai/<new>/run.
PR #88. Full slug convention captured as DEC-SLUG-CONVENTION-VERB-FIRST in docs/memory/DECISIONS.md.
Feature 059 — Recovery Mode / Safe Mode / fatal-error abilities
7 new abilities under a new Recovery category so an AI agent driving the site over REST/MCP can detect and act on WordPress Recovery Mode without needing an admin to notice the recovery banner in wp-admin:
| Slug | Purpose |
|---|---|
acrossai/get-recovery-mode-status | Detect recovery mode + summary counters (paused counts, fatal-handler enabled) |
acrossai/list-paused-plugins | List paused plugins with captured error details (type / file / line / message), enriched with human plugin_name |
acrossai/list-paused-themes | Symmetric for themes |
acrossai/get-recovery-exit-url | Return the admin-clickable URL that exits recovery mode (WP core's exit action is cookie- + nonce-guarded; a normal admin REST session can't invoke it directly — this returns the URL for an admin or a browser-driving agent to follow) |
acrossai/unpause-plugin | Clear the paused-storage entry so WP retries loading the plugin next request (distinct from deactivate-plugin) |
acrossai/unpause-theme | Symmetric for themes |
acrossai/list-recent-fatal-errors | Grouped PHP Fatal/Parse/Compile errors from debug.log, streamed with a 20 MB tail cap, grouped by `md5(type |
Every write action gates on manage_options + File_Mods_Guard::blocked_response(). Fuzzy plugin/theme identifiers flow through the existing Plugin_Helpers::resolve_plugin() / Theme_Helpers::resolve_theme() resolvers.
Intentional non-goals: no programmatic recovery-mode trigger (WP core has NO public API — the handler only fires on real fatals at protected endpoints), no programmatic exit (cookie + nonce guarded).
Also: docs-only tweak to 3 existing abilities (activate-plugin, deactivate-plugin, activate-theme) — their description now notes they work in recovery mode.
PR #89.
Verified
- PHPUnit 191/191 pass (170 pre-existing + 21 new from Feature 059)
- PHP syntax lint clean across every touched/new file
- Every ability slug matches the new
acrossai/<verb>-<subject>convention
Note on version numbering
0.0.16 never shipped as an installable version — Feature 058's commits bumped the version constants to 0.0.16 and Feature 059's commits bumped again to 0.0.17 before either got a release PR. The 0.0.16 changelog block in README.txt remains as a historical marker documenting what changed between the 0.0.15 release and this 0.0.17 release; users upgrading from 0.0.15 skip 0.0.16 entirely.
Compatibility
- PHP 8.1+ / WP 6.9+ (unchanged)
- No new REST routes, no new database tables, no new composer or npm packages, no new capability requirements