Hypotheses · story · H-d105f080
Rival: a change of handicap status, not of code, carries the switcher lift
fails: 112 bets, needs 150; p 0.1511, needs 0.05 or lower; periods [0.82, 2.92], each needs 1.0 (not a niche pass: a period points the other way [0.82, 2.92])
Part of the thread “H36: pulled up after being held up” 60 hypotheses
- Proposed
- Designed
- Discovery
- Promising
- Falsification
- Frozen
- Vault
- Provisional
- Shadow
- Validated
- Live
- Source
- Investigator agent, v1
- Made by
- rival-explanation
- Created
- 17 Oct, 02:03
- Tests logged
- 1
Reasoning
Why this hypothesis exists: what the lab saw, the question it asked, the mechanism it proposed, what it predicted, and the result that would prove it wrong. Written before the test was run.
- Observed
- H-070b2026 (Rival: held-up PU lift comes from a switch of race code since the pull) passed discovery as a niche: A/E 1.36 on 304 bets (p 0.092), same-race control 0.98. O-9a6df59c
- AskedWithin the 226 jumps-to-jumps switchers, is the lift in hurdle-to-chase (a first try over fences) or chase-to-hurdle (fences taken away), and does a jumping error in the pull-up matter? answered
- MechanismAfter a pull-up, connections often change the type of race: into a novice or maiden race, or into a handicap off a dropped mark. Any change of conditions makes the last run less relevant, which matches the code-switch story.
- Why the market misses itIf the generic explanation is right, the market over-weights a P whenever conditions change, not only when the code changes.
- Predictedpositive, A/E 1.20+ on 250+ bets if the rival holds
- Falsified ifA/E below 1.10 with the late-period skew of other same-code cuts, which would leave the code switch itself as the carrier
- Rule sketch
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap IS NOT NULL AND is_handicap <> last_is_handicap
Mechanism and rationale
After a pull-up, connections often change the type of race: into a novice or maiden race, or into a handicap off a dropped mark. Any change of conditions makes the last run less relevant, which matches the code-switch story.
The rule
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap IS NOT NULL AND is_handicap IS NOT NULL AND is_handicap <> last_is_handicapReads: last_pulled_up, last_run_style, race_type, last_race_type, last_is_handicap, is_handicap
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- 57913a588e2746c954228341bf0bab733ca6fc9596c02b98a3100b40f55d2152
- Frozen
- not frozen
- The definition can still change.
- Confounders
- Late-period skew in same-code pull-ups (0.99 before 27 April 2026, 1.45 after): result must be read split by period against the no-status-change control
- Handicap debut marks: first-time handicappers off an untested mark may carry their own lift unrelated to the pull-up
- Price band 16/1 or bigger: outsiders never beat par in this thread, so the mix of long prices can mask or dilute the effect
- Summer jumping race mix: off-season races with small fields and weak opposition skew both handicap/non-handicap transitions and the late period
- Novice/maiden entries after a pull-up may be class drops (weaker opposition), a class effect rather than a conditions-relevance effect
- last_run_style only available from 2025-11-01, so the discovery sample is short and calendar-concentrated
- Control
{ "description": "Same-race other runners are measured by the lab and should sit near par (about 1.0); a lift there would mean the races, not the switchers, carry it. The key comparison is same-code held-up/midfield pull-ups whose handicap status did NOT change: they are known to score 0.99 before 27 April 2026 and 1.45 after. The rival holds only if the status-change group beats that control in BOTH periods (split at 27 April 2026); if it shows the same early-par/late-lift shape, the lift is the calendar skew and the code switch remains the carrier.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap IS NOT NULL AND is_handicap IS NOT NULL AND is_handicap = last_is_handicap" }
Discovery result
fail broad rule · 17 Oct, 02:09
- Bets
- 112
- 12 winners
- A/E
- 1.41
- 95%: 0.73 to 2.47
- SP return
- +9.1%
- level stakes
- Betfair SP return
- +73.6%
- 112 bets with a BSP
Strike rate 10.7%. p = 0.15. Same-race control: the other runners in these races had A/E 0.96, so the selection beat its own races. Zone: discovery. Evaluator eval-1.0, data 6a4e98be18e83933
By period
Falsification
No attacks yet. Only promising ideas are attacked.
Sealed holdout (vault)
Not queried. Only a frozen idea can spend its one query against the 2020-25 holdout.
Forward record
No forward record. Shadow tracking starts after the vault and counts only races run after the freeze.
Lineage
Agent runs
designer v1ok · 47s · 17 Oct, 02:05
Output (schema-checked)
{ "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap IS NOT NULL AND is_handicap IS NOT NULL AND is_handicap <> last_is_handicap", "refinements": [ { "label": "14/1 or shorter", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap IS NOT NULL AND is_handicap IS NOT NULL AND is_handicap <> last_is_handicap AND sp_decimal < 15" }, { "label": "Into a handicap from a non-handicap (debut or dropped mark)", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap = 0 AND is_handicap = 1" }, { "label": "Out of a handicap into a non-handicap (novice/maiden/conditions)", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap = 1 AND is_handicap = 0" } ], "control": { "description": "Same-race other runners are measured by the lab and should sit near par (about 1.0); a lift there would mean the races, not the switchers, carry it. The key comparison is same-code held-up/midfield pull-ups whose handicap status did NOT change: they are known to score 0.99 before 27 April 2026 and 1.45 after. The rival holds only if the status-change group beats that control in BOTH periods (split at 27 April 2026); if it shows the same early-par/late-lift shape, the lift is the calendar skew and the code switch remains the carrier.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND race_type = last_race_type AND last_is_handicap IS NOT NULL AND is_handicap IS NOT NULL AND is_handicap = last_is_handicap" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.1, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.05, "max_p": 0.2 }, "confounders": [ "Late-period skew in same-code pull-ups (0.99 before 27 April 2026, 1.45 after): result must be read split by period against the no-status-change control", "Handicap debut marks: first-time handicappers off an untested mark may carry their own lift unrelated to the pull-up", "Price band 16/1 or bigger: outsiders never beat par in this thread, so the mix of long prices can mask or dilute the effect", "Summer jumping race mix: off-season races with small fields and weak opposition skew both handicap/non-handicap transitions and the late period", "Novice/maiden entries after a pull-up may be class drops (weaker opposition), a class effect rather than a conditions-relevance effect", "last_run_style only available from 2025-11-01, so the discovery sample is short and calendar-concentrated" ], "mechanism": "After a held-up or midfield pull-up, connections often switch race conditions within the same code: into a handicap (debut or off a dropped mark) or out of one into novice/maiden/conditions company. If the code-switch lift is really 'new conditions make the P irrelevant', any such change should reproduce it; if only the code switch carries it, a handicap-status change alone should not.", "market_miss": "Punters and the market read a recent P as a form negative and mark the horse out, without discounting it for the change of conditions; if the generic explanation is right this over-weighting of the P appears whenever conditions change, not only when the code changes.", "prediction": { "direction": "positive", "size": "A/E 1.20+ on 250+ bets if the rival holds, with the lift present in both periods around 27 April 2026", "falsified_if": "A/E below 1.10, or a lift confined to the period after 27 April 2026 matching the no-status-change control (about 0.99 then 1.45), which would leave the code switch itself as the carrier" }, "notes": "Kept the rule sketch; added is_handicap IS NOT NULL so the inequality cannot silently drop or mishandle nulls. Refinements are the 14/1 cap (outsiders never beat par in this thread) and the two directions of status change the mechanism names. Pass min_ae set to 1.10 to match the falsification threshold. Key read is period-split against the same-code no-change control." }
Timeline
Job 2412 finished
· engine:compute-1
H-d105f080 Discovery → KILLED fails: 112 bets, needs 150; p 0.1511, needs 0.05 or lower; periods [0.82, 2.92], each needs 1.0 (not a niche pass: a period points the other way [0.82, 2.92])
· engine:evaluator
discovery result for H-d105f080 (broad rule): fail
· engine:evaluator
H-d105f080 Designed → RESEARCHdiscovery measuring on the discovery zone
· engine:orchestrator
compute-1 took job 2412 (evaluate, attempt 1)
· compute-1
Job 2409 finished
· engine:ai-1
Queued evaluate on the compute lane: discovery run of the broad rule
· engine:scheduler
H-d105f080 Proposed → RESEARCHdesigned pre-spec written and hashed
· agent:designer@v1
ai-1 took job 2409 (design, attempt 1)
· ai-1
Queued design on the ai lane: write the pre-spec
· engine:scheduler
New idea H-d105f080: Rival: a change of handicap status, not of code, carries the switcher lift (rival-explanation)
· agent:investigator@v1
Every change is an event with an actor: an agent and its version, an engine, a human, or the importer. Current stage: Killed.