Call race.quality_report(). It returns a lifecycle state — provisional, settled, final or corrected — alongside per-field completeness, the age of the fetched copy and a single publishable verdict.
>>> race.quality_report()
{'state': 'final',
'coverage': {'overall': 0.9955, 'sectors': 0.9824, 'compound': 1.0},
'source_age_seconds': 312,
'revisions': [],
'publishable': True}
The chequered flag is not the classification. Scrutineering disqualifications and post-race penalties land hours later and rewrite rows in place — a result you fetched at the flag can be wrong by dinner without anything looking broken.
This is why f1verse caches by mutability rather than blanket TTL. Laps and telemetry are immutable and cached forever; anything a steward can rewrite is cached only until the session is final.
A cross-source check that could not run is reported as skipped, never as agreement. “Nothing was compared” and “nothing disagreed” must not produce the same verdict.