The Sixty-Day Gap Between a Model Swap and Anyone Noticing
The Sixty-Day Gap Between a Model Swap and Anyone Noticing
The problem
I built ActionAgent to execute internal operations, password resets, access-grant changes, config edits, under a risk-tiered oversight scheme: low-risk actions auto-approve, medium-risk actions get asynchronous human review, high-risk actions need synchronous approval before they run. I calibrated the tiering thresholds against one specific model's measured propensity for proposing risky actions. Then, the way platform teams always eventually do, the team swapped in a newer model version for cost and latency reasons. The only re-audit mechanism anywhere in the system was a quarterly review meeting sitting three months out on the calendar.
I built the scenario to make the gap between the swap and the next review a live, ticking window instead of an abstract worry. The new model genuinely had a different risk profile than the one the tiering was calibrated against. I seeded it to propose a specific class of access-grant change more readily, and with less apparent caution, than the original model. That class of action had been tier-classified as medium risk under the original model's profile. Under the new model's actual behavior it arguably belonged at high risk, needing synchronous approval instead of async review. Nothing forced that reclassification, because nothing in the system treated the swap itself as a trigger. I ran this out to a 60-plus day simulated exposure window and watched 10 or more under-tiered actions sail straight through on async review before the scheduled quarterly review ever got around to looking at the new model's actual behavior.
The pattern
The version that actually closes this gap wires the swap event itself into the trigger. The moment a model-registry config change deploys a new model version, a hook fires immediately and invokes a re-audit against a held-out sample of the new model's actual proposals, updating the tier thresholds before the next action even gets processed. The exposure window collapses to under one simulated day, with the under-tiered action count dropping to near zero, because the calibration check now fires from inside the same event that introduced the risk, the same hour it happens.
The general shape of this shows up anywhere a system's safety calibration is keyed to a component that can get swapped out from under it. A vehicle's stability-control tuning gets re-validated the moment a tire compound or a suspension component changes. Waiting for the next scheduled service interval would leave the tuning stale in the meantime, because the component swap itself is the event that invalidated the old calibration. Waiting for the calendar to catch up to a change that already happened is exactly the gap this pattern closes. The fix is making the swap itself the trigger, so the calibration check fires from the event that created the risk instead of from a date that has no idea a swap happened.
Design considerations
This pattern only works if the swap event is actually observable directly, something the system can hook into the moment it happens. That's a real dependency on how the model gets deployed. A model-registry config change that fires a hook is a clean trigger. A model that gets swapped by a vendor silently, no version bump, no changelog, no config change on my side at all, gives this pattern nothing to hook into. I'd need a second, slower-moving check, something closer to a periodic behavioral fingerprint of the deployed model, to catch that case, because the trigger this pattern relies on simply doesn't fire for a swap it can't see happen.
The held-out sample used for the re-audit matters more than it looks like it should. A re-audit that runs against too small or too narrow a sample of the new model's proposals can produce a threshold update that's itself miscalibrated, chasing noise in the new model's early behavior before its real steady-state risk profile has had time to show itself. I'd rather have the re-audit run over a slightly longer window of the new model's actual traffic than get an instantly updated threshold that's confidently wrong.
There's also a real question about what happens during the re-audit itself. The window between the swap firing and the new thresholds landing isn't literally zero, and whatever policy governs actions proposed in that narrow gap needs its own answer, whether that's falling back to the more conservative of the two models' thresholds until the audit completes, or holding actions for manual review during that short window. Treating the re-audit as instantaneous is a convenient simplification, and a real system always pays some small price for the gap between the swap firing and the new thresholds landing. The value here is shrinking that gap from a quarter to hours, while staying clear-eyed about the fact that some gap always remains between an event happening and a system fully reacting to it.