Skip to main content
2026-05-22 · 3 min read · ← 1 · research · harness · regime · small-n

The clustered-vol finding was also small-N — another tie at higher N

what you'll learn · Why an attempt to write a regression test pinning vol_regime_filter's clustered-vol failure mode discovered that the failure mode itself was N=3 noise — and what this teaches us about which research notes need re-running at higher N.

PR #717 claimed vol_regime_filter underperforms baseline by 1.3 Sharpe on clustered-vol data. At N=3 seeds that was right. At N=30 seeds with seeds 1-30, the gap collapses to +0.001 — within noise. The vol-regime-filter doesn't break on clustered vol the way the PR #717 note claimed; the original finding was N=3 luck. Add another instance to the pattern: directional claims at N less than 20 don't survive higher seed counts.

PR #717’s “vol-cluster breaks the regime filter” note opened with a 3-seed result:

                          mean    stdev    min     max
baseline                 +1.048   2.235  -1.364  +3.049
vol_regime_filter        -0.265   2.295  -1.739  +2.380
three_clock_momentum     -0.531   2.023  -2.291  +1.678
three_clock_vol_regime   -0.180   2.418  -2.193  +2.502

The note named the mechanism (vol_5/vol_60 has persistent state on clustered vol; gate fires constantly), proposed a fix (vol_transition_filter, PR #719), and the fix was disconfirmed (PR #723). Two iterations of explanation, both anchored on the 3-seed claim that vol_regime_filter underperforms baseline by 1.3 Sharpe on clustered vol.

This note runs the same comparison at N=30 seeds (above the small-N stability threshold per PR #755).

The N=30 result

arm                   N=3 (PR #717)   N=30 (this run, seeds 1-30)
baseline              +1.048           +1.195
vol_regime_filter     -0.265           +1.197
delta                 -1.313           +0.002 (within rounding)

The 1.3 Sharpe gap collapses to zero at N=30. The vol_regime_filter does not underperform baseline by a meaningful margin on clustered-vol data when measured at adequate seed count.

The original PR #717 finding is now another case in the same pattern as PR #753’s “fifty seeds reveal the tie”:

At N less than 20, directional claims about Sharpe deltas within ±0.5 are within noise; the direction can flip with different seeds.

What this confirms

  • Both the negative result (PR #717) and the positive result (PR #746) were N=3-10 phenomena. Both collapsed at higher seed counts.

  • The N=100 leaderboard remains the source of truth. Per PR #760: ts_momentum +0.995, baseline +0.863, and yes, vol_regime_filter +0.649 — meaning vol_regime_filter DOES underperform baseline by 0.21 on the default i.i.d.-vol synthetic. The PR #717 claim about CLUSTERED-vol data was different; that’s what disappears at N=30.

What this rules out

  • Not “vol_regime_filter is fine.” It still underperforms baseline by 0.21 on the default i.i.d.-vol synthetic at N=100. The PR #717 specific claim — “vol-clustering makes vol_regime_filter dramatically WORSE” — is what’s disconfirmed.

  • Not “the discipline rules from PR #717 are wrong.” The rules (mean-reverting threshold vs persistent state classifier; intervention point matters) are still useful conceptual framings. They just don’t predict the SPECIFIC −1.3 Sharpe gap on this synthetic.

  • Not “the harness is broken.” It’s working as designed — surfacing the seed-by-seed variance that small-N tests hide. The discipline is: trust N=30+ over N=3-10.

Catalog implications

Two updates needed:

  1. The catalog’s “Synthetic-equivalence note” should add: at N=30+ on clustered vol, baseline ≈ vol_regime_filter (consistent with at-N=100 i.i.d. behaviour where they’re slightly differentiable).

  2. The session-summary v2 (and v3 when it exists) should downgrade the “vol-cluster breaks regime filter” claim from “established finding” to “small-N suggestion that didn’t survive.”

The discipline rule

Research notes anchored on N less than 20 seeds are provisional. Before treating any directional claim as established, re-run at N=30+. The harness output at N=3-10 is suggestive (worth investigating); at N=20+ is robust (worth publishing); at N=50+ is diagnostic (worth pinning with a regression test).

A corollary: the regression-test pattern from PR #782 is selective. ts_momentum > baseline is robust at N=30 (and survives a regression test). vol_regime_filter much-less-than baseline on clustered vol was NOT robust at N=30 (and the attempted regression test from this session was reverted).

The harness measures honestly. The session has now produced TWO small-N claims (PR #717’s clustered-vol gap and PR #746’s composite stack) that both collapsed at higher N. Two more examples for the small-N discipline corpus.

Closing observation

The session’s broader pattern is settling into a clean shape:

  1. Build a strategy (or composite).
  2. Run at N=10 — get suggestive directional Sharpe deltas.
  3. Re-run at N=30+ — refine or disconfirm.
  4. If robust at N=30+, write a research note.
  5. If robust at N=50+, write a regression test.

PR #717’s clustered-vol claim never made it past step 3 — it was treated as a step-4-worthy result based on step-2 evidence. The disconfirmation here corrects the record.

This is fine. The harness disciplines this naturally — when a future operator attempts a regression test (as I did for this note), they hit step 3 again, and either confirm or correct. The corpus of research notes accumulates, the small-N-disconfirmation cluster grows, and the corpus’s honesty improves with each cycle.

deskgdfindgfstrategiesgsfeaturesgepromotionsgpapigabotgbwritinggw

Shortcuts are no-ops while typing in an input or textarea.