House · sealed Aug 24, 2026
We sit the exam too.
The strategy below was registered before the season with a gate and a kill switch. Amendment A3 (2026-09-01) set the live-trading and release terms without touching the model, the gate thresholds or the five registered markets: from Week 1 it trades real money at signal time, and Pro and API subscribers receive each week's released signals two hours after the house places its own orders; everyone, subscriber or not, sees full lines at kickoff − 15 minutes. A seeded 20% of each week's signals is withheld from absolutely everyone until that same kickoff − 15 mark, and in practice until the next scheduled export after it, so the gap between released and held-out signals gives an honest read of our own footprint on the numbers below.
Two ledgers are kept, graded differently — not by the same judge as a wallet on the leaderboard. The signal ledger is the gate: one row per signal, priced at the best sportsbook quote at signal time, graded only against the sportsbook close — fills, Polymarket prices and CLV_pm never enter it. The separate fills ledger (real venue orders, not shown here) tracks live ROI and the execution-gap kill.
Proof of work · backtests, run before Week 1
Three registered looks, sealed before results
Each look below was pre-registered — question, method and expected range written down before the outcome data was touched (docs/hypotheses.md, docs/FEATURES.md § the markets program). The bar is the 95% confidence interval around the headline number; the dot is the point estimate; the dashed line is the no-edge reference. Regenerate these exact numbers with python scripts/site/export_backtests.py.
M1
cross-book consensus mechanism
Is the leave-one-out cross-book consensus price a genuinely better probability estimate than a single book's quote?
95% cluster-bootstrap, clustered by player-line
Mechanism CONFIRMED — headline bettable rule REJECTED
Headline rule (EV>2% flat bets) realized ROI: −2.4% (n=1,968, SE ±2.5%)
~70% of a book's apparent quote-EV is real information (deciles cleanly monotone, −10.3% → −2.7%). But betting the rule loses −2.40% — the ladder inverts in the tail (a winner's curse): the most extreme “bargains” are where the outlier book knew something.
Historical backtest, not a live result: measured on props_closing 2023–2025 against the sportsbook closing line, before any forward money was risked. Forward 2026 results may differ and are graded separately (see the season section below). Subject to the registered kill criteria in docs/hypotheses.md.
M3
distributional props model (blend)
Does a calibrated projection model, blended 30/70 with the cross-book consensus, find bettable mispricing — including off-modal points no price-only method can price?
95% cluster-bootstrap by season-week
Mechanism AND bettable rule both land — survived adversarial review
51/66 weeks positive; season splits +3.5 / +4.9 / +9.3%. Adversarial review passed: zero-info baselines separate cleanly, modal-point-only subset +11.9%, edge survives dropping the Sleeper feed (+4.28% no-sleeper refit).
Historical backtest, not a live result: measured on props_closing 2023–2025 against the sportsbook closing line, before any forward money was risked. Forward 2026 results may differ and are graded separately (see the season section below). Subject to the registered kill criteria in docs/hypotheses.md.
M4
v2 model confirmation
Does the overnight-optimized v2 per-market model (vs M3's v1) clear its pre-committed ship bar of +3.8% ROI?
approx., ±1.96×iid SE (no cluster-bootstrap run for M4)
CONFIRMED — ship rule passed (≥ +3.8% bar); v2 shipped for 2026
Every market non-negative; pass_tds repaired (−6.7% → 0.0%). The +1.75pp delta vs M3 is within ~1.3σ — v2's adoption rests on dev-CRPS superiority + ROI non-inferiority, not a statistically resolved ROI improvement.
Historical backtest, not a live result: measured on props_closing 2023–2025 against the sportsbook closing line, before any forward money was risked. Forward 2026 results may differ and are graded separately (see the season section below). Subject to the registered kill criteria in docs/hypotheses.md.
Game lines · R3.7, research/paper-track — not a registered signal
Six more classes, six honest nulls
Beyond the five registered player-prop markets above, we ran the same walk-forward, no-peeking discipline against game lines — NFL and CFB spreads, totals, moneylines, and CFB opener-vs-close — using only free nflverse/CFBD data (The Odds API credits untouched). Each class needed to beat both a market-implied baseline and an Elo/ratings-only baseline, and for spreads/totals to clear the −110 vig-adjusted breakeven (52.38%, dashed reference below) — not merely 50%. Walk-forward by season with a 3-season burn-in, one final out-of-sample read-out per class, 95% CIs cluster-bootstrapped by game-week, 29 total comparisons accounted for across the family (see the methodology note below). Every one of M5–M10 is a NO EDGE verdict — reported here in full, with the same layout and weight as a positive result, because a clean null with a tight CI is exactly what "best possible, honestly" is supposed to produce when there is nothing to find. Full protocol, every baseline and every comparison: docs/plans/model-gamelines-results.md.
M5
NFL spreads (ATS)
Does a gradient-boosted model beat the closing NFL spread out-of-sample, net of -110 vig?
95% cluster-bootstrap by game-week (league, season, week), 2,000 resamples, walk-forward test 2021–2025
NO EDGE — gradient boosting on Elo/form/rest/division features finds nothing the closing spread doesn't already price.
Market 49.62% [47.00%,52.13%] over the same 1,326 games (walk-forward test 2021-2025); paired model-vs-Elo diff CI straddles zero (no detectable difference from an Elo-only baseline either way). -5.61pp below breakeven.
Research / paper-track only — NOT a registered signal and not traded. Walk-forward by season (3-season burn-in, later seasons scored out-of-sample only), 95% CIs cluster-bootstrapped by game-week (league, season, week), one final test read-out per class, no test-set peeking. Full protocol, data sources and every comparison run: docs/plans/model-gamelines-results.md. A real edge here would need its own owner-approved amendment before ever joining Signals — none is proposed, because none of M5-M10 cleared its kill criterion.
M6
NFL totals (over/under)
Does the model beat the closing NFL total out-of-sample, net of -110 vig?
95% cluster-bootstrap by game-week (league, season, week), 2,000 resamples, walk-forward test 2021–2025
NO EDGE — CI lower bound sits well under both 50% and the breakeven bar.
Market 48.52% [45.67%,51.26%]. -3.46pp below breakeven. Paired model-vs-ratings-proxy diff CI straddles zero — no CI-clear improvement over the baseline round's own weak-Elo-signal finding for NFL totals.
Research / paper-track only — NOT a registered signal and not traded. Walk-forward by season (3-season burn-in, later seasons scored out-of-sample only), 95% CIs cluster-bootstrapped by game-week (league, season, week), one final test read-out per class, no test-set peeking. Full protocol, data sources and every comparison run: docs/plans/model-gamelines-results.md. A real edge here would need its own owner-approved amendment before ever joining Signals — none is proposed, because none of M5-M10 cleared its kill criterion.
M7
NFL moneylines (calibration)
Does the model's win probability beat the de-vigged closing moneyline's own Brier score out-of-sample?
95% cluster-bootstrap by game-week (league, season, week), 2,000 resamples, walk-forward test 2021–2025
NO EDGE — the model reliably loses to the de-vigged close (CI clear of zero, wrong direction); it does beat an untuned Elo-only baseline, which was never the bar.
GBM Brier 0.2254 vs. market (de-vigged close) 0.2118 — lower is better, so a negative paired diff here means the model loses. Reliability table (8 bins) is reasonably calibrated; "beats the market" was the mission's actual bar, per r37, not "beats a weak in-house baseline."
Research / paper-track only — NOT a registered signal and not traded. Walk-forward by season (3-season burn-in, later seasons scored out-of-sample only), 95% CIs cluster-bootstrapped by game-week (league, season, week), one final test read-out per class, no test-set peeking. Full protocol, data sources and every comparison run: docs/plans/model-gamelines-results.md. A real edge here would need its own owner-approved amendment before ever joining Signals — none is proposed, because none of M5-M10 cleared its kill criterion.
M8
CFB spreads (ATS)
Does the model beat the closing CFB spread out-of-sample, net of -110 vig?
95% cluster-bootstrap by game-week (league, season, week), 2,000 resamples, walk-forward test 2021–2025
NO EDGE — model, CFBD Elo and the raw market itself sit on top of each other around 50%, none near breakeven.
Market 50.36% [48.81%,51.88%]; CFBD Elo baseline is statistically indistinguishable from both (paired model-vs-Elo CI straddles zero). -4.01pp below breakeven. Caveat: CFBD-basis lines, not multi-book consensus.
Research / paper-track only — NOT a registered signal and not traded. Walk-forward by season (3-season burn-in, later seasons scored out-of-sample only), 95% CIs cluster-bootstrapped by game-week (league, season, week), one final test read-out per class, no test-set peeking. Full protocol, data sources and every comparison run: docs/plans/model-gamelines-results.md. A real edge here would need its own owner-approved amendment before ever joining Signals — none is proposed, because none of M5-M10 cleared its kill criterion.
M9
CFB totals (over/under)
Does the model beat the closing CFB total out-of-sample, net of -110 vig?
95% cluster-bootstrap by game-week (league, season, week), 2,000 resamples, walk-forward test 2021–2025
NO EDGE — clears 50% but not the 52.38% breakeven bar, and the lift is a drift artifact, not signal.
Market 49.58% [47.96%,51.26%]. -1.25pp below breakeven; indistinguishable from a no-ratings control. A no-ratings train-mean control matches the model within ~0.2pp with heavily overlapping CIs — the ~2-3pp lift over 50% is CFB scoring-level drift, not a ratings or feature-model signal. Caveat: CFBD-basis lines.
Research / paper-track only — NOT a registered signal and not traded. Walk-forward by season (3-season burn-in, later seasons scored out-of-sample only), 95% CIs cluster-bootstrapped by game-week (league, season, week), one final test read-out per class, no test-set peeking. Full protocol, data sources and every comparison run: docs/plans/model-gamelines-results.md. A real edge here would need its own owner-approved amendment before ever joining Signals — none is proposed, because none of M5-M10 cleared its kill criterion.
M10
CFB opener-vs-close basis
Is the CFB opening line beatable with this model even where the close is not (early-entry only)?
95% cluster-bootstrap by game-week (league, season, week), 2,000 resamples, walk-forward test 2021–2025
NO EDGE — not measurably better than betting the same model against the close on the same games; the total's ~52-53% pattern is M9's scoring-drift artifact, not open-specific softness.
GBM hit-rate vs. spread OPEN: 50.1% (n=3,667, SE ±0.8%)
Reuses M8/M9's frozen predictions against the OPEN price instead of the close, no refit. Paired model-vs-open-minus-vs-close diffs straddle zero for both markets (spread and total alike) — the open is not measurably softer than the close for this model. Secondary/early-entry framing only: this repo has no historical fill/latency data to confirm opening-line execution is feasible.
Research / paper-track only — NOT a registered signal and not traded. Walk-forward by season (3-season burn-in, later seasons scored out-of-sample only), 95% CIs cluster-bootstrapped by game-week (league, season, week), one final test read-out per class, no test-set peeking. Full protocol, data sources and every comparison run: docs/plans/model-gamelines-results.md. A real edge here would need its own owner-approved amendment before ever joining Signals — none is proposed, because none of M5-M10 cleared its kill criterion.
Methodology, in brief
Walk-forward by season (time-ordered, no test-set peeking): the first three seasons of each league/class are pure burn-in, every later season is scored using only strictly-prior-season fits, and results are pooled into one number per class — a single final read-out, not the best of several looks. Confidence intervals are 95% cluster-bootstraps resampling whole (league, season, week)game-weeks together, since these markets move on a weekly news/injury cadence. The kill criterion: a class only clears NO EDGE if a feature model beats both baselines and, for spread/total classes, its CI's lower bound sits above the 52.38% −110 breakeven — 50% clearance alone is shown as a diagnostic but was never sufficient. Multiple comparisons across all six classes and both leagues are accounted for family-wise in the results doc rather than read cell-by-cell. Nothing here touches docs/hypotheses.md, models/**, or any registered constant, and no signal — live or paper-track — is proposed by this round.
Phase 1 → live · gate by end of week 10
2026 season, graded forward
target 1,500
Awaiting Week 1 — no signal has settled yet, so there is no CLV to show. This is not a zero; it is unmeasured.
target 10
Season underway — first signals will appear after the first Friday refresh.
Equity curve · signal ledger, cumulative flat-stake units
Cumulative flat-stake units from the signal ledger, by week. Empty by design — the season starts Sep 10, 2026; this fills in one point per week as signals settle (Tuesday grading). The dotted path above is illustrative only, not a forecast.
Registration · verbatim
2026 Forward Pre-Registration — sealed before Week 1
Sealed 2026-08-24 (season kickoff 2026-09-10). Append-only: amendments may be added with a date; nothing above an amendment line may be edited. Judged by forward CLV and realized results only — no retrofits, no re-scoring.
Companion docs: docs/FEATURES.md § MARKETS (the backtest verdicts that got us
here), the Road-to-2026 plan (gates & kill criteria), Polymarket runbook.
1. Instruments & definitions
- CLV (primary instrument): for each bet at decimal price
don sidesat pointpt, CLV =p_close(s, pt) × d − 1, wherep_closeis the de-vigged median consensus of sportsbook closing quotes (odds_api capture, ≥ 4 books at the matched point; proportional de-vig; the M1/M3 consensus machinery, frozen). Mean CLV over bets is the gate metric. - Realized ROI (secondary): flat-stake units won / staked, pushes excluded, voids excluded.
- A "bet" = one player-line (max one position per (game, market, player)).
2. Frozen strategy P1 — props blend (the M3 rule, forward)
- Model: frozen artifacts
models/props_2026/(trained ≤ 2025 only, commit1d321dc); features rebuilt weekly byprops_features.pyfrom updated ingestion — construction is walk-forward-safe by design. - Fair value:
p_fair = 0.30 × p_model + 0.70 × p_consensus, consensus translated across points via the model CDF (frozen M3 semantics). Where no book consensus exists for a line (< 4 books), no bet — the model alone is not a registered strategy (variant C was diagnostic only). - Entry: EV vs quoted price > 3% (taker) computed with
p_fair. - Markets: player_receptions, player_reception_yds, player_rush_yds, player_pass_yds, player_pass_tds. Anytime-TD: NOT registered (longshot de-vig surface).
- Stakes: paper = flat 1u. Live (Phase 2, only after the gate): flat 0.25u, quarter-Kelly cap, never exceeded.
- Timing: signals computed after Friday injury reports; no new positions between Saturday final refresh and kickoff unless the model+consensus are both refreshed.
3. Gates & kill criteria (mirror of the plan, binding)
- Phase 1 → 2 gate: ≥ 1,500 paper bets AND mean CLV ≥ +2% AND paper ROI > 0 by end of week 10.
- KILL: mean CLV ≤ 0 at week 10 → stop, publish the negative.
- Live kill: execution gap (realized fill price vs signal price) consumes more than half the paper edge for 4 consecutive weeks → back to paper.
- Any discovered leakage voids affected results; the 2024–25 spread holdout remains untouched by everything in this document.
4. Registered secondary rules
- Dominance screen (from M2): a book/venue offering a strictly better point at a price ≥ consensus fair for the modal point → bet 1u paper / 0.25u live, logged separately. Expected ~3/week. No gate — it is +EV by construction under consensus-as-truth; we are measuring frequency and fills.
- Monitoring hypotheses (NOT bets, tracked for 2027 registration): (a) unders outperform overs in props (M3: +10.4% vs −0.2%); (b) rush_yds is the strongest market (M3 sub-split, selection-suspect); (c) props CLV is higher earlier in the week (literature: edge is at open).
5. Polymarket deployment annex (execution layer for P1)
- Venue: Polymarket international CLOB. Only markets unambiguously mappable to a registered stat market with a numeric threshold and a resolution rule equivalent to our settlement (official league stats; inactive-player handling understood) are tradeable. Unmappable or ambiguous-resolution markets are skipped and logged.
- Quoting (maker-first): post-only resting orders at
price ≤ p_fair − 0.02(buy side of the favored outcome). Taker crossings only atask ≤ p_fair − 0.03(the registered EV_MIN). Cancel-and-refresh on every model/consensus refresh; hard cancel of all resting orders at T−15min before kickoff. - Sizing: per market ≤ min(1% of venue bankroll, 10% of visible depth within 2pp of fair). Weekly total at risk ≤ 20% of venue bankroll.
- Paper-fill rule (Phase 1): a simulated maker order counts as FILLED
only if a later captured trade prints at or through its price before
cancel time (conservative; uses the
nfl_tradescapture). - Custody: venue bankroll is capped at an amount whose total loss is acceptable (platform custody + regulatory risk); profits swept out regularly per the runbook.
- Fees per current schedule (maker 0, sports taker coefficient) are included in all EV calculations.
(Technical parameters — tick sizes, min order size, resolution-source verification — are recorded in the Polymarket runbook as operational facts; they do not change the registered rules above.)
Amendments below this line only, dated, append-only.
A1 (2026-08-24) — Polymarket resolution semantics: P(plays) adjustment
Verified from live Polymarket market rules (API research, 2026-08-24): NFL O/U props resolve Under if the player is inactive (books void instead), and 50-50 on a canceled game; resolution source is official NFL stats via UMA's optimistic oracle (2h challenge window). Therefore the PM fair value is unconditional:
p_over_pm = P(plays) × p_fair_conditional
Frozen P(plays) table (measured on 13,201 prop-quoted player-games 2023–25, played = offensive snaps > 0; conservative — name-match misses count as DNP): no report 0.985, Questionable 0.97, Doubtful 0.15, Out 0.02. Not tuned in-season; may be re-estimated for 2027 only.
Paper-fill rule refinement: maker quotes cancel at kickoff − 15 min; a quote refresh supersedes the prior quote from its timestamp. Fills simulated strictly trade-through (a captured print at or through the quote price inside the quote's live window) on the 30-minute trade tape — conservative by construction.
Fee facts (recorded, affect EV arithmetic): maker fee 0; sports taker coefficient 0.05 (fee = shares × 0.05 × p × (1−p) ≤ 1.25% of notional at p=0.5) — inside the registered 3% taker margin; maker rebate ≈ 15% of taker fees on filled maker liquidity, treated as bonus, not counted in EV. Min order 5 shares; tick 0.01 (0.001 beyond ~0.04/0.96).
A2 (2026-08-25) — production model version: v2 (pre-Week-1 switch)
Registered look M4 (sealed & run 2026-08-25, see FEATURES.md) confirmed the
v2 model per its pre-committed ship rule (+6.88% ROI ≥ +3.8% bar; dev-CRPS
superiority established on ≤2022 folds; FTN sub-contest binding → FTN out).
P1's model is now models/props_2026_v2/ (per-market: receptions LGBM,
rec_yds compound MC, rush_yds CatBoost, pass_yds tuned LGBM, pass_tds
CatBoost; all trained ≤2025). Decision layer UNCHANGED (w=0.30, EV>3%).
v1 (models/props_2026/) is the frozen fallback; switching back mid-season
is allowed only on a technical failure of v2's runtime, never on results.
This amendment is legal because it predates Week 1; no in-season model
changes are permitted by §2.
A3 (2026-09-01) — live from Week 1; signals sold to subscribers; instrument unchanged
Owner decision 2026-08-27, parameters confirmed 2026-08-31 (pre-Week-1, therefore legal under the append-only rule): strategy P1 trades real money from Week 1 (2026-09-10) and its signals are sold to Pro/API subscribers with a fixed release lag. §§1–5 are not edited; where this amendment differs from §2, §3 or §5, this amendment governs from Week 1. Nothing here changes the model (A2), the decision layer (w = 0.30, EV > 3%, ≥ 4-book consensus), the five registered markets, or the §1 instrument.
1. One live validation phase (weeks 1–10). No paper phase.
- Stake: flat 0.25u per signal from Week 1 (the §2 Phase-2 stake), where
1u = 1% of the venue bankroll fixed in
results/live_2026/config.jsonbefore Week 1 (fixed 2026-08-31: $1,000 → 1u = $10, 0.25u = $2.50). The bankroll may be lowered in-season, never raised. §5 sizing (≤ min(1% bankroll, 10% of depth within 2pp), ≤ 20% weekly at risk), quarter-Kelly cap, custody and fee rules unchanged. Orders below the venue minimum (5 shares) are SKIPPED and logged, never rounded up. Dominance screen (§4): 0.25u live from Week 1, logged separately. - Gate (§3, thresholds unchanged): n ≥ 1,500 signals AND mean CLV ≥ +2% AND live ROI > 0 by end of Week 10. Pass → stake may rise to at most 0.50u for weeks 11–18 (pre-committed ceiling); not passed and not killed → stay at 0.25u and make no validation claim.
- KILL unchanged: mean CLV ≤ 0 at Week 10 → stop trading, stop selling the signal, publish the negative. Live kill unchanged (§3), applied from Week 1; "back to paper" means: trading halted, signals still computed, published post-kickoff and graded.
2. What counts — the gate ledger vs the fills ledger.
- The gate n and gate CLV are computed on the signal ledger
(
results/paper_2026/signals.parquet): one bet = the first signal per (season, week, event_id, market, player) —ledger.grading_key— priced at the best sportsbook quote at signal time; CLV vs the de-vigged full median sportsbook close at the matched point, ≥ 4 books (recorded here to remove §1's "M1/M3 machinery" ambiguity: the full median including the quoting book is the conservative reading and is whatclv_report.pyimplements). Fills, partial fills, Polymarket prices and CLV_pm never enter the gate; n counts signals, not fills. - Real fills go to a separate fills ledger (
results/live_2026/ fills.parquet), published weekly next to the signal ledger; used only for live ROI (units = 0.25u × filled fraction) and the §3 execution-gap kill. - The §5 paper-fill simulator is retired as a gate input from Week 1 (public flow prints through simulated quotes); if run, it is diagnostic and labelled so.
3. Release time T_rel, the holdout, and the release record.
- House orders (§5) are placed at signal time T0 = each scoring run (the scheduled Fri/Sat/Sun/Thu/Mon runs; §2 timing unchanged). Signals are released to Pro and API subscribers at T_rel = T0 + 2h, never later than kickoff − 6h and never before T0. The free tier receives full lines at kickoff − 15 min (count-only before). The house's 2h priority is disclosed on the pricing and house pages.
- Holdout: a seeded random 20% of signals per week (seed created
once per (season, week) in
results/live_2026/seeds.json, published after the week's last kickoff) are withheld from ALL subscribers until kickoff − 15 min, with every model number, side, best_price and signal_id stripped from the released payloads until then. The house trades holdout signals identically; they are in the gate ledger. - At T_rel the export records per released signal: best book + price,
consensus, and (when a Polymarket market maps) PM bid/ask and
capacity_usd. The weekly report publishes CLV from the signal price (house; the gate) and from the T_rel reference (subscriber-achievable). Only the former is the gate.
4. Self-impact caveat and the pre-registered check. Public flow after T_rel can move the sportsbook close toward the signal side and inflate measured CLV; on Polymarket it inflates CLV_pm for everyone. Therefore: (i) CLV_pm is never cited as evidence for P1 and is labelled "self-impacted" wherever shown; (ii) the weekly report publishes CLV(released) and CLV(holdout) separately; (iii) a validation claim requires CLV(holdout) > 0 with n_holdout ≥ 300 at Week 10. A gate that passes overall while the holdout is ≤ 0 is reported as "passed — self-impact suspected", permits no stake escalation, and is recorded as a negative for the mechanism.
5. Live-chain semantic fixes (pre-Week-1, no model change).
- UPCOMING-mode features are built with as-of fills so every live
feature equals what the training pipeline would have produced had the
week's row existed (previously an exact-(season,week) join left PFF/snap/
Sleeper features null on all upcoming rows). Sanctioned retest (no
outcomes involved): feature-vector parity on 2025 weeks 2/6/10/14/17 —
0 mismatches on every feature column (
scripts/markets/ parity_check.py, tests/test_upcoming_parity.py). A distribution-shift assertion refuses to score when any feature's upcoming null share exceeds training + 10pp. - The consensus universe is sportsbooks only (
scripts/markets/ consensus_books.py, derived from the odds_history props_closing universe the M1/M3/M4 backtests used) — DFS pick'em/exchange quotes never enterp_cons. MIN_BOOKS = 4 unchanged. This is the registered reading of §1's "sportsbook closing quotes". - The live tier-1 capture fetches exactly the five registered markets (anytime-TD excluded from the paid fetch as from the strategy).
6. Venue reality. Polymarket per-game props are sparse (2025 Week 1: four QB passing-yards markets, ~$456 total volume). The house trades on Polymarket only where a market maps unambiguously (§5); the public signal is a sportsbook signal and no Polymarket capacity is promised. Signals with no PM mapping still count for the gate (the instrument needs no fills).
7. Scope. T_rel, the holdout share, the stake ceiling and any seat cap change only by a further dated amendment, never on results — except that stakes may be lowered and signal sales halted at any time. No in-season model or decision-layer changes are permitted (§2, A2).
A4 (2026-09-01) — venue bankroll fixed at $2,000 (pre-Week-1 correction of A3's figure)
Owner decision 2026-09-01, before Week 1 and therefore legal under the
append-only rule. A3 §1 recorded the venue bankroll as $1,000 (1u = $10,
0.25u = $2.50). At that size, an order clears the venue's 5-share minimum
only when price ≤ $0.50 ($2.50 / 5 shares), so with maker bids at
p_fair − 0.02 the executor could only ever place the sub-50¢ side of a line
— a live fill sample one-sided BY CONSTRUCTION. The bankroll is therefore
fixed at $2,000 (1u = $20, 0.25u = $5.00; prices up to ~$1.00 clear the
minimum) in results/live_2026/config.json. Everything else in A3 §1 is
unchanged: flat 0.25u, quarter-Kelly cap, §5 sizing and custody rules, and
the bankroll may be lowered in-season, never raised. No further pre-kickoff
bankroll changes without another dated amendment.
A5 (2026-09-02) — scoring cadence 5x→8x/week; T0/T_rel proximity clarification
Owner decision (pre-Week-1, legal under the append-only rule since the season
has not started). A3 §3 defined T0 as "each scoring run (the scheduled
Fri/Sat/Sun/Thu/Mon runs)". The orchestrator (scripts/markets/score_week.ps1,
via scripts/tasks/CJGOAT-score.xml) now runs up to 8x/week: the prior
Thu/Fri/Sat/Sun/Mon runs, plus three pre-kickoff refreshes (~90 min before each
of Thursday's, Sunday's, and Monday's first kickoff), each scheduled strictly
after that day's existing run so it cannot become the week's earliest signal
for any line and cannot change which entry is graded (ledger.py's
grading_key() keeps the earliest signal_ts per line; see
docs/plans/cadence-2026.md § Idempotency). Their honest scope: each refresh
only changes the graded outcome for a line that first clears the EV/book-count
bar at that refresh — for a line already signaled earlier the same day, the
refresh is provably inert on the grading ledger. On the money side, once live
trading is on, a refresh can update a still-open resting order's price (per
pm_execute.py's §5 cancel-and-refresh) and can open an additional rung of an
already-worked player-market; total exposure per player-market remains bounded
by §2's per-market ≤ 1%-of-bankroll cap, which pm_execute.py enforces as an
accumulated family total (regression-tested, 2026-09-02). This is at zero
incremental Odds API cost (the scoring chain reads only already-ingested local
data). T0 is hereby redefined as "each scored run of the scheduled
orchestrator, whatever its current registered cadence in
scripts/tasks/CJGOAT-score.xml" rather than an enumerated list of days.
Everything else in A3 §3 is unchanged.
Not included in this amendment: a Wednesday (or any other pre-Thursday)
run. With week.py's rollover landing ~Tue 04:15 ET, a Wednesday run would
become the week's new-earliest run and therefore the graded/traded entry for
every line — a change to which entry is graded, not a cadence tweak. That
needs its own ruling: should T0's earliest weekly entry point move before
Thursday, given §2 registers signals as computed after Friday injury reports?
No schedule change is made pending that answer.
T0/T_rel proximity. T_rel = T0 + 2h, never later than kickoff − 6h, never
before T0 — read literally this has no solution whenever a run's T0 falls
within 6h of a game's kickoff (true of the new pre-kickoff refreshes by
design, and already true of the pre-existing Thursday, Monday, and
Sunday-early-window runs). No release code reads t_rel yet, so nothing has
been violated. Resolution: for any signal whose governing T0 falls within
6h of its own game's kickoff, no Pro/API T_rel early release is computed or
offered — it is recorded and traded normally (§5 unaffected) and reaches
subscribers via the registered free-tier release at kickoff − 15 min and the
holdout track (§3). This preserves the 2h Pro head start exactly where it is
achievable and is honest where it structurally is not. No change to T_rel
itself, the holdout share, or stake ceiling.
Kill criteria
- Mean CLV ≤ 0 at week 10 → stop, publish the negative.
- Execution gap (fill vs signal) eats > half the paper edge for 4 consecutive weeks → back to paper.
- Any discovered leakage voids affected results.
Signal ledger
Every quote, every fill
This table is the signal ledger — the gate: one row per signal, priced at the best sportsbook quote at signal time (the venue column names the quoting book), graded against the sportsbook close. Status reads signal while open and the settled result (win / loss / push / void) after Tuesday grading. Rows whose venue is polymarket are a separate appendix: the house's own maker-quote log, marked quoted or diagnostic … — the retired §5 simulator's output, never a real fill and never the gate. The fills ledger (real venue orders, published from the first live fill) tracks what actually executed and the gap between signal price and fill; a persistent gap is a kill condition (§A3).