GoBuildWP

Safe WordPress plugin updates

Safe WordPress plugin updates with rollback, with selected checks and conditional file recovery.

Safe WordPress plugin updates with rollback: GoBuildWP Pro checks for a fresh backup, copies the old plugin or theme files, probes selected URLs before and after, and attempts file recovery when those checks detect a failure. Verify the resulting site separately.

Safe updates are in Pro, One plugin or theme per call, Pricing

Representative session. Ability names match GoBuildWP Pro 1.12.4; the plugin, versions and pages are illustrative.

Check coverage and recovery limits

The default requires a successful backup reported within 24 hours. Passing require_backup: false overrides that check for one recorded call; the file copy still does not restore database migrations. Review the exact update and backup before using that exception.

File rollback does not reverse notifications, gateway actions or other external effects. Logged-out HTTP probes do not test logged-in journeys, visual layout, carts or checkout. Test those flows on staging, read the terminal outcome (updated, rolled_back or rollback_failed) and retain recovery access outside WordPress. Downtime and successful recovery are not guaranteed.

What one safe update does

Seven steps, each reported back

Every step comes back in the result, so the agent can say exactly where an update stopped and why, instead of reporting success because the upgrader returned true.

The checks are deliberately about the site, not the update process. An upgrade can finish cleanly and still leave a plugin that fatals on the one page that loads its shortcode, which is the failure people actually find the next morning.

  1. Backup

    A successful backup newer than 24 hours, read from UpdraftPlus, Duplicator, BackWPup or All-in-One WP Migration. None found is a refusal that says how to make one.

  2. Rollback copy

    The current version is zipped under uploads behind deny rules and read back. A copy with files missing stops the update there.

  3. Before

    The home page and up to four recent pages, or URLs you name on this site, fetched logged out: status, fatal-error detection, title and a hash of the visible text. Plus REST and admin-ajax.

  4. Update

    WordPress's own upgrader. The plugin's active state is restored without loading its new code into the same request, so a fatal cannot kill the rollback.

  5. After

    The same pages and endpoints again, plus any fatal errors the error log gained from the updated directory.

  6. Compare

    Anything that worked and now does not fails the update. A page that answers with an error or no answer is fetched once more after eight seconds, and only what still fails counts. Changed text is reported per page and fails only above the threshold you set.

  7. Keep or roll back

    On failure the copied files are restored and the pages are checked once more: outcome rolled_back, with the reason, which names the PHP error the site recorded. If the restore does not complete, the outcome is rollback_failed and the copy is kept for a retry. On success the copy is kept seven days for undo.

Require a fresh backup

A backup check that covers more than updates

Safe updates always look for a recent backup. The Require a fresh backup setting applies the same rule to everything risky.

Under Settings, Backups in GoBuildWP Pro, off by default. While it is on, any agent call GoBuildWP rates destructive or critical is refused unless a supported backup plugin reports a successful backup newer than the age you choose, 24 hours unless you change it. Reads, ordinary writes and the backup abilities themselves are never held.

It fails closed. With no backup plugin active, or none that can be read, those calls are refused with a message that says to make a backup or turn the setting off. It runs before the approval queue on every transport, so an approved request is checked again when it replays, and it stays enforced if the Pro licence lapses.

What counts as a backup

Each plugin records a different truth, and only a backup that still exists counts. UpdraftPlus keeps a verdict for its latest job only. A BackWPup run whose local archive was deleted is reported as deleted, and one sent only to remote storage counts but is marked unverified. An All-in-One WP Migration export counts only when it is a complete archive in its backups folder. Duplicator is read but cannot be started from here.

UpdraftPlus BackWPup Duplicator All-in-One WP Migration All backup plugins

Abilities

The calls behind a safe update

  • updates-available

    Plugins, themes and core with an update, whether a download is offered at all, and whether safe-update will take it

    ReadPro
  • backup-status

    The newest successful backup in UpdraftPlus, Duplicator, BackWPup or All-in-One WP Migration, which the update requires

    ReadFree
  • safe-update

    One plugin or theme per call, with selected pre/post checks and attempted file rollback on detected failure

    Needs confirmationPro
  • safe-update-history

    The last 50 runs with outcome, reason, versions and whether each can still be undone

    ReadPro
  • rollback-change

    Undoes a kept update for seven days, refused if the plugin was updated again since

    Needs confirmationFree

Refused, with the reason

  • WordPress core, GoBuildWP and GoBuildWP Pro
  • Single-file plugins, which have no directory to copy
  • A plugin with no download on offer, such as a premium plugin without its licence
  • An update whose PHP or WordPress requirements the site does not meet
  • Sites that disallow file changes or need FTP credentials to write
  • A second update while one is already running

What the change log keeps

Change ledgerExample entries
  • #6011Safe update, booking plugin 4.2.1 → 4.3.0: rolled back, fatal on /book/Irreversible
  • #6012Safe update, SEO plugin 28.4 → 28.5Undo for 7 days

Running update rounds

A monthly update round, one plugin at a time

Safe updates take one plugin or theme per call by design, so a round of twelve pending updates is twelve calls, each with its own backup check, probes and verdict. That is slower than ticking every box on the Updates screen, and it is the point: when the seventh update breaks the booking page, you know it was the seventh, and the six before it stay in place.

  • Start with updates-available and ask the agent to sort the list: minor releases of plugins with no front-end output first, then anything that renders on checkout, booking or form pages, then theme updates.
  • Name the probe URLs for each update. The defaults are the home page and up to four recently edited pages; for a forms plugin, give the contact page, and for a booking plugin, the booking page.
  • Set the changed-text threshold deliberately. Leave it strict for plugins that should not change page content, and looser for ones that print dates or prices.
  • After the round, take screenshots of the pages that matter with capture-page and compare them with captures from before, because the update's own checks do not look at layout.
  • Close with safe-update-history and keep its rows with the month's maintenance report.

Premium plugins, host backups and other refusals

Two refusals come up on most real sites. A premium plugin whose licence is not active on that site offers no download to WordPress, so updates-available reports it and safe-update refuses it. Activate the licence, or update that plugin by hand after a backup, and record that you did.

The other is the backup check. Safe updates read UpdraftPlus, Duplicator, BackWPup and All-in-One WP Migration; a nightly snapshot taken by your host is invisible to them. If the host's backup is the one you trust, you have two honest options: run a plugin backup before the round, or pass require_backup false on each call, which is recorded in the result and in the history so the decision is visible later. Before choosing the second, confirm you know how to restore the host snapshot, because the rollback copy only covers the plugin's files, not database changes the new version made.

Holding updates for a person on GoBuildWP Pro

If an agent prepares the round but a person should press go, add an approval rule that holds wppilot/safe-update. The agent's call is queued with its inputs; the person reviews the plugin, versions and probe URLs and approves from the Approvals screen, a one-time wp-admin link or the MCP client's own confirmation prompt. An agent's own confirm=true does not count as approval. With the Require a fresh backup setting also on, an approved update is checked for a backup again when it runs, so an approval given yesterday cannot run against a backup that has since aged out.

FAQ

Safe updates, with the limits attached

What happens if a plugin update breaks my WordPress site?

wppilot/safe-update detects failures covered by its selected checks and attempts to restore the copied files. Before and after the update it probes the home page and up to four recently edited pages logged out, the REST index and an admin-ajax heartbeat, and checks the error log. A new HTTP failure, PHP fatal, critical-error page or missing response can trigger file rollback and another probe. Recovery can fail: inspect the terminal outcome and keep an out-of-band restore route.

Why did every safe update roll back on a LiteSpeed server?

Before Pro 1.12.3, an update on a LiteSpeed or OpenLiteSpeed server running LiteSpeed Cache and Elementor set off a full cache purge, and that purge resets OPcache. PHP then kept OPcache off for the whole site while the safe update was still checking pages, every page needed far more memory, and on a 128 MB limit they all failed with a critical error, so even an inactive theme was rolled back. Pro 1.12.3 runs that purge once the update is finished. If a rollback reason still says the site ran out of memory, raise PHP's memory limit; the update itself may have been fine.

What if a page fails only for a moment after the update?

It is checked again eight seconds later. If every page and check answers normally then, the update is kept and the result says "recovered on recheck" with what failed first. A failure that persists triggers a restore of the copied files: the outcome is rolled_back when the old version is back, or rollback_failed when the restore did not complete, in which case the copy is kept for wppilot/rollback-change or a manual restore. With GoBuildWP 1.18.5 the reason names the PHP error, the file and line, and the plugin it came from.

Does it need a backup plugin?

By default, yes: it refuses to update unless UpdraftPlus, Duplicator, BackWPup or All-in-One WP Migration reports a successful backup from the last 24 hours, and says how to make one. You can pass require_backup false for one call, which is recorded in the result and the history, but a rollback copy of the plugin is not a backup of your database.

Can I undo an update that passed every check?

For seven days. A kept update carries a change id, and wppilot/rollback-change or the Changes screen restores the zipped copy of the previous version and its active state. The undo is refused once the copy has expired, or if the plugin was updated again since, because that would silently discard the newer update.

Why are screenshots not compared?

A screenshot needs a browser, and GoBuildWP's captures are taken by a signed-in wp-admin tab, which cannot run inside the request that holds the update open. The result points to capture-page and compare-captures instead, so a visual check can follow the update as a separate step.

Can it update WordPress core or GoBuildWP itself?

No. Core, GoBuildWP and GoBuildWP Pro are refused, because a failed update of the code running the rollback could not be rolled back by it. Single-file plugins are refused too, since there is no directory to copy. Core stays with WordPress's own updater.

How is this different from WordPress's own automatic rollback?

WordPress keeps a temporary copy during an update and restores it if the update itself fails, then deletes that copy right after a successful update and weekly. Safe updates keep their own copy for seven days, check the pages after the update rather than only the update process, and record the result so it can be undone later.

Try it on the plugin you trust least.

Take a backup, run one safe update on staging, and read the steps it reports before letting it near production.