Hypotheses · story · H-658519da
Test-mechanism: held-up pull-up switching to a code the horse has barely tried
forward A/E 0.0 on 0 bets, SP ROI None%, BSP ROI None% (p None)
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
- test-mechanism
- Created
- 17 Oct, 02:03
- Tests logged
- 16
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) survived falsification: 6 of 6 attacks left it standing; it is frozen for its one vault query. O-4aec4e49
- 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
- AskedIf the code-switch lift comes from the market reading a pull-up in another code as a failure, is it strongest when the horse has little or no form in today's code? testing
- MechanismA held-up horse that was pulled up and is now tried in a new code (first or second chase, hurdle or Flat run) has no form in today's discipline, and the last-time P is all the market has. Connections switch codes because they expect the new one to suit.
- Why the market misses itThe form line shows a recent P and nothing in today's code to set against it, so the price leans on the failure. Horses with plenty of runs in today's code are already rated on that form.
- Predictedpositive, A/E 1.35 to 1.60 on 150+ bets, above the experienced-in-code switchers
- Falsified ifA/E below 1.15, or no higher than switchers with 3 or more runs in today's code
Mechanism and rationale
A held-up horse that was pulled up and is now tried in a new code (first or second chase, hurdle or Flat run) has no form in today's discipline, and the last-time P is all the market has. Connections switch codes because they expect the new one to suit.
The rule
last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_type IS NOT NULL AND race_type <> last_race_type AND ((race_type = 'Chase' AND COALESCE(chase_runs, 0) <= 1) OR (race_type = 'Hurdle' AND COALESCE(hurdle_runs, 0) <= 1) OR (race_type = 'Flat' AND COALESCE(flat_runs, 0) <= 1))Reads: last_pulled_up, last_run_style, last_race_type, race_type, chase_runs, hurdle_runs, flat_runs
Pre-registration
- Spec hash (sha256 of the canonical pre-spec)
- eb9d10d930b7163bbc845052646bffad9d3f8786194c2279e022c73f32bc4f19
- Frozen
- 17 Oct, 02:11
- Nothing in the definition can change after this.
- Confounders
- Novice and beginners' chases and maiden or novice hurdles, where code debutants cluster, have thinner markets and different overrounds. The same-race control covers this.
- Outsiders at 16/1 or bigger drag every cut in this thread down (code switchers at 16/1+ scored 0.55 on 197). The 14/1 refinement isolates this.
- chase_runs, hurdle_runs and flat_runs only count runs since mid-2020 (Aug 2020 for jumps). Older horses can show 0 or 1 runs in a code they have run in many times before, which blurs 'barely tried'. COALESCE treats a missing count as zero.
- Dual-purpose yards switch codes as routine placement rather than as a targeted move, which dilutes the 'connections expect it to suit' story.
- last_run_style only exists from November 2025, so the test window is short and sits within the late-period skew seen in held-up pull-ups. Check the halves before and after 27 April 2026.
- Hurdle-to-chase debutants make up most of the pool, so any result may be a chasing-debut effect rather than a general code-switch effect. Check the split by today's race_type.
Discovery result
pass broad rule (niche) · 17 Oct, 02:09
- Bets
- 53
- 4 winners
- A/E
- 1.26
- 95%: 0.34 to 3.22
- SP return
- -43.9%
- level stakes
- Betfair SP return
- -35.1%
- 52 bets with a BSP
Strike rate 7.5%. p = 0.39. Same-race control: the other runners in these races had A/E 0.98, so the selection beat its own races. Zone: discovery. Evaluator eval-1.0, data 6a4e98be18e83933
By period
Falsification
Each attack is a deliberate attempt to kill the idea. 3 of 5 survived.
- perturbation: Widen 'barely tried' to 2 or fewer runs in today's codepass
68 bets · A/E 1.42 (0.52 to 3.09) · control 0.97 · 17 Oct, 02:11
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-2738–after 2026-04-2730–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - control: Control: experienced switchers (3+ runs in today's code)pass
228 bets · A/E 1.35 (0.79 to 2.16) · control 0.98 · 17 Oct, 02:11
Breakdown
Sealed holdout (vault)
Not queried. Only a frozen idea can spend its one query against the 2020-25 holdout.
Forward record
- forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}info
0 bets · · 17 Oct, 02:11
Breakdown
betsA/E0.71.01.3forward0–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets.
Other experiments
- neighbour: <= 1 -> 0 (-20%)pass
48 bets · A/E 1.33 (0.36 to 3.42) · control 0.97 · 17 Oct, 02:11
Breakdown
betsA/E0.71.01.32025-10-01 to 2026-04-2727–after 2026-04-2721–Bars grow from 1.00, the market. Faded bars have fewer than 40 bets. - neighbour: <= 1 -> 2 (+20%)pass
61 bets · A/E 1.55 (0.57 to 3.37) · control 0.96 · 17 Oct, 02:11
Breakdown
bets
Lineage
Agent runs
designer v1ok · 1m · 17 Oct, 02:03
Output (schema-checked)
{ "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_type IS NOT NULL AND race_type <> last_race_type AND ((race_type = 'Chase' AND COALESCE(chase_runs, 0) <= 1) OR (race_type = 'Hurdle' AND COALESCE(hurdle_runs, 0) <= 1) OR (race_type = 'Flat' AND COALESCE(flat_runs, 0) <= 1))", "refinements": [ { "label": "14/1 or shorter", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_type IS NOT NULL AND race_type <> last_race_type AND ((race_type = 'Chase' AND COALESCE(chase_runs, 0) <= 1) OR (race_type = 'Hurdle' AND COALESCE(hurdle_runs, 0) <= 1) OR (race_type = 'Flat' AND COALESCE(flat_runs, 0) <= 1)) AND sp_decimal <= 15" }, { "label": "debut in today's code (zero runs)", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_type IS NOT NULL AND race_type <> last_race_type AND ((race_type = 'Chase' AND COALESCE(chase_runs, 0) = 0) OR (race_type = 'Hurdle' AND COALESCE(hurdle_runs, 0) = 0) OR (race_type = 'Flat' AND COALESCE(flat_runs, 0) = 0))" } ], "control": { "description": "Two comparisons. (1) The lab's same-race control: the other runners in these races should sit near par (about 0.95 to 1.02), which shows the lift is not a property of novice or beginners' races. (2) The falsifier comparison from the hypothesis: held-up or midfield last-time pull-ups that switch code into a discipline where they already have 3 or more runs. The mechanism says these are priced on their in-code form, so they should score clearly below the inexperienced switchers, near the parent's par or lower. If the experienced switchers match or beat the main rule, the 'no form in today's code' explanation fails, even if the main rule passes.", "rule": "last_pulled_up = 1 AND last_run_style IN ('held_up', 'midfield') AND last_race_type IS NOT NULL AND race_type <> last_race_type AND ((race_type = 'Chase' AND chase_runs >= 3) OR (race_type = 'Hurdle' AND hurdle_runs >= 3) OR (race_type = 'Flat' AND flat_runs >= 3))" }, "pass_criteria": { "min_bets": 150, "min_ae": 1.15, "max_p": 0.05 }, "forward_bar": { "min_bets": 100, "min_ae": 1.05, "max_p": 0.2 }, "confounders": [ "Novice and beginners' chases and maiden or novice hurdles, where code debutants cluster, have thinner markets and different overrounds. The same-race control covers this.", "Outsiders at 16/1 or bigger drag every cut in this thread down (code switchers at 16/1+ scored 0.55 on 197). The 14/1 refinement isolates this.", "chase_runs, hurdle_runs and flat_runs only count runs since mid-2020 (Aug 2020 for jumps). Older horses can show 0 or 1 runs in a code they have run in many times before, which blurs 'barely tried'. COALESCE treats a missing count as zero.", "Dual-purpose yards switch codes as routine placement rather than as a targeted move, which dilutes the 'connections expect it to suit' story.", "last_run_style only exists from November 2025, so the test window is short and sits within the late-period skew seen in held-up pull-ups. Check the halves before and after 27 April 2026.", "Hurdle-to-chase debutants make up most of the pool, so any result may be a chasing-debut effect rather than a general code-switch effect. Check the split by today's race_type." ], "mechanism": "A held-up or midfield horse that was pulled up last time and now runs in a code it has run in at most once (chase, hurdle or Flat) has no meaningful form in today's discipline. The last-time P is then the most prominent line in its form. The pull-up came in a different code, so it says little about today's task, and connections who switch codes straight after a failure usually expect the new discipline to suit. The parent lift (code switch after a held-up pull-up, 1.36 on 304, holding in both periods) should therefore be concentrated among the switchers with little or no experience in the new code.", "market_miss": "For a code debutant or second-timer, the form line shows a recent P and nothing in today's code to weigh against it, so the price leans on that failure. A switcher with 3 or more runs in today's code is already priced on its in-code form, so the P carries less weight and there should be little mispricing to find.", "prediction": { "direction": "positive", "size": "A/E 1.35 to 1.60 on about 150+ bets, clearly above the control of switchers with 3+ runs in today's code", "falsified_if": "A/E below 1.15 on the broad rule, or the control (switchers with 3 or more runs in today's code) scores as high as or higher than the broad rule" }, "notes": "Kept the rule sketch, with two fixes. First, a NULL-safe COALESCE on the run counts, so that horses with no record in today's code (the purest case) are not dropped by a NULL comparison. Second, an explicit last_race_type IS NOT NULL, matching parent H-070b2026. Bumpers are left out, since the mechanism names chase, hurdle and Flat only. Discovery min_ae is set to 1.15 to match the falsification threshold. The effective window starts in November 2025 because of last_run_style, and the bet count may come in thin. If so, the lab's thin-but-right-direction route applies. Expect a pool dominated by hurdle-to-chase moves." }
Timeline
Job 2443 finished
· engine:compute-1
hypothesis note H-658519da
· engine:perturb
perturbation result for H-658519da (neighbour: <= 1 -> 2 (+20%)): pass
· engine:perturb
perturbation result for H-658519da (neighbour: <= 1 -> 0 (-20%)): pass
· engine:perturb
perturbation result for H-658519da (neighbour: <= 1 -> 2 (+20%)): pass
· engine:perturb
perturbation result for H-658519da (neighbour: <= 1 -> 0 (-20%)): pass
· engine:perturb
perturbation result for H-658519da (neighbour: <= 1 -> 2 (+20%)): pass
· engine:perturb
perturbation result for H-658519da (neighbour: <= 1 -> 0 (-20%)): pass
· engine:perturb
compute-1 took job 2443 (mutate, attempt 1)
· compute-1
Job 2440 finished
· engine:compute-1
forward result for H-658519da (forward vs bar {'min_bets': 100, 'min_ae': 1.05, 'max_p': 0.2}): info
· engine:evaluator
compute-1 took job 2440 (forward_check, attempt 1)
· compute-1
Queued mutate on the compute lane: parameter stability: do neighbouring thresholds hold?
· engine:scheduler
Queued forward_check on the compute lane: daily forward check of a shadow system
· engine:scheduler
Job 2438 finished
· engine:compute-1
H-658519da Frozen → SHADOW vault skipped: last_pulled_up, last_run_style do not exist before the discovery zone; track it forward instead
· engine:orchestrator