I am building a small chat feature for an HR system. Shared hosting, PHP, no WebSocket, polling every few seconds. Nothing exotic.

Then a bug report landed. This is what I actually wrote, translated from Korean:

"If I open room A, it gets read. So if I close it and open another room, it should stay read. But that doesn't happen — the badge on the room I already opened is still there."

The original had two typos in it. That tells you how many times I had already retyped it.

The symptom