Found the root cause of "everything broke in 1.7.12"
👥 The problem
v1.7.12 added ?v= cache-busting to the injected <script src=...> tags. But that rollout had a catch: users with the old index.html already in browser cache kept seeing the old script URLs, while the new index.html (re-patched by WebInjectionService at plugin startup) pointed at the cache-busted URLs.
So both versions of sidebar.js ended up in the same document, each ran its own IIFE, each tried to mount a floating button + drawer. Result:
- Two floating buttons — one at the old default (bottom-left), one at the user's picked corner.
- Drawer fought over by two scripts — blank panes because each script expected its own DOM, simple-mode tabs only hidden by one of them.
- Force-hide intermittent for the same reason — the old script had no force-hide CSS.
Basically 1.7.12 accidentally made 1.7.11 and 1.7.12 run simultaneously.
🛠️ The fix
Every DOM node we create now carries data-ab-ver="1.7.13". On mount we first remove any abFriends* element missing that version marker, so the newer script always wins and the older script's artifacts get cleaned up on the next tick.
ensureFriendsDrawer() also reserves the mount slot synchronously (before the async config fetch), so a double-call during the fetch window can't spawn duplicates.
🔄 One-time action needed
Please do a hard refresh after installing v1.7.13 (Ctrl+Shift+R on web, force-kill + reopen the app on mobile) to flush the stale cached index.html from your browser. From v1.7.13 onwards the ?v= cache-buster handles upgrades automatically — you won't need to do this again.
If force-hide / simple mode / friends drawer still looks wrong after the hard refresh, that confirms a genuinely different bug I need to chase; drop another screenshot and I'll dig in.
MD5: 67DF07C7A2C77799150B0E15172C6339