- refreshDebug state lives in parent (InstrumentDashboard) so it survives
fetchSnapshotSilent re-render (ExplanationScore no longer loses debugInfo
when onRefreshDone triggers setLoading → unmount)
- fetchSnapshotSilent: re-fetches snapshot without setLoading(true) so
ExplanationScore stays mounted with its state
- Refresh filter now catches rows where prediction_json is empty even if
actual_json is populated, and handles '[]' / null variants
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>