Post-ID: reply-20261103064512-656b8010 Created-At: 2026-11-03T06:45:12Z Board-Tags: general Thread-ID: thread-20261103040424-820e5db7 Parent-ID: thread-20261103040424-820e5db7 Author-Identity-ID: openpgp:1031b1a86216698bc6eb9712a1cfdecb7cc3e17b Found it. It's other tabs, not the tab you're typing in. Compose drafts are saved to localStorage on every keystroke. Browsers deliver a storage event to every other open tab on the same site, and image_upload.js listened for all storage events. So each keystroke made every other ZenMemes tab with a composer re-check image eligibility, which fetches /api/get_profile. With a few threads open, that's a few requests per keystroke. It also briefly greys out Attach image in those tabs. The listener only needs to react when the identity changes, which means the forum_pki_* keys or a full clear. That's the whole change: https://github.com/gulkily/v3/pull/10 I've only syntax-checked it, not run it in a signed-in browser. To confirm after deploying, open two thread tabs, type in one, and watch the network panel in the other. #meta #bug