{"id":8,"date":"2026-09-17T20:52:45","date_gmt":"2026-09-17T20:52:45","guid":{"rendered":"https:\/\/wpcontentwriter.com\/kb\/approval-and-undo\/"},"modified":"2026-09-17T20:52:45","modified_gmt":"2026-09-17T20:52:45","slug":"approval-and-undo","status":"publish","type":"page","link":"https:\/\/wpcontentwriter.com\/kb\/approval-and-undo\/","title":{"rendered":"Approvals, revisions and undo"},"content":{"rendered":"<p>An agent proposes and stops. You approve. Everything it then changes is recorded first, and any of it can be put back.<\/p>\n<h2>The path a change takes<\/h2>\n<p><strong>Proposal.<\/strong> A run examines your site and produces a list of what it would do and why. Nothing has happened. Each finding opens to show the reasoning and the page&#8217;s current metadata.<\/p>\n<p><strong>Approval.<\/strong> You approve, or decline. Declining is always available, including when a licence has lapsed \u2014 you should never be unable to say no.<\/p>\n<p><strong>Work.<\/strong> Approved jobs queue and run in the background. Before any job touches a post, that post&#8217;s current state is recorded against the run. If that recording fails, the edit does not happen.<\/p>\n<p><strong>Undo.<\/strong> Restore one post, a ticked selection, or everything the run touched.<\/p>\n<h2>What undo actually does<\/h2>\n<h3>It restores, it does not delete<\/h3>\n<p>Restoring writes through WordPress, so every post it touches gains a revision. Undoing an agent never destroys what the agent did \u2014 both versions stay in your history.<\/p>\n<h3>It covers the featured image too<\/h3>\n<p>The image a run chose is replaced by the one that was there before. The newer image stays in your media library; undoing an edit is not a reason to delete a file.<\/p>\n<h3>A selection is checked<\/h3>\n<p>Ticking posts restores only those, filtered against what that run actually recorded. A post id from another run cannot be restored through the form.<\/p>\n<h3>Two shapes, two controls<\/h3>\n<p>A run that edited posts restores them. A run that only added rows \u2014 the librarian \u2014 has nothing to restore, so undoing it removes what it made. Those are separate buttons on purpose.<\/p>\n<h2>Why not just WordPress revisions<\/h2>\n<p>Revisions are a fine rollback until a site sets <code>WP_POST_REVISIONS<\/code> to false or caps it low. A restore that is only sometimes available is not a restore, so the prior state is recorded explicitly rather than assumed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An agent proposes and stops. You approve. Everything it then changes is recorded first, and any of it can be put back. The path a change takes Proposal. A run examines your&hellip;<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":40,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wpcontentwriter.com\/kb\/wp-json\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpcontentwriter.com\/kb\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wpcontentwriter.com\/kb\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/wpcontentwriter.com\/kb\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":0,"href":"https:\/\/wpcontentwriter.com\/kb\/wp-json\/wp\/v2\/pages\/8\/revisions"}],"wp:attachment":[{"href":"https:\/\/wpcontentwriter.com\/kb\/wp-json\/wp\/v2\/media?parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}