# SpellSmasher changelog

All notable addon releases. Newest first.

Public / CurseForge copy: player-facing only — no internal tools, scripts, or
dev paths.

## 4.3.40 - 2026-08-11

- **ASCII-only UI text:** tooltips/status no longer use Unicode arrows/dashes
  (e.g. Copy tip ``Ctrl+C > N > Import``; WoW fonts showed tofu boxes after Ctrl+C).
  Match/Tour status strings cleaned the same way.


## 4.3.39 - 2026-08-11

- **Talent row simplified:** **Match talents** + **Copy** only. Removed More and
  advanced Best / Method / Mine / Apply buttons (handlers retired; Match covers
  package + spend + verify). Tour step 10 updated (tour v2).
- Multi-button freeze still available:
  `addon/_backup-talent-ui-multi-button-20260811-114536/`.

## 4.3.38 - 2026-08-11

- **Match talents (one button):** Edit talent row defaults to **Match talents** —
  Method package for the pack → spend on tree (existing Apply path) → **verify**
  intended package nodes via `GetNodeInfo` ranks (not raw CUk string equality).
  Status includes `Verify: N/M (pct)`. Fail → Copy popup for N → Import.
- **More:** toggles Advanced Best / Method / Mine / Apply (old multi-button row).
  Copy stays on the main row. Multi-button freeze:
  `addon/_backup-talent-ui-multi-button-20260811-114536/`.
- Research: `docs/TALENT-MATCH-ONE-BUTTON-API-RESEARCH-2026-08-11.md`.

## 4.3.37 - 2026-08-11

- **Retail 12.1 (Curse of Ula'tek) TOC:** `## Interface: 120100` (was 120007 /
  12.0.7). Compatibility bump only — no gameplay or ORDERS changes. No UnitAura
  path in this addon (12.1 aura API lockdown does not apply to mash/list flow).

## 4.3.36 - 2026-08-10

- **+ Spell inserts under the selected step** (not always at the bottom of the
  list). Selection moves to the new row. Status: `Added X under Y`.

## 4.3.35 - 2026-08-09

- **FULL castable audit (all 240 Method+Engine keys):** every step + recommended
  entry rematched against (1) 12.0 full removals, (2) confirmed passive/non-button
  redesigns, (3) high-confidence hero-exclusive gates. Not removal-list-only.
- **New strips this pass:** Clawing Shadows (Unholy — now passive); Reaper’s Mark
  off non-Deathbringer DK; Templar Strike/Slash off Herald Ret; plus any remaining
  prior-list ghosts. BM already clean of Dire Beast + Bloodshed from 4.3.34.
- **Rematch after apply: 0 illegal hits.** Report:
  `docs/FULL-CASTABLE-AUDIT-2026-08-09.md`

## 4.3.34 - 2026-08-09

- **BM pack castables: drop Dire Beast + Bloodshed.** Midnight BM no longer uses
  Dire Beast as a rotation press (talent/summon package; Rank 0 on your tree if
  not taken). Bloodshed is passive on Bestial Wrath, not a sequential cast.
  Removed from Method + Engine Beast Mastery base / Pack Leader / Dark Ranger
  `steps`, `aoeSteps`, and recommended. Prior illegal purge only hit full-spec
  removals (CotW / Kill Shot) and missed these.

## 4.3.33 - 2026-08-09

- **Static floating-button icon (stop mid-cast taint):** no more 0.4s live poll
  that chased the next mash step with `GetAttribute` + `C_Spell` while you played.
  That path was still hitting “Interface action failed because of an AddOn” /
  cast-bar secret taint ~a minute into casting even after a clean Apply.
  Floating button now shows the **list opener** only, painted on safe OOC events
  (recompile, leave combat / Once reset, bind/show, post-Apply resume). Mash
  sequence is unchanged — only the icon art is static until Blizzard’s secure
  story settles.

## 4.3.32 - 2026-08-09

- **Cast-bar taint on empty tree → starter Apply:** wiping talent loadout names then
  Apply could leave SpellSmasher on the same execution stack as
  `OverlayPlayerCastingBarFrame` (`GetTypeInfo` / secret `barType`). Fix: pause
  floating-icon poll during talent Apply; open Talents (N) and load named
  loadouts on a later frame; defer UI Refresh after Apply; pcall all `C_Spell`
  icon lookups.

## 4.3.31 - 2026-08-09

- **Spec-illegal pack purge (Method + Engine):** removed Midnight-removed castables
  still sitting in ORDERS (Blood Bonestorm/Tombstone, Balance Stellar Flare/Warrior
  of Elune, Guardian Pulverize, Resto Cenarion Ward, BM Call of the Wild/Kill Shot,
  SV Butchery/Fury of the Eagle/Kill Shot, MW Jadefire Stomp, BrM Chi Burst, Shadow
  Void Torrent, Ele Icefury/Liquid Magma/Primordial Wave, Enh Elemental Blast/Ice
  Strike, Resto Sham Cloudburst/Earthen Wall/Healing Surge, Demo Bilescourge Bombers,
  Arms Skullsplitter/Warbreaker, Fury Onslaught).
- **Hero honesty:** WW Invoke Xuen only on Conduit keys; Shadow Mind Flay: Insanity
  kept on Archon only (stripped Voidweaver + Voidweaver-primary base); Destro Immolate
  stripped from Hellcaller + Hellcaller-primary base (Wither path); Ret Hammer of Wrath
  and Arms Apex Heroic Strike dropped as always-on rotation buttons.
- Full audit: `docs/SPEC-ILLEGAL-SPELLS-AUDIT-2026-08-09.md`.

## 4.3.30 - 2026-08-09

- **Midnight hardening pass:** bar placement of the mash macro stays disabled
  (keybind only); compile reports when the list hits the click cap, helpers do not
  fit the 255-char cast, or non-cast steps are dropped.
- **Apply honesty:** shared Method talent packages ask for confirm; Partial Apply
  wording is clearer; **Mine** no longer mis-labels as Method proxy after save.
- **Spell icons / IDs:** castable spell IDs preferred for common name collisions
  (e.g. Execute, Revenge, Multi-Shot); Kill Shot / Ascendance / Metamorphosis and
  more stay class|spec aware where duals matter; Shadow Word: Madness mapped.
- **Locale mash pilot:** when possible, baked `/cast` lines use the client’s
  spellbook name (looked up from spell ID) so non-English clients cast more
  reliably. English play is unchanged.
- **Once / mash model:** list still always advances on press; Once marks used on
  the press that arms it (not only if the cast lands) — tips and guide text say so.

## 4.3.29 - 2026-08-09

- **Pack list index fix:** deleting or duplicating a pack no longer leaves
  **Active** / Edit pointing at the wrong list when other packs shift. (Example:
  Active was pack #4, delete pack #2 → Active correctly becomes #3, same pack.)
- **Mash key chat:** after binding 1–0, messages match keybind-only behavior
  (next spell on the floating button — not “icon on the bar / floating hidden”).

## 4.3.28 - 2026-08-08

- **Move the floating button easily:** green **⋮ drag** tab above the icon.
  Drag that tab (not the spell icon itself). `/ssm unlock` if locked; `/ssm show` if hidden.

## 4.3.27 - 2026-08-08

- **Stop action-bar taint at the source:** Mash key 1–0 is **keybind only** (CLICK
  secure button). No more putting a SpellSmasher macro on the action bar
  (`PlaceAction`), which was causing MultiBar `SetShown` / `SetAttribute` blocks.
  Floating button shows next spell. Silent on blocked-action events (no chat flood).
  Login clears any old bar-slot macro from earlier versions.

## 4.3.26 - 2026-08-08

- **MultiBar SetShown spam fix:** stop calling `EditMacro` on every recompile
  (only when the mash macro body actually changes). Stop walking/painting Blizzard
  action buttons on recompile. Rate-limit blocked chat to once/minute for SetShown.

## 4.3.25 - 2026-08-08

- **Apply actually spends talents again:** no longer resets the tree for a
  points-valid prep that could leave N empty. Apply purchases the package on the
  active tree first (you see nodes fill), then clones to a new named loadout when
  slots allow. Chat reports buys / new name / or “current loadout”.

## 4.3.24 - 2026-08-08

- **Cast-bar taint lockdown:** no icon polling in combat, no bar live-icon markers,
  no CooldownFrame on the mash button, no drag/enter scripts on the SecureActionButton.
  Fixes `CastingBarFrame:GetTypeInfo` tainted by SpellSmasher (including Opening casts).

## 4.3.23 - 2026-08-08

- **Bar SetShown taint fix:** next-spell bar art is no longer a child of Blizzard
  MultiBar/ActionButton frames (that blocked `MultiBarLeftButtonN:SetShown()`).
  Markers parent to UIParent and only anchor over the mash slot. Blocked-action
  chat spam is rate-limited.

## 4.3.22 - 2026-08-08

- **Apply creates a new named loadout:** each Apply makes a unique loadout in N
  (SSM Pack, SSM Pack 2, …) via ImportLoadout. Under max level uses a points-valid
  tree. If slots are full, falls back to overwriting the current tree (with a clear
  message). Copy remains for manual paste.

## 4.3.21 - 2026-08-08

- **Move ^/v fixed:** row hover layer no longer covers the reorder buttons.
- **+ Spell opens a picker:** choose from your known castable spells (searchable).
  **Pick** next to Name sets the selected row the same way. Custom typing still works.

## 4.3.20 - 2026-08-08

- **Bar icon follows sequence again:** next-spell art on the mash bar slot via a
  private overlay, updated only by the poll ticker (not on cast click). Still no
  cooldown APIs and no Blizzard icon overwrite.

## 4.3.19 - 2026-08-08

- **Hard taint lockdown (Midnight):** mash secure button has **no** click/attribute
  icon hooks, **no** cooldown API calls, **no** painting on Blizzard action buttons.
  Live next-spell icon is poll-only on the floating SSM button. Fixes cast-bar
  `GetTypeInfo` secret taint and spellbook place blocks at the source.

## 4.3.18 - 2026-08-08

- **Cast bar taint fix (Midnight):** mash no longer refreshes icons/cooldowns on the
  same frame as the cast. That was tainting `OverlayPlayerCastingBarFrame` when it
  read secret cast-bar types. Icon/CD updates are next-frame only; action-bar mixin
  hooks removed (ticker + deferred paint only).

## 4.3.17 - 2026-08-08

- **Spellbook / action-bar place no longer blocked:** mash bar icon uses a private
  overlay (does not overwrite Blizzard action-button icons). Placing a spell from
  the spellbook onto your bars no longer fights SpellSmasher for the cursor.
- Mash macro is only re-placed on an **empty** saved slot after recompile — your
  real spells on that slot stay put.

## 4.3.16 - 2026-08-08

- **SpellSmasher Engine (all specs):** Engine mash lists for every class/spec/hero
  are built for the raid full-buffs model (DPS / HPS / tank by role). Method packs
  are unchanged. Hero-honest exclusives preserved.
## 4.3.15 — 2026-08-08

- **SpellSmasher Engine (Beast Mastery pilot):** Engine BM mash lists are tuned
  for a raid full-buffs DPS model (Method packs unchanged). Other specs still
  use prior Engine gold until rolled out.
## 4.3.14 — 2026-08-08

- **Hero talent honesty labels:** Method CUk is marked **shared Class|Spec gold**
  when the hero key reuses the primary scrape (current Method data). Spell lists
  stay hero-honest; UI/tour warn to verify hero nodes in N after Apply.
- When Method publishes a distinct hero loadout string, it is treated as
  hero-exact automatically (no code change needed).

## 4.3.13 — 2026-08-08

- **Castable spell IDs preferred:** map no longer stamps passive/proc ranks onto
  steps when a castable ID is known (e.g. Chaos Strike, Blade Dance, Eye Beam).
- **CastGuard hardened:** pure passive spell IDs are not sequence steps; dual
  names (Kill Shot, Ascendance, Metamorphosis) resolve by class/spec.
- **Icons/export keep spell IDs:** pack export/import and step save stamp
  castable IDs so tooltips stay correct across classes.

## 4.3.12 — 2026-08-08

- **Safer mash cooldown swipe (Midnight):** floating button uses only the
  DurationObject cooldown path — no secret number SetCooldown fallback.
- **Shift-AoE icon matches the cast:** holding Shift in AoE shift-mode shows the
  next AoE-list spell (and its CD), not the ST list.
- **Bar mash matches key-down:** with ActionButtonUseKeyDown on, the bar macro
  clicks the same key-down relay as keybinds.

## 4.3.11 — 2026-08-08

- **Apply overwrites your current loadout** (active talent tree) at any level —
  no more new “SSM …” named loadouts from Apply. Use **Copy** for a new name
  via Blizzard Import.
- **Apply keeps your pack talent string:** auto Best/Method only when the pack
  has no talent package yet (manual/Mine strings are not overwritten).
- **Honest Apply status:** green only when talents fully committed; partial
  progress is yellow and tells you to finish in N if needed.

## 4.3.10 — 2026-08-08

- **Saved lists stay intact on recompile:** filtering passives for mash no longer
  removes those rows from your stored pack.
- **Export keeps Method talent strings on the pack:** live talents can still go
  into the export string for this character; they no longer overwrite the
  Method package saved on your list.

## 4.3.9 — 2026-08-07

- **Fix action-bar cooldown Lua error** (Midnight “Secret values… SetCooldown”):
  mash icon no longer writes raw cooldown times onto Blizzard action buttons.
  Floating mash button uses the safe cooldown path so swipe still works without
  tainting bar buttons.

## 4.3.8 — 2026-08-07

- **Hero-honest packs (all classes):** Method and Engine lists no longer mix the
  other hero tree’s signature casts onto your chosen path. Examples: Pack Leader
  has no Black Arrow; Slayer has no Demolish; Lightsmith has no Hammer of Light;
  Shado-Pan has no Celestial Conduit. Pick a hero chip → only that path’s castables.

## 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: some installs still had an older folder — fully replace the SpellSmasher
  AddOns folder and `/reload` if icons/tooltips don’t appear.

## 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.
