iteration 03 · probes built

Parameterless + agnostic probes (runnable)

Two new static/oracle probes, runnable locally on synthetic fixtures like test_leakage.py. Outputs are committed evidence in the audit folder.

Parameterless probe — AST + constants registry

Replaces by-hand "inspection" with a static gate: scan for literals + estimator kwargs + dispatch, classify each against constants_registry.toml (derived / project_wide OK; feature_tunable / inline-literal BLOCK).

candidate implverdictwhy
build_candidate_registrybar_svd_entropyPASSreferences project-wide SVD_ORDER / SVD_DELAY
hjorth / petrosian / katz candidatesPASSno literals of concern
codec_foci_eval.add_antropy (same feature)FAILinline order=3/delay=1 + LOOKBACK/LOOKBACK_COUNT drift

Same feature (svd_entropy) is parameterless when pinned to the project-wide constant, non-promotable when it hardcodes its own order/delay — the exact knob to veto.

Agnostic probe — algorithm-invariance

testcaseverdictnumber
A no-dispatchif len>=500: app else permFAILestimator dispatch
B oraclehjorth_mobility (two formulas)PASSabs_diff 6.9e-18
B oraclepetrosian_fd (two counts)PASSabs_diff 0.0
B oracleembedding_entropy order 3 vs 4 (unpinned)FAILrel_diff 3.3%
C doc/codedeclared DFA vs implemented R/SFAILfamily {dfa} ≠ {rs}
The TEST B FAIL links the axes: the same feature diverges across two correct implementations because its embedding order isn't pinned to the project-wide constant — an unpinned parameter is a parameterless FAIL and an agnostic FAIL.