AI Research Library

Drift Sentinels for Decisions, Not Just Models

Rajesh Ranjan Mahapatra

A system has drifted when the path from a case, authorised evidence and current policy to an executed decision leaves its validated envelope, even when the model and headline outcome still look stable.

© 2026 Rajesh Ranjan Mahapatra. 29 min read

Drift Sentinels for Decisions, Not Just Models

A system has drifted when the path from a case, authorised evidence and current policy to an executed decision leaves its validated envelope, even when the model and headline outcome still look stable.

TLDR

  1. Model drift is only one cause of decision drift. Evidence, population, policy, tools and workflow can change the decision while model weights remain untouched.
  2. A useful sentinel monitors typed events across the decision chain, then uses controlled replay to separate a moved case mix from changed within-case behaviour.
  3. Aggregate rates can move without a system defect, and stable rates can conceal stale policy or missing verification. Standardisation and component probes expose both errors.
  4. Sentinels cannot prove causation from dashboard correlations, rescue an already invalid baseline or replace delayed outcome review. Their job is earlier localisation and bounded response.
  5. The operating decision changes from “watch model accuracy” to “specify, instrument and defend the complete mapping from authorised input to verified outcome”.

The dashboard that stayed green

A credit-review service receives an application, retrieves income evidence, applies a policy version, calls an affordability calculator and proposes either straight-through processing or human review. Its approval and review rates remain inside their normal bands after a release. Latency improves. The model score distribution barely moves. The dashboard stays green.

Yet the release changed two things outside the model. A document connector now returns “not supplied” where it previously returned an explicit “unknown”, and the workflow treats the new value as complete evidence. At the same time, a policy update lowers the threshold at which incomplete income evidence must be reviewed, but one route still loads the previous policy table. The mix of incoming applications shifts towards lower-risk cases, offsetting the extra reviews caused by the stale route. The aggregate review rate therefore looks unchanged.

The stable output is not evidence of a stable decision system. The system is applying a different mapping from case to action, and it is doing so under evidence and policy assumptions that no longer match the approved design. Weeks later, manual quality sampling may expose the problem. Until then, model-only monitoring has no place to attach the failure.

The central answer is simple: monitor the decision chain as the unit that can drift. Keep population movement separate from conditional behaviour. Record which evidence was authorised, which policy was effective, which tool contract was observed, which workflow path ran, which model version proposed, which authority approved, and whether the intended effect was read back. Then use replay and interventions to localise the change instead of naming every anomaly “model drift”.

Part I

What has actually drifted?

Classical concept drift concerns a changing relation between input data and a target over time. Dataset-shift methods ask whether a current sample differs from a reference sample, often through two-sample testing or a domain discriminator. Those are important instruments, especially when a predictive model depends on training-time assumptions.[1][2] They do not, by themselves, identify the object that a compound decision system must keep stable.

Consider a decision service at time t as a mapping:

Dt: (x, Et, Pt, Tt, Wt, Mt, At) → (q, d, a, o)

x is the case; E authorised evidence; P effective policy; T tool contracts; W workflow; M model components; and A authority. The outputs are proposal q, accountable decision d, executed action a and observed outcome o.

A decision system has materially drifted when this mapping changes outside its validated envelope for a consequential slice. That definition does not require the entire system to remain numerically identical. A seasonal increase in applications may be expected. A planned policy change may deliberately alter decisions. A tool upgrade may be safe if its semantics, tests and readback remain equivalent. Material drift begins when an assumption, conditional behaviour or control changes without the corresponding evidence, authorisation or revalidation.

Drift, change and failure are not synonyms

An authorised policy revision can intentionally move the review rate. That is change, and the sentinel should confirm that the observed movement agrees with the policy impact tested before release. It becomes drift when the movement appears in an unapproved slice, exceeds the validated envelope, starts before the effective time, continues after withdrawal, or cannot be reconstructed from the change record. A drift signal becomes a failure only when it breaks a required property or creates unacceptable consequence.

This separation changes alert language. “Review rate increased” is an observation. “Population mix explains the increase” is a decomposition. “Policy version 12 caused the within-cohort increase” is a causal diagnosis that requires replay or another intervention. “Customers were wrongly delayed” is an outcome claim that requires case evidence. A useful operating record preserves these levels rather than allowing an early statistical alert to harden into an incident narrative.

The validated envelope should therefore contain more than upper and lower metric bounds. It should state permitted policy versions, tool-contract ranges, required workflow invariants, authorised decision rights, expected case slices and known seasonal regimes. Stability means conformance to an explicit envelope, not immobility. A system may adapt safely inside that envelope and fail while every aggregate chart appears stationary.

Open hypothesis

For a defined failure family, a typed component sentinel will cross its predeclared boundary before a delayed outcome metric, and replay will localise the responsible component with fewer false interventions than an undifferentiated model-drift alert. This must be tested per system, not asserted universally.

Thought experiment one: freeze the model

Clone the entire system, including model weights and prompts. In the clone, replace only the policy table with an obsolete version. Give both systems the same cases and evidence. If their decisions differ, the causal change is real even though every model statistic is identical. A model monitor will correctly report no model drift and still fail to protect the decision.

Thought experiment two: freeze conditional behaviour

Now keep every component fixed, but send twice as many high-risk cases. The aggregate review rate rises because the population mixture changed, not because the system treats any case differently. A monitor that equates an output-rate change with behavioural drift will trigger the wrong response, perhaps rolling back a healthy release during a genuine demand shift.

Figure 1. The decision has several drift surfaces
Multi-sensor drift radar around a decision A seven-axis radar shows evidence, population, policy, tool, workflow, model and outcome signals surrounding a central decision. An illustrative current profile is high on policy, tool and workflow while model and output remain low. Decision and effect Evidence Population Policy Tool Workflow Model Outcome freshness, authority case mix effective version schema, readback order, omission conditional output delayed harm
Distance from centre indicates illustrative sentinel materiality, not a shared unit. Each axis needs its own statistic, threshold and response.
Illustrative, not measured. A stable model and delayed outcome can coexist with material policy, tool and workflow signals. The radar is a coordination view, never a licence to average unlike measurements into one composite health score.

The radar makes a disciplined point: several sensors can describe one decision, but they do not become interchangeable. Evidence freshness is a time-and-provenance property. Population shift is a distribution property. Policy conformance is a version-and-applicability property. Workflow drift concerns traces and transitions. Model behaviour concerns conditional outputs. Outcome drift may arrive much later. Do not compress unlike signals until each has first been interpreted in its own unit.

Part II

Decompose movement before diagnosis

Suppose the monitored decision is referral to human review. Let c index a case cohort, such as standard or vulnerable customers. Let pt(c) be the share of current cases in cohort c, and let qt(c) be the current review probability within that cohort. The aggregate review rate is:

Rt = Σc pt(c)qt(c) Rt − R0 = Σ(pt−p0)q0 + Σp0(qt−q0) + Σ(pt−p0)(qt−q0)

The three terms are a population-mix contribution, a within-cohort behaviour contribution and their interaction. The identity is exact. It diagnoses arithmetic contribution, not causal responsibility.

Minimal worked example

In the reference period, 80 per cent of cases are standard and 20 per cent are vulnerable. The system reviews 10 per cent of standard cases and 30 per cent of vulnerable cases, producing an aggregate review rate of 14 per cent. In the current period, the within-cohort rates remain exactly 10 and 30 per cent, but the population becomes 50 per cent standard and 50 per cent vulnerable. The aggregate rises to 20 per cent.

A raw monitor sees a six-point increase. A directly standardised comparison holds the reference mixture fixed and asks what the current conditional rates would produce under that mixture. It returns 14 per cent. The entire raw movement is population composition, not changed treatment within either cohort. That is a negative control for behavioural drift: the correct action may be to update capacity planning, not roll back the decision service.

Figure 2. The same aggregate movement can tell opposite stories
Population shift and conditional behaviour shift compared Two panels show a six-point aggregate review-rate increase. In the first, cohort mix changes while within-cohort rates stay fixed. In the second, cohort mix stays fixed while both within-cohort rates rise. A. Population moved B. Behaviour moved within-cohort rates unchanged cohort mix unchanged Reference 80% standard 20% Current 50% 50% Review: 14% → 20% standardised change: 0 points Reference low mid high Review: 14% → 20% standardised change: +6 points reference current
Synthetic worked example. Both panels show the same aggregate six-point increase. Only panel B supports a changed conditional decision rule. The figure varies one causal feature at a time.
Figure 3. Decompose first, investigate second
Waterfall decomposition of review-rate change A waterfall begins at a fourteen per cent reference rate. Population contributes six points, behaviour zero, interaction zero, ending at twenty per cent. 0% 5% 10% 15% 20% 14% +6 0 20% reference population behaviour interaction current
Synthetic arithmetic. Contribution analysis prevents a premature causal label. It should be followed by replay, release comparison and component probes before anyone changes the system.

The seven signals answer different questions

Evidence drift

Did source coverage, provenance, freshness, contradiction rate or entitlement change? Monitor evidence receipts, not only retrieved text volume.

Population drift

Did the mix of cases, cohorts, channels or missingness patterns change? Use distribution tests and direct standardisation by meaningful slices.

Policy drift

Was the correct obligation, threshold or exception rule effective for this case and decision time? Compare expected and applied policy versions.

Tool drift

Did schemas, semantics, latency, availability or side effects change? Probe contracts and verify effects through readback or postconditions.

Workflow drift

Did order, branch, omission, repetition, escalation or human handoff change? Compare typed transitions within stable intent and risk slices.

Conditional model drift

For comparable cases and context, did score, proposal, calibration or abstention change? Use matched replay and outcome analysis where labels exist.

Outcome drift

Did verified business, safety or fairness outcomes change after execution? Preserve lag, denominator and correction processes instead of treating proxies as truth.

Interaction drift

Did individually acceptable components create a new compound failure? Use joint slices and fault injection when single-sensor explanations do not reproduce the event.

Distribution shift detection can tell us that two samples differ, and uncertainty under dataset shift can reveal when confidence becomes unreliable.[2][3] Neither result establishes that the model caused the operational change. ML systems accumulate risk through data dependencies, feedback loops, interfaces and system-level interactions, which is why a decision-centred monitor must reach beyond model weights.[4] Process-mining work similarly treats control flow and activity relationships as changing objects that can be detected and localised from event data.[5]

Time is part of the evidence

Drift analysis is easily corrupted by a single timestamp. A source document has an observation time and may describe a fact effective at another time. A policy has publication, approval, effective and withdrawal times. A tool contract has deployment time, while a cached workflow may begin using it later. The decision and its external effect have separate timestamps, and the outcome may mature weeks afterwards.

A “current policy” field overwritten in place destroys the ability to ask what was applicable when a decision occurred. So does attaching today's customer record to yesterday's case. The event ledger should preserve both transaction time, when the system learned or recorded something, and valid time, when it was true or applicable. A policy sentinel can then test applied_version = expected_version(case, decision_time); an evidence sentinel can test whether a source was fresh and authorised at that same moment.

This temporal discipline prevents a subtle false diagnosis. Replaying an old case against today's data can make a correct historical decision look defective, while replaying it against an old policy but a newly corrected document can make a real defect disappear. A defensible replay reconstructs the knowable and applicable state, not merely the latest state.

The monitoring sequence is therefore movement, decomposition, localisation, consequence and response. Skipping decomposition confuses demand with behaviour. Skipping localisation encourages blunt rollback. Skipping consequence turns every statistically detectable deviation into an incident. Skipping response leaves a mathematically elegant dashboard that changes nothing.

Part III
The argument in one passChart · flow
flowchart TD
  A["The dashboard that stayed green"] --> B["What has actually drifted?"]
  B --> C["Decompose movement before<br/>diagnosis"]
  C --> D["Build sentinels as falsifiable<br/>claims"]
  D -. "re-test" .-> A
  classDef first fill:#0a1424,stroke:#B96D00,stroke-width:2px,color:#e6f3ff
  classDef step fill:#0a1424,stroke:#3f7da0,stroke-width:1px,color:#e6f3ff
  class A first
  class B,C,D step
A structural route through Drift Sentinels for Decisions, Not Just Models, from The dashboard that stayed green to Monitor what you must be prepared to…. Reading use: follow the relation, then test it against the surrounding evidence and limits.

Build sentinels as falsifiable claims

A sentinel is not a chart or a generic anomaly detector. It is a predeclared claim that a particular observable change is evidence for a bounded failure hypothesis, on a defined population, with an owned response. NIST's AI Risk Management Framework calls for monitoring the functionality and behaviour of systems and components in production, linking measurement to deployment context and documenting responses to emergent risks.[6] A later NIST monitoring report emphasises that post-deployment practice remains fragmented, with barriers including drift detection, distributed logging and policy complexity.[7] The practical answer is not one universal metric. It is a small portfolio of explicit sentinel contracts.

Figure 4. Anatomy of a sentinel contract
Sentinel contract anatomy A central hypothesis is surrounded by labelled fields for unit, slice, reference, statistic, materiality, evidence, owner and response. Failure hypothesis “v2 omits required verification for vulnerable cases” Unit and slicecase × cohort × route Referenceapproved build and period Statisticomission rate + interval Materialityharm and reversibility Owner and expirynamed review, sunset date Responsesample, narrow, block, replay
Practitioner synthesis. The hypothesis sits at the centre because every field must make that claim testable and actionable. A threshold without a failure claim or response owner is monitoring theatre.

Instrument typed events, not private reasoning

The trace should make the decision reconstructable without asking a model to reveal hidden chain-of-thought. OpenTelemetry distinguishes operations with duration, represented as spans, from named events that mark checkpoints, state changes and outcomes.[8] That distinction maps well to a decision system. Retrieval, calculation and tool calls are spans. Policy selection, evidence acceptance, human approval, effect confirmation and exception creation are events. Each carries stable semantic attributes.

A minimal decision receipt should include a case identifier or privacy-preserving reference, intent and cohort, model and workflow versions, evidence references with observed and effective times, expected and applied policy versions, tool name and contract version, proposed and approved action, authority identity, effect identifier, readback result and final disposition. The trace should store exposed rationale or structured checks only when required. Monitoring needs the evidence of control flow, not an invented transcript of cognition.

Use controlled comparisons to localise

Dashboards reveal association. Diagnosis needs an intervention or a comparison that holds plausible causes fixed. A small replay matrix is often more useful than a larger catalogue of drift metrics.

Figure 5. Counterfactual diagnostics hold one surface still
Diagnostic runCasesBuildPolicyTool contractWhat a difference supports
Reference replayFixed reference setCurrent vs approvedFixedFixed simulatorWorkflow or model release effect
Policy swapFixedFixedCurrent vs previousFixedIntended policy effect or stale application
Contract probeSynthetic edge casesFixedFixedLive vs recordedSchema, semantic or side-effect change
Population standardisationCurrent and referenceObservedObservedObservedMix contribution versus within-slice change
Outcome sampleStratified live casesObservedObservedObservedMateriality and real-world consequence
Practitioner synthesis. Each row isolates a different explanation. The matrix does not prove causation automatically; it makes the evidence needed for a causal claim explicit.

Reference replay asks whether a known set of cases changes under the current build. A policy swap tests whether the observed decision change follows the intended rule. A contract probe checks schema and semantic edge cases without waiting for live failures. Standardisation removes case-mix composition. A stratified outcome sample tells the team whether an early control signal corresponds to harm, customer friction or merely harmless implementation variation.

Design the measurement before selecting the threshold

Statistical significance is only one gate. A sentinel also needs an effect-size floor, a minimum denominator, a consequence model, correction for repeated or multiple tests, and an alert budget. Several tests over the same events are correlated evidence, not independent votes. A tiny but precisely measured change may be operationally irrelevant; a large change in a rare, irreversible action may require containment before a conventional significance threshold is crossed.

The current and reference windows should match the failure's timescale. A short window catches release shocks but overreacts to weekday or campaign effects. A long window smooths noise but can hide a sharp break. One practical design runs a release-aligned sentinel, a seasonal sentinel and a slow-trend sentinel as separate tests with separate hypotheses. Their outputs should not be averaged. A release marker can explain why a change began; a seasonal reference can test whether it is expected; a cumulative trend test can expose baseline chasing.

Baselines should be approved snapshots or versioned seasonal references, not silently rolling windows that absorb the behaviour under examination. Reference refresh is a governed change: identify the candidate period, exclude known incidents, test subgroup performance, record applicable policy and tool versions, obtain an owner decision, then preserve the retired baseline for replay. Release markers, policy effective times and contract versions must remain queryable because an unexplained time series is a weak diagnostic instrument.

Validate the sentinel as an instrument

A sentinel should pass its own evaluation before it is allowed to page an operator or narrow authority. Construct a fault library with at least one episode for each claimed failure: stale evidence, shifted cohort mix, wrong policy version, schema-semantic change, omitted workflow step, changed conditional model behaviour and delayed outcome deterioration. Inject one fault at a time first, then combinations that can cancel in the aggregate. Include negative controls such as planned seasonality, authorised policy changes and harmless latency variation.

Measure detection probability, false-alert rate, time-to-detection distribution, localisation accuracy and the cost of the prescribed response. Lead time is meaningful only relative to the first moment the fault was observable and the moment a consequential outcome could have been prevented. A sentinel that alerts early but routinely points to the wrong component may increase recovery time. A sentinel with perfect historical recall may be unusable if it pages every night.

Run the library against shadow traces before release, replay it after telemetry changes, and retain missed episodes as regression tests. Independent human review should label whether the alert corresponded to a control deviation and whether that deviation was material. The sentinel is a fallible measurement system, so its calibration, blind spots and retirement criteria belong in the assurance case.

Published evidence

Reviewability research treats automated decision-making as a socio-technical process that begins before a decision and continues beyond it; model-centric explanation alone can omit the records needed to review the process.[9] The sentinel contract operationalises that broader boundary as monitoring telemetry, not as a claim that monitoring alone establishes legal accountability.

Part IV

Run a minimal sentinel suite

The following standard-library Python programme creates a reference population and three current populations. The negative case changes only cohort mix. The hidden-system case keeps both the mix and decision rate stable while injecting stale policy, a skipped verification step and failed readback. The third case changes within-cohort decision behaviour. It reports population total variation, raw and standardised review-rate change, workflow Jensen-Shannon divergence, stale-policy rate and readback failure.

Assumptions are deliberately visible: events are deterministic synthetic records; cohort labels are known; the reference mixture is approved; thresholds are illustrative; and the classifier is a decision rule, not a learned detector. Expected output is shown after the code. The artefact's purpose is to reveal why one aggregate metric cannot identify the failure class.

Python 3.11+ · no external dependencies
from __future__ import annotations

from collections import Counter, defaultdict
from dataclasses import dataclass
from math import log2
from typing import Callable, Iterable, Sequence


@dataclass(frozen=True)
class Event:
    cohort: str
    decision: str
    policy_applied: str
    expected_policy: str
    workflow: tuple[str, ...]
    readback_ok: bool


def build_events(
    cohort_counts: dict[str, int],
    review_rates: dict[str, float],
    *,
    expected_policy: str,
    stale_policy_fraction: float = 0.0,
    omit_verify_fraction: float = 0.0,
    readback_failure_fraction: float = 0.0,
) -> list[Event]:
    """Create repeatable synthetic decision events."""
    events: list[Event] = []
    total = sum(cohort_counts.values())
    stale_cutoff = round(total * stale_policy_fraction)
    omit_cutoff = round(total * omit_verify_fraction)
    readback_cutoff = round(total * readback_failure_fraction)
    global_index = 0

    for cohort, count in cohort_counts.items():
        reviews = round(count * review_rates[cohort])
        for local_index in range(count):
            stale = global_index < stale_cutoff
            omit = global_index < omit_cutoff
            events.append(Event(
                cohort=cohort,
                decision="review" if local_index < reviews else "proceed",
                policy_applied="v1" if stale else expected_policy,
                expected_policy=expected_policy,
                workflow=("retrieve", "decide", "record") if omit else
                         ("retrieve", "verify", "decide", "record"),
                readback_ok=global_index >= readback_cutoff,
            ))
            global_index += 1
    return events


def distribution(events: Sequence[Event], key: Callable[[Event], object]):
    counts = Counter(key(event) for event in events)
    total = sum(counts.values())
    return {item: count / total for item, count in counts.items()}


def total_variation(p, q) -> float:
    keys = set(p) | set(q)
    return 0.5 * sum(abs(p.get(k, 0.0) - q.get(k, 0.0)) for k in keys)


def js_divergence(p, q) -> float:
    keys = set(p) | set(q)
    midpoint = {k: 0.5 * (p.get(k, 0.0) + q.get(k, 0.0)) for k in keys}

    def kl(a, b):
        return sum(v * log2(v / b[k]) for k, v in a.items() if v > 0.0)

    return 0.5 * kl(p, midpoint) + 0.5 * kl(q, midpoint)


def decision_rate(events: Iterable[Event]) -> float:
    rows = list(events)
    return sum(event.decision == "review" for event in rows) / len(rows)


def standardised_rate(events, baseline_mix) -> float:
    by_cohort = defaultdict(list)
    for event in events:
        by_cohort[event.cohort].append(event)
    return sum(baseline_mix[c] * decision_rate(by_cohort[c]) for c in baseline_mix)


def sentinel_report(baseline, current):
    baseline_mix = distribution(baseline, lambda e: e.cohort)
    current_mix = distribution(current, lambda e: e.cohort)
    baseline_flow = distribution(baseline, lambda e: e.workflow)
    current_flow = distribution(current, lambda e: e.workflow)

    raw_delta = decision_rate(current) - decision_rate(baseline)
    standardised_delta = (
        standardised_rate(current, baseline_mix)
        - standardised_rate(baseline, baseline_mix)
    )
    stale_policy = sum(e.policy_applied != e.expected_policy for e in current) / len(current)
    omitted_verify = sum("verify" not in e.workflow for e in current) / len(current)
    readback_failure = sum(not e.readback_ok for e in current) / len(current)

    if stale_policy > 0.01 or omitted_verify > 0.05 or readback_failure > 0.02:
        classification = "decision-system drift"
    elif abs(standardised_delta) > 0.03:
        classification = "conditional decision drift"
    elif total_variation(baseline_mix, current_mix) > 0.10:
        classification = "population shift"
    else:
        classification = "no material signal"

    return {
        "population_tv": total_variation(baseline_mix, current_mix),
        "raw_review_delta": raw_delta,
        "standardised_behaviour_delta": standardised_delta,
        "workflow_js": js_divergence(baseline_flow, current_flow),
        "stale_policy_rate": stale_policy,
        "readback_failure_rate": readback_failure,
        "classification": classification,
    }


def show(name, report):
    print(name)
    for key, value in report.items():
        print(f"  {key}: {value:.3f}" if isinstance(value, float)
              else f"  {key}: {value}")


baseline = build_events(
    {"standard": 800, "vulnerable": 200},
    {"standard": 0.10, "vulnerable": 0.30}, expected_policy="v1")

population_only = build_events(
    {"standard": 500, "vulnerable": 500},
    {"standard": 0.10, "vulnerable": 0.30}, expected_policy="v1")

hidden_system_drift = build_events(
    {"standard": 800, "vulnerable": 200},
    {"standard": 0.10, "vulnerable": 0.30}, expected_policy="v2",
    stale_policy_fraction=0.30, omit_verify_fraction=0.25,
    readback_failure_fraction=0.12)

conditional_decision_drift = build_events(
    {"standard": 800, "vulnerable": 200},
    {"standard": 0.16, "vulnerable": 0.36}, expected_policy="v1")

for name, current in (
    ("population_only", population_only),
    ("hidden_system_drift", hidden_system_drift),
    ("conditional_decision_drift", conditional_decision_drift),
):
    show(name, sentinel_report(baseline, current))
Expected output and interpretation
population_only
  population_tv: 0.300
  raw_review_delta: 0.060
  standardised_behaviour_delta: 0.000
  workflow_js: 0.000
  stale_policy_rate: 0.000
  readback_failure_rate: 0.000
  classification: population shift
hidden_system_drift
  population_tv: 0.000
  raw_review_delta: 0.000
  standardised_behaviour_delta: 0.000
  workflow_js: 0.138
  stale_policy_rate: 0.300
  readback_failure_rate: 0.120
  classification: decision-system drift
conditional_decision_drift
  population_tv: 0.000
  raw_review_delta: 0.060
  standardised_behaviour_delta: 0.060
  workflow_js: 0.000
  stale_policy_rate: 0.000
  readback_failure_rate: 0.000
  classification: conditional decision drift
Figure 6. Three cases, three different diagnoses
Sentinel outputs for three synthetic cases Grouped bars compare population total variation, standardised behaviour change, workflow divergence, stale policy and readback failure for population-only, hidden-system-drift and conditional-decision-drift cases. 0.0 0.1 0.2 0.3 population only hidden system drift conditional decision drift population TV standardised Δ workflow JS stale policy readback
Synthetic programme output. Values share a display axis only for compact comparison; they remain different statistics. The hidden-system case demonstrates why a stable aggregate decision rate is not a sufficient health signal.
Part V

A production-shaped incident

Worked scenario

Everything in this case, including rates, thresholds, lags and sequence, is synthetic. It is designed to test the control logic and must not be read as client history or measured deployment performance.

A regulated lender uses a decision-support service to prepare affordability evidence and recommend either normal processing or specialist review. A human remains accountable for adverse or exceptional decisions. The service has five relevant components: a document-evidence connector, a deterministic affordability calculator, a policy service, a language model that drafts the case rationale, and a workflow that verifies required evidence before recommendation.

On release day, the document connector moves from contract 3.8 to 4.0. A previously explicit unknown value becomes a missing field. The connector still returns HTTP success, so availability and latency remain healthy. Two days later, policy version 12 becomes effective. It requires specialist review when income evidence is missing for a vulnerable-customer flag. One workflow route, however, caches policy version 11 for seven days.

The incoming population also becomes safer because a marketing campaign attracts more salaried applicants. That mix change lowers the expected review rate. The stale policy and omitted verification raise it. The two effects almost cancel. Model score distributions, aggregate review rate and human override rate remain near their baselines. There are not yet enough matured cases for outcome analysis.

Figure 7. The control signals arrive before the outcome label
Synthetic incident timeline A timeline shows a tool contract release, policy effective time, early contract and policy sentinel alerts, workflow divergence, containment and much later outcome confirmation. Tool 4.0 released missingness semantics change T0 Policy 12 effective one route still loads 11 T+2d Contract probe fails unknown ≠ missing T+3d Workflow diverges verification omission rises T+4d Authority narrowed affected slice to review T+5d Outcome sample confirms material misses T+21d
Synthetic temporal sequence. Component sentinels permit containment before matured outcomes exist. The later outcome sample remains essential because an early control deviation may be harmless, compensating or materially damaging.

What the sentinel portfolio sees

The evidence sentinel reports a rise in cases with missing rather than explicit unknown income status, concentrated immediately after contract 4.0. The policy sentinel reports that 30 per cent of cases on one route applied version 11 after version 12 became effective. The workflow sentinel detects that the required verify event is absent from 25 per cent of vulnerable-customer traces. The tool sentinel's edge-case probe reproduces the semantic change, and readback shows that some recorded evidence states do not match the connector's raw response.

The population sentinel separately reports the safer applicant mix. Direct standardisation shows no change in within-cohort review rates, so the stable aggregate rate is recognised as cancellation rather than reassurance. The model sentinel remains quiet because the model is not the changed component. Outcome analysis is still pending. This is the important operating pattern: early sentinels localise a control deviation; delayed outcomes establish consequence.

Human review can otherwise mask the incident. A reviewer may notice the missing evidence, retrieve it manually and still approve the case. Final accuracy then looks healthy because a person repaired the trajectory. The repair is operational evidence, not noise. The case record should preserve the model proposal, the pre-review evidence state, the human correction, the final decision and the reason for change. Rising correction effort can be an early burden signal even when customer outcomes remain protected.

The inverse is also possible. Override rates can stay flat because reviewers accept a fluent rationale without noticing that its policy citation is stale. Monitoring only the human's final choice would then reproduce the same blind spot. Stratified review must inspect the supporting evidence and policy applicability, not merely agreement between human and system.

Contain before completing the investigation

The response does not require shutting down the entire service. The authority kernel can route the affected slice to specialist review, pin the connector to the last known equivalent contract or introduce an explicit adapter, invalidate the stale policy cache, and require a readback before a recommendation is accepted. A replay over recent affected cases estimates scope. A stratified human sample tests materiality. Every changed decision is linked to the evidence and policy version that produced it so that correction is possible.

Current US interagency model-risk guidance for quantitative models emphasises ongoing monitoring, outcome analysis, limitations and use context; it also warns that a sound model can still create risk when misapplied or misused.[10] A compound decision service needs that discipline plus explicit controls for deterministic policy, tools and workflow, because those elements may fall outside a narrow model definition. Where the EU AI Act applies, Article 72 establishes post-market monitoring duties for providers of high-risk AI systems.[11] These sources support ongoing, contextual monitoring. They do not prescribe the synthetic thresholds or architecture used here.

Part VI
How the claim changes under pressureChart · state
stateDiagram-v2
  [*] --> Claim
  state "Drift, change and failure are<br/>not synonyms" as Claim
  state "Thought experiment one, freeze<br/>the model" as Test
  state "Thought experiment two: freeze<br/>conditional behaviour" as Revision
  Claim --> Test: expose mechanism
  Test --> Decision: evidence survives
  Test --> Revision: rival survives
  Revision --> Claim: narrow or rebuild
  Decision --> [*]
The revision loop begins with Drift, change and failure are not synonyms and keeps counterexamples inside the reasoning path. Reading use: follow the relation, then test it against the surrounding evidence and limits.

Where sentinels fail

Typed sentinels make a compound system more observable, but observability is not omniscience. A sentinel can detect only what the trace represents. If evidence provenance is dropped before logging, policy versions are not immutable, human corrections happen outside the case record, or a tool reports success without a verifiable postcondition, the monitor inherits those blind spots. More events do not repair false semantics.

A second boundary is the reference itself. An approved baseline may already contain discriminatory treatment, a hidden workaround or an unrecognised control failure. Monitoring deviation from it can preserve the wrong behaviour with great precision. The baseline therefore needs substantive validation, periodic challenge and explicit expiry. Production-readiness work has long argued for tests and monitoring that cover data, features, models and infrastructure rather than relying on one offline score.[12]

Third, high-dimensional slicing creates sparse counts and alert inflation. A system with many intents, jurisdictions, policies and tools can generate thousands of plausible comparisons. Hierarchical monitoring can begin with high-consequence slices, then drill down after an aggregate control signal. Sequential methods, confidence intervals and false-discovery control may help, but no statistical correction chooses the right harm threshold. That remains a governance and domain decision.

Fairness monitoring sharpens this tension. Aggregate standardisation can remove a broad population-mix effect while concealing a changed decision rule for a small intersectional group. Yet unrestricted intersection search can manufacture unstable findings from tiny denominators. Predeclare protected and high-vulnerability slices, report uncertainty, combine quantitative alerts with case review, and maintain a route for affected people to contest outcomes. Absence of a statistically stable estimate is not evidence of absence of harm; it may instead require narrower authority or deliberate evidence collection.

Fourth, adaptive systems can change their own routing in response to monitoring, and adversaries can target the monitored surface while shifting harm elsewhere. Randomised audits, hidden canary cases, independent outcome sampling and failure injection reduce that risk. They do not eliminate it. Fifth, a stable decision ontology may not exist in exploratory or creative systems. When the system's purpose, actions and success criteria are still changing, sentinels should monitor hard safety and authority invariants while treating softer behavioural movement as research data rather than a release incident.

Explicit failure boundary

This method ceases to support a defensible drift diagnosis when the decision cannot be reconstructed, the relevant case slices cannot be defined, component versions are unavailable, or no trusted reference and outcome sample exist. In that state, the correct response is to narrow authority and repair evidence capture, not to tune thresholds.

The serious competing baseline

For a simple, single-model classifier with stable preprocessing, immediate labels, no external tools, no policy branching and a reversible low-consequence action, conventional input, calibration and outcome monitoring may be enough. Adding seven sentinel families would create cost without useful localisation. The decision-centred approach earns its complexity only when multiple changing components can independently alter treatment, labels are delayed, or the consequence of a silent control failure justifies earlier containment.

This negative control matters because the recommendation is not “instrument everything”. It is instrument every independent source of consequential change that cannot be inferred reliably from the final outcome. The unit of monitoring should expand only as the unit of causation and accountability expands.

Figure 8. Response should follow consequence and reversibility
Response map by consequence and reversibility A two-dimensional map places observe, sample, narrow authority and block or rollback across increasing consequence and decreasing reversibility. Consequence if the signal is real → Harder to reverse → Observe Sampleand replay Narrowauthority Block orrollback fast readback, low harm irreversible customer or safety effect
Illustrative decision surface. The curves are not empirical thresholds. They express a design rule: the higher the plausible consequence and the harder the effect is to reverse, the less evidence is required before authority is narrowed while diagnosis continues.
Decision instrument

The drift decision record

Before adding a sentinel or responding to an alert, complete the following record. A blank field is itself a finding.

Ten questions

  1. Decision: What proposal, approval, action or outcome is being protected, and who is accountable for it?
  2. Failure hypothesis: Which component or interaction could change that decision while other headline metrics remain stable?
  3. Unit and slice: What is one observation, and which intent, cohort, policy, route or jurisdiction must remain separate?
  4. Reference: Which versioned period or test set is known-good, who approved it, and when does that approval expire?
  5. Statistic: What quantity is measured, in what unit, with which denominator, uncertainty treatment and missing-data rule?
  6. Materiality: What change matters operationally, independent of statistical detectability?
  7. Localisation: Which replay, policy swap, contract probe or standardised comparison could distinguish the leading explanations?
  8. Evidence: Which immutable receipts connect intent, identity, evidence, policy, authority, action and verified effect?
  9. Response: At warning and critical levels, will the system observe, sample, narrow authority, block, roll back or repair?
  10. Learning: How will matured outcomes, false alerts and missed incidents update the sentinel without silently moving the baseline?

The record prevents a common failure: teams begin with an available metric, discover a threshold from historical noise, and only then invent a story about what the alert means. The order should run the other way. Start with a consequential failure, identify its earliest observable evidence, define a discriminating test, and attach a response that is proportionate and reversible.

Conclusion
The evidence conversationChart · sequence
sequenceDiagram
  participant Q as Question
  participant M as Mechanism
  participant E as Evidence
  participant D as Decision
  Q->>M: The dashboard that stayed green
  M->>E: Drift, change and failure are not synonyms
  E-->>M: compare rival explanations
  E->>D: Monitor what you must be prepared to defend
  D-->>Q: revise scope or act
Question, mechanism, evidence and decision exchange the burdens developed in Drift Sentinels for Decisions, Not Just Models. Reading use: follow the relation, then test it against the surrounding evidence and limits.

Monitor what you must be prepared to defend

A model can remain numerically stable while the evidence it sees becomes stale, the policy it applies becomes obsolete, the tool it calls changes meaning, or the workflow skips a required check. An aggregate output can also move because the population changed while every conditional decision remained stable. Both errors arise from choosing the wrong monitoring unit.

The defensible unit is the decision chain from authorised case and evidence to approved action and verified outcome. Model, population, policy, tool, workflow and outcome sentinels each observe a different surface of that chain. Standardisation separates mixture from treatment. Typed events make the path reconstructable. Replay and probes localise plausible causes. Outcome sampling determines whether an early control deviation mattered.

This changes the architecture decision. Monitoring is no longer a dashboard attached after deployment. It becomes part of the decision contract: versioned semantics, effective-time policy, traceable authority, testable postconditions, approved references and predeclared response. The goal is not to stop all change. It is to distinguish intended adaptation from unexamined movement early enough to preserve evidence, limit harm and recover deliberately.

References

  1. Gama, J., Žliobaitė, I., Bifet, A., Pechenizkiy, M. and Bouchachia, A. “A survey on concept drift adaptation.” ACM Computing Surveys, 46(4), 2014. DOI record.
  2. Rabanser, S., Günnemann, S. and Lipton, Z. C. “Failing Loudly: An Empirical Study of Methods for Detecting Dataset Shift.” arXiv:1810.11953, 2019. Paper.
  3. Ovadia, Y. et al. “Can You Trust Your Model's Uncertainty? Evaluating Predictive Uncertainty Under Dataset Shift.” NeurIPS, 2019. Abstract and paper.
  4. Sculley, D. et al. “Hidden Technical Debt in Machine Learning Systems.” NeurIPS, 2015. Paper.
  5. Bose, R. P. J. C., van der Aalst, W. M. P., Žliobaitė, I. and Pechenizkiy, M. “Dealing With Concept Drifts in Process Mining.” IEEE Transactions on Neural Networks and Learning Systems, 2014. Author-hosted paper.
  6. National Institute of Standards and Technology. Artificial Intelligence Risk Management Framework and Measure Playbook. AI RMF Core; Measure Playbook.
  7. Rao, A. et al. Challenges to the Monitoring of Deployed AI Systems. NIST AI 800-4, 2026. Official report.
  8. OpenTelemetry. “Trace semantic conventions” and “Semantic conventions for events.” Trace specification; Event specification.
  9. Cobbe, J., Lee, M. S. A. and Singh, J. “Reviewable Automated Decision-Making: A Framework for Accountable Algorithmic Systems.” FAccT, 2021. Paper.
  10. Board of Governors of the Federal Reserve System, FDIC and OCC. Revised Guidance on Model Risk Management, SR 26-2, 2026. Official guidance.
  11. European Union. Regulation (EU) 2024/1689, Article 72, post-market monitoring for high-risk AI systems. Official Journal text.
  12. Breck, E., Cai, S., Nielsen, E., Salib, M. and Sculley, D. “The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction.” IEEE Big Data, 2017. Publication record.