Migrates the reaper-king-no-more proof of concept into decks/reaper-king-no-more/
as the first deck under a shared tools/ engine, so the repo can hold many
Commander decks instead of one implicit one.
- tools/deckctx.py: new shared DeckContext, resolves --deck / $MTG_DECK / cwd,
loads a deck's config.yaml, and derives color identity from the commander's
own card data (never a hardcoded color combination).
- cards.py: drop the JUND=frozenset("BRG") constant; jund_legal() renamed to
identity_legal(card, identity); DB() takes an explicit blacklist_path since
the blacklist is per-deck, not shared.
- combos.py, roles.py, similar.py, similar_text.py, bracket_check.py: take
--deck, use the deck's real identity instead of Jund/BRG.
- power.py, card_stats.py, forge_report.py: OURS deck-name constant now comes
from the deck's config (name: / commander), matched via DeckContext instead
of hardcoded "Reaper King No More".
- to_dck.py, batch_run.py, ab_test.py: .dck filename and [metadata] Name= are
derived from the deck (slug / config name), not a hardcoded "reaper.dck".
- generate.py: RECIPES and make_variants.py's VARIANTS (deck-specific
hypotheses) moved out of Python into decks/reaper-king-no-more/variants.yaml;
protected cards now come from config.yaml's protected: list instead of a
hardcoded set.
- New tools/mtg dispatcher: `tools/mtg decks/<name> <tool> [args...]` runs any
tool against any deck without cd-ing into its directory.
- data/ (Scryfall/MTGJSON/Spellbook bulk, ~1.2GB, gitignored) and embeddings.npz
move to the repo root as shared, commander-format-wide data.
- docs/howto.md: moved from the deck dir (it documents the tool, not the deck)
and updated its example commands to the real generalized CLI.
- README.md: rewritten to describe the multi-deck repo and point at
decks/reaper-king-no-more as the reference example.
Verified after the change: bracket_check, combos, and roles against
reaper-king-no-more reproduce the exact PASS/11-combos/role-profile numbers
from before the move; generate.py --list now loads recipes from YAML;
make_variants.py reproduces all 7 hand-curated variants including the
mikaeus FAIL control case; to_dck.py derives the right Name= and filename;
variant.py and compare.py reproduce decks/README.md's original numbers
exactly. The original POC at ~/mtg/reaper-king-no-more is untouched.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPKgLYpMR8szWNFXyK1XNu
92 lines
1.7 KiB
Text
92 lines
1.7 KiB
Text
# low-curve
|
|
# Avg MV is 3.02 and the engine lands ~T6. Cut the top of the curve entirely -- does the deck come online sooner and win more?
|
|
|
|
# Commander
|
|
1 The Reaper, King No More
|
|
|
|
# Main
|
|
1 Hapatra, Vizier of Poisons
|
|
1 Blowfly Infestation
|
|
1 Nest of Scarabs
|
|
1 Necroskitter
|
|
1 Yawgmoth, Thran Physician
|
|
1 Flourishing Defenses
|
|
1 Obelisk Spider
|
|
1 Plague Belcher
|
|
1 Contagion Clasp
|
|
1 Black Sun's Zenith
|
|
1 Murderous Redcap
|
|
1 Putrid Goblin
|
|
1 Viscera Seer
|
|
1 Carrion Feeder
|
|
1 Ashnod's Altar
|
|
1 Phyrexian Altar
|
|
1 Goblin Bombardment
|
|
1 Yahenni, Undying Partisan
|
|
1 Woe Strider
|
|
1 Blood Artist
|
|
1 Zulaport Cutthroat
|
|
1 Vengeful Bloodwitch
|
|
1 Poison-Tip Archer
|
|
1 Mirkwood Bats
|
|
1 Mayhem Devil
|
|
1 Syr Konrad, the Grim
|
|
1 Bastion of Remembrance
|
|
1 Mazirek, Kraul Death Priest
|
|
1 The Meathook Massacre
|
|
1 Massacre Girl, Known Killer
|
|
1 Humble Defector
|
|
1 Midnight Reaper
|
|
1 Grim Haruspex
|
|
1 Village Rites
|
|
1 Deadly Dispute
|
|
1 Greater Good
|
|
1 Beast Within
|
|
1 Chaos Warp
|
|
1 Terminate
|
|
1 Bedevil
|
|
1 Assassin's Trophy
|
|
1 Damnation
|
|
1 Toxic Deluge
|
|
1 Vandalblast
|
|
1 Cultivate
|
|
1 Kodama's Reach
|
|
1 Farseek
|
|
1 Nature's Lore
|
|
1 Three Visits
|
|
1 Birds of Paradise
|
|
1 Sakura-Tribe Elder
|
|
1 Persistent Constrictor
|
|
1 Skullclamp
|
|
1 Rampant Growth
|
|
1 Harrow
|
|
1 Wood Elves
|
|
1 Springbloom Druid
|
|
1 Binding the Old Gods
|
|
1 Malakir Cullblade
|
|
1 Slaughter Specialist
|
|
1 Bloodchief Ascension
|
|
1 Nurgle's Rot
|
|
1 Chevill, Bane of Monsters
|
|
1 Command Tower
|
|
1 Path of Ancestry
|
|
1 Exotic Orchard
|
|
1 Blood Crypt
|
|
1 Overgrown Tomb
|
|
1 Stomping Ground
|
|
1 Blackcleave Cliffs
|
|
1 Blooming Marsh
|
|
1 Copperline Gorge
|
|
1 Savage Lands
|
|
1 Jungle Hollow
|
|
1 Bloodfell Caves
|
|
1 Rugged Highlands
|
|
1 Ziatora's Proving Ground
|
|
1 Bojuka Bog
|
|
1 Castle Locthwain
|
|
1 Llanowar Wastes
|
|
1 Karplusan Forest
|
|
1 Yavimaya, Cradle of Growth
|
|
8 Swamp
|
|
5 Forest
|
|
4 Mountain
|