Ho Bae

How to Reproduce an AI Incident: A 6-Step Playbook

A person rearranges blocks on a dashboard to replay a past state, with an arrow pointing to the recovered result.

To reproduce an AI incident, you recreate the exact data state and execution conditions that produced the wrong output, then rerun the model against that bound state until the same result appears on demand.

Most teams cannot do this. When a production model returns a bad answer, the code is still in git and the model weights are still in the registry, but the data the model actually read has already moved on. The AI Incident Database catalogs a growing number of real-world AI failures, and behind many entries sits the same uncomfortable question: could the operator reconstruct what went wrong? If you cannot reproduce an AI incident, you cannot debug it, defend it to an auditor, or prove the fix actually worked.

Diagram: Run pinned replay

Why you cannot reproduce an AI incident by default

A production AI run reads from live tables, feature pipelines, retrieval indexes, and reference lookups. All of those keep changing. By the time an incident lands in your queue, the upstream table has new rows, the feature job has rerun, and the vector index has been reindexed. You still have the model. You no longer have the input.

Software engineers solved this for code decades ago with version control and reproducible builds. AI teams inherited versioned models and versioned code but skipped the hardest layer: the data state at the moment of the run. Model versioning tells you which weights ran; it does not tell you which rows, which schema, and which preprocessing produced the output you are now trying to explain.

The practical test is simple. Pick any prediction your system made last Tuesday at 2:14 p.m. Can you feed the model the same bytes it saw then and watch the same answer come back? For most enterprise teams the honest answer is no, and that gap is where incidents become unsolvable.

Check the data state, not only the model

When an AI system that worked in testing fails in production, people reach for the model first. In our experience the input is often part of the cause, so check the data state alongside the model. A schema migration renamed a column and the feature now arrives as null. An upstream job started truncating decimals. A reference table went stale and the model is scoring against last quarter’s thresholds. The weights never changed; the data underneath them did.

This is why reproducibility has to bind the run to a verifiable data state, not just a model tag. A saved Version captures the data a run used at the time, and a link between the run and that Version records which data it consumed. With both in place, reproduction stops being an archaeology project and becomes a replay you can trust.

Diagram: Original vs recreated state

A playbook to reproduce an AI incident

Here is the sequence we use with regulated enterprises. It assumes you have some way to pin and replay a data state; if you do not yet, the closing section covers where that fits.

1. Freeze the evidence. The moment an incident is confirmed, stop treating the involved tables and indexes as mutable. Snapshot or bind the current data state so it stops drifting while you investigate, because you cannot debug a moving target.

2. Identify the exact run. Find the specific inference or agent run that produced the wrong output: its timestamp, its request, and the record that ties it to the data used at the time. If runs are not bound to states, you are already reconstructing from logs and guesswork.

3. Recreate the input state. Recreate the data as it existed at run time, meaning the rows, the schema version, the feature values, and the retrieved context. This is the step most teams skip, and it is the step that decides whether reproduction succeeds.

4. Replay against the bound state. Run the same model version against the recreated state. If the wrong output reappears, you have reproduced the incident and isolated it to data plus model rather than to environment noise.

5. Compare to localize the cause. Compare the incident-time state against a known-good state. The comparison shows you which fields, rows, or schema elements changed, and that difference often points to the root cause.

6. Fix, then prove it. Apply the fix, then rerun against both the incident state and current data. Reproduction is not finished when the bug is found; it is finished when you can show the same input no longer yields the same failure.

What a reproducible incident record contains

Auditors and incident reviewers do not want a narrative. They want the artifacts. Google’s ML Test Score rubric made the same point about production readiness, scoring data and infrastructure checks with the same weight as model checks. A record that lets someone else reproduce an AI incident without your help should carry a few concrete things, and the table below separates what most teams log from what reproduction actually requires.

Element Commonly logged Needed to reproduce
Model version Yes Yes
Code commit Yes Yes
Input data state Rarely Yes
Schema version at run time No Yes
Retrieved context or features Partial Yes
Run-to-state binding No Yes

The pattern is clear. The rows everyone already fills in are the model and the code; the rows that decide reproducibility are the data state and its binding to the run. NIST makes the same point in its AI Risk Management Framework, which calls for AI systems to be documented, traceable, and auditable, not merely monitored.

Can you reproduce an AI incident today? A self-check

Run this quick diagnostic against your own stack. If you answer no to two or more, incident reproduction is currently a matter of luck.

  • Can you name the exact data state a given production run consumed?
  • Can you recreate that state weeks later, after upstream tables have changed?
  • Can you diff the incident-time state against a known-good baseline?
  • Can you rerun the model against the recreated state and get the same output?
  • Can you hand all of this to an auditor without narrating it yourself?

Where this fits in CUBIG’s operating layer

Reproducing an incident is only tractable when the run was bound to a data state in the first place. For production AI, the question is not only which model ran but which data state and which execution conditions produced the result. Syntitan, CUBIG’s AI-ready data platform, prepares and checks enterprise data for a specific AI task. It diagnoses data on six axes, Usability, Integrity, Context, Consistency, Reproducibility, and Traceability, and creates a new data Version after each successful processing run, so you can see the data used at the time and compare it with the previous state.

In practice that means the data Versions this playbook depends on are saved as the work happens, not scrambled together after the fact. Tracking changes after release and linking agent runs to that data are planned for December. For the foundational concept behind this, see what AI-ready data means; for the failure modes that trigger these incidents, see why AI fails after deployment and how schema changes break production AI. For how the same reproduction discipline extends to accountable public-sector decisions, see an audit trail for AI decisions in the public sector.

Diagram: Six step playbook

Try it on your data for free. Run a sample proof and see it on your own workflow.

AI runs on data states. It's time to get AI-Ready. Contact CUBIG.

FAQ

How do you reproduce an AI incident?

You recreate the exact data state and execution conditions the model consumed at run time, then rerun the same model version against that state until the same output reappears. Linking runs to a versioned data state is what makes this repeatable.

Why check the data state, not only the model, after a production AI failure?

The weights often did not change; the input did. Schema migrations, stale reference tables, and shifted preprocessing alter the data the model reads, so reproduction should start from the data state as well as the model.

What does an auditor need to reproduce an incident without your help?

The model version and code commit, plus the input data state, the schema version at run time, the retrieved context or features, and the binding that ties the run to that state. The last three are what most teams fail to log.

What is the difference between model versioning and linking a run to its data?

Model versioning records which weights ran. Linking a run to the data Version it used at the time shows which input it consumed, so you can replay it and compare it with the previous state, which is what reproducibility requires.