Answers which redirect is missing, and stops a renamed page's old URL serving stale content.
Runtime verification: this release originally shipped without an inventory run, deliberately, and said so. The run has since been completed: 26/26 PHP verifiers and all three shell verifiers green on 2026-09-04 (commit 9c69b52). error-statistics-verification.php ran for the first time at any version and reached its measured branch against a live Redirection 5.9.0 404 log, rather than only its refusal branch.
The only code difference between this artifact and the verified commit is one whitespace character, so the artifact below is the verified build and there is no 0.10.1.
Changelog
- New:
get-404-statisticsanswers which redirect is missing, which creating a redirect cannot. It reports the paths that returned 404 and how often, read from the Redirection plugin's own log, behind the new off-by-default404 statistics abilityswitch and the newwpcb_read_error_statisticscapability. - Aggregate only, by construction. A result carries the requested path and a hit count and nothing else. Visitor IP, user agent, referrer, and request data are never read into the plugin, never stored, never returned, and never projected to an MCP client — and no parameter exists that could include them, so no retention or redaction obligation attaches to this plugin.
- "Nothing collects this", "the log is switched off", "you may not read it", and "no 404s happened" are four different answers and stay four different answers. Yoast SEO Premium collects no 404 data at all, so a Yoast-only site reports the data as unavailable rather than reporting zero — which would read as a healthy site. A disabled log names the Redirection setting responsible. Every result also reports the retention window it covers, and says so explicitly when retention cut a requested range short, because pruned rows would otherwise look like 404s that stopped happening.
- Reading statistics is deliberately not
wpcb_manage_redirects. Redirection separates the two in its own permission model, so "diagnose the site without authority to change its routing" is a grant you can actually express. Because the log is read directly, Redirection's own permission for it still applies — by default that means Administrator, widened through Redirection's own filter if a site wants an integration principal to read it. Nothing here enables, prunes, or resets any log. get-diagnosticsnow reports redirect providers, asredirects.enabledplus aredirects.providerslist with adetectedflag each — and it reports them whether or not the redirect abilities are switched on. Missing redirect abilities have two very different causes, the switch being off and no provider being installed, and they need opposite fixes. Diagnostics schema version moves to 1.2; the addition is backward-compatible.update-permalinknow invalidates the old URL's cache and reports what it did. A page-cache entry for the old URL is keyed by URL, so the post-scoped invalidation every write already performs cannot reach it, and it keeps serving the old page — the rename appears not to have taken effect. The write now notifies a bounded set, exactly the old and new URL, through public single-URL purge hooks and a newwp_content_bridge_purge_urlsaction for sites to bind. The result reports which channels were notified and flagsdelegatedwhen the actual purge depends on site-level glue; it never claims a purge it cannot observe.- Fixed:
wpcb_upload_media, added in 0.9.0, could not be granted through the settings screen and survived uninstall. It was missing from the capability list the screen renders and from the uninstall cleanup. Both now include it. - The database schema version moves to 14, so an active install grants the new capability only when the plugin is reactivated — until then the statistics ability refuses, which is the correct failure direction.
- Adds
tests/Integration/error-statistics-verification.php, a read-only runtime fixture for the statistics port. It writes no log row, changes no Redirection setting, and prunes nothing.
Install: download wp-content-bridge.zip below and install it as a plugin, or let the built-in updater offer it.
Full Changelog: v0.9.0...v0.10.0