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.
Phase 1 → 2 gate · by end of week 10
week 0 of 10
Season kicks off Sep 10, 2026 — 9 days. The ledger starts filling after the first Friday injury reports.
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).
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.