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
45 lines
2.3 KiB
Text
45 lines
2.3 KiB
Text
====================================================================
|
|
FORGE SIMULATION REPORT — 4-player Commander pod
|
|
====================================================================
|
|
games completed : 2 (requested 2) seed: 20260907
|
|
decklist : /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/decklist.txt (full 100 cards)
|
|
engine : Forge 2.0.14, full rules, AI vs AI
|
|
|
|
WIN RATE
|
|
--------------------------------------------------------------------
|
|
our deck : 1/2 (50.0%) [random baseline in a 4-pod = 25%]
|
|
|
|
all players:
|
|
Reaper King No More 1 (50.0%) ############### <-- ours
|
|
Faceless Menace [C19] [2019] 1 (50.0%) ###############
|
|
Merciless Rage [C19] [2019] 0 ( 0.0%)
|
|
Arcane Maelstrom [C20] [2020] 0 ( 0.0%)
|
|
|
|
GAME LENGTH
|
|
--------------------------------------------------------------------
|
|
turns median 27 min 22 max 32
|
|
seconds median 83 total 2.8 min
|
|
|
|
HOW OUR DECK LOST
|
|
--------------------------------------------------------------------
|
|
1x life total reached 0
|
|
|
|
WHO BEAT US (winner, in games our deck lost)
|
|
--------------------------------------------------------------------
|
|
1x Faceless Menace [C19] [2019]
|
|
|
|
CAVEAT — READ THIS BEFORE TRUSTING THE WIN RATE
|
|
--------------------------------------------------------------------
|
|
Forge's AI is heuristic and, by its own documentation, WEAK AT COMBO
|
|
decks. Ours is a combo/aristocrats deck, so the AI systematically
|
|
under-plays it: it will miss sac-loop lines a human would see.
|
|
Read this as a FLOOR on the deck's power, and as proof the deck
|
|
functions and its cards interact — not as a power rating.
|
|
Opponents are stock precons, which are roughly bracket 2.
|
|
|
|
====================================================================
|
|
decklist : /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/decklist.txt
|
|
full log : /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/sim/20260908T001736Z.log (every game, all Forge output)
|
|
raw data : /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/sim/20260908T001736Z.json
|
|
this report: /home/markdoeswork/mtg/reaper-king-no-more/decks/aggro-hate/sim/20260908T001736Z.txt
|
|
====================================================================
|