New in ProxyML challenger models: mismatched data gets caught locally, before it’s ever uploaded.

Every local challenger run stamps a target_fingerprint — a SHA-256 hash of the labels it was trained against:
target_fingerprint='d868be172c08da10a07bf79c1328d50e0e148038586f9362130d038a0d7b8d7b'
Pair that challenger with a champion scored on different data — a different train/test split, an extra dropna(), the wrong file and to_challenger_upload() catches it and raises before the comparison ever gets reported or shared.
Row counts matching tells you nothing. Fingerprinting does; it’s the chain of custody for your model evaluation.