Skip to content

Releases: matt82198/Tuono

v3.0.0 - the plan is committed, and it says why it changed

Choose a tag to compare

@matt82198 matt82198 released this 18 Aug 13:55
726364c

The engine no longer rebuilds its recommendation from scratch every tick. It commits a plan and re-derives it on a named trigger. That buys something Hekili structurally cannot offer — it can say why a recommendation changed — and costs something Hekili never has to pay, since a committed plan can outlive the state that justified it. Most of this release is the work of making that trade honest.

Every defect below came out of a live flight recording rather than a reading of the code.

A plan could outlive the tick that built it

Reported as "the model is behind it". One bug wearing five hats. worldChangedSince skipped its own comparison when the plan had no baseline, so a plan built while combo points were unreadable could never be invalidated by combo points again. The castability filter ran only on freshly-derived queues, so a held plan published a spell you had talented away. And the eligible rule set had no trigger at all.

A gutted plan is a stale plan

Reported as "it was just doing nothing most of the time". At login the known-spell probe has not finished, so the priority list correctly fails open and admits a rule for a spell you do not own. Once the probe completed, the filter stripped that entry out of the held plan every tick — and because it was position 1, publishing the remainder meant publishing nothing. The bar sat inert while you pressed buttons at it. It now re-derives on the spot under a named reason.

The bar stopped going empty

  • The confidence truncation is retired — length was never the signal.
  • The fallback is an APL walk, not a hardcoded filler. A bar that only ever answers Sinister Strike gets Sinister Strike cast at it, and the observation channels starve.
  • "It's some dude's face with a blue icon" — unresolvable art rendered FileDataID 134400, which since Blizzard stopped naming icons now points at whatever happens to live there.

Under the hood

One test harness with a single entry point running 62 suites; merging the two WoW API stubs exposed four fidelity bugs that had been making whole categories of assertion vacuous. The castability filter now names its drop reason. Twelve further defects fixed from live traces.

Gate: 511 passing. Full detail in CHANGELOG.md.

Installing

Extract Tuono-v3.0.0.zip into World of Warcraft\_retail_\Interface\AddOns\.

Tuono is not an install-and-play rotation helper. It is the substrate that makes a rotation assistant possible again on a client that removed the state those assistants were built on, and it has a steep configuration curve.

Latest

Choose a tag to compare

@matt82198 matt82198 released this 12 Aug 17:52

Full Changelog: v1.8.2...v2.0.0

v1.8.2 - no more unpressable recommendations

Choose a tag to compare

@matt82198 matt82198 released this 02 Aug 20:23

Two adversarial WoW specialists were pointed at this build with instructions to break it. One swept 794 states.

THREE WAYS THE BAR COULD SHOW SOMETHING YOU CANNOT PRESS - all fixed:

  1. Energy pooling was applied to the IMMEDIATE recommendation. At 40 energy the bar said "press Sinister Strike" for a 45-cost ability, because the simulation had quietly advanced time to let energy regenerate. Step 1 must be castable NOW; pooling still governs later steps.
  2. A legacy rule hardcoded an energy threshold of 40 while the real cost is 45. Costs now come from the ability table so a rule can never drift from the data again.
  3. PIN entries bypassed the position-1 cooldown check, so a Between the Eyes on a 38-second cooldown could be pinned ahead of the finisher that was actually ready.

TAINT AUDIT: REFUTED, and independently verified. An earlier architecture review flagged the action-bar glow as a taint risk. It is not: the addon makes zero SetAttribute / hooksecurefunc / protected calls, and never shows or hides the secure button itself - only its own child texture. Worst case is cosmetic contention with another glow addon.

168 tests, three consecutive clean runs.

v1.8.1 - partial kits (fresh 80)

Choose a tag to compare

@matt82198 matt82198 released this 02 Aug 20:09

You were right that the rotation still assumed a full kit. A fresh character with only Sinister Strike and Dispatch got an EMPTY bar at max combo points.

WHY: Dispatch is gated on "no other finisher available" - but availability was tested by COOLDOWN ONLY. An untalented Between the Eyes or Killing Spree sits at zero cooldown, so it read as "available" and blocked the one finisher the character actually had. Availability now requires the ability to be KNOWN, not merely off cooldown.

Also added a last-resort builder so the bar is never blank, even for a character with no finisher at all - an empty bar reads as "broken" and is worse than a slightly suboptimal suggestion.

Verified against real partial kits (tests/scenario_fresh80.lua, now in the repo):

  • Only Sinister Strike, max CP -> builder shown (was: empty)
  • SS + Dispatch, max CP -> Dispatch leads, then builders (was: empty)
  • SS + Dispatch + Pistol Shot, 2 CP -> builds to max, then spends

168 tests, three consecutive clean runs.

v1.8.0 - the levelling bug (root cause of the frozen bar)

Choose a tag to compare

@matt82198 matt82198 released this 02 Aug 02:05

An expert panel (Opus architect, WoW addon dev, Lua expert, combat edge-case auditor) found why the bar kept freezing. It was never one bug - it was six stacked, and the biggest one is about YOUR CHARACTER.

THE ROOT CAUSE: a levelling rogue has 5 maximum combo points, not 6. Every finisher was hardcoded to "6+ CP" (from the guide, which assumes a geared rogue) and the builder was gated to "below max". At 5 combo points that means: builder blocked, finishers unreachable, predicted sequence EMPTY -> fall back to Blizzard static pick -> frozen icon, no glow. Finishers now spend at 6 OR at max when max is lower. The test stub defaulted to 6, so 166 passing tests never saw it.

ALSO FIXED THIS ROUND:

  • Stealth remaps your action bar, so keybind text and the glow pointed at the WRONG button the moment you stealthed. Slot resolution is now bonus-bar aware and caches clear on stealth/page changes.
  • Spell overrides now resolve in both directions, so an overridden ability is not treated as unknown.
  • Failed casts (out of range, line of sight) force an immediate re-evaluate - previously the bar kept glowing an unusable button forever, which a levelling rogue hits constantly while chasing mobs.
  • A crash in the keybind path was aborting the whole tick, which is why the glow never appeared at all.
  • Stealth state came from an aura scan that goes blind in combat, so it never cleared and Ambush pinned forever. Now read from IsStealthed().
  • The modern action-button lookup had never once run due to a return-value mistake.

168 tests, three consecutive clean runs.

v1.6.0 - your priority list + action-bar highlight

Choose a tag to compare

@matt82198 matt82198 released this 02 Aug 01:33
d16e4d5

Two things: the rotation now follows YOUR authoritative priority list verbatim, and the recommended ability is highlighted on your action bar.

PRIORITY LIST (replaces everything we derived):
Roll the Bones below Stage 2 -> Keep It Rolling at Stage 2+ -> Adrenaline Rush at low CP -> Blade Rush as a builder -> Between the Eyes at 6+ CP -> Preparation to reset AR/BtE/Blade Rush -> Killing Spree at 6+ CP -> Dispatch at 6+ CP when no other finisher is up -> Pistol Shot (6 stacks any CP, 3-5 stacks only at 1-3 CP) -> Sinister Strike.
Blade Flurry is now the ONLY single-target/AoE difference, fired at 2+ targets and preferring low combo points for Deft Maneuvers. The separate AoE priority list is deleted.
NOTE: Dispatch is a 6+ CP finisher, so at 5 CP the bar correctly shows a builder first, then the finisher - that is the list working, not a stuck icon.

ACTION-BAR HIGHLIGHT (/oa glow):
The position-1 recommendation is glowed on your real action bar. It probes Blizzard glow helpers first, then any discoverable action-bar API, and falls back to a self-drawn overlay so it never silently does nothing. Exactly one button glows at a time. /oa glow toggles it, /oa glow combat makes it combat-only, and /oa debug reports the resolved slot, the button frame, and which glow mechanism is active.

HONEST GAPS:

  • Killing Spree Supercharger exception NOT implemented: the buff spell ID could not be verified from a live source, so the rule ships without that condition rather than with an invented ID.
  • Opportunity now tracks stack counts, which rule 9 needs; verify in-game that stacks read correctly.

163 tests, three consecutive clean runs.

v1.5.0 - four icons, correct sequence, audit-cleared

Choose a tag to compare

@matt82198 matt82198 released this 01 Aug 22:12

This is the first build an expert Outlaw review would not veto. Three audits ran before release (Outlaw player, adversarial bug hunt, end-to-end bar behaviour) and every P0 they found is fixed.

YOUR TWO REPORTS, ROOT-CAUSED:

  • "perma dispatch and one more icon": TWO dedup passes were collapsing the predicted sequence by spell ID. At 0 combo points the correct answer is Sinister Strike x4 - that became one icon; at 5 CP it became Dispatch plus one leftover. Sequence steps are now exempt from dedup. The bar shows four steps.
  • The sequence now moves: 0 CP shows four builders, 5 CP shows Dispatch first then builders.

EXPERT-AUDIT P0s FIXED:

  • Stealth opener repeated Ambush on all four icons (the simulation never cleared stealth after casting it).
  • At 5-6 combo points the bar showed Roll the Bones, Adrenaline Rush, Blade Rush, Preparation and NEVER reached the finisher - none of those spend combo points, so it stalled through the whole visible window.
  • A legacy rule demoted a correct Dispatch to position 2, telling a levelling player to keep building instead of spending.
  • Killing Spree was modelled as a combo-point finisher; it is a burst cooldown.
  • Three ability citations pointed at different spell IDs than the code casts; corrected against the actual IDs.

ADVERSARIAL P0s FIXED:

  • The keybind cache sentinel was referenced but never defined, so nothing ever cached and every icon re-scanned up to 120 action slots ten times a second.
  • Spell-to-position mapping used the LAST occurrence, so reordering rules moved the wrong copy once a sequence repeated.

155 tests, three consecutive clean runs, plus a new end-to-end harness that asserts what the BAR shows - the gap that let unit tests stay green while live play was broken.

v1.4.0 - the bar fills out and the stuck icon is gone

Choose a tag to compare

@matt82198 matt82198 released this 01 Aug 21:42

Fixes both problems you hit on v1.3.1, plus the rotation decisions that were missing.

STUCK DISPATCH: when the ability costs were corrected, the RULES still had the old numbers hardcoded - Dispatch checked energy >= 25 while it actually costs 35. Between 25 and 34 energy we recommended a spell you could not cast, so you never cast it, your combo points stayed high, and it re-recommended forever. Rules no longer do resource arithmetic at all: affordability is derived centrally from the ability table, so data and rules cannot drift apart again.

ONLY TWO ICONS: with real costs (Sinister Strike 45, regen ~10/s) the simulation ran dry after two casts and simply stopped. It now pools - advancing time a GCD at a time, regenerating energy and ticking cooldowns - and continues, so the sequence fills out. It still terminates properly when everything is genuinely on cooldown.

NEW ROTATION DECISIONS: combo-point pooling at 5 CP when a 6-CP finisher is about to come up, a finisher fallback chain (Dispatch only when the better finishers are unavailable), Preparation used to reset downed cooldowns, and Opportunity consumed correctly across predicted steps.

ALSO: cooldown numbers restored on the icons (Blizzard countdown text is a user setting that is often off), confidence now visible as opacity, and Blizzard fallback entries look distinct from real predictions.

145 tests, three consecutive clean runs.

v1.3.1 - the first icon moves now

Choose a tag to compare

@matt82198 matt82198 released this 01 Aug 21:24

Both issues from live play, same session:

  1. FIRST ICON NEVER CHANGED. The simulation bailed out whenever aura data was flagged degraded - and Midnight hides aura data in combat, so it bailed out on essentially every pull. The bar then fell back to Blizzard static pick, which never moves. Energy, combo points and cooldowns are all still readable in combat and drive most of the priority list, so the simulation now runs regardless and simply lowers its confidence when buffs are hidden. Icon 1 is now the next step of YOUR sequence.

  2. KEYBINDS ON ONLY SOME ICONS. The action-slot to binding map covered slots 1-12 and 61-72 and mislabelled everything above 73, so an ability on most bars resolved no keybind at all. Replaced with the full canonical slot mapping (all bars, including the paged main bar).

129 tests, three consecutive clean runs.

v1.3.0 - correct ability data + stealth opener

Choose a tag to compare

@matt82198 matt82198 released this 01 Aug 21:11

An expert Outlaw review of the shipped v1.2 found the simulation was running on WRONG NUMBERS. Every ability value has now been re-verified against Wowhead with the source URL recorded inline.

CORRECTED (old -> new):

  • Dispatch energy 25 -> 35. This is the finisher a levelling character actually uses, so the basic builder->finisher loop was giving affordability advice off by 10 energy.
  • Blade Rush cost 25 -> 0, cooldown 10s -> 60s
  • Killing Spree cost 25 -> 45, cooldown 30s -> 180s
  • Between the Eyes cooldown 30s -> 45s
  • Blade Flurry cost 0 -> 15
  • Keep It Rolling cooldown 15s -> 360s

Wrong cooldowns silently corrupt a forward simulation, because the entire point is predicting when things come back up.

ALSO FIXED:

  • Ambush had NO priority rule at all - the addon skipped the stealth opener on every pull. It now leads the sequence when stealthed.
  • Simulated cooldowns never started (keyed by rule name instead of ability), so a predicted sequence could repeat the same ability.
  • A missing cooldown key returned a shared table, so one bad write corrupted later lookups for the session.

GUARDS ADDED: tests now assert the ability DATA itself, reject placeholder-looking values, and fail on back-to-back duplicates in a predicted sequence.

129 tests, three consecutive clean runs.