Changelog
What changed in each version.
v0.55.1running
- Removed the Awards feature entirely (personal performance and dungeon review). It spent a WCL request on every fresh fight view automatically, with no opt-out, unlike the top-parse comparison it sat next to
v0.55.0
- Raid review is now the default tab, at `/`; personal performance moved to `/personal`. Nav order is now raid review, dungeon review, personal performance. An old `/raid` link redirects to `/` and keeps working. "Supported specs" is no longer shown at the bottom of raid and dungeon review — it's kept on personal performance, where it's most relevant
- Added Vercel Analytics (cookie-less page-view counts). Privacy Policy updated to disclose it
v0.54.2
- Moved the changelog link out of the Terms of Use and into the admin panel, next to the API budget it mostly explains
v0.54.1
- Terms of Use rewritten with a fuller acceptable-use, dispute and copyright-notice process, and an honest note on how the Site and this document are actually built (AI-assisted, priority lists adapted from published guides, not invented from scratch). Terms of Use and Privacy Policy both updated to name RaidMetrics as the operator and raidmetrics@gmail.com as the contact
v0.54.0
- Renamed the site from WoW Rotation Analyzer to RaidMetrics: new logo (nav bar, favicon, app icon), page titles and metadata updated throughout
v0.53.0
- Warcraft Logs data is cached the way their API guidance allows. What's worked out from a fight that's done uploading (raid pull summaries, cooldown coverage, deaths, damage targets, Mythic+ runs and pulls, fun awards, the player list, a fight's own bounds and phases) is kept for good, in Redis shared by every server instance when one is connected, so it survives cold starts and is worked out once rather than once per instance per day. Top-kill baselines and the spells top keys interrupt are rankings, kept a day; realm slugs are kept for good. A report's fight list is kept for good once its last fight is more than two hours old and none is still in progress. Anything a live log can still change (a fight still in progress, a report with recent fights) is kept 5 minutes, in memory only. Stored entries are keyed by app version, so a release never reads what older code worked out, and are dropped after 30 days. Finished results already stored keep being served while the hourly budget has paused requests
v0.52.0
- The site's /api routes only answer its own pages. RPGLogs' API terms forbid offering something that works like their API to third parties (4a) and passing their content on unchanged through a new channel (5d), and every call spends the site's hourly points, so a request is refused (403) unless a browser marks it as coming from one of the site's pages (Sec-Fetch-Site, or a same-host Origin/Referer from older browsers) or the site's own server makes it with an internal key derived from the Warcraft Logs secret (the top-parse comparison does this). Headers can be faked, so this stops casual reuse rather than a determined script; the hourly cap still bounds the rest. Opening an /api link directly in a tab now shows the refusal
v0.51.0
- Assassination Rogue rebuilt from the Wowhead guide's Deathstalker and Fatebound priorities, single target and AoE. Garrote and Rupture are followed as timed bleeds (Garrote 24s, Rupture 4s + 4s per combo point, measured on top parses): a refresh is demanded when one is about to drop and accepted anywhere in pandemic, and a Garrote inside Improved Garrote is always fine. Deathstalker finishes at maximum combo points during Darkest Night and doesn't refresh Rupture there (one short of maximum is accepted). Fan of Knives is the pick from 3 targets, either builder at 2-3; Fan of Knives and Crimson Tempest count the enemies they hit. Shiv is accepted, never demanded. Combo points are followed between finishers, and Mutilate's duplicate cast isn't graded. Kingsbane joins Deathmark in the cooldown review. New raid openers for single target and AoE; none in Mythic+. Validated against the top 10 Mythic parses on Nek'zali, Vashnik and Ula'tek and the top 5 keys in Altar of Fangs and Den of Nalorakk: 86.6-96.7% per parse
- Rules engine: a DoT removed and reapplied in the same moment is read as a refresh and keeps what it had left; a DoT's own cast is used for its duration even when a proc is logged in between; a DoT whose duration can't be known (spread copies) is followed as up with no known end
- Fury Warrior: casts during Bladestorm no longer use up Whirlwind's cleave charges
- Mistakes show the enemy each cast was aimed at
- The deaths card no longer opens a single death by default
v0.50.0
- Pull by pull: packs pulled a little after one another are one pull. A wave engaging within 45s of a pull's start joins it unless that pull is nearly dead by then (under 50% health). On a Blinding Vale +17 this matches a hand-fixed arrangement pull for pull: a lone Virid Grovekeeper and four Lashers that came in 20s and 40s into a pull no longer show as chains of their own
- Spawns no longer make pulls of their own. Enemies that other enemies summon or release mid-fight count in the pull being fought when they appeared: Hatchling and Living Venom (Altar of Fangs), Magma and Volatile Totems and Starvation Effigy (Den of Nalorakk), Minion of Zul (Kings' Rest), Demon Fly, Tiny Felwyrm and Unleashed Imp (Murder Row), Scorchling (Ruby Life Pools), Faithless Conscript (Temple of Sethraliss), Spineshield Beetle (The Blinding Vale), Champion's Spear and Scavenging Siphoid (Voidscar Arena). Picked from two top runs of every dungeon: enemies that engage while others are already fighting nearly every time, live briefly or come in dozens. Potadpole Eggs and Newborn Potadpoles (The Blinding Vale) are left out entirely. Across 14 keys no pull is made only of spawns, and none overlaps an earlier one without being marked chained
v0.49.0
- Fury Warrior rebuilt from the Wowhead guide's Slayer priority: its single-target and multitarget lists, each split into during Recklessness and outside it. Crushing Blow and Bloodbath are graded as Recklessness's forms of Raging Blow and Bloodthirst, sharing their cooldowns. Rampage with Enrage down or under a second left is demanded. Otherwise, in single target, Rampage over 100 rage is tied with Execute, Raging Blow/Crushing Blow and Odyn's Fury, and under 100 it can wait while Enraged (the guide's pooling note). In multitarget it's "as much as possible", tied with the same spells. Bladestorm goes after a Rampage or when there's no rage for one. Odyn's Fury (new to the grader; it logs four casts per press, now counted once) is demanded when it has sat ready 6s in Recklessness in AoE; top raid players drift it on single target, so it isn't demanded there. Execute has its own cooldown. Rampage costs 50 rage in Recklessness. On 25 top Slayer parses (11 Mythic raid, 14 +19-21 keys) this grades 91% correct. Only Slayer is modeled: a Mountain Thane log is graded against it, with a warning
- Fury Warrior: the Bloodbaths that Slayer's Bladestorm casts for the player (Unhinged; about four per Bladestorm, 95% of all Slayer Bloodbaths) are no longer graded as the player's presses
- Fury Warrior opener: Recklessness, Rampage, Bladestorm (or with Odyn's Fury after Recklessness), and Whirlwind first in multitarget. Not judged in Mythic+, where the guide saves cooldowns for packs still coming
- Fury Warrior cooldown review: Recklessness comes back every ~44s with Anger Management (was taken as 90s) and lasts 24s (was 12s)
- Rules engine: casts the game makes for the player while they have a buff are marked automatic and not graded, and an aura a cast gives the player a few ms before its own cast event (every Rampage replaces Enrage) is read as it was going into the cast
v0.48.1
- Raid review, damage by target: All, Bosses and Adds are buttons like the enemy chips above them, and the one matching what's picked is highlighted (none when the picks are a hand-made mix)
v0.48.0
- An admin page (/admin, behind the ADMIN_PASSWORD environment variable) to cap how much of the hourly Warcraft Logs API budget (18,000 points) the site may use. Every Warcraft Logs query, all 14 places the site makes one, first checks this hour's spend as Warcraft Logs reports it for the app's client (live site, previews and local development together), re-read every 30 seconds; at the cap it stops querying and visitors see that it's paused until the hour resets. "Pause now" stops it outright. The cap is kept in the project's Upstash Redis store so every server instance sees it (in memory when none is connected, as in local development). Logging in sets a signed, httpOnly session cookie for 12 hours; wrong passwords are slowed down; the page isn't linked or indexed
- The privacy page says the only cookie is the administrator's sign-in
v0.47.0
- Frost Mage (Spellslinger) checked against Raidbots sims of a Cleave Spellslinger build at 1, 2, 5 and 8 targets, which run SimulationCraft's current Frost list. Hard-cast Blizzard is only asked for at 7+ targets (the sims never cast it at 5, and only at 8), instead of over Frostbolt from 3; instant Blizzard from Freezing Rain at 5+. Ray of Frost at 3 or fewer Icicles or 3+ targets, as the list has it. Comet Storm, Ice Nova and Cone of Cold (at 4+) sit where the list puts them but aren't demanded, since the sims' build doesn't take them. A Brain Freeze or Fingers of Frost that came in during a Frostbolt or Glacial Spike no longer counts as ignored. Top Spellslinger players went from 70-91% to 82-93% correct (one moved from 87.9% to 87.3%). Frostfire is unchanged
- The dungeon review's landing page described raid features: its example finding was a held Grasping Fangs tether (a raid mechanic) and its features list promised tether holds and soaks. The example is now a real chained pull from a Den of Nalorakk +17, and the list describes pull by pull and avoidable damage and interrupts; "Compare vs a top run" says it's on a player's page
v0.46.0
- Cooldown review: a talent cooldown the player never cast is only held against them if they took the talent. A Windwalker without Invoke Xuen no longer gets "Invoke Xuen was never used" (checked on two top Windwalkers who didn't take it; one who did still has it reviewed). A never-cast choice node counts as the other side of the choice, since the log records the node and not the side; baseline abilities are still flagged when never used. Every spec
- Comparison item effects: Vashnik's Sanguine Rancor is found by its Crimson Bile and Concentrated Bile damage (8.0k DPS on a top Assassination Rogue), and the Loa Worshiper's Band by its Loa: Akil'zon's Cry of Victory and Nalorakk's Call to War (buffs), Jan'alai's Flames and Halazzi's Claws (damage). Neither tooltip names them; they were found on players wearing the items and on nobody else. They showed as "not seen"
v0.45.0
- Combat potions in the comparison's trinkets and item effects, with the DPS each was worth: Potion of Zealotry's from its own damage, and the stat potions' (Potion of Recklessness, Light's Potential, Liquid Luster) estimated, marked ≈. The estimate is the share of the damage done while each potion was up that its stat added, from the player's own ratings: Midnight's level-90 rates (46 crit, 44 haste, 54 versatility a percent) and the diminishing returns past 30%, both matched to Blizzard's character profiles, and the top-quality amounts from the in-game tooltips. Mastery is taken as 1% per point, which varies by spec. On a top Ruby Life Pools key: Potion of Recklessness ≈14k DPS on a Warrior (2.9% of their DPS), Light's Potential ≈17k on another. Health potions are left out
v0.44.0
- Comparison item effects: a catalysed Gaze of the Coiled Watcher or Chausses of Unbound Rancor is listed under the item's name (its hover says which tier piece it became), so it lines up against the same item worn as it dropped instead of showing as a separate Venomcursed row and "not worn" on each side. Venomcursed Mastery comes from more than one item, so it keeps the cantrip's name
- Comparison item effects: Keeper's Seething Core no longer counts other buffs with "Ula'tek" in their name (Voracious Heart of Ula'tek, the boss's Vantus Rune) as its own. A lone capitalized word in a tooltip is only taken as a proc name when it isn't the end of a longer one ("Focus of Ula'tek")
- Shareable links: a "Copy link" button on the player analysis, raid review and Mythic+ review copies a link that opens on the same view. The player analysis now keeps its address bar in step with what's open (report, fight, player, and compare=top for the top-parse comparison), as the raid and Mythic+ reviews already did with the pull, boss, picked pulls or key. A link is only a reference (report code and IDs, like the Warcraft Logs URL): the page fetches the report from Warcraft Logs when it's opened, so nothing from Warcraft Logs is stored to share it and their access rules still apply
- A boss overview's left-out pulls go in the link (&without=), so a reload or a shared link keeps them out
- Every raid pull shows the same row of its boss's pulls as the boss overview: clicking another pull adds it and opens the overview on just those two, ↗ opens a pull on its own, and All, Kills and Wipes open the overview counting those
- Armory link: no link for a Chinese realm (China's realms aren't on Blizzard's armory; the link was an error page). Checked: EU and Korean links open the character's page
v0.43.0
- The top-parse comparison links the top player's Blizzard armory page beside their log, for their gear, enchants and talents. The realm's slug is looked up from its Warcraft Logs ID (a Korean realm's name is in Korean), or worked out from a plain Latin realm name; no link when neither works
- Raid review: "Pick several pulls" turns the boss cards into toggles, so any pulls on any bosses can be clicked on and off and reviewed together (the same view as a boss's All pulls: kills and wipes, time, deaths, what ended the wipes, avoidable damage and the roster over just those pulls). A boss's All pulls adds or removes all of its pulls, and the picks go in the link (&pulls=) so a set can be shared
v0.42.0
- The raid review has a Time not on bosses card beside Time in combat: from the first pull to the end of the last, the time between pulls (trash, breaks, running back)
- Item-level parses: Warcraft Logs reports 0 for one it hasn't worked out yet (a rank 1 of 1 at 100 overall comes back 0), so a 0 shows as "—" and stays out of the average
- Raid review, a boss's pulls together: "All pulls" on a boss card opens every pull on it at once, with kills (or the best pull), which pull it first died on, the fastest kill, time on the boss, deaths and avoidable deaths, what ended the wipes, the avoidable damage taken most and who took it, and the roster on just that boss. Links keep it open (&boss=). Pulls can be left out (an early reset, a disconnect) by clicking them, or narrowed to kills or wipes; the numbers, wipes, avoidable damage and roster are over the pulls picked
- A wipe's player table in the raid review has no parse columns (only kills are ranked) and starts sorted by role
- A pull's player table in the raid review drops its Interrupts and Dispels columns: the interrupt and dispel tables above it have them
- Damage by target on a raid pull: every enemy damaged (bosses first) can be picked or left out, or narrowed to bosses or adds, and the players are ranked by their damage to what's picked, with DPS over the pull and their share of the raid's. With two to four enemies picked each gets its own sortable column. Read from each player's own damage-by-target table (Warcraft Logs' per-enemy list only names the top five); totals match Warcraft Logs'
- Boss mechanics, avoidable damage, interrupts and dispels fold down to their title with a click (and stay folded on every pull, kept in the browser), and their titles are larger and bold
- A boss mechanic that only exists on some difficulties is tagged in the raid review ("Mythic only", "Heroic+", "Normal & Heroic"), from the difficulties its definition lists: on Mythic Ula'tek, Noxious Shell and Toxic Incubation are Mythic only and Spectral Coils is Heroic+
v0.41.0
- The Mythic+ review shows the group's buffs and debuffs on one line above the player table: the party DPS each damage increase was worth (Battle Shout, Skyfury, Mystic Touch and the rest, estimated the same way as the comparison's group makeup, summed over the five) and a total, with the ones nobody brought struck through. Skyfury's extra swings are counted from the log. Hunter's Mark shows as present but isn't estimated here. On a top Altar of Fangs key: Battle Shout ≈+62k, Skyfury ≈+25k
- Pull by pull: the Voidbound Emissary (the Voidbound affix spawn) always counts in the pull being fought when it appeared, or the nearest one. It used to get a pull of its own when it outlived a pull that was already half dead, and it no longer strings separate packs into one pull
- Pull by pull leaves out adds a boss spawns during its fight (Kokia Blazehoof's Blazebound Firestorms, the Fractured Shivercores in Den of Nalorakk, Xathuux's Legion Axes, Wild Imps, Animated Gold): an enemy never met outside a boss fight in the key, some of it arriving after the boss was engaged. Trash pulled into a boss stays. Checked on top runs of all eight dungeons
- Prio mobs confirmed for every dungeon from the trash underlined in Tactyks' Midnight S2 M+ Ability Tracking Sheet (bosses left out), 58 mob types across the eight dungeons, each matched to its NPC id in real logs. Ruby Life Pools' Flashfrost Chillweaver is a caster, not prio
- Comparison item effects: the raid's Venomcursed cantrips (Critical Strike, Mastery, Haste) now show when they're on a catalysed tier piece. The cantrip rides on a bonus ID that survives the Catalyst, but Blizzard's item data only shows the plain tier piece, so they were missing; they're listed by the cantrip's name so two players line up whichever piece theirs is on
- Bosses that are one fight with breaks in it, not phases in turn, show the breaks as intermissions: Sszorak's Howling Maelstrom and each of The Lost Explorers' Binding Anguish ("I1" instead of "P2" for a pull that ended there, and on the phase bars). A boss's other stages count as breaks once its pulls in the report go back to its main stage from one. Sszorak still takes damage in the Maelstrom, so the rotation grading doesn't excuse downtime there the way it does in a real intermission
- The awards sit at the bottom of the raid review, under the roster, as they already did on the Mythic+ review
- The raid review's time in combat shows beside it how much of the night wasn't spent on bosses: from the first pull to the end of the last, the time between pulls (trash, breaks, running back)
- The raid review's roster folds away: click its heading (which now also counts the players). Clicking the night's deaths opens it again
- The raid review shows the item-level parse (the rank among players at the same item level, as Warcraft Logs shows it) beside the overall parse, each sortable on its own: per pull, and averaged over kills in the roster
v0.40.0
- Pull by pull: a boss fight is timed like any other pull, so trash funnelled into a boss is one pull with it instead of the boss always being a pull of its own. A boss fight's own enemies (a council, its adds) still always stay together. On a Den of Nalorakk +17 the pack pulled 9s before The Hoardmonger and the trash brought to Sentinel of Winter now go with their bosses; across 13 keys, 16 of 44 boss pulls had trash brought in
- A pull that starts while the one before is still up is either the same pull (the one before is barely hurt and mostly alive) or chained onto it, never a separate pull with no note. A few fresh spawns hanging about a pull that died minutes ago no longer pull that whole pull into the next one (Merektha's snakes had dragged 25 dead mobs into her fight). Across the 13 keys, no pull overlaps an earlier one without being marked chained
- Den of Nalorakk: Grizzled Warbringer (both of them) is confirmed prio
- The boss/prio/caster/melee legend sits under the maps and the Keystone Guru panel
v0.39.0
- Pull by pull no longer puts trash inside a boss fight. Warcraft Logs' pull list names each pull's enemies as ranges of instance numbers, and a boss fight's range could take in mobs killed minutes earlier: on a Den of Nalorakk +17 The Hoardmonger's took in a Territorial Matriarch killed in the first pull, so the boss fight "started" at 0:37 and showed as pull 2, swallowing the pack pulled just before it. An enemy now only belongs to one of Warcraft Logs' pulls if it was fighting between that pull's start and end. Across 13 keys every boss pull starts within 6s after Warcraft Logs' own start for it, never before. Summons that die within 12s (Starvation Effigies) stay in the fight they appeared in instead of showing as their own chained pull
- Prio mobs confirmed by hand: Temple of Sethraliss (Dutiful Tamer, Krolusk Matriarch, both Spark Channelers, Static Anomaly, Orb Watcher, Temple Disruptor, the trash Twisted Hexxer, Corrupted Guardian), The Blinding Vale (Luminous Thornmaw, Overgrown Hydra; Potadpole Egg never prio) and Den of Nalorakk (Starvation Effigy). A confirmed one is prio even where the log calls it a boss, in the pull view and the Prio damage column alike. Changing the lists refreshes saved pulls
- Awards, just for fun, under a Mythic+ key and on a raid pull: Helicopter (most 90°+ turns a minute), Marathon (furthest run), Turret (least moved), Lone Wolf (furthest from the group), Leeroy Jenkins (hit first before the tank), Floor Inspector (most time dead), First Blood and Swirly Connoisseur (most avoidable hits). Movement and facing come from each player's casts; the log has no jumps, so no Kangaroo Award
- A pasted link's `fight=last` opens the report's latest fight on the player, raid and Mythic+ pages, and the raid and Mythic+ pages now follow a link's `fight=` number too
- Arcane Mage: the "Overpowered Missile was already used" note no longer shows for a Missile chained into the Overpowered one or cast in the same GCD (within 2s). "Yellow glow = Overpowered Missile" only shows on Arcane Mage analyses
v0.38.0
- The Mythic+ player table has a Prio damage column beside Boss damage and Trash damage: each player's damage to the dungeon's priority mobs (the suggested and confirmed list in `app/lib/mplus/prioMobs.ts`). It's taken out of trash damage, so boss, trash and prio add up to all damage to enemies. On a top Murder Row key the five players put 6M-83M into prio mobs. Opening a player tags prio mobs in their enemy list
v0.37.0
- Mythic+ pull by pull: under the player table, a key is broken into the pulls the group actually did, read from the log alone. Enemies that engage together are one pull; boss fights come from Warcraft Logs' own pull list and are always one pull (a council is one). A pull that engaged while the one before was still being killed (under 75% health on average) is marked chained, with how many were still up, at what health, and how many joined; enemies still up at higher health hadn't been fought yet, so mobs joining them are the same pull. Each row shows the enemies coloured by role (boss, prio, caster, melee, in the Luxthos Platynator colours), who did the damage to prio and boss enemies, who kicked, and kickable casts that went off. Checked against 12 keys (top runs of four dungeons and a +12 to +17 set): every enemy lands in exactly one pull, every boss fight is one pull, and damage matches Warcraft Logs' own table to 98-100%
- A route map drawn from the log (no dungeon art): where the group cast from outlines the rooms, the path it walked is a line, and the pulls are numbered on it. It zooms and pans. Beside it, a Keystone Guru route link can be pasted to show the planned route; it loads only on a click, since it brings Keystone Guru's cookies and analytics
- Edit pulls: a checkbox lets any enemy be moved to another pull or split into a new one, and a pull merged into the one before. The map and table update as you go, and the arrangement is kept in the browser per key
- Prio mobs are suggested from what top teams do, not guessed from health: for each mob type across six top runs of its dungeon, how much earlier it died than its health says it should, how much of the damage on it was single-target, and how often it was kicked, measured against its pull-mates. `scripts/prio-mobs.mjs` writes the suggestions (run once a season); a suggested one shows with a "?" until confirmed or rejected in `app/lib/mplus/prioMobs.ts`
- Outlaw Rogue rebuilt from the Wowhead guide's Trickster and Fatebound priorities. The finisher is Dispatch at any health (the old rules asked for Eviscerate above 35%, which the guide never mentions); Roll the Bones is read by stage (Double Trouble, Triple Threat, Jackpot), with Keep It Rolling at stage 3+ (2+ for Fatebound); Preparation resets Between the Eyes, Adrenaline Rush and Killing Spree. Combo points are followed between finishers (only finishers report them, so builders read the last finisher's 7), and Fan the Hammer's extra Pistol Shots count as one press. Six top Trickster Outlaws on Sszorak went from 27-39% to 90-95% correct. No Fatebound log turned up in 89 checked, so Fatebound is transcribed but untested
- Demonology Warlock rebuilt from the guide's Diabolist priority: Soul Shards are tracked, Hand of Gul'dan/Ruination at 3+ is demanded, Demonbolt waits when it would overcap shards, and the opener follows the guide. Implosion (6 imps can't be seen), the Grimoires (held for Tyrant) and Demonbolt under 3 Demonic Cores (the guide says to bank 2) are allowed but not demanded; in Mythic+ Tyrant is too, and the cooldown review excuses holding it for the next pack. Top players: 86-96.5% in raid, 96-97.5% in Mythic+. Soul Harvester is graded on the Diabolist list for now
- Devourer Void-Scarred: Soul Immolation when one isn't burning is never wrong over Void Ray outside Void Metamorphosis, per the guide's single-target list
- For every spec: a buff that was up before the pull (a Roll the Bones stage, a food proc) now counts as up from the start, as debuffs already did, instead of missing until it next changed
- Spell icons now load from Blizzard's own image server instead of Wowhead's, and spell names no longer fall back to looking them up on Wowhead: ZAM's terms forbid both without written consent. Wowhead's tooltips (which they offer for other sites) stay. The privacy page says so, and lists everything the site keeps in the browser
- The item level warning next to a raid parse says median, which is what it uses
v0.36.0
- The Mythic+ review splits what it called interrupts in two. Interrupts are real kicks (Pummel, Wind Shear, Counterspell and the like); Stops are casts cut short by crowd control, since Warcraft Logs also credits stuns, incapacitates and knockbacks that land mid-cast. Opening a player lists the spells behind each and what they stopped, e.g. "Pummel ×22" under Interrupts and "Shockwave ×47 · stopped Felfire Burst ×46, Fel Rage" under Stops
- Each row of the Boss mechanics card has a small box to fold it down to its name and result, hiding the description and the players. A folded row stays folded on every pull of that boss, remembered in the browser
- Scrollsage Iku's Blink Nova and Mor'zahi's Malevolent Presence on The Lost Explorers no longer count as raid damage spikes, so the cooldown view doesn't ask for a raid cooldown on them. They hit everyone but are healed through. On a top Heroic kill they had been the main damage in 5 of the 7 spikes listed
v0.35.0
- The Lost Explorers track Shell Spin as a mistake: each time First Mate Nama's Shell Spin debuff lands on a player it counts as one, named after them. Top kills still pick up a few (6-10 on Normal, 4-22 on Heroic, 2-3 on Mythic)
- Blessing of Freedom now counts as a dispel on Ula'tek's Hobbled, the snare on her tanks. Warcraft Logs leaves it out of its Dispels table (Tiger's Lust is in it), so each Hobbled that came off within a few milliseconds of a Blessing of Freedom cast on that player is added to the Dispels card and to the caster's dispel count. On one top Heroic kill Hobbled went from 1 of 3 dispelled to 3 of 3
v0.34.0
- Ula'tek's Putrid Membrane now names who hatched the viper: the player carrying an egg when a Caustic Wave hit them. On Heroic wipes the wave, the egg coming off its carrier and the viper's raid-wide membrane all land on the same timestamp. Vipers from Stage Three's eggs on the ground, or from a carried egg hatching with no wave near it, still count but name no one
- The avoidable damage table shows which phase each player was caught in, the way the pull chips label them: "Blackk 1× P1, 2× P3" instead of "×3"
v0.33.0
- Every Venomous Abyss boss's mechanics rechecked from scratch against Blizzard's spell text, the Method guides and the logs: top kills of every boss on Normal, Heroic and Mythic, and wipes from other guilds. Each mechanic now only shows on the difficulties it exists on (Normal Ula'tek has no tethers or bites, Normal Nek'zali has a pyre but Mythic doesn't, Mythic has its own egg and well jobs)
- Damage from doing a job no longer counts as avoidable. The avoidable-damage check only asked whether top raiders take an ability, and a job only a few players do looks just like a swirl only a few stand in. Carrying Ula'tek's eggs, holding a Grasping Fangs tether, being bitten by Serpent's Bite, intercepting Toxic Incubation, popping Toxic Droplets, stepping on junk crates (Splinters), the Slithering Flames that go to everyone not in the pyre, the well team on Mythic Nek'zali, and every other ability a boss aims at a player or a tank are now never avoidable. Damage that goes off around someone carrying a debuff (Plague Froth, Volatile Purge, Gloombomb, Volatile Venom, the Crosswinds blast, Frost and Fire Patches) is theirs, but still avoidable for anyone standing next to them. Throw Junk's landing stays avoidable: it's the circle before the crate lands, not the crate itself
- Nothing is counted twice: a hit the boss-mechanics card already scores (a soak, Cultivated Burst on its host) no longer also shows as avoidable damage
- Fixed mechanics that were wrong. Serpent's Bite credited the 3 bitten players as its soakers; it now credits who leeched it (Ingested Venom: the whole raid on Heroic top kills, 4 assigned players on Mythic) and calls out anyone left to turn into a Calcified Corpse. Guillotine asked for 5 or more soakers, which failed every Mythic kill (top ones soak with 3-5): Guillotine and Grim Guillotine are now scored on soaking one with the last one's 500% still up. Mutilate's "5 or more" (from the guides and spell text) didn't match the log: on Heroic 4 players took an even share while 3 took three times as much, so a Mutilate now fails when it goes off in its deadly form. On Normal, Mutilate and Ravenous Feast no longer flag the whole raid for soaking twice: their penalty for it is 0% there. Elemental Explosion now names who set it off (hit by a Frostfire Volley missile while still carrying Burning Flames or Piercing Frost). A Frost Orb held by an immunity was counted once per hit; Helical Toxins expiring on four players at once counted as one Cultivated Burst instead of four; a raid-wide failure that also hit pets counted once per pet hit
- New mechanics: Ula'tek's eggs (who carried them; on Mythic, picking one up with Rancid Yolk still on, or walking into another carrier), Doomscale Eggs carried to the cauldron, Mythic's Toxic Incubation intercepts, a viper hatched by Caustic Waves, Dread Roar, Rattler Slam and Unchecked Rage (no one in reach). Mythic Nek'zali's well team, and anyone going back in with Soul Exhaustion. Restless Amani that reach the well (a Soulcoil Rite outside Soulcoil Ignition and Invoke; no top kill or wipe checked has one yet). Toxic Droplets popped, and junk crates broken, per player
- Soak minimums are written for 20 players and now scale with Normal and Heroic raids of 10-30
- The Discord summary no longer says "top raids avoid it" after what broke the wipes
- The supported specs list shows DPS specs only
v0.32.0
- Raid cooldowns against damage spikes: opening a pull now shows its eight biggest spikes of raid damage, each with the raid cooldowns that were up during it and who cast them, or "✗ nothing up" in amber. A spike is the 6 seconds with the most boss damage on non-tanks, counting only abilities that hit at least half the raid in that time (so a big hit on two players, or one aura ticking on everyone for a minute, isn't a spike), named for the ability that did most of it, and only up to the point a wipe fell apart. Below that is every raid cooldown used in the pull, with the ones that went off during none of the biggest spikes marked "covered nothing". A cooldown that logs a cast per tick (Tranquility, Divine Hymn) counts once. Tracked: Rallying Cry, Anti-Magic Zone, Darkness, Power Word: Barrier, Spirit Link Totem, Aura Mastery, Zephyr, Tranquility, Divine Hymn, Vampiric Embrace, Healing Tide Totem, Revival, Restoral and Holy Word: Salvation. The log records the cast but not how long the effect lasted, so each counts as up for a fixed window after its cast (3 to 12s, noted under the card); externals on one player (Pain Suppression and the like) aren't part of this
- Copy a summary for Discord: a folded card above the boss cards writes the night up boss by boss (kills and which pull, best wipe percentage, what broke the wipes, the phase they fell apart in, enrages) plus the night's pulls, deaths and repair bill, with the report link wrapped so Discord doesn't embed it. It names the avoidable damage that hit people before a pull fell apart, worst first, with how often each landed and how many deaths it caused ("Corpse Blight (14 hits, 3 deaths)"). It never names players. It's split into messages under Discord's 2,000-character limit, each with its own Copy button
- Under the hood: the boss cards' "What ended the wipes" and the repair estimate now live in shared code, so the Discord summary and the page can't disagree
v0.31.0
- Accessibility pass. Fixed a contrast failure that ran through the whole site: the gray used for labels, timestamps and secondary text (`text-neutral-500`/`600`, ~230 uses) computed to roughly 4.2:1 and 2.5:1 against the dark background, both under WCAG AA's 4.5:1 minimum — now ~7.8:1. Two spots were far worse at about 1.9:1 and effectively invisible, which is why the version number in the footer looked like it wasn't rendering at all. Click-to-sort table headers and expandable player rows were mouse-only and are now keyboard-operable; the three report inputs and both comparison dropdowns had no accessible name and now do; added a skip-to-content link and a focus ring that's always visible when tabbing
- Dark mode is now unconditional rather than depending on the visitor's OS setting, and the site finally renders in the Geist font it was already loading — `globals.css` had a leftover `font-family: Arial, Helvetica` on `body` that silently overrode it
- All three tools now share one landing page: `/raid` and `/mplus` previously jumped straight into a dense full-width table with no front door, while `/` had a narrow, spacious one. They now have the same two-state layout, the same "how it works" walkthrough (with an example finding specific to each), feature grid and supported-specs list, all from shared components so the three can't drift apart again. Each page is now titled "Personal Performance Analyzer" / "Raid Review Analyzer" / "Dungeon Review Analyzer", and the browser tab title follows whatever's open — a specific pull, key or player
- Spacing across the app moved onto an 8pt grid: every padding, margin and gap that wasn't a multiple of 8px was rounded up to the next one (370 values), which also gave everything a little more room to breathe
- The site nav's logo is now a genuine "start over" — it clears the remembered report instead of quietly reloading it
- Added [Terms of Use](/terms) and a [Privacy Policy](/privacy), linked from the footer. Written against what the app actually does rather than boilerplate, including the part the first draft ignored: a raid report covers up to twenty people and a key covers five, none of whom visited the site, so that processing now has a stated legal basis and a route to object. Neither has been reviewed by a lawyer
v0.30.0
- The raid review's pull chips now show the phase a wipe ended in, as Warcraft Logs labels it: "P2" for the second stage, "I1" (in amber) for the first intermission. Hovering a chip names the phase. Kills don't show one, since they always end in the last phase. Example: Heroic Ula'tek pulls 1-3 read P2, I1, P2
- "What ended the wipes" moved up into the pull picker: each boss's card now has its own short summary under its pull chips (what broke the wipes, where they fell apart, enrage timers, avoidable deaths), instead of a separate section further down. Cards keep their own height, so a boss with one kill no longer stretches to match its neighbor
- Opened deaths stay open until you close them, in both the raid review and the dungeon review, so they can be compared side by side. Opening another player's row no longer closes the one already open, and picking a death on the timeline opens it without closing the others. Switching pulls or keys starts with everything closed. That also fixes a death breakdown read on one pull showing up for the same player on the next
- New kind of boss mechanic: a debuff that always lands on the whole raid, where what the raid controls is how long it stays up. Blight Vein on Ula'tek is the first. Every Grasping Fangs snap puts a stack on everyone. The card shows how long the raid had it, each stretch with its stacks and who snapped the tethers that set it off, and whether that took longer than any top kill on the same difficulty. Top kills plan it differently (pairs, or one and then the other five at once), but none took longer than 27s on Heroic or 14s on Mythic. Snapping a tether counts toward the player's mechanics. Example: a Heroic Ula'tek wipe at 22.0s over three stretches (3, 2 and 1 stacks), against a Mythic top kill at 12.9s (1 stack, then 5)
- Blight Vein leads with each player's tether: everyone who had Grasping Fangs, in the order they snapped, with how long they held it and how much of that they sat idle after they could have snapped it. They can snap once the raid is clear of Blight Vein, or as soon as the tether lands for the first snap. Snapping while it's still up stacks it on purpose, so that's never idle. Idle time longer than any top kill's is marked in red and counts as a mistake for that player. Top kills snap within 4.7s of the raid being clear. The first snap comes within 7.7s on Heroic, while Mythic plans hold it 8-16s. The stretches the raid spent under Blight Vein fold away below. Example: a Heroic Ula'tek wipe where the first snap waited 9.3s and the other five went on time, against the kill's 3.7s first snap
- The Prep column calls out the enchants that matter most by name, in red: chest, legs, rings and weapon ("no ring enchant", "no enchant on 2 rings"). The rest (head, shoulders, feet) are grouped into an amber "1 minor enchant". A missing major enchant also counts double when sorting the column
- Havoc Demon Hunter: Felblade is no longer graded, the same as Charge for Warriors. Each press logged twice (the press and the charge landing), so it was graded twice. The Hunt's impact and Fel-Scarred's Consuming Fire also logged a second cast, and now count once
v0.29.1
- Trimmed the landing page's own "Personal performance" label, which duplicated the site nav's active tab right above it
v0.29.0
- The site is split into three sections, with a bar across the top of every page: Personal performance (the rotation analyzer, /), Raid review (/raid) and Dungeon review (/mplus, one Mythic+ key). The current section is highlighted and Changelog sits at the right. Existing links still work. From a loaded report, "Raid review →" and "Dungeon review →" open the same report in the other sections
- Death breakdowns (in a player analysis and in the raid review) now show the help the player had. The last seconds list incoming heals alongside the hits, in green with who cast each, and the summary line adds what shields absorbed next to damage taken and healing received. "Protected by" names every defensive up when they died, marked as their own, an external (with who gave it: Pain Suppression, Ironbark, Blessing of Sacrifice and the like) or raid-wide (Rallying Cry, Anti-Magic Zone, Spirit Link Totem, Aura Mastery, Tranquility...), or warns that nothing was up. "Pressed" lists the defensives, healthstones and health potions they used in the 10 seconds before. "Ready but not pressed" lists the personal defensives they had and didn't use (Astral Shift, Unending Resolve, Blur, Ice Block...), plus a healthstone when a warlock is in the raid and theirs was off cooldown, and a health potion when they hadn't drunk one that pull. A talent defensive counts only when the player took its talent (read from their talents in the log against Blizzard's talent trees) or used it that fight, and it's ready when it hasn't been used within its base cooldown. From Midnight raid logs: health potions don't share the damage potion's cooldown (drunk 70-80s after one), and healthstones come back within a fight (95s apart), so they're taken as ready 90s after use. Example: a Heroic Ula'tek Enhancement Shaman killed by Calcified Corpse with Astral Shift up (pressed 6.4s before), Stone Bulwark Totem and a healthstone ready but not pressed, and 1.39M healing received in the last 10 seconds
- The raid review opens with the night in numbers: pulls, kills, wipes, time in combat, deaths, and an estimated repair bill. Every death costs 10% durability on all gear, about 250 gold for a Mythic-geared player. Armor type doesn't change that and item level barely does, but the gear's track does: Myth-track costs about 67% more than Hero-track, so about 150 gold. The gear worn isn't in the log, so Mythic pulls count at 250 gold a death and every other difficulty at 150 (an upper bound for Normal and LFR). Example: 152 deaths over 15 Heroic pulls, about 22,800g
- New raid review (/raid, or "Raid review" from any report): a whole raid night on one screen. Paste a report and every raid boss pull in it is read in the background (Mythic+ keys and trash in the same report are left out), filling in as each one arrives. Bosses are listed with each pull as a chip showing kill or wipe, how far it got and its pull number, and a bar for its progress. Below that, "What ended the wipes" sums up each boss across the night: which ability broke how many of the wipes, whether top raids take that ability every kill (so it was a healing or defensives check) or avoid it, which phase the wipes fell apart in, and how many deaths came from avoidable damage. The roster table covers everyone across every pull they were in, sortable by any column: average parse on kills (HPS for healers), deaths, deaths to avoidable damage, avoidable hits (in total and per minute), interrupts and dispels. Example: a Heroic night where 3 of 6 Ula'tek wipes broke on Blight Vein in Stage Two, which top raids take every kill
- Opening a pull shows why it wiped: when it fell apart (once a fifth of the raid is dead, at least 3), how many died in that collapse and what killed most of them, who died to avoidable damage, raid-wide hits top raids don't take, and who died well before it. Resets (under 30s, or the boss above 98%) and pulls called before the raid fell apart are named as such. A timeline shows every death over the pull with its phases and the moment it fell apart (click a death to open that player at that death), and each player gets a row with their parse, deaths, avoidable hits (how many; open the row for which abilities and how much damage), interrupts, dispels and damage taken. Every column sorts, with players missing the value (no parse on a wipe) kept at the bottom either way. Opening a player lists their deaths with the same detail as the Deaths card in a player analysis: health 10, 5 and 2 seconds out, how long they were down, the killing blow as a share of max health plus overkill, damage taken against healing received over the last 10 seconds by ability, the last hits with the health left after each, what they were casting, whether they were moving or standing in a ground effect, and a link to the damage they took in Warcraft Logs. It's read when the player is first opened, and kept for a day. Deaths and hits after the wipe was already decided are shown but don't count against anyone. "Analyze" opens a player's full analysis for the pull. The page's address follows the open pull (/raid?report=CODE&pull=ID), so a wipe can be shared
- Each pull also has three mechanic tables. Avoidable damage by ability: how many times it caught someone, the damage it did, who died to it, when it first caught someone, and each player it hit (with their hits, and a ☠ if it killed them). Interrupts by enemy spell: how many times enemies started casting it, how many were kicked, how many went off, and who kicked them (with which ability on hover). Dispels by debuff: how many times it landed on the raid, how many were dispelled (and what share), and who dispelled whom. WarcraftLogs' interrupt table counts every cast of an interrupted spell, the raid's own included (a couple of kicks on an enemy Fel Firebolt on The Coiled Altar showed it "cast 4711 times", from the raid's warlock imps), so casts are counted from enemies alone, and spells no enemy cast are left out. Hits that did no damage (dodged, parried, missed, immune) don't count as avoidable hits. Every column of every table in a pull sorts (click again to flip it), like the night's roster table. Example: Heroic Ula'tek pull 6, where Anguished Cry was kicked 4 of 5 times and Poisonous Bite dispelled 34 of 52 times, 14 of them by the Holy Paladin
- How avoidable damage is judged, with no hand-written boss notes: each ability is compared with what players in the same role take on top kills of the same boss and difficulty. An ability most of them never take, and that they take less than once every other kill, is one they dodge, so each time it hits someone (hits within 3s of each other count once) is a failed mechanic. Raid-wide damage, auras that tick on everyone, targeted debuffs and tank hits come up every kill and never count, and neither does damage from players or their pets (trinkets, runes, Burning Rush) or melee. The top kills are full-size raids (18+), 4 from WarcraftLogs' speed ranking and 4 from its execution ranking, and each ability is judged only against the kills it happened in: the fastest kills skip whole phases (Heroic Lost Explorers' top speed kills never see its fire phase), and the cleanest ones can lean on odd strategies (on Heroic Entombed Sentinels, 4 players soak all of the Contaminate that other raids spread over everyone). On a Heroic night across all 10 bosses, a guild's kills came to 0.1-0.4 avoidable hits per player per minute, except Lost Explorers at 0.9: they were hit by Fire Patch 17 times across 10 players, where top raids take it 0-3 times. Its Ula'tek wipes came to 0.1-0.25, and none of those broke on something top raids dodge except one Anguished Cry collapse. A boss's top kills are read once a day per server, and pull summaries are kept for a day
- A player's analysis can now be linked straight to (/?report=CODE&fight=ID&player=ID), which is how the raid review opens it
- The raid review's roster has a Prep column showing who came unprepared across the night: pulls started without food or a flask, pulls without a weapon oil (shaman imbues count), and gear slots left unenchanted on the last pull they were in. A fully prepared player gets a quiet ✓. Otherwise it shows short amber notes like "no food 1/14" or "2 enchants", with hover text listing which slots and how many pulls. It reads the buffs Warcraft Logs recorded as each pull began, so pulls reset within 30 seconds don't count, since people are often still eating. Enchants are expected where every player in top Mythic raids has one: head, shoulders, chest, legs, feet, both rings, the main hand, and an off-hand weapon (shields and caster off-hands can't take one). Augment runes appear in the hover text but never count as a miss, because only about a third of top Mythic raiders use one. The column sorts by how much is missing. Example: on a Heroic night, 14 of 22 players killed the night's first boss (Nymrissa) without food, and an Evoker went all 14 pulls without a weapon oil
- A wipe where the boss hit its enrage timer now gets its own banner, and its pull chip gets a ⏱. It counts as an enrage when the boss gains a buff that none of the top kills saw, after the point where the longest top kill was already over, and the raid goes down within a minute of it. Example: Mythic Sszorak wipes to Unbound Ferocity, while long wipes on Nymrissa and Twin Fangs that never saw it aren't flagged
- Boss mechanics in the raid review: each pull of a Venomous Abyss boss (all but Kith'ix) gets a "Boss mechanics" card listing the jobs its guide gives the raid, with how many went right and who got them wrong. It covers soaks (Frost Orb, Hungering Pyre, Mutilate, Unstable Miasma, Catalytic Bile, Mighty Thud, Caustic Globule, Ravenous Feast, Stone Breaker, Guillotine, Spectral Coils, Serpent's Bite), hand-ins (Disgusting Fish, and who fed it) and failures that only happen when the raid gets it wrong (Relic Rupture from crates left unbroken, Noxious Blast, Cultivated Burst, Elemental Explosion, Malignant Burst). A soak fails when too few stood in it or when its punishment went off: an uncovered bile, a Shattered orb, a missed globule. Soaking again while its debuff is still up (Feasted, Soul Constrictor, a second Mutilate) counts against that player, and so does being left holding a Serpent's Bite that set off Calcified Corpse. Taking a soak with an immunity (0 damage) never counts, because Mythic raids plan to soak every Ravenous Feast that way. For the four soaks the whole raid takes in turns (Mutilate, Ravenous Feast, Spectral Coils, Mighty Thud), each soak calls out who never stood in one, marked ☠ if they died that pull, or says everyone soaked. Soaks left to one group or a few assigned players (Hungering Pyre, Catalytic Bile, Stone Breaker, Serpent's Bite) call out no one, since everyone else staying out is right. Who did soak, and how many times, is in a folded list under each one. The pull's player table gets a Mechanics column that names each soak and hand-in the player did, with how many times ("Mighty Thud ×2 · Disgusting Fish ×1"), and the ones they got wrong in red. The night's roster shows the total done across the night, and how many were wrong, with which ones on hover. The spell IDs and thresholds were checked against 36 top Heroic and Mythic kills and 26 wipes from other guilds. Top Mythic kills come out clean, while the doubled soaks the check does catch took about 10 times the normal damage (2.46M against 0.22M). Example: a Heroic Vashnik kill with 4 of 6 Catalytic Bile volleys fully covered
- New dungeon review (/mplus, or "Dungeon review" from any report with keys): one Mythic+ key on one screen. Pick a key and see how it went (dungeon, level, time, timed with its upgrade or not), a timeline of every death, and a sortable table of the five players with each one's parse, DPS, HPS, share of the key spent active, deaths, avoidable hits, interrupts, dispels, boss and trash damage, and prep (food, flask, oil, enchants). Opening a player shows each death in full (the same breakdown as the raid review, with healing and defensives) and the damage they dealt to each enemy. Below that are the key's interrupt, dispel and avoidable-damage tables. Avoidable damage is judged against top runs of the same dungeon. Example: a +12 Altar of Fangs where a Shaman was killed by melee right after being caught by Ravenous Claws, with Astral Shift pressed a second before and Stone Bulwark Totem and a healthstone ready and unused
- Comparisons now show Power Infusion under "Outside your control" whenever either side had it at least once: how many times each side had it, for how long in total, the share of the fight that covers, and which priest gave it. When one side had noticeably more (2% of the fight or more), it says so, since part of that side's lead is the priest's rather than the rotation. Example: on a Heroic Nek'zali kill, the Rogue had 3 Power Infusions (45s, from the group's Shadow Priest), while both warlocks and both mages had none
- Mythic+ deaths now say whether they came from a kickable cast. The killing blow, and any hit of a quarter of the player's health in the 5 seconds before it, are traced back to the enemy cast behind them. For each kickable one, the breakdown shows the cast, who cast it, how long there was to kick it, and every party member's interrupt: ready, on cooldown, or dead. The log has no "interruptible" flag, so a spell counts as kickable when someone interrupted it in the same run or in top runs of the dungeon. Each interrupt's cooldown is the class's base cooldown, or the shortest gap between the player's own kicks in the run when that's shorter. A kick counts as ready only if it came off cooldown at least half a second before the cast finished. Pet kicks (Spell Lock, Axe Toss) count for their warlock, and Holy and Discipline Priests and Restoration Druids have none. Range isn't in the log, so a ready kick may still have been out of reach. A death from a kickable cast is flagged "⚡ kickable" on its row. Example: a +10 Den of Nalorakk Retribution Paladin killed by two Stormbound Mystic Lightning Bolts in a row, with 4 of 5 kicks (their own Rebuke among them) ready for both
- Every parse on the site (the Accuracy card, the raid review and the dungeon review) is now just the one number Warcraft Logs shows for the fight. For a key, that's the rank among runs at the same key level, not against every key level. For a raid kill it's the parse as before. The Accuracy card's second percentile (all keys, or same item level) is gone. Example: a +12 Voidscar Arena Kisaragi now shows 13 (as on Warcraft Logs) instead of 69, and Sparklepants 95 instead of 60
- Abilities named in the raid review and in death breakdowns now show their Wowhead tooltip on hover: the mechanic tables, wipe causes, killing blows, the hits and heals before a death, and defensives
v0.28.0
- New Deaths card next to Accuracy and Damage uptime: how many times the player died, and for each death the time, killing blow and who landed it. Opening one shows the context: health 10, 5 and 2 seconds out (a one-shot from full reads differently from a slow bleed), the killing blow as a share of max health plus overkill, damage taken against healing received over the last 10 seconds with the abilities that did it, the last few hits with the health left after each, what the player was casting, and whether they were moving or standing in a ground effect. "Show on timeline" jumps to the moment, and "Open in Warcraft Logs" opens the damage they took around it. The card also tracks time spent dead, per death and in total (with its share of the fight): from the death until they're back up, meaning their first cast after it or the first moment their health shows above 0 (a combat res), whichever comes first, or to the end of the fight if they never were. Deaths are on the timeline too: a red line at each one down every lane, and a "Dead" lane with a band for each stretch spent dead Example: a +20 Altar of Fangs Arms Warrior at full health 2s out, hit to 66% by Fetid Spit and then killed by a 620k Duostrike (71% of their health) while casting Mortal Strike
- The Accuracy card now shows the player's Warcraft Logs parse for the fight in WCL's colors, with the rank among players on the same footing, labeled with what that is ("46 at +20" for runs at the same key level, "100 at 326 ilvl" for players at the same item level in raid), and the DPS behind it; healers get their HPS parse. Wipes and trash have no ranking and say so. Works for every spec, graded or not
v0.27.0
- Devourer Demon Hunter grading rebuilt from the Wowhead guide and 23 top parses (Mythic Nek'zali and Entombed Sentinels, +20/21 Altar of Fangs and Den of Nalorakk, both hero trees). The old rules knew no cooldowns and treated nearly every button as an interchangeable filler, so almost any cast counted as correct. They also decided whether you were in Void Metamorphosis from the Collapsing Star counter, which only appears a few seconds into the form. Now graded: Void Ray as soon as you have 100 Fury (in AoE, once 10 souls are waiting for its Eradicate); inside the form, Void Ray each time it's back, Collapsing Star once 30 souls are collected (first in AoE when you're about to overflow past 40), and Void-Scarred's Reaper's Toll, Pierce the Veil and Predator's Wake; Soulburst spent on Consume/Devour; Reap/Cull only at 4+ souls or near their 2 charges; and no Soul Immolation inside the form until it's about to run out. Consume and Devour are judged by what you had when you started casting them, since Fury and souls pour in during the cast, and Void Ray/Collapsing Star aren't demanded while you're moving. Top parses now grade 92–98% (mistakes that remain are real ones, like Devour at 36+ collected souls), and mid-ranked parses 91–92%. Soul Immolation's cooldown isn't visible, so it's never demanded, and Eradicate isn't a cast, so it isn't graded
- Devourer, Void-Scarred in single target: inside Void Metamorphosis, Reaper's Toll, Pierce the Veil and Predator's Wake now come before Void Ray, as in the guide. Top raid players do this almost every time (8 of 138 Void Rays went out with a Reaper's Toll waiting), so it costs them at most a few casts. The guide's melee Void-Scarred AoE plan (drop out of the form after the second Void Ray) isn't graded: no top Mythic+ run uses melee Void-Scarred, and top raid players keep extending the form even with 2+ enemies nearby
- Devourer: Void Metamorphosis timing is now reviewed in the cooldown lane, even though entering it isn't logged as a cast. It reads the soul meter: the form is ready once the meter tops out (35 with Soul Glutton, 50 without), and entered when the form goes up. Going in within 5s is fine: across 329 entries in the top parses, Void-Scarred's Voidblade → Vengeful Retreat → The Hunt setup before entering took under 3.8s 95% of the time. With 2+ enemies around when it comes up, 12s is fine, since the AoE guide pools souls and casts Void Ray first to carry an Eradicate in (82% of the top Mythic+ holds longer than 5s did exactly that). Holding longer shows as "held too long" with how many seconds, unless you were moving, had nothing in range, were waiting for a pull to gather or saving it for a phase. Saving it for the next pack is fine too: a hold during which the enemies around dropped to 1 or none, used once 2+ were around again (all of it when the pack was already down to its last enemy within 15s of it coming up, otherwise from then on). That's what top Mythic+ players do in 30 of 40 holds of 15s or more; with it, the top parses go from 2–6 flagged holds per key to 0–4 (about 2 on average), and top raid parses have 0–2 per fight. The cooldown review can now take any cooldown whose readiness comes from the log rather than a timer, and any cooldown can use the next-pack excuse
v0.26.0
- Mythic+ top-parse comparisons can now be taken at your own key level ("Same key (+17)", the default) or against the highest key anyone has done on that dungeon ("Highest key"), and a dropdown lists the 5 closest top runs (by item level and run length) so you can compare against a different one than the one picked for you. Same-key picks favor higher parses: the pool is the top 10 runs at your level, each place down the ranking counts against a run, and the dropdown shows each run's rank. Raid comparisons get the same run picker
- Comparisons now show what was outside the player's control. "Enemies in reach" is the average number of enemies around each player while fighting, so a tank pulling bigger packs (more cleave and AoE damage) shows up as that rather than as better play. A "Group buffs and debuffs" table lists the group effects each side had, such as Mystic Touch (monk), Chaos Brand (demon hunter), Hunter's Mark, Battle Shout, Arcane Intellect, Mark of the Wild, Skyfury and Windfury Totem, with the DPS each was worth to each player, and says how much of the DPS difference comes from group makeup. Where the log shows it directly, it's measured: Hunter's Mark counts only damage to the enemy that was marked, while it was marked and above 80% health; Skyfury's extra auto-attacks are counted from the extra-attack event WCL records for each one, along with the procs they set off (Demon Blades) and the resource they gave, shown alongside: Fury for Havoc from its Demon Blades gains, and Rage for Arms worked out per swing (25 per auto-attack, +10% War Machine, +10% on a crit), since warriors' auto-attack rage isn't in logs; Windfury Totem from its own "Windfury Attack" hits. The rest (stat buffs, Skyfury's Mastery, Mystic Touch and Chaos Brand by damage school) are estimates from each effect's size, and an effect both sides had doesn't count toward the difference. Raid buffs cast before the pull are picked up from what WCL records as present when the fight starts. Example: a +17 Arms comparison 35.8k behind, where about 5.1k of it was the other group having a shaman's Skyfury and a hunter's Hunter's Mark
- The comparison TL;DR is now a compact breakdown instead of a paragraph of sentences: your DPS difference up top (minus in amber when you're behind, plus in green when ahead), a bar per target group showing where the difference is, the five abilities that differ most with short reasons ("fewer hits (34 vs 38/min) · hits 14% weaker"), and uptime and stat chips. Everything reads from your side, where it used to switch between "they do more" and "you do more" line to line
- Fixed "Compare with a top parse" finding nothing for most Mythic+ keys. It searched the dungeon's overall rankings, which are all +20 and higher keys, for runs at your exact key level, so anything lower (a +17, say) never turned up. It now asks WarcraftLogs for the rankings at your key level directly: a +17 Temple of Sethraliss now finds a +17 run, same hero talent, one item level apart and a minute different in length
- The report view uses more of the screen: up to 1800px wide instead of 1152px, so the timeline shows more of the fight on 1080p and larger monitors. The landing page keeps its narrower width
v0.25.0
- Every fight is now labeled with what it is, in a color you can scan for: Mythic+ keys (cyan) show the key level and how they ended (★ 1-, 2- or 3-chest when timed, Depleted, or Not completed, with the official time on hover); raid pulls show their difficulty in WoW's item colors (Mythic orange, Heroic purple, Normal blue, LFR green), a green Kill or a red Wipe with how far the pull got (WCL's own progress, to one decimal, with boss health, phase and pull length on hover), and a pull number per boss and difficulty; trash is marked as trash. Fight picker tiles also get a stripe in their difficulty color
- The stat row is smaller: Graded Casts and Correct are folded into the Accuracy card ("711 of 818 casts"), the mistake count sits beside the score and links to the summary, and the hero tree warning now appears inside the Accuracy card instead of below the timeline
- Comparison cleaned up: one "Compare with Off / Top parse / <spec> in this log" switch instead of two checkboxes, and the long table is split into sections (At a glance, Damage by target, Rotation & uptime, Cooldowns, and collapsed Stats and Casts per minute), each flagging how many rows you're behind on. Compare now starts Off for every analysis instead of staying on and re-running a slow top-parse search for each character you open
v0.24.0
- Added a Mistake summary above the timeline. Wrong casts are grouped by what was cast versus what the priority wanted (e.g. "Arcane Blast instead of Arcane Barrage ×14"), most frequent first, with each pattern's share of all mistakes and the reason. The ×N counter steps through each occurrence (‹ 3/14 ›), opening it right in the summary with the casts just before and after it, what was expected, and the state at that moment. Its timestamp jumps the timeline to that cast, zoomed in and highlighted, to see it against everything else going on, and "Open in Warcraft Logs" opens the report itself on the player's events from 10s before to 5s after it. A habit you repeat all fight now stands out at a glance instead of having to be pieced together cast by cast. It replaces the cast-by-cast breakdown that used to sit at the bottom of the page, which is gone; clicking a timeline icon still opens that cast's details
- Switching back to a character you've already looked at in the same log is now instant: analyses are remembered in the browser for the session, where every click used to re-run the whole analysis. The server also keeps a fight's shared WarcraftLogs data (fight info, roster, the whole group's damage, enemy debuffs, ground effects) for 15 minutes, so a repeat analysis went from ~2.9s to ~0.2s and uses far fewer WCL API requests, which matters for the hourly rate limit. The first look at a new character got faster too: spell names and icons now come from the report's own ability list in one request instead of one lookup per spell (names checked identical to Battle.net's on 106 of 106 spells both had, and it names the hidden/NPC spells Battle.net doesn't), taking a new player in an already-loaded fight from ~3.9s to ~1.9s
- External buffs are now shown. Power Infusion, Bloodlust/Heroism/Time Warp (and the other lust effects), and Augmentation's Ebon Might and Prescience each get their own lane on the timeline, with who gave it and for how long, and every cast made under one is tagged (PI, Lust, ...) in the cast details and mistake summary, so a strong or weak stretch can be read against the help it had. Only this curated list is shown; the dozens of other auras allies put on you (beacons, auras, shields) are left out
- Arms Warrior: Sweeping Strikes is now graded as the stacking buff it is (a cast adds 12, Colossus Smash's talent adds 6, capped at 18) instead of an on/off buff. Recasting while it's still up used to be flagged even at 1 stack left; now a recast is fine as long as it doesn't push the stacks past 18, and one that does is flagged with how many stacks it wasted. Putting it up a few seconds before charging into a pack also counts. On the top 6 Arms parses for Voidscar Arena, Sweeping Strikes casts flagged wrong went from 134 of 217 to 42, with every parse's accuracy up (e.g. Drphilliam 90.0% → 91.3%, Egsotic 90.0% → 91.6%)
v0.23.0
- Merged in a batch of work that had been sitting on the `intern` branch: four more specs graded (Fire Mage/Sunfury, Subtlety Rogue, Affliction Warlock, Destruction Warlock — validated at 94% on Affliction and comparable on the others), 29 of 40 specs now covered. Hero talent tree is now read straight from the log's own talent data instead of only being guessed from spells cast, and a warning banner shows up when a log's hero tree either isn't modeled yet for that spec or isn't what top players on that content (raid vs. Mythic+ are judged separately) are actually running. Engine accuracy improved: movement detection now uses a hard cast's begincast-to-cast window to know the player was actually standing still for it, and AoE target counts are centered on the target instead of the player, which was undercounting ranged pulls. Also brings WCL rate-limit/error surfacing to the rules-graded analysis route (it previously only covered the report-loading routes)
v0.22.0
- Damage uptime now counts wasted GCDs, not just seconds down. Downtime that isn't excused (not moving, not dodging, something in reach) is converted into an estimated number of GCDs that went by with nothing queued, using a GCD length worked out from the gaps between the player's own casts (15th percentile of gaps in a plausible GCD band, so a few longer cast-time gaps don't throw it off). Only shown for "always be casting" ranged specs — melee has auto-attacks and positioning muddying what "wasted" means, so it stays hidden there. Validated against real top-ranked raid logs (Arcane Mage, Warlock Affliction — both correctly null for Arms Warrior) and a real Demonicfyre M+ key: one pull came back 92% adjusted uptime but 124 wasted GCDs, which is the more honest number
v0.21.0
- Added a real landing page. Before loading a report you now get a hero, a "how it works" walkthrough with an example finding, a features grid, and a supported-specs list (25 of 40 graded, computed from the registry so it never goes stale) — instead of just a bare input box. Once you load a report the marketing sections get out of the way and it's the same tool as before
v0.20.1
- Fixed loading a report doing nothing with no explanation when WCL fails the request (rate limit, bad report code, WCL outage) — it collapsed every failure into a generic, easy-to-miss "Report not found" with no visible error. Now shows WCL's actual error in a banner, whatever the cause
v0.20.0
- Five more specs graded: Blood Death Knight, Elemental Shaman, Assassination Rogue, Marksmanship Hunter, and Fury Warrior — 21 of 40 specs now covered. Marksmanship in particular didn't match its own published guide at all in practice: real top logs never touch Aimed Shot/Black Arrow and instead run a much simpler Rapid Fire (16s CD) / Explosive Shot (30s CD, not the 5s I first modeled) loop, so the spec is rebuilt around what's actually cast rather than the guide text. Recurring lesson across all five: where a strict priority order kept fighting real logs (Rampage vs. the rest of Fury's kit, Blood Boil vs. Heart Strike, Envenom vs. building combo points, Windwalker-style fillers), tying the options as interchangeable fit the data far better than guessing at a sharper rule. Also fixed a real bug — Assassination's Crimson Tempest used `acceptOnly: aoe`, which silently made it a mandatory top-priority pick outside AoE instead of an AoE-only exception. Accuracy: Blood DK 92%/90% (raid/M+), Assassination Rogue 91%/93%, Marksmanship Hunter 94%/90%, Fury Warrior 92%/85%, Elemental Shaman 72%/66% (same long-range `targets`-detection gap noted for Devastation Evoker)
v0.19.0
- Grading now covers Evoker, Rogue and Shaman — previously zero coverage — plus Monk and Death Knight's DPS specs, picked by real population data rather than tier lists: Devastation Evoker, Outlaw Rogue, Enhancement Shaman, Windwalker Monk, and Frost Death Knight. That's 16 specs graded now, out of 40 total. Real fixes found along the way validating against raid and M+ logs: Windwalker's Combo Strikes mastery rewards alternating abilities rather than one strict filler order (Tiger Palm/Blackout Kick/Spinning Crane Kick are graded as interchangeable); Frost DK's Obliterate/Frostscythe need banked Runes, not just Killing Machine, and a single Killing Machine stack doesn't outrank dumping capped Runic Power; Enhancement's Crash Lightning upkeep check had a stray `||` that demanded it on every AoE cast even with the buff already up; Rising Sun Kick, Fists of Fury and Tempest weren't modeled with real cooldowns, so they looked permanently available. Accuracy: Outlaw 79%/79% (raid/M+), Windwalker 87%/84%, Frost DK 81%/83%, Enhancement 75%/77%, Devastation 76%/66% (a known gap — `targets` isn't a reliable "is there anything to hit" signal for a 4000-unit-range caster with a 1500-unit AoE-counting radius, documented in the spec file)
v0.18.0
- Arcane Mage now grades against the actual published Wowhead/Method rotation priority list by default ("Standard Guide"), with a toggle to switch back to the hand-tuned APL this app shipped with, now labeled "Preheat Guide" — both share the same cooldowns and opener, and pick up their own copy of the Barrage-immediately-after-Prismatic-Bolt pairing (real logs follow it without exception, though it wasn't called out as its own guide bullet). Checked Standard Guide against raid (81%) and a full M+ key (78%); Preheat Guide is unchanged
v0.17.0
- Timeline: clicking a cast now opens a small details box right next to it (time, reason, what was expected if it was wrong, any excuse or note), instead of only updating a panel further down the page you had to scroll to find
- Retribution Paladin: fixed the accuracy gap I found reviewing a teammate's commit (claimed ~92%, measured 82% on a real add-cleave fight, Ula'tek). Execution Sentence is now timed around Avenging Wrath like every other burst cooldown instead of demanded on cooldown. Divine Storm and Final Verdict (and their Divine Purpose free-cast procs) are tied at 5 Holy Power rather than one strictly outranking the other by target count — real logs spend Holy Power on whichever is up well more often than the guide's "2+ targets" split alone predicts, and a widened AoE-detection radius made this worse, not better, so the fix ties the spenders instead of trying to out-guess the target count. Hammer of Wrath at 2 charges no longer outranks a Holy Power dump. Re-checked: raid 82%→95% (Ula'tek), 94%→97% (Sszorak), and 95% on a full M+ key
v0.16.4
- Fixed the comparison table's column header always saying "Top parse", even when comparing with another player in the log — it now shows that player's name
v0.16.3
- Unholy DK: Army of the Dead and Dark Transformation are now enforced as a hard pair. Dark Transformation must be the very next cast after Army of the Dead (whatever else the priority would otherwise want), Army of the Dead is only acceptable when Dark Transformation is ready to follow it immediately, and the cooldown review flags an Army of the Dead cast that wasn't followed by Dark Transformation within 8s as misused. Re-checked against raid (90%) and a full M+ key (89%): essentially unchanged
v0.16.2
- Unholy DK fixes: Festering Scythe is Festering Strike's automatic free follow-up, not a player decision, so it no longer shows as a wrong opener cast (or gets graded at all) — it's simply not part of the rotation list now, same treatment as other automatic procs. Army of the Dead is back in the opener as a required step, right before Dark Transformation, matching the guide's sequence. Re-checked against raid (91%) and a full M+ key (89%): unchanged
v0.16.1
- Renamed the app to WoW Rotation Analyzer (page title, header, changelog page). The npm package name changed too, but the GitHub repo and Vercel project keep their existing URLs unless you rename those yourself
v0.16.0
- Shadow Priest is rebuilt on the rules engine, replacing the earlier hand-built evaluator (which read only the first 10,000 enemy debuff events and used guessed DoT durations instead of the real timers). Archon and Voidweaver, from the Wowhead guide, checked against top raid logs (95%) and a full Mythic+ key (96%)
- Found along the way: Shadow Word: Madness is a DoT on the *target*, not a buff on the player — the first pass had it backwards, which made it flood the grading with false mismatches. Also, real logs cast it anywhere from ~45 to 100 Insanity with no fixed threshold, so exact Insanity-spend timing (Shadow Word: Madness, Mind Flay: Insanity, Void Blast, Void Torrent) is accepted rather than demanded; DoT uptime, Mind Blast on cooldown, and Shadow Word: Death in execute range are graded firmly
- The opener only checks getting Voidform (and Halo, for Archon) up early: the guide itself calls the run-in reactive, and top logs open in different orders (Vampiric Touch vs. Tentacle Slam, Void Volley before or after)
- Vampiric Touch and Shadow Word: Pain share a priority tier: with the Misery talent, Vampiric Touch also applies Shadow Word: Pain, so a direct Shadow Word: Pain cast isn't required when both are missing at once
v0.15.0
- Arcane Mage, Arms Warrior and Shadow Priest now run through the same registry and the same route as every other spec. Their three class-specific routes are gone. Each keeps its own hand-built grader (Arcane's salvo and Prismatic Bolt rules, Arms' Overpower and readiness model, Shadow's early priority), plugged in as an adapter file next to the other specs, so the grading logic itself is unchanged
- Checked against real top logs, old route against new, cast for cast: Arcane Mage matched on all 450 casts and Arms Warrior on all 571, with identical opener, cooldown review, uptime, hero detection and excused casts
- Shadow Priest differs from before on purpose: the old route only read the first 10,000 enemy debuff events (the first 139 seconds of a 605-second fight), so DoT tracking was wrong for most of the fight. It now reads everything, and gains uptime, movement and boss phases. Its priority is still an unvalidated early version and grades low against top players
- Spell and aura names that neither Blizzard nor WarcraftLogs know (old proc and aura IDs like Icicles) are looked up on Wowhead, and failed lookups are no longer remembered, so rules that match on aura names work in long Mythic+ runs
- The cast-detail panel picks Arcane's state layout from an explicit field instead of an accident of the old route
- Checked the rules-engine specs on full 27-34 minute Mythic+ keys (+18 to +22) as well as raid bosses: Unholy 89%, Brewmaster 100%, Demonology 98%, Guardian 99% and Havoc 88%, in line with their raid numbers, at 7-15 seconds per key
- Frost Mage: the Frostfire priority now shares tiers the way Spellslinger does, and on a pack (3+ enemies) the hard-cast filler (Frostbolt or Frostfire Bolt) is accepted, since top players use it to spread Freezing instead of spending every proc on Ice Lance. That took a Frostfire +18 key from 49% to 83%; the trade-off is Frost grading is looser on packs
v0.14.0
- Five more specs graded by the rules engine, each built from its Wowhead guide and checked against top Ula'tek logs: Unholy Death Knight (92%, Forbidden Knowledge and both hero trees, opener, Army of the Dead and Dark Transformation review), Brewmaster Monk (100%), Demonology Warlock (97%), Guardian Bear Druid (96%) and Havoc Demon Hunter (89%, with Fury tracking and Metamorphosis forms, cooldown review for Metamorphosis, The Hunt, Eye Beam and Essence Break)
- Those percentages mean "agrees with what top players did", and some specs are deliberately lenient. Brewmaster and Guardian are mostly "press the core buttons as they come off cooldown", and Demonology's guide calls its priority "more fluid than rigid", so few casts can be wrong. Where top players don't follow a guide line strictly (Havoc's Blade Dance, Unholy's Soul Reaper and Army of the Dead), that ability is accepted rather than demanded
- The engine no longer demands a spell the player never cast all fight (not talented, or applied another way like Moonfire through a proc)
- Fixed target debuff lookups for casts with no target (Epidemic, ground and cone abilities): they used to see no debuffs, so Unholy asked for Outbreak constantly. Those casts now use the last real target. This alone took Unholy from 45% to 76%
- Tank openers that are just the normal rotation (Brewmaster, Guardian, Havoc) aren't graded
v0.13.0
- New rules engine (app/lib/rules): a spec's rotation is now a data file, a priority list of rules with conditions over buffs, target debuffs, resources, cooldowns and target count, plus its cooldowns and opener. One shared route grades any spec that has one, with the same uptime, movement, cooldown review, opener and dodging excuse as Arcane and Arms. Each cast is judged against a strict and a lenient reading of the cooldowns and counts if either agrees, and a cooldown spell you actually cast is never called wrong for being "on cooldown"
- Frost Mage is the first spec on it (Spellslinger and Frostfire priorities, single target and AoE, cooldown review for Ray of Frost and Frozen Orb, opener). Checked against three top Ula'tek logs it agrees on 80% of graded casts. Where top players ignore the guide's strict ordering (Ice Lance, Glacial Spike, Flurry and Ray of Frost interleave freely), those rules share a tier instead of counting as mistakes
- The rules engine reads target debuffs (like Freezing) from WarcraftLogs; the player has to be filtered out of the enemy-side events rather than passed as the source, which returns nothing
v0.12.0
- Every class and spec can now be analyzed. Specs without rotation rules yet (everything except Arcane Mage, Arms Warrior and Shadow Priest) get a generic analysis: every cast on the timeline, damage uptime, movement, nothing-in-reach time and boss phases, with a note that casts aren't graded. Rotation rules, cooldowns and openers get added spec by spec from here
- Damage uptime is shown for DPS specs only; healers skip it and aren't compared yet, since comparisons are built on damage. Tanks are analyzed and compared like DPS
- Procs and passives that WarcraftLogs records as casts (Soul Fragments and the like, 40+ a minute) are left off the generic timeline
- Comparison rows for rotation accuracy and opener steps only appear when there's something graded to compare
- New spec registry (app/lib/specs/registry.ts) lists every spec with its role and which analyzer handles it, so adding a spec's rules is one route plus one line there
v0.11.1
- Player buttons use class colors (name in the class color, selected one outlined and tinted in it), and the same-spec dropdown does too. Class names like DeathKnight now read "Death Knight"
v0.11.0
- Damage uptime no longer counts time you couldn't be hitting anything: stretches with no enemy in reach (pre-pull, waiting for the next pack) and stretches spent running (gathering adds, moving between packs, dodging) are excused, alongside the existing "other players were idle too" rule. In 5-mans, where there are too few other DPS for that rule, this is what makes uptime meaningful. One Arcane M+ log went from 86% to 98%
- Movement is now detected across long gaps between casts. Before, a run of 10+ seconds with no casts wasn't recognised as movement at all
- Arcane Mage: a miss is excused (not counted as a mistake, and left out of accuracy) only when the priority wanted a hard cast (Prismatic Bolt or Arcane Blast), you were moving, and an enemy ground effect was going off nearby. Excused casts show in amber with the ability that caused it, and the accuracy card shows how many were excused. Ground effects are enemy casts with no target whose ability goes on to damage players, since WarcraftLogs doesn't flag avoidable mechanics
- The downtime list now shows only unexplained downtime, with a breakdown of what was excused
v0.10.0
- Comparisons split damage by target: the boss, other important targets (Boss-type targets like Venomous Heart on Ula'tek), and adds/pad, with DPS and share of each player's damage
- The TL;DR says where the DPS gap sits (boss, other important targets, or adds) before it goes into abilities
v0.9.0
- Comparisons open with a TL;DR: the DPS gap, the five abilities that account for most of it (more casts or hits per minute, harder hits, or a proc only one of you has), whether damage uptime is part of it, and the stat differences. Built from each player's damage-by-ability table, so it costs two small extra WarcraftLogs requests and no event scanning
v0.8.0
- Damage uptime for Arcane Mage and Arms Warrior: how much of the fight you were landing direct hits (DoT ticks excluded), with stretches where most other melee (or ranged) players were idle too excused, so boss untargetable phases and shared mechanics don't count against you
- Uptime card in the summary, a "Damage downtime" lane on the timeline, a list of the longest gaps with what they lined up with (moving, no enemy in range, or unexplained), and uptime rows in comparisons
v0.7.0
- New "Compare with another <spec> in this log": only enabled when another player of the same spec is in the fight, and you pick who if there are several. Runs the same analysis on them and lays it side by side with yours
- Comparisons (both top parse and same log) now show DPS, item level, crit, haste, mastery, versatility and primary stat, with each secondary's share of your four secondaries. Ratings come from the start of the fight
v0.6.5
- Arms: Rend is tracked from every Cleave (Cleave applies Rend on its own), so "Cleave early to apply Rend" stops firing constantly
- Arms: at 3-4 enemies, where the target count can overstate what Cleave hits, single-target play is accepted as well as the AoE list
- Arms: Mortal Strike and a Sudden Death / execute-range Execute are accepted as swaps for each other when both were castable
- Arms: Cleave is accepted as a Rend refresh whenever Rend has under 10s left
v0.6.4
- Arms execute phase: an Overpower is accepted when a Tactician proc is up or its charges are about to cap, instead of always expecting an Execute first
- Colossus: Execute is on a real 6s cooldown (never cast sooner in logs), so Overpower while Execute is down is no longer flagged
- Execute-phase detection reads the health of the target the cast is aimed at, not the last thing hit (an add during Cleave could fake an execute phase)
v0.6.3
- Slayer: Bladestorm is recommended on cooldown whenever it's ready (no longer tied to Colossus Smash being active), in single target, execute phase and AoE
- Slayer: Bladestorm's recast window widened (Anger Management and Unrelenting Onslaught cut its cooldown, and real logs recast it 15s after the last one), and the cooldown review no longer calls Bladestorm outside Colossus Smash "used badly"
v0.6.2
- Slayer: Bladestorm is now recommended on cooldown right after Colossus Smash, with Sudden Death procs held until it's out, instead of expecting an Execute first (the guide's Execute-before-Bladestorm line is still accepted)
v0.6.1
- Opener grading walks the sequence strictly in order: only the step it's waiting for moves it forward, so a mistake no longer counts as progress, and later steps cast early are flagged as out of order
- Charge is ignored everywhere in the opener
- Automatic Bladestorm Mortal Strikes no longer advance or break the opener
- Opener steps for spells the player never cast (talents they didn't take) are treated as optional
v0.6.0
- Boss phases: phase lane on the timeline, intermissions excused from cooldown holds, and holding a cooldown for the start of the next phase counts as a good hold
- "Compare with a top parse" checkbox: finds a top-ranked log of the same spec on the same fight (same raid difficulty, or same key level in Mythic+), preferring a similar item level, fight length and hero talent, and lays cooldown uses, held time, opener, movement and casts per minute side by side
- New /api/compare route
v0.5.0
- Cooldown review now accounts for what the player was doing: time spent moving/dodging (from cast positions), with no enemy in range, or waiting for adds to gather isn't counted as a hold
- Timeline gets "Moving / dodging" and "No enemy in range" lanes so you can see why a hold was excused
- Shared paged event fetching and fight-context code for both specs
v0.4.0
- Cooldown review for Arcane Mage (Surge, Touch of the Magi) and Arms Warrior (Avatar, Colossus Smash, Bladestorm/Demolish/Ravager): held correctly, used, used badly, lost, held too long
- Timeline shows cooldown lanes and shades the whole track by cooldown state, with a review list of problems
- Openers graded against the Wowhead opener sequences (Arcane; Arms Slayer/Colossus single target and multitarget)
v0.3.0
- Arms Warrior analysis (Slayer and Colossus auto-detected) graded against the Wowhead Midnight 12.1 guide
- AoE vs single-target grading from a position-aware target count (3+ enemies in melee range = AoE)
- Execute phase detected from the target's health; cooldown uncertainty handled by accepting any valid reading
- Player picker shows each player's spec and routes to the matching analyzer (Arcane Mage, Arms Warrior, Shadow Priest)
v0.2.0
- Arcane Mage: never recommend Barrage while holding Prismatic Bolt (except in Arcane Soul)
- Arcane Mage: Pbolt directly at Salvo cap with Pbolt held
- Arcane Mage: after 2 Missiles (Overpowered counts as 2), move on to Pbolt/Barrage even with CC left
- Arcane Mage: Arcane Soul always recommends Barrage
- Warn when a Missile follows an Overpowered Missile (wasted CC proc)
- Timeline: Overpowered Missile highlight, zoom controls and Ctrl+scroll zoom, adaptive time ticks
- Footer shows app version and git commit
v0.1.0
- Initial WCL rotation analyzer (Arcane Mage timeline and grading, Shadow Priest route)