← all research

No verdicts. This report records infrastructure that makes future verdicts honest. Sleeve stays frozen (Gemma-only v1, paper).

What shipped

  • validation/forward_lab_store.py: immutable all-101 prediction rows (refuse-overwrite), input hashes, separate outcome files, daily validity receipts (any invariant violation fails the date), global trial counter (data/research_trials.jsonl, seeded at K=63 historical edge-hunt reports + build row).
  • validation/forward_lab_stats.py: date-block bootstrap CI (primary inference unit = trading day), paired D_t readout (mean/median/hit rate/rel-DD/turnover-cost diff), beat-randomized-null probability, per-date Spearman IC, power-analysis day calculator.
  • validation/forward_lab_design.py: sealed challengers C0–C5 (pure builders, unwired) + pre-outcome fresh-info tagger (no analyst feed exists — event folded into catalyst upfront, documented).
  • production/llm_research.py: LLM_FULL_COVERAGE=0 (default OFF — zero behavior/series change), PROMPT_VERSION, validator coverage passthrough, maybe_write_coverage hook (flag-gated, fail-open).
  • 8 tests green (tests/test_forward_lab.py).

Deliberate deviations from the commissioning spec

  • Challenger runs NOT wired (builders + spec only). Each challenger × daily API calls; execution is a voted phase with identical timestamps/outcomes.
  • Prompt coverage block ships flag-OFF. Enabling it starts a new shadow series (model+prompt versioned); propose as a vote, not a default.
  • Power thresholds (10/30/60/100/200d) kept as checkpoints, not magic — required_days() runs once forward vol is observed.

Clocks now running

  • Gemma shadow series (judge votes).
  • Coverage series (starts when LLM_FULL_COVERAGE=1 is voted).
  • Forward harness (edge_hunt33_gemma_forward.py) executes at N>=30 rows.
  • Trial counter K=63 and counting — every future study's DSR uses it.