An invalidation can remove an old object from CloudFront's edge caches while a visitor still sees a previously cached copy. AWS explicitly distinguishes those cache boundaries.
For the CloudFront API, compare a fresh request with an existing browser session after replacing an asset. Check cache headers and consider versioned asset names for releases. Calling invalidation repeatedly will not make it reach into a browser cache that CloudFront does not control.