Deep review 2026-07-20 — how we improve from here
Reviewer memo, written ahead of the weekend goal review. Inputs: the three
codex goal-session negatives, open_fav_v1 both-legs result, the dog×under
diagnostic, the R20 ops incidents, and the Odds API quota status recorded
in data-ingest-strategy (392/500 used, 108 left this month).
1. Three laws are now established — stop re-testing them
- L1 — the opening price is soft in DIRECTION; the close is efficient.
(Favourite-side CLA 0.63–0.74 across every measurement; close-priced
models settle negative.) - L2 — you cannot out-predict a settled market NUMBER with team-level
features. Proven three independent ways: H2H λ ≈ 0.02–0.10; the open
line beats every margin model (MAE 13.31 vs ≥13.37, including our four
lineup features); cover classification loses to a constant coin. Any
proposed phase whose target is "predict the margin/total/win prob
better" should be rejected at brief time, citing this law. - L3 — lineup information is the one channel the market prices LATE
(RAPM λ = 0.141, CLA z = 5.2). The value is in the lag, not the level.
2. The binding constraints are arithmetic, not intellectual
- Promotion needs ≥100 settled trades. open_fav_v1 qualifies ~1–2
matches/round; R21–R27 + finals yields perhaps 15–25 settled this
season. Promotion is a 2027 pre-season event. Saying this now
prevents gate-shopping desperation in September. - The Odds API allows 500 calls/month. The 6-hourly refresh CronJob
alone burns ~120/month — the LOWEST-value feed (it powers sparklines,
not CLV). The feeds the edge actually needs (opens, closes,
teamlist_window) cost ~16/round ≈ 70/month. Quota is an edge resource;
spend it where the thesis lives.
3. Reframe the product: a timing engine, not a prediction engine
Everything established converges on one product question: "which prices
will move after team-list news, in which direction, how fast — and are we
ahead of the move?" The components exist or are in flight:
| Component | Role | Status |
|---|---|---|
teamlist_window CronJobs |
measure the Tuesday repricing curve | first fire 2026-07-21 |
line_move_v1 |
predict line-move direction from lineup deltas | weekend goal (pre-registered in line-v2-roadmap) |
| observation-CLV on all picks | free evidence, filter calibration | briefed |
delta_availability_loss |
the "news" input (who dropped out) | spec'd, unbuilt |
| open_fav_v1 / rapm_timing_v1 live trades | the bankable expression | 2 seeded / 0 seeded |
All model effort routes into move-prediction inputs. Nothing routes into
magnitude targets (L2).
4. Season-2026 goal, restated honestly (proposed; ratify at weekend review)
By the end of R27 the program succeeds if it holds:
- A measured Tuesday repricing curve (≥6 windows captured).
- ≥50 settled paper trades across ≥2 strategy families, each with a CLV
direction read. - A line_move_v1 backtest verdict (either way — a clean negative also
counts). - The Betfair purchase decision made on evidence (framework in §6).
- A weekly loop with zero manual steps (§5C) and zero quota overruns.
Promotion review happens 2027 pre-season on the full season's evidence.
5. The improvement plan, four axes
A. Evidence velocity (the constraint that matters)
- Seed
rapm_timing_v1alongside open_fav_v1 — one strategy live is a
single point of failure for the whole thesis. - Observation-CLV on every model pick, every round (~8/week ≈ 4× the
qualifying-trade rate). This also calibrates open_fav_v2 thresholds
from measurement instead of guesswork. line_move_v1opens a third family on the LINE market.- Quota reallocation: refresh cadence 6h → 12h off-round-days (saves
~60 calls/month) reallocated to guaranteed closes + windows. The
sparklines lose granularity; the CLV instrument gains reliability.
B. Model effort (narrow, by law)
Only move-prediction targets: line_move_v1 now (historical open→close
supports it), line_move_tuesday_v1 after ~6 window captures. Feature
work only as inputs to those (availability delta first — it IS the news).
Filter threshold tuning from observation-CLV data, pre-registered as
open_fav_v2 when ≥100 observations exist.
C. Operational hardening (ops speed IS market advantage)
- Every recurring checklist becomes a script with an exit code. Done:
coverage audit. Next:production_readiness.pyemitting the 7 checks
(the Sunday verdict becomes machine-checkable). - Cross-agent drift guards in CI: three agent types write to this
repo; two quiet rule violations already happened (canonical app swap,
attribution deletion).tests/test_agent_guardrails.py(this commit)
pins the canonical app and the model-attribution element; the assurance
workflow runs them on every push. A rule that isn't a failing test is a
suggestion. - Automate the two remaining manual weekly steps: DB snapshot publish
(append to the weekly script) and paper-trade seeding (VM cron after
prediction regen, enforcing the weather→regen→seed order by
construction).
D. Decision quality (pre-register while results don't exist)
Live-strategy checkpoint rules, proposed NOW — before any strategy has 20
settled trades — for ratification at the weekend review:
- 20 settled (per strategy): direction read (sign of mean CLV) —
information only, no action permitted. - 40 settled: if mean CLV < 0 AND median CLV < 0 → PARK the strategy
(stop seeding, keep observing). Not killed — parked pending the
Betfair-informed re-backtest. - 100 settled: full promotion review against the canonical gates.
- Ops: 3 consecutive rounds with a missed quota item = program
incident, reviewed before any new model work. - Standing rule unchanged: checkpoints are never edited in the same
commit as the results they judge.
Betfair decision framework (September): BUY if any live strategy
shows mean CLV > 0 at ≥30 settled, OR the measured Tuesday repricing lag
is ≥1h (a window wide enough to exploit is worth backtesting properly).
Otherwise defer to 2027 with reduced scope. Either branch is a good
outcome; the framework exists so the decision is made by evidence, not
mood.
6. What we will NOT do
No new H2H/margin/total/cover prediction phases (L2). No underdog
strategies (rejected twice). No real staking (no strategy has cleared
gates). No SGM betting products (observation CSV only — the correlation
is real but the vig eats it). No new data feeds before a candidate proves
need. No quota increases — reallocate first.