Public leaderboard anatomy, top kernels and open write-ups — CASMI 2026, snapshot 2026-10-07

intermediateconfidence highrelevance 5/521 sources5.5k words
Forced analogyLaw of evidence (standard of proof / burden allocation) → derived a Bayes-optimal seat-filling rule for the 25 MRR slots: interleave hedges by posterior probability, never block-allocate; with a Zipf(s≈2.07) within-list rank curve the first hedge belongs at slot 2 unless P(primary)≥0.90. Paid off as a rule and as a back-solve check (within-hit MRR 0.765 ⇒ ≈64 % of hits are rank-1); breaks because wrong guesses cost nothing and duplicate InChIKey14s are dead seats.

TL;DR. Pulled twice from the Kaggle API today (05:20 and 13:59 UTC): 2,703 teams, rank 1 = 0.481, median 0.328, and a third of all teams (885) sit on one of sixteen exact scores produced by re-running public notebooks — the biggest pile-up is 149 teams at exactly 0.425 (ranks 79–227), which is also the derived silver-medal line. The public LB is scored on roughly a third of the hidden set (~130 molecules, second-hand), so one molecule moves it by up to 0.0076 and a byte-identical rerun of one notebook moved 0.335→0.328; nothing below ~0.01 is signal. Every open write-up that reports both numbers says the same thing: ranking inside a found list is good (within-hit MRR ≈ 0.75–0.95), and the missing half of the score is molecules whose truth never enters the 25.

1. Leaderboard anatomy (own API pull)

Source: kaggle competitions leaderboard enveda-CASMI26-molecule-id-mass-spectra --download (CLI 2.2.4), zip member …publicleaderboard-2026-10-07T13:59:36.csv, saved as lb_snapshot_2026-10-07.csv beside this file. Columns: Rank, TeamId, TeamName, LastSubmissionDate, Score, SubmissionCount, TeamMemberUserNames. A second pull from 05:20:19 UTC the same day (2,673 teams) is used for the intra-day diff.

Statistic Value (13:59 UTC) Value (05:20 UTC)
Teams 2,703 2,673
Rank 1 / 2 / 3 0.481 (pikachu, 84 subs) / 0.466 (MarvinTMB, 12) / 0.452 (Oliver Ford, 60) 0.480 / 0.466 / 0.450
Rank 5 / 10 / 20 0.448 / 0.441 / 0.435 0.443 / 0.441 / —
Rank 50 / 100 / 250 0.429 / 0.425 / 0.421 —
Rank 500 / 1000 / 1500 / 2000 0.413 / 0.357 / 0.319 / 0.166 —
p50 / p75 / p90 / p95 / p99 0.328 / 0.406 / 0.421 / 0.425 / 0.432 p50 0.328
Mean 0.2857 —
n ≥ 0.45 / 0.44 / 0.43 / 0.42 3 / 12 / 49 / 317 3 / 12 / 35 / 266
n ≥ 0.41 / 0.40 / 0.35 / 0.30 616 / 762 / 1,035 / 1,584 — / 729 / — / —
n = 0.000 106 (3.9 %) —
Solo teams / teams ≥ 2 / max size 2,568 (95.0 %) / 135 / 5 —

The q7 digest figures (2,673 teams, max 0.480, 263 ≥ 0.42, 35 ≥ 0.43) are reproduced exactly by the 05:20 file; they were simply eight hours old. In 8.6 hours the board gained 30 net teams (31 new), 187 teams improved, the ≥ 0.43 club grew from 35 to 49 and the ≥ 0.42 club from 266 to 317; 580 teams had already submitted on 2026-10-07 by 14:00 UTC (383 on 10-06, 224 on 10-05) — the public-notebook wave is accelerating, not plateauing.

Medal cut-offs (Kaggle rule for competitions with > 1,000 teams: gold = top 10 + 0.2 % of teams, silver = top 5 %, bronze = top 10 %; I use floor on the percentages): gold = rank 15 → 0.436; silver = rank 135 → 0.425; bronze = rank 270 → 0.421. The silver line passes through the middle of the 149-team 0.425 cluster (ranks 79–227) and the bronze line sits on the 0.421 cluster (ranks 245–283); Kaggle breaks exact ties by earlier submission time, so which clone lands inside the medal zone is decided by the clock, not by the model.

Exact-score clusters (the "tutorial / public notebook" signature). 885 of 2,703 teams (32.7 %) score one of these sixteen values to three decimals:

Score n teams Ranks Median subs Teams with ≤ 3 subs Most likely source (evidence)
0.425 149 79–227 20 18 bobthebot369/enveda-casmi-2026-v18-sovereign-zenith — "our unchanged Bob replay scored 0.425 (submission 56876882)" (uninhibitedscholar kernel)
0.421 39 245–283 16 2 huseyinemreaksoy/casmi26-v4n-fusion-pubchem-on-public-0-421 (title)
0.420 34 284–317 10 5 same notebook, Version 1 ("Version 1 scored 0.420"); gnshx README
0.417 74 344–417 11 17 imranarif536/casmi26-v44-pairtail-locked-top1 (reproduced twice at 0.417 by leesirleesirlee-star)
0.413 53 464–516 10 11 gengsr/casmi26-fusion-glacier-mh-lb-0-413; lehau007 V26 "0413"
0.411 77 522–598 14 14 unidentified public notebook (unverified)
0.409 35 617–651 13 8 huseyinemreaksoy/casmi26-sub-v4b-0-409-on-the-public
0.399 36 763–798 10 4 seyitkaangunes/casmi26-v4n-engine-fusion-union-lb-0-399
0.341 48 1106–1153 8 12 llccqq624/casmi26-next-direct-w088 (LB 0.341 per V44 lineage list)
0.339 31 1161–1191 10 10 haideptry/…fast-spectral-cosine-baseline V17 (0.339 per lineage list)
0.328 106 1347–1452 4 49 prvsiyan/analog-propagation-casmi-2026-baseline rerun ("re-run of the 0.335 row scored 0.328"); nghianguyen7171 re-implementation also 0.328
0.163 7 2004–2010 1 5 haideptry V10–V11 library cosine + COCONUT fallback (0.163)
0.151 19 2110–2128 3 11 library-search-only probe (prvsiyan stage 1 = 0.151; kitopl flat-10-ppm = 0.151)
0.146 14 2169–2182 1 13 unidentified single-submission baseline (unverified)
0.000 106 2598–2703 2 73 failed/empty runs; the host inversion de-novo tutorial advertises no score and no public write-up reports its LB, so its landing band is unknown (inference: ≤ 0.05)

Submissions vs score. Spearman(SubmissionCount, Score) = 0.54. Band medians: ≥ 0.44 → 57 submissions (n = 12); 0.43–0.44 → 36 (n = 37); 0.42–0.43 → 20 (n = 268); 0.40–0.42 → 14; 0.35–0.40 → 11; 0.30–0.35 → 7; < 0.20 → 3; zero scores → 2. 377 teams have exactly one submission, 842 have ≤ 3, 123 have ≥ 50; the busiest team (kglctf, 113 submissions) sits at 0.411, i.e. volume without a new idea buys a clone score. The top-12 average 55 submissions in 23 days (~2.4/day of the 5 allowed).

2. Top-voted public kernels (API, kernels list --sort-by voteCount, 200 rows saved as kernels_2026-10-07.csv)

# Kernel (owner/slug) Votes Last run Public LB One-line method
1 inversion/casmi-denovo-tutorial-notebook 288 2026-09-14 not advertised Host-side tutorial: peak-token transformer → autoregressive SMILES; trains on ≤ 200k spectra (~22 min on T4, batch 128, MAX_LEN 128, vocab 512); excludes enveda-180 (ingest_lib != 'enveda-180'); validates with Morgan-r2 Tanimoto
2 haideptry/enveda-casmi-2026-fast-spectral-cosine-baseline (V17) 234 09-17 0.163 (V10) → 0.193 → 0.205 → 0.300–0.339 (V17) 4 channels: entropy library search over 2.54 M spectra (incl. enveda-180), ±200 Da analog propagation sim⁴·Tanimoto, MetFrag-lite, FPNet 6,930-bit f·z; pool COCONUT 2.0 (462k) ∪ train (275k); ±8.5 ppm (median 56 candidates; "+1.4 ppm systematic timsTOF offset"); Morgan r2/r3 4096 + MACCS
3 evgendvorkin/enveda-casmi-2026 ("Forensics Lab") 160 10-04 not stated (same text as V44 = 0.417 lineage) Three-engine RRF + ICEBERG/GLACIER forward cascade + PubChem popularity prior; lists its ten public ancestors with their LBs (0.335/0.339/0.337/0.341/0.373/0.386/0.399)
4 prvsiyan/analog-propagation-casmi-2026-baseline 124 09-21 0.335 best, 0.328 rerun; family mean 0.329 ± 0.004 The root of the whole public tree: 711,705-structure pool, ±10 ppm, HGB ranker on 31 features; measured PubChem as catastrophic (class-2 sim 0.732 → 0.379 with top-25 PubChem isomers); DreaMS tried, "does not help this channel"
5 bobthebot369/enveda-casmi-2026-v18-sovereign-zenith 92 10-05 0.425 on replay (title claims "target 0.440+") v4n + prvsiyan two-ranker RRF (α 0.6, k 3), GLACIER-only rerank on [M+H]+, popularity prior (λ 0.25, union 200), library lock at lib_max ≥ 0.90, DreaMS "tail channel" to fill sparse lists
6 wangpenghua/casmi26-v29-fusion-pop-glmh 90 10-02 not pulled fusion + popularity (title)
7 dmitriigluzdov/casmi-26-from-spectra-to-structures 88 10-07 0.410 (V31/V33); table 0.326→0.341→0.366→0.373→0.386→0.401→0.406→0.410 710,701 pool ±10 ppm, 105.9 M PubChem channel in a subprocess, 160 features × 4 LightGBM, ICEBERG + GLACIER, documented-compound bonus; most careful ablation table on the site
8 beraterolelk/0-336-sota-enveda-casmi26-analog-ranker 80 10-01 0.336 (title) prvsiyan fork
9 imranarif536/casmi26-v44-pairtail-locked-top1 75 10-03 0.417 "don't let a new ranker destroy a proven top-1; LambdaRank the tail"; 775k pool, PubChem tier limited to 5 tail slots
10 flexonafft/casmi26-public-baseline-adaptation-experiments 68 10-06 — adaptation experiments
12 seyitkaangunes/casmi26-v4n-engine-fusion-union-lb-0-399 52 09-30 0.399 v4n (0.384) + two-ranker engine via weighted RRF + ICEBERG/GLACIER on the union; 3.5–4.5 h on T4; budgets ICE 5400 s / GL 4000 s
13 huseyinemreaksoy/casmi26-v4n-fusion-pubchem-on-public-0-421 46 10-05 0.420 (v1) / 0.421 0.399 → 0.404 (popularity μ 0.15 + gap fragment rescoring) → 0.404 (ICE/GL off for library hits) → 0.409 (μ 0.25) → 0.420 (PubChem join, N 50, gate lib_max < 0.7)
15 denpugovkin/casmi-2026-protected-bio-db-tail 42 10-02 parent 0.347, new "unknown" GLACIER isomer resolver inside formula slots; explicit kernel_sources: prvsiyan fork
16 llccqq624/casmi26-next-direct-w088 39 09-20 0.341 two-ranker blend w = 0.88; post-mortem of "cap, dedup, FPNet leak" traps
18 josefreitasalvesneto/casmi-2026-a-complete-statistical-tour 33 09-15 EDA first to publish that visible test = 100 % enveda-180 rows (exact peak-array match)
20 megayak/casmi26-two-rankers-one-engine 30 09-17 0.337 adduct-shifted library + two-ranker blend; "honest negative on DreaMS"

Method-tool census over the 200 listed titles plus 14 pulled notebooks: DreaMS — used as a tail filler (bobthebot369 V18, uninhibitedscholar own153), as a demo port of the HF space with internet ON (hengck23/dreams-structure-from-spectrum-retrival-demo, 7 votes, MassSpecGym embeddings), and in three zero-vote titles (rajrajak99 "v115 DreaMS Foundation", haideptry "Mass DreaMS Champion", imranarif536 "V42 DreaMS ICE Cap10"); two independent negatives (prvsiyan, megayak; corentinlaudicina on GitHub: 0.811 vs 0.867 cosine). MIST: one title (franciscoangulo/enveda-casmi-v60-qtof-msbuddy-mist-dedup, 1 vote). FIORA: lehau007 "V32 FIORA Tri-Forward 0420" (1 vote). ICEBERG/GLACIER (MIT ms-pred): in every ≥ 0.37 kernel. MS2DeepScore, SIRIUS, PRISM: zero kernels in 200 titles or pulled code. Library search of enveda-180: every retrieval kernel indexes it (it is 45 % of train); only the host tutorial excludes it. Decoy exploitation: none scores against it; the ≥ 0.38 family detects it (MD5 of spectrum_id = 654e030e…, or SHA-256 of test.parquet = 2fa29c4a…, or env KAGGLE_IS_COMPETITION_RERUN) to run a 12-molecule smoke commit and the full 400 only on the scoring rerun — the decoy is exploited for wall-clock, not for score. Forks: Kaggle's kernel_sources field is empty on 19 of 20 pulled kernels, so lineage is only recoverable from markdown attribution (the V44/"Forensics Lab" text names ten ancestors); the AmanDubal repo is the only explicit fork of the inversion tutorial I found, and it fixes the tutorial's "same-token reconstruction objective" and "generation passes only the most recent token without a KV cache".

3. GitHub write-ups (raw READMEs fetched; Kaggle facts therein are mirrors)

Repo Public LB (best, dated) Local CV Recall@25 Pool Mass window Fingerprint Model Local-vs-public gap
leesirleesirlee-star/Enveda_CASMI-2026… 0.417 (V44 repro, refs 56839982 & 56854098, 2026-10-05); 0.418 pc_adaptive (56877838, 10-06); 0.416 claw ranking-only 0.765 (grouped CV, recall forced to 1) 0.545 back-solved (0.417/0.765) ~775k (train ∪ COCONUT ∪ ChEBI/LIPID MAPS) + PubChem tier ~100 M (7.2 GB, 5 tail slots) ±10 ppm FPNet A+B 160 feat × 4 LightGBM LambdaRank, 600 rounds; ICE/GL fixed wall-clock budgets "0.417 decomposes into recall × ranking"; ICE scored 18 % of molecules at budget 300 s
gnshx/Enveda-CASMI-2026… 0.087→0.145→0.335→0.358→0.384→0.399→0.404→0.409→0.420 none reported — ~710k + PubChem slice N₁ = 5,000 ±10 ppm Morgan 4096, MACCS, ECFP4 HGB Ranker A (31) + B (51, 540k sim rows); LightGBM 160 pure neural FPNet plateaued at 0.145
nghianguyen7171/casmi26 0.328 (v1 and v7 identical) class-2 seed noise ±0.01 pool median 107 cands; 70.8 % share true formula 712,199 (COCONUT ∪ train) ±10 ppm, 30 ppm fallback FPNet 6,930-bit HGB 31 feat; +62,744 ChEBI/LIPID MAPS = +0.000 "published numbers do not reproduce: byte-identical reruns 0.011 and 0.105 below advertised"
Isaackjoshua/casmi-2026 0.063→0.075→0.138 (09-18)→0.194→0.214→0.229→0.232→0.236→0.240→0.245 hard set 0.4586–0.4998; timsTOF holdout 0.566–0.592 COCONUT holds 39 % of hard-val truths; PubChem 94,043,986 holds 95 % of the rest; ±1 mDa PubChem window median 4,652 cands (p90 14,727) 729,387 curated; PubChem tiered 1 mDa adaptive ×10 to 1 Da Morgan r2 2048 → +r3 +MACCS (3,239 bits, +0.005) 61.8 M-param MLP + 4.6 M peak transformer ~0.49 local vs 0.19–0.245 LB; paired per-molecule test resolves 0.003–0.005
corentinlaudicina/enveda-casmi-2026 0.098 (cosine) → 0.112 (MLP + ranking loss, train+COCONUT); 0.079 with PubChem 0.46 on held-out train pool; NP 0.138 vs 0.107 random — 275,810 train + 480k COCONUT; PubChem 90 M 10 ppm Morgan r2 2048 MLP on 10,000 × 0.1 Da bins; DreaMS input variant 0.46 → 0.112; "9 in 10 hidden molecules have no train spectrum"
yasumorishima/kaggle-competitions (enveda-casmi26/CLAUDE.md) 0.275 (09-26)→0.283→0.294 (09-29)→0.297→0.299 (10-03)→0.303 (10-05, own COCONUT 474,231) class-4 NP CV 0.526; FP-alone NP 0.494 / random-enveda 0.875; LGB 5-fold 0.647–0.660 — train + COCONUT (~710k, median 107–116); Enamine tier 4.73 M tested ±10 ppm (±5 ppm identical: 0.302 vs 0.303) Morgan r3 counts analog + FP MLP, weak tie-break LGB CV 0.65 → LB 0.279 (worse than no LGB); popularity prior monotone loss (μ 0.01→0.293 … 0.2→0.228); Enamine tier −0.013
billylu24/Enveda-CASMI-2026… 0.140 (09-24, rank 1128/1452) → 0.176 hybrid (rank 950/1453) → 0.162 → 0.169 → 0.171 (PubChemLite) known-spectrum 0.90–0.92; unknown 0.008–0.022 unknown-candidate recall 8.25 % → 12.0 % with PubChemLite 469,579 train + COCONUT Sep-2026 + PubChemLite 35 ppm Morgan 10.7 M residual MLP; logistic H/F routing known 0.92 vs unknown 0.02 locally; LB 0.17
mxm-1x/Enveda-CASMI-2026 none stated retrieval 0.9261 (250 NP); closed-world exact-mass 0.1438 → frag 0.3129 → HGB 0.5096; COCONUT pilot 0.2876 → 0.4051 → 0.5631 hit@25 0.585 / 0.755 / 0.879; pilot 0.761 / 0.826 / 0.913; COCONUT-only 250-NP 0.724 273,681 train structures; 8,851 COCONUT window cands — — HGB reranker on CPU (M3, 8 GB) cites discussion 741404 as "host clarification"
chiparon/enveda-casmi26 none cross-library cosine 0.934 (top-1 89.6 %, top-25 99.2 %) 0.992 train only 20 ppm, 0.02 Da peaks — greedy 1:1 cosine, 128 peaks explicitly "not hidden-test generalisation"
shiferaxa/casmi26 runs the public pipeline the only split that predicted LB order = 250 enveda-np-examples under three masks; random held-out train structures predicted the opposite ranker order — ~712k 8.5 ppm own FP model public prvsiyan/haideptry pipeline —
AmanDubal/… not scored — — all 11 sources, 277,566 SMILES 15 ppm, 0.003 Da floor — fragment + neutral-loss cosine; fixed inversion de-novo fork audited: all 1,213 visible test spectra match enveda-180
kabir0774/Enveda-Casmi-2026 none (synthetic only) retrieval quality dominates: fp_acc 0.52→0.80 takes 0.30→0.73; one-sided gate 0.08 vs 0.30 — — — Morgan PeakFormer —
AayanShabbir/casmi26 ~0.335 ladder F-ANALOG 0.212, F-RANKER 0.267 — ~711k ±200 Da analog — 20-feature GBM —
NoName7n11/Enveda_CASMI_2026 none none — — — — OVERVIEW/WORKFLOW only; mirrors the official pages (prizes $16k/12k/9k/7k/6k) —
dalloliogm/kaggle_competitions none — — — — — verbatim mirror of the Data page (used for the ~1,500-spectra quote) —

4. Organiser statements and contested facts (all second-hand; forum unreachable by API)

  • Decoy thread 741404: cited by mxm-1x README as "host clarification" that the visible file "is a dummy test file" replaced at rerun. No quote of the host's text survives in any README or kernel I opened. The Data-page mirror (dalloliogm; same text in dreaddevelopment kernel) says the visible file "is comprised of examples from the training dataset; it will be replaced by the hidden test set during re-run, and will be approximately the same size."
  • Public/private fraction: kitopl kernel table: "Public LB ~33 % of the hidden set … roughly 130 molecules; a single molecule moves it by up to 0.0076, so differences around 0.005 are noise." Attribution is not stated (reads like the Kaggle LB-page banner); treat as plausible but unverified. Corroborated by prvsiyan's identical-code rerun 0.335 → 0.328 (Δ 0.007).
  • Rerun limit: "CPU/GPU notebook ≤ 9 h, internet off" appears in NoName7n11, corentinlaudicina, yasumorishima; seyitkaangunes reports actual hidden-test runtime 3.5–4.5 h on T4 ×2; leesirleesirlee-star measured ~18 s/molecule end-to-end.
  • ~1,500 vs ~1,213 spectra: Data page says "~1,500 spectra of ~400 molecules" for the hidden set; the visible decoy has 1,213 spectra/400 molecules; leesirleesirlee-star notes the graded submission file is 530,716 bytes vs 393,908 bytes for the public run — the hidden set has different molecule_ids (not the same 400). The ten-adduct list on the Data page vs seven in the decoy (kitopl) is a related discrepancy. I found no mention of "~2,500" anywhere.
  • Pretrained weights: prvsiyan: "The host has confirmed that open pretrained weights are allowed provided they are distributed in compliance with the licence of the data they were trained on." Instrument: mohammadhmozafary: "the competition organizer has mentioned that the test set only contains [timsTOF]." Both unquoted paraphrases.
  • Class shares: nobody has them; the forum back-solved class 1 ≈ 16–17 % from library-only = 0.151 (0.151/0.873 = 17.3 %, kitopl). nghianguyen7171 estimates 16/45/39; yasumorishima 16/27/55 — the class-2/3 split is genuinely contested (Δ 18 points), and it decides whether retrieval caps at ~0.45 or ~0.61.

5. How fast has the top moved? (dated snapshots, all second-hand except today's)

Date (UTC) Teams Rank 1 Other dated marks Source
2026-09-24 1,452–1,453 — 0.140 = rank 1128; 0.176 = rank 950 billylu24 README
2026-09-26 — 0.425 rank 10 = 0.383, rank 20 = 0.370 yasumorishima CLAUDE.md
2026-09-27 — — bronze line 0.342 yasumorishima
2026-10-01/02 — — public 0.399–0.409 notebooks appear; "~170 teams line up at 0.399–0.401" yasumorishima
2026-10-03 — — bronze line 0.401 yasumorishima
2026-10-05 2,470 0.471 gold (14) 0.426, silver (123) 0.416, bronze (247) 0.411, median 0.328; 0.417 = rank 111 "of ≥ 800" yasumorishima; leesirleesirlee-star LEADERBOARD.md
2026-10-07 05:20 2,673 0.480 ≥ 0.42: 266; ≥ 0.43: 35 own pull
2026-10-07 13:59 2,703 0.481 gold (15) 0.436, silver (135) 0.425, bronze (270) 0.421, median 0.328 own pull

Rank 1 moved 0.425 → 0.471 → 0.481 in 11 days (+0.056), the bronze line 0.342 → 0.401 → 0.411 → 0.421 (+0.079 in 10 days), while the median has been frozen at 0.328 since at least 10-05 — the prvsiyan-rerun cluster. The same 0.417 score was rank 111 on 10-05 and is ranks 344–417 today: a public-notebook score decays ~30 ranks/day.

Forced analogy: law of evidence — standard of proof and burden allocation

Statement. A submission row is a 25-seat jury that must convict exactly one defendant; MRR pays 1/seat-number of the first correct conviction and nothing for acquittals. The "primary hypothesis" H (chosen formula / curated pool / adduct) is the prosecution's theory; "hedges" A (second formula, other adduct, PubChem-only isomer, derivative) are alternative theories. The burden question is: how many seats must the prosecution's theory fill before an alternative theory earns a seat, as a function of P = P(H true)?

Derivation. Let f(k) be the probability that, given its theory is true and the truth is in its list, a theory's ranker puts the truth at list-rank k. Fit f(k) ∝ k^−s on 1..25 to the one measured within-hit curve we have (leesirleesirlee-star: ranking-only MRR 0.765) → s = 2.073, which implies 64.4 % of hits at rank 1, 15.3 % at rank 2, 6.6 % at rank 3, 92.3 % within top-5. Expected MRR of any seating is Σ_i π_i / i where π_i is the probability the item in seat i is the truth; because exactly one item is true, the rearrangement inequality makes the optimum simply sort every candidate from every theory by its posterior π. For block seating (m primary seats then hedges) the m-th primary seat is worth P·R_H·f(m)/m and the first hedge seat (1−P)·q·R_A·f(1)/m, so the hedge enters at seat m* = ⌊(P·R_H / ((1−P)·q·R_A))^{1/s}⌋ + 1 (q = P(alternative theory true | H false); R = within-theory recall@25). Numerically with R_H = R_A, q = 1 (ev_model.py in scratch):

P(H) odds first hedge at seat best block m EV block EV all-25-primary EV optimal interleave seating pattern
0.50 1 2 1 0.526 0.383 0.551 HAHAHAHA…
0.70 2.3 2 2 0.589 0.536 0.619 HAHHAHAHHA…
0.80 4 2 3 0.638 0.612 0.655 HAHHAHHAHH…
0.90 9 3 6 0.696 0.689 0.704 HHAHHHAHHH…
0.95 19 5 12 0.729 0.727 0.732 HHHHAHHHHA…
0.98 49 7 — — — — —

If the alternative theory's list is only half as good (q·R_A/R_H = 0.5): best m = 2 / 4 / 11 at P = 0.5 / 0.7 / 0.9, EV 0.431 / 0.553 / 0.691 vs all-primary 0.383 / 0.536 / 0.689. Rule: unless the primary theory is > 90 % certain, the second seat belongs to the best alternative theory, and the primary's own rank-2 candidate goes to seat 3; "preponderance" (P ≈ 0.5–0.7) means strict alternation; only "beyond reasonable doubt" (P ≥ 0.95) justifies four or more consecutive primary seats. The hedge is cheap because f(k) falls as k^−2: the primary's third candidate carries 6.6 % of its mass, the alternative's first carries 64 % of its. Testable: on the enveda-np-examples backtest, replace block seating (curated top-25, PubChem only in slots 4/8/12 or 5 tail slots — exactly what V44 does) with posterior-sorted interleave; the model predicts +0.02–0.04 when the gate P is miscalibrated below 0.9, and ≈ 0 when the library lock (lib_max ≥ 0.9) is already correct.

Back-solve check against write-ups (within-hit MRR = MRR / recall@25; implied top-1 share from the fitted Zipf):

Write-up / setting MRR recall@25 within-hit MRR fitted s top-1 share of hits top-1 share of all
leesirleesirlee V44, public LB (recall back-solved) 0.417 0.545 0.765 2.07 0.64 0.35
mxm-1x closed-world exact-mass 0.144 0.585 0.246 0.46 0.11 0.06
mxm-1x closed-world fragment reranker 0.313 0.755 0.414 0.98 0.26 0.19
mxm-1x closed-world HGB 0.510 0.879 0.580 1.43 0.43 0.37
mxm-1x COCONUT pilot exact-mass → frag → HGB 0.288 / 0.405 / 0.563 0.761 / 0.826 / 0.913 0.378 / 0.490 / 0.617 0.88 / 1.19 / 1.54 0.22 / 0.33 / 0.47 0.17 / 0.27 / 0.43
mxm-1x 250-NP holdout, COCONUT-only 0.275 0.724 0.379 0.89 0.22 0.16
mxm-1x 250-NP spectral retrieval 0.926 0.996 0.930 3.39 0.88 0.87
chiparon 250-NP cross-library cosine (measured top-1 0.896) 0.934 0.992 0.942 3.61 0.90 (meas. 0.90) 0.89
prvsiyan class-2 sim, ±10 ppm, recall 1.00 0.521 1.00 0.521 1.27 0.36 0.36
prvsiyan COCONUT+train class-2 sim 0.732 1.00 0.732 1.93 0.60 0.60

Consistency: the Zipf fit reproduces chiparon's measured top-1 (0.90 predicted vs 0.896 measured) — the only place the shape can be checked — and leesirleesirlee's independent "head p ≈ 0.30–0.35" rank-1 share matches the 0.35 implied here. The public LB's 0.765 lies between prvsiyan's class-2 ranking (0.52–0.73, recall forced to 1) and the near-perfect class-1 numbers (0.93), which is what a 17 % class-1 / 83 % class-2+3 mixture should give. So the claim "~45 % of hidden molecules never reach the 25" is arithmetically consistent across three independent write-ups, though it rests on one simulated 0.765. Random-ranker reference: MRR@25 = H₂₅/n = 0.153 (n = 25), 0.068 (56), 0.036 (107), 0.0008 (4,652) — the PubChem window of Isaackjoshua is a jury of 4,652 with no judge.

Where the analogy holds, partially holds, breaks. Holds: seats are scarce, early seats are worth more, and the burden shifts with the prior exactly as the odds formula says. Partially: a jury convicts once; here a later correct seat still pays (1/k), so the "standard of proof" is continuous, not a threshold. Breaks: (i) there is no cost to a wrong conviction — Isaackjoshua's "tiered" PubChem fill "cannot lose ground" because empty seats score zero anyway, so every row should carry 25 distinct InChIKey14s (377 single-submission teams and many baselines leave seats empty); (ii) a duplicate InChIKey14 (two tautomer spellings, stereoisomers, Kekulé vs aromatic) is a juror who has already voted — dariushafshar measured 10.42 % of COCONUT keys change under the scorer's canonicalisation, 2.30 % can disagree, costing 0.0004 MRR when keyed naively on COCONUT but +0.105 on the affected molecules; (iii) the "jurors" are not independent — same-formula isomers are the entire problem (70.8 % of window candidates share the true formula; median 46 isomers), so hedging across formulas is cheap while hedging across isomers within one formula is where f(k) is flat and expensive.

Gotchas — what could silently fool a modeller or a reader

  1. The public LB is a 130-molecule sample. One molecule = up to 0.0076; identical code reran 0.335 → 0.328; nghianguyen7171's byte-identical reruns landed 0.011 and 0.105 below advertised scores. Any delta < 0.01 is noise; the top-50 (0.429–0.481) spans 7 "molecules".
  2. Exact-score clusters are clones, not convergence. 32.7 % of teams sit on sixteen values; the silver line is the 0.425 clone score. A team count or "rank 100 = 0.425" tells you about notebook popularity, not about the difficulty of the problem.
  3. Submission count correlates with score (ρ = 0.54) because clones need ≥ 1 submission and real work needs 50 — not because iteration on the public LB works; yasumorishima's log shows 30+ submissions moving 0.275 → 0.303 while local CV moved 0.52 → 0.66.
  4. Local validation inverts on the LB. Three independent reports: random held-out train structures predicted the opposite ranker order (shiferaxa); LGB CV 0.65 → LB 0.279 < no-LGB 0.294 (yasumorishima); "a decomposition fitted to our own anchors yields a negative class-1 weight" (nghianguyen7171). Only the 250 enveda-np-examples under three masks has predicted LB order.
  5. The decoy detector is a landmine. Kernels switch to full runs on sha256(test.parquet) != 2fa29c4a… or MD5 654e030e…; if Kaggle ever changes the placeholder file, those notebooks silently run the 9-h path on commit.
  6. ICEBERG/GLACIER "worth ≈ 0" was a budget artefact: ICE scored 71 of 400 molecules (18 %) with budget 300 s and the score still read 0.417; the 0.421 notebook uses 5,400 s. Fixed wall-clock budgets do not scale with molecule count — a backtest with 2,000 queries starves them.
  7. Bigger pool ≠ more recall in practice: PubChem top-25 isomers took prvsiyan's class-2 sim 0.732 → 0.379; Enamine tier (92.3 % of enveda-180) cost −0.013 LB; +62,744 ChEBI/LIPID MAPS = +0.000; popularity priors are +0.004 to +0.011 in one lineage and monotonically negative in another (μ 0.2 → −0.075).
  8. Advertised titles lie by version: "0.421" notebook scored 0.420 on v1; "V18 Sovereign Zenith [Target 0.440+]" replays at 0.425; "Protected Bio-DB Tail" says "new score unknown". Use the LB cluster, not the title.
  9. Kaggle's kernel_sources is empty on 19/20 pulled kernels — fork lineage must be read from markdown; the ten-ancestor list in the V44 text is the best provenance map available and is itself a competitor's claim.
  10. Keying candidates by the library's own InChIKey14 instead of the scorer's canonicalisation costs ~0 on COCONUT overall but 0.105 on the 2.3 % of structures where it disagrees (dariushafshar) — and more on de-novo SMILES in odd tautomeric forms.
  11. Ties are broken by submission time: inside the 149-team 0.425 block, medal/no-medal is decided by who ran the clone first.
  12. Team-merge arithmetic: 95 % of teams are solo; the 12 teams ≥ 0.44 include five-person teams (Arsokan) and a three-person team with 96 submissions (Sls2) — merging pools submission budget (5/day/team) and GPU quota (30 h/week/account, the real bottleneck per leesirleesirlee-star: "~6 variants per week").

Implications for the challenge

  1. Treat the public LB as a ±0.01 instrument and never select between variants on it alone; use the 250 enveda-np-examples three-mask backtest (shiferaxa, leesirleesirlee-star Tier 1, paired s.e. ±0.002) as the primary selector and the LB as a sanity check.
  2. Clone-floor is 0.425 today (V18 Sovereign Zenith replay) and decays ~30 ranks/day; our first real submission should reproduce 0.425 to anchor our environment (as leesirleesirlee-star did with V44), then measure every change as a paired delta on the backtest.
  3. Fill all 25 seats with distinct scorer-canonical InChIKey14s, every row — zero-cost, and the posterior-sorted interleave rule above says the second seat goes to the best alternative theory unless P(primary) > 0.9.
  4. Target recall@25 explicitly: it is ≈ 0.545 at 0.417 and nobody in the public tree optimises it; the mxm-1x and Isaackjoshua numbers show ranking inside a found list already converts 58–77 % of hits to rank-1 share.
  5. Budget forward models by molecule count, not wall-clock; run ICEBERG/GLACIER on the library-less molecules first (the 0.421 notebook's ordering) and verify coverage (n_mols_scored) in logs on every scoring rerun.
  6. Do not add PubChem as a pool; join ≤ 50 PubChem-only candidates into the main ranker under a library gate (lib_max < 0.7) — the one pool change with a reproducible +0.011.
  7. Keep two final picks on different theories (e.g., one library-locked, one interleaved) — the private 67 % can reorder a 0.01-wide band of 300 teams.
  8. Settle the class-2/3 split (16/45/39 vs 16/27/55) with a library-free probe submission (all-COCONUT retrieval, no train spectra) — it fixes the retrieval ceiling (≈0.45 vs ≈0.61) and therefore how much to invest in de novo.

Open questions

  • Is the public/private split really 33/67 and ~130 molecules? (kitopl, unattributed) — readable only on the Kaggle LB page.
  • What does thread 741404 actually say, and did the host address the 1,213 vs ~1,500 and seven-vs-ten-adduct discrepancies?
  • What produces the 77-team 0.411 and 14-team 0.146 clusters?
  • Does any team > 0.44 use anything outside the prvsiyan → v4n → fusion lineage? Rank 2 (MarvinTMB, 0.466 with 12 submissions) is the strongest hint of an independent method.
  • Does the k^−2 within-list rank curve hold per class, or is class-2 flatter (prvsiyan's 0.52 at recall 1 implies s ≈ 1.3)? A per-class curve changes the interleave rule.

Sources

Kaggle API (own pulls, 2026-10-07): kaggle competitions leaderboard … --download at 05:20:19 and 13:59:36 UTC (lb_snapshot_2026-10-07.csv); kaggle kernels list --competition enveda-CASMI26-molecule-id-mass-spectra --sort-by voteCount|scoreDescending|dateRun --page-size 100 -v pages 1–2 (kernels_2026-10-07.csv); kaggle kernels pull of: inversion/casmi-denovo-tutorial-notebook, haideptry/enveda-casmi-2026-fast-spectral-cosine-baseline, evgendvorkin/enveda-casmi-2026, prvsiyan/analog-propagation-casmi-2026-baseline, bobthebot369/enveda-casmi-2026-v18-sovereign-zenith, dmitriigluzdov/casmi-26-from-spectra-to-structures, seyitkaangunes/casmi26-v4n-engine-fusion-union-lb-0-399, huseyinemreaksoy/casmi26-v4n-fusion-pubchem-on-public-0-421, imranarif536/casmi26-v44-pairtail-locked-top1, uninhibitedscholar/enveda-casmi-2026-own153-public-lb-0-417, hengck23/dreams-structure-from-spectrum-retrival-demo, denpugovkin/casmi-2026-protected-bio-db-tail, kozykappa/enveda-0-37-lb-score, dariushafshar/casmi26-10-4-of-keys-change-0-48-cost-you, plus earlier pulls of kitopl/casmi-2026-data-pitfalls-that-break-your-cv, josefreitasalvesneto/casmi-2026-a-complete-statistical-tour, mohammadhmozafary/casmi-2026-domain-knowledge-for-non-chemists, dreaddevelopment/casmi-2026-data-metric and the official metric notebook metric/casmi-mean-reciprocal-rank (read, never executed). GitHub (raw READMEs/docs, mirrors of Kaggle facts): https://github.com/leesirleesirlee-star/Enveda_CASMI-2026_Molecule-ID-From-Mass-Spectra (README, docs/LEADERBOARD.md, docs/PLAYBOOK.md); https://github.com/gnshx/Enveda-CASMI-2026---Molecule-ID-From-Mass-Spectra (README, progress/ROADMAP_AND_PROGRESS.md); https://github.com/nghianguyen7171/casmi26; https://github.com/Isaackjoshua/casmi-2026; https://github.com/corentinlaudicina/enveda-casmi-2026; https://github.com/yasumorishima/kaggle-competitions (enveda-casmi26/CLAUDE.md); https://github.com/billylu24/Enveda-CASMI-2026---Molecule-ID-From-Mass-Spectra; https://github.com/mxm-1x/Enveda-CASMI-2026; https://github.com/chiparon/enveda-casmi26; https://github.com/shiferaxa/casmi26; https://github.com/AmanDubal/Enveda-CASMI-2026---Molecule-ID-From-Mass-Spectra; https://github.com/kabir0774/Enveda-Casmi-2026; https://github.com/AayanShabbir/casmi26; https://github.com/NoName7n11/Enveda_CASMI_2026 (OVERVIEW.md, WORKFLOW.md; README 404); https://github.com/dalloliogm/kaggle_competitions (Data-page mirror); https://github.com/OfficialBhattacharya/kaggle_CASMI_2026; https://github.com/Clyde0513/CASMI-2026; https://github.com/bobownYAO/Enveda-CASMI-2026-Molecular_Formula; https://github.com/ibnmarzuk/casmi26-molecule-id; https://github.com/tyofthestars11-lab/casmi26-molecule-id. Not reachable: https://www.kaggle.com/competitions/enveda-CASMI26-molecule-id-mass-spectra/discussion/741404 (JS shell; title only). Kaggle medal rule as applied: gold = top 10 + 0.2 %, silver = top 5 %, bronze = top 10 % for > 1,000 teams (Kaggle progression rules, applied from memory of the published table — verify on kaggle.com/progression).