DEV Community

Antonio Santoro
Antonio Santoro

Posted on Originally published at iaflux.it

The Machine That Rejects Its Own Work

We gave a 69-agent system 35 minutes to work on the content of our own website. Sixteen texts reached the checks. The language check rejected 15 of them at the first pass, 94 percent. No human approved a text.

That line reads like a story about AI writing content. It is not. It is about where the review sits.

The setup

The system is a multi-agent architecture running in production at iaFlux Studio: specialized agents organized by domain, an orchestrator, and gates with the authority to block a delivery before it ships. The full architecture behind it, 181 agent roles, 19 domains, 22 blocking gates, is documented and released under CC BY 4.0 on GitHub: https://github.com/iaflux-studio/sistema-multi-agente

For this run, every text went through three independent checks before it could count as finished: an editorial reviewer, a claims verifier, and a compliance check. Each could reject on its own. None could overrule another's rejection.

What was measured

  • 69 agents ran inside a 35-minute window.
  • Total agent-work delivered: 229 minutes, compressed into those 35 minutes. At peak, 21 agents were active in the same minute.
  • 66 deliveries were produced along the chain; 494,132 characters were written in total.
  • 0 agents dropped or failed silently. Three were stopped by hand.
  • Of the 16 texts that reached the checks: the editorial check rejected 15 of 16 at the first pass, the claims check rejected 11 of 16, the compliance check gave a hard no to 4 of 16.
  • Only one text passed at the first attempt. No human approved a text: every rejection happened inside the system, before anything reached a person.

Why this is the actual result

Most "AI writes content" demos measure output speed. This measures the opposite: how much of that output a system discards on its own, and on what grounds. A 94 percent rejection rate at the first pass is not a failure. It is what the gates are built to do. The alternative is a human catching those 15 texts after publication, which does not scale and leaves no audit trail.

What this does not solve

The gates catch what they were written to catch. They do not replace domain judgment on edge cases, they add real latency and maintenance cost, and a gate is only as strict as the criteria someone wrote into it. This is one measured run, not a claim of zero errors. The rejection rate is measured on this one run, not continuously; that gap is declared in the public documentation.

Full breakdown of the three checks and the architecture behind them (Italian): https://www.iaflux.it/la-macchina-che-boccia-il-proprio-lavoro/

Production systems built on this architecture, each with a named client and measured numbers: https://www.iaflux.it/portfolio/

Antonio Santoro, iaFlux Studio

Top comments (2)

Collapse
 
doykim0903 profile image
Doyoon Kim •

Interesting experiment—seeing a 69‑agent swarm prune its own output to just 16 pieces in 35 minutes highlights the importance of self‑feedback loops. In my recent work on multi‑agent pipelines, I found that integrating a lightweight consistency validator early in the workflow cuts redundant generation by roughly 40 %. How did you design the agents’ evaluation criteria and rejection mechanism?

Collapse
 
iaflux_studio profile image
Antonio Santoro •

Thanks, Doyoon. One correction first: 16 is not what survived. Sixteen texts reached the checks, and the editorial check rejected 15 of them at the first pass.

On the design: the criteria are written, not learned. A gate is an agent whose contract gives it the authority to stop a delivery; the roster marks them one by one. In that run there were three checks: editorial, claims and compliance. They ran independently: each could reject on its own, and none could overrule another's rejection. A rejection comes as a list of findings, blocking or not; the text is corrected and judged again at the next pass.

The limits, all declared in the docs: a gate is only as strict as the criteria someone wrote into it, the claims check still has no contract of its own in the roster, and the rejection rate was measured on that one run, not continuously.

Roster and public log of verdicts (in Italian): github.com/iaflux-studio/sistema-m...

The three checks, broken down: iaflux.it/tre-controlli-tre-verdet...