Really not in the mood for yet another stupid #Drupal thing. I have a view showing media items on a node with a contextual filter set to the node ID. View is set up to only show published media. If I unpublish one media entity the next one doesn't show in the view, but the ones after do. But the view produces the correct number of rows, just one is empty. Sigh.
Adding a new block for testing.

Right. I still don't know why it's happening, but changing from showing the media field from the node in the view, with the media item being rendered in the field settings, to showing a rendered media item from the field relationship fixes it. Correct items for all users, with unpublished media being filtered out for everyone.

At some point in my life I would really like to no longer have to spend the short amount of time I have on this planet dealing with bullshit like this.

@jeni this isn’t something really stupid with cache tags, is it? Like when an item is deleted, it is killing the wrong one because it is working from a 0 offset array rather than a 1 offset array?
@rachel All caching is disabled. Forgot to mention, for admins all items show as they should. Anonymous users get one missing. Tried disabling SQL rewriting and that didn't help.
@jeni ok, now I need to know why…
@jeni can you reproduce it on a clean environment? Simplytestme?
@rachel It's an existing site. Just synced to local dev. If you need to know why it's because if there's a ridiculous Drupal issue to be had I WILL have it. That's why.