diff --git a/CHANGELOG.md b/CHANGELOG.md index 30cabbf..dd3bc0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,11 @@ This format follows Keep a Changelog principles and aims for Semantic Versioning - Link PRs/issues inline when helpful, e.g., (#123) or [#123]. Reference-style links at the bottom are encouraged for readability. ## [Unreleased] -_No unreleased changes._ +### Changed +- Theme catalog schema now accepts optional `id` values on entries so refreshed catalogs validate cleanly. + +### Fixed +- Regenerated `logs/perf/theme_preview_warm_baseline.json` to repair preview performance CI regressions caused by a malformed baseline file and verified the regression gate passes with the refreshed data. ## [2.3.0] - 2025-09-26 ### Added diff --git a/RELEASE_NOTES_TEMPLATE.md b/RELEASE_NOTES_TEMPLATE.md index d283dc7..ca34120 100644 --- a/RELEASE_NOTES_TEMPLATE.md +++ b/RELEASE_NOTES_TEMPLATE.md @@ -1,6 +1,7 @@ # MTG Python Deckbuilder ${VERSION} ## Summary +- Hardened theme catalog schema to accept optional IDs and refreshed the preview performance baseline to keep CI checks green. - Delivered multi-theme random builds with deterministic cascade, strict match support, and polished HTMX/UI flows. - Added opt-in telemetry counters, reroll throttling safeguards, and structured diagnostics exports. - Expanded tooling, documentation, and QA coverage for theme governance, performance profiling, and seed history management. @@ -26,6 +27,9 @@ - Sidecar exports include multi-theme metadata and locked commander indicators with consistent artifact sets. - Manual QA checklist updates and broader pytest coverage for multi-theme flows, reroll behavior, performance, and telemetry. +### Maintenance & CI +- Theme catalog schema now accepts optional IDs and the preview performance warm baseline was regenerated to restore the regression gate. + ## Detailed changes ### Added - **Validation & telemetry tests** @@ -61,6 +65,7 @@ - Cache bust hooks now clear filter/preview caches on catalog refresh or tagging completion; metrics expose `preview_last_bust_at` and warm cache stats. - Theme normalization standardizes terms (ETB → Enter the Battlefield, Pillow Fort → Pillowfort, etc.), with synergy output capped at five entries (curated > enforced > inferred ordering). - README, CHANGELOG, and governance docs updated to reflect new workflows, taxonomy snapshots, and telemetry controls. +- Theme catalog schema now allows optional `id` fields on entries so regenerated catalogs validate cleanly. ### Deprecated - Price/legality snippet integration remains deferred to the future Budget Mode rollout (`logs/roadmaps/roadmap_9_budget_mode.md`). @@ -72,6 +77,7 @@ - Suppressed legacy double-export path to prevent creation of `*_1.csv` / `*_1.txt` artifacts. - Removed ultra-rare themes (frequency ≤1) unless protected via whitelist, keeping results focused on supported experiences. - Corrected commander eligibility rules to restrict non-creature legendary permanents and honor “can be your commander” text. +- Refreshed `logs/perf/theme_preview_warm_baseline.json` to fix preview performance CI failures stemming from malformed baseline data. ## Upgrade notes - Enable multi-theme random builds via existing Random Mode flags; strict matching persists automatically across UI, API, permalink, and export contexts. diff --git a/code/type_definitions_theme_catalog.py b/code/type_definitions_theme_catalog.py index b16828f..da88ae0 100644 --- a/code/type_definitions_theme_catalog.py +++ b/code/type_definitions_theme_catalog.py @@ -21,6 +21,10 @@ PopularityBucket = Literal['Very Common', 'Common', 'Uncommon', 'Niche', 'Rare'] class ThemeEntry(BaseModel): + id: Optional[str] = Field( + None, + description="Stable, slugified identifier for the theme (mirrors fast-path catalog id); optional for backward compatibility.", + ) theme: str = Field(..., description="Canonical theme display name") synergies: List[str] = Field(default_factory=list, description="Ordered synergy list (curated > enforced > inferred, possibly trimmed)") primary_color: Optional[str] = Field(None, description="Primary color (TitleCase) if detectable") diff --git a/logs/perf/theme_preview_warm_baseline.json b/logs/perf/theme_preview_warm_baseline.json index 509c73e..d7c85f4 100644 --- a/logs/perf/theme_preview_warm_baseline.json +++ b/logs/perf/theme_preview_warm_baseline.json @@ -1,39 +1,760 @@ -{{ - - "event": "preview_perf_warm_baseline", "avg_ms": 47.75, - - "collected_at": "2025-09-23T18:45:00Z", "count": 735, - - "mode": "warm-single-pass", "event": "preview_perf_warm_baseline", - - "count": 735, "mode": "all", - - "p50_ms": 30.27, "p50_ms": 30.27, - - "p90_ms": 45.44, "p90_ms": 45.44, - - "p95_ms": 58.77, "p95_ms": 58.77, - - "avg_ms": 47.75, "slugs": [ - - "notes": "Captured from warm pass benchmarking after theme fast path rebuild.", "0-1-counters", - - "slugs_sample": [ "0-2-counters", - - "plus1-plus1-counters", "1-1-counters", - - "aggro", "adamant", - - "eldrazi-kindred", "adapt", - - "vampire-kindred", "addendum", - - "wizard-kindred" "advisor-kindred", - - ] "aetherborn-kindred", - -} "affinity", - +{ + "avg_ms": 11.44, + "count": 735, + "elapsed_s": 8.414, + "loops": 735, + "mode": "all", + "p50_ms": 6.0, + "p90_ms": 25.71, + "p95_ms": 27.31, + "passes": 1, + "per_slug_requests": { + "0-1-counters": 1, + "0-2-counters": 1, + "1-1-counters": 1, + "adamant": 1, + "adapt": 1, + "addendum": 1, + "advisor-kindred": 1, + "aetherborn-kindred": 1, + "affinity": 1, + "afflict": 1, + "afterlife": 1, + "aftermath": 1, + "age-counters": 1, + "aggro": 1, + "airbending": 1, + "alien-kindred": 1, + "alliance": 1, + "ally-kindred": 1, + "amass": 1, + "amplify": 1, + "angel-kindred": 1, + "annihilator": 1, + "antelope-kindred": 1, + "ape-kindred": 1, + "archer-kindred": 1, + "archon-kindred": 1, + "aristocrats": 1, + "armadillo-kindred": 1, + "army-kindred": 1, + "artifact-tokens": 1, + "artifacts-matter": 1, + "artificer-kindred": 1, + "ascend": 1, + "assassin-kindred": 1, + "assembly-worker-kindred": 1, + "assist": 1, + "astartes-kindred": 1, + "atog-kindred": 1, + "auras": 1, + "aurochs-kindred": 1, + "avatar-kindred": 1, + "awaken": 1, + "azra-kindred": 1, + "backgrounds-matter": 1, + "backup": 1, + "badger-kindred": 1, + "banding": 1, + "barbarian-kindred": 1, + "bard-kindred": 1, + "bargain": 1, + "basic-landcycling": 1, + "basilisk-kindred": 1, + "bat-kindred": 1, + "battalion": 1, + "battle-cry": 1, + "battles-matter": 1, + "bear-kindred": 1, + "beast-kindred": 1, + "beaver-kindred": 1, + "beeble-kindred": 1, + "behold": 1, + "beholder-kindred": 1, + "berserker-kindred": 1, + "bestow": 1, + "big-mana": 1, + "bird-kindred": 1, + "blaze-counters": 1, + "blink": 1, + "blitz": 1, + "blood-token": 1, + "bloodrush": 1, + "bloodthirst": 1, + "boar-kindred": 1, + "board-wipes": 1, + "boast": 1, + "bolster": 1, + "bounty-counters": 1, + "bracket-extraturn": 1, + "bracket-gamechanger": 1, + "bracket-masslanddenial": 1, + "bracket-tutornonland": 1, + "brushwagg-kindred": 1, + "burn": 1, + "bushido": 1, + "buyback": 1, + "c-tan-kindred": 1, + "camarid-kindred": 1, + "camel-kindred": 1, + "cantrips": 1, + "capybara-kindred": 1, + "card-draw": 1, + "card-selection": 1, + "carrier-kindred": 1, + "cascade": 1, + "cases-matter": 1, + "casualty": 1, + "cat-kindred": 1, + "celebration": 1, + "centaur-kindred": 1, + "champion": 1, + "changeling": 1, + "channel": 1, + "charge-counters": 1, + "child-kindred": 1, + "chimera-kindred": 1, + "choose-a-background": 1, + "chroma": 1, + "cipher": 1, + "citizen-kindred": 1, + "clash": 1, + "cleave": 1, + "cleric-kindred": 1, + "cloak": 1, + "clones": 1, + "clown-kindred": 1, + "clue-token": 1, + "cockatrice-kindred": 1, + "cohort": 1, + "collect-evidence": 1, + "combat-matters": 1, + "combat-tricks": 1, + "compleated": 1, + "conditional-draw": 1, + "conjure": 1, + "connive": 1, + "conspire": 1, + "constellation": 1, + "construct-kindred": 1, + "control": 1, + "converge": 1, + "convert": 1, + "convoke": 1, + "corpse-counters": 1, + "corrupted": 1, + "cost-reduction": 1, + "cost-scaling": 1, + "council-s-dilemma": 1, + "counters-matter": 1, + "counterspells": 1, + "coven": 1, + "coward-kindred": 1, + "coyote-kindred": 1, + "crab-kindred": 1, + "craft": 1, + "creature-tokens": 1, + "crew": 1, + "crocodile-kindred": 1, + "cumulative-upkeep": 1, + "custodes-kindred": 1, + "cyberman-kindred": 1, + "cycling": 1, + "cyclops-kindred": 1, + "dalek-kindred": 1, + "dash": 1, + "dauthi-kindred": 1, + "daybound": 1, + "deathtouch": 1, + "defender": 1, + "defense-counters": 1, + "delay-counters": 1, + "delirium": 1, + "delve": 1, + "demigod-kindred": 1, + "demon-kindred": 1, + "demonstrate": 1, + "depletion-counters": 1, + "descend": 1, + "deserter-kindred": 1, + "detain": 1, + "detective-kindred": 1, + "dethrone": 1, + "devil-kindred": 1, + "devoid": 1, + "devotion-counters": 1, + "devour": 1, + "dinosaur-kindred": 1, + "discard-matters": 1, + "discover": 1, + "disguise": 1, + "disturb": 1, + "divinity-counters": 1, + "djinn-kindred": 1, + "doctor-kindred": 1, + "doctor-s-companion": 1, + "dog-kindred": 1, + "domain": 1, + "doom-counters": 1, + "double-strike": 1, + "dragon-kindred": 1, + "drake-kindred": 1, + "dreadnought-kindred": 1, + "dredge": 1, + "drone-kindred": 1, + "druid-kindred": 1, + "dryad-kindred": 1, + "dwarf-kindred": 1, + "earthbend": 1, + "echo": 1, + "eerie": 1, + "efreet-kindred": 1, + "egg-kindred": 1, + "elder-kindred": 1, + "eldrazi-kindred": 1, + "elemental-kindred": 1, + "elephant-kindred": 1, + "elf-kindred": 1, + "elk-kindred": 1, + "embalm": 1, + "emerge": 1, + "employee-kindred": 1, + "enchant": 1, + "enchantment-tokens": 1, + "enchantments-matter": 1, + "encore": 1, + "endure": 1, + "energy": 1, + "energy-counters": 1, + "enlist": 1, + "enrage": 1, + "enter-the-battlefield": 1, + "entwine": 1, + "eon-counters": 1, + "epic": 1, + "equip": 1, + "equipment": 1, + "equipment-matters": 1, + "escalate": 1, + "escape": 1, + "eternalize": 1, + "evoke": 1, + "evolve": 1, + "exalted": 1, + "exert": 1, + "exhaust": 1, + "exile-matters": 1, + "experience-counters": 1, + "exploit": 1, + "explore": 1, + "extort": 1, + "eye-kindred": 1, + "fabricate": 1, + "fade-counters": 1, + "fading": 1, + "faerie-kindred": 1, + "fateful-hour": 1, + "fateseal": 1, + "fathomless-descent": 1, + "fear": 1, + "ferocious": 1, + "ferret-kindred": 1, + "fight": 1, + "finality-counters": 1, + "firebending": 1, + "first-strike": 1, + "fish-kindred": 1, + "flagbearer-kindred": 1, + "flanking": 1, + "flash": 1, + "flashback": 1, + "flood-counters": 1, + "flurry": 1, + "flying": 1, + "food": 1, + "food-token": 1, + "for-mirrodin": 1, + "forage": 1, + "forecast": 1, + "forestcycling": 1, + "forestwalk": 1, + "foretell": 1, + "formidable": 1, + "fox-kindred": 1, + "fractal-kindred": 1, + "freerunning": 1, + "frog-kindred": 1, + "fungus-counters": 1, + "fungus-kindred": 1, + "fuse-counters": 1, + "gargoyle-kindred": 1, + "germ-kindred": 1, + "giant-kindred": 1, + "gift": 1, + "gith-kindred": 1, + "glimmer-kindred": 1, + "gnoll-kindred": 1, + "gnome-kindred": 1, + "goad": 1, + "goat-kindred": 1, + "goblin-kindred": 1, + "god-kindred": 1, + "gold-token": 1, + "golem-kindred": 1, + "gorgon-kindred": 1, + "graft": 1, + "grandeur": 1, + "gravestorm": 1, + "graveyard-matters": 1, + "gremlin-kindred": 1, + "griffin-kindred": 1, + "group-hug": 1, + "growth-counters": 1, + "guest-kindred": 1, + "hag-kindred": 1, + "halfling-kindred": 1, + "hamster-kindred": 1, + "harmonize": 1, + "harpy-kindred": 1, + "haste": 1, + "hatching-counters": 1, + "hatchling-counters": 1, + "haunt": 1, + "healing-counters": 1, + "hellbent": 1, + "hellion-kindred": 1, + "hero-kindred": 1, + "heroic": 1, + "hexproof": 1, + "hexproof-from": 1, + "hideaway": 1, + "hippo-kindred": 1, + "hippogriff-kindred": 1, + "historics-matter": 1, + "hit-counters": 1, + "homarid-kindred": 1, + "homunculus-kindred": 1, + "horror-kindred": 1, + "horse-kindred": 1, + "horsemanship": 1, + "hour-counters": 1, + "human-kindred": 1, + "hydra-kindred": 1, + "hyena-kindred": 1, + "ice-counters": 1, + "illusion-kindred": 1, + "imp-kindred": 1, + "impending": 1, + "imprint": 1, + "improvise": 1, + "impulse": 1, + "incarnation-kindred": 1, + "incubate": 1, + "incubator-token": 1, + "indestructible": 1, + "infect": 1, + "infection-counters": 1, + "ingest": 1, + "inkling-kindred": 1, + "insect-kindred": 1, + "inspired": 1, + "interaction": 1, + "intimidate": 1, + "investigate": 1, + "islandcycling": 1, + "islandwalk": 1, + "jackal-kindred": 1, + "jellyfish-kindred": 1, + "job-select": 1, + "join-forces": 1, + "judgment-counters": 1, + "juggernaut-kindred": 1, + "jump": 1, + "jump-start": 1, + "junk-token": 1, + "junk-tokens": 1, + "kavu-kindred": 1, + "ki-counters": 1, + "kicker": 1, + "kinship": 1, + "kirin-kindred": 1, + "kithkin-kindred": 1, + "knight-kindred": 1, + "kobold-kindred": 1, + "kor-kindred": 1, + "kraken-kindred": 1, + "lamia-kindred": 1, + "lammasu-kindred": 1, + "land-types-matter": 1, + "landcycling": 1, + "landfall": 1, + "lands-matter": 1, + "landwalk": 1, + "learn": 1, + "leave-the-battlefield": 1, + "leech-kindred": 1, + "legends-matter": 1, + "level-counters": 1, + "level-up": 1, + "leviathan-kindred": 1, + "lhurgoyf-kindred": 1, + "licid-kindred": 1, + "lieutenant": 1, + "life-matters": 1, + "life-to-draw": 1, + "lifegain": 1, + "lifegain-triggers": 1, + "lifelink": 1, + "lifeloss": 1, + "lifeloss-triggers": 1, + "little-fellas": 1, + "living-metal": 1, + "living-weapon": 1, + "lizard-kindred": 1, + "loot": 1, + "lore-counters": 1, + "loyalty-counters": 1, + "madness": 1, + "magecraft": 1, + "mana-dork": 1, + "mana-rock": 1, + "manifest": 1, + "manifest-dread": 1, + "manticore-kindred": 1, + "map-token": 1, + "max-speed": 1, + "mayhem": 1, + "megamorph": 1, + "meld": 1, + "melee": 1, + "menace": 1, + "mentor": 1, + "mercenary-kindred": 1, + "merfolk-kindred": 1, + "metalcraft": 1, + "metathran-kindred": 1, + "midrange": 1, + "mill": 1, + "minion-kindred": 1, + "minotaur-kindred": 1, + "miracle": 1, + "mite-kindred": 1, + "mobilize": 1, + "modal": 1, + "modular": 1, + "mole-kindred": 1, + "monarch": 1, + "monger-kindred": 1, + "mongoose-kindred": 1, + "monk-kindred": 1, + "monkey-kindred": 1, + "monstrosity": 1, + "moonfolk-kindred": 1, + "morbid": 1, + "more-than-meets-the-eye": 1, + "morph": 1, + "mount-kindred": 1, + "mountaincycling": 1, + "mountainwalk": 1, + "mouse-kindred": 1, + "multikicker": 1, + "multiple-copies": 1, + "mutant-kindred": 1, + "mutate": 1, + "myr-kindred": 1, + "myriad": 1, + "mystic-kindred": 1, + "nautilus-kindred": 1, + "necron-kindred": 1, + "net-counters": 1, + "nightbound": 1, + "nightmare-kindred": 1, + "nightstalker-kindred": 1, + "ninja-kindred": 1, + "ninjutsu": 1, + "noble-kindred": 1, + "nomad-kindred": 1, + "nymph-kindred": 1, + "octopus-kindred": 1, + "offering": 1, + "offspring": 1, + "ogre-kindred": 1, + "oil-counters": 1, + "omen-counters": 1, + "ooze-kindred": 1, + "open-an-attraction": 1, + "orb-kindred": 1, + "orc-kindred": 1, + "ore-counters": 1, + "orgg-kindred": 1, + "otter-kindred": 1, + "ouphe-kindred": 1, + "outlast": 1, + "outlaw-kindred": 1, + "overload": 1, + "ox-kindred": 1, + "oyster-kindred": 1, + "pack-tactics": 1, + "pangolin-kindred": 1, + "paradox": 1, + "parley": 1, + "partner": 1, + "partner-with": 1, + "peasant-kindred": 1, + "pegasus-kindred": 1, + "performer-kindred": 1, + "persist": 1, + "pest-kindred": 1, + "phasing": 1, + "phoenix-kindred": 1, + "phyrexian-kindred": 1, + "pillowfort": 1, + "pilot-kindred": 1, + "pingers": 1, + "pirate-kindred": 1, + "plague-counters": 1, + "plainscycling": 1, + "plainswalk": 1, + "planeswalkers": 1, + "plant-kindred": 1, + "plot": 1, + "plus0-plus1-counters": 1, + "plus1-plus0-counters": 1, + "plus1-plus1-counters": 1, + "plus2-plus2-counters": 1, + "poison-counters": 1, + "politics": 1, + "populate": 1, + "porcupine-kindred": 1, + "possum-kindred": 1, + "powerstone-token": 1, + "praetor-kindred": 1, + "primarch-kindred": 1, + "processor-kindred": 1, + "proliferate": 1, + "protection": 1, + "prototype": 1, + "provoke": 1, + "prowess": 1, + "prowl": 1, + "quest-counters": 1, + "rabbit-kindred": 1, + "raccoon-kindred": 1, + "rad-counters": 1, + "radiance": 1, + "raid": 1, + "rally": 1, + "ramp": 1, + "rampage": 1, + "ranger-kindred": 1, + "rat-kindred": 1, + "ravenous": 1, + "reach": 1, + "read-ahead": 1, + "reanimate": 1, + "rebel-kindred": 1, + "rebound": 1, + "reconfigure": 1, + "recover": 1, + "reflection-kindred": 1, + "reinforce": 1, + "removal": 1, + "renew": 1, + "renown": 1, + "replacement-draw": 1, + "replicate": 1, + "resource-engine": 1, + "retrace": 1, + "revolt": 1, + "rhino-kindred": 1, + "rigger-kindred": 1, + "riot": 1, + "ripple": 1, + "robot-kindred": 1, + "rogue-kindred": 1, + "role-token": 1, + "roll-to-visit-your-attractions": 1, + "rooms-matter": 1, + "sacrifice-matters": 1, + "sacrifice-to-draw": 1, + "saddle": 1, + "sagas-matter": 1, + "salamander-kindred": 1, + "samurai-kindred": 1, + "sand-kindred": 1, + "saproling-kindred": 1, + "satyr-kindred": 1, + "scarecrow-kindred": 1, + "scavenge": 1, + "scientist-kindred": 1, + "scion-kindred": 1, + "scorpion-kindred": 1, + "scout-kindred": 1, + "scream-counters": 1, + "scry": 1, + "sculpture-kindred": 1, + "secret-council": 1, + "serf-kindred": 1, + "serpent-kindred": 1, + "servo-kindred": 1, + "shade-kindred": 1, + "shadow": 1, + "shaman-kindred": 1, + "shapeshifter-kindred": 1, + "shark-kindred": 1, + "sheep-kindred": 1, + "shield-counters": 1, + "shrines-matter": 1, + "shroud": 1, + "siren-kindred": 1, + "skeleton-kindred": 1, + "skulk": 1, + "skunk-kindred": 1, + "slime-counters": 1, + "slith-kindred": 1, + "sliver-kindred": 1, + "sloth-kindred": 1, + "slug-kindred": 1, + "snail-kindred": 1, + "snake-kindred": 1, + "soldier-kindred": 1, + "soltari-kindred": 1, + "soul-counters": 1, + "soulbond": 1, + "soulshift": 1, + "spawn-kindred": 1, + "spectacle": 1, + "specter-kindred": 1, + "spell-copy": 1, + "spell-mastery": 1, + "spells-matter": 1, + "spellshaper-kindred": 1, + "spellslinger": 1, + "sphinx-kindred": 1, + "spider-kindred": 1, + "spike-kindred": 1, + "spirit-kindred": 1, + "splice": 1, + "split-second": 1, + "sponge-kindred": 1, + "spore-counters": 1, + "spree": 1, + "squad": 1, + "squid-kindred": 1, + "squirrel-kindred": 1, + "starfish-kindred": 1, + "start-your-engines": 1, + "stash-counters": 1, + "station": 1, + "stax": 1, + "storage-counters": 1, + "storm": 1, + "strive": 1, + "stun-counters": 1, + "super-friends": 1, + "superfriends": 1, + "support": 1, + "surge": 1, + "surrakar-kindred": 1, + "surveil": 1, + "survival": 1, + "survivor-kindred": 1, + "suspect": 1, + "suspend": 1, + "swampcycling": 1, + "swampwalk": 1, + "sweep": 1, + "synth-kindred": 1, + "tempting-offer": 1, + "tentacle-kindred": 1, + "thalakos-kindred": 1, + "theft": 1, + "thopter-kindred": 1, + "threshold": 1, + "thrull-kindred": 1, + "tide-counters": 1, + "tiefling-kindred": 1, + "time-counters": 1, + "time-travel": 1, + "token-creation": 1, + "token-modification": 1, + "tokens-matter": 1, + "toolbox": 1, + "topdeck": 1, + "toughness-matters": 1, + "toxic": 1, + "toy-kindred": 1, + "training": 1, + "trample": 1, + "transform": 1, + "transmute": 1, + "treasure": 1, + "treasure-token": 1, + "treefolk-kindred": 1, + "tribute": 1, + "trilobite-kindred": 1, + "troll-kindred": 1, + "turtle-kindred": 1, + "tyranid-kindred": 1, + "umbra-armor": 1, + "unconditional-draw": 1, + "undaunted": 1, + "undergrowth": 1, + "undying": 1, + "unearth": 1, + "unicorn-kindred": 1, + "unleash": 1, + "valiant": 1, + "vampire-kindred": 1, + "vanishing": 1, + "varmint-kindred": 1, + "vedalken-kindred": 1, + "vehicles": 1, + "venture-into-the-dungeon": 1, + "verse-counters": 1, + "vigilance": 1, + "void": 1, + "void-counters": 1, + "voltron": 1, + "wall-kindred": 1, + "ward": 1, + "warlock-kindred": 1, + "warp": 1, + "warrior-kindred": 1, + "waterbending": 1, + "weasel-kindred": 1, + "weird-kindred": 1, + "werewolf-kindred": 1, + "whale-kindred": 1, + "wheels": 1, + "will-of-the-council": 1, + "will-of-the-planeswalkers": 1, + "wind-counters": 1, + "wish-counters": 1, + "wither": 1, + "wizard-kindred": 1, + "wizardcycling": 1, + "wolf-kindred": 1, + "wolverine-kindred": 1, + "wombat-kindred": 1, + "worm-kindred": 1, + "wraith-kindred": 1, + "wurm-kindred": 1, + "x-spells": 1, + "yeti-kindred": 1, + "zombie-kindred": 1, + "zubera-kindred": 1 + }, + "slugs": [ + "0-1-counters", + "0-2-counters", + "1-1-counters", + "adamant", + "adapt", + "addendum", + "advisor-kindred", + "aetherborn-kindred", + "affinity", "afflict", "afterlife", "aftermath", @@ -761,7 +1482,6 @@ "zombie-kindred", "zubera-kindred" ], - "source_pass": 2, "total_slugs": 735, - "warm_baseline": true + "warm": false } \ No newline at end of file