Say the live churn model is v8. Training registers v9 and moves it to Staging. An evaluation job scores both on the same held-out data using AUC, a score from 0.5 (random) to 1.0 (perfect) for how well a model ranks positive cases above negative ones. In the example, v9 scores 0.931 and v8 scores 0.910. A better score is necessary but not enough: the gate also requires a complete model card and sign-off from a reviewer. Only then does the Production label move, and the score, the approver and the time are written to an audit trail.
Now a newly promoted version quietly lowers fraud recall on live traffic that the held-out data did not represent, and monitoring pages the on-call engineer. Because the previous version is still in the registry, the engineer moves the Production label back to it, serving reloads, and the bad version is tagged so nobody promotes it again. Without a registry, the same fix means searching for an old file and hoping it still loads with today's library versions.
Lineage makes the past answerable. Because each version records its data snapshot, code commit, parameters and seed, you can trace a live prediction, such as a loan denial, back to exactly what produced it, and rebuild that version from the same inputs. In MLflow, the flow is to log the model and its tags in a run, register it under a name, and have serving load it by name rather than by file path.