Live-Site Audit · revision 3 · 15 Jul 2026
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.
Scryfall verified vs Oracle / set data Code read from the page's JavaScript Editorial disclosed opinion, not measured
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.



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.
| # | 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, 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.
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.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:
The linked precon-guide set and the recently rescored guide set serve different editorial purposes, so they should never be described as one list.
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.
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.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.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.
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.