lightweight tag d561cef30a1e196d62a6ec9fd21139bfb8f2d777 v2026.07.06.1950
Author:	BAThomp24 <bathomp24@gmail.com>
Date:	Mon Jul 6 15:50:15 2026 -0400

commit d561cef30a1e196d62a6ec9fd21139bfb8f2d777
Author: BAThomp24 <bathomp24@gmail.com>
Date:   Mon Jul 6 15:50:05 2026 -0400

    Replace dungeon talent swaps with per-dungeon whole builds
    
    The picks/drops delta system was structurally broken: a delta that moves
    a talent point down across a tree point-gate (e.g. Aug's Twin Guardian
    req23 funded by dropping Attuned to the Dream req8) is unapplyable in
    principle — dropping the shallow talent closes the gate the deep pick
    needs, locking the whole bottom tier.
    
    Instead, recommend complete builds per dungeon:
    - update-data-rio.ts: emit dungeonBuilds[class][role][spec][bucket][dungeon]
      = the top RIO variant's full import string, per key bucket (all/15+/18+/20+,
      min 100-run sample); swap derivation deleted; retry transient 5xx from
      raider.io (was silently dropping a whole spec on one 502)
    - Suggest.lua: dungeon entry recommends the per-dungeon top build for the
      player's spec + key bucket (shallower-bucket fallback), shows a real diff
      of the player's current talents vs the build, and skips the popup on an
      exact match; single Apply Build action
    - UI.lua: ApplySwaps/SwapsAlreadyApplied/bake machinery removed; new
      ZZ:DiffAgainstCurrent powers the popup diff rows and /zz dump
    - Core.lua: swaps stitching removed; /zz dump prints the last diff
    - DataRIO.lua: regenerated in the new format (40/40 specs)
    
    zugzug/WCL source falls back to best-overall-build-for-dungeon (no
    per-dungeon variants).
    
    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

