# Tier 0 — stochastic-method inventory (authoritative) Derived from source: the set of C-kernel files that contain a file-local `splitmix64` generator (`grep -rln splitmix64 cpp/src/core/`) is the *true* stochastic surface. Everything else is deterministic or a Python composite that bypasses the C kernel. ## The 14 splitmix64-using core files **12 stochastic selectors** (RNG-parity scope): `cars_selection`, `emcuve_selection`, `ga_selection`, `iriv_selection`, `irf_selection`, `pso_selection`, `random_frog_selection`, `randomization_selection`, `scars_selection`, `stability_selection`, `uve_selection`, `vissa_selection`. **2 infrastructure** (also RNG, but not selector parity): `model.cpp` (randomized-SVD component sampling — context-seed + component offset), `validation.cpp` (CV fold assignment). ## Dashboard parity policy (2026-05-30) The dashboard now separates three selector outcomes instead of collapsing all feature-mask differences into a red failure: - `selection_exact` → exact selector parity (`Jaccard = 1.00`). - `selection_divergence_allowed` → `cross_check` with the recorded reason (for example `t2_select`, where the statistic matches but the loading-weight convention differs). - documented `selection_mismatch` methods → `cross_check` with an amber `BD J` badge and a tooltip explaining why exact feature-mask parity is not expected. Unmapped `selection_mismatch` rows still render as real `divergent` failures. This keeps the matrix strict by default while making the known RNG/noise/model exceptions explicit. ## Post-investigation selector verdicts (2026-05-30) | method | canonical default | reference + its RNG | verdict | |---|---|---|---| | `uve_select` | R `plsVarSel::mcuve_pls` | R-MT | canonical dashboard path exact; legacy C++ path remains a documented `BD J` cross-check because its noise count, RNG, and folds differ | | `emcuve_select` | R `mcuve_pls` ensemble | R-MT | exact in the current matrix | | `stability_select` | R `mcuve_pls` stability analogue | R-MT | `BD J` cross-check — R mcuve stability and n4m legacy stability use different subsampling/std/RNG-noise conventions | | `cars_select` | R `enpls.fs` analog | R-MT | `BD J` cross-check — executable reference is an enpls importance analog, not n4m CARS proper | | `spa_select` | R `plsVarSel::spa_pls` | R-MT | `BD J` cross-check — R uses random subsampling + Wilcoxon/permutation logic; n4m legacy SPA is deterministic | | `ga_select` | R GA selector | R-MT | cross_check — GA is highly RNG/impl-sensitive | | `iriv_select` | NumPy IRIV port | numpy PCG64/default_rng | `BD J` cross-check — NumPy/scipy rank tests and n4m legacy candidate generation are not the same algorithmic path | | `random_frog_select` | auswahl `RandomFrog` | numpy RandomState-MT | `BD J` cross-check — different MCMC proposal chain and random stream | | `vissa_select` | auswahl `VISSA` | numpy RandomState-MT | `BD J` cross-check — different submodel sampling/aggregation path | | `irf_select` | auswahl `IntervalRandomFrog` | numpy RandomState-MT | `BD J` cross-check — different interval proposal chain | | `randomization_select` | R randomization (`pvals