{
  "schemaVersion": 1,
  "sourceBuild": "1.60.1.70009",
  "sourceGenerated": "2026-09-26",
  "classes": [
    {
      "slug": "druid",
      "name": "Druid",
      "decisions": [
        {
          "ability_name": "Abolish Poison",
          "disposition": "macro",
          "macro_ids": [
            "druid-abolish-poison-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Aquatic Form",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the direct learned swim form with valid environment and acquisition requirements."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive proficiency or character metadata; no activatable class macro."
        },
        {
          "ability_name": "Attack",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the existing native spellbook/action-bar control; no distinct macro behavior is needed for this entry."
        },
        {
          "ability_name": "Barkskin",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the self defensive button deliberately; no target routing is needed."
        },
        {
          "ability_name": "Bash",
          "disposition": "macro",
          "macro_ids": [
            "druid-bash-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Bear Form",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the direct learned form button; quest acquisition and form identity are not granted by selecting Feral Combat."
        },
        {
          "ability_name": "Berserk",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Activate the selected talent deliberately in Cat/Bear form. It is a cooldown button, not an automatic Primal Bite or combo generator sequence."
        },
        {
          "ability_name": "Blood Frenzy",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Brutal Impact",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Cat Form",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the direct learned form button, then the chosen Cat ability on another press."
        },
        {
          "ability_name": "Challenging Roar",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a deliberate bear area-taunt button; a target-routing macro cannot choose the enemies affected."
        },
        {
          "ability_name": "Claw",
          "disposition": "macro",
          "macro_ids": [
            "druid-claw-attack"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Cower",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the Cat threat-reduction action deliberately against the selected target; a macro cannot inspect threat."
        },
        {
          "ability_name": "Cure Poison",
          "disposition": "macro",
          "macro_ids": [
            "druid-cure-poison-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Dash",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the Cat movement cooldown after entering Cat Form; no automatic form transition is needed."
        },
        {
          "ability_name": "Demoralizing Roar",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the native bear area-debuff action with enough Rage; a target macro does not limit its area."
        },
        {
          "ability_name": "Dire Bear Form",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the direct learned upgrade; do not guess a numeric stance index or assume the level grants ownership."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive proficiency or character metadata; no activatable class macro."
        },
        {
          "ability_name": "Eclipse",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Enrage",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "The legacy spellbook talent marker conflicts with the current tree, which has no Enrage node. Do not infer talent ownership; resolve acquisition in client before publishing a macro."
        },
        {
          "ability_name": "Entangling Roots",
          "disposition": "macro",
          "macro_ids": [
            "druid-entangling-roots-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Faerie Fire",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "The current spell record unexpectedly carries a Cat/Bear form requirement on the named baseline family. Resolve form access in client before publishing a universal caster/feral key."
        },
        {
          "ability_name": "Feline Grace",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive reduction in falling damage in Cat Form; no activatable macro."
        },
        {
          "ability_name": "Feral Charge",
          "disposition": "macro",
          "macro_ids": [
            "druid-feral-charge-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Feral Instinct",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Feral Swiftness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Ferocious Bite",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the Cat finisher yourself; a macro cannot choose from combo points, Energy or enemy health."
        },
        {
          "ability_name": "Ferocity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Frenzied Regeneration",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the bear defensive button with available Rage. No automatic health threshold, Rage check or emergency choice is allowed."
        },
        {
          "ability_name": "Furor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Genesis",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Gift of Nature",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Gift of the Earthmother",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Gift of the Wild",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned group buff and rank-specific reagent. A duplicate single-recipient macro would misdescribe this party/raid effect."
        },
        {
          "ability_name": "Growl",
          "disposition": "macro",
          "macro_ids": [
            "druid-growl-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Healing Touch",
          "disposition": "macro",
          "macro_ids": [
            "druid-healing-touch-mouseover",
            "druid-hybrid-healing-touch-wrath"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply. An optional consistent help/harm caster-support pair is also provided; Moonkin healing and Feral caster access require a deliberate form decision."
        },
        {
          "ability_name": "Heart of the Wild",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Hibernate",
          "disposition": "macro",
          "macro_ids": [
            "druid-hibernate-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Hurricane",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the native ground-target reticle and channel; cursor/player placement shortcuts need client tests."
        },
        {
          "ability_name": "Improved Entangling Roots",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Improved Moonfire",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Improved Regrowth",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Improved Rejuvenation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Improved Starfire",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Improved Tranquility",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Improved Wrath",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Innervate",
          "disposition": "macro",
          "macro_ids": [
            "druid-innervate-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Insect Swarm",
          "disposition": "macro",
          "macro_ids": [
            "druid-insect-swarm-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "King of the Jungle",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Lacerate",
          "disposition": "macro",
          "macro_ids": [
            "druid-lacerate-attack"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive proficiency or character metadata; no activatable class macro."
        },
        {
          "ability_name": "Leader of the Pack",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Living Spirit",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Mark of the Wild",
          "disposition": "macro",
          "macro_ids": [
            "druid-mark-of-the-wild-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Maul",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the native next-melee queue button; repeat-key queue and cancellation behavior require client tests before adding a non-toggling modifier macro."
        },
        {
          "ability_name": "Moonfire",
          "disposition": "macro",
          "macro_ids": [
            "druid-moonfire-mouseover",
            "druid-hybrid-rejuvenation-moonfire"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply. An optional consistent help/harm caster-support pair is also provided; Moonkin healing and Feral caster access require a deliberate form decision."
        },
        {
          "ability_name": "Moonfury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Moonglow",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Moonkin Form",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a direct learned talent form button. No sourced form-index mapping is established, so a guessed numeric stance switch is not published."
        },
        {
          "ability_name": "Natural Reaction",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Natural Shapeshifter",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Naturalist",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Nature's Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Nature's Grace",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Nature's Grasp",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the sourced learned self buff; it is baseline in this snapshot, not an assumed talent."
        },
        {
          "ability_name": "Nature's Majesty",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Nature's Reach",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Nature's Splendor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Nature's Swiftness",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Activate the selected Restoration talent deliberately, then press the chosen Nature spell separately. No untested same-press GCD chain is promised."
        },
        {
          "ability_name": "Omen of Clarity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "The sourced proc is a passive learned ability, not an activation to cast."
        },
        {
          "ability_name": "Overgrowth",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Pounce",
          "disposition": "macro",
          "macro_ids": [
            "druid-cat-opener-choice"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Predatory Instincts",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Predatory Strikes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Primal Bite",
          "disposition": "macro",
          "macro_ids": [
            "druid-primal-bite-attack"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Prowl",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned Prowl button while in Cat Form; this avoids combining a form transition, stealth and opener with unverified sequencing."
        },
        {
          "ability_name": "Rake",
          "disposition": "macro",
          "macro_ids": [
            "druid-rake-attack"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Ravage",
          "disposition": "macro",
          "macro_ids": [
            "druid-cat-opener-choice"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Rebirth",
          "disposition": "macro",
          "macro_ids": [
            "druid-rebirth-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Reflection",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Regrowth",
          "disposition": "macro",
          "macro_ids": [
            "druid-regrowth-mouseover",
            "druid-hybrid-regrowth-starfire"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply. An optional consistent help/harm caster-support pair is also provided; Moonkin healing and Feral caster access require a deliberate form decision."
        },
        {
          "ability_name": "Rejuvenation",
          "disposition": "macro",
          "macro_ids": [
            "druid-rejuvenation-mouseover",
            "druid-hybrid-rejuvenation-moonfire"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply. An optional consistent help/harm caster-support pair is also provided; Moonkin healing and Feral caster access require a deliberate form decision."
        },
        {
          "ability_name": "Remove Curse",
          "disposition": "macro",
          "macro_ids": [
            "druid-remove-curse-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Rend and Tear",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Revive",
          "disposition": "macro",
          "macro_ids": [
            "druid-revive-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Rip",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the Cat damage-over-time finisher yourself; a macro cannot decide combo-point spend or maintain the bleed."
        },
        {
          "ability_name": "Savage Fury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Sharpened Claws",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Shred",
          "disposition": "macro",
          "macro_ids": [
            "druid-shred-attack"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Shredding Attacks",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Soothe Animal",
          "disposition": "macro",
          "macro_ids": [
            "druid-soothe-animal-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Starfire",
          "disposition": "macro",
          "macro_ids": [
            "druid-starfire-mouseover",
            "druid-hybrid-regrowth-starfire"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply. An optional consistent help/harm caster-support pair is also provided; Moonkin healing and Feral caster access require a deliberate form decision."
        },
        {
          "ability_name": "Subtlety",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Swiftmend",
          "disposition": "macro",
          "macro_ids": [
            "druid-swiftmend-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Swipe",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the native bear area attack deliberately; it can hit nearby crowd-controlled enemies."
        },
        {
          "ability_name": "Teleport: Moonglade",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned teleport button; no target-routing macro is needed."
        },
        {
          "ability_name": "Thick Hide",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Thorns",
          "disposition": "macro",
          "macro_ids": [
            "druid-thorns-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Tiger's Fury",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the deliberate Cat cooldown button; do not hide it in every combo generator."
        },
        {
          "ability_name": "Track Humanoids",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned Cat tracking toggle directly; no target-routing action is required."
        },
        {
          "ability_name": "Tranquil Spirit",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Tranquility",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the native party-heal channel. A mouseover target is not its targeting mechanism."
        },
        {
          "ability_name": "Travel Form",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the direct learned outdoor form; a mount/travel decision macro adds unverified environment and form branching."
        },
        {
          "ability_name": "Vengeance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive talent modifies the chosen build; invest actual ranks in a valid allocation. It is not an activatable spell and must not be cast by a macro."
        },
        {
          "ability_name": "Wild Growth",
          "disposition": "macro",
          "macro_ids": [
            "druid-wild-growth-mouseover"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply."
        },
        {
          "ability_name": "Wrath",
          "disposition": "macro",
          "macro_ids": [
            "druid-wrath-mouseover",
            "druid-hybrid-healing-touch-wrath"
          ],
          "reason": "Explicit target routing or a player-chosen action modifier is provided; spell level, learned ownership, selected talents and form restrictions still apply. An optional consistent help/harm caster-support pair is also provided; Moonkin healing and Feral caster access require a deliberate form decision."
        }
      ]
    },
    {
      "slug": "hunter",
      "name": "Hunter",
      "decisions": [
        {
          "ability_name": "Aimed Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-aimed-multi"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Arcane Resistance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Arcane Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-arcane-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Aspect of the Beast",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal Aspect button for a deliberate melee/untrackable choice; the source records level 30 and only one active Aspect."
        },
        {
          "ability_name": "Aspect of the Cheetah",
          "disposition": "macro",
          "macro_ids": [
            "hunter-cheetah"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Aspect of the Hawk",
          "disposition": "macro",
          "macro_ids": [
            "hunter-combat-aspects"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Aspect of the Monkey",
          "disposition": "macro",
          "macro_ids": [
            "hunter-combat-aspects"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Aspect of the Pack",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Keep the group movement/daze-risk decision on a normal button; do not silently activate it during attacks."
        },
        {
          "ability_name": "Aspect of the Wild",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal group resistance Aspect button; no target-selection macro is needed."
        },
        {
          "ability_name": "Auto Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-auto-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Beast Lore",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Inspect a deliberately selected Beast with the ordinary spell button; creature eligibility still applies."
        },
        {
          "ability_name": "Bestial Wrath",
          "disposition": "macro",
          "macro_ids": [
            "hunter-bestial-wrath"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Bite",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: every family. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Call Pet",
          "disposition": "macro",
          "macro_ids": [
            "hunter-pet-care"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Charge",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Boar. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Claw",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Bear, Bird of Prey, Carrion Bird, Cat, Crab, Raptor, Scorpid. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Concussive Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-concussive-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Counterattack",
          "disposition": "macro",
          "macro_ids": [
            "hunter-counterattack"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Cower",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Dash",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: every family. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Demoralizing Screech",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Carrion Bird. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Deterrence",
          "disposition": "macro",
          "macro_ids": [
            "hunter-deterrence"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Disengage",
          "disposition": "macro",
          "macro_ids": [
            "hunter-disengage"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Dismember",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Crocilisk. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Dismiss Pet",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Deliberate ordinary pet-management cast. Do not hide the source-described happiness cost inside routine care or attacks."
        },
        {
          "ability_name": "Distracting Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-distracting-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Dive",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Bird of Prey, Carrion Bird, Wind Serpent. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Dust Cloud",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Tallstrider. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Eagle Eye",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary outdoor scouting channel/placement keeps a deliberate exploration action; no combat automation or repeated-location cast."
        },
        {
          "ability_name": "Enchanted Flare",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Source also lists Flare at the same recorded level with different cooldown. Acquisition/replacement relationship is unresolved."
        },
        {
          "ability_name": "Explosive Trap",
          "disposition": "macro",
          "macro_ids": [
            "hunter-fire-traps"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Eyes of the Beast",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary pet-control channel; player explicitly enters and exits control. No automatic pet navigation."
        },
        {
          "ability_name": "Feed Pet",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal spell and deliberate compatible-food selection. Do not invent food item IDs or choose food automatically."
        },
        {
          "ability_name": "Feign Death",
          "disposition": "macro",
          "macro_ids": [
            "hunter-feign-death"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Fire Resistance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Flare",
          "disposition": "macro",
          "macro_ids": [
            "hunter-flare"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Freezing Trap",
          "disposition": "macro",
          "macro_ids": [
            "hunter-freezing-frost"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Frost Resistance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Frost Trap",
          "disposition": "macro",
          "macro_ids": [
            "hunter-freezing-frost"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Furious Howl",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Wolf. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Great Stamina",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Growl",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Hunter's Mark",
          "disposition": "macro",
          "macro_ids": [
            "hunter-hunters-mark"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Immolation Trap",
          "disposition": "macro",
          "macro_ids": [
            "hunter-fire-traps"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Intimidation",
          "disposition": "macro",
          "macro_ids": [
            "hunter-intimidation"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Lacerate",
          "disposition": "macro",
          "macro_ids": [
            "hunter-lacerate"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Lightning Breath",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Wind Serpent. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Mend Pet",
          "disposition": "macro",
          "macro_ids": [
            "hunter-pet-care"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Mine!",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Bird of Prey. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Mongoose Bite",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Reactive attack already works on a normal action button after a dodge. No proc-based selection or duplicate key is needed."
        },
        {
          "ability_name": "Multi-Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-aimed-multi"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Natural Armor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Nature Resistance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Pinch",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Crab. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Prowl",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Cat. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Rapid Fire",
          "disposition": "macro",
          "macro_ids": [
            "hunter-trueshot-rapid"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Raptor Strike",
          "disposition": "macro",
          "macro_ids": [
            "hunter-raptor-strike"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Revive Pet",
          "disposition": "macro",
          "macro_ids": [
            "hunter-pet-care"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Savage Rend",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Raptor. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Scare Beast",
          "disposition": "macro",
          "macro_ids": [
            "hunter-scare-beast"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Scatter Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-scatter-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Scorpid Poison",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Scorpid. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Scorpid Sting",
          "disposition": "macro",
          "macro_ids": [
            "hunter-stings"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Serpent Sting",
          "disposition": "macro",
          "macro_ids": [
            "hunter-stings"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Shadow Resistance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source companion stat/resistance passive; no active cast or macro action."
        },
        {
          "ability_name": "Shell Shield",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Turtle. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Sniper Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-sniper-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Strider Kick",
          "disposition": "macro",
          "macro_ids": [
            "hunter-strider-kick"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Summon Hawk",
          "disposition": "macro",
          "macro_ids": [
            "hunter-summon-hawk"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Swipe",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Bear. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Tame Beast",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Deliberately dismiss/control your existing pet and choose a tameable Beast no higher than your level. Acquisition, family and channel conditions need checking."
        },
        {
          "ability_name": "Tendon Rip",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Hyena. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Thunderstomp",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Gorilla. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Track Beasts",
          "disposition": "macro",
          "macro_ids": [
            "hunter-tracking"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Track Demons",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary tracking selector remains sufficient; only one mode can be active. No need to duplicate every creature category as a macro."
        },
        {
          "ability_name": "Track Dragonkin",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary tracking selector remains sufficient; only one mode can be active. No need to duplicate every creature category as a macro."
        },
        {
          "ability_name": "Track Elementals",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary tracking selector remains sufficient; only one mode can be active. No need to duplicate every creature category as a macro."
        },
        {
          "ability_name": "Track Giants",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary tracking selector remains sufficient; only one mode can be active. No need to duplicate every creature category as a macro."
        },
        {
          "ability_name": "Track Hidden",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary tracking selector remains sufficient; only one mode can be active. No need to duplicate every creature category as a macro."
        },
        {
          "ability_name": "Track Humanoids",
          "disposition": "macro",
          "macro_ids": [
            "hunter-tracking"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Track Undead",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary tracking selector remains sufficient; only one mode can be active. No need to duplicate every creature category as a macro."
        },
        {
          "ability_name": "Tranquilizing Shot",
          "disposition": "macro",
          "macro_ids": [
            "hunter-tranquilizing-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Trickster's Dance",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Fox. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Trueshot Aura",
          "disposition": "macro",
          "macro_ids": [
            "hunter-trueshot-rapid"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Viper Sting",
          "disposition": "macro",
          "macro_ids": [
            "hunter-stings"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Volley",
          "disposition": "macro",
          "macro_ids": [
            "hunter-volley"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Web",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a normal learned pet action or deliberately configured autocast. Pet: Spider. Pet acquisition/training, actual pet level, Focus and live targeting semantics need confirmation before a specialised pet macro."
        },
        {
          "ability_name": "Wing Clip",
          "disposition": "macro",
          "macro_ids": [
            "hunter-wing-clip"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Deadly Aspects",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Endurance Training",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Focused Fire",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Aspect of the Monkey",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Pathfinding",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Revive Pet",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Bestial Swiftness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Unleashed Fury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Mend Pet",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Ferocity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Spirit Bond",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Bestial Discipline",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Frenzy",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Beast Mastery passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Hawk Eye",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Concussive Shot",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Lethal Attacks",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Stings",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Efficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Careful Aim",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Rapid Killing",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Arcane Shot",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Lone Wolf",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Mortal Shots",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Rapid Recuperation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Barrage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Ranged Weapon Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Marksmanship passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Tracking",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Deflection",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Entrapment",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Savage Strikes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Survivalist",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Wing Clip",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Clever Traps",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Surefooted",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Survival Tactics",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Predator's Edge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Resourcefulness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Expose Prey",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Survivalist's Discipline",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Lightning Reflexes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Lacerating Strikes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Survival passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Throw",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Beast Training",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Dual Wield",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Parry",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        }
      ]
    },
    {
      "slug": "mage",
      "name": "Mage",
      "decisions": [
        {
          "ability_name": "Amplify Magic",
          "disposition": "macro",
          "macro_ids": [
            "mage-magic-adjustment-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Arcane Blast",
          "disposition": "macro",
          "macro_ids": [
            "mage-arcane-blast-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Arcane Brilliance",
          "disposition": "macro",
          "macro_ids": [
            "mage-arcane-brilliance-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Arcane Explosion",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The ordinary learned spellbook action is sufficient; no redundant simple cast wrapper, invented requirement or automated decision is added."
        },
        {
          "ability_name": "Arcane Intellect",
          "disposition": "macro",
          "macro_ids": [
            "mage-arcane-intellect-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Arcane Missiles",
          "disposition": "macro",
          "macro_ids": [
            "mage-arcane-missiles-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Arcane Power",
          "disposition": "macro",
          "macro_ids": [
            "mage-arcane-cooldown-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Blast Wave",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Self-centered area attack; a normal spellbook binding gives the same control without a redundant wrapper."
        },
        {
          "ability_name": "Blink",
          "disposition": "macro",
          "macro_ids": [
            "mage-blink-emergency"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Blizzard",
          "disposition": "macro",
          "macro_ids": [
            "mage-blizzard-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Cold Snap",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use its spellbook button deliberately; automatically chaining reset and damage would obscure cooldown use."
        },
        {
          "ability_name": "Combustion",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use its spellbook button deliberately; a simple cast wrapper adds no targeting value, and proc/rotation selection must remain manual."
        },
        {
          "ability_name": "Cone of Cold",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Facing-sensitive area action; no automatic positioning or targeting macro is useful."
        },
        {
          "ability_name": "Conjure Food",
          "disposition": "macro",
          "macro_ids": [
            "mage-conjure-refreshments"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Conjure Mana Agate",
          "disposition": "macro",
          "macro_ids": [
            "mage-conjure-mana-gem-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Conjure Mana Citrine",
          "disposition": "macro",
          "macro_ids": [
            "mage-conjure-mana-gem-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Conjure Mana Jade",
          "disposition": "macro",
          "macro_ids": [
            "mage-conjure-mana-gem-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Conjure Mana Ruby",
          "disposition": "macro",
          "macro_ids": [
            "mage-conjure-mana-gem-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Conjure Water",
          "disposition": "macro",
          "macro_ids": [
            "mage-conjure-refreshments"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Counterspell",
          "disposition": "macro",
          "macro_ids": [
            "mage-counterspell-mouseover",
            "mage-hybrid-curse-counterspell"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Dampen Magic",
          "disposition": "macro",
          "macro_ids": [
            "mage-magic-adjustment-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Evocation",
          "disposition": "macro",
          "macro_ids": [
            "mage-evocation-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Fire Blast",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary instant damage binding; no proc or kill detection is warranted."
        },
        {
          "ability_name": "Fire Ward",
          "disposition": "macro",
          "macro_ids": [
            "mage-ward-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Fireball",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary damage binding; rotation, rank/proc choices and target selection remain manual."
        },
        {
          "ability_name": "Flamestrike",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal manual ground reticle. Cursor-placement support has not been demonstrated for this Forever build."
        },
        {
          "ability_name": "Frost Armor",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self armor button; do not choose or replace armor automatically."
        },
        {
          "ability_name": "Frost Nova",
          "disposition": "macro",
          "macro_ids": [
            "mage-frost-nova-emergency"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Frost Ward",
          "disposition": "macro",
          "macro_ids": [
            "mage-ward-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Frostbolt",
          "disposition": "macro",
          "macro_ids": [
            "mage-frostbolt-rank-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Frostfire Bolt",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Baseline learned spell, not Fire/Frost spec-locked. Use its ordinary damage binding; no inferred rotation macro."
        },
        {
          "ability_name": "Ice Armor",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self armor button; the learned rank and one-armor restriction remain player decisions."
        },
        {
          "ability_name": "Ice Barrier",
          "disposition": "macro",
          "macro_ids": [
            "mage-ice-barrier-emergency"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Ice Block",
          "disposition": "macro",
          "macro_ids": [
            "mage-ice-block-controlled"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Ice Lance",
          "disposition": "macro",
          "macro_ids": [
            "mage-ice-lance-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Mage Armor",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self armor button; a macro is not needed to apply it."
        },
        {
          "ability_name": "Mana Shield",
          "disposition": "macro",
          "macro_ids": [
            "mage-mana-shield-emergency"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Polymorph",
          "disposition": "macro",
          "macro_ids": [
            "mage-polymorph-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Portal: Darnassus",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Portal: Ironforge",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Portal: Orgrimmar",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Portal: Stormwind",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Portal: Thunder Bluff",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Portal: Undercity",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Presence of Mind",
          "disposition": "macro",
          "macro_ids": [
            "mage-arcane-cooldown-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Pyroblast",
          "disposition": "macro",
          "macro_ids": [
            "mage-pyroblast-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Remove Lesser Curse",
          "disposition": "macro",
          "macro_ids": [
            "mage-remove-curse-mouseover",
            "mage-hybrid-curse-counterspell"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Scorch",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal damage binding; talent/debuff maintenance remains manual."
        },
        {
          "ability_name": "Slow Fall",
          "disposition": "macro",
          "macro_ids": [
            "mage-slow-fall-controlled"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Teleport: Dalaran",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Teleport: Darnassus",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Teleport: Ironforge",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Teleport: Orgrimmar",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Teleport: Stormwind",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Teleport: Thunder Bluff",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Teleport: Undercity",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the learned destination directly; faction, trainer access and Rune of Teleportation/Portals requirements must be checked. No faction inference or travel automation."
        },
        {
          "ability_name": "Wand Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Channeling",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Subtlety",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Magic Absorption",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Concentration",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Resilience",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Geometry",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 3, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Impact",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Shielding",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Counterspell",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Meditation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Missile Barrage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 4, up to 1 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Mind",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 5, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arcane Instability",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arcane talent, tier 6, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Wake of Fire",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Incineration",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 1, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Fireball",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Ignite",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Flame Throwing",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Impact",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Burning Soul",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Flamestrike",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Scorch",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Fire Ward",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Hot Streak",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 4, up to 1 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Master of Elements",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Critical Mass",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 5, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Fire Power",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fire talent, tier 6, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Frost Warding",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Frostbolt",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Elemental Precision",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Ice Shards",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Permafrost",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Frost Nova",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Frostbite",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Piercing Ice",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Frost Channeling",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Blizzard",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Arctic Reach",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shatter",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Cone of Cold",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 5, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Fingers of Frost",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 5, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Winter's Chill",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Frost talent, tier 6, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Shoot",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Comprehend Scroll",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "The General entry has no sourced spell ID or complete acquisition evidence; keep as a research gap."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        }
      ]
    },
    {
      "slug": "paladin",
      "name": "Paladin",
      "decisions": [
        {
          "ability_name": "Blessing of Freedom",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-freedom"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Kings",
          "disposition": "macro",
          "macro_ids": [
            "paladin-blessing-kings"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Light",
          "disposition": "macro",
          "macro_ids": [
            "paladin-blessing-light"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Might",
          "disposition": "macro",
          "macro_ids": [
            "paladin-blessing-might"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Protection",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-blessing-of-protection",
            "paladin-prot-cancel-protection"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Sacrifice",
          "disposition": "macro",
          "macro_ids": [
            "paladin-blessing-sacrifice"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Salvation",
          "disposition": "macro",
          "macro_ids": [
            "paladin-blessing-salvation"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Blessing of Wisdom",
          "disposition": "macro",
          "macro_ids": [
            "paladin-blessing-wisdom"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Cleanse",
          "disposition": "macro",
          "macro_ids": [
            "paladin-cleanse"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Concentration Aura",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Consecration",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Devotion Aura",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Divine Favor",
          "disposition": "macro",
          "macro_ids": [
            "paladin-holy-preparation"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Divine Intervention",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Sacrifices the caster and changes an ally's combat state. Keep deliberate ordinary spellbook use; no new macro without a verified target and recovery workflow."
        },
        {
          "ability_name": "Divine Protection",
          "disposition": "macro",
          "macro_ids": [
            "paladin-divine-protection"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Divine Shield",
          "disposition": "macro",
          "macro_ids": [
            "paladin-divine-shield"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Exorcism",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-exorcism"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Fire Resistance Aura",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Flash of Light",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-flash-of-light",
            "paladin-hybrid-flash-holy-strike"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys. Hybrid variants add consistent healing-first target selection; the original single-purpose variants remain available."
        },
        {
          "ability_name": "Frost Resistance Aura",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Greater Blessing of Kings",
          "disposition": "macro",
          "macro_ids": [
            "paladin-greater-kings"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Greater Blessing of Light",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Greater Blessing of Might",
          "disposition": "macro",
          "macro_ids": [
            "paladin-greater-might"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Greater Blessing of Salvation",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Greater Blessing of Wisdom",
          "disposition": "macro",
          "macro_ids": [
            "paladin-greater-wisdom"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Hammer of Justice",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-hammer-of-justice"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Hammer of Wrath",
          "disposition": "macro",
          "macro_ids": [
            "paladin-hammer-of-wrath"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Holy Light",
          "disposition": "macro",
          "macro_ids": [
            "paladin-holy-light",
            "paladin-hybrid-holy-light-judgement"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys. Hybrid variants add consistent healing-first target selection; the original single-purpose variants remain available."
        },
        {
          "ability_name": "Holy Shield",
          "disposition": "macro",
          "macro_ids": [
            "paladin-holy-shield"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Holy Shock",
          "disposition": "macro",
          "macro_ids": [
            "paladin-holy-shock",
            "paladin-hybrid-holy-shock"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys. Hybrid variants add consistent healing-first target selection; the original single-purpose variants remain available."
        },
        {
          "ability_name": "Holy Strike",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-holy-strike",
            "paladin-hybrid-flash-holy-strike"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys. Hybrid variants add consistent healing-first target selection; the original single-purpose variants remain available."
        },
        {
          "ability_name": "Holy Wrath",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Judgement",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-fury-judgement",
            "paladin-judgement",
            "paladin-hybrid-holy-light-judgement"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys. Hybrid variants add consistent healing-first target selection; the original single-purpose variants remain available."
        },
        {
          "ability_name": "Lay on Hands",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-lay-on-hands"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Light's Vigil",
          "disposition": "macro",
          "macro_ids": [
            "paladin-lights-vigil"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Purify",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-purify"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Redemption",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-redemption"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Repentance",
          "disposition": "macro",
          "macro_ids": [
            "paladin-repentance"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Retribution Aura",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Righteous Fury",
          "disposition": "macro",
          "macro_ids": [
            "paladin-righteous-fury"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Seal of Command",
          "disposition": "macro",
          "macro_ids": [
            "paladin-seal-command-choice"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Seal of Fury",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-fury-judgement"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Seal of Justice",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Seal of Light",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Seal of Righteousness",
          "disposition": "macro",
          "macro_ids": [
            "paladin-seal-command-choice"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Seal of Wisdom",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Seal of the Crusader",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Sense Undead",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Shadow Resistance Aura",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal learned spellbook action is sufficient. Avoid redundant one-line wrappers, unsupported aura detection or automatic multi-spell sequences."
        },
        {
          "ability_name": "Swift Judgement",
          "disposition": "macro",
          "macro_ids": [
            "paladin-swift-judgement"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Templar's Bulwark",
          "disposition": "macro",
          "macro_ids": [
            "paladin-prot-templars-bulwark"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Turn Undead",
          "disposition": "macro",
          "macro_ids": [
            "paladin-turn-undead"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Voice of Truth",
          "disposition": "macro",
          "macro_ids": [
            "paladin-holy-preparation"
          ],
          "reason": "Explicit target selection, deliberate cooldown or seal choice, guarded aura removal, or a separately selected support action in the linked keys."
        },
        {
          "ability_name": "Divine Strength",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Divine Intellect",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Healing Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Spiritual Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Improved Seals",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Unyielding Faith",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Reverence",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Purifying Power",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Infusion of Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Illumination",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Divine Precision",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Consecrated Ground",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Holy Power",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Toughness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Redoubt",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Precision",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Guardian's Favor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Anticipation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Improved Seal of Fury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Improved Righteous Fury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Shield Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Sacred Duty",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "One-Handed Weapon Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Improved Hammer of Justice",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Reckoning",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Iron Creed",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Deflection",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Benediction",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Improved Judgement",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Holy Conduit",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Conviction",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Vindication",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Sanctified Judgement",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Pursuit of Justice",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Eye for an Eye",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Sacred Arbiter",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Two-Handed Weapon Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Vengeance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Champion of the Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Instrument of Law",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        },
        {
          "ability_name": "Twist of Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Allocate the actual talent ranks in a legal tree. This passive changes abilities and is not a cast command or a condition a macro can automatically detect."
        }
      ]
    },
    {
      "slug": "priest",
      "name": "Priest",
      "decisions": [
        {
          "ability_name": "Abolish Disease",
          "disposition": "macro",
          "macro_ids": [
            "priest-abolish-disease-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Binding Heal",
          "disposition": "macro",
          "macro_ids": [
            "priest-binding-heal-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Chastise",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Confounding Flash",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Contingency Plan",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Cure Disease",
          "disposition": "macro",
          "macro_ids": [
            "priest-cure-disease-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Dark Sacrifice",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Desperate Prayer",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Devouring Plague",
          "disposition": "macro",
          "macro_ids": [
            "priest-devouring-plague-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Dispel Magic",
          "disposition": "macro",
          "macro_ids": [
            "priest-dispel-magic-dual",
            "priest-hybrid-dispel-magic"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros. Hybrid follow-up: optional friendly-first support/damage or native cleanse/purge pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Divine Grace",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Divine Spirit",
          "disposition": "macro",
          "macro_ids": [
            "priest-divine-spirit-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Elune's Grace",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Fade",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self utility button; no threat-based or cooldown-based action selection."
        },
        {
          "ability_name": "Fear Ward",
          "disposition": "macro",
          "macro_ids": [
            "priest-fear-ward-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Feedback",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Flash Heal",
          "disposition": "macro",
          "macro_ids": [
            "priest-flash-heal-mouseover",
            "priest-hybrid-flash-heal-smite"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros. Hybrid follow-up: optional friendly-first support/damage or native cleanse/purge pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Greater Heal",
          "disposition": "macro",
          "macro_ids": [
            "priest-greater-heal-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Heal",
          "disposition": "macro",
          "macro_ids": [
            "priest-heal-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Hex of Weakness",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Holy Fire",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary damage button; no automatic rotation or proc handling."
        },
        {
          "ability_name": "Holy Nova",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal button already performs the caster-centered damage/healing effect. It is not a targeted heal."
        },
        {
          "ability_name": "Inner Fire",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self-buff button; no aura-state detection."
        },
        {
          "ability_name": "Inner Focus",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use its standalone cooldown button; activate the follow-up spell deliberately on another press."
        },
        {
          "ability_name": "Lesser Heal",
          "disposition": "macro",
          "macro_ids": [
            "priest-lesser-heal-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Levitate",
          "disposition": "macro",
          "macro_ids": [
            "priest-levitate-controlled"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Lightwell",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Baseline learned ability in this source, not a Holy capstone. Place it and interact with it manually."
        },
        {
          "ability_name": "Mana Burn",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal offensive utility action; no enemy-resource detection."
        },
        {
          "ability_name": "Mind Blast",
          "disposition": "macro",
          "macro_ids": [
            "priest-hybrid-shield-mind-blast"
          ],
          "reason": "Keep the ordinary damage button available for deliberate cooldown timing and threat control. The optional Power Word: Shield / Mind Blast hybrid adds a friendly-first absorb branch; it never detects target health, shield state, Weakened Soul or cooldowns and is not client tested."
        },
        {
          "ability_name": "Mind Control",
          "disposition": "macro",
          "macro_ids": [
            "priest-mind-control-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Mind Flay",
          "disposition": "macro",
          "macro_ids": [
            "priest-mind-flay-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Mind Soothe",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Creature and rank restrictions require manual judgment; normal targeted button is sufficient."
        },
        {
          "ability_name": "Mind Vision",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal targeted utility action; no automated scouting."
        },
        {
          "ability_name": "Penance",
          "disposition": "macro",
          "macro_ids": [
            "priest-penance-dual-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Power Infusion",
          "disposition": "macro",
          "macro_ids": [
            "priest-power-infusion-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Power Word: Fortitude",
          "disposition": "macro",
          "macro_ids": [
            "priest-fortitude-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Power Word: Shield",
          "disposition": "macro",
          "macro_ids": [
            "priest-shield-mouseover",
            "priest-hybrid-shield-mind-blast"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros. Hybrid follow-up: optional friendly-first support/damage or native cleanse/purge pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Prayer of Fortitude",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Group buff with rank-specific candle and group requirements; the ordinary targeted spellbook action is sufficient."
        },
        {
          "ability_name": "Prayer of Healing",
          "disposition": "macro",
          "macro_ids": [
            "priest-prayer-healing-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Prayer of Mending",
          "disposition": "macro",
          "macro_ids": [
            "priest-prayer-mending-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Prayer of Shadow Protection",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Group buff requiring a Sacred Candle; ordinary targeted binding is sufficient."
        },
        {
          "ability_name": "Prayer of Spirit",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Group buff requiring a Sacred Candle; ordinary targeted binding is sufficient."
        },
        {
          "ability_name": "Psychic Scream",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Caster-centered crowd control; normal spellbook binding avoids unnecessary macro slots."
        },
        {
          "ability_name": "Renew",
          "disposition": "macro",
          "macro_ids": [
            "priest-renew-mouseover",
            "priest-hybrid-renew-shadow-pain"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros. Hybrid follow-up: optional friendly-first support/damage or native cleanse/purge pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Resurrection",
          "disposition": "macro",
          "macro_ids": [
            "priest-resurrection-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Shackle Undead",
          "disposition": "macro",
          "macro_ids": [
            "priest-shackle-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Shadow Protection",
          "disposition": "macro",
          "macro_ids": [
            "priest-shadow-protection-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Shadow Word: Death",
          "disposition": "macro",
          "macro_ids": [
            "priest-shadow-death-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Shadow Word: Pain",
          "disposition": "macro",
          "macro_ids": [
            "priest-shadow-pain-mouseover",
            "priest-hybrid-renew-shadow-pain"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros. Hybrid follow-up: optional friendly-first support/damage or native cleanse/purge pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Shadowform",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the form button deliberately. Healing keys do not silently cancel this form."
        },
        {
          "ability_name": "Shadowguard",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Silence",
          "disposition": "macro",
          "macro_ids": [
            "priest-silence-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Smite",
          "disposition": "macro",
          "macro_ids": [
            "priest-hybrid-flash-heal-smite"
          ],
          "reason": "Keep the ordinary damage button available. The optional Flash Heal / Smite hybrid provides explicitly requested friendly-first support and selected-enemy damage without a cooldown, health or proc decision; it is researched, not client tested."
        },
        {
          "ability_name": "Starshards",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Touch of Weakness",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Race assignment is demo-derived in the availability inventory. Official notes corroborate some race/spell pairs, but complete current race acquisition and target restrictions are not captured; no public racial macro is inferred."
        },
        {
          "ability_name": "Vampiric Embrace",
          "disposition": "macro",
          "macro_ids": [
            "priest-vampiric-embrace-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Power in Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Wand Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Twin Disciplines",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Silent Resolve",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Holy Precision",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Power Word: Shield",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Martyrdom",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Mental Agility",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Meditation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Inner Fire",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Mental Strength",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 4, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Soul Warding",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 4, up to 1 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Mana Burn",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Renewed Hope",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 5, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Divine Aegis",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Discipline talent, tier 6, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Twilight Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 1, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Renew",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 1, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Holy Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Spell Warding",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Divine Fury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Blessed Recovery",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Inspiration",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Holy Reach",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Healing",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Searing Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Litany of Light",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 5, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Spirit of Redemption",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 5, up to 1 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Spiritual Guidance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 5, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Spiritual Healing",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Holy talent, tier 6, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shadow Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Blackout",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Spirit Tap",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shadow Affinity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Shadow Word: Pain",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shadow Reach",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Mind Blast",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 3, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Psychic Scream",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 3, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Mind Flay",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 3, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Fade",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shadow Weaving",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Devouring Contagion",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 5, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Early Demise",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 6, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Darkness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Shadow talent, tier 6, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Shoot",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        }
      ]
    },
    {
      "slug": "rogue",
      "name": "Rogue",
      "decisions": [
        {
          "ability_name": "Adrenaline Rush",
          "disposition": "macro",
          "macro_ids": [
            "rogue-combat-cooldowns"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Ambush",
          "disposition": "macro",
          "macro_ids": [
            "rogue-ambush-garrote"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Backstab",
          "disposition": "macro",
          "macro_ids": [
            "rogue-backstab"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Blade Flurry",
          "disposition": "macro",
          "macro_ids": [
            "rogue-combat-cooldowns",
            "rogue-cancel-blade-flurry"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Blind",
          "disposition": "macro",
          "macro_ids": [
            "rogue-blind"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Blinding Powder",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Craft from the known recipe with its source-listed reagent; a normal crafting action needs no combat macro."
        },
        {
          "ability_name": "Cheap Shot",
          "disposition": "macro",
          "macro_ids": [
            "rogue-cheap-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Cold Blood",
          "disposition": "macro",
          "macro_ids": [
            "rogue-cold-blood-mutilate"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Crippling Poison",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Source describes a crafting/coating skill. Exact usable item ID and safe weapon-slot application are not established; no /cast poison shortcut."
        },
        {
          "ability_name": "Deadly Poison",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Source describes a crafting/coating skill. Item ranks, actual item IDs and safe main/off-hand application need separate evidence."
        },
        {
          "ability_name": "Detect Traps",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source lists detection as a passive effect with no cast action; do not macro it."
        },
        {
          "ability_name": "Disarm Trap",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal short-range trap-disarm action after manually identifying and approaching a trap; object selection is not an enemy-unit macro."
        },
        {
          "ability_name": "Distract",
          "disposition": "macro",
          "macro_ids": [
            "rogue-distract"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Evasion",
          "disposition": "macro",
          "macro_ids": [
            "rogue-evasion-sprint"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Eviscerate",
          "disposition": "macro",
          "macro_ids": [
            "rogue-damage-finishers"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Expose Armor",
          "disposition": "macro",
          "macro_ids": [
            "rogue-expose-armor"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Feint",
          "disposition": "macro",
          "macro_ids": [
            "rogue-feint"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Garrote",
          "disposition": "macro",
          "macro_ids": [
            "rogue-ambush-garrote"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Ghostly Strike",
          "disposition": "macro",
          "macro_ids": [
            "rogue-ghostly-strike"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Gouge",
          "disposition": "macro",
          "macro_ids": [
            "rogue-gouge"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Hemorrhage",
          "disposition": "macro",
          "macro_ids": [
            "rogue-hemorrhage"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Instant Poison",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Do not confuse a poison recipe spell ID with a usable inventory item. Application macro awaits exact item/rank evidence."
        },
        {
          "ability_name": "Kick",
          "disposition": "macro",
          "macro_ids": [
            "rogue-kick"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Kidney Shot",
          "disposition": "macro",
          "macro_ids": [
            "rogue-kidney-shot"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Mind-numbing Poison",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Crafting/coating description does not establish a safe item-use macro or usable item ID; preserve deliberate weapon application."
        },
        {
          "ability_name": "Mutilate",
          "disposition": "macro",
          "macro_ids": [
            "rogue-cold-blood-mutilate"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Pick Pocket",
          "disposition": "macro",
          "macro_ids": [
            "rogue-pick-pocket"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Premeditation",
          "disposition": "macro",
          "macro_ids": [
            "rogue-premeditation"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Preparation",
          "disposition": "macro",
          "macro_ids": [
            "rogue-preparation"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Riposte",
          "disposition": "macro",
          "macro_ids": [
            "rogue-riposte"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Rupture",
          "disposition": "macro",
          "macro_ids": [
            "rogue-damage-finishers"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Safe Fall",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Passive reduction of falling damage has no cast action."
        },
        {
          "ability_name": "Sap",
          "disposition": "macro",
          "macro_ids": [
            "rogue-sap"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Sinister Strike",
          "disposition": "macro",
          "macro_ids": [
            "rogue-sinister-strike"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Slice and Dice",
          "disposition": "macro",
          "macro_ids": [
            "rogue-venom-slice"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Sprint",
          "disposition": "macro",
          "macro_ids": [
            "rogue-evasion-sprint"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Stealth",
          "disposition": "macro",
          "macro_ids": [
            "rogue-stealth"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Vanish",
          "disposition": "macro",
          "macro_ids": [
            "rogue-vanish"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Venom",
          "disposition": "macro",
          "macro_ids": [
            "rogue-venom-slice"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Wound Poison",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Source recipe/coating skill requires item/rank and weapon-slot evidence before an application macro can be published."
        },
        {
          "ability_name": "Improved Gouge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Remorseless Attacks",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Malice",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Ruthlessness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Murder",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Slice and Dice",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Relentless Strikes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Expose Armor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Lethality",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Vile Poisons",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Poisons",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Vigor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Kidney Shot",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Seal Fate",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Assassination passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Eviscerate",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Sinister Strike",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Lightning Reflexes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Puncturing Wounds",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Deflection",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Precision",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Endurance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Sprint",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Kick",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Flawless Execution",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Dual Wield Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Hack and Slash",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Weapon Expertise",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Aggression",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Combat passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Camouflage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Master of Deception",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Opportunity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Setup",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Elusiveness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Dirty Tricks",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Ambush",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Initiative",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Distract",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Heightened Senses",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Serrated Blades",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Dirty Deeds",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Quietus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Cutthroat",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent can enable Ambush outside Stealth after Backstab. The published opener deliberately keeps its stealth guard; use an ordinary Ambush action button for the proc. No automatic proc detection."
        },
        {
          "ability_name": "Thousand Cuts",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Subtlety passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Pick Lock",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Shoot Bow",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Shoot Crossbow",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Shoot Gun",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Throw",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Dual Wield",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Parry",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        }
      ]
    },
    {
      "slug": "shaman",
      "name": "Shaman",
      "decisions": [
        {
          "ability_name": "Ancestral Spirit",
          "disposition": "macro",
          "macro_ids": [
            "shaman-ancestral-spirit-resurrection"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Astral Recall",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal learned travel action and choose the home destination with an innkeeper. No automatic travel or unnecessary cast wrapper."
        },
        {
          "ability_name": "Call of the Ancestors",
          "disposition": "macro",
          "macro_ids": [
            "shaman-totem-call-presets"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Call of the Elements",
          "disposition": "macro",
          "macro_ids": [
            "shaman-totem-call-presets"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Call of the Spirits",
          "disposition": "macro",
          "macro_ids": [
            "shaman-totem-call-presets"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Chain Heal",
          "disposition": "macro",
          "macro_ids": [
            "shaman-chain-heal-mouseover",
            "shaman-hybrid-chain-heal-chain-lightning"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Chain Lightning",
          "disposition": "macro",
          "macro_ids": [
            "shaman-lightning-choice",
            "shaman-hybrid-chain-heal-chain-lightning"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Cure Disease",
          "disposition": "macro",
          "macro_ids": [
            "shaman-cure-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Cure Poison",
          "disposition": "macro",
          "macro_ids": [
            "shaman-cure-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Disease Cleansing Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-cleansing-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Earth Shock",
          "disposition": "macro",
          "macro_ids": [
            "shaman-earth-shock-interrupt"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Earthbind Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-earth-control-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Far Sight",
          "disposition": "macro",
          "macro_ids": [
            "shaman-far-sight-channel"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Fire Nova",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The spell requires your active Fire totem. Use its ordinary button after deliberately placing one; no automatic totem detection, GCD chaining, or retired Fire Nova Totem name."
        },
        {
          "ability_name": "Fire Resistance Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-resistance-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Flame Shock",
          "disposition": "macro",
          "macro_ids": [
            "shaman-shock-choice",
            "shaman-hybrid-lesser-wave-flame-shock"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Flametongue Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-fire-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Flametongue Weapon",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal learned weapon imbue action. Equipment hand, replacement and confirmation behavior need client proof; no guessed item ID or slot-enchant automation. Inspect current main-hand/totem interactions before replacing an imbue."
        },
        {
          "ability_name": "Frost Resistance Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-resistance-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Frost Shock",
          "disposition": "macro",
          "macro_ids": [
            "shaman-shock-choice",
            "shaman-hybrid-riptide-frost-shock"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Frostbrand Weapon",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal learned weapon imbue action. Equipment hand, replacement and confirmation behavior need client proof; no guessed item ID or slot-enchant automation. Inspect current main-hand/totem interactions before replacing an imbue."
        },
        {
          "ability_name": "Ghost Wolf",
          "disposition": "macro",
          "macro_ids": [
            "shaman-ghost-wolf-control"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Grace of Air Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-air-buff-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Grounding Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-air-defense-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Healing Stream Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-water-restoration-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Healing Wave",
          "disposition": "macro",
          "macro_ids": [
            "shaman-healing-wave-swiftness",
            "shaman-hybrid-healing-wave-lightning-bolt"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Lava Burst",
          "disposition": "macro",
          "macro_ids": [
            "shaman-lava-burst-mouseover"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Lesser Healing Wave",
          "disposition": "macro",
          "macro_ids": [
            "shaman-lesser-healing-wave",
            "shaman-hybrid-lesser-wave-flame-shock"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Lightning Bolt",
          "disposition": "macro",
          "macro_ids": [
            "shaman-lightning-choice",
            "shaman-hybrid-healing-wave-lightning-bolt"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Lightning Shield",
          "disposition": "macro",
          "macro_ids": [
            "shaman-shield-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Magma Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-fire-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Mana Spring Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-water-restoration-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Mana Tide Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-water-restoration-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Nature Resistance Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-resistance-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Nature's Swiftness",
          "disposition": "macro",
          "macro_ids": [
            "shaman-healing-wave-swiftness"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Poison Cleansing Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-cleansing-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Purge",
          "disposition": "macro",
          "macro_ids": [
            "shaman-purge-mouseover"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Rage of the Farseer",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Active Enhancement talent: use its standalone cooldown button deliberately. The current source grants attack speed, not spellcasting speed. A cast-only wrapper adds no value."
        },
        {
          "ability_name": "Reincarnation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Reincarnation is a passive self-resurrection capability in the source. It requires an Ankh and the death interaction; no /cast resurrection macro is inferred."
        },
        {
          "ability_name": "Riptide",
          "disposition": "macro",
          "macro_ids": [
            "shaman-riptide-mouseover",
            "shaman-hybrid-riptide-frost-shock"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action. Hybrid follow-up: optional friendly-first healing/damage pair in the added IDs; fixed spell positions, explicit self modifier and selected hostile target. Research-supported, not client tested."
        },
        {
          "ability_name": "Rockbiter Weapon",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal learned weapon imbue action. Equipment hand, replacement and confirmation behavior need client proof; no guessed item ID or slot-enchant automation. Rockbiter changes threat and interacts with Spirit Weapons; choose it deliberately."
        },
        {
          "ability_name": "Searing Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-fire-totem-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Sentry Totem",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal scouting action and manual buff interaction control its viewpoint. No camera automation or unsupported visibility toggle is inferred."
        },
        {
          "ability_name": "Stoneclaw Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-earth-control-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Stoneskin Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-earth-buff-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Stormstrike",
          "disposition": "macro",
          "macro_ids": [
            "shaman-stormstrike-attack"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Strength of Earth Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-earth-buff-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Totemic Projection",
          "disposition": "macro",
          "macro_ids": [
            "shaman-totem-move-recall"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Totemic Recall",
          "disposition": "macro",
          "macro_ids": [
            "shaman-totem-move-recall"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Tremor Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-earth-control-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Water Breathing",
          "disposition": "macro",
          "macro_ids": [
            "shaman-water-breathing-mouseover"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Water Shield",
          "disposition": "macro",
          "macro_ids": [
            "shaman-shield-choice"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Water Walking",
          "disposition": "macro",
          "macro_ids": [
            "shaman-water-walking-control"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Windfury Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-air-buff-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Windfury Weapon",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal learned weapon imbue action. Equipment hand, replacement and confirmation behavior need client proof; no guessed item ID or slot-enchant automation. Inspect current main-hand/totem interactions before replacing an imbue."
        },
        {
          "ability_name": "Windwall Totem",
          "disposition": "macro",
          "macro_ids": [
            "shaman-air-defense-totems"
          ],
          "reason": "Explicit target, interrupt, modifier, aura cancellation, channel guard or totem selection in the listed canonical macros; player decides every action."
        },
        {
          "ability_name": "Convection",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 1, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Concussion",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 1, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Warding",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Reverberation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 2, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Call of Flame",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Devastation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 3, up to 1 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Alacrity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 3, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Improved Fire Nova",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 4, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Eye of the Storm",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 4, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Call of Thunder",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 4, up to 1 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Reach",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 5, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Lightning Overload",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 5, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Earthbound",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 5, up to 1 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Fury",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Elemental tier 6, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Earth's Grasp",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 1, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Thundering Strikes",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 1, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Ancestral Knowledge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 1, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Guardian Totems",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 2, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Mental Dexterity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Improved Ghost Wolf",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 2, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Improved Lightning Shield",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Elemental Weapons",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 3, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Shamanistic Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 3, up to 1 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Anticipation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 3, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Toughness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 4, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Flurry",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 4, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Spirit Weapons",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 5, up to 1 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Mental Quickness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 5, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Improved Stormstrike",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 5, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Maelstrom Weapon",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Enhancement tier 6, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Improved Healing Wave",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 1, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Totemic Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 1, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Mindfulness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Natural Grace",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 2, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Tidal Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 2, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Improved Reincarnation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 2, up to 2 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Ancestral Healing",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 3, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Healing Focus",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 3, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Tidal Mastery",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 4, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Restorative Totems",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 4, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Healing Way",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 5, up to 3 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Purification",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Restoration tier 6, up to 5 ranks. Passive talent changes spell behavior; actual valid allocation is required. Never cast or detect this talent as an automated action."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General Attack entry has no sourced spell ID or complete acquisition/equipment metadata. The current Stormstrike macro attempts only the learned ability, without a separate attack-start command or guessed Attack spell. Native attack behavior remains a client-test question."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive entry; no separate cast macro."
        },
        {
          "ability_name": "Block",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive entry; no separate cast macro."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive entry; no separate cast macro."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General passive entry; no separate cast macro."
        },
        {
          "ability_name": "Fire Nova Totem",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "Source lists this retired name. Current Fire Nova operates around an active Fire totem; do not publish an obsolete cast."
        },
        {
          "ability_name": "Tranquil Air Totem",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "September 24 notes mention the buff, but the refreshed spellbook inventory has no current name/ID/level entry. Do not infer a cast or icon until acquisition and identifier are sourced."
        }
      ]
    },
    {
      "slug": "warlock",
      "name": "Warlock",
      "decisions": [
        {
          "ability_name": "Amplify Curse",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use its standalone cooldown button, then choose and cast a Curse separately; no off-GCD/GCD chaining assumption."
        },
        {
          "ability_name": "Bane of Agony",
          "disposition": "macro",
          "macro_ids": [
            "warlock-bane-agony-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Bane of Doom",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Level-60 non-player-only Bane with possible Doomguard outcome; deliberate ordinary targeting is appropriate."
        },
        {
          "ability_name": "Bane of Havoc",
          "disposition": "macro",
          "macro_ids": [
            "warlock-bane-havoc-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Banish",
          "disposition": "macro",
          "macro_ids": [
            "warlock-banish-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Blood Pact",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Conflagrate",
          "disposition": "macro",
          "macro_ids": [
            "warlock-conflagrate-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Consume Shadows",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Corruption",
          "disposition": "macro",
          "macro_ids": [
            "warlock-corruption-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Create Firestone",
          "disposition": "macro",
          "macro_ids": [
            "warlock-create-stone-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Create Healthstone",
          "disposition": "macro",
          "macro_ids": [
            "warlock-create-stone-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Create Soulstone",
          "disposition": "macro",
          "macro_ids": [
            "warlock-create-stone-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Create Spellstone",
          "disposition": "macro",
          "macro_ids": [
            "warlock-create-stone-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Curse of Exhaustion",
          "disposition": "macro",
          "macro_ids": [
            "warlock-curse-exhaustion-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Curse of Recklessness",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Its enemy-side effects require deliberate judgment; a normal targeted button avoids unsafe automatic curse selection."
        },
        {
          "ability_name": "Curse of Tongues",
          "disposition": "macro",
          "macro_ids": [
            "warlock-curse-tongues-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Curse of Weakness",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal targeted Curse binding; applying it can replace another Curse."
        },
        {
          "ability_name": "Curse of the Elements",
          "disposition": "macro",
          "macro_ids": [
            "warlock-curse-elements-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Death Coil",
          "disposition": "macro",
          "macro_ids": [
            "warlock-death-coil-emergency"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Demon Armor",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self armor action; do not choose armor automatically."
        },
        {
          "ability_name": "Demon Skin",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self armor action while levelling."
        },
        {
          "ability_name": "Demonic Sacrifice",
          "disposition": "macro",
          "macro_ids": [
            "warlock-demonic-sacrifice-deliberate"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Detect Invisibility",
          "disposition": "macro",
          "macro_ids": [
            "warlock-detect-invisibility-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Devour Magic",
          "disposition": "macro",
          "macro_ids": [
            "warlock-devour-magic-dual",
            "warlock-hybrid-devour-magic"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Drain Life",
          "disposition": "macro",
          "macro_ids": [
            "warlock-drain-life-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Drain Mana",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "The normal channel button is sufficient for occasional enemy-resource utility."
        },
        {
          "ability_name": "Drain Soul",
          "disposition": "macro",
          "macro_ids": [
            "warlock-drain-soul-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Eye of Kilrogg",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Manual scouting/control action, not an automated navigation macro."
        },
        {
          "ability_name": "Fear",
          "disposition": "macro",
          "macro_ids": [
            "warlock-fear-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Fel Domination",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use its standalone cooldown button before a separately selected summon. Summon replacement must remain deliberate."
        },
        {
          "ability_name": "Fire Shield",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Firebolt",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Health Funnel",
          "disposition": "macro",
          "macro_ids": [
            "warlock-health-funnel-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Hellfire",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Caster-centered channel with health risk; keep a deliberate ordinary button and manually cancel when unsafe."
        },
        {
          "ability_name": "Howl of Terror",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Area control with a cast time in the source; a normal button avoids claiming instant panic protection."
        },
        {
          "ability_name": "Immolate",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal targeted damage binding; the macro must not automatically inspect, refresh or choose a DoT."
        },
        {
          "ability_name": "Incinerate",
          "disposition": "macro",
          "macro_ids": [
            "warlock-incinerate-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Inferno",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Reagent and ground-target summon with consequential control behavior; use the normal reticle deliberately."
        },
        {
          "ability_name": "Lash of Pain",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Lesser Invisibility",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Life Tap",
          "disposition": "macro",
          "macro_ids": [
            "warlock-life-tap-rank-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Paranoia",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Phase Shift",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Rain of Fire",
          "disposition": "macro",
          "macro_ids": [
            "warlock-rain-fire-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Ritual of Doom",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Participant, reagent and summon-control requirements call for manual use, not a convenience macro."
        },
        {
          "ability_name": "Ritual of Summoning",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Requires the game's group/participant conditions and a shard; normal targeted spell is sufficient."
        },
        {
          "ability_name": "Sacrifice",
          "disposition": "macro",
          "macro_ids": [
            "warlock-voidwalker-sacrifice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Searing Pain",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal targeted damage binding; no automatic threat decision."
        },
        {
          "ability_name": "Seduction",
          "disposition": "macro",
          "macro_ids": [
            "warlock-seduction-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Sense Demons",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal tracking action; no automated detection or targeting."
        },
        {
          "ability_name": "Shadow Bolt",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal damage binding; no automatic pet targeting or rotation required."
        },
        {
          "ability_name": "Shadow Ward",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Ordinary self defensive action; do not select it based on incoming damage automatically."
        },
        {
          "ability_name": "Shadowburn",
          "disposition": "macro",
          "macro_ids": [
            "warlock-shadowburn-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Siphon Life",
          "disposition": "macro",
          "macro_ids": [
            "warlock-siphon-life-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Soothing Kiss",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Soul Fire",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal shard-spending damage binding; no automated proc or opener choice."
        },
        {
          "ability_name": "Soul Link",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the normal learned talent button with an eligible demon; no redundant wrapper or automatic recast claim."
        },
        {
          "ability_name": "Spell Lock",
          "disposition": "macro",
          "macro_ids": [
            "warlock-spell-lock-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Subjugate Demon",
          "disposition": "macro",
          "macro_ids": [
            "warlock-subjugate-demon-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Suffering",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Summon Felhunter",
          "disposition": "macro",
          "macro_ids": [
            "warlock-summon-demon-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Summon Imp",
          "disposition": "macro",
          "macro_ids": [
            "warlock-summon-demon-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Summon Incubus",
          "disposition": "macro",
          "macro_ids": [
            "warlock-summon-demon-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Summon Succubus",
          "disposition": "macro",
          "macro_ids": [
            "warlock-summon-demon-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Summon Voidwalker",
          "disposition": "macro",
          "macro_ids": [
            "warlock-summon-demon-choice"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Tainted Blood",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Torment",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use the trained demon ability on its normal pet bar; source demon identity, pet level, mana and acquisition must be checked. A repeated simple cast wrapper is unnecessary."
        },
        {
          "ability_name": "Unending Breath",
          "disposition": "macro",
          "macro_ids": [
            "warlock-unending-breath-mouseover"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Wrack",
          "disposition": "macro",
          "macro_ids": [
            "warlock-wrack-channel"
          ],
          "reason": "Explicit player-selected targeting, channel guard, rank, modifier, preparation or pet control in the listed canonical macros."
        },
        {
          "ability_name": "Improved Life Tap",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Suppression",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Corruption",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Malediction",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Soul Harvesting",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Drains",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Bane of Agony",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 3, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Fel Concentration",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Pandemic",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Malevolence",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 4, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Nightfall",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Soul Siphon",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 5, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shadow Mastery",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Affliction talent, tier 6, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Health Funnel",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Imp",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 1, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Demonic Embrace",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Unholy Power",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Demonic Aegis",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Voidwalker",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Fel Vitality",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Demonic Energies",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 2, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Sayaad",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 3, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation. Explicitly corroborates baseline Seduction, Lash of Pain, Soothing Kiss and Lesser Invisibility for both Succubus and Incubus; the talent is not an acquisition prerequisite."
        },
        {
          "ability_name": "Master Summoner",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 3, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Decimation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 4, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Demonic Brand",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Felhunter",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 5, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Demonic Knowledge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 5, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Master Demonologist",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 6, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Demonic Pact",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Demonology talent, tier 7, up to 1 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation. Changes Demonic Sacrifice persistence: summoning a different demon preserves it; resummoning the sacrificed type cancels it."
        },
        {
          "ability_name": "Destructive Reach",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 1, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Improved Shadow Bolt",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Bane",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 1, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Molten Skin",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Cataclysm",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 2, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Aftermath",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 2, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Ruin",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 3, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Intensity",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Agonizing Flames",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 4, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Pyroclasm",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 5, up to 2 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Fire and Brimstone",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 5, up to 3 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation."
        },
        {
          "ability_name": "Shadow and Flame",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Destruction talent, tier 6, up to 5 ranks. Passive modification; allocate actual ranks in a valid build. It is not a castable macro action and does not justify proc/rotation automation. Can prevent Conflagrate consuming Immolate and refund Shadowburn shards; actual ranks matter, and no proc detection is added."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Shoot",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General entry without complete sourced spell ID, learning and equipment/acquisition requirements. Do not invent a wand/attack macro from memory."
        }
      ]
    },
    {
      "slug": "warrior",
      "name": "Warrior",
      "decisions": [
        {
          "ability_name": "Battle Shout",
          "disposition": "macro",
          "macro_ids": [
            "warrior-shouts"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Battle Stance",
          "disposition": "macro",
          "macro_ids": [
            "warrior-stances"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Berserker Rage",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Self cooldown already works on a normal action button; confirm Berserker Stance and the learned spell. No duplicate single-cast macro is needed."
        },
        {
          "ability_name": "Berserker Stance",
          "disposition": "macro",
          "macro_ids": [
            "warrior-stances"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Bloodrage",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal action button preserves an explicit decision to trade health for rage and enter combat; do not bundle it into every attack."
        },
        {
          "ability_name": "Bloodthirst",
          "disposition": "macro",
          "macro_ids": [
            "warrior-bloodthirst"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Challenging Shout",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal action button preserves deliberate use of a nearby area attention cooldown; it needs no invented targeting order."
        },
        {
          "ability_name": "Charge",
          "disposition": "macro",
          "macro_ids": [
            "warrior-charge"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Cleave",
          "disposition": "macro",
          "macro_ids": [
            "warrior-heroic-cleave"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Concussion Blow",
          "disposition": "macro",
          "macro_ids": [
            "warrior-concussion-blow"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Death Wish",
          "disposition": "macro",
          "macro_ids": [
            "warrior-death-wish"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Defensive Stance",
          "disposition": "macro",
          "macro_ids": [
            "warrior-stances"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Demoralizing Shout",
          "disposition": "macro",
          "macro_ids": [
            "warrior-shouts"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Disarm",
          "disposition": "macro",
          "macro_ids": [
            "warrior-disarm"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Execute",
          "disposition": "macro",
          "macro_ids": [
            "warrior-execute"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Hamstring",
          "disposition": "macro",
          "macro_ids": [
            "warrior-hamstring"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Heroic Strike",
          "disposition": "macro",
          "macro_ids": [
            "warrior-heroic-cleave"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Intercept",
          "disposition": "macro",
          "macro_ids": [
            "warrior-intercept"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Intimidating Shout",
          "disposition": "macro",
          "macro_ids": [
            "warrior-intimidating-shout"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Last Stand",
          "disposition": "macro",
          "macro_ids": [
            "warrior-last-stand"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Mocking Blow",
          "disposition": "macro",
          "macro_ids": [
            "warrior-mocking-blow"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Mortal Strike",
          "disposition": "macro",
          "macro_ids": [
            "warrior-mortal-strike"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Overpower",
          "disposition": "macro",
          "macro_ids": [
            "warrior-overpower"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Piercing Howl",
          "disposition": "macro",
          "macro_ids": [
            "warrior-piercing-howl"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Pummel",
          "disposition": "macro",
          "macro_ids": [
            "warrior-pummel"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Recklessness",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Use a deliberate normal cooldown button in Berserker Stance; damage-taken tradeoff and long cooldown should not be hidden in an attack macro."
        },
        {
          "ability_name": "Rend",
          "disposition": "macro",
          "macro_ids": [
            "warrior-rend"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Retaliation",
          "disposition": "spellbook-action",
          "macro_ids": [],
          "reason": "Normal cooldown button in Battle Stance; frontal melee retaliation needs player judgement rather than an automatic combat decision."
        },
        {
          "ability_name": "Revenge",
          "disposition": "macro",
          "macro_ids": [
            "warrior-revenge"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Shield Bash",
          "disposition": "macro",
          "macro_ids": [
            "warrior-shield-bash"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Shield Block",
          "disposition": "macro",
          "macro_ids": [
            "warrior-shield-defence"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Shield Slam",
          "disposition": "macro",
          "macro_ids": [
            "warrior-shield-slam"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Shield Wall",
          "disposition": "macro",
          "macro_ids": [
            "warrior-shield-defence"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Slam",
          "disposition": "macro",
          "macro_ids": [
            "warrior-slam"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Spearing Strike",
          "disposition": "macro",
          "macro_ids": [
            "warrior-spearing-strike"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Sunder Armor",
          "disposition": "macro",
          "macro_ids": [
            "warrior-sunder-armor"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Sweeping Strikes",
          "disposition": "macro",
          "macro_ids": [
            "warrior-sweeping-strikes"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Tactical Mastery",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Source identifies a trained rage-retention passive. Never issue /cast for it."
        },
        {
          "ability_name": "Taunt",
          "disposition": "macro",
          "macro_ids": [
            "warrior-taunt"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Thunder Clap",
          "disposition": "macro",
          "macro_ids": [
            "warrior-area-attacks"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Victory Rush",
          "disposition": "macro",
          "macro_ids": [
            "warrior-victory-rush"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Whirlwind",
          "disposition": "macro",
          "macro_ids": [
            "warrior-area-attacks"
          ],
          "reason": "Covered by the listed researched key(s); only an actual learned spell plus the declared level/talent and other gates establishes eligibility."
        },
        {
          "ability_name": "Improved Heroic Strike",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Deflection",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Rend",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Charge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Tactical Mastery",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Overpower",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Anger Management",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Deep Wounds",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Two-Handed Weapon Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Impale",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Bloodthrill",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Weaponmaster",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Slam",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Hamstring",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Arms passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Booming Voice",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Cruelty",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Iron Will",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Unbridled Wrath",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Cleave",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Blood Craze",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Boundless Rage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Dual Wield Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Raging Blows",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Enrage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Execute",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Precision",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Intercept",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Berserker Rage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Flurry",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Fury passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Shield Specialization",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Anticipation",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Bloodrage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Toughness",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Thunder Clap",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Master of Defense",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Revenge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Defiance",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Sunder Armor",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Disarm",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Vanguard",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent permits Charge in Defensive Stance; the Charge macro requirements include this exception. No separate cast command or in-combat Charge permission."
        },
        {
          "ability_name": "Improved Shield Wall",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Improved Shield Bash",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Bastion",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Focused Rage",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "Protection passive talent; changes other actions or stats and is not an independently castable macro ability."
        },
        {
          "ability_name": "Attack",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Throw",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Shoot Bow",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Shoot Crossbow",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Shoot Gun",
          "disposition": "deferred",
          "macro_ids": [],
          "reason": "General-tab source capture has unknown acquisition level and incomplete item/weapon or training requirements. Keep the ordinary action available; no specialised macro or unlock claim is fabricated."
        },
        {
          "ability_name": "Dual Wield",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Armor Proficiency",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Block",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Dodge",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Parry",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        },
        {
          "ability_name": "Languages",
          "disposition": "passive",
          "macro_ids": [],
          "reason": "General-tab passive; no cast command."
        }
      ]
    }
  ]
}
