Public ledger · built 2026-09-29

Every call, recorded before puck drop, scored after.

The morning price and, when rosters were published, the lineup-stage price for every game, appended to a hash-chained file before the game and scored the next morning. Nothing here can be edited after the fact without breaking the chain.

Scored
14
Right
7 (50%)
Records
47
Chain head
892882b823
Live record

By confidence tier

1 of 4 columns shown · open a row for the other 3
Columns
TierDetails

By game type: preseason 7 of 14.

Most recent first

19 games recorded

All 8 columns shown
Columns
DateGameMorning price (home)Lineup-stage priceTierPickFinalRight?
2026-09-29FLA at CAR68%—strongCARnot yet—
2026-09-29MTL at TOR44%—leanMTLnot yet—
2026-09-29NYR at BOS52%—coin flipBOSnot yet—
2026-09-29VAN at EDM71%—heavyEDMnot yet—
2026-09-29CHI at VGK75%—heavyVGKnot yet—
2026-09-26ANA at LAK50%59%leanLAKANA 2–6 LAKyes
2026-09-26CAR at NSH38%33%strongCARCAR 6–0 NSHyes
2026-09-26COL at UTA50%54%coin flipUTACOL 0–2 UTAyes
2026-09-26PIT at BUF55%52%coin flipBUFPIT 3–1 BUFno
2026-09-26SEA at VAN49%38%solidSEASEA 3–4 VANno
2026-09-26WSH at PHI64%61%solidPHIWSH 5–1 PHIno
2026-09-26STL at CHI40%45%leanSTLSTL 2–3 CHIno
2026-09-26TBL at FLA42%51%coin flipFLATBL 3–2 FLA (SO)no
2026-09-26CGY at EDM70%76%heavyEDMCGY 1–4 EDMyes
2026-09-26CBJ at DET51%47%coin flipCBJCBJ 4–2 DETyes
2026-09-26NJD at NYI46%31%strongNJDNJD 4–1 NYIyes
2026-09-26SJS at VGK72%76%heavyVGKSJS 4–2 VGKno
2026-09-26MTL at OTT61%62%solidOTTMTL 3–4 OTTyes
2026-09-26OTT at MTL45%44%leanOTTOTT 2–4 MTLno
Bias audit

Does the price lean anywhere?

Every slice of games (club, home and away, favourite, tier, back-to-back, month, division, season): the model's average probability against the share that actually won, with bootstrap ranges, false-discovery control across slices, and an anytime-valid sequential monitor that keeps its error rate under daily peeking.

Live games audited14
Slices0
Flagged at 95%00 survive FDR
Sequential monitor0 of 3 exclude 0

Backtest, 7006 games: 57 slices, 1 flagged at 95% (0 survive false-discovery control): month 02 (home side) -0.034. Full table on /integrity.

Calibration

Do 60% calls win 60% of the time?

perSeason
2020: (n: 803, logLoss: 0.648, brier: 0.228, baseRate: 0.538, meanPredicted: 0.535, reliabilityWidth: (bins: 10 items, ece: 0.035, mode: width), reliabilityFreq: (bins: 10 items, ece: 0.039, mode: freq), eceWidth: 0.035, eceFreq: 0.039, decomposition: (bins: 10, brier: 5 fields, logLoss: 5 fields)), 2021: (n: 1210, logLoss: 0.626, brier: 0.218, baseRate: 0.539, meanPredicted: 0.539, reliabilityWidth: (bins: 10 items, ece: 0.024, mode: width), reliabilityFreq: (bins: 10 items, ece: 0.038, mode: freq), eceWidth: 0.024, eceFreq: 0.038, decomposition: (bins: 10, brier: 5 fields, logLoss: 5 fields)), 2022: (n: 1217, logLoss: 0.646, brier: 0.227, baseRate: 0.532, meanPredicted: 0.541, reliabilityWidth: (bins: 10 items, ece: 0.031, mode: width), reliabilityFreq: (bins: 10 items, ece: 0.028, mode: freq), eceWidth: 0.031, eceFreq: 0.028, decomposition: (bins: 10, brier: 5 fields, logLoss: 5 fields)), 2023: (n: 1230, logLoss: 0.654, brier: 0.231, baseRate: 0.538, meanPredicted: 0.535, reliabilityWidth: (bins: 10 items, ece: 0.03, mode: width), reliabilityFreq: (bins: 10 items, ece: 0.025, mode: freq), eceWidth: 0.03, eceFreq: 0.025, decomposition: (bins: 10, brier: 5 fields, logLoss: 5 fields)), 2024: (n: 1235, logLoss: 0.653, brier: 0.231, baseRate: 0.564, meanPredicted: 0.54, reliabilityWidth: (bins: 10 items, ece: 0.039, mode: width), reliabilityFreq: (bins: 10 items, ece: 0.035, mode: freq), eceWidth: 0.039, eceFreq: 0.035, decomposition: (bins: 10, brier: 5 fields, logLoss: 5 fields)), 2025: (n: 1311, logLoss: 0.681, brier: 0.244, baseRate: 0.522, meanPredicted: 0.541, reliabilityWidth: (bins: 10 items, ece: 0.049, mode: width), reliabilityFreq: (bins: 10 items, ece: 0.051, mode: freq), eceWidth: 0.049, eceFreq: 0.051, decomposition: (bins: 10, brier: 5 fields, logLoss: 5 fields))
pooled
n: 7006, logLoss: 0.652, brier: 0.23, baseRate: 0.539, meanPredicted: 0.539, reliabilityWidth: (bins: (6 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields), ece: 0.009, mode: width), reliabilityFreq: (bins: (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields); (7 fields), ece: 0.014, mode: freq), eceWidth: 0.009, eceFreq: 0.014, decomposition: (bins: 10, brier: (score: 0.23, reliability: 0, resolution: 0.018, uncertainty: 0.248, residualWithinBin: -0.001), logLoss: (score: 0.652, reliability: 0, resolution: 0.037, uncertainty: 0.69, residualWithinBin: -0.002))

The tier record above is the live version of the same question; the model card on /models carries the six-season version.

Provable by someone other than us

External timestamps on the chain heads

Each day the two chain heads are hashed into one root and timestamped by an RFC 3161 authority. Anyone can verify that today's predictions existed before today's games without trusting this site.

  • 2026-09-29 verified · freetsa · serial 0x08A35FC6 · Sep 29 12: · root d6d77f6e5460730c…

Verification

Every pre-game price is appended to an append-only file before puck drop, each record carrying the SHA-256 of the previous one; results are appended the next morning the same way. tools/ledger.mjs verify recomputes both chains. Chain heads at build time: predictions 892882b8231b2aa7f29e421d9f67b93eaefca123fe986ef019db887b0b3021ee (47 records), results c394da0abf599d7d9803185d64fa95112680eacbaef23bd3da748f0be4ede6d6 (14 records). The model card is on the measures page; the daily email carries the same prices.