Objective
Promote every distinct issue-linked indicator or strategy family as one best-variant public entry regardless of absolute quality, without publishing threshold sweeps as separate rows or erasing rejected evidence.
Approach
Used the ranking rule in research/findings/all-family-promotion-qm-1038.md: indicators rank by retained T+2 hit-rate versus unconditional and event baselines, then sample size and simpler rule; strategies rank by common-window risk-adjusted return, then drawdown and simpler rule. Fidelity-frozen rules take precedence over post-hoc metric winners. Families were grouped across threshold grids, re-audits, cadence siblings, dynamic-bond variants, and leverage cohorts.
Files changed
research/findings/all-family-promotion-qm-1038.md— complete family ledger,
selected variants, routes, limitations, and rejected context.
research/findings/README.md— ledger index entry.research/fixtures/buy-signals-v1.json— canonical rows for VIX
backwardation, Pine VIX contango, raw and cumulative NH-NL, and Berg F1–F4 public-proxy families, with family identity and disclosure metadata.
research/risk_signals_history.py— shared SignalSpec adapter and
Pine-specific VIX-contango/cumulative-NH-NL evaluators; missing inputs remain unavailable rather than fabricated.
research/reports/signals_publish.py— native VIX/VIX3M/HIGN/LOWN and stable
SignalSpec input aliases.
research/reports/experiments.py— Berg experiment records included in the
canonical experiment scope.
research/reports/view_models.py— Other-indicator lede names new families.research/signal_spec/fixtures/berg-price-percentile.json— inclusive 5th
percentile trigger so the declared lowest-rank proxy can fire at its finite sample boundary.
Generated docs/ outputs were rebuilt only through canonical report producers; no generated file was hand-edited. Berg entries are public proxies, not MB Edge replicas: proprietary feeds are unavailable, every proxy threshold/window is inferred, and miltonberg.com source citations remain attached.
Validation
python3 -m pytest -q tests/test_risk_signals_history.py— 14 passed.python3 -m pytest -q tests/test_signal_spec.py tests/test_signals_page.py tests/test_experiments_payload.py tests/test_experiments_completeness.py tests/test_experiments_graphs_distinct.py— 29 passed.python3 -m research.reports.signals_publish --offline— generated 68 signal
histories including the eight new family entries.
python3 -m research.reports scaffold— generated 30 experiment records and
the Other-indicators page with the new family cards.
python3 -m research.artifacts build --mode full --offlinefollowed by
python3 -m research.artifacts check --mode full --offline — shared artifacts are deterministic and current.
python3 research/scripts/check_static_reports.py docs— local bundle OK:
1477 files and 183 canary routes.
Limitations
Rejected or investigate-only strategy research without a real canonical runner remains discoverable on the generated research/experiment surfaces rather than receiving a fake executable catalog runner. AS risk-off rows remain strategy- derived canaries; AS and non-AS strategy variant families already represented in the canonical catalog are documented in the ledger and are not duplicated. NAAIM–AAII and other derived-only families retain their existing benchmark or research surfaces and raw-source non-redistribution boundaries.