mtg_python_deckbuilder/docs/releases/v2.6.0.md
2025-10-13 10:26:29 -07:00

5.4 KiB

MTG Python Deckbuilder v2.6.0

Summary

  • Card tagging system improvements split metadata from gameplay themes for cleaner deck building experience
  • Keyword normalization reduces specialty keyword noise by 96% while maintaining theme catalog quality
  • Protection tag now focuses on cards that grant shields to others, not just those with inherent protection
  • Web UI improvements: faster polling, fixed progress display, and theme refresh stability
  • Protection System Overhaul: Comprehensive enhancement to protection card detection, classification, and deck building
    • Fine-grained scope metadata distinguishes self-protection from board-wide effects ("Your Permanents: Hexproof" vs "Self: Hexproof")
    • Enhanced grant detection with Equipment/Aura patterns, phasing support, and complex trigger handling
    • Intelligent deck builder filtering includes board-relevant protection while excluding self-only and type-specific cards
    • Tiered pool limiting focuses on high-quality staples while maintaining variety across builds
    • Improved scope tagging for cards with keyword-only protection effects (no grant text, just inherent keywords)
  • Tagging Module Refactoring: Large-scale refactor to improve code quality and maintainability
    • Centralized regex patterns, extracted reusable utilities, decomposed complex functions
    • Improved code organization and readability while maintaining 100% tagging accuracy

Added

  • Metadata partition system separates diagnostic tags from gameplay themes in card data
  • Keyword normalization system with smart filtering of one-off specialty mechanics
  • Allowlist preserves important keywords like Flying, Myriad, and Transform
  • Protection grant detection identifies cards that give Hexproof, Ward, or Indestructible to other permanents
  • Automatic tagging for creature-type-specific protection (e.g., "Knights Gain Protection")
  • New metadataTags column in card data for bracket annotations and internal diagnostics
  • Static phasing keyword detection from keywords field (catches creatures like Breezekeeper)
  • "Other X you control have Y" protection pattern for static ability grants
  • "Enchanted creature has phasing" pattern detection
  • Chosen type blanket phasing patterns
  • Complex trigger phasing patterns (reactive, consequent, end-of-turn)
  • Protection scope filtering in deck builder (feature flag: TAG_PROTECTION_SCOPE) intelligently selects board-relevant protection
  • Phasing cards with "Your Permanents:" or "Targeted:" metadata now tagged as Protection and included in protection pool
  • Metadata tags temporarily visible in card hover previews for debugging (shows scope like "Your Permanents: Hexproof")
  • Web-slinging tagger function to identify cards with web-slinging mechanics

Changed

  • Card tags now split between themes (for deck building) and metadata (for diagnostics)
  • Keywords now consolidate variants (e.g., "Commander ninjutsu" becomes "Ninjutsu")
  • Setup progress polling reduced from 3s to 5-10s intervals for better performance
  • Theme catalog streamlined from 753 to 736 themes (-2.3%) with improved quality
  • Protection tag refined to focus on 329 cards that grant shields (down from 1,166 with inherent effects)
  • Protection tag renamed to "Protective Effects" throughout web interface to avoid confusion with the Magic keyword "protection"
  • Theme catalog automatically excludes metadata tags from theme suggestions
  • Grant detection now strips reminder text before pattern matching to avoid false positives
  • Deck builder protection phase now filters by scope metadata: includes "Your Permanents:", excludes "Self:" protection
  • Protection card selection now randomized per build for variety (using seeded RNG when deterministic mode enabled)
  • Protection pool now limited to ~40-50 high-quality cards (tiered selection: top 3x target + random 10-20 extras)
  • Tagging module imports standardized with consistent organization and centralized constants

Fixed

  • Setup progress now shows 100% completion instead of getting stuck at 99%
  • Theme catalog no longer continuously regenerates after setup completes
  • Health indicator polling optimized to reduce server load
  • Protection detection now correctly excludes creatures with only inherent keywords
  • Dive Down, Glint no longer falsely identified as granting to opponents (reminder text fix)
  • Drogskol Captain, Haytham Kenway now correctly get "Your Permanents" scope tags
  • 7 cards with static Phasing keyword now properly detected (Breezekeeper, Teferi's Drake, etc.)
  • Type-specific protection grants (e.g., "Knights Gain Indestructible") now correctly excluded from general protection pool
  • Protection scope filter now properly prioritizes exclusions over inclusions (fixes Knight Exemplar in non-Knight decks)
  • Inherent protection cards (Aysen Highway, Phantom Colossus, etc.) now correctly get "Self: Protection" metadata tags
  • Scope tagging now applies to ALL cards with protection effects, not just grant cards
  • Cloak of Invisibility, Teferi's Curse now get "Your Permanents: Phasing" tags
  • Shimmer now gets "Blanket: Phasing" tag for chosen type effect
  • King of the Oathbreakers now gets "Self: Phasing" tag for reactive trigger
  • Cards with static keywords (Protection, Hexproof, Ward, Indestructible) in their keywords field now get proper scope metadata tags
  • Cards with X in their mana cost now properly identified and tagged with "X Spells" theme for better deck building accuracy
  • Card tagging system enhanced with smarter pattern detection and more consistent categorization