Architecture & Method

A green build is
not knowledge.

A passing pipeline tells you the code compiled and the tests you wrote passed. It does not tell you the work does what was asked, and it does not tell you why it worked. Those are different things, and the gap between them is where AI-written software quietly fails.

A green build is a compilation event, not a verified claim. Verification means a pass or fail check against what was actually asked, with a reason you can point to. That is the definition we hold ourselves to, and it took us an uncomfortable amount of failure to arrive at it.

What green actually asserts

When a pipeline goes green, three things have been established: the code parses, the code compiles, and the tests that someone previously wrote still pass. That is all. Green does not assert that the change does what the ticket asked. It does not assert that the tests cover the change. It does not assert that anything was learned.

This was always true, but human review papered over it. A senior engineer reading a diff carries the intent in their head and checks the change against it. Remove the human, let a model write the change, and the pipeline is suddenly the only reviewer left standing. It was never built for that job.

change compiles tests pass GREEN stops here does what wasasked? (gate) why it worked,on the record knowledge starts here a check whose failure mode is silent is not a check what the pipeline proves, and what still has to be proved after it

Green certifies the left half. The right half is where verified knowledge is produced: an acceptance gate against the request, then a recorded reason.

Where it bites: three failure shapes

The test that cannot fail. A check whose failure mode is silent is not a check. We found verifications in our own system that piped their output through a truncating command and read the exit code of the wrong process. They reported success on every run, including the runs where the thing they verified was broken. The line was green because the thermometer was painted on.

The check that passes for the wrong reason. Output can satisfy a test by accident: a stub that returns the expected constant, an error swallowed before the assertion, a fixture that happens to match. The build is green. Nothing true has been established.

The pass with no why. A model produces working code and the pipeline confirms it works. If nobody asks why it worked, the next run cannot reuse the success and cannot avoid repeating the failure that preceded it. A green build without a recorded reason is a coin that happened to land heads.

What we do instead

We run AI-written changes through an acceptance step before anything ships: pass or fail checks on whether the output does what was asked, not just whether it compiles. Behind that sits a quality score on every execution, and behind that a rule we learned the hard way.

Rejection feedback carries only sourced facts. Compiler output, log lines, query results. Never a theory about what went wrong. We proved on our own system that an unverified causal theory placed in review feedback makes the next attempt worse, because the model obeys the theory instead of the evidence. Theories stay in discussion, labelled as theories. The full incident is written up in a companion case study.

Every verification must be able to fail loudly. A check is only admitted if we can demonstrate the failure path fires. Checks that stop the line without checking are worse than the faults they were built to catch.

After a pass, we ask why. Each completed run gets an explanation step: what worked, what the evidence for that is, and what should be reused. The pass becomes a claim with a source instead of an event with a colour.

The volume matters here. Across 12,103 recorded gate decisions and 331 sourced rejection notes on our own platform, the pattern held: the runs that produced reusable knowledge were the runs where the reason was captured, not the runs that merely passed.

The uncomfortable part

We are not writing this from above the failure. The silent verifications were ours. The painted thermometer was ours. The point of publishing it is that the fix is structural, not motivational: you do not get verified knowledge by caring more, you get it by making "does what was asked" a gate and "why it worked" a required artifact.

A green build is a good morning. It is not knowledge until it can say what it knows and how.

Common questions

Does a passing CI pipeline mean the code is correct?

No. It means the code compiled and the existing tests passed. Correctness against the actual request needs an acceptance check written against the request itself.

What is the difference between testing and verification?

Testing asserts behaviour someone thought to encode. Verification is a pass or fail judgement against what was asked, with a traceable reason. Tests are one input to verification, never the whole of it.

How do you verify AI-generated code before shipping?

Acceptance checks phrased as pass or fail questions about the request, a quality score on every execution, rejection feedback restricted to sourced facts, and a recorded explanation of why a passing run passed.

Why publish your own verification failures?

Because the failure is the evidence. A claim about verification that hides its own broken verifications would be exactly the kind of green build this article is about.

Related writing