Skip to content

Add an "unsupported WordPress version" upgrade task for EOL branches #772

Description

@tacoverdo

Companion to ProgressPlanner/progress-planner-server#63, and a sibling of the security-update task shipped in #769.

Context

#769 covers sites on a supported branch that are behind on a security patch: UI lockdown, one-click branch-pinned update, admin emails. A site running a branch that WordPress no longer patches (beyond the backport window) is a different case: there is no same-branch patch to install, so #769 never fires — the site just stays insecure.

The server side will email the registered subscriber about this (progressplanner-server#63, feed-driven like the patch alerts). That email is the safety net for neglected sites. This issue is the in-product half for actively used sites: a persistent recommendation task in the dashboard, where the fix actually happens.

What to build

A new task: "Your WordPress version no longer receives security updates — upgrade to WordPress X."

Detection — needs a design decision

The update-core transient alone is ambiguous: "no same-branch offer + newer major exists" is also true for a site that is current on an old-but-supported branch. Options:

  1. Fetch the stable-check feed (https://api.wordpress.org/core/stable-check/1.0/) on a daily cron and check whether the newest patch of the installed branch is marked insecure — the same rule the server uses. Small JSON, cacheable, exact.
  2. Heuristics on core's own signals (the "insecure version" nag state) — fragile and undocumented.

Option 1 is probably right, but it adds an outbound HTTP call to wordpress.org (note: core itself already calls api.wordpress.org routinely, and #769's zero-outbound-HTTP guarantee applied to the alert email path, not to detection — worth preserving that distinction in tests).

Also unlocks (server-side)

The get-stats payload's plugin_url currently gives the server's EOL email nothing better than update-core.php to link to. Once this task exists, the dashboard deep link becomes the natural target, same as the patch-alert email (see decision 3 in progressplanner-server#63).

Out of scope

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions