Files
foxhunt/docs
jgrusewski cb7ace0063 feat(sp21): T2.2 Phase 8.6 — curriculum weights via z-score exp(-sharpe) (atomic)
v8 smoke (train-96wfk, commit 5694eb4df) cycle 1 confirmed
curric_conc=0.0000 despite Phase 8.2 (relaxed clamp) and 8.4 (CV
formula) — root cause was the per-segment weight function itself,
not the post-hoc concentration metric.

Old:  (1.0 / sharpe.max(0.01)).clamp(0.01, 100.0)
      → saturates at 100 when sharpe < 0.01
      → with PF<1 policy, every segment has |sharpe| < 0.01
      → all weights = 100 → uniform → CV=0

New:  exp(-(sharpe - sharpe_mean) / sharpe_std).clamp(-3, 3)
      → z-score normalised, scale-invariant
      → monotonic, smooth, no saturation cliff
      → preserves differential difficulty at any scale
      → uniform-input → std=0 → z=0 → uniform weights (cold-start ✓)

The Phase 8.4 CV formula was correct but operates on post-saturated
weights which destroy differential signal upstream. 8.6 fixes the
producer, 8.4 + 8.6 compose to give a meaningful curric_conc on
volume bars.

Note: win_conc=0 is intentional under PF<1 policy (compute_winner_concentration
guards against undefined "winner concentration" when policy is losing).
This is honest reporting, not a bug; addressed in audit doc rather
than this commit.

Pearls honoured:
  - pearl_controller_anchors_isv_driven: normalisation anchor =
    observed sharpe_std (signal-driven), not magic
  - feedback_isv_for_adaptive_bounds: z-clamp [-3, 3] is 3σ tail-
    cutoff for numerical safety, structural not tuned
  - pearl_first_observation_bootstrap: uniform Sharpe → uniform
    weights (cold-start sentinel preserved)
  - feedback_no_quickfixes: structural reformulation (1/x → exp(-z))
    not a clamp adjustment

Verification:
  cargo check -p ml --features cuda  # clean

Expected v9 cycle 1 curric_conc: ~0.3-0.6 (strong differential signal)
from typical per-segment Sharpe spread ~1σ across 8 segments.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 14:24:26 +02:00
..