Methodology

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.

01 · Sources

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.

None of this should be a surprise on a methodology page. Tools that hide their AI dependencies lose credibility the moment someone reads the source. Tools that surface the split honestly let the reader weight each finding by what's actually under it. That's the whole pitch here.
02 · How DQI is computed

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).

What this means for reading a 4.40. A DQI of 4.40 across the cube means the average simulated deck scored 88% across the weighted composite. To break 4.40, a cube has to consistently produce decks with high per-card power and sensible creature/spell splits and well-shaped curves and enough removal and manageable mana bases. Vintage Cube clears 4.40; most published cubes land in the 3.3–3.9 band where one or two components are noticeably weaker than the others. A 5.0 would require every simulated deck to max every component — mathematically unreachable on a finite cube pool.

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.

DQI measures deck quality, not cube coverage. DQI averages the quality of decks the drafters built. A 5-color cube with one color stripped out (say, you yank green from the MTGO Vintage Cube) still produces strong WUBR decks — DQI stays near 4.4. That's mathematically correct but misleading as a verdict, because 7% of the cube is now stranded in an unsupported color.

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.

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.

03 · Canonical ratios

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
aristocratsoutlet 1.0 : payoff 1.0Starve either side and the engine bricks: outlets without payoffs are card disadvantage, payoffs without outlets sit in hand.
rampenabler 2.0 : payoff 1.0Reviewers consistently flag "lots of mana, nowhere to spend it" or "payoffs but no acceleration."
spells-matterpayoff 1.0 : enabler 3.0Front-loaded — the deck wants 3 cheap spells per payoff to actually trigger the engine.
reanimatorenabler 1.0 : payoff 1.5 : outlet 1.0Discard / mill ≈ big creatures, with at least one tutor.
tribalpayoff 1.0 : enabler 4.0A couple of lord-style payoffs over a deep creature bench.
comboenabler 1.0 : payoff 1.0 : finisher 0.5Both halves plus tutors to assemble.
controlremoval 1.0 : draw 0.5 : finisher 0.3Removal-heavy with card advantage and a small finisher count (1–2 closers in a 40-card draft deck).
aggropayoff 1.0 : enabler 0.5Pump / anthem payoffs over haste / evasion bodies.
tokenspayoff 1.0 : enabler 2.0Payoffs (anthems, sacrifice synergies) per token producer.
graveyardoutlet 1.0 : payoff 1.5Outlets feed; payoffs reward.
voltronpayoff 1.0 : enabler 3.0One payoff (commander / aura target) plus N protection / equipment.
artifactspayoff 1.0 : enabler 2.0Affinity-style payoffs per ~2 cheap-artifact enablers.
midrangeremoval 1.0 : payoff 2.0The "no real ratio" archetype — generic balance check.
Honest caveat. These are starter expectations from cube-design writing, not measurements against real cube data. Treat any single ratio finding as a starting hypothesis, not a verdict.

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.

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.

The two modes can disagree on classification. In AI runs the triage pass is LLM-driven (the same Claude Opus loop that writes the prose); in deterministic runs it's rule-based. The DQI score and the raw findings are identical across modes — they're computed from the same pure-CPU simulator output. What can differ is the actionable / monitor / tagging-artifact label on any given finding. On healthy cubes (Vintage Cube, Lucky 7's, the high-band reference set) both modes converge on "all tagging artifacts." On murkier mid-tier cubes the LLM-driven triage in AI mode reclassifies some findings the rule-based deterministic triage leaves on the actionable list — typically the cases where archetype identity is ambiguous and the rule-based pass can't tell whether the imbalance is real or cosmetic. Treat actionable-finding counts as upper bounds in deterministic mode and lower bounds in AI mode; the truth tends to sit between.
04 · The sim drafter

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:

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

Compression-aware labels. On heavily-iterated cubes (MTGO Vintage Cube, Lucky 7's, Modern Cube) every card is close to every other card on DQI — the spread is inside the documented 0.15 noise floor. When the chart detects this tight compression it suppresses the Premium / Sleeper / Trap / Dead Weight labels and explains why, instead of promoting sim noise to category labels. Wider-distribution cubes still get the normal labeled scatter.
05 · Role taxonomy

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:

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 honest version. The taxonomy is good enough to ship findings on most cubes and not good enough to ship findings on archetype-specific sub-mechanics. The tool should — and does — flag fewer things on cubes built on those sub-mechanics than on a generic midrange shell. That's a feature; pretending the analyzer can fully characterize Storm would be the actual failure.

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.

06 · The actual prompts

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.

Single-shot enrichment. Every card is analyzed by Gemini once. We don't currently run it N times and average. The two-decimal precision on continuous fields like 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.
Power anchoring is vintage-adjacent. The enum's anchor reference is "typical cube median" → "vintage adjacent" → "restricted/banned in lower formats." We deliberately ask Gemini to anchor in that frame because most public cubes are high-mid to high power. The cost: on explicitly low-power cubes (Pauper Cube, Peasant Cube, set-tribute cubes from older blocks), our 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 we can't show you here. The Doctor's run-time prompts (the ones that produce the cube read / weakness write-ups / cut reasons when the AI box is checked) are a different stack — Claude Opus, agent-loop with tool calls, not single-shot enrichment. Those prompts are longer and more dynamic; we'll cover them in a follow-up methodology entry if there's interest.
07 · Changelog

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.

← Back to Cube Doctor