Pitch 02 · built 2026-07-08

The MTG Set Review Engine

The Marvel review pipeline was set-agnostic in shape but hardcoded to msh/msc in eight scripts. It is now driven by one registry, so pointing it at the next set is a config block plus one command, not a from-scratch project.

One command per set

# add the set to the registry (scaffolded for you)
python3 new_set.py --key edge --name "Edge of Eternities" \
    --std-code eoe --cmd-code eoc --slug edge

# then build every artifact
MTG_SET=edge python3 run_set_review.py --set edge

Output: two set-review boards, a spec-target sheet, a spot-check audit, a sealed deckbuilder, and a dossier, the same five-artifact set Marvel ships.

What changed

FileRoleState
set_config.pyThe registry. Single source of truth for which set, its codes, queries, and route slugs.new
fetch_cards.pyCard pull. Now reads card_queries() from the registry.parametrized
fetch_signals.pyPrice/EDHREC pull. Now reads signal_queries() from the registry.parametrized
run_set_review.pyOrchestrator. One command runs the whole pipeline for the active set.new
new_set.pyScaffolder. Emits a paste-ready registry block and the build sequence.new

Reproduction verified: with the default set, card_queries() and signal_queries() resolve byte-identical to the old hardcoded values, so the live Marvel boards are untouched.

The pipeline

  1. fetch_cards.py external pull the card pools from Scryfall
  2. grade fan-out manual, per-set eval_workflow.js batches oracle text to a Claude reviewer → evals_merged.json
  3. fetch_signals.py external today's prices + EDHREC
  4. spec_rank.py → build_dashboards.py → build_spec_dashboard.py
  5. refresh_limited_v2.py → build_limited_deckbuilder.py → build_dossier_html.py

The grade step is inherently per-set and is not automated, it reads each card's rules text. The orchestrator stops with a clear message if grades are missing, so a board never ships ungraded. The per-set display copy (titles, blurbs) in the build scripts is edited once per new set; the scaffolder reminds you.

Honest limits

External pulls are parametrized; display copy is not yet. A brand-new set needs its titles and intro blurbs set once in build_dashboards.py / build_spec_dashboard.py / build_limited_deckbuilder.py. Folding those into the registry is the next tightening pass.

No new set was piloted end to end yet, since that needs a real spoiled set and its grade fan-out. The engine is proven on Marvel and dry-tested on a hypothetical edge set.