# Reading the card explains the card.
deckmaste.rs tests the long-standing intuition that Oracle text can serve as an executable source language for Magic: it builds the whole path — parser, typed intermediate form, rules engine — and measures, card by card, where recovery holds and where it fails.
A rules engine should scale with the number of distinct semantic constructions in Magic, not the number of cards. Every construction is implemented once, as shared rules machinery; a card is a composition of constructions, never its own code. Oracle templating enforces that economy in the text; the engine mirrors it in code.
Oracle text is the authoritative source input. Parsing produces an English syntax tree; recovery compiles it into a canonical typed intermediate form — the single information-complete representation from which spelling renders English back and lowering compiles the AST the engine executes.
Oracle text
⇅ parse / render
deckmaste_english
⇅ recover / spell
deckmaste_semantics ── lower ──► deckmaste_core
canonical typed IR engine ASTRecovered card descriptions are statically typed: unsupported text remains an explicit coverage gap, legitimate ambiguity remains a visible set of candidates, and ill-formed structure cannot reach runtime behavior. Rules-bearing code cites the Comprehensive Rules by number, and repository tooling validates every citation against the rules text.
Concretely, the recurring reductions:
$ git clone https://github.com/msmorgan/deckmaste.rs $ cd deckmaste.rs $ cargo run
cargo run launches the interactive terminal client: a hotseat game with a live board across every zone, where you drive priority, targeting, attackers and blockers, ability activations, and mana payment from the keyboard. On first run it downloads the source snapshot and generates the demo corpus; subsequent runs reuse those local files.
How much of the card pool can complete both paths — parse → render and parse → play — is the open, card-by-card question the project exists to measure.