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
86 lines
3.5 KiB
Text
86 lines
3.5 KiB
Text
==========================================================================
|
|
CARD STATISTICS — 20260908T001736Z.log
|
|
==========================================================================
|
|
games: 2 our wins: 0 (0.0%) deck: /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/decklist.txt
|
|
|
|
NEVER CAST IN ANY GAME: 42
|
|
--------------------------------------------------------------------------
|
|
(dead weight, unplayable by the AI, or just never drawn in time)
|
|
Accursed Marauder
|
|
Ashnod's Altar
|
|
Assassin's Trophy
|
|
Beast Within
|
|
Binding the Old Gods
|
|
Black Sun's Zenith
|
|
Blasphemous Act
|
|
Contagion Clasp
|
|
Cultivate
|
|
Damnation
|
|
Deadly Dispute
|
|
Deadly Rollick
|
|
Farseek
|
|
Feed the Swarm
|
|
Flourishing Defenses
|
|
Goblin Bombardment
|
|
Greater Good
|
|
Grim Haruspex
|
|
Hapatra, Vizier of Poisons
|
|
Humble Defector
|
|
Kodama's Reach
|
|
Massacre Wurm
|
|
Mayhem Devil
|
|
Mazirek, Kraul Death Priest
|
|
Midnight Reaper
|
|
Mirkwood Bats
|
|
Murderous Redcap
|
|
Nature's Lore
|
|
Persistent Constrictor
|
|
Phyrexian Altar
|
|
Plague Belcher
|
|
Poison-Tip Archer
|
|
Putrid Goblin
|
|
Springbloom Druid
|
|
The Meathook Massacre
|
|
Toxic Deluge
|
|
Vandalblast
|
|
Vengeful Bloodwitch
|
|
Village Rites
|
|
Viscera Seer
|
|
Wood Elves
|
|
Yawgmoth, Thran Physician
|
|
|
|
MOST-CAST CARDS
|
|
--------------------------------------------------------------------------
|
|
card cast in avg round win% when cast
|
|
Necroskitter 2/2 R11.5 0%
|
|
The Reaper, King No More 2/2 R8.7 0%
|
|
Terminate 2/2 R9.0 0%
|
|
Nest of Scarabs 1/2 R8.0 0%
|
|
Carrion Feeder 1/2 R4.0 0%
|
|
Chandra's Ignition 1/2 R7.0 0%
|
|
Blood Artist 1/2 R7.0 0%
|
|
Skullclamp 1/2 R1.0 0%
|
|
Three Visits 1/2 R3.0 0%
|
|
Zulaport Cutthroat 1/2 R6.0 0%
|
|
Massacre Girl, Known Killer 1/2 R7.0 0%
|
|
Bedevil 1/2 R9.0 0%
|
|
Archfiend of Ifnir 1/2 R11.0 0%
|
|
Chaos Warp 1/2 R6.0 0%
|
|
Birds of Paradise 1/2 R6.0 0%
|
|
Harrow 1/2 R3.0 0%
|
|
Overseer of the Damned 1/2 R9.0 0%
|
|
Rampant Growth 1/2 R2.0 0%
|
|
Blowfly Infestation 1/2 R6.0 0%
|
|
Syr Konrad, the Grim 1/2 R10.0 0%
|
|
|
|
CAVEATS — DO NOT CUT CARDS ON THIS ALONE
|
|
--------------------------------------------------------------------------
|
|
* 2 games is a tiny sample. A card cast in 5 games has a win-rate
|
|
swing of +/-40% from noise alone.
|
|
* 'Never cast' conflates three very different things: a bad card, a
|
|
card the AI cannot use, and a card that was simply never drawn.
|
|
* Correlation only. Cards cast in LONG games look good because long
|
|
games are ones we survived -- the card didn't cause the win.
|
|
* Forge's AI is weak at combo; it under-casts combo pieces.
|
|
|
|
raw: /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/sim/20260908T001736Z-cards.json
|