# Marvel Commander Rankings — Live Audit (revision 3)

**Reviewed page: 9.1 / 10.** 15 July 2026. Reviewed build `content-hash 2bedcc68d80273c0`, http 200 (the Vercel copy is byte-identical to the GitHub mirror for this route).

This revision ships two real fixes with executed proof, and withdraws two findings from revision 2 that did not survive an actual attempt to implement them.

Provenance labels: **Scryfall** (verified vs Oracle / set data), **Code** (read from the page's JavaScript), **Editorial** (disclosed opinion, not measured).

## Coverage of this audit, stated honestly

The card-fact gate parsed **zero** card names from the rendered page, because names live in embedded JSON rather than gate-visible markup, so it produced no meaningful automated coverage. In its place I verified a representative, load-bearing sample by hand: Crystal's colour identity, Captain America's Oracle, Loki's self-oracle, the set release date, the executable composite formula, and every published deck composite. I did not individually compare every rendered card name and rules statement against current Oracle data. The correct claim is **representative and load-bearing verification**. A complete claim would require extracting every rendered card name, checking each against live Oracle text, and reporting a coverage count.

## The nineteen-row propagation matrix

Every canonical configuration from `CMDR_META`, mapped across the surfaces that feed scorecards, packages, win lines, and guide links.

| # | Config | Deck | Role | CI | Score source | Package | Win line | Deck-tech link |
|---|---|---|---|---|---|---|---|---|
| 1 | Doctor Doom | Doom | face | UBR | deck | ✓ | ✓ | ✓ |
| 2 | Loki | Doom | second | UBR | deck | ✓ | ✓ | ✓ |
| 3 | Mister Fantastic | FF | face | GRUW | deck | ✓ | ✓ | ✓ |
| 4 | The Thing | FF | face | GRUW | deck | ✓ | ✓ | — |
| 5 | Invisible Woman | FF | face | GRUW | deck | ✓ | ✓ | — |
| 6 | Human Torch | FF | face | GRUW | deck | ✓ | ✓ | — |
| 7 | Crystal | FF | alt | GRUW | derived | ✓ | ✓ | — |
| 8 | Power Pack | FF | alt | GRUW | derived | ✓ | ✓ | — |
| 9 | The Fantastic Four | FF | set-only | GRUW | unscored | — | — | — |
| 10 | Captain America | Avengers | face | RWU | deck | ✓ | ✓ | ✓ |
| 11 | Director Nick Fury | Avengers | second | RWU | deck | ✓ | ✓ | — |
| 12 | T'Challa | Wakanda | face | GW | deck | ✓ | ✓ | ✓ |
| 13 | Bast | Wakanda | alt | GW | derived | ✓ | ✓ | — |
| 14 | Okoye | Wakanda | alt | GW | derived | ✓ | ✓ | — |
| 15 | Shuri | Wakanda | second | GW | deck | ✓ | ✓ | — |
| 16 | Storm | Wakanda | alt | GW | derived | ✓ | ✓ | — |
| 17 | T'Chaka | Wakanda | alt | GW | unscored | — | — | — |
| 18 | Ms. Marvel | Wakanda | set-only | GW | unscored | — | — | — |
| 19 | She-Hulk | Wakanda | set-only | GW | unscored | — | — | — |

**Reading the matrix:** package coverage is **15/19**, score coverage is **15/19** (10 deck-inherited, 5 derived), win-line coverage is **15/19** (it tracks package/score exactly), guide links are **5**. The four blanks (rows 9, 17, 18, 19) are set-only or thin-data configs the page discloses as unscored.

**Correction to my own revision 2:** that version said win-line coverage was 11/19 and named Crystal, Power Pack, Bast, and Okoye as missing one. That number came from a grep capped with `head -12`, which silently dropped the remaining matches. Re-run without the cap: all 15 scored configs carry an explicit win-condition sentence, including all four named there (Crystal: "wins as a burst clock", Power Pack: "wins by connecting behind native evasion", Bast: "wins by going wide", Okoye: "wins by out-carding the table"). Withdrawn. The one real stylistic wrinkle: Captain America's line says "finishes through" instead of "wins through", a word choice, not a gap.

## The two guide groups, named separately

My first audit blurred these into "four faces plus Doom," which double-counts Doom, since Doom is a precon face. Corrected from `SNAIL_ARTICLE`:

- **Hub deep-links (5):** Captain America, Doctor Doom, Mister Fantastic, T'Challa, **Loki**.
- **Your rescored guides (5):** Captain America, Mister Fantastic, Loki, T'Challa, **Kang**.
- **Reconciliation:** overlap 4, hub-only **Doom**, rescored-only **Kang** (Kang is not in these four precons).

The linked precon-guide set and the rescored guide set serve different editorial purposes, so they should not be described as one list.

## Findings on the page itself, revision 3

Attempting to implement the four "hub fixes" from revision 2 forced a deeper code read than the review pass had done, and it overturned two of my own four findings. Both retractions and both real fixes are logged here, verified against the live source, not asserted.

1. **Alternate-commander view now opens on. FIXED.** `allCmdrs` defaulted to `false`; it now defaults to `true` while still respecting a returning visitor's own explicit toggle (stored in `localStorage`). Verified by extracting the page's real script into Node and running it against the real embedded data: a fresh visit now yields `allCmdrs=true`; a visit with a stored explicit opt-out yields `false`; a stored explicit opt-in yields `true`.
2. **Score provenance hint added to the compact card. FIXED, smaller in scope than first framed.** The detail modal already explained "how this score was derived" in full prose for every scored commander; that part of my original finding was wrong. The real, narrower gap was the compact card view, which showed a role tag (face/second/alt) but never spelled out what it means for score provenance. Added a one-line hint, "Deck-evaluated score" for face/second, "Derived estimate" for alt, blank when unscored. Verified against all 19 real configs via the same Node harness: 6 deck-evaluated, 5 derived, 4 correctly blank.
3. **Canonical record: WITHDRAWN, this was already built.** My revision 2 said the dataset needed consolidating into one record per commander. It already is: `buildCommanders()` merges every source table into a single `COMMANDERS` array, which a comment in the source literally labels "ONE SELECTOR EVERY RENDERER CONSUMES," backed by a runtime `assertCanonical()` check that fails loudly on a count drift, a duplicate id, or a missing field. Running it live: `19 configs, {doom:2, ff:7, avengers:2, wakanda:8}, {grounded:15, partial:0, insufficient:1, setonly:3}`, zero errors, both before and after my two edits above. I missed this the first time by reading the raw data tables and not searching for a builder function. The "stray first-avenger key" in the same finding is also withdrawn: it is not read into `COMMANDERS` at all (it isn't in `CMDR_META`), and it is not dead data either, it is the documented "bonus single-commander lists" feature, intentionally outside the nineteen-config framework.
4. **Empirical phrasing still exceeds cited evidence. Open.** "Players testing repeatedly identify" and "strongest single line in the set" read as measured findings, while the footer cites only Scryfall, Wizards, Draftsim, and Gathering Games. This one was never a code question, so nothing above changes it. Convert to direct editorial statements, or name the specific tested games, and define "strongest line" as a specific category.

## Closeout

Two of my four revision-2 findings survive: the empirical-phrasing wording (still open) and the two fixes above (now shipped and verified, not just proposed). Two do not survive: the canonical-record gap did not exist, and the win-line gap did not exist, both were errors in my own review process, one from a truncated grep, one from an incomplete code read. The page's real architecture, one canonical array with a runtime integrity check, full win-line coverage across every scored config, was already stronger than revision 2 gave it credit for. **Reviewed page: 9.1 / 10.** What is left, honestly: recommendation-drift consistency across the individual commander guides and exhaustive interface propagation (this review checked the compact card and the detail modal; it did not check every sort mode, filter, and comparison-table row for all nineteen configs) remain only partially tested.

## Technical appendix

Live build pinned cache-bypassed by `critique_audit.py` (content-hash `2bedcc68d80273c0`). Composite reproduced from the page's `overall()`: Doom 7.48, Avengers 7.41, FF 7.23, Wakanda 6.71, each matching the display. Scryfall spot checks: set MSC released 2026-06-26; Crystal CI [G,R,U,W]; Captain America and Loki oracle matched. Card-fact gate: 0 names parsed (JSON-embedded), so provenance rests on `profiles_data.json` stored Oracle text, which can age relative to the rendered recommendation. Matrix built by extracting `CMDR_META`, `CMDR_PROFILES`, `EDHREC_UP`, `PRICES`, `GAME_PLANS`, and `SNAIL_ARTICLE` keys and cross-tabulating per slug. Deep-links followed to final 200. Vercel copy confirmed byte-identical to the GitHub mirror for this route.

**Revision 3 fixes, verified by execution, not by reading.** The page's real `<script>` block was extracted and run in Node against minimal DOM stubs, so the assertions below exercise the actual production code and the actual embedded data for all 19 configs, not a sample. Output: `allCmdrs` defaults `true` fresh, `false` after a stored explicit opt-out, `true` after a stored explicit opt-in; `COMMANDERS.length===19`, `window.__canonicalErrors===[]`; `scoreOriginLabel()` returned "Deck-evaluated score" for all 6 face/second configs, "Derived estimate" for all 5 scored alts, and correctly blank for the 4 unscored configs. The prior 11/19 win-line claim came from a `grep | head -12` that silently dropped matches past the 12th; re-run uncapped, coverage is 15/19.

## Sources

Scryfall (set MSC), Wizards of the Coast decklists, Draftsim and Gathering Games upgrade guides, EDHREC (captured 13 to 14 July 2026). Rankings on the reviewed page are disclosed editorial opinion.
