Didn't they change the cache TTL to 5 minutes earlier this year? So depending on exact timing it could potentially be invalidated between the updates.

If you're using the API, I think. It's an hour when using Claude Code.

It's an hour. It'll tell you the expiry time on the status line now but that information is also available in /usage.

https://github.com/anthropics/claude-code/issues/46829

Looks like what I remembered was a bug.