# SpellSmasher changelog

All notable addon releases. Newest first.

## 4.3.8 — 2026-08-07

- **All-class hero-honest packs:** audited every Method + Engine order for
  cross-hero spell bleed (alt clones / dual-path mash lists). High-confidence
  hero-exclusive castables stripped from the wrong hero:
  Black Arrow/Wailing (Dark Ranger), Moonlight Chakram (Sentinel),
  Reaver's Glaive/Soul Carver (Aldrachi), Collapsing Star (Annihilator),
  Vampiric Strike (San'layn), Demolish (Colossus), Thunder Blast (Mountain Thane),
  Celestial Conduit (Conduit), Hammer of Light (Templar), Void Blast (Voidweaver),
  Surging Totem (Totemic), Mass Disintegrate/Eruption (Scalecommander),
  Chrono Flames (Chronowarden), Engulf (Flameshaper), Wither/Malevolence (Hellcaller),
  Dark Harvest (Soul Harvester), Ravage (Druid of the Claw), Force of Nature (Keeper).
  Tools: `addon/tools/hero_exclusive_spells.py`, `audit-fix-hero-honest.py --apply`,
  `verify-hero-honest.py` (0 bleed after fix).

## 4.3.7 — 2026-08-07

- **Hero-honest Pack Leader BM:** removed **Black Arrow** / **Wailing Arrow** from
  Pack Leader Method + Engine packs (those are **Dark Ranger** only — not on the
  Pack Leader hero tree). Dark Ranger BM/MM packs keep them. Sentinel MM no longer
  inherits DR arrows from the clone. Matches product rule: hero chip = that path’s
  castables, not dual-path bleed.

## 4.3.6 — 2026-08-07

- **No passives on mash lists (hardened CastGuard):**
  - Exact-name passive blocklist (Feed the Demon, Fiery Demise, hero talent passives, …).
  - Live client check `C_Spell.IsSpellPassive` / `IsPassiveSpell` when stamping IDs.
  - Rebuild/compile drop pure passives; clear wrong passive spellId stamps on castable names.
- **SpellIDMap pack-step fixes:** bulk map preferred higher IDs that were often
  passive/proc ranks sharing English names (e.g. Arcane Blast, Bear Form, Blackout Kick,
  Fiery Brand, Holy Shock). Castable player-button IDs restored for Method/Engine steps.
- Stripped passive talent names from Method `recommended` checklists (not cast steps).

## 4.3.5 — 2026-08-06

- **Kill Shot tooltip correct by spec:** BM/MM use spell **53351** (ranged weapon);
  Survival uses **320976** (main-hand / 2H melee). Map was picking the higher ID
  (Survival), so BM/MM packs showed a 2H weapon requirement. Spec-aware SpellIDMap.

## 4.3.4 — 2026-08-06

- **Fix question-mark spell icons:** name-only `C_Spell` lookup fails for most
  other-class pack spells. Added `SpellIDMap.lua` (~10k English name→spellID from
  site `spell-ids.js` + full Method/Engine step coverage). Resolve by **spell ID**
  first (always works), stamp `spellId` on new/rebuild steps, slug path fallback.
  Hover tooltips use `SetSpellByID` when ID known.

## 4.3.3 — 2026-08-06

- Fix tour crash: `ThemeishBtn` shadowed color arg `b` with the button frame, so
  `SetBackdropColor` received a Button (Blizzard Backdrop.lua SetVertexColor error).

## 4.3.2 — 2026-08-06

- **Spell icons + hover tooltips on sequence rows:** Edit list shows ability icons
  and mouseover uses Blizzard `GameTooltip:SetSpellByID` (full spell text) when the
  client knows the spell; otherwise name + macro. Subline shows cast/range when known.
- Fix: deploy path was still 4.2.4 for some installs — use deploy-to-wow.ps1 + `/reload`.

## 4.3.1 — 2026-08-06

- **Spell icons on sequence rows** (Edit list): each step shows the game ability
  icon next to the name, same resolution path as the live mash-button icon
  (`C_Spell.GetSpellTexture` / `C_Spell.GetSpellInfo`, name from label or macro).
  Unknown spells fall back to the question-mark icon.

## 4.3.0 — 2026-08-06

- **Theme-parity spotlight tour** (`SSM_Tour.lua`): dim cutout + green glow on real
  controls, 12-step full happy path (List > New > Import > sample pack > Edit >
  modes > rows > helpers > Apply talents > bind/mash > done).
- Help tab = **Tutorial** (flashes until finish/skip) then quiet **Replay**; versioned
  `coachTourVersion` re-flashes when tour content bumps (like site tour-v20).
- Auto sample Method pack when list empty (out of combat) so Edit is never blank mid-tour.
- `/ssm help` and Help button open the spotlight tour. Esc / Skip / Finish mark done.

## 4.2.4 — 2026-08-06

- **Cast-only lists:** pure talent passives cannot be added, rebuilt, exported, or mashed.
  Shared `SSM_CastGuard.lua` (mirrors site `cast-guard.js`) blocks passive names, refuses to
  invent `/cast` for them, and strips them on compile/create/export. Sequences keep real
  `/cast` and `/use` abilities only.

## 4.2.3 — 2026-08-06

- **Read-only level honesty (no pack mutation):** Export status/chat notes when a matching
  pack’s stamped `characterLevel` differs from your live level — spell list and pack level
  stay as stored; level-legal lists remain on spellsmasher.com.
- New pack panel, Create/Export tooltips, Apply/Copy tips, and coach Steps 3 / 9 / 10 spell out:
  level from this character on Create; full Method/Engine starters (not auto-trimmed); talent
  Apply/Copy scale points only.

## 4.2.2 — 2026-08-05

- **Copy talents under max level (e.g. 76):** no longer pastes the full Method CUk.
  That left free points after Talents → Import. Copy now stages Method ranks + fills
  leftover free points, builds a points-valid string, then rolls back so your tree is
  unchanged. Paste that string in N → Import. Prefer **Apply** for one-click still.
- Level 90 / **Mine** (live) Copy still uses the pack/live string as before.

## 4.2.1 — 2026-08-04

- Mash key **1–0** and bottom helpers (**AA / RT / DEF / Shift**) clearly show
  the chosen / On state (green border + green-tinted button face).

## 4.2.0 — 2026-08-04 (CurseForge UI refresh)

**Extensive in-game UI update** — window chrome, art, and Edit layout overhauled
while product rules stay the same (one mash list, Apply overwrites current N
loadout, SpellSmasher brand only in public text).

### Look & feel
- **Dialog metal shell** with SpellSmasher green edge (not flat web panels)
- **Panel background art** from brand S logo (`Media/panel-bg`)
- **Header logo** (`Media/logo`) top-left; title + version + tagline **centered**
- **Classic Blizzard buttons** (`UIPanelButtonTemplate` / close button)
- Brand colors on labels (green / blue / gold), not neon web fills
- Esc closes the main window (`UISpecialFrames`)

### Edit tab — spell list
- **Parchment sequence rows** (`Media/seqbar`) with worn dark edges
- Readable black ink on paper; selected row soft green wash
- Step **numbers colored by mode** (Once = gold, In order / Rev Pri = blue,
  Priority = green) — no left accent lines
- SPELL LIST header fits width (count + selected name, truncates cleanly)
- Shorter mode legend line under the list header

### Edit tab — talents
- Full-width **loadout string** under the Method loadout hint
- Action buttons **under** the string: Best · Method · **Mine** · Apply · Copy
- “From me” renamed to **Mine**

### Media (shipped)
- `Media/logo` — header brand mark  
- `Media/panel-bg` — main window wallpaper  
- `Media/seqbar` — spell-row parchment  

### Unchanged product
- One mash list; Priority triangle / Rev Pri / Once / In order  
- Apply overwrites the loadout already selected in N (no new name)  
- Copy → Import still creates a new loadout name  
- Pack format `!SpellSmasher!` site parity  

---

## 4.1.x — 2026-08-04 (UI iteration)

Incremental UI work leading to 4.2.0 (parchment rows, logo, Mine, layout).

## 4.0.89 — 2026-08-04

- Sequence bars: early parchment experiments (superseded by 4.2.0 `seqbar`).

## 4.0.88 — 2026-08-04

- Sequence rows use a **real parchment page image** (`Media/seq-page.png`)
  matched to Adventure Guide paper pages (not flat gold achievement bars).
- Black ink text kept for readability; selected row soft green wash on paper.

## 4.0.87 — 2026-08-04

- Sequence rows: back to **4.0.85 light parchment/leather** look.
- Text only fix: pure **black ink** + light halo shadow (was muddy brown).

## 4.0.86 — 2026-08-04

- Dark leather experiment (reverted look in 4.0.87; kept as reference only).

## 4.0.85 — 2026-08-04

- **Edit sequence blocks:** first leather pass (replaced readability in 4.0.86).

## 4.0.84 — 2026-08-04

- **Classic WoW buttons:** every themed control uses `UIPanelButtonTemplate`
  (old stone Options/OK look). Close uses `UIPanelCloseButton`.
  Brand colors only on label text (green / blue / red), not custom fills.

## 4.0.83 — 2026-08-04

- **Real image panel background:** uses `Media/panel-bg.png` (your S logo art)
  stretched inside the dialog — no more color-blob “swirl” layers.
- Header still uses `Media/brand-mark.png`.

## 4.0.82 — 2026-08-04

- (Replaced in 4.0.83) Experimental multi-layer color washes — looked bad.

## 4.0.81 — 2026-08-04

- **Real WoW backdrops on everything:** no more solid SoftFill covering textures.
  Cards, buttons, tabs, rows, bars, edit wells, coach, and popups use
  `UI-Tooltip-*` / `UI-DialogBox-*` backdrops (same family as game UI).
- Brand colors only **tint** the real textures (green/blue borders, navy wash).

## 4.0.80 — 2026-08-04

- **UI chrome overhaul (branded WoW look):** outer dialog metal frame, tooltip-edge
  panels/cards/buttons, header strip with **S** mark, Esc-to-close.
- Structure uses Blizzard edge textures; **colors stay SpellSmasher** navy / green
  `#3dd68c` / blue `#6c8cff` (not generic gold shell).
- Click feedback sound on themed buttons; mash button chrome uses panel edge.
- Developed in Desktop `SpellSmasherUpdate` working tree.

## 4.0.79 — 2026-08-03

- Docs only: coach, Apply tip, and create-pack messages state clearly that
  **Apply overwrites the loadout already selected in N** and does not create a new named loadout.
  Copy → Import remains the path for a new loadout name.

## 4.0.78 — 2026-08-03

- Screen recording fix: after 60 buys Blizzard shows red **"spend all talent points"**
  with grey **Apply Changes** even when headers show 0/0. We no longer claim "committed"
  unless staged work is actually clear; use currency free budget + CanChangeTalents.
- If purchase stages but cannot commit: **Rollback** → **ImportLoadout(entries)** fallback.
- CommitConfig tries both no-arg and configID forms.

## 4.0.77 — 2026-08-03

- After Method buys: aggressively spend **leftover free points** (last choice nodes)
  and re-Commit until clean. Fixes stuck yellow **Apply Changes** when Spec shows 1 free.
- Clearer chat if N still needs a final Apply Changes click.

## 4.0.76 — 2026-08-03

- Fix Apply **0 buys** (level 70 screenshot): `CanPurchaseRank` needs
  `(configID, nodeID, nodeEntryID)` — 2-arg call always failed and blocked every
  PurchaseRank. Now passes entryID; if gate unknown, tries purchase directly.
- If multipass still buys 0: fallback to proven **ImportLoadout(entries)** path.

## 4.0.75 — 2026-08-02

- **Apply restored (purchase path).** One click: auto Best/Method if needed, then
  ResetTree + multipass CanPurchaseRank/SetSelection along Method entries for **your**
  point budget. Leftover free points spent so Commit is not blocked. No unique-name
  ImportLoadout spam under max level.
- Level max / From me: full ImportLoadout path unchanged.
- Copy remains fallback if 0 purchases.

## 4.0.74 — 2026-08-02

- **Removed talent Apply button.** Auto ImportLoadout was too brittle across levels and wasted time.
  Talents are **Copy only**: Best/Method/From me  >  **Copy**  >  **Ctrl+C**  >  press **N**  >  Import  >  paste.
- Coach Step 9 and talent button tips updated to match. No more auto-apply thrashing.

## 4.0.71 — 2026-08-02

- Fix List after Delete: deleted packs stayed visible until toggling This class / All packs.
  Cause: list rows are sparse under class filter; hide used `ipairs` which stops at the first hole. Now uses `pairs` and drops orphan row indices.

## 4.0.73 — 2026-08-02

- Re-Apply under 90: same **ImportLoadout entries** path that worked once (75/75 at 70), but with a
  **unique loadout name every click** (`SSM Pack 1`, `SSM Pack 2`, …) so re-Apply is not blocked by
  an existing name/config. Requires 0 free points. Delete old SSM loadouts in N if at max.

## 4.0.72 — 2026-08-02

- TLM ResetTree purchase attempt (superseded if ImportLoadout unique-name is more reliable).

## 4.0.70 — 2026-08-02

- First working Level 70 Apply via ImportLoadout 75/75 (Blizzard entry decode).

## 4.0.69 — 2026-08-02

- Temporary honest stub under 90 (superseded by 4.0.70 Blizzard-path import).

## 4.0.67 — 2026-08-02

- Refund/commit experiments (superseded by 4.0.69 honest under-90 behavior).

## 4.0.66 — 2026-08-02

- Tried spend-before-reset; ResetTree still hit Blizzard spend-all popup for some players.

## 4.0.64 — 2026-08-02

- Apply under 90 **never calls ImportLoadout**.
- Under 90: reset → buy Method ranks → spend leftovers → CommitConfig only.

## 4.0.63 — 2026-08-02

- Attempted spend-all before ImportLoadout; still blocked by Blizzard unspent-point rule on import.

## 4.0.62 — 2026-08-02

- Apply under 90 uses **From me proof**: snapshot live tree → fill Method only via CanPurchaseRank →
  **GenerateImportString** (points-valid) → ImportLoadout that string (same as paste worked at 70).
- Never imports full Method CUk under 90. On Method-fill failure, restores snapshot.
- Apply button enabled from level 10+ (not grey until 80).

## 4.0.61 — 2026-08-02

- Apply greyed under 80 (superseded by 4.0.62 From-me-style path for all talent-tree levels).

## 4.0.60 — 2026-08-02

- Restored **level 80 Apply path** (4.0.56): decode Method CUk → reset → multi-pass **CanPurchaseRank only** → commit → name loadout.
- Still **off**: ImportLoadout(entries) + binary-search (crash-prone 4.0.57).
- **80–89** Method Apply = partial purchase. **90** = full import. **Under 80** = message (From me / hand pick).

## 4.0.59 — 2026-08-02

- **Emergency:** disabled under-90 auto talent spend after ACCESS_VIOLATION report.
- Superseded by 4.0.60 restore of the quieter level-80 purchase path only.

## 4.0.58 — 2026-08-02

- Apply under 90 auto-runs Best/Method first (no need to remember Best), then spends your level's points.
- Coach + button tips document: under 90 → Apply (Best optional); 90 → full Apply; From me = live tree only.

## 4.0.57 — 2026-08-02

- Apply uses **your live talent point budget at any level** (70, 80, 89…), not a fixed 80–90 assumption.
- Reads free points from Blizzard currency APIs, greedily keeps Method nodes that fit, one named ImportLoadout of only those entries.
- Screenshot fix: level 70 was detected but 0 nodes spent — now spends what level 70 actually has.

## 4.0.56 — 2026-08-02

- Partial Apply quieter: only PurchaseRank when CanPurchaseRank (stops "Unable to learn talent" spam).
- Partial Apply names the loadout (e.g. SSM YourPack) via points-valid export of what you actually got.

## 4.0.55 — 2026-08-02

- Fix: under level 90, Apply never calls Blizzard ImportLoadout with the full Method CUk (that was the "must have enough talent points" error).
- Under 90: multi-pass partial purchase only; no Copy/paste of full Method string.
- Level 90 / From me: full import unchanged.

## 4.0.54 — 2026-08-02

- Apply talents is level-aware (Midnight 80-90):
  - Level 90 / From me: full Blizzard loadout import (unchanged).
  - Level 80-89 Method/Best: same Method package, spend only the talent points you have; level up and Apply again for more.
- New SSM_TalentLevel.lua (decode CUk + live purchase). Does not change mash/compile/lists.

## 4.0.53 — 2026-08-02

- Full step-by-step in-game tour (10 steps) walks List, New pack, Import, Edit, modes, tools, helpers, talents, bind/mash.
- Tour docks beside the UI and switches tabs as you go.
- Skip / Off / Finish stop auto-show; Help or `/ssm help` restarts anytime.

## 4.0.52 — 2026-08-02

- Once mode: once per combat (fires, then skipped until leave combat).
- Secure mash stability: do not call unit APIs inside restricted wrap scripts.
- Hero talent paths: two paths per spec; Method + Engine hero keys; pack field `heroTalent`.
- Edit UI: mode group headers and spacing (Once / In order / Priority).
- ASCII-only UI strings; list labels `* ACTIVE` / `* export`.
- Coach + help: Once explained as once per combat; `/reload` after updates is enough.
- Personal License shipped in package; listing metadata (website, email, license).

## 4.0.51 — 2026-08-02

- ASCII-only UI strings (remove Unicode tofu boxes in WoW fonts: middots, arrows, bullets).
- List pack labels use `* ACTIVE` / `* export` instead of broken glyphs.
- Full Personal License + listing package files.

## 4.0.50 — 2026-08-02

- Fix empty-box bullets next to ACTIVE / export on List tab.

## 4.0.49 — 2026-08-02

- In-game coach: Once = per combat explained on Welcome + Modes pages.
- Note that `/reload` is enough after updates (no full game exit required).

## 4.0.48 — 2026-08-02

- **Once mode = once per combat engagement** (skip after fire).
- Resets on leave combat, retarget (new enemy GUID), and recompile.
- Secure skip logic; works in combat for retarget reset.

## 4.0.47 — 2026-08-02

- Theme-style mode group headers + spacing between Once / In order / Priority blocks in Edit.

## 4.0.46 — 2026-08-02

- Coach guide text ASCII-only (fix Welcome empty squares).

## 4.0.45 — 2026-08-02

- Hero talent paths: 2 heroes per spec, Method + Engine packs.
- New pack hero chips; `heroTalent` on pack import/export.
- HeroPaths registry (research-backed Midnight paths).

## 4.0.44 and earlier

- Clean 4.x rewrite: sequence-only mash, priority triangle, reverse priority.
- Method + SpellSmasher Engine rebuild, Method CUk loadouts.
- Import/export `!SpellSmasher!1!…` packs (site parity).
- Easy helpers AA / RT / DEF (default Off).
- In-game multi-page coach (Help / `/ssm help`).
- Talent Apply / Copy, Best for list, From me.
- Loadout-honest product model; one pack from aoeSteps default.
