Businesses don’t buy words.
They buy orders completed. Invoices reconciled. Shipments delivered. Referrals booked. Claims processed. Every one of those was already happening before a language model touched any of it — a business is a machine for turning intent into state changes, and it was doing that long before anyone thought to put an AI in the loop.
Language, in that machine, was never the product. It was the coordination layer — the thing people used to describe what should happen, request that it happen, or confirm that it did. A model that produces excellent language has automated the coordination. It has not, by itself, done anything to the actual state of the business.
Once that separation is visible, it doesn’t go away. And it explains something that isn’t obvious until you’ve watched it happen: knowing whether an AI system actually did its job doesn’t get solved once. It evolves through stages, the same way a lot of hard infrastructure problems do — each stage solving a real problem, and creating the next one, until something in the approach itself has to change.
Here’s that evolution, and where each stage actually breaks.
Stage 1: The response is the product
Picture a traditional chatbot. The interaction is almost closed.
User
↓
Model
↓
Response
The response is the product. Nothing happens after it. So it makes complete sense, at this stage, to evaluate language quality, factuality, usefulness — because the interaction genuinely ends at the sentence. Grading the output was never wrong here. It was just a complete description of the whole system.
Where it breaks: the moment a system starts taking actions after the sentence — booking, writing, submitting, updating — a good sentence and a correct action become two different facts, and Stage 1 only ever checked one of them.
Stage 2: Grade the output, wherever it appears
So the natural next move is to keep doing what worked, just apply it further downstream — score every output the system produces, not only the final one. Human raters, then LLM-as-judge, then rubrics, at every step of a longer pipeline.
This genuinely catches more than Stage 1 did. Bad language gets flagged wherever it shows up in the chain, not just at the end.
Where it breaks: a pipeline with more than one step can have every individual output score well, and the composition can still be wrong. Retrieval finds the right document. Classification assigns the right category. Generation writes fluent, accurate language given what it was handed. Score each step alone and everything passes. Put them together and the outcome is subtly wrong anyway — not because any step lied, but because no per-output grade was ever built to check the seam between two correct steps. You can’t catch a composition failure by scoring components, no matter how many components you score.
Stage 3: Trace the execution
So the next move is structural rather than adding more grading: log what actually happened. Every tool call, every intermediate step, every argument passed between them. Now, for the first time, you can actually see the chain instead of inferring it from the final answer.
This is real progress. A trace turns a black box into something you can at least read.
Where it breaks: seeing what happened and knowing it was correct are different claims, and a trace only gives you the first one. A trace shows a tool was called with certain arguments. It does not show the arguments were the right ones, or that the call should have happened at all. This is precisely the failure mode with no error anywhere in it: the system retrieved the right documents, the model sounded confident, every tool call completed successfully, no exceptions were thrown — and the wrong business outcome quietly occurred anyway. The failure wasn’t generation. It was that nothing in the trace distinguished “this ran” from “this was right.”
Stage 4: Verify the state transition, not the system’s report of it
So the next move stops trusting the system’s own account of itself entirely, and checks against something external instead. Not “did the agent say the record was updated” — did the record actually change. Not “did the model report the payment as captured” — does the payment system agree.
This closes the gap Stage 3 couldn’t: a claim of “done” only becomes a fact once something outside the system confirms it. A test either passes or it doesn’t. A compiler either accepts the code or rejects it. Neither asks the code to describe itself. Stage 4 is that same discipline, applied to a business outcome instead of a build.
Where it breaks: this verifies the last link in the chain — the final state — but says nothing about whether an intermediate step got silently corrected by a later one, or whether the reasoning that produced the correct final state was itself sound. A system can arrive at the right database row for the wrong reason, and Stage 4 has no way to notice, because it only ever looks at the destination.
Stage 5: Verify the context was used, not just assembled
This is the failure that’s easiest to miss, because it doesn’t look like a failure at all — it looks like the system simply working, right up until it doesn’t.
You can assemble exactly the right context for a task — the right documents, the right prior steps, the right tool outputs — and the model can still behave as though it never saw the part that mattered. The information genuinely made it into the window. What failed wasn’t retrieval. It was the model’s own attention to what it was given, and that attention isn’t uniform: information placed in the middle of a long input gets weighted less than information at the very start or end, and past a certain length the drop in reliability isn’t gradual — models can hold steady and then fall off sharply within a fairly narrow stretch of additional tokens.
It compounds specifically in longer loops. As a system acts over many steps, its own earlier reasoning accumulates in the context, including any wrong turns it already took — and those don’t vanish, they sit there and get treated as established fact, with everything after built on top of them. A related pattern shows up when there’s simply enough history in the window that the system stops forming a fresh plan and starts repeating a pattern from its own past actions instead, because the pattern is present in front of it, not because it’s still correct.
Retrieval and utilization are different events. Stage 4 verifies the outcome. It still assumes the model used what it was given to get there — and that assumption is exactly where this stage’s failures live.
Where it breaks: you can build observation for whether the right context got assembled, and observation for whether the final state was correct, and still have no evidence for the step in between — whether the model actually acted on what it was handed, or arrived at a correct-looking answer some other way that will fail differently next time.
Stage 6: Observe the observer
By this point, verification is happening constantly — at every output, every state transition, every context window — at a volume no person can watch by hand. So some of it gets automated. An LLM judges another LLM’s output.
This is real leverage. It’s also a new, unobserved component.
An LLM asked to judge another LLM’s output isn’t a neutral instrument. It’s a second model, with its own blind spots — it can favor a particular position in a comparison regardless of content, favor longer answers whether or not the length earned it, favor outputs from its own model family the way an interviewer might unconsciously favor a candidate from their own school. Every one of those has a known, mostly mechanical fix: shuffle order, score length and correctness separately, judge across a different family than the one being graded. The specific fixes will age. The names of the biases will probably change again within a few years.
What won’t age is the principle: the judge is not outside the system being observed. It’s inside it. The moment you automate observation, the thing doing the observing becomes something that itself needs to be observed — versioned, recalibrated against real human judgment, checked for drift — or you’ve just moved the trust problem one level deeper and stopped looking at it.
Where it breaks: you can keep doing this — a judge watching a judge, a verifier verifying the verifier — and each layer is individually justified. But every layer costs tokens, latency, and engineering time, and none of it is free. Taken to its logical end, this stage doesn’t fail on correctness. It fails on cost.
Stage 7: Bound what gets observed
This is the stage almost nobody wants to reach, because it means giving up the idea that the goal was ever “observe everything.”
It wasn’t. It can’t be. A system where the verification cost exceeds the value of what’s being verified isn’t safer for having more checks — it’s just slower and more expensive at producing the same trust it could have gotten by checking less, more deliberately. Unbounded observation is its own kind of failure, just a quieter one: it doesn’t crash, it just makes the system too costly to run at the speed the business actually needs.
The real discipline at this stage isn’t adding another layer of checking. It’s deciding, on purpose, what needs proof and what can run on trust — which state transitions are irreversible enough to demand independent verification, and which are cheap enough to fix later that watching them closely would cost more than the mistake ever would. That’s a judgment call, made deliberately, not a default you fall into by adding tools until the dashboard looks thorough.
The mental model, stated plainly
None of the earlier stages were wrong. Each one solved something real. Grading outputs catches bad language. Tracing makes the chain visible. Verifying state transitions stops the system from grading its own homework. Verifying context utilization catches the failure that looks like nothing failed at all. Watching the judge catches the newest unobserved thing you just added. Every stage is necessary. None of them, alone or stacked, was ever going to be sufficient — because the goal was never “prove everything.” It was knowing, on purpose, what’s worth proving, and building evidence for exactly that.
The first generation of AI engineering was obsessed with making models smarter — more capable, more fluent, better at answering the question in front of them.
The next generation is quietly becoming obsessed with something else: making systems observable, deliberately and at a bounded cost. Not smarter. Legible — able to show, at every step that actually matters, what it did and why anyone should believe it actually worked.
As models keep getting more capable and cheaper to run, that improvement doesn’t touch this. The engineering constraint shifts from generation toward producing trustworthy evidence about execution — proof that a correct outcome and a merely convincing one can be told apart, by someone who wasn’t in the room, at a cost that doesn’t outrun the thing it’s protecting. That’s a systems problem, not an AI problem, and it doesn’t get solved by whatever the next model release improves.
The sentence was never the product. The evidence that something real happened because of it always was.