Recovery

Undo an unwanted change

Recovery starts from the evidence, not from a guess about what a period of activity might have touched.

  • Recovery & emergency
  • 5 min read

The order

  1. Stop the source. Pause or restrict the agent so the same request cannot repeat while you work.
  2. Read the decision. Confirm the gate that allowed it. An action that should have paused points at a permission to change, not only an edit to revert.
  3. Identify exactly what changed. The outcome links to the objects affected. Recover those, not everything from that time window.
  4. Reverse what is reversible, using WordPress’ own recovery paths.
  5. Narrow the permission before returning the agent to service.
  6. Verify both sides — the content state, and a decision record that explains why it will not recur.

Use WordPress’ own recovery

Revisions, trash, and restores all apply normally. The plugin governs requests; it does not replace WordPress’ content history, and it does not keep a parallel copy of your content.

What changedRecovery path
Post or page contentPost revisions
Deleted contentTrash, if it was trashed rather than permanently deleted
Metadata and custom fieldsRevisions where supported; otherwise a backup
Commerce dataThe provider’s own history, plus a backup
Settings and configurationUsually a backup

Recover narrowly

The temptation during an incident is to restore the whole site to this morning. That undoes everyone else’s legitimate work as well, and it destroys the audit chain you will want during the review.

Because the evidence names the specific objects, you can nearly always avoid that. Use the broad restore only when the record shows the change was genuinely broad.

Do not skip step five

An incident that ends with the content restored and the permission unchanged is an incident scheduled to repeat

Move the Ability to require approval, or to block, before the agent goes back into service.

Recovery & emergency

Keep the boundary while you fix the problem.

A good fix restores intended behaviour without creating a second path around WordPress or the governed request lifecycle.