How do you debug weird caching when users swear they refreshed?

Yo Kirupa folks, I’m migrating a frontend from REST to a CDN-fronted GraphQL API and I keep getting “it’s fixed for me but not for them” reports even after people hard refresh, and the failure mode feels like some combo of browser cache, service worker, CDN, and stale ETags fighting each other.

When you’re on-call and need signal fast, what’s your go-to observability/debugging strategy to pinpoint which layer served the stale response (browser vs SW vs CDN vs origin) without shipping a bunch of risky logging to prod?