Skip to content

Drift That Never Flips a Decision

Decision-level review clears a release when every recommendation holds, even as the score distribution underneath has moved - and that gap compounds across thousands of decisions.

Robert Griffin5 min read
Decision-Level Review Reports

The most expensive drift in a deployed agent is the kind that never changes an answer. Edit one prompt module that has nothing to do with the task in front of it, and the scores the agent produces shift systematically while every recommendation lands exactly where it landed yesterday. The review that gates the release looks at recommendations, finds them identical, and reports all clear. The shift keeps accumulating across every hiring screen, credit decision, and triage call that agent handles for the rest of the quarter.

Why Decision-Level Review Reports All Clear

The teams running those checks are not being careless. Decision-level review is the correct instrument for the failure everyone expects, an agent that returns the wrong recommendation, and it catches that failure reliably. What it cannot see is a score distribution that has moved underneath a set of decisions that did not. Sub-threshold drift is invisible to a quality process built around decisions rather than score distributions, it compounds across the thousands of decisions a deployed agent makes, and it propagates into downstream ranking, prioritization, and aggregation systems where the magnitude matters whether or not any individual recommendation flips. The blind spot is structural rather than procedural. Adding more decision-level cases to the suite does not close it, because the suite is measuring the wrong quantity.

Where the Interference Comes From

The measurement holds the scored task fixed and varies three things about the surrounding modules:

  • Volume: how much text was added to the shared context.
  • Meaning: what that added text actually said.
  • Format: how the same content was wrapped and laid out.

One controlled measurement on a deployed job-evaluation agent put numbers on this. The design held the scored task constant and perturbed only the modules that had nothing to do with it, along three separate channels: how much text was added, what that text meant, and how it was formatted. Adding a single irrelevant archetype to the shared rules file produced an effect size of d = 0.63, a paired shift of +0.17 with a bootstrap 95 percent confidence interval of [+0.03, +0.31] that excludes zero, and eight of the twelve job descriptions moving upward. The volume and format channels yielded confidence intervals that include zero, which rules out both the generic reading that any added context degrades performance and the reading that formatting alone explains the result.

Those two controls are what make the measurement useful rather than merely suggestive. The effect localizes to semantic content sitting in the same context window as the scored task, which puts the cause in the composition mechanism rather than in the model's capability. Self-attention computes pairwise interactions across the entire composed context, so a `### Persona` heading is a writing convention, not a namespace boundary. Delimiters and section titles are statistical hints the model has learned to honor most of the time. Nothing in the runtime enforces them, and nothing in the deployment surfaces the moment they stop being honored.

The blind spot is structural rather than procedural.

Prompt Modules Are Software Components

The operator-facing consequence is concrete. When scoring rubrics, workflow sequencing, and tool-selection criteria live in human-authored text that a model interprets, those files carry behavioral logic without any of the isolation guarantees a compiler or a module system would provide. They earn the same treatment code gets: a versioned behavioral suite, and a gate that re-runs it whenever anything in the composed context changes, including modules nobody thinks are related to the one under test.

Four categories of regression testing cover this ground:

  • Compositional consistency: does the assembled context still behave the way its parts did alone?
  • Module-interaction regression: does editing one module move behavior somewhere else?
  • Format-perturbation robustness: does rewrapping the same content move the scores?
  • Model-migration testing: does the suite still hold when the model behind it changes?

That is not where the widely deployed systems built on this pattern currently sit. None of the systems surveyed implements any form of regression test along any of the relevant categories, which are compositional consistency, module-interaction regression, format-perturbation robustness, and model-migration testing. Exhaustive coverage is not the alternative either. A public registry of more than ten thousand community-authored skill modules yields over fifty million pairwise combinations before anyone considers higher-order interactions, which makes full pairwise testing prohibitive. Sampled, risk-weighted checking against the combinations that actually ship is the practical posture, and it only works if the thing being sampled is the distribution rather than the verdict.

The Gate That Blocks on Score Movement

This is the class of failure our regression gate is built to catch. It runs on every change and blocks a merge that drops mean evaluation scores or introduces a new hard failure, with an adversarial floor underneath both, measured against frozen and integrity-checked evaluation datasets and scored by a judge that is itself bias-controlled and classification-routed. The unit it gates on is the score distribution, which is precisely the quantity a decision-level check cannot resolve.

Two limits sit on that mechanism, and both belong in the open.

Where the Gate Stands Today

Enforcement:
Running in continuous integration today against a reference agent, with production agents and their baselines arriving as the first flows are wired. The gate only catches drift where a behavioral suite exists, so every agent has to declare an evaluation binding before it can register at all.
Model changes:
Swapping the model behind an agent is a registry change, so the suite is re-run against the new provider before anything is promoted, and a suite pinned to one model version is treated as non-transferable until it has been re-run.

The mechanism is built and running; the quality curve it will eventually draw is still ahead of it, and saying so plainly is part of the posture.

Scope the evidence honestly. That measurement covers one model and one deployed agent, so the magnitude is a proof of the protocol rather than a constant anyone can plan around, and how far the effect travels across model families remains open. The broader lesson does not depend on the number. If behavioral logic lives in text that shares a context window, module isolation is an expectation rather than a guarantee, and the only honest way to know whether an edit stayed inside its module is to measure the distribution before and after. Decisions are what the business acts on. Distributions are what tell you whether those decisions are still being produced the same way.

Orchestration that earns autonomy.

Measure the Distribution Before You Ship

Remember what worked. Apply it faster. Prove what you did.