Project news, and what's changing in the addon and the Uploader.
Addon 0.9.62: see at a glance whether premade warnings work
PremadeIQ addon 0.9.62 is out. Before, if the premade list hadn't loaded, the addon simply stayed quiet, and you couldn't tell "no premades" from "the addon can't see them". Now, on login and on entering an Epic Battleground, the chat shows one line. Either "Premade list loaded, N leaders", and everything works. Or what to do: upload one battle with the Uploader and type /reload.
The install page premade.online/install has been rewritten too. The Windows Uploader there is a single ZIP archive now, and the key point is right at the top: unpack the whole archive into a normal folder, not Program Files and not OneDrive. It also says what to do if the app doesn't open.
To update: via CurseForge or Wago, or the link in the Uploader window. After updating, type /reload or restart the game.
Uploader 0.9.18: no more silent start
If the Uploader unpacked from the ZIP didn't open at all — no window, no error — that's fixed. Windows marks files from a downloaded archive as "from the internet" and refused to let the app load one of its own files. The Uploader now clears that mark on its own files. And if the window still can't open, it tells you why instead of quitting silently.
To update: the "Update" button in the Uploader window, or the new ZIP at premade.online/install.
If, after updating, Windows says the app is blocked by Smart App Control (with no "Run anyway" button): that's how Windows 11 treats any brand-new build until it becomes known. Message us on Discord and we'll help you go back to the previous version until Windows knows the new one. More: premade.online/faq#windows-blocks.
Addon 0.9.61: getting ready to find premades in regular battlegrounds too
PremadeIQ addon 0.9.61 is out. Its main point is a first step towards finding premades not only in Epic battles but in regular battlegrounds too: Warsong Gulch, Arathi Basin, Eye of the Storm and the rest, plus rated battles and Blitz.
For now this is groundwork only. The addon now records regular battles too, and the Uploader sends them to the server along with Epic ones. There they are kept apart: they don't show on the site and don't count in any stats, rankings or odds. Details on the privacy page: premade.online/privacy. Every Epic number stays exactly as it was. Premade warnings and the odds line still work in Epic battles only, as before. Once enough regular battles are in, we'll tell you what came of it.
This version also supports patch 12.1.5: the game no longer marks the addon as out of date.
How to update: through CurseForge or Wago, or follow the link in the Uploader window — it shows when a new version is out. After updating, type /reload or restart the game.
Uploader downloads again without "Virus detected"
Microsoft has removed the false detection: browsers no longer say "Virus detected", and Windows Defender no longer deletes the Uploader archive. The site now has version 0.9.16. If you couldn't download it over the past days, try again at premade.online/install.
If Defender still complains, update its definitions: Windows Security → Virus & threat protection → Protection updates → Check for updates, then download again.
If you already had the Uploader installed, there's nothing to do.
Uploader on Mac now updates itself
Uploader 0.9.16 brings self-update to Mac, just like on Windows. When a new version comes out, the app shows a card with an "Update & restart" button. It downloads the update, checks its signature, puts it in place of the old version and restarts. Your login and stats are kept. If anything goes wrong, the previous version stays, and the card offers to download the new one from the site.
What to do: install 0.9.16 itself by hand, one last time — older versions don't have self-update yet. Download it at premade.online/install#mac and replace the old app with the new one. Keep the app in Applications rather than running it straight from Downloads: macOS won't let it update itself there.
On Windows, Uploader updates to 0.9.16 by itself as usual. On Linux, new versions are still downloaded from the same page.
Battle comments
Every battle on the site can now be commented on: what worked, where it was lost, who held the bridge. Everyone with full access can read them; you can write after 5 battles of your own in a week.
A comment is signed with your character from that battle — if you uploaded the battle yourself and the site is sure the character is yours. Otherwise it is signed "PremadeIQ player". The form shows how you will sign before you post. Your Discord name is never shown.
Links are not allowed in comments. If a comment breaks the rules, press "Report": after several reports it is hidden until the administrator decides. Battles with a discussion now show a 💬 badge with the number of comments in the battle list.
More in the FAQ: premade.online/faq#comments.
"Virus detected" when downloading Uploader 0.9.15
If your browser refused to download Uploader 0.9.15 with "Virus detected", and Windows Defender reported Trojan:Script/Wacatac.H!ml, that is a false positive. The program is the same as before. Defender flags the new archive, while the program inside it and the previous version both pass the check.
This happens because the Uploader isn't signed with a paid developer certificate, and Microsoft's automatic check is suspicious of every new version until it builds a reputation. We have already sent the archive to Microsoft as a false positive. Such reports are usually reviewed within one to three days, and then the download will work again. We'll post when it does.
What to do:
- If you already have the Uploader installed, nothing: on Windows it updates itself, and Defender leaves it alone. Mac and Linux are not affected.
- If you're installing the Uploader for the first time and the download is blocked, wait until Microsoft clears it, then download again at premade.online/install.
- The blue "Windows protected your PC" window on first launch is a different, ordinary warning for unsigned programs. Click "More info", then "Run anyway".
Questions — on Discord.
Premades and odds no longer vanish after an addon update
If the addon was updated through CurseForge or Wago, it only recorded battles until the Uploader ran again: the premade panel and the odds line stayed silent. An addon manager replaces the whole addon folder on update — including the data the Uploader had put there.
Uploader 0.9.15 now keeps a copy of that data in a separate PremadeIQ Data folder next to the addon, and addon 0.9.60 reads it from there. In the AddOns list it shows up inside PremadeIQ; there is no need to delete it.
What to do: on Windows the Uploader updates itself; on Mac and Linux, download the new version from the install page: premade.online/install. After the new Uploader first runs, restart the game once. To check that everything is in place, open the addon settings: the "Local database" block now has a line about premade and odds data.
Players who left the battle: both teams, and a loss for leaving
The "Left the battlefield" block on the match page now shows both teams. Until now it listed only the losing side: we read a leave from a won battle as more likely a dropped connection. But players leave winning teams too, and hiding that was wrong.
The second change: a player who leaves a battle their team then loses is now charged that battle as a game and a loss. Before, such a battle simply vanished from their record: a leaver has no line in the final scoreboard, so walking out of a losing battle "paid off". Leaving a battle your team wins counts as neither a win nor a loss.
The caution stays the same: a leave only counts when the final scoreboard was captured in full and the player has no line in it at all.
Addon 0.9.56: a warning about mercenary groups with no leader
Not every premade comes with a known leader: sometimes it is a group that enters the other side as mercenaries. Addon 0.9.56 warns about these too. When the enemy team holds mercenaries who keep entering battles together, a yellow banner says "Possible premade on the enemy team: mercenaries who keep queuing together", and the players panel gives them a "Mercenary group" block of their own. If a known premade has already been spotted in the battle, only a chat line mentions the group, so the banners don't talk over each other.
This needs Uploader 0.9.14. On Windows it updates itself; on Mac and Linux, download the new version from the install page: premade.online/install. The same switch as the other premade warnings turns it on and off.
On the site, the "≈ likely premade" mark now goes only to mercenaries who have entered battles together before: solo players who took mercenary mode for a faster queue no longer get it.
All-time rankings, a possible premade without a leader, and addon 0.9.55
The rankings now switch between "Per match" and "Total". Total is the all-time sum over the battles in the PremadeIQ database: who dealt, healed, killed and captured the most. Characters of one player are added together. Only battles someone uploaded count, so it is not a character's full record.
The site now notices a premade even without a known leader. When mercenaries on one side have entered battles as mercenaries together again and again, the match page shows a "Possible premade" line, and the battle list frames that mercenary stack. How we tell is on the Detection page.
With addon 0.9.55, "my place" in the rankings is more accurate and no longer mixes you up with the friend you queue with. The Uploader download link in the addon now points to premade.online.
Full player rankings
The "Best per match" boards on the home page now have a "Full rankings" link. It lists everyone with at least 5 epic battlegrounds in the last 30 days: healing, damage, killing blows, objectives. Find any player by name, and if you signed in with Discord, the page shows your own place right away.
A reminder: the site has a new address, premade.online. The old one still works and sends you there, but it is worth updating your bookmarks.
New address premade.online and an Isle of Conquest fan game
PremadeIQ has a new address: premade.online. The old one still works and sends you to the new one, so bookmarks and links keep working, but it is worth updating them.
No need to reinstall the addon or the Uploader, or to sign in to the Uploader again. They work as before and still show the old address for now, which keeps working. The new one comes with their next updates.
On the website, sign in with Discord once more: the browser keeps your sign-in separately for each address.
One more thing: the site now has a fan game, “Isle of Conquest: Commander” — premade.online/game. You are the raid leader: 40 pugs, eight groups and your voice in /rw against the premades of well-known leaders. Capture nodes, roll out vehicles from the Workshop and the Docks, break the gates, catapult fighters over the wall and jump from the gunship. Mechanics and map are checked against the live battleground. It is all 3D right in your browser, nothing to install. The game is linked in the site menu and on the home page; the interface is in English and Russian.
Uploader for Linux
The Uploader now runs on Linux too. If you play WoW through Lutris, Steam (Proton), Bottles or Heroic, Steam Deck included, your battles reach PremadeIQ the same way they do from Windows and Mac, and the addon gets the premade list and player stats.
There are two versions. With a window: the same window as on Windows, with an applications-menu entry and start at login. Console: no window, a few commands in a terminal, a much smaller download. Both can run as a background service that uploads your battles the whole time you are logged in, on a Steam Deck in Game Mode too.
The app finds the game inside Wine by itself, a second disk included. If it does not, `set-wow-root` with the game folder settles it once. You sign in with Discord in the browser, or with a code on your phone when there is no browser at hand.
The install page has a Linux section with the steps: premade.online/install#linux. You need a 64-bit PC and a reasonably recent system: Steam Deck, Ubuntu 22.04 or newer, Fedora 36+, Debian 12+, Arch, Mint 21+. This is the first Linux version. If something does not work, post the output of `premadeiq-uploader detect` in Discord.
Addon 0.9.53: players by premade, and guilds on your watchlist
The Tracked players panel now splits players by premade. Everyone tracked on a side used to share one grid, and how many came from which premade was hidden in the tooltips. Now each premade gets its own block with a heading: whose premade it is and how many of them are on the field. The biggest block comes first, and the leader comes first within it. A lone member gets a block too: members of different premades often queue without their leader, and now you can see who belongs to whom. Possible members (?) sit in the block of the premade they are linked to and keep their question mark. A player listed in two premades sits in the one with more people in the match. The other one is in the tooltip.
The panel is also more compact. Buttons now show names without the realm, which stays in the tooltip. When two players in the match share a name, the realm stays on the button too. Clicking still targets the player as before.
You can now add guilds to your watchlist. The addon settings now have two buttons next to the input field: Player and Guild. A guild can be given by name or with its realm, for example `Top Gun-Ravencrest`. Guild names repeat across realms, so the realm makes the match exact. In battle, players from watched guilds appear in the panel in their own block after the premades. Anyone among them who is in a premade stays in the premade's block.
The scoreboard carries no guilds, so Uploader 0.9.12 brings them. Twice a day it puts a "character → guild" list into the addon folder, covering the players the PremadeIQ database has seen. That is the limit: a player the database has never met will not show up. Each guild in your list shows how many of its players are known, so you can see at once whether it was found. The database needs a few days to learn guild realms. Until then, a guild given with its realm may also match same-named guilds on other realms. The list itself still lives only on your computer and is never sent anywhere.
The addon updates through CurseForge, Wago or the Uploader. The Uploader offers its own update within a few hours. To skip the wait, open it and in the settings press "Check for updates", then "Update & restart".
Six months of premades: one stack is left
We compared how premades on epic battlegrounds changed from 18 April to 30 September, across every battle our users uploaded.
In spring, stacks of three groups or more came from two networks — Ripley's and Zénie's, about half each. Since July, 83 of 85 such stacks came from one network: Ripley, Bóm (also known as WB) and Priestié. Most other leaders shrank: Nøway and Kaizër stopped bringing a second group, while Revvshi, Zénie and Larkushot bring one half as often as in spring, or less.
Size decides everything. One organised group wins 64% of its battles — good players, still beatable. Two groups win 91%. Three or more: 115 battles, 115 wins. The average stack of Ripley's network grew from 13 to 18 players over the six months, and Ripley plays several characters: on one or another he was in 97 of his network's 99 big stacks.
We found no new stacks forming without a known leader in September: the largest such group never brought more than one party.
The takeaway is simple. A group of friends is part of the game. A stack that never loses isn't a battle — it's a result decided in the queue.
The full breakdown is a 90-second video on our Twitch: twitch.tv/videos/2887936658
A helper on the site: "?" marks, a tour, and answers to your questions
Next to the harder parts of the site (★, ⛓, ≈, crowns, access levels, filters) there are now "?" marks: tap one for a short explanation. The "?" button in the bottom-right corner opens help for the current page: what is on it, the terms it uses, and where to read more.
The dashboard and the Battles page open a short tour on your first visit. You can take it again from the same "?" button.
If the help does not have your answer, you can ask the helper in your own words in the same panel. It answers from the site's help and FAQ, cannot see players or battles, and can be wrong. The helper is available to everyone signed in with Discord, up to ten questions a day. How questions are handled is described under "AI helper" on the privacy page.
And the dashboard finally fits a phone screen.
The Battles page: the whole history, and every battle of any premade
With full access, the site header now has Battles and a player search box. Battles is the whole history, from the very first battle, 50 per page. Filters: dates, map, winner, player (together with their alts), premade and "only battles I uploaded". The filter lives in the address, so a filtered list can be shared as a link, and on a match page the "Newer" and "Older" buttons walk the same list.
The Premade filter shows every battle with a premade, without one, or the battles of one particular leader. We count a battle as that premade's when the leader (on any of their alts) played together with their people, or when most of their roster gathered even without the leader. The Premades column shows who was on each side. The Enemy premades tab and a leader's profile link to "All battles of this premade".
The player search needs only the start of a name; case and accents don't matter.
Uploader 0.9.9: no longer holds up shutdown, and shows the trial week
If Windows told you PremadeIQ Uploader was preventing shutdown or restart, that was our bug. The close button hides the window to the tray, and the same thing happened when Windows was closing programs. In 0.9.9 the app closes at once when the system ends the session; the close button still hides it to the tray. We also fixed "Quit" in the tray menu: it hid the window while the process kept running with no window and no icon. The access line is more honest too. It no longer thanks you for Patreon — there has been no paid tier for a while. With full access it shows how many matches you have handed over this week, and during the trial week how many days are left and how many of the five matches you have. The app offers the update on its own within a few hours. To skip the wait, open it, press "Check for updates" in the settings, then "Update & restart". The addon does not need updating.
Your first week comes with full access
On September 12 we wrote that the five-matches-a-week bar keeps out an account spun up for ten minutes to look around and leave. It turned out that the people who want to look around first are newcomers, and the bar was keeping out exactly them. Most people who signed in with Discord never got as far as a first upload and only ever saw the leaderboard: the premade catalog, the breakdown of every battle, alts and premade regulars had nothing to show them. And those who do start handing over data almost always do it on their very first day. So from today the first seven days after your first sign-in come with full access straight away, before a single upload. The top of every page shows how many days of the trial week are left and how many matches you have handed over. After that the rule is the same as before: five matches in seven days through the Uploader and the access stays; miss it and nothing is lost — as soon as five matches land within seven days, it comes back. The trial week is given once per account and counts from the first sign-in: anyone who signed in this week already has what is left of it, anyone who signed in earlier does not. It also goes only to Discord accounts that were at least a month old at that first sign-in — otherwise it could be claimed again every week with a fresh account. If you already hand over data, there is nothing to do, and neither the addon nor the Uploader needs updating.
Addon 0.9.51: checking the odds at the moment you see them
The odds line says it is right about 72 times out of 100, and to be honest: nobody has measured that figure at the minute you actually look at the number. It is computed on the starting roster, which is taken later — no sooner than two minutes into the battle, and only once at least 38 players are visible on each side. The addon, meanwhile, freezes its forecast by its own rule, as soon as the scoreboard stops filling — sometimes before the gates even open. From version 0.9.51 a match carries to the server what you saw at that moment: the percentage shown, the battle clock, how many rows each side had and how many of them were found in the winrate table. The record holds no names — only numbers that were already on your screen. With the odds turned off, nothing is recorded. Why this matters beyond checking the caption: going through past battles we found a signal the forecast does not use yet — head count. Over 547 battles in the last two weeks, the starting rosters differed by one or two players in 59 cases out of 100, and the bigger side won 75 of 100 of those. Adding that signal noticeably improves the forecast, but we measured it on that later roster, not on the scoreboard the addon freezes its number on; while the board is still loading, a gap in rows may just mean a slow load rather than an advantage. A word about our own mistake: the first count promised as many as 83–91 wins out of 100 with a 3–5 player edge, but that was an artefact of our analysis — it lost players who had left the battle, and there are always more of those on the losing side. We also looked at item level: on its own it picks the winner in 56 battles out of 100 and adds almost nothing on top of winrates, but a fair check was blocked by storing only the current item level — the server now keeps its history. Nothing visible in the addon changed; the forecast is computed as before. In two to three weeks the collected records will show how often the shown percentages come true and whether head count belongs in the forecast. The addon updates through CurseForge, Wago or the Uploader; the Uploader itself needs no update.
Names in the deserter list are full-access only
Today we opened nearly everything that used to cost money, and on the same day one thing moved the other way. The list of people who walk out of a battle ranks real players by name — it is, plainly, a list of personal accusations. On the forum we keep our own rule of not naming anyone when we write about premades, and handing out a name-by-name shame list for a single upload would have been a double standard. So names and profile links in that list now open at full access: the same five matches over seven days as every other tool that carries names. Everything else stays with anyone who contributes: how many times a person left, when it last happened, which faction and class they played. The scale of the problem is still visible — only who to go after is not. Separately, about what we do not do: a deserter mark is never a guess. Only observed cases count — somebody saw the player leave — and not "low numbers on the final scoreboard". That is why we once removed over a thousand marks placed by a statistical heuristic: a damaged scoreboard capture looks exactly like a walkout, and such a mark accuses the innocent. The list stays a way to understand what happens in epics, not a weapon against a particular person.
No more paid access: matches open it, not a subscription
The King of EBG tier cost $9 a month on Patreon and locked away a dozen and a half things: search for any player, their card with match history and gear, a full scoreboard breakdown of every battle, enemy leaders with their regular companions, alt links. From today all of it is opened by contributing: five matches received from you over the last seven days. There is nothing to pay for anywhere. There are two thresholds now, deliberately. The premade catalog, the win chances, deserters and the live roster read — everything the addon does during a battle — still open with a single upload a week: someone who installs the addon and plays their first epic has to see it work that same evening, not after a week of service. The five-match bar applies only to the web tools that carry names and connections. Plainly about what that bar does not do: it will not stop a premade leader, who plays epics daily and clears five faster than any of us. What guards against scouting is not the bar but the exchange itself — to read the database you must hand over your own matches, and those matches land in the same database and work against whoever handed them over. What the bar does keep out is an account spun up for ten minutes to look around and leave. How many matches already count is shown on your dashboard: instead of an impersonal "higher tier required" it now says how many are left. Patreon has not gone anywhere, but it is support now and nothing else: the server costs money, and anyone who wants to help, helps. It no longer buys access, and nobody subscribed loses anything.
The odds run on fresh data, not on the day before yesterday's
The in-game odds line works off the winrate table the Uploader delivers, and that table was reaching the game a day and a half to two days late. Three things added up. The app fetched the table once a day — and only at the moment the game rewrites its own files, which is to say only while somebody is playing; with the game closed it fetched nothing at all. And the addon reads that file only at login, which is a WoW limitation. So the table was downloaded shortly after you left the game and read only at your next session: a match ran on data from the session before last. We measured the cost over 723 matches — the ones where a forecast appears at every age of the data — and a fresh table picks the winner in 71.8 cases out of 100, yesterday's in 70.3, a two-day-old one in 67.8. Four percentage points is not rounding: in 61 of those 723 matches the two-day-old table named the other team as the favourite. The app now checks on its own clock, every three hours, whether or not the game is running, and the server rebuilds the table hourly instead of every six hours — so the data is fresh by the time you log in. To keep frequent checks cheap, the app tells the server which version it already holds and usually gets back a short "nothing newer" instead of two hundred kilobytes. One more fix: the addon archive ships an empty winrate file — it is there so the addon works straight after installation — and updating the addon through CurseForge overwrote the real table with it. The app saw a file that was present and left it alone, while the addon shows no odds at all for an empty table, so the line simply vanished. The app now recognises its own file and refetches anyone else's. Needs Uploader 0.9.8 — the app updates itself; the addon needs no attention.
The odds got honest: epics only, and no number out of nowhere
We went through the win-chance forecast end to end — from how the win rates are collected to the arithmetic in the game — and re-measured the model itself on fresh data. The model is fine: across 769 battles it picks the winner in 73 cases out of 100, and its percentages mean what they say (where it promises 80%, 80% win). Around it, though, were four places where it did not behave as advertised. First: the odds line appeared in any battleground, 15-a-side ones included — even though the win rates come from epic battlegrounds only, and that is where the accuracy was measured. In a regular battleground the number looked just as confident with nothing behind it; the odds are now an epic-only feature. Second: the forecast is meant to freeze on the starting roster, but at the very moment of freezing it was recomputed first — without the people who had already left — and the spoiled number was what got kept. It now keeps what was computed on the full roster. "The board has filled up" is also judged by the smaller of the two teams: our half finishing while theirs emptied left the total unchanged, and the forecast settled too early. Third: the "Show win chances" checkbox removed the line from the panel, while the pop-up and the premade warning kept announcing odds; it now turns off all three. A typed `/piq odds` still answers — that is a question asked out loud. Fourth, and worst: when the win-rate table was missing or broken, the addon did not stay quiet — it showed a flat "50% — 50%" captioned "0% accurate", which arithmetically is zero times anything, a coin toss wearing the look of a calculation. An unusable table — unknown format, older than six weeks, or missing its coefficients — now reads as "no data". Uploader 0.9.7, for its part, no longer overwrites a working table with a partial answer from the server: yesterday's data beats today's emptiness. You need addon 0.9.49 and Uploader 0.9.7; update the addon through CurseForge, Wago or your addon manager, and the app updates itself.
Win chances before the gates open, and the Uploader finds your game
The addon can now weigh both teams before the gates open. It reads both rosters off the scoreboard, checks them against the win-rate table the Uploader brings down, and shows one line in the panel: who is ahead, and by how much. Two things go into it — each side's average win rate and the share of players we know nothing about yet; on past battlegrounds that call picks the winner in roughly 72 cases out of 100, and the figure sits right next to the percentages so nobody mistakes them for prophecy. One button copies the line into chat. On honesty: the forecast is computed from the starting roster and then frozen. It used to be recomputed all match long, and rosters change as a match goes — the losing side empties first, so the number would drift obediently towards the outcome already taking shape, looking far shrewder than it is. The line now says what it is doing: reading the board, computing, final. A checkbox in the settings turns the whole thing off. It needs Contributor access, like the premade catalogue does, because both are built from battles players hand in themselves. You need the current addon (0.9.48) and the current Uploader (0.9.6): the win-rate table reaches the game through the app. About the app itself. It no longer gives up when the game is not where it usually is: it looks for your World of Warcraft folder in six places, and when it finds nothing it shows exactly where it looked and lets you point at the folder yourself. There is a "Check for updates" button now — the app used to ask the server only inside a sync cycle, which starts after a battleground, so anyone who had not played for a fortnight never heard about a fix. News is back on the main screen, settings moved to their own tab, and your Discord avatar sits next to your name instead of a circle with a letter.
Addon 0.9.43 — you can now see when your battles stop leaving your machine
The addon has been updated (0.9.43). The Uploader is a separate program and it fails quietly: the addon keeps recording, nothing goes out, and you only find out when your access to the premade catalog lapses. The previous hint could not help — it spoke to players whose list was empty, so it stayed silent for exactly the people who had been contributing and then stopped. On entering an Epic BG the addon now counts the battles logged since your last upload, and if the Uploader has not run for three days or more it says so — at most once every three days, under the same checkbox as the premade warnings. It also explains what that costs you: catalog access needs one upload every seven days, so under a week of silence the addon tells you roughly how long is left, and beyond it, that access has most likely lapsed and how to reopen it. Until now you found that out afterwards and without an explanation. Third: `/piq` now reports the upload state on demand — how many battles are waiting and when the Uploader last ran, including when everything is fine. The install address the addon shows in game is also shorter now. WoW has no clickable links and chat text cannot even be selected, so the address gets retyped by hand and a shorter one is less to type. Update through CurseForge, Wago or your addon manager.
No Discord server to join, and the Uploader link finally works
Two things had been turning people away at the door. First: the in-game `/piq uploader` command printed the address of a repository that does not exist — so everyone who wanted to share their matches landed on a 404. That had been true since the addon's first public release in April. The link now points at the install page, and the addon opens a small box with the address already selected: chat text cannot be selected in WoW, and nobody retypes a URL by hand. Second: signing in to the site and downloading the Uploader required membership of our Discord server. Over four months the login log shows thirteen people stopped by exactly that — more people than the entire current set of contributors. A Discord account is now enough: nothing to join, and Discord goes back to being the place you can ask a question rather than a turnstile. The addon also stopped being quiet about the thing that matters most: the list of known premades is community data, it arrives with the Uploader, and without it the in-match warnings genuinely have nothing to match against. That used to look like a broken feature; now the addon says once a week what is missing. And one more line after a match: "Match recorded" means "kept in memory" — the game writes to disk only on `/reload` or logout, and until then the Uploader cannot see it. Addon 0.9.42 — update via CurseForge, Wago or your addon manager.
PremadeIQ addon 0.9.40 — your own watchlist, solo raid leads in the panel, six languages
The addon update (0.9.40) is out. The headline is a personal watchlist: copy a character name in game, paste it into the options, and that player gets marked in the panel whenever they end up in a battleground with you. The list is private in the literal sense — it lives in its own file on your computer, is never uploaded, is visible to nobody else, and feeds nothing in premade detection. Their row reads "on your personal watchlist", not "premade member": the addon does not claim what it does not know. Second: solo raid leaders — people who take raid lead but bring no premade — now show up in the panel itself instead of only in a line of the warning. They get their own mark and the caption "leads the raid, no premade"; they never get the premade-leader star, and when someone does both, which is roughly half of them, the panel says both rather than picking one. Third: a minimap button, draggable and switchable off, plus an entry in the game's own addon compartment. Fourth: language. The addon advertised five languages, but German, French and Spanish were 22% translated — the whole options window, the tooltips and the links read in English, and Germans are 22% of the players in our data, the second group after English speakers. All three are now complete, Italian is added, and the addon's language can be forced without touching the game client's. In-match warnings stay English whatever you pick: their audience is the battleground, and it does not share a language. Two fixes as well: the options no longer drift rightwards row by row, and the panel can no longer go silent until a UI reload because of a single parse error. Update via CurseForge, Wago or your addon manager.
The match page shows who did not make it to the end
The match page only ever showed half of the trade: players tagged "joined late", and an empty "Left the battlefield" section underneath them. The replacements were there, the replaced were not. The data for the other half had been in the database all along — the addon records the scoreboard as it stood early in the match, by name and for both teams, and all that was missing was comparing it against the final one. That section now fills in. For scale, an ordinary Alterac Valley: 21 players joined as replacements, 22 never reached the end, so the Horde turned over more than half its roster in a single match. On the cautious side: a departure only counts on the LOSING side (leaving a won match is almost always a disconnect), only when the final scoreboard was captured in full, and only when the addon did not report that some rows could not be read. Addon 0.9.39 fixes the neighbouring bug: a player whose identifier the game refused to hand over could be mistaken for a leaver. The desertion counter is fixed too — one departure noticed by two players used to count twice. Update via CurseForge, Wago or your addon manager.
PremadeIQ addon 0.9.38 — it no longer breaks the game's own warnings
An urgent update (0.9.38); update if you play on patch 12.1. The premade headline was posted to the same centre-screen frame the game uses for its own announcements, the "The gate has been destroyed" kind. In 12.1 that became unsafe: after our message the frame stayed flagged as addon-touched and then errored — not only on our text, but on the game's own announcements too. In other words the addon was interfering with someone else's interface mid-fight. That frame is no longer used at all. Nothing is lost: the PremadeIQ banner shows the same headline in the same colours (red = premade confirmed, amber = possible) and additionally lists the leaders, which the single-line frame could never do. Update via CurseForge, Wago or your addon manager.
PremadeIQ addon 0.9.37 — the "enemy group leaders" counter no longer shows a false zero
The addon update is out (0.9.37), built for patch 12.1 "Curse of Ula'tek" — it is no longer flagged as out of date. The substance is this: in 12.1 the game stopped telling addons which enemies lead a group. The old counter then honestly returned zero — simply because it is no longer allowed to look — and on the match page that would have read as "this team brought no pre-formed groups". The addon never claimed that, and we will not publish it as fact. It now counts separately the enemies the game refused to answer for, and in that case no estimate is shown at all rather than a zero. If the game does answer, the leaders actually spotted still count as a lower bound. Premade detection itself is unaffected: it is built on shared matches, and enemy group leaders keep being recovered from reports by players of the opposite faction, where no such limit applies. Update via CurseForge, Wago or your addon manager.
Uploader app 0.9.1 — the "takes raid lead" notices finally reach the game
The desktop app update is out (0.9.1). We separately tag players who run no premade but regularly take raid lead, and the server has been sending that list since 4 August — but the app did not know the field and silently dropped it while writing the addon's data file. As a result no in-game notice about such players could ever appear, no matter how many were tagged. The list is now written and the addon sees it. The version number was bumped too: the shipped build and the published version were both called 0.9.0, so the app considered itself current and would never have updated — with 0.9.1 self-update works again.
PremadeIQ addon 0.9.36 — the "takes raid lead" notice no longer goes missing
The addon update is out (0.9.36). Besides premade leaders we separately tag people who run no premade but reliably take raid lead. A neutral one-liner about them appeared at the start of a match — but only when there were no premades in it at all, which is exactly where that context matters least. The line now comes last in the regular warning and is repeated in the banner; the premade verdict itself is unchanged. The standalone notice also got easier to catch: with no premade in the match it shows on the centre of the screen, not just in chat. Still no sound — it is context, not an alarm. Update via CurseForge, Wago, or your addon manager.
PremadeIQ addon 0.9.35 — reloading the interface no longer eats a match
The addon update is out (0.9.35). If you ran `/reload` during a battle, that match could disappear from the site entirely: the addon only recorded your join time at the start, a reload wiped it, and the server concluded you had been in two matches at once. Your join time now survives a reload — it is stored together with a fingerprint of the battle itself and restored only when that fingerprint matches, so two back-to-back matches on the same map cannot be confused. A related fix ships with it: after a reload the addon could record "who was here from the start" from the final scoreboard. Such a list contains everyone who made it to the end, so players who joined as replacements stopped counting as late arrivals — which is exactly what protects them from being marked as having left. Update via CurseForge, Wago, or your addon manager.
PremadeIQ addon 0.9.34 — the panel now covers both teams
The addon update is out (0.9.34). The known-premade panel used to list the enemy side only — it now has two sections, your team and theirs. Buttons behave identically in both: left-click targets a player, right-click sets them as focus. An empty section is not drawn at all. The panel can now be minimized into a small button with the counts — drag it anywhere, click it to bring the list back, and it works during combat too. Long `Name-Realm` strings are no longer clipped: column width follows the longest name on screen. Two new settings: panel scale (70–150%) and column count (1–6). Update via CurseForge, Wago, or your addon manager.
PremadeIQ addon 0.9.33 — matches you joined late are no longer lost
The addon update is out (0.9.33). If you dropped into a battle already in progress — Wintergrasp, Alterac Valley and Ashran all allow it — the whole match could vanish: absent from the site, absent from premade detection. The server concluded you had been in two matches at once, because the duration the game reports measures the battle itself, not how long you were in it. The addon now reports when it entered, and the match counts. On our data this was losing 2.5% of all matches. Also in this update: people marked as "takes raid lead, runs no premade" no longer raise a premade alert — they get one neutral line instead; and the addon records who was on the scoreboard before substitutions, so the "left the battle" mark stops sticking to someone who merely arrived later. Update via CurseForge, Wago, or your addon manager.
Fairer "left the battle" marks
We found and fixed a bug that marked players as having left a battleground when they had not. The final scoreboard sometimes arrived from the game empty — zero damage and healing for people who fought the whole match — and the server read those zeros as a walkout. Now the addon (0.9.32) waits for readable numbers before saving the result and reports honestly when it could not read them; the server ignores such a match entirely and never marks someone who earned honor on par with their team or joined as a replacement. 1086 wrong marks were removed from the database and the counters rebuilt. The "left" badge now appears only where a departure was actually observed; a weak suspicion is shown separately and muted. Update via CurseForge, Wago, or your addon manager.
PremadeIQ addon 0.9.31 — no more stale panel
The addon update is out (0.9.31). The known-premade panel could revert to an outdated roster: if the lineup changed mid-fight and then went back to what was already on screen, the stale pending update was still applied once you left combat. That is fixed. The panel is also honest about its freshness now — while an update waits for combat to end, a "•" marker sits in the header and clears the moment the list is applied. Short lulls between fights are used too: the roster catches up in them instead of waiting for the next scoreboard refresh. Grab it from CurseForge, Wago, or your addon manager.
PremadeIQ addon 0.9.30 — panel clicks now work
The addon update is out (0.9.30). Buttons in the known-premade panel did not respond to clicks — that is fixed: left-click targets the player, right-click sets them as focus without dropping your current target. The panel also looks tidier: a muted dark background instead of near-black, hover highlighting, and premade leaders stand out. Grab it from CurseForge, Wago, or your addon manager.
PremadeIQ addon 0.9.29 — known-premade panel
The addon update is out (0.9.29). During a battleground it now shows a compact panel of the enemy players already in the catalog as premade leaders or members — leaders starred, names in class colors, one click to select. The roster behind that panel got stricter, so incidental co-players no longer slip into the list, and the "enemy group leaders" counter no longer fires spuriously after a disconnect or a kick. Grab it from CurseForge, Wago, or your addon manager.
Sharper premade detection
The premade label just got more precise: PremadeIQ now tells a real synced multi-group stack apart from a leader who only runs a single party. If you're up against one strong leader with one group — not a coordinated stack — they're no longer flagged as a premade, in-game or on the site. Fewer false flags, a signal you can trust more. Nothing to do — it applies automatically.
Uploader app 0.9.0 — stronger security
An update to the desktop Uploader app is out (its version is 0.9.0 — it has its own numbering, unrelated to the addon's): app updates are now cryptographically signed and verified before installing, and your sign-in token is stored encrypted. The app updates itself — nothing to do.
PremadeIQ addon 0.9.23 — housekeeping
A maintenance update for the PremadeIQ addon is out (0.9.23): internal cleanup and a tidier options panel. Nothing changes in how it works for you — your matches keep syncing as usual. Grab it from CurseForge, Wago, or your addon manager.
What's new: give-to-get is here
A few changes landed today:
- The in-game premade alert now refreshes the moment you upload — share your matches, get everyone's, in the same step.
- Access is based on staying active: keep uploading and you keep full access; take a week off and it pauses until your next upload (Patreon supporters are unaffected).
- This app now shows your access status above — so you always know where you stand, with a heads-up before anything pauses.
Welcome to PremadeIQ
Thanks for installing the uploader. Play your Epic Battlegrounds with the addon enabled and your matches sync automatically after each game. Open the dashboard any time to see who's been grouping.
All notable changes are documented here. Format — Keep a Changelog, versioning — SemVer.
[0.9.62] — 2026-11-02
Changed
The addon tells you straight away whether premade warnings work. On
login and on entering an Epic Battleground the chat shows one line: "Premade
list loaded, N leaders" or, if there is no list yet, what to do: upload one
battle with the Uploader and type /reload.
[0.9.61] — 2026-10-20
Added
Regular battlegrounds are recorded too. Regular, rated and Blitz battles
(Warsong Gulch, Arathi Basin, Eye of the Storm and the rest) are now saved and
uploaded alongside the Epic ones. On the site they are kept apart and count
in no statistic yet — groundwork for future features. Premade warnings and
the odds line still work in Epic Battlegrounds only.
Changed
Patch 12.1.5 support: the game no longer marks the addon as out of date.
Fixed
The battle type is told apart more reliably: a brawl is no longer taken for Blitz.
[0.9.60] — 2026-10-13
Fixed
The premade panel and the odds line work right after an addon update. The
data comes from the PremadeIQ Data folder, which updates leave alone (needs
Uploader 0.9.15).
Added
The settings, under "Local database", show whether premade and odds data are
loaded, and if not, that the Uploader is what brings them.
[0.9.59] — 2026-10-11
Changed
Groundwork for a more accurate odds line. Internal changes that will help
make the odds line more accurate in coming versions. Nothing changes in game.
[0.9.58] — 2026-10-11
Fixed
The players panel shows which team is which again. The "Enemy team" and
"Your team" lines are now always shown, with the premade, mercenary-group and
guild blocks beneath them. Before, a block hid the team line and only the
colour told the teams apart.
[0.9.57] — 2026-10-10
Changed
The odds line now settles after the gates open. Before the battle starts
the teams are still changing: players load in, drop out of the queue and are
replaced. The odds keep updating until the gates and settle on the roster
that actually starts the battle.
[0.9.56] — 2026-10-06
Added
A warning about a possible premade with no known leader. When the enemy
team holds a group of mercenaries who keep entering battles together, the
addon shows a banner and a chat line, and the players panel gives the group
a "Mercenary group" block of its own. Works with Uploader 0.9.14 or newer;
the same switch as the other premade warnings turns it on and off.
[0.9.55] — 2026-10-06
Changed
"My place" in the rankings is more accurate. The site no longer mixes
you up with the friend you queue with, and finds your place sooner after
your first battles.
The Uploader download link points to the site's new address. Install
guide: https://premade.online/install. The old address still works and
forwards there.
[0.9.54] — 2026-10-04
Fixed
The Local database block in the settings now switches language with the
rest of the panel. Changing the language with the settings open used to
leave the player, sample and match counts in the old language until the
panel was reopened. The same happened to the "In your list" line under the
watchlist field and the "known: N" notes next to guilds.
[0.9.53] — 2026-10-04
Added
Guilds on your watchlist. The settings now have two buttons next to the
input field: Player and Guild. A guild can be given by name (Top Gun) or
with its realm (Top Gun-Ravencrest) — guild names repeat across realms,
and the realm makes the match exact. In battle, players from watched guilds
appear in the Tracked players panel in their own <Guild> (N) block after
the premade blocks; anyone who is in a premade stays in the premade's block,
with the guild in the tooltip.
The scoreboard carries no guilds, so PremadeIQ Uploader 0.9.12 brings them:
a "character → guild" file for the players the database has seen. Each
guild in the list shows how many of its players are known, so you can see
at once whether it was found. A player the database has never seen will not
show up. The list itself still lives only on this computer and is never
sent anywhere.
[0.9.52] — 2026-10-04
Changed
The Tracked players panel splits players by premade. Everyone tracked on
a side used to share one grid, and how many belonged to which premade was
only in the tooltips. Now each premade gets its own block with a heading —
whose premade it is and how many of them are on the field — biggest first,
leader on top. A lone member gets a block too: members of different
premades often queue without their leader, and you can see who is whose.
Possible members (?) sit in the block of the premade they are linked to and
keep their question mark. Raid leads (~) and players from your own
watchlist (>) with no premade are gathered at the bottom under "Others". A
player listed in two premades sits in the one with more people in the
match; the other stays in the tooltip.
A more compact panel. Buttons show names without the realm (it is in the
tooltip, and stays on the button when two players share a name; targeting by
click is unchanged), so columns are about half as wide. When a side has
premade blocks, the separate "Enemy team / Your team" line is gone: the
colour of the block headings tells the side and the panel header has the
counts.
Fixed
The odds line no longer runs past the panel's edge. The panel's width
came from the name buttons alone, so with two or three players the long odds
line (translations especially) spilled past the right border. The panel now
reserves room for the widest odds line up front — before the fighting starts,
because a panel full of target buttons cannot be resized in combat.
[0.9.51] — 2026-09-16
Added
A match now carries the odds you were shown. At the moment the odds line
stops recalculating, the addon notes the percentage shown, the battle clock,
how many rows each side had and how many of them were found in the winrate
table. The note travels to the server with the match. It holds no names —
only numbers that were already on your screen.
Why: to check how often the percentages the addon actually shows come true,
and whether a head-count advantage belongs in the forecast. Today the
accuracy is estimated on a roster taken later, and nobody has measured it at
the moment you see the number. With the odds turned off nothing is noted.
Nothing visible in the addon changed.
[0.9.50] — 2026-09-12
Fixed
The welcome screen no longer offers a paid tier — there isn't one. The
first-run text said the King of EBG tier on Patreon adds deeper dashboard
tools. Since 12 September that is not true: there is no paid access any more,
and the rest of the site — player search, match breakdowns, enemy leaders —
is opened by five matches a week. The text is corrected in all six languages;
nothing else in the addon changed.
[0.9.49] — 2026-09-09
Fixed
The odds are now an epic-battleground feature only. The line used to
appear in any battleground, 15-a-side ones included — but the winrates behind
it were collected in epics, and so was the accuracy printed next to it. In a
regular battleground the number looked just as confident with nothing behind
it.
A locked forecast is no longer spoiled at the moment it locks. When the
scoreboard started emptying, the number was first recomputed without the
players who had left and only then frozen — so the spoiled one was what got
kept. It now freezes what was computed on the full roster. "How full is the
board" is also measured by the smaller of the two teams: our half filling
while theirs emptied left the total unchanged, and the forecast settled early.
The "Show win chances" switch now silences all three places. It removed
the line from the players panel while the standalone pop-up and the premade
banner kept announcing odds. An explicit /piq odds still answers — that is a
question asked out loud.
The addon refuses to compute from an unusable winrate cache. A file of an
unknown version, older than 45 days, or with no coefficients now reads as "no
data". A zero model used to produce not silence but a flat "50% — 50%"
captioned "0% accurate" — zero times anything is a coin flip.
[0.9.48] — 2026-09-07
Changed
The odds no longer drift during the battle. They used to be recomputed on
every scoreboard scan, and a scoreboard changes as people leave — so the
number crept toward an outcome that was already visible, looking wiser than it
was. It is now computed while the scoreboard fills and locked once it stops
growing, on the starting roster the accuracy was measured against.
The line says what it is doing: "reading the scoreboard", then
"calculating", and a locked result is marked "final".
The forecast strings are translated into every language the addon ships.
Only the premade warning and the copy-for-chat text stay English — those are
read by a mixed-language battleground.
Added
A "show win chances" switch in the settings (/piq options), on by default.
Not for performance: the whole winrate cache is about 1 MB of memory and a
single forecast takes hundredths of a millisecond, over rows the panel has
already read.
[0.9.47] — 2026-09-06
Changed
The players panel now stays up for the whole battle. It used to vanish
when the scoreboard held no premades and nobody you had marked — taking the
odds line with it, though that line has something to say in every match.
While the scoreboard is still loading it says so. Outside a battleground the
panel is hidden as before.
The odds now keep updating during combat: the line used to freeze, because
the panel's whole update path stops in combat for its protected buttons.
Fixed
The separators in the odds line no longer render as empty boxes — the UI font
does not draw the character that was there.
[0.9.46] — 2026-09-06
Fixed
Reloading mid-battle no longer loses the match. A /reload wipes the
match context, and restoring it never worked: the battle fingerprint was
stamped when we landed in the instance — one to two minutes before the gates
open — and then disagreed with the real battle start by exactly the length of
that prep phase. On Epics that meant the restore failed every single time,
taking the match start time, the premade warning and the odds line with it.
The "usually takes raid lead" notice is no longer suppressed by an empty
catalog. Those players live in their own list, but the "catalog is empty"
check only looked at premade leaders and bailed out before reaching them. With
raid leads marked and no premades, the notice never appeared at all.
The copy dialog's title no longer freezes on whichever language was active
when the game started.
[0.9.45] — 2026-09-06
Added
Win chances for the match. The addon reads both teams off the scoreboard,
looks them up in the winrate table the Uploader ships, and shows which side is
favoured — before the battle decides it. The line lives in the tracked-players
panel and updates as the scoreboard fills; hover it to see what the number is
made of (each side's average winrate and the share of players the database has
never seen), click it to copy that for chat. /piq odds answers on demand and
says plainly when there is not enough data.
It is all computed inside the game, with no server round trip: WoW only
hands data out on an interface reload, so asking mid-match is impossible.
Notes
The forecast is right about 72% of the time — a hint, not a verdict: it is
wrong roughly every third or fourth match, which is stated under the number
itself. That figure is measured on starting rosters, the same partial
scoreboard the addon actually reads.
Requires Uploader 0.9.2 or newer — it is what delivers the winrate table.
Per-player winrates are never shown in game; only the team summary.
[0.9.44] — 2026-09-04
Added
The addon now warns when your premade list has gone stale. The list comes
from the Uploader, and if that has not run for a while the addon keeps working
quietly — on data from two weeks ago. The worst part is how it looks: silence
on entering a battleground reads as "no premade here", when it actually means
"we do not know". Entering an Epic BG with a list older than two weeks now
says so plainly: how many days old it is and what to do about it. At most once
a week, switched off in the same place as premade warnings.
/piq status shows the age of the list. The passive hint only fires
inside a battleground and only after two weeks of silence, so there was no way
to check on purpose. This line answers immediately — including when everything
is fresh.
A third confidence level in the targets panel: "possible premade member".
Until now a player was either a premade member or nobody, with nothing in
between — so a single game could drop someone off the panel and the next one
put them back, though they had changed nothing. A player we have shared
history for, just not enough of it to say so with confidence, now shows with a
? mark and the caption "Possible premade member", and the tooltip names
whose premade they were seen beside. The mark is deliberately unlike *
(leader) and ~ (takes raid lead, runs no premade): it is a question, not a
statement. Such players ride in their own list and never join the confirmed
roster — not in the panel, not in announcements.
[0.9.43] — 2026-08-26
Added
The addon now notices when your battles stop leaving your machine. The
Uploader is a separate program and it fails quietly: the addon keeps
recording, nothing goes out, and you find out when your access to the premade
catalog lapses. The previous hint could not help here — it only spoke to
players whose catalog was empty, which is precisely the wrong audience. On
entering an Epic BG the addon now counts the battles logged since the last
upload, and if the Uploader has not run for three days or more, it says so.
At most once every three days, and it switches off with the premade warnings.
And it says what that costs you. Catalog access needs one upload every
seven days. Under a week of silence, the addon tells you roughly how long is
left; over it, that access has most likely lapsed and how to reopen it. Until
now you found out afterwards and without an explanation.
/piq reports the upload state — how many battles are waiting and when
the Uploader last ran. The passive hint only appears after days of silence
and only inside a battleground, so there was no way to check it on purpose.
This line answers immediately, including when everything is fine.
Changed
The install address is shorter. WoW has no
clickable links and chat text cannot even be selected, so the address gets
retyped by hand. A shorter one is less to type, and it leads to the same page.
[0.9.42] — 2026-08-16
Fixed
The Uploader link led nowhere — and had since the first public release./piq uploader printed the address of a repository that does not exist, so
everyone who wanted to share their matches hit a 404. It now points at the
install page: https://premadeiq.duckdns.org/install — and opens a small box
with the address already selected, because chat text cannot be selected in
this client and retyping a URL by hand is nobody's idea of a good time.
Added
The addon no longer stays quiet about an empty premade list. It ships
with that list empty and cannot fetch anything on its own — the list is
community-contributed data and arrives with the Uploader. Until now that
looked exactly like a feature that doesn't work. On entering an Epic
battleground the addon now says once (at most weekly) what is missing and
what fixes it. If the Uploader has run before and access simply lapsed, the
wording is different — "upload one match", not "install the app". Those are
two different situations and conflating them would be dishonest.
A /reload reminder after a recorded match. "Match recorded" means
"kept in memory", not "sent": the game only writes SavedVariables to disk on
/reload or logout. Until then the Uploader genuinely sees nothing and looks
broken. Shown only to accounts that have never uploaded.
Changed
The welcome dialog was rewritten. Step three used to be "link Discord to
your Patreon", which made the whole thing read as "paid from here on". It
isn't: one finished Epic BG a week opens premade warnings, the full
leaderboard and deserters, for free. Joining a Discord server is no longer
required either — any Discord account works. Patreon is still there, in the
place it belongs: one optional line.
/piq status on an empty catalog now shows where to get one.
[0.9.41] — 2026-08-15
Fixed
The minimap button has its own emblem now. Yesterday's button drew a green
question mark — the texture the game substitutes for anything it cannot find.
The icon path pointed at a Blizzard icon that does not exist, and the client
says nothing about that: no error, no warning, just the question mark. The
button now carries the PremadeIQ logo, and so does the addon list and the
game's own addon compartment.
[0.9.40] — 2026-08-14
Added
Your own watchlist. The addon options now have an input box: copy a
character name in game, paste it, and that player is marked in the targets
panel whenever they turn up in your battleground. The list is yours: it is
stored in a separate file on your computer only, is never uploaded, and nobody
else can see it. It has no effect on premade detection either — it is your
note, not our data. Such a row is captioned "on your watchlist" rather than
"known premade member", because the addon does not claim what it does not
know. Names are matched exactly, so after a rename the entry stops matching
and has to be added again.
Solo raid leaders now show up in the panel. Players who take raid lead but
run no premade were only ever mentioned in the warning line; the targets panel
did not list them at all. Now it does, marked ~ and captioned "takes raid
lead, no premade". They are a separate category, not a premade: such a player
never gets the leader star. And when someone both takes raid lead and belongs
to somebody's premade — roughly half of them do — the panel states both facts
instead of picking one.
A minimap button. Opens the addon settings, drags around the minimap edge,
and can be switched off in those same settings. PremadeIQ also shows up in the
game's own addon menu on the minimap, for people who dislike extra buttons.
An addon language setting. The options now have a "Language" row: it
follows your game client by default, but you can force any of the six. The
first reason it exists is verification — on a Russian client there was no way
to see what English-speaking players read, and they are 45% of the players in
our data. Battleground alerts stay English whatever you pick: they are read by
a battleground that does not share a language.
German, French and Spanish are finally complete. The addon declared five
languages while three of them were 22% translated: the whole settings window,
the tooltips and the links showed in English. German players are 22% of our
data, the second largest group after English.
Italian added as a sixth language, translated in full.
Fixed
The settings window no longer drifts apart. The "Columns" row and the
stats and links blocks crept rightwards into the next column, and the links ran
off the edge of the window. The cause was in the layout: each row anchored
itself to a button inside the row above rather than to the start of the column,
so the offset accumulated.
The panel could go silent until you reloaded the interface. An error while
reading the premade list left an internal "scan in progress" flag raised, and
every later refresh was skipped without a word. Such an error is now handled
and the panel recovers on the next update by itself.
The panel heading is honest again — "Tracked players" instead of "Known
premade targets": it has been listing more than premade members for a while.
[0.9.39] — 2026-08-14
Fixed
Players whose identifier could not be read are no longer mistaken for
leavers. A final-scoreboard row with an unreadable identifier was skipped
silently, and on the server it looked exactly like the row of somebody who had
left the battleground. The addon now marks the player by NAME (a name is
something the game never hides) before the row can be dropped, and separately
reports how many rows it had to drop.
Added
The site now shows who did not make it to the end of a match. The data was
already there, but only the opposite half of it was used — the "joined late"
badge. The match page's "Left the battlefield" section is no longer empty: an
Epic battleground turns over half its roster, and both sides of that trade are
visible now.
[0.9.38] — 2026-08-12
Fixed
The addon no longer breaks the game's own combat announcements. The
premade headline was posted to the same centre-screen frame the game uses for
its own warnings ("The gate has been destroyed" and the like). In 12.1 that
became unsafe: after our message the frame stayed flagged as addon-touched and
then errored — not only on our text, but on the game's own announcements too.
The failure could not be caught, because it happened after the addon had
already finished. That frame is no longer used at all. Nothing is lost: the
PremadeIQ banner shows the same headline in the same colours (red = premade
confirmed, amber = possible) and additionally lists the leaders, which the
single-line frame could never do.
[0.9.37] — 2026-08-12
Changed
Support for patch 12.1 "Curse of Ula'tek". The addon is no longer flagged
as out of date.
Fixed
Enemy "crowns" no longer report zero where the truth is "cannot see". In
12.1 the game stopped telling addons which enemies lead a group, so the old
counter honestly returned zero simply because it is no longer allowed to look.
On the site that would have read as "the enemy team brought no pre-formed
groups" — a claim the addon never made. It now counts separately the enemies
the game refused to answer for, and in that case the server publishes no
estimate at all instead of publishing a zero. Crowns actually seen (if the
game does answer) still count as a lower bound, and your own side is
unaffected: the game places no such limits there, so enemy group leaders keep
being recovered from reports by players of the opposite faction.
[0.9.36] — 2026-08-08
Fixed
A player tagged as "usually takes raid lead" no longer disappears from the
warning when a premade is in the match too. Their line was printed only when
there were no premades at all — that is, exactly in the matches where it
matters least. It now comes last in the regular warning and is repeated in the
banner, and the premade verdict itself is unchanged.
Changed
The standalone notice about such a player is easier to catch: with no
premade in the match it now shows on the centre of the screen and in the
banner, not only in chat. Still no sound — it is context, not an alarm.
[0.9.35] — 2026-08-08
Fixed
A /reload mid-match no longer costs you the match. The addon only
recorded when you joined a battle at the moment it started, and reloading the
interface wiped that with no way to get it back. The server then concluded you
had been in two matches at once and quarantined the match — it simply vanished
from the site. Your join time now survives a /reload: it is stored together
with a fingerprint of the battle itself and restored only when that
fingerprint matches, so two back-to-back matches on the same map cannot be
confused for one another.
The "who was here from the start" roster is no longer replaced by the final
scoreboard. After an interface reload the addon could capture the starting
roster from the end-of-match board. Such a list contains everyone who made it
to the end, so players who joined as replacements stopped counting as late
arrivals — which is exactly what protects them from being marked as having
left the match. The starting roster is now never captured after the match is
over.
[0.9.34] — 2026-08-08
Added
The premade targets panel now covers both teams. It used to list known
premade players on the enemy side only; there is now a second section, "Your
team". Buttons behave identically in both: left-click to target, right-click
to set focus. An empty section is not drawn at all.
The panel minimizes to a small button. The close button in the top-right
corner puts the panel away entirely and leaves a compact button with the
counts in its place — drag it anywhere, click it to bring the panel back. It
works in combat, not just outside it.
Size settings (Esc → Options → AddOns → PremadeIQ): panel scale 70–150%
and 1–6 name columns.
Fixed
The leader mark no longer renders as an empty box. The stars in the list
(and the separators in the header) now use characters the game font can
actually draw.
Long names are no longer clipped. Column width is measured from the
longest name on screen, so a full Name-Realm fits on its plate.
Your own team is identified correctly under mercenary mode. The side now
comes from the same battlefield API the scoreboard itself uses rather than
from the character's faction, which would swap the two sections around.
[0.9.33] — 2026-08-07
Fixed
Matches you joined late no longer disappear. If you dropped into a battle
already in progress (Wintergrasp, Alterac Valley and Ashran all allow it), the
server concluded you had been in two matches at once and threw the whole match
away: absent from the site, absent from premade detection. The cause is that
the duration the game reports measures the battle, not how long you were
in it. The addon now reports when it entered. On prod this was losing 2.5% of
all matches.
Added
A separate notice for people who take raid lead but run no premade. They
no longer raise a premade alert; instead one neutral line reads "Usually takes
raid lead". No roster, no count, no verdict — the metric that marks them
catches ordinary raid leaders too.
The addon records who was on the scoreboard before substitutions. Combat
numbers for players who left cannot be recovered in 12.0.x, but names are
always readable, so one snapshot is taken once the scoreboard has demonstrably
finished loading. This lets the site tell late joiners again, and stops the
"deserter" mark from sticking to someone who merely arrived later. The
snapshot rides the scoreboard updates the addon already receives and switches
itself off the moment it is captured, so it adds no polling.
[0.9.32] — 2026-08-03
Fixed
The final scoreboard no longer ships empty. In 12.0.x the combat numbers
(damage, healing, killing blows, deaths) are sometimes handed back as "secret
values": they cannot be read, and an or 0 check does not catch them because
a secret is truthy in Lua. The row was then stored empty, making a player who
fought the whole match look like they did nothing. The addon now waits for the
numbers to become readable before saving (up to 4 attempts) and explicitly
zeroes only what genuinely could not be read.
The objective-point sum was computed on a possibly-secret value, which could
abort the whole end-of-match capture.
Added
The addon now tells the server how many scoreboard rows stayed unreadable.
The server no longer draws conclusions about who left early from such a match.
[0.9.31] — 2026-08-01
Fixed
The panel could revert to an outdated roster. If the roster changed during
combat and then went back to what was already on screen, the obsolete queued
update was not dropped — and leaving combat applied it over a correct list.
A roster matching the display now clears any pending update.
Scan timers scheduled at match start no longer survive into the next match:
they are cancelable now, and every callback checks the match generation.
The internal scanning flag is cleared even on error — a failure in filtering
could previously wedge every later panel update.
Added
A "•" marker in the header while an update waits for combat to end, so the
list on screen never lies about how fresh it is. It clears the moment the
roster is applied.
A 2-second out-of-combat check, so the short lulls between fights are used to
apply deferred updates instead of waiting for the next scoreboard event.
Changed
Requesting scoreboard data is now separate from reading the cache: the event
handler no longer fires a second request that could push the server's response
under its own throttle.
The startup scan burst is shorter (0.5–10s); the periodic check covers the rest.
The panel is fully English now: its tooltips (player role, premade list, click
hint) follow the header and stay English on every client.
[0.9.30] — 2026-08-01
Fixed
Clicks on the known-premade panel now work. The buttons responded to
neither left- nor right-click: the game picks which click edge performs the
action from the useOnKeyDown attribute, falling back to the
ActionButtonUseKeyDown setting. That setting is on by default, so the action
was expected on key-down while the buttons were registered for key-up only —
the click was swallowed silently, with no error. The attribute is now set
explicitly and always matches the edge the buttons register for.
Added
Right-click sets the player as focus without dropping your current target
(right-click was not wired up at all before). Tooltip hint updated.
Changed
Panel styling. The near-black plate with white borders is replaced by a
muted dark background and a soft warm border. Buttons highlight on hover,
premade leaders get a warmer plate, and the header is gold.
The panel header now stays English on every client, like the premade alert
lines.
[0.9.29] — 2026-07-17
Fixed
The enemy group-leader ("crown") counter no longer fires spuriously in the
open world after an abnormal battleground exit (kick / disconnect / leaving
without a match-complete): on such an exit the Collector now stops its timers
instead of continuing to poll nameplates with a stale "this is an EBG" flag.
[0.9.28] — 2026-07-17
Fixed
The known-premade panel now uses only the database's strict confirmed roster:
at least five shared matches and a share strictly above 25%. The loose legacy
members list can no longer add incidental co-players.
When a player is linked to multiple premades, the website, catalog, and addon
use one canonical winner. Shared mercenary entries receive triple weight.
[0.9.27] — 2026-07-16
Added
Clickable known-premade target panel. During a battleground, PremadeIQ now
shows only enemy players present in the catalog as premade leaders or members.
Left-clicking a compact button securely selects that player with an exact
/targetexact; leaders are starred, names use class colors, and tooltips list
the associated premades.
The panel can be dragged out of combat. Secure buttons are pre-created, while
roster and layout changes during combat lockdown are deferred until combat
ends, avoiding taint and blocked-action errors.
[0.9.26] — 2026-07-15
Changed
Copied premade alerts now start with [PremadeIQ], making the message source
immediately visible in chat.
[0.9.25] — 2026-07-04
Added
Enemy group-leader counter. Every party that queued together keeps its
leader crowned inside the raid — so several simultaneous crowns on the
enemy team mean pre-formed groups. The addon counts those crowns on visible
enemy nameplates, and when there are two or more, the alert gains an
"Enemy group leaders spotted: N" line (it also appears without a catalog
premade in the match). Only visible nameplates are counted, so the real
number of groups is always ≥ the shown one; enemy nameplates must be
enabled (default V key).
Group leaders in match stats. The match record now includes your own
team's group leaders and the maximum simultaneously visible enemy crowns —
one more premade signal for the community database and the website.
[0.9.24] — 2026-06-28
Changed
Premade alert is now multi-line. The on-screen premade warning now shows
the full breakdown — each enemy premade leader and how many of their players
are in the match (top 3, plus an "…and N more" line) — in its own banner, so
you no longer have to fish it out of chat. It fades on its own after a few
seconds and never intercepts a click or your movement keys.
[0.9.23] — 2026-06-23
Changed
Housekeeping. Removed unused legacy code and settings and simplified the
options panel. No change to how your data is handled — PremadeIQ still records
match stats only to your local SavedVariables and sends nothing out by itself;
contributing to the community database stays a separate, optional step via the
PremadeIQ Uploader.
[0.9.22] — 2026-06-21
Added
Leaderless premade alert. The start-of-match alert now also fires when a
premade's marked leader isn't in the battleground but six or more of their
confirmed regulars are on the enemy team — catching a premade whose leader sat
out or queued on an unmarked alt. It shows a distinct "leader not here" wording
and is treated as a confirmed premade. Requires full access (the confirmed
roster ships only to patrons) and the latest Uploader; on an older catalog the
alert simply behaves as before (leader-present only).
Changed
Premades are tracked by a stable id, not a display name. A leader's alts
no longer split or double-count one premade, and presence is judged per group.
Fixed
Silent premade alert at match start. A spurious Reset() from
PLAYER_ENTERING_WORLD (while IsBattleground() was still false during world
load) killed both auto-scan channels for the rest of the match. Added a 15-second
grace gate from PVP_MATCH_ACTIVE: a false "left the BG" in the opening seconds no
longer resets state. Committed 03ea999, verified in-game 2026-06-18. (0.9.21 not
cut/published yet — the fix lives only in source.)
[0.9.20] — 2026-06-14
Added
Precise cleanup via the Uploader handshake (Database.lua, new
UploadState.lua). The Uploader writes a file into the addon folder with a
cursor saying "samples are server-confirmed up to point X" (per account, by
installId), and on world-enter the addon deletes exactly the confirmed
samples (PruneUploaded) instead of guessing by age. The 0.9.19 heuristic
(30-day window + cap of 4000) stays as a backstop for when there is no
cursor / it's stale. Safety: with a missing/mismatched installId, or a
stale, lowered or future cursor, the addon deletes less, never losing
un-uploaded data; your own character is untouched; samples without endedAt
are kept. The cursor is monotonic (lastSamplesUploadedThrough) and clamped
against future values. The first handshake needs one /reload cycle (the
addon generates installId, the Uploader sees it after SavedVariables are
flushed to disk).
Fixed
Crash generating installId (Database.lua): the code called
math.randomseed, which is absent from the WoW sandbox, and errored out.
Fixed (shipped in the published 0.9.20 zip).
[0.9.19] — 2026-06-14
Fixed
SavedVariables no longer grows without bound (Database.lua). The
players table kept every player ever seen in an Epic BG forever (in
production: 29,587 entries, PremadeIQ.lua ≈46 MB), which made WoW slow to
write it on logout (slow close) and slow to load on login. It now keeps a
rolling window: players not seen for more than 30 days are evicted, and the
total is capped at 4000 (LRU by lastSeen); your own character is untouched.
The sweep runs on world-enter (once UnitGUID("player") is known) and after
each match. This data is only needed for the Uploader — in-game the premade
alert reads KnownPremades.lua, not this table. rawStats is left alone
(deferred to a follow-up). Marker PremadeIQ_DB.pruneVersion, one diagnostic
line in collectorLog.
[0.9.18] — 2026-06-14
Changed
## Interface bumped 120000 → 120005 for the current live client 12.0.5
(build 67823) — no "out of date" flag in addon managers.
Clearer first-run wording: the welcome dialog now spells out that the
addon writes match stats locally to SavedVariables, and that contributing to
the community database is a separate, optional step via the Uploader app. Text
localized (en/ruRU).
Added
LICENSE (All Rights Reserved) bundled; vendored libraries keep their own
licenses.
[0.9.17] — 2026-06-13
Changed
The "Copy premade alert" button and its strings are now English even on a
ruRU client (Locales.lua). The premade call-out is pasted into the
English-facing community (/rw, Discord), so the copy flow (button, its
tooltip, the PremadeCopyTip/PremadeCopyHint/PremadeCopyNone hints) is
fixed to English regardless of client language. The premade alert itself
(PremadeDetected, etc.) stays localized.
[0.9.16] — 2026-06-06
Added
EBG filter: the addon collects Epic BGs only (plan:
docs/ebg-map-filter-plan.md, externally reviewed). Whitelisted instance map
ids (ns.EBG_INSTANCE_IDS — a mirror of the server's EBG_MAP_NAMES):
Alterac, Isle of Conquest, Ashran, Wintergrasp, Korrak's Revenge, Deephaul
Ravine. Arenas / normal BGs / blitz are no longer written to SavedVariables
or sent to the server (previously ~17% of uploads were quarantined as
non_ebg_map). The gate is three-layered: PVP_MATCH_ACTIVE (Deserter/
PremadeAlert don't start), UPDATE_BATTLEFIELD_SCORE (stale windows from a past
Epic don't scan the wrong scoreboard), PVP_MATCH_COMPLETE + a hard guard in
SnapshotMatch itself (which also covers manual /piq snapshot).
Diagnostic ring buffer PremadeIQ_DB.collectorLog (50 lines) — gate
decisions are recoverable from SavedVariables.
Fixed
Real Epics are no longer lost to an id-space collision (Collector.lua). If
GetInstanceInfo() no longer returned an instance id at snapshot time
(teleport to a capital), the code substituted UiMapID from
C_Map.GetBestMapForUnit — a different id space the server whitelist doesn't
know → ~3% of real Epics (30 matches in production) were quarantined with a
map_name like "Silvermoon". The instance id is now captured on
PVP_MATCH_ACTIVE and used as the fallback; the UiMapID fallback was removed.
/piq version and the load line showed a hardcoded 0.9.2 — the version is
now read from the toc (C_AddOns.GetAddOnMetadata).
[0.9.15] — 2026-06-06
Security
The distribution zip no longer carries the live premade catalog
(package_addon.py). The working copy of KnownPremades.lua is GOD-tier data
that the owner's Uploader rewrites hourly; it was leaking into the public
archive and bypassing the server's tier-gating. The zip now always ships a
neutral stub (leaders = {}), plus a hard guard that fails the build if
anything but the stub slips into the archive. Each user gets the catalog their
own tier earns, only through their own Uploader.
[0.9.14] — 2026-06-04
Changed
Deserter detection stops re-capturing the roster once your whole group is
collected (Deserter.lua). The early-stop threshold used to be hardcoded at
60, but after the move to raid tokens (≤40 in an Epic) it became
unreachable, so the event re-capture spun the full 30s for nothing. The
threshold is now the current group size (GetNumGroupMembers); the enemy
scoreboard is an optional bonus.
[0.9.13] — 2026-06-04
Fixed
Deserter detection: the starting roster is now taken from your own team via
raid/party unit tokens, not the scoreboard (Deserter.lua). GUIDs on the live
scoreboard in 12.0.x become secret values and drop out during serialization to
SavedVariables, so the server-side "start vs final" diff found nobody (in
production: 0 deserters from this source across 909 matches). Raid GUIDs are
plain and survive serialization. The scoreboard is still read as an extra name
source while its GUIDs are still plain.
The final scoreboard snapshot clears the faction filter before reading
(SetBattlefieldScoreFaction(-1) in Collector.lua). RequestBattlefieldScoreData
alone doesn't clear it — without this ~1% of matches arrived single-faction.
[0.9.12] — 2026-06-02
Fixed
Premade alert text is now always English (header + leader lines). The
alert is broadcast into /rw, read by a mixed-language BG — English as the
lingua franca, same logic as the server. Previously it was Russian on a
Russian client.
The copy button can be dismissed with a right-click (previously it didn't
disappear if the alert fired outside normal combat — e.g. a manual /piq
premade check: the BG enter/leave events didn't fire and the button lingered).
In normal combat it still hides on leaving the BG. Tooltip updated: left-click
copy, right-click hide, drag to move.
[0.9.11] — 2026-06-02
Added
A "Copy alert" button appears with the premade alert. When the alert
fires, a button pops up under the central banner — clicking it opens a box
with the last enemy-premade line (Ctrl+C → paste into /rw or Discord).
Previously you had to type /piq copy. The button lives in the main addon
(which everyone downloads), not in the owner-only PremadeIQ_Leader toolbar —
otherwise only the owner would get the feature. It's a button, not an
auto-popup: the dialog focuses its input field, and auto-popping in combat
would steal WASD; the click opens it at the right moment. The button is
draggable, its position is saved (PremadeIQ_DB.copyBtnPos), and it hides on
leaving combat.
[0.9.10] — 2026-05-31
Changed
Premades are detected by leader, with confidence grading. Previously the
alert shouted "Premade" at any catalog player — including a lone regular. New
rule: a premade without a leader is not a premade. A known leader on the
enemy side = "possible premade" (yellow); a leader + >5 of their regulars
(CONFIRM_MIN_MEMBERS = 6) nearby = "PREMADE" (red). Lone members without a
leader are no longer flagged.
Output to the point: one line per leader — "Leader X — with N of their
players", where N is how many of their known regulars are present. The
banner/chat/copy and sound use the same text. Catalog matching was rewritten
for multi-membership (a player can belong to several leaders — each gets the
credit). The alertLog diagnostic line gained a ldr field (number of
leaders on the enemy side).
[0.9.9] — 2026-05-31
Fixed
In-combat lag — scan throttling.UPDATE_BATTLEFIELD_SCORE on an
80-player Epic fires many times a second, and on each one we scanned the whole
scoreboard AND called SetBattlefieldScoreFaction(-1), which itself fires a
synchronous score update reprocessed by the whole UI (a heavy rebuild of
Blizzard's native 80-player scoreboard) and by addons — a per-frame storm.
Added throttling: autoScan runs at most once per SCAN_THROTTLE_SEC = 1.5
(lastScanAt/GetTime, reset in OnMatchActive/Reset). One scan per ~1.5s
is plenty to catch a roster that loads over seconds; manual /piq premade
ignores the throttle.
[0.9.8] — 2026-05-31
Changed
Scan window extended for the enemy team loading late. The enemy roster
isn't shown until the match starts and only appears a few seconds in, and on
an 80-player Epic the scoreboard loads gradually (in alertLog, even our own
half grew 16→35 over ~50s). The old 60s window / timers up to 45s could end
before the enemy half appeared. Timers are now
{4,8,14,22,32,45,60,80,105,135,170} with SCAN_WINDOW_SEC = 180. The
announcement is one-shot (fired), so on a hit the scans stop immediately —
the long window only costs anything when there's no premade. Names are
NeverSecret, so reading deeper into the match is safe.
[0.9.7] — 2026-05-31
Fixed
Faction un-filtering didn't work — wrong argument. In 0.9.4–0.9.6
detect() called SetBattlefieldScoreFaction() with no argument (nil), but
nil does NOT show both factions — alertLog proved it: n stuck at ≈35 (own
team only), enemy=0, even though the server confirmed enemy premades in most
matches. The "All" tab in Blizzard's native scoreboard passes factionEnum =
-1 (PVPMatchResults.xml; 1 = Alliance, 0 = Horde). We now call
SetBattlefieldScoreFaction(-1) — and on every scan, since calling it on an
early n=0 tick didn't "stick". The 0.9.6 re-entrancy guard makes the repeated
call safe; the factionUnfiltered flag was removed.
[0.9.6] — 2026-05-31
Fixed
C stack overflow in combat (crash from 0.9.4).SetBattlefieldScoreFaction(),
added to detect(), fires UPDATE_BATTLEFIELD_SCOREsynchronously; our
OnBattlefieldScoreUpdate handler → autoScan → detect() re-entered, and so
on until the C stack overflowed (RequestBattlefieldScoreData was async, which
is why it didn't recurse before). Added a re-entrancy guard: detect() is now
a wrapper over detectImpl with a scanning flag (an inner re-entry is a
no-op) and pcall (the flag is always reset). Plus
SetBattlefieldScoreFaction is called at most once per match
(factionUnfiltered, reset in OnMatchActive/Reset) — the filter is
persistent anyway, no need to poke the event on every scan.
[0.9.5] — 2026-05-31
Added
Prominent premade alert + copy. Besides the chat lines, the alert now
shows a large center-screen banner via RaidWarningFrame
(RaidNotice_AddMessage, like the native /rw) — so it isn't missed in Epic
spam. The new /piq copy command opens a dialog with a ready-to-paste
line ("Premade on the enemy team! — Leaders: … — Members: …"), text selected,
press Ctrl+C and paste into /rw or raid chat yourself. Chat from insecure
code is blocked in 12.0.x (ADDON_ACTION_BLOCKED), so copying is manual; the
dialog doesn't auto-popup (it won't hijack WASD in combat) and is opened by the
command instead. After every alert a /piq copy hint is added to chat.
[0.9.4] — 2026-05-31
Fixed
The alert saw only our own half of the scoreboard. After the name fix
(0.9.3), premades on OUR side were found but the enemy's weren't. Server
ground truth: premades were on the enemy side in 13 of the last 15 matches,
while alertLog gave enemy=0. Root cause:
GetScoreInfo/GetNumBattlefieldScores return rows only for the faction last
selected by SetBattlefieldScoreFaction; the default after
PVP_MATCH_ACTIVE is the local faction, so the enemy half (exactly what we're
looking for) is invisible. In the log this is n≈38 on misses vs n≈75 in
the one match that fired. detect() now calls SetBattlefieldScoreFaction()
(= both factions) before reading — the same call Blizzard's native scoreboard
makes when switching team tabs (PVPMatchScoreboard.lua).
[0.9.3] — 2026-05-30
Fixed
Premade alert didn't fire at all — matching on a secret GUID. The
alertLog diagnostics found the root cause: in live Epics
C_PvP.GetScoreInfo(i).guid arrives as a secret value already in the opening
window (str=0 sec=77 hit=0), and detect() looked up only lookup[guid] →
skipping every row. The name, faction, className, raceName fields of
the PVPScoreInfo struct are marked NeverSecret = true
(Blizzard_APIDocumentationGenerated/PvpInfoDocumentation.lua), i.e. they stay
plain even in an active match. detect() now matches the enemy roster by
normalized Name-Realm (guid only as an exact shortcut while it's plain), and
determines the enemy side by faction. ensureLookup builds a second
name→entry index; normName appends the viewer's realm to bare same-realm
names. Dedup by the catalog entry's name. Taint-safe: secret values are never
compared.
Changed
The alertLog line now carries an nm field (number of plain names on the
scoreboard) alongside str/sec — to confirm name readability within one
match.
[0.9.2] — 2026-05-27
Added
Premade-alert diagnostics in SavedVariables.PremadeAlert writes a ring
log to PremadeIQ_DB.alertLog (100 lines): on PVP_MATCH_ACTIVE — catalog
state (catalog_leaders, lookup, tier); on each scan — bg / cat / n /
str / sec / hit / enemy / mine (in a BG, catalog size, scoreboard rows,
readable guids vs secret, catalog hits, enemies, own faction); and ANNOUNCE
when it fires. Lines are deduplicated. With /piq debug on they're mirrored to
chat in grey. The goal: diagnose "the alert doesn't fire" from an on-disk dump,
without relying on reading chat live.
[0.9.1] — 2026-05-26
Fixed
The premade alert didn't fire in Epics. Three fixed scans (4/8/14s) often
all landed while the enemy half of the scoreboard on an 80-player Epic hadn't
loaded yet (or enemy guids read as secret and detect() skipped them) → a miss
every time. PremadeAlert now catches the UPDATE_BATTLEFIELD_SCORE event and
re-scans on every update within a 60s window (the accumulating strategy that
makes Deserter reliable), plus the timers were extended to
{4,8,14,22,32,45}. One announcement per match is preserved.
Added
/piq now prints a catalog status line (loaded / not loaded, how many
leaders, tier) — you can check the alert feed any time without waiting for the
login line. New localized string PremadeCatalogMissing.
[0.9.0] — 2026-05-25
Added
In-game premade alert. On entering a battleground the addon compares the
enemy roster against known premades and warns the player via chat + sound.
New module PremadeAlert.lua: on PVP_MATCH_ACTIVE it starts a multi-shot
roster capture (4/8/14s — the early window where names/guids still read
plain, like Deserter; on a deep match they're secret, but we don't go
there). It checks the enemy side (faction ≠ ours → also catches
mercenaries) against the catalog. Every read is guarded by issecretvalue.
Data comes from a new catalog the Uploader downloads from the server
(GET /api/addon/known-premades) and writes to KnownPremades.lua; the
addon loads it on login//reload.
Server-side tiering. A contributor gets the list of leaders; a patron
gets leaders + rosters. The shape of the data in KnownPremades.lua dictates
what to show (has members → roster, otherwise leader only); there's no tier
logic in the addon. You can't fake an upgrade by editing the file — the
server doesn't put what your tier hasn't earned into the file.
/piq premade — manually check the current match.
Options: "warn about premades" and "sound" toggles (on by default).
KnownPremades.lua — a shipped stub, overwritten by the Uploader. A
toc-data file (not a SavedVariable): WoW loads it at startup and never writes
to it, so the Uploader's update is never clobbered by the client.
Related (server / uploader)
Server: GET /api/addon/known-premades (tier-gated, catalog.py with a 30-min
TTL cache). Builds leaders from enemy_leaders + co-players (≥3 shared clean
matches on the home side) for patrons. +1 test (test_addon_catalog).
Uploader: ApiClient.fetch_catalog() + catalog_writer.py +
resolve_addon_dir, writes the file into the addon folder once an hour after
upload. +6 tests (test_catalog_writer).
Pending
Live test in EBG (confirm guids read in the early window for real).
Server deploy + Uploader rebuild (Nuitka --standalone).
[0.8.2] — 2026-05-23
Disabled
Mid-match snapshots disabled (MID_SNAPSHOT_INTERVAL = 0). An empirical
check on a real match (retail 12.0.x): not only the numeric fields
(damageDone, etc.) are protected as secret values, but also info.guid —
and the Lua serializer silently drops secret strings from SavedVariables. The
result: snapshots arrived at the server with no guid and zeroed metrics,
useless for off-board metric recovery. Worse — without a guid the server
rejected the whole upload as a 422 validation error, and a backlog of matches
got stuck.
The snapshot code is left in place: once we find an alternative source (combat
log parser or a secure-context hook), we just restore a non-zero interval.
[0.8.1] — 2026-05-23
Fixed
Secret-value taint in the mid-snapshot. Retail 12.0.x protects live
scoreboard numbers (pvpStatValue, damageDone, healingDone, …) during an
active match — arithmetic on them crashed TakeMidSnapshot() with "attempt to
perform arithmetic on a secret number value". The final snapshot from
PVP_MATCH_COMPLETE survived this because Blizzard drops the protection on the
completion event; the mid-snapshot runs mid-match and hit the guard. Every
numeric read is now wrapped in a safeNum() helper that returns 0 for
protected values (via issecretvalue) instead of crashing. Some snapshot
fields will be zero (the protected ones), but the snapshot is saved and at
least guid+faction signals the player's presence on that tick.
[0.8.0] — 2026-05-23
Added
Mid-match snapshots every 300s. A new Collector:TakeMidSnapshot() via
C_Timer.NewTicker periodically snapshots the scoreboard during the match.
Saved as snapshots = {{takenAt, players = [...]}, ...} inside a matchLog
entry. This lets us recover the metrics of players who left before the end and
were substituted — they're no longer in Blizzard's final scoreboard (always 40
per side).
Schema v3. A snapshots field added to matchLog entries. Old v2 entries
without snapshots are fine — the server treats absence as "no timeline
available for this match".
Why
In long Epic BGs (30–90 min stall-wars) player rotation is common. Before this
release we only saw the 40 who finished the match; those who left earlier had
only a name in the deserters table, with no dmg/heal/etc. Now we have data
points every 5 minutes, and an off-board deserter usually lands in at least one
snapshot.
[0.7.3] — 2026-05-04
Added
Capture our raid leader's GUID at scoreboard snapshot. New
findRaidLeaderGUID() in Collector.lua iterates GetRaidRosterInfo for
rank=2 (raid) or UnitIsGroupLeader (party) and stashes the GUID on the match
payload as leaderGUID. The server stores it on Match.leader_guid and
recomputes per-player leader_count like desertion_count is recomputed.
[0.7.2] — 2026-05-04
Removed
Removed dead legacy scaffolding. Cleaned out unused inter-addon
communication libraries and a leftover debug slash command that no longer did
anything, trimming the Libs.xml and .toc load list accordingly.
LibSerialize and LibDeflate are kept — they may be useful later, and sit as
one LibStub module load each with no active work.
[0.7.0] — 2026-05-01
Added
Deserter detection via start vs end comparison. New module Deserter.lua
(~80 lines) does a single replay-of-the-data trick: at +6s after
PVP_MATCH_ACTIVE it snapshots the scoreboard — who came in to fight; the
final scoreboard on PVP_MATCH_COMPLETE is already taken by Collector. On
ingest the server diffs the sets and, for each "present at start / absent at
end", checks faction vs match.winner — if the faction lost, it flags the
player as a deserter.
Late-join guard: if C_PvP.GetActiveMatchDuration() > 60s at
PVP_MATCH_ACTIVE, we set lateJoin=true and the server skips the diff for
that match (so we don't false-positive everyone who left before we joined).
The match payload gains a startRoster: { lateJoin, takenAt, players: [{guid,
name, faction}] } field. The server computes deserters; in the DB they go to a
deserters table with a natural key (reporter_id, ended_at, guid) for
dedup across reports.
Changed
Version: 0.6.2 → 0.7.0.
No new events registered in Main.lua — we make do with the same
PVP_MATCH_ACTIVE / PVP_MATCH_COMPLETE / PLAYER_ENTERING_WORLD /
UPDATE_BATTLEFIELD_SCORE. No chat parsing, no locales, no debuff watching.
Design notes
The "the faction lost" heuristic is deliberately asymmetric: leaving a won
match isn't flagged. This surgically cuts out disconnects (technically
indistinguishable from desertion to us), while still catching serial AFKers by
the law of large numbers: they leave losing matches more often than winning
ones, and every encountered addon user independently contributes a record to
the shared database.
Self-desertion (when the reporter themselves left) is not detected directly
— for us that match simply doesn't exist. But other reporters in the same
match will see and record it. A pattern over time from multiple reporters
covers the gap without an aura watch.
[0.6.2] — 2026-04-29
Fixed
On AV/IoC the match-end scoreboard contained only our own team (40 rows
instead of 80), so the opposite faction's data didn't reach the server. Cause:
WoW fills the client scoreboard cache lazily — only for the tabs the player
actually opened during the match, and on these maps the fast post-cap teleport
leaves no chance for a manual view. Added Collector:ScheduleSnapshotMatch:
two RequestBattlefieldScoreData() calls 0.7s apart guarantee both sides are
cached before iterating. Total delay before the snapshot is 1.4s (was 1.0).
The same logic applies to the manual /piq snapshot command.
[0.6.1] — 2026-04-27
Fixed
/piq options crashed with bad argument #1 to 'OpenSettingsPanel' (outside
of expected range). The code set category.ID = "PremadeIQ", overwriting the
auto-generated numeric ID with a string; OpenSettingsPanel accepts only an
integer. Removed the manual assignment, keep the category object and pass
category:GetID().
[0.6.0] — 2026-04-27
Added
GUI settings panel: Esc → Options → AddOns → PremadeIQ. debug
checkbox, local-database stats, a "Wipe database" button with confirmation,
Uploader/Discord links, addon version. Registered via
Settings.RegisterCanvasLayoutCategory (retail 11.0+).
Slash command /piq options (aliases /piq config, /piq settings) — open
the panel programmatically.
Panel localization: ru / en (other locales fall back to en).
[0.5.1] — 2026-04-27
Fixed
Players from your own realm reached the server without a realm suffix (the WoW
API returns a short name for same-realm players). Because of that ~7 players in
our database were stuck at enrichment_status='error'. The collector now
always appends the local realm via GetRealmName() if it's missing from
info.name.
[0.5.0] — 2026-04-27
Added
The player's race (info.raceName) is now shipped in every sample. The server
uses it to detect mercenaries: a match card will show "played for Alliance,
actually Horde" and vice versa.
[0.4.0] — 2026-04-23
Added
A welcome dialog on first launch with instructions for joining the shared
database (Uploader + Discord + Patreon).
i18n for the objective tracker's chat text (ruRU/enUS).
[0.2.0] — 2026-04-15
Instance mapID resolver via select(8, GetInstanceInfo()).
C_PvP.GetActiveMatchWinner instead of GetBattlefieldWinner.
Fixed a bug with won = nil for lost matches.
[0.1.0] — 2026-04-10
First internal version: basic Collector, Database, Comm.
All notable Uploader changes are documented here. Format — Keep a Changelog, versioning — SemVer. Versions before 0.7.0 predate this public changelog.
[0.9.18] — 2026-11-01
Fixed
The Uploader from the ZIP opens again. Windows marks files unpacked from
a downloaded archive as "from the internet" and then refuses to load one of
the app's files, so no window appeared at all. The Uploader now removes that
mark from its own files when it starts.
[0.9.17] — 2026-11-01
Fixed
The window no longer closes silently. The Uploader window needs the
Microsoft Edge WebView2 Runtime. Without it, the ZIP version used to close
at once without a word. Now it says the runtime is missing and opens the
page to download it. If the window fails to open for another reason, the
Uploader shows the error and where the log is.
[0.9.16] — 2026-10-15
Added
On a Mac the app now updates itself, just like on Windows: the
"Update & restart" button on the update card downloads the new version,
checks its signature, puts it in place of the old one and restarts the app.
Your login and stats are kept. If anything goes wrong, the app brings the
previous version back and offers the download from the site instead. It
works when the app sits in Applications (or another folder you can write
to), not when it runs straight from Downloads. 0.9.16 itself has to be
installed by hand on a Mac — for the last time.
Changed
If an automatic update fails, the update card now links straight to the
download page.
[0.9.15] — 2026-10-13
Fixed
Premade and odds data no longer vanish after an addon update. CurseForge
and Wago used to wipe them on every addon update until the Uploader ran again,
leaving the premade panel and the odds line silent. The Uploader now keeps a
copy in a separate PremadeIQ Data folder next to the addon, and if an update
still leaves empty files behind, it puts them back within minutes without
asking the server. Needs addon 0.9.60; restart the game once after the new
Uploader first runs.
[0.9.14] — 2026-10-06
Added
The addon learns about mercenary groups with no known leader — people
who keep entering battles together. With addon 0.9.56 such a group on the
enemy team triggers a possible-premade warning, and the players panel gives
it a block of its own.
Changed
Links to the website in the app point to the new address, premade.online.
The old address still works. (On Windows and macOS this comes together with
the drawn Discord icon on the sign-in button from 0.9.13.)
[0.9.13] — 2026-10-04
Added
Linux version. Two flavours: with a window — the same window as on
Windows, with an applications-menu entry and start at login; and console —
no window, commands in a terminal. Both have a background service
(systemd) that uploads your battles the whole time you are logged in — on a
Steam Deck in Game Mode too. The game is found inside Wine: Lutris, Steam
(Proton), Bottles, Heroic, winetricks, ~/.wine, a second disk included;
if not, set-wow-root takes the game folder. Sign in through the browser
or with a code on your phone. Install and update:
https://premade.online/install#linux
The Discord mark on the sign-in button is drawn rather than an emoji: on
systems without an emoji font it showed an empty box.
Windows and macOS get nothing else in this version and stay on 0.9.12 until
the next joint release.
[0.9.12] — 2026-10-04
Added
Guilds for the personal watchlist. Twice a day the app puts a
"character → guild" file into the addon folder, covering the players the
PremadeIQ database has seen. With it the addon (0.9.53+) shows players from
guilds on your personal watchlist in battle. The watchlist itself still
lives only in the game and is never sent anywhere.
[0.9.11] — 2026-09-29
Added
Sign-in can be confirmed on your phone. If Discord opened on a phone or in
another browser rather than in this computer's browser, the login used to go
nowhere — the phone tried to open the computer's address and showed "cannot
connect". The waiting screen now shows a six-digit code: enter it on the page
that opens after Discord, and the app signs in by itself within seconds.
Fixed
Cancel during sign-in cancels at once. A second "Sign in" used to answer
"already running" for up to five minutes after a cancel.
Sign-in now waits 10 minutes instead of 5.
macOS: sign-in starts at once — the app could wait several seconds on a DNS
lookup before opening the browser.
[0.9.10] — 2026-09-25 · macOS only
Nothing changes on Windows: it stays on 0.9.9, no update needed.
Added
First build for macOS (Apple silicon). The app finds the game in
Applications, in ~/Applications and on external disks, hands over your
matches and puts the premade catalog and win rates into the addon folder —
as on Windows. Without it the addon on a Mac knows no premades at all.
How it differs from Windows. There is no tray icon: closing the window
quits the app, and you can minimise it to the Dock instead. "Open at login"
opens it minimised when you sign in; it works only when the app is in
Applications. The app tells you about a new version, but you install it by
hand — the button takes you to the site.
[0.9.9] — 2026-09-23
Changed
The access line no longer thanks you for Patreon. There has been no paid
tier since September 12: full access is earned by matches and lapses like any
contribution. For full access the line now shows how many matches this week
have been handed over, and warns ahead of time when access is about to run out. The tier label in the
header reads "Full access" instead of "King of EBG".
The trial week shows in the app. A newcomer gets full access for the first
week after signing in (server side since September 23). The access line shows
how many days of it are left and how many of the five matches that keep it
afterwards have been handed over.
The access line updates even when you are not playing. The app used to
ask the server about access only after sending matches, so someone who
stopped playing kept seeing "trial week" or "full access" after either had
ended. It now asks again every half hour.
The app understands the tier's new name. The server still calls full
access by its old name, patron; once most people have updated it will switch
to full, and this version shows both the same way.
Fixed
The app no longer holds up a Windows shutdown. The close button hides the
window to the tray, and the same thing happened when Windows was shutting
down: the system showed "this app is preventing shutdown" and waited. On
shutdown, restart and sign-out the app now closes at once. The close button
still hides it to the tray.
"Quit" in the tray closes the app again. It hid the window, like the close
button, and removed the icon, while the process itself kept running — with no
window and no icon, until the next reboot. A process like that held up
shutdown too.
[0.9.8] — 2026-09-12
Changed
Winrates reach the game in hours instead of a day and a half. The app
fetched the winrate table once a day, and only at the moment the game
rewrites its own files — that is, only while somebody is playing. With the
game closed nothing was fetched at all; and the addon reads the file only at
login, so a match ran on the table downloaded two sessions ago. The app now
checks on its own clock, every three hours, so the file is fresh when you log
in rather than right after you log out. The old delay has a measured price:
over 723 matches, a two-day-old table costs 4 percentage points of forecast
accuracy.
A repeat check no longer pulls 230 KB for nothing. The app tells the
server which version it already holds and gets back a short "nothing newer",
which is what makes frequent checks almost free.
Fixed
The empty stub from the addon archive no longer sticks forever. The addon
archive ships a blank PlayerStats.lua, so a CurseForge update overwrote the
real table with it. The app saw a file that was present and a version that had
not moved, and left it alone — while the addon shows no odds at all for a zero
model. The app now recognises its own file by size and refetches anyone
else's.
--version prints the version instead of opening the window. It was
declared in a way that parsed the flag and did nothing, after which the app
fell through to "no command — show the window". From a console that looked
like a hang: no output, and the window never gives the prompt back. Fixed in
source on 2026-09-09.
[0.9.7] — 2026-09-09
Fixed
A partial answer from the server no longer overwrites the winrate cache.
It used to be written to PlayerStats.lua verbatim: a missing coefficient
became a zero (and a zero in that formula is not "no forecast", it is a flat
50/50), an empty player list replaced two hundred kilobytes of real data with
a stub, and a zero floor switched off the check that stops the addon averaging
over nobody. Such an answer is now discarded and the existing file is left
alone — yesterday's data beats today's emptiness.
[0.9.6] — 2026-09-07
Added
Your Discord avatar next to your name. It used to be a circle with the
first letter, although the avatar itself has long been stored on the server
and shown on the admin pages. If the picture cannot be loaded — no network,
a blocked CDN — the lettered circle is what stays.
Changed
News is back on the main screen. In 0.9.4 it moved to the Settings tab —
a tab you open once, to switch autostart on. News is the reason to look at the
window at all, so it sits under the buttons again: the two latest, the rest
behind "Read earlier news".
[0.9.5] — 2026-09-07
Changed
The window shows the project's logo instead of a duck. A 🦆 emoji had sat
in the header and on the sign-in screen since the first build; it is now the
same shield the site and the tray use. The artwork is embedded in the app
rather than read from a file beside it — in the packaged build there is no
such file.
[0.9.4] — 2026-09-07
Added
A "Check for updates" button in the settings. The version check only ran
inside a sync cycle, and a cycle only starts when the game rewrites
SavedVariables — after a battleground. Anyone who installed the app and did
not play for a fortnight was never told about a fix.
Changed
The window is split into Status and Settings tabs — state, buttons and
news apart from the things you set once.
The app looks like the project now. The tray showed a gold square reading
"PIQ"; it is the PremadeIQ logo from the site, and the app icon is rebuilt
from the same artwork. Colours aligned with the site palette.
News no longer stretches the window: the two latest are shown, the rest
sit behind a "Read earlier news" button.
[0.9.3] — 2026-09-07
Fixed
The game folder can now be chosen in the app itself — a "Choose game
folder…" button sits next to the list of places we looked. The environment
variable stays for anyone who prefers it.
Finds World of Warcraft when it is not installed in the default folder.
The app knew exactly two things — a Blizzard registry key and three
hard-coded paths — so an install on another drive produced "No SavedVariables
found" with the addon plainly working and no way to point the app at the
game. It now also reads the Battle.net agent's product database and the
launcher's default install folder, and checks the usual folder names on each
drive.
A dead end now explains itself. When the game cannot be found, the app
lists every place it looked and how to correct it: set PREMADEIQ_WOW_ROOT
to the folder containing _retail_. The detect command prints the same.
[0.9.2] — 2026-09-06
Added
Win chances for the match. The app now fetches a winrate table from the
server and writes it next to the premade catalog (PlayerStats.lua). The
addon uses it to work out both teams' chances during the battle — with no
server round trip, because WoW only hands data out on an interface reload.
Refreshed daily, and rewritten only when the server actually has newer data.
Needs addon 0.9.45 or later.
[0.9.1] — 2026-08-10
Fixed
Players tagged as "takes raid lead" now reach the game. The server started
sending that list on 4 August, but the app did not know the field and silently
dropped it while writing the addon's data file — so no in-game notice about
them ever appeared. The list is now written and the addon sees it.
Changed
Version bumped to 0.9.1. That is part of the fix, not bookkeeping: the shipped
build and the published version were both called 0.9.0, so the app considered
itself current and would never have updated.
[0.9.0] — 2026-06-23
Security
Signed updates. App updates are now cryptographically signed (Ed25519) and
verified against a built-in key before anything is installed — a tampered or
spoofed download is refused even if it otherwise looks valid.
Encrypted sign-in token. Your Discord token is now encrypted at rest on
Windows (DPAPI) instead of stored as plain text; an existing token is migrated
automatically the next time it's saved.
Login & connection hardening. The browser sign-in handoff now carries a
one-time anti-CSRF token, the app refuses a non-HTTPS server address, and
ignores proxy / certificate settings injected via environment variables.
[0.8.2] — 2026-06-20
Changed
Feeds the leaderless premade alert. The known-premade catalog the Uploader
writes for the addon now carries a stable leader id and, on the full-access
tier, each premade's confirmed regulars — so the in-game alert can warn you
about a premade even when its leader never enters the battleground. After this
update the Uploader refetches the catalog once so the new data lands
immediately instead of waiting for the next daily refresh.
[0.8.1] — 2026-06-19
Changed
Addon-update banner links to CurseForge. When a new addon version ships,
the info-block button now opens the CurseForge store page (where the
CurseForge app updates the addon for you) instead of the self-host page. The
store URL comes from the /api/addon/latest manifest; it falls back to the
install page when absent.
[0.8.0] — 2026-06-17
Added
Reciprocal premade catalog. Your in-game premade alert now refreshes as a
result of an upload, not a background timer — you push your matches and the
same exchange hands back the latest known-premade list. A daily safety poll
keeps it fresh for patrons and on the rare leader change.
Info block + access-status banner. The window now shows a "What's new" card
with project updates, plus a live access indicator: it tells you how long your
full access lasts and warns before it pauses, so the activity window is never a
silent surprise.
Changed
Catalog sync is upload-driven. The old hourly catalog poll is replaced by an
upload-triggered refresh (plus the daily safety poll above) — less chatter, and
a returning contributor gets fresh data the instant they upload again.
Roster analysis fails soft. When the live win-chance tool isn't available
(below the contributor tier), the Uploader treats it as a quiet "locked" no-op
instead of surfacing an error.
[0.7.0] — 2026-06-14
Added
Addon handshake: precise cleanup of uploaded data. After every successful
upload the Uploader writes an UploadState.lua file into the addon folder
with a cursor that says "samples are server-confirmed up to point X" — per
account, keyed by a stable installId. The addon uses that cursor to delete
exactly the delivered samples instead of guessing by age, so the local
database stops growing (in production: PremadeIQ.lua shrank from 46 MB to
under 1 MB → the game closes instantly). The cursor is written from the
server's actual acknowledgement, is filtered to the right install
(_retail_, not _ptr_/_beta_), and never moves on non-sample events.
Fixed
The upload checkpoint no longer "freezes". Writing state.json now
survives transient file locks on Windows (antivirus / indexer; os.replace
with retry). Previously a single failure could freeze the on-disk checkpoint
for days, so after a restart the Uploader re-read and re-sent the whole
backlog. Unexpected write errors are still not masked.