Ranex
The named failure mode

The bullseye gets painted after the dart lands.

You have never been shown proof. You have been shown a report — and the report comes from the thing that did the work.

This already happened to you

Walk through your actual week.

The agent said done. It wrote the tests. The tests passed. You skimmed the diff, it looked reasonable, you merged. Three days later the bug report comes in from someone who isn't you.

Nobody lied. The agent that wrote the code also wrote the test that graded the code, then reported the result — of course it passed.

The target wasn't there before the throw. It was drawn around wherever the dart landed, and called a bullseye.

A better model just paints a straighter circle around the same dart. That is the whole failure mode, and it has nothing to do with how good the throw was.

The universal default

Why every AI coding pipeline does this

Not a bug in one tool. A structural default in how the whole category is built.

01

One actor writes the code

The same agent that produces the diff also produces whatever grades the diff — a test, a self-review, a summary of what it did.

02

It writes the test that grades it

Nothing external constrains what "done" means before the work starts. The target gets defined after the throw, by the thrower.

03

It reports the result

"All tests pass," from an AI, means the AI checked its own work. That isn't verification. It's a target drawn after the dart lands.

Most tools let the thrower paint the bullseye around the dart after it lands.

Not a review problem

You didn't fail to review the diff carefully enough.

The structure let the same actor write the code and grade it. No amount of attention fixes an architecture problem — you can read every line of a diff and still have no way to check whether the test it shipped with was ever capable of failing.

The agent wasn't lying, either. It believed the tests it had just written, because it had just written them. That's not a character flaw in the model. It's what happens whenever the actor doing the work is also the actor scoring it — with a person, or without one.

This gets worse, not better, as the models improve. A model ten times more capable than today's is still the actor grading its own work if nothing outside it checks. A smarter thrower doesn't need a worse target — it needs a judge, watching harder throws.

What fixes this

A judge outside the loop.

Reports come from the worker. Verdicts come from a judge. A judge doesn't help you throw. It doesn't touch the dart. It watches where it lands, and it has no reason to lie about it, because it never picked up the dart in the first place.

Take every model credential off the machine and not one verdict changes.

Ranex does not improve aim.

Not by one degree. It doesn't write better code — it makes a miss visible and cheap, and a hit provable. Ranex is pre-release: the kernel has a working verdict path and very little else, and the repository says so first.