{"slug": "approval-is-not-publication", "title": "Approval Is Not Publication", "summary": "A developer who built an AI agent approval workflow found that of 37 queued items, 31 were awaiting review, five had revisions requested, and only one was approved — with none actually published. The engineer redefined approval as a publish instruction handed off to the Postiz scheduler, making handoff failures loud, and added verification that actions actually land after a silent Postiz outage stopped posts without raising errors. The developer argues that an operator which recommends is just a chatbot with a table, while one that acts, confirms the action landed, and complains when it did not is the only part worth building.", "body_md": "The standard architecture for putting AI into a business is easy to draw. Data\n\ngoes to an agent, the agent produces a recommendation, a human approves it, the\n\naction happens.\n\nWe built exactly that. Then I looked at the queue and found 37 pieces of work\n\nsitting in it. Thirty one waiting for review, five with revisions requested, one\n\napproved.\n\nOne approved, and nothing published.\n\nThe diagram has four boxes and everyone builds the first three. Data collection\n\nis satisfying to build. The agent is the interesting part. The approval interface\n\nis visible, so it gets attention and it gets a nice table.\n\nThe last arrow, from approval to action, is plumbing. It is also the only part\n\nthat produces an outcome. Without it, an approval queue is a place where\n\nfinished work goes to be admired.\n\nWe changed the meaning of the button. Approval is now a publish instruction, not\n\na status. When a reviewer approves, the item is handed to Postiz, the scheduler\n\nthat owns the calendar. If that\n\nhandoff fails, the failure is loud. Nothing sits in a green state while doing\n\nnothing.\n\nI think the reason is that approval feels like completion. A human looked at the\n\nthing and said yes. Psychologically the work is done, so the system gets designed\n\naround reaching that moment rather than passing through it.\n\nThere is a second reason that is less flattering. The approval step is where\n\nresponsibility transfers, and a queue full of approved items that never shipped\n\nis nobody's fault in particular. The system has no owner for the last arrow.\n\nCount the items that have been approved and ask what happened to each one. Not\n\nthe approval rate, the outcome. If those two numbers differ, the gap is your real\n\nthroughput and nothing upstream of it matters.\n\nThen check the reverse case. When the action does fire, does anything verify that\n\nit landed? Our Postiz instance went quiet once without raising an error. Posts stopped going\n\nout, the interface reported normal operation, and restarting the worker did not\n\nbring the schedule back. Nothing was checking the destination, only the send.\n\nAn operator that recommends is a chatbot with a table in front of it. An operator\n\nthat acts, confirms the action landed and complains when it did not, is the thing\n\nworth building. The difference is about twenty lines of plumbing and it is the\n\nonly part that pays.", "url": "https://wpnews.pro/news/approval-is-not-publication", "canonical_source": "https://dev.to/alaintural/approval-is-not-publication-56e", "published_at": "2026-09-15 22:58:56+00:00", "updated_at": "2026-09-16 00:07:57.923663+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "mlops"], "entities": ["Postiz"], "alternates": {"html": "https://wpnews.pro/news/approval-is-not-publication", "markdown": "https://wpnews.pro/news/approval-is-not-publication.md", "text": "https://wpnews.pro/news/approval-is-not-publication.txt", "jsonld": "https://wpnews.pro/news/approval-is-not-publication.jsonld"}}