Live-Site Audit · revision 3 · 15 Jul 2026

Marvel Commander Rankings

A live audit of the nineteen-configuration precon hub. 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.

9.1 / 10
reviewed page
Reviewed build: content-hash 2bedcc68d80273c0, http 200 (Vercel copy is byte-identical to the GitHub mirror)
Since revision 2: default-on nineteen-view and a card-level score-provenance hint are shipped and verified by executing the page's real code; the canonical-record gap and the win-line gap are withdrawn, both turned out not to exist
Still open: recommendation-drift consistency across the individual guides, and exhaustive interface propagation beyond the card and detail-modal views

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. That gate 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, and a complete claim would require extracting every rendered card name, checking each against live Oracle text, and reporting a coverage count.

Crystal, Inhuman Princess
Crystal · WURG confirmed
Captain America, Team Leader
Captain America · Hero engine
Loki, the Deceiver
Loki · self-oracle matches

The nineteen-row propagation matrix

Every canonical configuration from CMDR_META, mapped across the data surfaces that feed scorecards, packages, win lines, and guide links. This is the reconciliation the first audit asserted without showing.

#ConfigDeckRoleCIScore sourcePackageWin lineDeck-tech link
1Doctor DoomDoomfaceUBRdeck
2LokiDoomsecondUBRdeck
3Mister FantasticFFfaceGRUWdeck
4The ThingFFfaceGRUWdeck
5Invisible WomanFFfaceGRUWdeck
6Human TorchFFfaceGRUWdeck
7CrystalFFaltGRUWderived
8Power PackFFaltGRUWderived
9The Fantastic FourFFset-onlyGRUWunscored
10Captain AmericaAvengersfaceRWUdeck
11Director Nick FuryAvengerssecondRWUdeck
12T'ChallaWakandafaceGWdeck
13BastWakandaaltGWderived
14OkoyeWakandaaltGWderived
15ShuriWakandasecondGWdeck
16StormWakandaaltGWderived
17T'ChakaWakandaaltGWunscored
18Ms. MarvelWakandaset-onlyGWunscored
19She-HulkWakandaset-onlyGWunscored

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, every scored config has one), and guide links are 5. The four blanks (rows 9, 17, 18, 19) are set-only or thin-data configurations 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 "the four faces plus Doom," which double-counts Doom, since Doom is itself 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 recently rescored guide set serve different editorial purposes, so they should never 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, 4 face/second not double-labeled.
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 (verification tooling)

Live build pinned cache-bypassed by critique_audit.py (content-hash 2bedcc68d80273c0). Composite reproduced from the page's overall() function: Doom 7.48, Avengers 7.41, FF 7.23, Wakanda 6.71, each matching the displayed value. Scryfall spot checks: set MSC released 2026-06-26; Crystal CI [G,R,U,W]; Captain America and Loki oracle text 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 (308 is Vercel's trailing-slash redirect). 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.

Open the live hub → This audit as Markdown →