How the Cube Doctor actually works.
Calibration so far: MTGO Vintage Cube returns Legendary 4.40 with all 14 surfaced findings muted as tagging artifacts; Lucky 7's (the 777-slot Lucky Paper reference cube) returns Legendary 4.30 with zero actionable cuts. A broader calibration table is in progress. The rest of this page covers what's actually under the hood — which numbers are AI-derived, where the canonical ratios come from, what the sim does and doesn't model, where the role taxonomy hits its limits, and the actual prompts behind the per-card data.
What's AI-derived, what's not.
Every number that shows up in a Cube Doctor report flows from one of three sources: Gemini's nightly per-card enrichment, hand-coded heuristics, or pure-CPU simulation. Knowing which is which changes how much weight any single finding deserves.
| Layer | Source | Notes |
|---|---|---|
| Canonical role-ratio targets (Aristocrats 1:1 outlet:payoff, etc.) | Human | Heuristics from cube-design literature (Lucky Paper, MTGGoldfish, Tom LaPille's WotC columns). Hand-edited; not yet empirically tuned. |
| Per-card role classifications (which cards are payoffs / enablers / outlets in each archetype) | AI | Gemini batch API, 95 cards per request. Re-runs nightly on new printings. |
| Per-card power level (the 0–10 used in Power Band, Wheel Predictor) | AI | Gemini batch API, same nightly pass. |
| Per-card mechanical summary, synergy explanations, signature partners | AI | Gemini batch API, same nightly pass. |
| The simulator (draft order, deck construction, DQI computation) | Code | Pure-CPU TypeScript port of Cardivore's on-device Dart sim. No model calls. |
| Drafter policies (balanced / greedy / synergy) | Code | Hand-coded heuristics; see section 3. |
| Format detection, color-balance computation, signpost detection | Code | Pure-CPU analyzers. |
| Doctor's read prose, weakness write-ups, cuts-to-consider list (only when the AI box is checked) | AI | Claude Opus, per run. Deterministic runs skip this entirely. |
The practical implication: a finding like
"Aristocrats payoff:enabler is 0.4:1 vs canonical 1:1" depends
on both the AI layer and the human layer. The
0.4 comes from Gemini's bucketing of each
card in your cube; the 1:1 comes from a
hand-edited heuristic in our analyzer. Either layer can be wrong
about your specific cube. The triage system — which classifies each finding
as actionable, monitor, or tagging artifact
before it hits the report — is the third layer that catches cases
where the first two disagree on a card the cube genuinely supports.
MTGO Vintage Cube returned 14 findings; the triage correctly muted
all 14 as tagging artifacts. That's the layer that earns the
tool the right to flag anything.
The DQI formula.
Deck Quality Index — the 0–5 score on every report — is a weighted composite computed per simulated deck, then averaged across the ~200 maindecks built across the run. The components and weights are explicit:
| Component | Weight | What it measures |
|---|---|---|
| Base power | 30% | The seat's average rawPowerLevel across the cards it actually played maindeck, rescaled to 0–1. A seat full of 7.5-power cards scores higher than a seat full of 4.5s. |
| Synergy / theme satisfaction | 25% | Maindeck composition: 15–18 creatures earns the full bonus, 12–20 earns half; 5–10 non-creature spells earns the spell bonus; bomb pools add a variance bump. Penalizes both "no creatures" and "30 creatures" decks the simulator's deckbuilder occasionally produces. |
| Curve conformity | 15% | Deviation from the simulator's target curve (front-loaded toward CMC 2–3 with tail-off at 5+). Lower deviation = higher contribution. A deck with eight 6-drops scores poorly here. |
| Interaction density | 15% | Maindeck removal count, saturating at 5+. A 40-card deck with 2 removal spells gets 40% of the interaction component; a deck with 5+ removal gets the full 15%. |
| Mana consistency | 15% | Color count + fixing-land count. Mono-color decks default to 1.0. Two-color decks need ≥6 fixing to hit 1.0, otherwise sit at 0.75–0.95. Three-color decks need ≥9 fixing for 0.95. Four+-color decks penalize hard unless ≥14 fixing. |
Per-seat DQI is the weighted sum of those five components, then multiplied by 5 to land in the 0–5 range. A tiny deterministic seed factor (~0.01 × seat index) is added so identical seats with identical pools don't collide on the same score. The cube's overall DQI is the mean across all seats across all simulated drafts (~200 maindecks per run by default).
The components above are the same in deterministic and AI runs — they're pure-CPU computations on the simulator's output, no model involvement. The AI box only changes the prose layer on top of the same number.
To stop the verdict tier from over-promising on cubes whose color balance is broken, the headline tier (Legendary / Elite / Solid / etc.) is gated on a separate color coverage metric. A color counts as "supported" when at least 10% of the pool's cards have that color in their casting cost. The analyzer computes the cube's expected color palette from the archetype list (WUBRG for the synthesized 10-pair fallback; the union of the author's archetype colors for Cardivore cubes), then checks which of those colors clear 10% density.
- Legendary requires every expected color supported.
- Elite tolerates one undersupplied color; if so, the verdict tag names which (e.g. "Elite — tightly tuned (G undersupported)").
- Solid tolerates up to two.
- Below Solid, coverage doesn't gate further.
A color below the same 10% threshold also gets filtered out of the Archetype Playability section entirely — the orchestrator's drafters can't actually anchor a 2-color archetype as a primary lane when the second color is splash-thin. The playability percentages you see are computed only over color-feasible archetypes; broken color pairings are dropped before the playability math runs. Why 10% and not higher? Calibration: the full MTGO Vintage Cube ships with White at 13.7% — natural variance in a well-tuned 5-color cube — and a 15% bar would falsely demote it. Vintage with green stripped sits at G=7%, well below the 10% bar.
A deliberately 4-color or mono-color cube isn't penalized by this gate if its author-defined archetypes only reference the colors it actually has — the gate compares to the cube's own stated expectation, not a hardcoded 5-color baseline. The synthesized 10-pair fallback that CubeCobra submissions use does assume 5 colors, so a 4-color cube submitted via CubeCobra (without Cardivore-style structured archetypes) will tier-cap at Elite. That's a deliberate trade-off: the tool can't read minds about a cube's intended color count.
Where the role-ratio targets come from.
Below are the full canonical role-ratio targets the analyzer compares each cube's actual counts against. They're explicit heuristics, not measurements — and they're the half of the equation that's most likely to need tuning as the tool sees more cubes.
| Archetype | Expected ratio | Why |
|---|---|---|
| aristocrats | outlet 1.0 : payoff 1.0 | Starve either side and the engine bricks: outlets without payoffs are card disadvantage, payoffs without outlets sit in hand. |
| ramp | enabler 2.0 : payoff 1.0 | Reviewers consistently flag "lots of mana, nowhere to spend it" or "payoffs but no acceleration." |
| spells-matter | payoff 1.0 : enabler 3.0 | Front-loaded — the deck wants 3 cheap spells per payoff to actually trigger the engine. |
| reanimator | enabler 1.0 : payoff 1.5 : outlet 1.0 | Discard / mill ≈ big creatures, with at least one tutor. |
| tribal | payoff 1.0 : enabler 4.0 | A couple of lord-style payoffs over a deep creature bench. |
| combo | enabler 1.0 : payoff 1.0 : finisher 0.5 | Both halves plus tutors to assemble. |
| control | removal 1.0 : draw 0.5 : finisher 0.3 | Removal-heavy with card advantage and a small finisher count (1–2 closers in a 40-card draft deck). |
| aggro | payoff 1.0 : enabler 0.5 | Pump / anthem payoffs over haste / evasion bodies. |
| tokens | payoff 1.0 : enabler 2.0 | Payoffs (anthems, sacrifice synergies) per token producer. |
| graveyard | outlet 1.0 : payoff 1.5 | Outlets feed; payoffs reward. |
| voltron | payoff 1.0 : enabler 3.0 | One payoff (commander / aura target) plus N protection / equipment. |
| artifacts | payoff 1.0 : enabler 2.0 | Affinity-style payoffs per ~2 cheap-artifact enablers. |
| midrange | removal 1.0 : payoff 2.0 | The "no real ratio" archetype — generic balance check. |
The tuning roadmap
The honest version: the ratios will eventually be tuned, and here's what that work looks like when we get to it.
- The corpus — the ~25 cubes Lucky Paper / Riptide Lab / MTGO have publicly designated as well-curated references (Vintage Cube, Lucky 7's, Andy Mangold's, Anthony Mattox's, Modern Cube, Steve Mann's, etc.), plus ~50 randomly-sampled CubeCobra cubes ≥500 cards with ≥30 days of activity. Mix of "known great" and "known uncurated."
- The objective. For each archetype's ratio, find the value that minimizes (false-positive actionable findings on the known-great cubes) + (false-negative actionable findings on the known-uncurated cubes). The first term keeps us from telling Anthony Mattox his cube needs four more aristocrats payoffs; the second keeps us from telling a new designer their cube is fine when it visibly isn't.
- Success criteria. ≥80% of the known-great cubes show 0–2 actionable role-ratio findings after triage; ≥70% of the known-uncurated cubes show ≥1 actionable finding that survives triage and matches a human reviewer's call. We'll publish the calibration table here when we cross both bars.
Until then, expect role-ratio findings to occasionally fire on cubes that don't need them (the triage layer catches most, not all) and occasionally miss real structural gaps on cubes the analyzer's coarse archetype taxonomy can't see. Section 5 has more on the taxonomy limits.
The triage path is what makes findings shippable despite the ratios being heuristic. After the analyzer surfaces a finding, a secondary pass — LLM-driven in AI runs, rule-based in deterministic runs — classifies each one as actionable (the cube probably wants this fixed), monitor (real imbalance, but the sim shows the lane works anyway), or tagging artifact (the finding fires only because of how cards got bucketed, not because the cube has a real gap). The MTGO Vintage Cube result — 14 findings surfaced, 0 actionable, 14 muted as artifacts — is the calibration test that says the triage works.
What the drafter actually does — and what it doesn't.
The sim doesn't play games. It drafts and constructs decks; DQI is a synthetic deck-quality score, not win-rate. Knowing what the drafter can't see is more useful than knowing what it can.
The 70 / 15 / 15 mix
Every 8-player draft pod runs a mix of three policies:
- Balanced (70%) — the AdaptivePolicy. Weights both raw card quality and archetype fit; adjusts its mix as the pool develops. The closest the bots get to a competent human drafter doing rate-and-signal reading.
- Greedy (15%) — weights raw card quality and largely ignores synergy. Closes the gap on "what would a new drafter forced to value-pick everything do?"
- Synergy (15%) — heavily weights archetype fit once it commits to a color pair. Closes the gap on "what would a drafter who's already 5 picks into Storm do?"
The mix is a calibration compromise. A 100% balanced sim would underrate sleepers (every bot picks generic value first, so payoff cards wheel and the analyzer thinks they're dead). A 100% synergy sim would underrate generic value cards (every bot forces archetype too early, so Lightning Bolt and Mulldrifter look "weak" because no one picks them). The mix is set to where it is so neither failure mode dominates.
What the drafter doesn't model
- Castability for fragile multi-color. The
drafter picks 3+ color cards on raw power; the deck-builder
evicts them when the mana base can't support them. Result:
cards like Sphinx of the Steel Wind, Currency Converter,
Mana Crypt sometimes show "high pick rate, ~0% maindeck"
patterns that look like cube traps but may be the sim
getting castability wrong. That's exactly why the Trap
Detector now ships a
⚠pill on 3+ color cards with 0% conversion, and why the Traps & Sleepers scatter has a conversion-rate veto that won't label a card with ≥70% maindeck conversion as a Trap or Dead Weight no matter what its DQI looks like. - Sideboarding. The sim doesn't simulate sideboard plans. Cards that are "great in a sideboard" register as drafted-but-not-maindecked.
- Metagame knowledge. Bots don't know "everyone always picks this first" or "this card is hate against the dominant strategy." They draft each pack from scratch.
- Player skill variance. All 8 seats run the same policy mix. No "good drafter vs bad drafter" modeling.
- Real win-rate. No games get played. DQI is a deck-quality proxy (threat density, answer density, curve, consistency) — well-correlated with win-rate in practice but not the thing itself.
Is the 6-role taxonomy enough?
Short answer: it's enough for most cubes and not enough for archetypes built on sub-roles the taxonomy flattens.
The role-ratio analyzer buckets cards into six roles per
archetype: outlet,
payoff,
enabler,
finisher,
removal,
draw. That's enough to cleanly
describe aggro, midrange, control, ramp, tokens, voltron,
generic spells-matter, generic tribal, artifacts, and
aristocrats.
Where it gets coarse
The cases where the taxonomy flattens distinct mechanics into one role label:
- Storm wants cost-reducer +
mass-draw + kill-spell as three distinct
roles. We flatten cost-reducer and mass-draw into
enabler, and the kill spell intofinisher. The analyzer can say "your enabler density is good" but it can't say "you have plenty of cost-reducers but no mass-draw" — even though that's the actual problem on most Storm cubes. - Aristocrats wants
death-trigger-payoff + sac-outlet +
token-generator as three slots. We ship
payoff+outlet+enabler, which captures the loop coarsely but misses the token-generation angle that most aristocrats cubes are actually fueled by. - Reanimator wants discard-outlet
and self-mill as distinct sub-roles within
outlet— they're not interchangeable in practice, but the analyzer treats them as one bucket.
If your cube is built around an archetype that needs sub-roles, expect the role-ratio analyzer to be less informative on that lane than on a generic midrange one.
What we do have at finer granularity
Every card in the database carries an
archetypeSupport map and a
synergyExplanations[] list from
the per-card enrichment. Each entry is an archetype-tag plus
a one-line why — so Goblin Electromancer has
explicit explanations for
"spells-matter (cost reduction enables instants /
sorceries)" and "control (cantripping a 2/2 body)".
When the AI-mode Doctor reads the cube, it sees these
per-card explanations and can reference them in prose. The
role-ratio analyzer doesn't currently consume them at
sub-role granularity. That's the next iteration, not
promised on a date.
The reader instruction follows: Storm-heavy cubes
tend to get the fewest actionable findings of any archetype
in our taxonomy, because we know the sub-roles are
flattened. If your cube is built around Storm,
read the role-density section as confirming the bucket has
cards in it — not as confirming the deck works. Same for
Aristocrats cubes that lean on token generation, or
Reanimator cubes that distinguish discard-outlets from
self-mill. The Doctor's prose layer (AI mode) does the
finer reading when the AI box is checked, because the
per-card synergyExplanations
field carries the sub-role detail the analyzer doesn't yet
consume.
How the AI was prompted.
Section 1 listed which numbers come from Gemini. This section shows what we actually ask it. Putting it on a methodology page so anyone who wants to assess "are these judgments shaped by reasonable questions" can read the prompts verbatim instead of guessing.
The framing
Every card in our database is enriched once by the same prompt (and re-run when we ship a new schema version). The prompt opens by framing the analyst's role and what their output is used for:
You are an expert Magic: The Gathering card analyst specializing
in cube and constructed formats.
Analyze this card for deck building and cube construction. Your
output is consumed by the Cardivore Cube Doctor — a tool that
diagnoses cubes and proposes swaps. Every field you fill will be
read by downstream code OR quoted directly by the cube doctor's
narrator when explaining recommendations to a human cube builder.
The OUTPUT SHAPE is enforced by the API contract — you don't need
to worry about field names, types, enum values, or whether to use
empty arrays vs. null. The system handles that. Your job is to
fill each field with the SUBSTANTIVE content that makes the
analysis useful. Output shape is enforced via Gemini's structured-output mode against a Pydantic schema — the model can't return malformed JSON or invalid enum values; the API rejects them before they hit our pipeline. The prompt only carries semantic guidance.
identityStrength
(e.g. 0.95) overstates the underlying confidence — expect
~±0.05 noise on continuous outputs and ~1–5% flip-rate on
boolean outputs like comboAnchor
run-to-run. Re-running with averaging is on the roadmap;
we haven't measured the actual variance ourselves yet and
we'll publish the result here when we do.
The load-bearing field definitions
Most of the per-card numbers that show up in your report come from these five fields. Each one is asked for with explicit examples and explicit failure modes. Verbatim from the prompt:
rawPowerLevel (0–10 scale)
rawPowerLevel — overall impact in a typical cube environment. bandPlacement (enum)
bandPlacement — pick the closest fit: low (peasant/pauper-tier),
mid-low, mid (typical cube median), mid-high, high (vintage-adjacent),
vintage (restricted/banned-tier in lower formats). This REPLACES the
cube doctor's hand-tuned power-ceiling clip — picking the wrong band
ships a card into a cube it doesn't belong in. rawPowerLevel distribution
compresses near the floor — a Lightning Bolt that's the
best removal in a Peasant Cube still reads as a mid-4.0,
not a 9.0, because Gemini is rating against vintage, not
against the cube it's actually in. Findings on those cubes
should be weighted accordingly.
identityStrength (0–1)
identityStrength (0-1) — how strongly this card SIGNALS lane
identity to a drafter looking at it in pack 1. Distinct from
signpostLevel: a payoff might score high signpostLevel without
strongly signaling the deck (utility synergy glue). Spider Spawning
would be ~0.95 (obvious lane signal); Counterspell ~0.2 (plays in
every Blue deck). comboAnchor (boolean)
comboAnchor — true iff this card has an obvious 2-card combo it's
the lynchpin for. Splinter Twin = true; Lightning Bolt = false.
Powers the cube doctor's micro-combo scanner directly — false
positives WILL get surfaced as cube preservation flags, so be
conservative. synergyExplanations (top-3 archetype tags, with reasons)
synergyExplanations — for the TOP 3 synergyTags, a {tag, why}
object explaining HOW the card fits the tag in 1 sentence. For
Blood Artist: {"tag":"Aristocrats","why":"Triggers on every
creature death, draining 1 from the opponent."}. The cube doctor
narrator quotes these directly so rationales reference REAL
mechanics instead of templated "fits the aristocrats theme"
boilerplate. Empty when synergyTags is empty. replacedBy (strictly-better card names)
replacedBy — strictly-better alternatives in the same role.
Lightning Strike → ["Lightning Bolt"]. Cancel → ["Counterspell",
"Mana Leak", "Negate"]. Empty when this card IS the format
reference or has unique modes nothing else matches. Why this matters for findings
When a report says "Aristocrats payoff:enabler is 0.4:1,"
the 0.4 rolls up from per-card
synergyExplanations + an
archetypeSupport map populated
by the same prompt above. When the Power Band chart shows
a card sitting in the high-power outlier band, that's the
rawPowerLevel field. When the
micro-combo scanner flags a card as a combo piece, that's
comboAnchor.
Reading the prompts lets you assess whether the questions we're asking Gemini are the right questions to ground the downstream analysis. They're explicit, they ship working examples, and they call out specific failure modes the model needs to avoid. They're not perfect; the per-card enrichment occasionally mislabels cards (we've seen Goblin Electromancer's "spells-matter (cost reduction)" come back as a generic "control" tag, for instance). When that happens the role-ratio finding it drives gets flagged by the triage layer in most cases. When it doesn't get caught there, it ends up in a tagging-artifact bucket on the report — which is the visible failure mode the inner ring can dunk on, and we'd rather you do than not.
What's changed.
The recent methodology-affecting changes, newest first. Each entry: what changed, what triggered the change. The tool isn't static — when a reviewer or a run surfaces a credibility crack, the fix tends to ship inside a day.
| Date | Change | Trigger |
|---|---|---|
| 2026-05-14 | DQI ladder recalibrated and the "run clean" lede gated on tier. Fourth-tier floor raised 3.00 → 3.30 and renamed "Above average" → "Mid — draftable but unremarkable." The hero lede no longer falls through to "The Doctor found this cube to run clean" on deterministic runs — the deterministic processor now lifts the buildDiagnosis() top weaknesses onto the report, and the run-clean string is gated on DQI ≥ 3.50. | Two deliberately-bad cubes submitted as discriminators (DQI 2.9 and DQI 3.1) both shipped reports reading "The Doctor found this cube to run clean," and the 3.1 cube tier-labeled "Above average" — both wrong. The lede bug was a hardcoded empty topWeaknesses in the deterministic processor; the tier-labelling overpromised because the 3.00 floor was below the published-cube median of 3.5–3.7. The cache version bumped v6 → v7 so existing baselines refresh. |
| 2026-05-13 | Color-coverage gate on the verdict tier. Legendary now requires every expected color (from the archetype list) at ≥ 10% pool density; one missing color caps the tier at Elite with a "(X undersupported)" tag. A color below 10% density is also filtered out of Archetype Playability entirely. Color-coverage strip surfaced in the hero block above the lede. | Calibration discriminator: a Vintage Cube with green stripped still read as "Legendary 4.4" because DQI averages drafted-deck quality and the WUBR decks were strong on their own. The tool was telling the truth about deck quality but lying about the cube's coverage. Coverage is now a separate gate. |
| 2026-05-11 | This methodology page (sources table + DQI breakdown + tuning roadmap + power-anchoring + two-mode caveat + variance disclosure). | Inner-ring critique called out that the page admitted limits without showing the evidence behind the claims it did make. |
| 2026-05-11 | Multi-copy cube disclosure. Cube-size pill shows "777 (732 unique · 45 multi-copy)" when raw input differs from unique-card count; simulator pool honors multiplicity. | Lucky 7's run showed 732 cards analyzed without explaining the 45-slot gap. Reviewer flagged it as looking like data loss. |
| 2026-05-10 | DQI tier ladder locked at canonical thresholds (Legendary 4.20+, Elite 3.85+, Solid 3.50+, Above average 3.00+, Needs work < 3.00). Verdict labels and methodology prose match the same five tiers. (Fourth tier later renamed Mid and floor raised to 3.30 on 2026-05-14; see top of changelog.) | Lucky 7's returned 4.30 but the prior prose ceiling was "~4.2" and "Legendary" was implicit. Reviewer correctly flagged the inconsistency. |
| 2026-05-10 | Conversion-rate veto on Trap / Dead Weight labels. A card with ≥70% maindeck conversion can no longer be labeled Trap or Dead Weight, regardless of DQI. | MTGO Vintage Cube run labeled Mana Crypt as "Trap" and Currency Converter (87% MD) as "Dead Weight." DQI was contradicting itself against the conversion-rate metric on the same card. |
| 2026-05-10 | Compression-aware quadrant labels. When a cube's DQI spread sits inside the documented sim-noise band (~0.30 across all cards), Premium/Sleeper/Trap/Dead Weight labels are suppressed and the scatter shows the cloud without category coloring. | Same MTGO Vintage Cube run — cards clustered in a 0.44 DQI band, mostly 0.15–0.20, which meant quadrant labels were noise being promoted to category labels. |
| 2026-05-10 | Per-row ⚠ "sim artifact?" glyph on Trap Detector rows when a card is 3+ color, drafted ≥100 times, and never maindecked. | Same Vintage Cube run — Sphinx of the Steel Wind, Darigaaz Reincarnated, Kess, Korvold, Leovold each picked 200+ times with 0% conversion. Pattern is the canonical "sim drafter mishandles castability" case; flagging it lets the reader weight the finding accordingly. |
| 2026-05-10 | Archetype-viability bar chart switches to a zoomed scale when the per-archetype DQI spread is tight (< 0.20). Color tier (good/ok/low/bad) still tracks the absolute value; the bar length tracks position within the cube's range. | Lucky 7's archetype playability ranged 4.14–4.37 of 5.00 — the linear 0–5 chart rendered every bar at ~85% full and looked low-resolution. |
| 2026-05-10 | Triage layer's findings classification (actionable / monitor / tagging artifact) shipped, gating role-ratio findings before they hit the report. | Without triage, role-ratio findings fired on cubes that didn't need them. The triage layer is what makes the analyzer's heuristic ratios shippable on heavily-iterated cubes. |
| 2026-05-08 | Section reorder: AI signal (Doctor's read, Signposts, Weaknesses, Cuts) leads; sim diagnostics follow. | Earlier layout had commodity charts above the AI prose, making the report read as "another stats dashboard" instead of leading with the differentiated finding. |
| 2026-05-06 | Deterministic ("Skip-the-AI") run mode shipped as the default. 500-draft sim + every pure-CPU analyzer; no LLM calls, no daily-cost cap, no per-IP rate limit. | The full AI pipeline (Claude Opus agent loop) costs ~$1.50 per run and takes 5–15 minutes. The deterministic mode covers the underlying math at $0 marginal cost in ~30 seconds. |
We list the page change as the first row deliberately — if the methodology evolves, you should be able to see the changes here.
Questions, corrections, gripes
If a ratio reads wrong on your cube, a sim assumption looks off, or the role taxonomy is hiding something important about a specific archetype you care about — we want to hear about it. The Cardivore app has an in-app feedback channel that comes straight to us; bring your reasoning and ideally a cube link we can run against the change.