{
  "title": "StableBet Rating research register",
  "description": "Every test that could change the StableBet Rating, registered before it runs and scored once by stablebet_agents/scripts/rating_experiment.py, which appends each result beside its row. Each row's prereg_sha256 is the SHA-256 of the canonical JSON (keys sorted, no spaces, whole numbers without a decimal point) of this protocol block together with the row's id, batch, kind, source, registered, hypothesis, rule, compare_to, primary and decision, so any edit shows. A row's source says where the test came from: a candidate names the idea it tests (its IDEA- id in the ideas ledger, agent-tasks/ideas/) and who pitched it, and the baseline and the controls name the protocol. A row that has run is never edited: a change is a new row. The full results of a batch are in experiments/<batch>.json beside this file. The system record is STABLEBET_RATING.md in the repository.",
  "schema": "register.schema.json",
  "protocol": {
    "id": "SBR-P1",
    "registered": "2026-09-24",
    "system_record": "STABLEBET_RATING.md, section 5",
    "question": "Does a candidate rule find the winner of a handicap more often than the active version of the StableBet Rating (version 1.0, form-v1)?",
    "population": {
      "starter_statuses": [
        "won",
        "placed",
        "unplaced",
        "dnf",
        "pulledup",
        "fell",
        "unseatedrider",
        "broughtdown",
        "refusedtorace",
        "ranout",
        "slippedup",
        "refused",
        "carriedout"
      ],
      "min_starters": 4,
      "winners": 1,
      "sp_rule": "an SP above 1.0 for every starter",
      "scored_races": "a row is scored on the races where every starter has a figure under both its rule and its comparator",
      "min_holdout_handicap_races": 3000,
      "guard": "the runner refuses a database that does not reach the end of the holdout, or that holds fewer holdout handicap races than min_holdout_handicap_races, so a truncated copy never becomes a result"
    },
    "windows": {
      "development": {
        "from": "2023-10-01",
        "to": "2025-08-31"
      },
      "holdout": {
        "from": "2025-09-01",
        "to": "2026-08-31"
      },
      "folds": [
        {
          "from": "2025-09-01",
          "to": "2025-11-30"
        },
        {
          "from": "2025-12-01",
          "to": "2026-02-28"
        },
        {
          "from": "2026-03-01",
          "to": "2026-05-31"
        },
        {
          "from": "2026-06-01",
          "to": "2026-08-31"
        }
      ],
      "never_from": "2026-09-01",
      "rules": "The development window is the only place a parameter may be fitted. The holdout is scored once per row. Nothing dated 1 September 2026 or later is read, as history or as a test. These are the model register's windows (knowledge/04-model/Model experiments.md)."
    },
    "primary": {
      "split": "handicaps",
      "handicap_rule": "handicap|nursery",
      "measure": "per race, the win credit of the top-rated starter under the row's rule (starters tied on the top figure share it) minus the same under its comparator; the mean over races, in percentage points",
      "figures": "each rule's figure as it would be published: rounded to the nearest pound, a half rounding up",
      "history": "a figure reads only races dated strictly before the race it rates"
    },
    "inference": {
      "bootstrap": "paired race bootstrap: races resampled with replacement, the same draws for rule and comparator",
      "resamples": 2000,
      "seed": 20260924,
      "interval": "percentile, 95%",
      "p_value": "two-sided: 2 x the smaller of (1 + resampled means at or below 0) / (B + 1) and (1 + resampled means at or above 0) / (B + 1), capped at 1. It is the smallest level at which the percentile interval would reach zero."
    },
    "multiplicity": {
      "method": "holm",
      "family": "the candidate rows of one batch; the baseline and the two controls are judged on their own p"
    },
    "decision": {
      "alpha": 0.05,
      "folds_agreeing_min": 3,
      "coverage_drop_max_pp": 2,
      "candidate_passes": "a Holm-adjusted p under alpha with a positive difference on the holdout's handicaps, at least 3 of the 4 folds with a difference of the same sign, and coverage of handicap starters no more than 2 points below the comparator's",
      "negative_control": "must fail the same test on its own p; if it passes, the batch is VOID",
      "positive_control": "must pass the same test on its own p; if it fails, the batch is VOID",
      "baseline": "reported, not decisive: the same test on its own p",
      "after_a_pass": "a pass is not a promotion: a passing candidate goes to shadow publishing (stage two) before it can change the racecard"
    },
    "secondary": [
      "all races, non-handicaps, GB, and Ireland (IE plus GB-NIR), each with its own interval and p",
      "coverage: the share of starters with a figure",
      "actual over expected at SP, overround removed, for the top-rated starters",
      "Spearman rank agreement with the finishing order, finishers only"
    ],
    "fitting": "a parameter may be fitted only on the development window, by a procedure written in the row before it runs",
    "schedule": "the runner fires on Sundays at 03:00 UTC, straight after the weekly model train (stablebet-model-train.timer); a row registered before a Sunday is run that Sunday",
    "notes": [
      "Version 1.0 was chosen in the 13 September 2026 study with 2025 and 2026 visible, so its frozen-holdout figures are slightly flattering (STABLEBET_RATING.md section 5, step 2). That makes the comparison harder for a challenger, not easier.",
      "Every result is published whichever way it lands. A null result is a finding.",
      "Nothing in this register is a claim that any rule makes money: the market already prices version 1.0 in."
    ]
  },
  "rows": [
    {
      "id": "SBR-000",
      "batch": "B1",
      "kind": "baseline",
      "source": {
        "kind": "protocol",
        "by": "agent"
      },
      "registered": "2026-09-24",
      "hypothesis": "Version 1.0 of the StableBet Rating (today's official rating less 2lb for each length beaten on the last finished run, capped at 10 lengths) finds the winner of a handicap more often than the top official rating does. Section 4 of STABLEBET_RATING.md measured this on data that overlaps the frozen holdout, and version 1.0 was chosen with that data visible, so this row checks that the harness reproduces the finding and records the interval widths the candidates are read against. The first clean test of version 1.0 is its live record from 24 September 2026. Direction: not assumed here.",
      "rule": {
        "method": "form-v1",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10
        }
      },
      "compare_to": "official-rating",
      "primary": "handicaps",
      "decision": "Reported, not decisive. The same test against the official rating, on its own p. It shows the harness reproduces the section 4 finding on the protocol's windows.",
      "prereg_sha256": "3d1a6ae0dbe486a58f73be9419abc98112d20d285efbc6714ff899c236a4cbd0",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "3d1a6ae0dbe486a58f73be9419abc98112d20d285efbc6714ff899c236a4cbd0",
        "verdict": "pass",
        "rule_verdict": "pass",
        "reasons": [],
        "batch_status": "valid",
        "p_basis": "own p",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.7,
          "compare_strike_pct": 14.4,
          "diff_pp": 4.38,
          "ci95": [
            3.5,
            5.28
          ],
          "p": 0.0009995,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.9,
          "coverage_drop_pp": 0.3
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 4.06,
            "ci95": [
              2.38,
              5.79
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 5.47,
            "ci95": [
              3.44,
              7.49
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 2.8,
            "ci95": [
              1.12,
              4.46
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 5.38,
            "ci95": [
              3.57,
              7.11
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 19.8,
            "compare_strike_pct": 15.6,
            "diff_pp": 4.22,
            "ci95": [
              3.38,
              5.08
            ],
            "p": 0.0009995,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.9
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.2,
            "compare_strike_pct": 29.8,
            "diff_pp": 2.37,
            "ci95": [
              -0.69,
              5.49
            ],
            "p": 0.1189,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.7
          },
          "gb": {
            "races": 7160,
            "strike_pct": 20.8,
            "compare_strike_pct": 16.4,
            "diff_pp": 4.39,
            "ci95": [
              3.46,
              5.35
            ],
            "p": 0.0009995,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.7
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.3,
            "compare_strike_pct": 11.9,
            "diff_pp": 3.36,
            "ci95": [
              1.53,
              5.18
            ],
            "p": 0.0009995,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.2
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            },
            "compare": {
              "ratio": 0.967,
              "ci95": [
                0.925,
                1.009
              ],
              "selections": 10961
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2021,
              "races": 7928
            },
            "compare": {
              "rho": 0.092,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89837,
            "targets": 118379,
            "missing": {
              "no_official_rating": 28542
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "25449d9546a0e63a13d5b969c5486634988c369b1ee81328835cf6e6eb6791ab"
      }
    },
    {
      "id": "SBR-001",
      "batch": "B1",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-006",
        "by": "agent"
      },
      "registered": "2026-09-24",
      "hypothesis": "Turning lengths into pounds at the rate the official handicapper uses for the trip, instead of a flat 2lb, changes how often the top-rated horse wins a handicap. On the Flat the rate is the BHA's published scale: 3.41lb a length at five furlongs and 1.22lb at a mile and six furlongs (BHA, Performance figures, Poundage scales), joined by a smooth curve that comes out at about 17lb divided by the trip in furlongs, so more pounds a length over sprints and fewer over staying trips. The BHA publishes its jumps scale only as a graph, with no figures in the text, so over jumps the rate is k divided by the trip in furlongs, with k chosen on the development window alone: the value in the rule's grid whose top-rated horse won development handicaps most often (the lowest on a tie). The trip is the one the lengths were recorded over, and lengths are still capped at 10. Direction unknown.",
      "rule": {
        "method": "form-dist-scaled",
        "parameters": {
          "cap_lengths": 10,
          "flat_anchors": [
            [
              5,
              3.41
            ],
            [
              14,
              1.22
            ]
          ],
          "min_furlongs": 5,
          "jumps_k_grid": [
            8,
            12,
            16,
            20,
            24,
            28,
            32,
            40
          ],
          "fit": {
            "parameter": "jumps_k",
            "grid": "jumps_k_grid",
            "window": "development",
            "objective": "handicap_win_credit",
            "tie_break": "lowest"
          }
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's five candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "b686b731b30f08f520ea5623e586fbc1bf232780770c6045407d38c1a14e5843",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "b686b731b30f08f520ea5623e586fbc1bf232780770c6045407d38c1a14e5843",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "p 0.9295 is not under 0.05",
          "2 of 4 folds agree in sign (at least 3 needed)"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.9,
          "compare_strike_pct": 18.7,
          "diff_pp": 0.14,
          "ci95": [
            -0.14,
            0.44
          ],
          "p": 0.3098,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0,
          "p_holm": 0.9295
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 0.6,
            "ci95": [
              0.01,
              1.21
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": -0.02,
            "ci95": [
              -0.67,
              0.6
            ],
            "agrees": false
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": -0.19,
            "ci95": [
              -0.74,
              0.37
            ],
            "agrees": false
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 0.14,
            "ci95": [
              -0.41,
              0.67
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 2,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 20.0,
            "compare_strike_pct": 19.8,
            "diff_pp": 0.12,
            "ci95": [
              -0.13,
              0.41
            ],
            "p": 0.3738,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.1,
            "compare_strike_pct": 32.2,
            "diff_pp": -0.08,
            "ci95": [
              -1.17,
              0.98
            ],
            "p": 0.8806,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 20.9,
            "compare_strike_pct": 20.8,
            "diff_pp": 0.1,
            "ci95": [
              -0.22,
              0.4
            ],
            "p": 0.5777,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.5,
            "compare_strike_pct": 15.3,
            "diff_pp": 0.25,
            "ci95": [
              -0.38,
              0.89
            ],
            "p": 0.4368,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.994,
              "ci95": [
                0.951,
                1.033
              ],
              "selections": 8738
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2025,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": {
          "parameter": "jumps_k",
          "window": "development",
          "chosen": 40.0,
          "objective": "handicap_win_credit",
          "grid": [
            {
              "value": 8.0,
              "races": 11151,
              "strike_pct": 18.62119989238633
            },
            {
              "value": 12.0,
              "races": 11151,
              "strike_pct": 18.925357964905988
            },
            {
              "value": 16.0,
              "races": 11151,
              "strike_pct": 19.160762861327836
            },
            {
              "value": 20.0,
              "races": 11151,
              "strike_pct": 19.15702627567034
            },
            {
              "value": 24.0,
              "races": 11151,
              "strike_pct": 19.2803336023675
            },
            {
              "value": 28.0,
              "races": 11151,
              "strike_pct": 19.429797028667085
            },
            {
              "value": 32.0,
              "races": 11151,
              "strike_pct": 19.364033121095268
            },
            {
              "value": 40.0,
              "races": 11151,
              "strike_pct": 19.470152153767977
            }
          ]
        },
        "detail": "experiments/B1.json",
        "result_sha256": "0ed8767f7c4fad996b2e8bc84f6bfb4964f669225ed6ab6eebf0ac6c1fabf6e0"
      }
    },
    {
      "id": "SBR-002",
      "batch": "B1",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-002",
        "by": "james"
      },
      "registered": "2026-09-24",
      "hypothesis": "Averaging the figure over the last three finished runs, instead of reading the last run alone, changes how often the top-rated horse wins a handicap. Each run gives today's official rating less 2lb a length beaten (capped at 10). A run among the three whose distance is unknown is left out, at least one run is needed, and the result reports how many runs each figure used. Direction unknown.",
      "rule": {
        "method": "form-3run",
        "parameters": {
          "runs": 3,
          "lbs_per_length": 2,
          "cap_lengths": 10
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's five candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "bdc64f2496b78432667f3447a72159fb7acf5bfdaf6c2b93632cb5b44d1e8aa9",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "bdc64f2496b78432667f3447a72159fb7acf5bfdaf6c2b93632cb5b44d1e8aa9",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "the difference is not positive (-1.09 points)",
          "p 0.0550 is not under 0.05"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 17.6,
          "compare_strike_pct": 18.7,
          "diff_pp": -1.09,
          "ci95": [
            -1.89,
            -0.23
          ],
          "p": 0.01099,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0,
          "p_holm": 0.05497
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": -0.73,
            "ci95": [
              -2.29,
              0.83
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": -1.42,
            "ci95": [
              -3.33,
              0.47
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": -1.38,
            "ci95": [
              -2.83,
              0.18
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": -0.9,
            "ci95": [
              -2.52,
              0.71
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 18.9,
            "compare_strike_pct": 19.8,
            "diff_pp": -0.96,
            "ci95": [
              -1.74,
              -0.19
            ],
            "p": 0.01899,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.6,
            "compare_strike_pct": 32.2,
            "diff_pp": 0.4,
            "ci95": [
              -2.43,
              3.12
            ],
            "p": 0.8096,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 19.6,
            "compare_strike_pct": 20.8,
            "diff_pp": -1.15,
            "ci95": [
              -2.01,
              -0.23
            ],
            "p": 0.01699,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.2,
            "compare_strike_pct": 15.3,
            "diff_pp": -0.07,
            "ci95": [
              -1.66,
              1.47
            ],
            "p": 0.9345,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.978,
              "ci95": [
                0.937,
                1.02
              ],
              "selections": 8902
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.1836,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            },
            "runs_used": {
              "1": 430,
              "2": 1406,
              "3": 87673
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "8353c37c642dd5169f14c3d17a8e45b69efd1b89af0a2f562443292e04ad3e3d"
      }
    },
    {
      "id": "SBR-003",
      "batch": "B1",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-003",
        "by": "james"
      },
      "registered": "2026-09-24",
      "hypothesis": "Crediting a last-time winner 2lb for each length it won by (capped at 10 lengths), instead of holding it at its official rating, changes how often the top-rated horse wins a handicap. A dead heat for first counts as a margin of nothing, and a winner whose margin is unknown gets no figure. Everything else is version 1.0. Direction unknown.",
      "rule": {
        "method": "form-win-margin",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "winner_lbs_per_length": 2,
          "winner_cap_lengths": 10
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's five candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "be4ee19c8765e38fb9100e64c8791059782511756af1e455d739bcab98f60432",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "be4ee19c8765e38fb9100e64c8791059782511756af1e455d739bcab98f60432",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "p 0.9295 is not under 0.05"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7944,
          "strike_pct": 18.9,
          "compare_strike_pct": 18.7,
          "diff_pp": 0.19,
          "ci95": [
            -0.24,
            0.65
          ],
          "p": 0.3938,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.01,
          "p_holm": 0.9295
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2077,
            "diff_pp": 0.47,
            "ci95": [
              -0.35,
              1.27
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1601,
            "diff_pp": 0.3,
            "ci95": [
              -0.76,
              1.34
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2072,
            "diff_pp": 0.47,
            "ci95": [
              -0.42,
              1.34
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2194,
            "diff_pp": -0.4,
            "ci95": [
              -1.25,
              0.5
            ],
            "agrees": false
          }
        ],
        "folds_agreeing": 3,
        "splits": {
          "all": {
            "races": 8648,
            "strike_pct": 19.8,
            "compare_strike_pct": 19.8,
            "diff_pp": -0.01,
            "ci95": [
              -0.44,
              0.43
            ],
            "p": 0.9605,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 704,
            "strike_pct": 29.9,
            "compare_strike_pct": 32.2,
            "diff_pp": -2.33,
            "ci95": [
              -4.23,
              -0.41
            ],
            "p": 0.01199,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7149,
            "strike_pct": 20.6,
            "compare_strike_pct": 20.8,
            "diff_pp": -0.18,
            "ci95": [
              -0.69,
              0.31
            ],
            "p": 0.4828,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 16.1,
            "compare_strike_pct": 15.3,
            "diff_pp": 0.81,
            "ci95": [
              -0.17,
              1.78
            ],
            "p": 0.09495,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.968,
              "ci95": [
                0.929,
                1.009
              ],
              "selections": 8559
            },
            "compare": {
              "ratio": 0.979,
              "ci95": [
                0.94,
                1.02
              ],
              "selections": 8734
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2044,
              "races": 7918
            },
            "compare": {
              "rho": 0.2025,
              "races": 7918
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89498,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921,
              "no_winning_margin": 11
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "988381635abc15ec75d1b9707fa9a2e54b9b1fd46448c8f64adc52c9d0c2dc4c"
      }
    },
    {
      "id": "SBR-004",
      "batch": "B1",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-004",
        "by": "james"
      },
      "registered": "2026-09-24",
      "hypothesis": "Counting a fall, pull-up or other non-completion last time as beaten 10 lengths, instead of reading the finished run before it, changes how often the top-rated horse wins a handicap. A horse whose only runs were non-completions gets a figure too. Everything else is version 1.0. Direction unknown.",
      "rule": {
        "method": "form-dnf-as-10",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "non_completion_lengths": 10
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's five candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "edb610d9d793d21ea9c43ebe93f39d5d7959724c835eee43c99b30e29ff2bcc8",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "edb610d9d793d21ea9c43ebe93f39d5d7959724c835eee43c99b30e29ff2bcc8",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "p 0.5597 is not under 0.05"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.9,
          "compare_strike_pct": 18.7,
          "diff_pp": 0.17,
          "ci95": [
            -0.05,
            0.39
          ],
          "p": 0.1399,
          "coverage_pct": 99.7,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": -0.06,
          "p_holm": 0.5597
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": -0.05,
            "ci95": [
              -0.48,
              0.36
            ],
            "agrees": false
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 0.19,
            "ci95": [
              -0.3,
              0.7
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 0.5,
            "ci95": [
              -0.04,
              1.05
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 0.05,
            "ci95": [
              -0.25,
              0.32
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 3,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 20.0,
            "compare_strike_pct": 19.8,
            "diff_pp": 0.19,
            "ci95": [
              -0.04,
              0.4
            ],
            "p": 0.09595,
            "coverage_pct": 75.7,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.6,
            "compare_strike_pct": 32.2,
            "diff_pp": 0.47,
            "ci95": [
              -0.38,
              1.37
            ],
            "p": 0.3468,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 21.0,
            "compare_strike_pct": 20.8,
            "diff_pp": 0.21,
            "ci95": [
              -0.04,
              0.45
            ],
            "p": 0.08996,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.4,
            "compare_strike_pct": 15.3,
            "diff_pp": 0.1,
            "ci95": [
              -0.4,
              0.6
            ],
            "p": 0.7246,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.976,
              "ci95": [
                0.936,
                1.017
              ],
              "selections": 8751
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2047,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89564,
            "targets": 118379,
            "missing": {
              "no_official_rating": 20194,
              "no_previous_run": 8621
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "1375727879d31127ab252dbfd841f34df5f3f5d291080369d3300d6a73991338"
      }
    },
    {
      "id": "SBR-005",
      "batch": "B1",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-005",
        "by": "james"
      },
      "registered": "2026-09-24",
      "hypothesis": "Scaling the lengths beaten by the size of that race's field changes how often the top-rated horse wins a handicap. The formula is lengths x 10 / starters in that race (finishers plus non-completions), then capped at 10 and taken off at 2lb a length, so a length counts double in a five-runner race and half in a 20-runner one. Everything else is version 1.0. Direction unknown.",
      "rule": {
        "method": "form-field-adj",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "reference_field": 10
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's five candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "e3964f44f8106ec0fccff502c86cae1e919dabef74bee63c9263b1d173d005da",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "e3964f44f8106ec0fccff502c86cae1e919dabef74bee63c9263b1d173d005da",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "p 0.9295 is not under 0.05"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.9,
          "compare_strike_pct": 18.7,
          "diff_pp": 0.14,
          "ci95": [
            -0.18,
            0.46
          ],
          "p": 0.3888,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0,
          "p_holm": 0.9295
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 0.12,
            "ci95": [
              -0.53,
              0.77
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 0.46,
            "ci95": [
              -0.22,
              1.12
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 0.35,
            "ci95": [
              -0.27,
              0.98
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": -0.28,
            "ci95": [
              -0.98,
              0.4
            ],
            "agrees": false
          }
        ],
        "folds_agreeing": 3,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 19.8,
            "compare_strike_pct": 19.8,
            "diff_pp": 0.01,
            "ci95": [
              -0.32,
              0.33
            ],
            "p": 0.9125,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 30.7,
            "compare_strike_pct": 32.2,
            "diff_pp": -1.44,
            "ci95": [
              -2.98,
              0.05
            ],
            "p": 0.06297,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 20.8,
            "compare_strike_pct": 20.8,
            "diff_pp": -0.0,
            "ci95": [
              -0.36,
              0.34
            ],
            "p": 0.9455,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.4,
            "compare_strike_pct": 15.3,
            "diff_pp": 0.08,
            "ci95": [
              -0.68,
              0.87
            ],
            "p": 0.8626,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.989,
              "ci95": [
                0.947,
                1.03
              ],
              "selections": 8781
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2053,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "e6870c75817ea9461ee6774b576472e67f04badde71e643e70f728580d76ffef"
      }
    },
    {
      "id": "SBR-006",
      "batch": "B1",
      "kind": "negative_control",
      "source": {
        "kind": "protocol",
        "by": "agent"
      },
      "registered": "2026-09-24",
      "hypothesis": "Negative control. Version 1.0 with each finisher's lengths beaten swapped for another finisher's from the same race, by a shuffle seeded from the rule's seed, the race and the horse. It keeps the shape of the data and throws away what the lengths say about each horse, so it must not beat version 1.0. If it passes, the harness is finding effects that are not there.",
      "rule": {
        "method": "form-v1-shuffled",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "seed": 20260924
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Must fail the candidate test on its own p. If it passes, batch B1 is void and the harness is investigated.",
      "prereg_sha256": "83fea25d1b50bfd03e0da803501bd3cd1cab2136f78bd25a232e1b544a217dc7",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "83fea25d1b50bfd03e0da803501bd3cd1cab2136f78bd25a232e1b544a217dc7",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "the difference is not positive (-5.29 points)"
        ],
        "batch_status": "valid",
        "p_basis": "own p",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 13.4,
          "compare_strike_pct": 18.7,
          "diff_pp": -5.29,
          "ci95": [
            -6.22,
            -4.32
          ],
          "p": 0.0009995,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": -4.73,
            "ci95": [
              -6.58,
              -2.9
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": -6.87,
            "ci95": [
              -9.2,
              -4.66
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": -3.91,
            "ci95": [
              -5.68,
              -2.1
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": -5.95,
            "ci95": [
              -7.95,
              -3.92
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 14.3,
            "compare_strike_pct": 19.8,
            "diff_pp": -5.52,
            "ci95": [
              -6.51,
              -4.62
            ],
            "p": 0.0009995,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 24.0,
            "compare_strike_pct": 32.2,
            "diff_pp": -8.13,
            "ci95": [
              -12.08,
              -4.44
            ],
            "p": 0.0009995,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 14.8,
            "compare_strike_pct": 20.8,
            "diff_pp": -5.96,
            "ci95": [
              -7.03,
              -4.83
            ],
            "p": 0.0009995,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 11.9,
            "compare_strike_pct": 15.3,
            "diff_pp": -3.42,
            "ci95": [
              -5.49,
              -1.16
            ],
            "p": 0.003998,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.978,
              "ci95": [
                0.929,
                1.026
              ],
              "selections": 8758
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.0624,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "c85f9f58c58b2113b7572a38da6df6c6506399f834a9257d6281cd30948c8007"
      }
    },
    {
      "id": "SBR-007",
      "batch": "B1",
      "kind": "positive_control",
      "source": {
        "kind": "protocol",
        "by": "agent"
      },
      "registered": "2026-09-24",
      "hypothesis": "Positive control, and a cheat by design: it reads the race's own finishing order (the winner scores highest), so its top-rated horse is always the winner. It must beat version 1.0 by a wide margin, which shows the harness can see a real effect. It is never a candidate, and the leakage tests show that no candidate can read a race's own result.",
      "rule": {
        "method": "oracle-finish",
        "parameters": {
          "non_finisher_value": -99
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Must pass the candidate test on its own p. If it fails, batch B1 is void and the harness is investigated.",
      "prereg_sha256": "46b056101855285556682bc993fce9c8928c55bea3ff3f06ca0b6efeffaa3c9e",
      "result": {
        "run_at": "2026-09-27T04:02:04Z",
        "prereg_sha256": "46b056101855285556682bc993fce9c8928c55bea3ff3f06ca0b6efeffaa3c9e",
        "verdict": "pass",
        "rule_verdict": "pass",
        "reasons": [],
        "batch_status": "valid",
        "p_basis": "own p",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 150482944,
          "sha256": "b08e199f2d4ec4e9b0b4624fcad06f9942101353e77c787cb549a51785a6659b",
          "runners_rows": 411371,
          "races_rows": 40270,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "f383c076bb24bea609efec79f9f6fc4f0c75a2b4",
          "rating_experiment_sha256": "35de43c3e3b4449418fedcbd5274e6f3f851f5dbcfaedf738518b325f867c75a",
          "rating_candidates_sha256": "f30b3465b9a1f3ed99c96268c69166d97d5d4cbf36b1bfa009a91f738bad0e5f",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 100.0,
          "compare_strike_pct": 18.7,
          "diff_pp": 81.27,
          "ci95": [
            80.43,
            82.12
          ],
          "p": 0.0009995,
          "coverage_pct": 100.0,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": -0.36
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 82.85,
            "ci95": [
              81.32,
              84.4
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 80.26,
            "ci95": [
              78.3,
              82.16
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 82.21,
            "ci95": [
              80.59,
              83.73
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 79.61,
            "ci95": [
              77.9,
              81.26
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 100.0,
            "compare_strike_pct": 19.8,
            "diff_pp": 80.17,
            "ci95": [
              79.42,
              80.97
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 100.0,
            "compare_strike_pct": 32.2,
            "diff_pp": 67.83,
            "ci95": [
              64.16,
              71.02
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 100.0,
            "compare_strike_pct": 20.8,
            "diff_pp": 79.22,
            "ci95": [
              78.29,
              80.14
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 100.0,
            "compare_strike_pct": 15.3,
            "diff_pp": 84.7,
            "ci95": [
              82.87,
              86.52
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 5.402,
              "ci95": [
                5.326,
                5.476
              ],
              "selections": 7954
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 1.0,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 118379,
            "targets": 118379,
            "missing": {}
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B1.json",
        "result_sha256": "ff6da1138f50308d38120328764171fdcdc7423555a8d47583df69324171abe9"
      }
    },
    {
      "id": "SBR-008",
      "batch": "B2",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-007",
        "by": "james"
      },
      "registered": "2026-09-28",
      "hypothesis": "Moving version 1.0 by how the horse's last run went against its starting price changes how often the top-rated horse wins a handicap. The surprise is the result last time (1 for a win, 0 otherwise) less the market's chance last time: 1 over the horse's starting price divided by the race's total of 1 over the starting price (the overround taken out), which exists only where every starter in that race had a starting price above 1.0. So a beaten horse the market gave a 40% chance reads -0.4, a beaten outsider it gave 5% reads -0.05, and a winner it gave 5% reads +0.95. The run is the one version 1.0 reads, the last finished run, and the figure is version 1.0 plus a weight times the surprise, rounded as version 1.0 is. The weight, in pounds for a whole unit of surprise, is chosen on the development window alone (1 October 2023 to 31 August 2025): the value in the rule's grid, from -16 to +16 in steps of 2, whose top-rated horse won development handicaps most often, the one nearest 0 on a tie. A negative weight credits a horse the market fancied and a positive one a horse that beat the market's view; a weight of 0 is version 1.0 itself. A runner whose last run has no market chance gets no figure. Direction unknown.",
      "rule": {
        "method": "form-market-surprise",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "market_weight_grid": [
            -16,
            -14,
            -12,
            -10,
            -8,
            -6,
            -4,
            -2,
            0,
            2,
            4,
            6,
            8,
            10,
            12,
            14,
            16
          ],
          "fit": {
            "parameter": "market_weight",
            "grid": "market_weight_grid",
            "window": "development",
            "objective": "handicap_win_credit",
            "tie_break": "nearest_zero"
          }
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's two candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "bed068194d75a953f10e6c8cd7553a0d6dcd441fb1c77d48419d97aed410adc6",
      "result": {
        "run_at": "2026-10-04T04:10:25Z",
        "prereg_sha256": "bed068194d75a953f10e6c8cd7553a0d6dcd441fb1c77d48419d97aed410adc6",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "the difference is not positive (-0.22 points)",
          "p 0.3758 is not under 0.05"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 157036544,
          "sha256": "4ddc28e1a9aab0d8b16c3712c5fb24b65b1b41c9449f91a876125f04e61ab164",
          "runners_rows": 414255,
          "races_rows": 40556,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "0a70ae7058c7fbf5b3d8b576fda262f6c9517350",
          "rating_experiment_sha256": "dcea7032085452c10553cce0036e7df24be1bdb92a53235d80b2f98d9e746785",
          "rating_candidates_sha256": "ff3bc60191e15377602e36fd0335bf23c9d6e26e54b41b5285d240e55bc58b37",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.5,
          "compare_strike_pct": 18.7,
          "diff_pp": -0.22,
          "ci95": [
            -0.55,
            0.12
          ],
          "p": 0.1879,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0,
          "p_holm": 0.3758
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": -0.5,
            "ci95": [
              -1.13,
              0.09
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": -0.44,
            "ci95": [
              -1.27,
              0.4
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": -0.18,
            "ci95": [
              -0.82,
              0.47
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 0.15,
            "ci95": [
              -0.55,
              0.82
            ],
            "agrees": false
          }
        ],
        "folds_agreeing": 3,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 19.7,
            "compare_strike_pct": 19.8,
            "diff_pp": -0.16,
            "ci95": [
              -0.48,
              0.17
            ],
            "p": 0.3298,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.7,
            "compare_strike_pct": 32.2,
            "diff_pp": 0.56,
            "ci95": [
              -0.27,
              1.36
            ],
            "p": 0.1879,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 20.6,
            "compare_strike_pct": 20.8,
            "diff_pp": -0.18,
            "ci95": [
              -0.56,
              0.18
            ],
            "p": 0.3428,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.2,
            "compare_strike_pct": 15.3,
            "diff_pp": -0.07,
            "ci95": [
              -0.65,
              0.55
            ],
            "p": 0.8336,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.969,
              "ci95": [
                0.929,
                1.013
              ],
              "selections": 8814
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2017,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": {
          "parameter": "market_weight",
          "window": "development",
          "chosen": -2.0,
          "objective": "handicap_win_credit",
          "tie_break": "nearest_zero",
          "grid": [
            {
              "value": -16.0,
              "races": 11151,
              "strike_pct": 18.250978985442263
            },
            {
              "value": -14.0,
              "races": 11151,
              "strike_pct": 18.460975099393178
            },
            {
              "value": -12.0,
              "races": 11151,
              "strike_pct": 18.61492242848175
            },
            {
              "value": -10.0,
              "races": 11151,
              "strike_pct": 18.810271126655305
            },
            {
              "value": -8.0,
              "races": 11151,
              "strike_pct": 19.07825905001046
            },
            {
              "value": -6.0,
              "races": 11151,
              "strike_pct": 19.405583953606552
            },
            {
              "value": -4.0,
              "races": 11151,
              "strike_pct": 19.4593907870744
            },
            {
              "value": -2.0,
              "races": 11151,
              "strike_pct": 19.817355693061906
            },
            {
              "value": 0.0,
              "races": 11151,
              "strike_pct": 19.714524855767795
            },
            {
              "value": 2.0,
              "races": 11151,
              "strike_pct": 19.57970884524557
            },
            {
              "value": 4.0,
              "races": 11151,
              "strike_pct": 19.479568349624845
            },
            {
              "value": 6.0,
              "races": 11151,
              "strike_pct": 19.431740053208976
            },
            {
              "value": 8.0,
              "races": 11151,
              "strike_pct": 19.342061997429226
            },
            {
              "value": 10.0,
              "races": 11151,
              "strike_pct": 19.386153708187607
            },
            {
              "value": 12.0,
              "races": 11151,
              "strike_pct": 19.38166980539862
            },
            {
              "value": 14.0,
              "races": 11151,
              "strike_pct": 19.247152721728995
            },
            {
              "value": 16.0,
              "races": 11151,
              "strike_pct": 19.247152721728995
            }
          ]
        },
        "detail": "experiments/B2.json",
        "result_sha256": "44a730deef1eda7172fdf4c8de8129a450c8290748e87ba11f934716bcc367ca"
      }
    },
    {
      "id": "SBR-009",
      "batch": "B2",
      "kind": "candidate",
      "source": {
        "kind": "idea",
        "idea": "IDEA-017",
        "by": "agent"
      },
      "registered": "2026-09-28",
      "hypothesis": "Moving version 1.0 by the horse's form on today's going against its form on other going changes how often the top-rated horse wins a handicap. It tests Brett's point that ground is often the whole story (IDEA-011) as a change to the number. Today's going is folded into the racecard's eight bands (firm, good to firm, good, good to soft, soft, heavy, standard and slow, with the Irish yielding scale folded as the racecard folds it). Over the horse's finished runs before today whose band and distance behind the winner are both known, with lengths capped at 10 as in version 1.0, the rule averages the lengths beaten on today's band and on every other band. The adjustment is a weight times (the average on other bands less the average on today's band) times n / (n + 2), where n is the number of runs on today's band, so one run counts a third and the adjustment grows with the evidence. It is 0 when today's going is unknown, or the horse has no run on today's band or none elsewhere, so the rule rates exactly the runners version 1.0 rates. The weight, in pounds per length, is chosen on the development window alone (1 October 2023 to 31 August 2025): the value in the rule's grid, from -4 to +4 in steps of 0.5, whose top-rated horse won development handicaps most often, the one nearest 0 on a tie. A weight of 0 is version 1.0 itself. Direction unknown.",
      "rule": {
        "method": "form-going-record",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "shrink_runs": 2,
          "going_weight_grid": [
            -4,
            -3.5,
            -3,
            -2.5,
            -2,
            -1.5,
            -1,
            -0.5,
            0,
            0.5,
            1,
            1.5,
            2,
            2.5,
            3,
            3.5,
            4
          ],
          "fit": {
            "parameter": "going_weight",
            "grid": "going_weight_grid",
            "window": "development",
            "objective": "handicap_win_credit",
            "tie_break": "nearest_zero"
          }
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Passes on the frozen holdout's handicaps if its difference over version 1.0 is positive with a Holm-adjusted p under 0.05 across this batch's two candidates, at least 3 of the 4 quarterly folds have a difference of the same sign, and its coverage of handicap starters is no more than 2 points below version 1.0's. Otherwise it fails. A pass leads to shadow publishing (stage two), never straight to the racecard.",
      "prereg_sha256": "ff5bf1004dc54b03656db1aefb0a79a73fe11d545b70c850f936e56ee518a1e0",
      "result": {
        "run_at": "2026-10-04T04:10:25Z",
        "prereg_sha256": "ff5bf1004dc54b03656db1aefb0a79a73fe11d545b70c850f936e56ee518a1e0",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "p 0.8046 is not under 0.05"
        ],
        "batch_status": "valid",
        "p_basis": "holm over the batch's candidates",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 157036544,
          "sha256": "4ddc28e1a9aab0d8b16c3712c5fb24b65b1b41c9449f91a876125f04e61ab164",
          "runners_rows": 414255,
          "races_rows": 40556,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "0a70ae7058c7fbf5b3d8b576fda262f6c9517350",
          "rating_experiment_sha256": "dcea7032085452c10553cce0036e7df24be1bdb92a53235d80b2f98d9e746785",
          "rating_candidates_sha256": "ff3bc60191e15377602e36fd0335bf23c9d6e26e54b41b5285d240e55bc58b37",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.8,
          "compare_strike_pct": 18.7,
          "diff_pp": 0.07,
          "ci95": [
            -0.48,
            0.62
          ],
          "p": 0.8046,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0,
          "p_holm": 0.8046
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 0.08,
            "ci95": [
              -0.9,
              1.08
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 0.27,
            "ci95": [
              -0.97,
              1.61
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 0.06,
            "ci95": [
              -0.95,
              1.04
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": -0.09,
            "ci95": [
              -1.18,
              0.91
            ],
            "agrees": false
          }
        ],
        "folds_agreeing": 3,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 20.0,
            "compare_strike_pct": 19.8,
            "diff_pp": 0.12,
            "ci95": [
              -0.38,
              0.64
            ],
            "p": 0.6257,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.9,
            "compare_strike_pct": 32.2,
            "diff_pp": 0.71,
            "ci95": [
              -1.25,
              2.67
            ],
            "p": 0.4428,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 20.6,
            "compare_strike_pct": 20.8,
            "diff_pp": -0.16,
            "ci95": [
              -0.73,
              0.4
            ],
            "p": 0.5777,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 16.8,
            "compare_strike_pct": 15.3,
            "diff_pp": 1.46,
            "ci95": [
              0.34,
              2.6
            ],
            "p": 0.008996,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.979,
              "ci95": [
                0.938,
                1.018
              ],
              "selections": 8670
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2058,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            },
            "going_adjusted": 71819
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": {
          "parameter": "going_weight",
          "window": "development",
          "chosen": 1.5,
          "objective": "handicap_win_credit",
          "tie_break": "nearest_zero",
          "grid": [
            {
              "value": -4.0,
              "races": 11151,
              "strike_pct": 17.495740292350458
            },
            {
              "value": -3.5,
              "races": 11151,
              "strike_pct": 17.863121394194838
            },
            {
              "value": -3.0,
              "races": 11151,
              "strike_pct": 18.292081427674646
            },
            {
              "value": -2.5,
              "races": 11151,
              "strike_pct": 18.62314291692823
            },
            {
              "value": -2.0,
              "races": 11151,
              "strike_pct": 18.718052192628466
            },
            {
              "value": -1.5,
              "races": 11151,
              "strike_pct": 19.064060024512
            },
            {
              "value": -1.0,
              "races": 11151,
              "strike_pct": 19.324126386273278
            },
            {
              "value": -0.5,
              "races": 11151,
              "strike_pct": 19.566257136878605
            },
            {
              "value": 0.0,
              "races": 11151,
              "strike_pct": 19.714524855767795
            },
            {
              "value": 0.5,
              "races": 11151,
              "strike_pct": 19.97085463187158
            },
            {
              "value": 1.0,
              "races": 11151,
              "strike_pct": 20.120766448450066
            },
            {
              "value": 1.5,
              "races": 11151,
              "strike_pct": 20.149164499446982
            },
            {
              "value": 2.0,
              "races": 11151,
              "strike_pct": 19.98624936478044
            },
            {
              "value": 2.5,
              "races": 11151,
              "strike_pct": 19.717215197441185
            },
            {
              "value": 3.0,
              "races": 11151,
              "strike_pct": 19.555794697037634
            },
            {
              "value": 3.5,
              "races": 11151,
              "strike_pct": 19.469105909783877
            },
            {
              "value": 4.0,
              "races": 11151,
              "strike_pct": 19.28451857830389
            }
          ]
        },
        "detail": "experiments/B2.json",
        "result_sha256": "4b25f4dd2c464724728350f3939a5b2ff3fbee7ae6339d2f65da562374a9746b"
      }
    },
    {
      "id": "SBR-010",
      "batch": "B2",
      "kind": "negative_control",
      "source": {
        "kind": "protocol",
        "by": "agent"
      },
      "registered": "2026-09-28",
      "hypothesis": "Negative control. Version 1.0 with each finisher's lengths beaten swapped for another finisher's from the same race, by a shuffle seeded from the rule's seed, the race and the horse. It keeps the shape of the data and throws away what the lengths say about each horse, so it must not beat version 1.0. Its seed differs from batch B1's control, so the shuffle is a fresh one. If it passes, the harness is finding effects that are not there.",
      "rule": {
        "method": "form-v1-shuffled",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10,
          "seed": 20260928
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Must fail the candidate test on its own p. If it passes, batch B2 is void and the harness is investigated.",
      "prereg_sha256": "4f846b2d4a1e9cb6c3875352fa16259834ed1bcaa7e9df8ca8d48794c4c65268",
      "result": {
        "run_at": "2026-10-04T04:10:25Z",
        "prereg_sha256": "4f846b2d4a1e9cb6c3875352fa16259834ed1bcaa7e9df8ca8d48794c4c65268",
        "verdict": "fail",
        "rule_verdict": "fail",
        "reasons": [
          "the difference is not positive (-5.05 points)"
        ],
        "batch_status": "valid",
        "p_basis": "own p",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 157036544,
          "sha256": "4ddc28e1a9aab0d8b16c3712c5fb24b65b1b41c9449f91a876125f04e61ab164",
          "runners_rows": 414255,
          "races_rows": 40556,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "0a70ae7058c7fbf5b3d8b576fda262f6c9517350",
          "rating_experiment_sha256": "dcea7032085452c10553cce0036e7df24be1bdb92a53235d80b2f98d9e746785",
          "rating_candidates_sha256": "ff3bc60191e15377602e36fd0335bf23c9d6e26e54b41b5285d240e55bc58b37",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 13.7,
          "compare_strike_pct": 18.7,
          "diff_pp": -5.05,
          "ci95": [
            -6.06,
            -4.04
          ],
          "p": 0.0009995,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": 0.0
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": -4.0,
            "ci95": [
              -5.91,
              -2.07
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": -5.93,
            "ci95": [
              -8.32,
              -3.68
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": -5.04,
            "ci95": [
              -6.85,
              -3.34
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": -5.4,
            "ci95": [
              -7.29,
              -3.45
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 14.5,
            "compare_strike_pct": 19.8,
            "diff_pp": -5.28,
            "ci95": [
              -6.23,
              -4.34
            ],
            "p": 0.0009995,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 24.2,
            "compare_strike_pct": 32.2,
            "diff_pp": -7.94,
            "ci95": [
              -11.82,
              -4.23
            ],
            "p": 0.0009995,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 15.5,
            "compare_strike_pct": 20.8,
            "diff_pp": -5.31,
            "ci95": [
              -6.38,
              -4.26
            ],
            "p": 0.0009995,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 10.1,
            "compare_strike_pct": 15.3,
            "diff_pp": -5.16,
            "ci95": [
              -7.26,
              -3.11
            ],
            "p": 0.0009995,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.984,
              "ci95": [
                0.938,
                1.032
              ],
              "selections": 8761
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.0544,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B2.json",
        "result_sha256": "69a0ac041d58bcdaf7cdb437c8b79ccaab1b51f28bd4ce66c03f1abc0fe693e2"
      }
    },
    {
      "id": "SBR-011",
      "batch": "B2",
      "kind": "positive_control",
      "source": {
        "kind": "protocol",
        "by": "agent"
      },
      "registered": "2026-09-28",
      "hypothesis": "Positive control, and a cheat by design: it reads the race's own finishing order (the winner scores highest), so its top-rated horse is always the winner. It must beat version 1.0 by a wide margin, which shows the harness can see a real effect. It is never a candidate, and the leakage tests show that no candidate can read a race's own result.",
      "rule": {
        "method": "oracle-finish",
        "parameters": {
          "non_finisher_value": -99
        }
      },
      "compare_to": "form-v1",
      "primary": "handicaps",
      "decision": "Must pass the candidate test on its own p. If it fails, batch B2 is void and the harness is investigated.",
      "prereg_sha256": "965b9953039339c2e02511c6c8262eafea2da3729406535d92a95d1f45b1c12a",
      "result": {
        "run_at": "2026-10-04T04:10:25Z",
        "prereg_sha256": "965b9953039339c2e02511c6c8262eafea2da3729406535d92a95d1f45b1c12a",
        "verdict": "pass",
        "rule_verdict": "pass",
        "reasons": [],
        "batch_status": "valid",
        "p_basis": "own p",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 157036544,
          "sha256": "4ddc28e1a9aab0d8b16c3712c5fb24b65b1b41c9449f91a876125f04e61ab164",
          "runners_rows": 414255,
          "races_rows": 40556,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "0a70ae7058c7fbf5b3d8b576fda262f6c9517350",
          "rating_experiment_sha256": "dcea7032085452c10553cce0036e7df24be1bdb92a53235d80b2f98d9e746785",
          "rating_candidates_sha256": "ff3bc60191e15377602e36fd0335bf23c9d6e26e54b41b5285d240e55bc58b37",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 100.0,
          "compare_strike_pct": 18.7,
          "diff_pp": 81.27,
          "ci95": [
            80.43,
            82.12
          ],
          "p": 0.0009995,
          "coverage_pct": 100.0,
          "compare_coverage_pct": 99.6,
          "coverage_drop_pp": -0.36
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 82.85,
            "ci95": [
              81.32,
              84.4
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 80.26,
            "ci95": [
              78.3,
              82.16
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 82.21,
            "ci95": [
              80.59,
              83.73
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 79.61,
            "ci95": [
              77.9,
              81.26
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 100.0,
            "compare_strike_pct": 19.8,
            "diff_pp": 80.17,
            "ci95": [
              79.42,
              80.97
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 75.6
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 100.0,
            "compare_strike_pct": 32.2,
            "diff_pp": 67.83,
            "ci95": [
              64.16,
              71.02
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 29.5
          },
          "gb": {
            "races": 7160,
            "strike_pct": 100.0,
            "compare_strike_pct": 20.8,
            "diff_pp": 79.22,
            "ci95": [
              78.29,
              80.14
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 79.4
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 100.0,
            "compare_strike_pct": 15.3,
            "diff_pp": 84.7,
            "ci95": [
              82.87,
              86.52
            ],
            "p": 0.0009995,
            "coverage_pct": 100.0,
            "compare_coverage_pct": 66.0
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 5.402,
              "ci95": [
                5.326,
                5.476
              ],
              "selections": 7954
            },
            "compare": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 1.0,
              "races": 7928
            },
            "compare": {
              "rho": 0.2021,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 118379,
            "targets": 118379,
            "missing": {}
          },
          "compare": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B2.json",
        "result_sha256": "da33ea66550bcd6281ea2655eb3f264e9f532afd1508055d4ea446ac2db5b712"
      }
    },
    {
      "id": "SBR-012",
      "batch": "B2",
      "kind": "baseline",
      "source": {
        "kind": "protocol",
        "by": "agent"
      },
      "registered": "2026-09-28",
      "hypothesis": "Version 1.0 of the StableBet Rating (today's official rating less 2lb for each length beaten on the last finished run, capped at 10 lengths) finds the winner of a handicap more often than the top official rating does. Batch B1's baseline (SBR-000) found this on the frozen holdout. This row repeats the check on the database copy batch B2 runs on, so the harness shows it reproduces the finding each time it scores a batch, and it records the interval widths B2's candidates are read against. Version 1.0 was chosen with this data visible, so the figure is in-sample for that choice; the first clean test of version 1.0 is its live record from 24 September 2026. Direction: not assumed here.",
      "rule": {
        "method": "form-v1",
        "parameters": {
          "lbs_per_length": 2,
          "cap_lengths": 10
        }
      },
      "compare_to": "official-rating",
      "primary": "handicaps",
      "decision": "Reported, not decisive. The same test against the official rating, on its own p, outside the Holm family. It shows the harness reproduces the section 4 finding on the protocol's windows and on the database copy batch B2 runs on.",
      "prereg_sha256": "b545d5e18255f1a795f5521d78ef52f836ddc2b44b65775729b46efb8cc19bba",
      "result": {
        "run_at": "2026-10-04T04:10:25Z",
        "prereg_sha256": "b545d5e18255f1a795f5521d78ef52f836ddc2b44b65775729b46efb8cc19bba",
        "verdict": "pass",
        "rule_verdict": "pass",
        "reasons": [],
        "batch_status": "valid",
        "p_basis": "own p",
        "db": {
          "file": "racing_copy.duckdb",
          "bytes": 157036544,
          "sha256": "4ddc28e1a9aab0d8b16c3712c5fb24b65b1b41c9449f91a876125f04e61ab164",
          "runners_rows": 414255,
          "races_rows": 40556,
          "latest_result_date": "2026-08-31",
          "read_before": "2026-09-01"
        },
        "code": {
          "commit": "0a70ae7058c7fbf5b3d8b576fda262f6c9517350",
          "rating_experiment_sha256": "dcea7032085452c10553cce0036e7df24be1bdb92a53235d80b2f98d9e746785",
          "rating_candidates_sha256": "ff3bc60191e15377602e36fd0335bf23c9d6e26e54b41b5285d240e55bc58b37",
          "form_rating_sha256": "94ede3e2e66e07d9626d274c81505ccb346ee9e4f6f437b8a0107f7b772d8da4"
        },
        "holdout": {
          "races": 7954,
          "strike_pct": 18.7,
          "compare_strike_pct": 14.4,
          "diff_pp": 4.38,
          "ci95": [
            3.5,
            5.28
          ],
          "p": 0.0009995,
          "coverage_pct": 99.6,
          "compare_coverage_pct": 99.9,
          "coverage_drop_pp": 0.3
        },
        "folds": [
          {
            "from": "2025-09-01",
            "to": "2025-11-30",
            "races": 2082,
            "diff_pp": 4.06,
            "ci95": [
              2.38,
              5.79
            ],
            "agrees": true
          },
          {
            "from": "2025-12-01",
            "to": "2026-02-28",
            "races": 1603,
            "diff_pp": 5.47,
            "ci95": [
              3.44,
              7.49
            ],
            "agrees": true
          },
          {
            "from": "2026-03-01",
            "to": "2026-05-31",
            "races": 2073,
            "diff_pp": 2.8,
            "ci95": [
              1.12,
              4.46
            ],
            "agrees": true
          },
          {
            "from": "2026-06-01",
            "to": "2026-08-31",
            "races": 2196,
            "diff_pp": 5.38,
            "ci95": [
              3.57,
              7.11
            ],
            "agrees": true
          }
        ],
        "folds_agreeing": 4,
        "splits": {
          "all": {
            "races": 8659,
            "strike_pct": 19.8,
            "compare_strike_pct": 15.6,
            "diff_pp": 4.22,
            "ci95": [
              3.38,
              5.08
            ],
            "p": 0.0009995,
            "coverage_pct": 75.6,
            "compare_coverage_pct": 75.9
          },
          "non_handicaps": {
            "races": 705,
            "strike_pct": 32.2,
            "compare_strike_pct": 29.8,
            "diff_pp": 2.37,
            "ci95": [
              -0.69,
              5.49
            ],
            "p": 0.1189,
            "coverage_pct": 29.5,
            "compare_coverage_pct": 29.7
          },
          "gb": {
            "races": 7160,
            "strike_pct": 20.8,
            "compare_strike_pct": 16.4,
            "diff_pp": 4.39,
            "ci95": [
              3.46,
              5.35
            ],
            "p": 0.0009995,
            "coverage_pct": 79.4,
            "compare_coverage_pct": 79.7
          },
          "ireland": {
            "races": 1499,
            "strike_pct": 15.3,
            "compare_strike_pct": 11.9,
            "diff_pp": 3.36,
            "ci95": [
              1.53,
              5.18
            ],
            "p": 0.0009995,
            "coverage_pct": 66.0,
            "compare_coverage_pct": 66.2
          }
        },
        "secondary": {
          "actual_over_expected": {
            "rule": {
              "ratio": 0.98,
              "ci95": [
                0.938,
                1.02
              ],
              "selections": 8744
            },
            "compare": {
              "ratio": 0.967,
              "ci95": [
                0.925,
                1.009
              ],
              "selections": 10961
            }
          },
          "rank_agreement": {
            "rule": {
              "rho": 0.2021,
              "races": 7928
            },
            "compare": {
              "rho": 0.092,
              "races": 7928
            }
          }
        },
        "figures": {
          "rule": {
            "with_value": 89509,
            "targets": 118379,
            "missing": {
              "no_official_rating": 19949,
              "no_previous_run": 8921
            }
          },
          "compare": {
            "with_value": 89837,
            "targets": 118379,
            "missing": {
              "no_official_rating": 28542
            }
          }
        },
        "fitted": null,
        "detail": "experiments/B2.json",
        "result_sha256": "4a6b0f2bf2b97a12d0f03b60cec08bee8dcc46517108b67a7049bf17422f38e6"
      }
    }
  ]
}
