## [1.4.0] - 2026-05-14
- Fix: Hovering an action button no longer crashes inside MoneyFrame_Update with "attempt to perform arithmetic on a secret number value (execution tainted by VamoosesPetPatrol)". Extends the 2026-05-13 Tier-4 deferral: the synchronous self:RemoveAllData() call (and Blizzard's direct calls into _provider:RemoveAllData on map teardown) was still running RemoveAllPinsByTemplate -- which releases pins back to the pool AND hides the shared GameTooltip if it was anchored to a removed pin -- inside Blizzard's tainted secure pin-pool refresh stack. Pool releases + GameTooltip mutations from tainted context propagated VPP-taint forward, so when the player later hovered an action button inside a protected context where GetMoney() returns a secret value (housing interior, M+, raid encounter, delve, PvP, in-combat dungeon), MoneyFrame_Update's arithmetic on that secret crashed and blamed VPP. RemoveAllData now defers its engine work to a clean next-frame context too, leaving zero synchronous engine-state mutations in RefreshAllData. Reported 2026-05-14.
- Fix: Hovering a Blizzard quest-offer / area-POI pin no longer crashes inside GameTooltip_InsertFrame with a "secret number" frameWidth comparison blamed on VPP. Two-layer defense (per Reference/MIDNIGHT_SECRET_VALUES.md): (1) Tier-4 deferral -- _renderZonePins and _renderBadges now run via RunNextFrame so addon work no longer fires synchronously inside Blizzard's secure pin-pool refresh stack; (2) Tier-2 pool reset -- each VPPWorldMapPinTemplate acquisition now calls pin:SetToDefaults() to clear any Secret state inherited from prior tainted use (Blizzard's Pools.lua: "if one secret object enters a pool, all future acquisitions end up being secret too"). Belt + braces; matches Blizzard's own Pool_HideAndSetToDefaults reset pattern. Reported 2026-05-13.
- Fix: Hovering Blizzard world quest pins no longer crashes inside MoneyFrame_Update with a "secret number" taint blamed on VPP. The world-map pet pin data provider was running addon work (zone tab fanout, navigateTo SetMapID) synchronously inside Blizzard's secure pin-pool refresh, tainting WorldQuest/TaskPOI tooltips. Defers all WorldMapFrame mutations off the refresh stack via RunNextFrame and skips auto-follow while the cursor is on the canvas.
- New: Pet pins on Blizzard's world map (M). Toggle in Config tab. Click a pin to pulse the species in VPP's main window.

## [1.3.0] - 2026-04-26
- New: Follow Player toggle on the map title bar — keeps your blip centered while the map pans underneath, minimap-style. Auto-zooms to 2x when enabled at fit; manual pan exits, zoom-out keeps the toggle remembered.
- Change: Player marker is now a minimap-style arrow that rotates with your facing direction, and stays a constant on-screen size regardless of map zoom.
- Change: Map placement controls (attach left, attach right, detach) moved from the map title bar to the main window title bar — flanking the eye icon. Active side is highlighted; detach button uses the default mouse-cursor texture color.
- Change: Detached map uses whole-frame fade for entrance, exit, and zone changes — replaces the column-by-column tile fade (which only made sense as part of the slide-out drawer choreography). Attached mode keeps the slide + tile fade.
- New: Name search field on the All tab — filters by partial pet name as you type (case-insensitive, debounced).
- New: Click a pin again to clear its waypoint. Same pin = toggle. Shift+click still always sets waypoint and inserts a chat link.
- Change: Tooltip hints — pet rows now mention "Click: highlight spawn pins on map" so the pulse feature is discoverable; map pins now mention shift+click for chat-link.
- Perf: Player-blip ticker dropped from 10Hz to 5Hz (still smooth for facing rotation and follow-pan, halves the per-tick work when not actively following).
- New: "Alert only for uncollected pets" checkbox under Play Alert Sound in Config — backend was already wired, just needed the toggle.
- New: Zone tab filter (All/Uncollected/Collected) persists across zone hops and reloads instead of resetting to All every time.
- Improve: Map zoom level no longer resets to 1.0 on every zone change — your committed zoom is preserved (view recenters on the new zone).
- Improve: Debug mode now prints a one-shot warning when the player blip can't locate you on the displayed parent map (deep sub-area without coverage).
- Fix: Nestor's bounce reset timer now guards against running while the title bar is hidden by combat.
- Cleanup: Stripped dead `fontFamily` / `fontScale` config keys (always defaulted, no UI to change them) and their supporting tables.
- Perf: Player-blip ticker now caches last position/facing/visibility and skips SetPoint/SetRotation when nothing changed. Standing still no longer generates GC pressure from anchor-record allocations.
- Perf: Hoisted the per-call closure in ZoneTracker:CheckUnit (fired on every UPDATE_MOUSEOVER_UNIT). Was allocating a fresh function each mouse-hover.
- Fix: Detached map no longer closes when you switch to All or Config tabs — only attached maps follow the tab. Lets you adjust scale on Config and see the result live.
- Fix: When zoomed in, you can now drag the map all the way to the zone edges. Previous pan offset under-shifted by a factor of zoom level.

## [1.2.0] - 2026-04-25
- New: Map drawer can now detach from the main window. Position, scale, and pinned state are saved independently and restored across /reload.
- New: Interior map zoom. Use +/-/Home buttons or mouse wheel (zooms toward your cursor) to drill into dense pin clusters; click-drag to pan when zoomed. Pins stay clickable at every zoom level.
- New: Independent map scale. A separate stepper in Config sizes the map without affecting the main window.
- New: Three placement modes (left of main, right of main, detached) with always-visible Side and Detach toggle buttons in the map title bar.
- New: Per-copy level row on each pet entry. See every owned copy's level, each colored by its individual quality (e.g. blue 25 / green 18 / grey 5).
- New: Pet name on each row is colored by your best owned quality.
- New: Pet type icons next to the type label (Humanoid, Beast, Dragonkin, Critter, Elemental, Magic, Mechanical, Aquatic, Flying, Undead) using Blizzard's atlas. Names localized via PET_TYPE_SUFFIX.
- New: Sort toggle on the All tab. Switch between A-Z and best-quality order.
- New: Count display shows unique species and total owned copies. Format: "X new / Y unique / Z owned" depending on the active filter.
- New: Tooltip for collected pets uses Blizzard's localized "X/3 collected" string (via GetOwnedBattlePetString).
- New: /vpp map show / /vpp map hide / /vpp map reset slash commands.
- Improve: Config tab is scrollable so longer configurations fit in the panel.
- Improve: Zone tab empty state shows the logo backdrop, matching the map drawer's empty state.
- Improve: Map zoom cluster (+/-/H) overlays the viewport so the chrome stays fixed when the canvas zooms.
- Fix: Detached map no longer closes when the main window closes (independent of the link-to-main toggle).
- Fix: Map stays closed when you switch to the All or Config tab. Previously zone changes would reopen it.
- Fix: Map scale stepper no longer also scales the main window.
- Fix: Hover text disappearing on Reset and Rebuild buttons in Config.
- Fix: Pinned map now auto-restores on /reload (event-driven, no timer hack).
- Fix: Login no longer prints scanner build messages unless debug mode is on.
- Fix: Replaced two redundant local pet-type tables with Blizzard globals, cutting code duplication.

## [1.1.2] - 2026-04-23
- Fix: Removed soft-target event tracking (PLAYER_SOFT_INTERACT/ENEMY/FRIEND_CHANGED) — caused client crash (ERROR #132, EXC_BAD_ACCESS) on camera movement inside Daggerspine Point Ritual Site and likely other Midnight delve-style instances. Spotted-pet detection still works via mouseover and target.

## [1.1.1] - 2026-04-20
- Change: Compatible with WoW 12.0.5 (TOC bump)
- Change: Silenced "VPP loaded" login chat message (shown only when debug mode is on)

Vamoose's Pet Patrol - Changelog

## [1.1.0] - 2026-03-15
- Fix: Instance zones (dungeons, raids, delves) incorrectly showed parent zone's pet list
- Fix: "Script ran too long" error when checking pet quality with large collections
- Fix: Player blip not appearing on initial load or after zone changes
- Fix: "table index is secret" error in delves — tainted UnitName values from soft-target units
- Fix: Combat error from spotted-pet detection — skip UnitName checks during combat lockdown
- Fix: All Pets tab filter switch lag spike — suppressed double layout pass in ScrollBox
- Fix: Wrong pet counts on login — gate All Pets build on both index ready AND journal data
- Fix: Captured pet stayed "NEARBY!" and uncollected after catching
- Fix: Zone tab didn't refresh collection status after capturing a pet
- Fix: All Pets tab rescanned 65k species on every pet capture — now lightweight refresh only
- Fix: Map drawer player blip ticker kept running after closing drawer
- Fix: Fast zone change during map animation could show old zone's pins
- Fix: Pin pulse row blip dimming was broken
- Fix: Stale scroll frames visible when switching to zone with empty results
- Add: Pulsing "Scanning pet journal..." indicator on All Pets tab
- Improve: Config tab redesigned with checkboxes and theme swatches
- Improve: Full theme engine compliance across all UI files

## [1.0.0] - 2026-03-14
- Zone Pets tab: see all wild battle pets in your current zone
  - Uncollected pets highlighted with gold "NEW!" badge
  - Quality indicators: Poor, Common, Uncommon, Rare
  - Upgrade arrow on pets that can be caught at higher quality
  - Pet type icons and source text on every row
  - Collection radio filters: All, Uncollected, Collected
  - Count display showing "X new / Y total" for current zone
  - Expansion-tinted zone header with subzone display
  - Sort: spotted first, then uncollected, then by quality (upgrade targets first), then alphabetical
- All Pets tab: browse every battle pet in the game
  - Source type dropdown: Pet Battle, Drop, Quest, Vendor, Profession, Achievement, World Event, PvP, Promotion, Trading Card, In-Game Shop
  - Collection radio filters: All, Uncollected, Collected
  - Batched scanning (65,000 species IDs) with UI yield to prevent stutter
  - Supports Midnight click-to-catch pets (canBattle=false, isWild=true)
- Map Drawer: animated slide-out zone map with pet spawn coordinate pins
  - Tile rendering with column-by-column fade-in animation
  - Explored overlay removes fog of war from visited areas
  - 20 colorblind-safe per-pet pin colors (Wong/Okabe-Ito palette), matching row color blips
  - Pin pulse: click a pet row to highlight matching pins and dim others
  - Player position shown as a baby murloc with glow halo
  - Click pin to set waypoint, Shift+click to link in chat
  - Side-flip button to move drawer to left or right of main window
  - Dynamic height sizing to fit map content
  - Empty state with logo when no wild pets in zone
  - Toggle via title bar eye button or /vpp map
- Nearby pet detection: spots wild pets on mouseover, target, and soft-target
  - Green row tint and "NEARBY!" badge in Zone tab
  - Separate alert sound for nearby uncollected pets
- Zone change alerts with optional sound notification
  - Chat message: "[VPP] Zone: X new, Y upgrade (Z wild pets)"
  - Duplicate suppression prevents double-alerts on login
- Window pin button: keeps window open through Esc and /reload
- Title bar icon swaps to indicate zone collection status
- Nestor companion mascot with talking head quotes
  - Left-click: trigger quote with bounce animation
  - Right-click: toggle between Nestor and Robo-Nestor
  - Chat-only mode option (no talking head)
- PetScanner: builds zone index from C_PetJournal API with 24h cache
- Static ZoneDB from Wowhead scrape via WowCodex pipeline
  - VPP_ZoneDB.lua: uiMapID-based lookup (complete zone coverage)
  - VPP_ZoneCoords.lua: per-species spawn coordinates
  - ZoneTracker uses static DB with parent-walk + sourceText fallback
  - PetScanner skips runtime scan when static DB is present
- 12 color themes via shared SchemeConstants (left/right-click to cycle)
- Modern ScrollBox UI (WowScrollBoxList + DataProvider)
- Minimap button + addon compartment support
- Config tab with alerts, Nestor, theme, data options, Discord/BMAC links
- /vpp slash command: map, scan, debug, zone, zones, check, config
