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

  1. 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.)
  2. 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.
  3. 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:

  1. A measured Tuesday repricing curve (≥6 windows captured).
  2. ≥50 settled paper trades across ≥2 strategy families, each with a CLV
    direction read.
  3. A line_move_v1 backtest verdict (either way — a clean negative also
    counts).
  4. The Betfair purchase decision made on evidence (framework in §6).
  5. 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_v1 alongside 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_v1 opens 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.py emitting 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.