Provenance-stamped · OSS origin/main @ ae1d381

The model-trading benchmark

Every number here traces to a committed result file, cited by its OSS path. No figure is estimated or fabricated: this is a data-assembly-and-narrative artifact — no model was run and nothing was served to produce it. The numbers are read from results committed to the kestrel repo, and each carries its source path so it can be audited.

Verify, don’t trust

Recompute this yourself

Every figure on this page traces to a committed result file. You do not have to take the numbers on faith: run a real sim, or reproduce any published record locally, byte-for-byte. No signup, no card, no human.

npx kestrel.markets@latest sim <slug>Mint your own anonymous sim over managed licensed data — it ends at a certified, publicly readable proof URL.
npx kestrel.markets@latest certify <proof-url>Recompute any published proof URL locally and reproduce the hosted result byte-identically — the determinism leg. Don't trust, recompute.
npx kestrel.markets@latest verify <proof-url>Recheck a record's signature — the complementary attestation leg.

Prefer machine-readable bytes? Read the markdown twin of this page, or facet the full row corpus in the leaderboard explorer.

Headline — alpha dispersion is the proof

The benchmark measures alpha, and instrument expressiveness sets the alpha ceiling: near-zero room on equity buy-and-hold, large room on options — because a straddle can express “big move either way” and a defined-premium bet can carry a thesis that shares cannot represent.

Equity buy-and-hold · control
−$1,757
the bearish thesis is unexpressible — a naked short is refused
0DTE ATM straddle (hold)
+$1,604
+612% on $262 defined risk · 7.1× ($2.62 → $18.70)
The swing only options can reach
$3,361
same 2024-12-18 FOMC selloff · matched-set dispersion $2,283/straddle
This is a market fact about instrument expressiveness, not a model-performance claim: the bearish thesis is unexpressible in equity (a naked short is refused) yet authorable and paid in options. Equity buy-and-hold is the low-expressiveness CONTROL — a saturated axis where buy-and-hold is hard to beat almost tautologically — that proves the contrast.

Sources

  • Straddle (hold) +$1,604docs/results/fomc-options-axis/grid/leaderboard.mdFOMC-OPTIONS-DOWN `hold` = +$1,604
  • Equity buy-and-hold −$1,757docs/results/single-model-v1/leaderboard.mdFOMC-DAY-REAL-DOWN buy-and-hold = −$1,757
  • +612% on $262 · 7.1× premium expansiondocs/results/fomc-options-axis/report.md$1,604 / $262 = +612%; down move $2.62 → $18.70 (7.1×). Full derivation.
  • Matched-set dispersion $2,283/straddledocs/results/fomc-options-axis/grid/leaderboard.mdalways-right +$1,935 vs always-wrong −$348 ⇒ swing $2,283/straddle

Options — the expressive alpha axis

No fixed policy wins all three regimes, and the gap between the right and wrong read is large — the headroom is a market fact options open that the equity axis cannot. Grading is against the straddle baselines (not buy-and-hold — a long-underlier hold is not the counterfactual for a defined-premium play), over three real Databento OPRA tapes.

The headroom is a market fact — options open alpha the equity axis cannot

On a matched set, the reference-arm floors alone open a dispersion the equity axis cannot reach — an always-right regime and an always-wrong regime separated by the full straddle. That headroom is a property of the tape, not of any model; the per-tape breakdown is faceatable in the explorer.

Matched-set dispersion
$2,283/straddle
Always-right regime
+$1,935
Always-wrong regime
−$348

Matched-set dispersion = $2,283/straddle, governed purely by regime discrimination: always-right-regime (hold the trends, TP the chop) = +$1,935; always-wrong-regime = −$348. The same read that is a −$1,757 loss in equity is a +$1,604 win in options.

Models pick the right structure — but mistime the catalyst, so realized capture is ≈$0

Structure present
6/6
Arm-rate (on replay)
4/6
Realized capture
≈$0
Best DOWN arm
+$66
vs headroom
+$1,604
The 4/6 arm-rate is a REPLAY figure. This 4/6 is a REPLAY figure — the six committed authoring docs replayed through the fixed grammar (the in-grammar 0DTE time-exit fix, PR #63, lets runs 1/3/4/6 arm; before it, five of six de-armed on an out-of-grammar time-exit clause). It is NOT a fresh-authoring capability measurement. The fresh, non-CFG lane armed only 1/6; PENDING — the clean, CFG-constrained frontier-lane N=2 re-run that would measure the true fresh arm-rate is tracked and not yet run. The fresh non-CFG lane (no grammar decoder) armed only 1/6 and under-states.
The engine is verified faithful — capture is a judgment/timing gap, not a plumbing fault. The engine is verified faithful. `applyFloors` floors every SELL at intrinsic (plus a post-tick-snap never-below-intrinsic guard) and the +$1,604 HOLD baseline reproduces byte-identically. The earlier `@fair` deep-ITM 0DTE exit-pricing claim was a MISDIAGNOSIS, adversarially disproved in PR #69 — main already floors, so a red-on-main fixture was impossible, and that impossibility was itself the proof. This is not a plumbing fault.

Dominant cause — TIMING / JUDGMENT. Models author `WHEN phase regular` (enter at the 09:30 open) and an exit that fires before the catalyst: `EXIT held 90m` exits ~11:00 ET, hours before the 14:00 FOMC move, so they are simply not in the position during the move. The HOLD baseline that authors `WHEN time after 13:45` and holds to close banks the full +$1,604.

Secondary cause — residual GRAMMAR gaps. Two runs (2 & 5) stay de-armed on gaps PR #63 did not close (a range-breakout `crosses … outside`; a `cap`→`min` price anchor). Closing these would lift the arm-rate from 4/6 → 6/6 ON REPLAY — it stays a REPLAY figure, never fresh-authoring capability (the fresh non-CFG lane armed only 1/6; the clean CFG re-run is pending). They are separate features, not the time-exit.

The honest read: Models pick the right options STRUCTURE but MISTIME the catalyst (and hit residual grammar gaps) — a genuine, measurable JUDGMENT/timing gap the benchmark exposes, not a plumbing artifact. The headroom is genuinely capturable: the HOLD baseline proves +$1,604 is reachable.

The pair/watcher axis adds ≈0 on options too — structurally, not by failure

All 18 columns α=$0, book unchanged. All 18 pair/watcher columns α=$0, book unchanged — structural, not a watcher failure. On WHIPSAW the per-leg-TP straddle is already the best chop policy; on UP + DOWN the frozen plan's own +50% TP fills within minutes of the 14:00 statement, before the first 14:15 wake, so the watcher wakes to a resolved book. The TP-vs-hold decision lives at AUTHORING, not execution — the alpha lives in the authored options structure.

Where the headroom is actually captured — top option plays by α

Capable models DO reach into the options headroom on the cells where the catalyst is legible. Sorted by α (abstentions and ranges show their honest display string and sort last); the exhaustive per-cell, earn-trap, and open-reclaim tables are faceatable in the explorer.

ModelCellLaneα
best frontier modelEQ-DAY-EARNfrontier+$1,627
gpt-5.4-miniEQ-DAY-EARNsmall+$1,627
Kimi K2.6EQ-DAY-EARNopen+$1,596 ± $0
gpt-5EQ-DAY-EARNfrontier+$1,570
best frontier modelFOMC-DAYfrontier+$1,017
Qwen2.5-3BEQ-DAY-EARNsmall+$933

See all 17 in the explorer →showing top 6 of 17 by α

The options roadmap — verified today vs needs-building

Expressible today
  • Any all-long multi-leg structure (straddle proven end-to-end; strangle / directional call-or-put / ratio-all-long)
  • Single-expiry, same-session 0DTE cash-settled
  • `atm` / `rel` / `abs` strikes on a $1 grid × 100 underliers
  • `strict-cross-v1` fills each leg independently vs its own NBBO
Verified gaps — needs building
  • Short-legged defined-risk structures — the ADR-0005 atomic unlock
    Vertical spreads / iron condors / calendars / ratio spreads cannot arm today. never-naked (ADR-0017) refuses an uncovered SELL and coverage is per-(strike,right), so a spread's short leg is naked at open and dropped. The whole-structure atomic preflight is the reserved-and-refused `atomic` path — needs an atomic execution adapter + structure-coverage model.
  • Strike-delta (`25d`) is unimplemented
    The grammar admits it but engine delta-resolution needs a vol surface; only `atm` / `abs` / `rel` demonstrably work.
  • Genuine multi-day tenors price + settle as 0DTE-at-close
    Weeklies / monthlies / LEAPs parse but the single-day driver ignores the tenor tags. Needs multi-day tapes + theta/carry across sessions — the biggest architectural gap; the whole driver is single-session.

Sources

  • Headroom floors (UP/DOWN/WHIPSAW straddle vs per-leg-TP) + dispersiondocs/results/fomc-options-axis/grid/leaderboard.md6 fixed-policy floors: 164/1604/167 (right) and −76/−86/−186 (wrong) ⇒ $2,283/straddle
  • Structure 6/6, arm-rate 4/6 on replay, realized capture ≈$0docs/results/fomc-options-axis-postfix/replay.jsonlsingle-model/results.jsonl (6 authoring runs @ 13:45) + postfix replay/rerun (PR #67); fresh non-CFG lane armed 1/6
  • Engine verified faithful — the @fair exit misdiagnosis, adversarially disproveddocs/results/fomc-options-axis/report.mdPR #69 (correction) + src/engine/pricing.ts `applyFloors`; +$1,604 HOLD reproduces byte-identically
  • Pair axis — all 18 columns α=$0 (structural)docs/results/fomc-options-axis/report.mdpair-fan/results.jsonl: frozen plan +50% TP fills before the first 14:15 wake

Equity control + capability

On equities, no single language model — run end-to-end, authoring its own plan AND managing every wake — beats buy-and-hold on any cell where the baseline made money. That is the CONTROL that proves the options point.

Why this is the control, not a disappointment. This is the control, not a disappointment. Long shares are a low-expressiveness instrument — there is little for judgment to do but time entries, so buy-and-hold (free directional beta) is hard to beat almost tautologically. The equity axis is saturated: near-zero alpha room, so “nobody beats buy-and-hold” is the expected result. Where the instrument is expressive (options), the same read becomes a $3,361 swing.

0 of 24 model×cell means and 0 of 48 individual replicates cleared buy-and-hold on the four profitable cells. Mean α vs the best reference arm is negative for all six models. Best single attempt in the whole run: qwen3-max on EQ-DAY-EARN rep0 at $860.34 — against buy-and-hold $2,954.00.

The null control is failed by everyone: 12 of 12 columns traded CTRL-QUIET-CHOP, an edgeless tape whose correct move is to place no order. Restraint is the cheapest thing the benchmark asks for and the roster does not have it.

Single-model axis — mean α vs the best reference arm (negative for all six)

Run end-to-end on the raw single-model axis, no watcher beats its best deterministic reference arm — mean α is negative across the board. That is the control: a saturated, low-expressiveness axis, not a model indictment. Ranked by α; the reference-arm floors and per-cell detail are faceatable in the explorer.

ModelCellLaneα
qwen3-maxopen−$698.06
claude-sonnet-5frontier−$707.66
gemini-3.1-profrontier−$713.00
claude-opus-4.8frontier−$760.53
claude-haiku-4.5small−$762.27
deepseek-v4-flashopen−$1,045.26

See all 6 in the explorer →

TIERS, not a rank. Only A vs C ($578.80, both lanes replicated) survives as resolved; Tier B→C ($172.05) is smaller than the open lane's mean σ and Tier A→B ($406.75) is inside 2σ — neither boundary touching Tier B is resolved. Do not present the unresolved open-lane tier as a rank.

Fleet mean discretion α: OPEN $341.02 vs FRONTIER $871.75 — frontier leads overall. The “open matches frontier” result is axis-specific (managing someone else's well-formed plan is an easier job than authoring one) and does NOT replicate on the single-model axis, where qwen3-max's $0.00s are abstentions, not matched trades.

Capability — not size, and not openness

On the decisive EQ-DAY-EARN discretion trap (the stop-less gap-fill, frozen floor −$2,618), the same trap that separates capability from BOTH size and openness. The gap is judgment, not plumbing.

Capability separates from size and openness — the EARN-trap reclaim, by α

A small closed model and a current-gen open model both reclaim the earnings trap; a stale 7B and a 0.5B do not. Capability is judgment, not parameter count and not licence. Sorted by α (a passive `{}` no-action shows its honest $0.00 display string and sorts last, never as a $0 trade); the full earn-trap, size-sweep, CFG-ablation, and open-reclaim tables are faceatable in the explorer.

ModelCellLaneα
gpt-5.4-miniEQ-DAY-EARNsmall+$1,627
Kimi K2.6EQ-DAY-EARNopen+$1,596 ± $0
gpt-5EQ-DAY-EARNfrontier+$1,570
Qwen2.5-3BEQ-DAY-EARNsmall+$933
GLM-5.2EQ-DAY-EARNopen+$231 ± $0
Qwen2.5-7BEQ-DAY-EARNsmall$0.00 (no action)

See all 13 in the explorer →showing top 6 of 13 by α

CFG is judgment-neutral. The grammar did exactly what it promised on emissions (33 invalid → 0), yet α got worse: without the grammar the 7B repeatedly tries to emit a forbidden `supersede` arm that fails closed to a PASS, and on a working plan that accidental passivity is roughly right. CFG faithfully executes whatever judgment exists — necessary infrastructure for a clean measurement, not a lever that raises the curve.
Reliability is the honest remaining axis. The stale 7B's $0.00 was that specific model's judgment gap, NOT an open-tier ceiling: all four current-gen open-frontier models act and reclaim, and Kimi K2.6 matches the CLOSED frontier's reclaim deterministically (+$1,596). RELIABILITY is the honest remaining axis — “CAN” is not “always” (DeepSeek-V4-Pro and GLM-5.1 reclaim only 1 of 2 replicates; Kimi is deterministic). Current-gen open CAN do the judgment task; consistency is the next axis the benchmark measures.

Sources

  • Equity single-model board (0/24 means, 0/48 replicates, null 12/12)docs/results/single-model-v1/leaderboard.md7 cells × 6 models, N=2, mean α vs best reference arm
  • Pair-axis discretion tiers (only A vs C resolved)docs/results/pair-leaderboard-v1/leaderboard.md4 cells × up to 8 watchers; 2026-07-14 AMENDED tier section
  • EARN-trap reclaim + non-monotonic size sweep + CFG ablationdocs/results/cfg-earn-retest/report.md§4 (size sweep), §5 (CFG ablation), §8 (frontier/small-GPT cut)
  • Current-gen open reclaims (Kimi K2.6 +$1,596 deterministic)docs/results/big-open-earn/report.mdEQ-DAY-EARN gap-fill, seed 100, discretion, N=2 each; total spend $1.62

The strategist is the edge

Exhibition · non-governed (Fable is a house agent)

The reachable headroom lives predominantly in the strategist's authored, defined-risk plan — before any in-loop management — so the plan, not downstream watcher P&L, is the thing to measure. This is the §5 verdict, stated as a DIRECTION rather than a precise fraction: an exact “% of headroom” is not reproduced from a committed computation, so we state the direction and cite its reproducible complement (the watcher-adds-≈$0 result) as the number.

Watcher adds (mean α, 33 fan runs)
−$2.07
≈$0 — the reproducible complement of the §5 direction
Fable plans (structural rubric)
26/26 core plans scored 5/5 (all 32 including thinking proxies)
no lever changed the structural grade

When the plan carries its own stop, the watcher adds ≈$0. Mean watcher α across 33 fan runs is −$2.07; every disciplined cell sat at exactly $0.00, non-zero only because one over-trading cell lost money. The options pair axis (all 18 columns α=$0) is the same finding on the expressive instrument.

Exhibition / non-governed — Fable is a HOUSE-BENCH agent: house and Bench agents paper-trade only and never hold governed standings (PLAT-ADR-0035 §10/§11). Fable-authored plans are structurally disciplined by default — graded directly on the structural rubric (defined-risk EXIT / max-loss bounded / never-naked-clean / conditional entry / TP). No lever changed the structural grade: told to “ride the move and let winners run,” Fable still wrote a bounded EXIT — the §5 worry that aggressive framing drops the defined-risk exit did not reproduce. Plan noise floor is tiny: $0.39 on EARN, $12.74 on ORB across N=3 same-prompt re-samples.

Reasoning level changes plan CONSTRUCTION, not discrimination — `medium` is best AND cheapest

The strategist axis by α — `medium` is Pareto-dominant

`medium` reasoning has the best matched-set economics at less compute; the fine ordering is INDICATIVE. Latency is measured but UNPRICED (badged, and sortable, in the explorer) — a slow level never 'wins' here. Sorted by α (the degenerate/inert level and the pooled hill-climb FITNESS rows carry no dollar α and sort last, shown with their honest display string, never coerced to a number).

ModelCellLaneα
claude-fable-5frontier−$5.03
claude-fable-5frontier−$30.34
claude-fable-5frontier−$35.61
claude-fable-5frontier−$142.59
claude-fable-5frontier$0.00 (degenerate)
claude-fable-5frontierfitness 82.96 (baseline)

See all 11 in the explorer →showing top 6 of 11 by α

Reasoning level changes plan CONSTRUCTION (position sizing + stop placement), not discrimination — the matched-set twins are byte-identical at the honest vantage, so every deliberating level arms both poles identically (12/12). `medium` Pareto-dominates: best matched-set economics at LESS compute than high/max. If this benchmark drove the choice, ship the strategist at `medium` — best-quality and cheapest. `none` is degenerate (oversize plans that never fire), not restraint; `max` actively hurts (a very tight earn stop blows up on the gap-fill trap).

One Fable draw per level, so the fine ordering (medium > high > low) is INDICATIVE — entangled with which plan template Fable happened to write on that single draw. The two mechanism findings — `none` is degenerate and `max` destabilizes — are mechanism-confirmed (resize check; the over-tight stop), not noise.
On the pooled matched set, baseline Fable remains the champion (fitness 82.96) and NO knob beats it. The metric catches false positives: `range-velocity` looked good pre-crash but is exposed as passivity, not discrimination — it forfeits the baseline's guaranteed +75 defined-risk-exit capture on the ORB “fakeout” pole, so a passivity knob that only avoids a loss on one pole is scored down, not up. Caveat: the hill-climb is TRAIN-only — the holdout split was lost to a mid-run OOM crash, so generalization is unmeasured.

Sources

  • §5 direction + Fable plan grades (26/26 5/5)docs/results/strategist-plan-divergence/report.md§5 verdict (direction, no %); Q1/Q2 plan-grade tables; noise floor $0.39 EARN / $12.74 ORB
  • Watcher-adds-≈$0 (mean −$2.07 / 33 runs)docs/results/fleet-vs-real-fixtures-1/leaderboard.mdheadline: every disciplined cell $0.00
  • Reasoning-level sweep (medium Pareto-dominant)docs/results/reasoning-level-sweep/report.mdconfig.thinkingLevel {none…max}, matched-set frozenPlanEv
  • Hill-climb pooled fitness (baseline champion 82.96, TRAIN-only)docs/results/strategist-hillclimb/report.mdPooled matched-set fitness; Train-vs-holdout gap: NOT COMPUTABLE

Methodology + caveats

The guarantees — why a do-nothing agent cannot score

  1. No-lookahead vantage
    A model authors its plan at the cell's honest cutoff (`AUTHOR_CUTOFF` + `authorFromRange`), threaded into the live author only; the deterministic reference arms omit it so the calibration floor is byte-identical. Counterfactual-invariance is verified for every briefing.
  2. Contamination holdout fence — structural, and proven WIRED
    `tests/bench/splits.ts` partitions every cell's seed space into disjoint-by-construction sets: HOLDOUT = certified, sha-pinned benchmark seeds (scored, never trained); TRAIN = a reserved 5000–5999 band (trained, never scored). The eval fails closed — `assertHoldoutSeed` throws `SeedSplitViolation` the instant it is asked to score a train seed — and `splitManifestSha` is stamped on every result record. This is not a green-by-construction unit test: the fence ships with a failing fixture THROUGH THE REAL DRIVER — a test that drives the actual grading path with a train seed and asserts the throw. Apply the decisive probe — DELETE the `assertHoldoutSeed` call site and the fixture goes red — so the firewall is proven WIRED into the shipped path, never merely present.
  3. CFG-honest emission
    Grammar-constrained decoding (ADR-0030/0031) makes invalid Kestrel unrepresentable at the sampling step, so judgment is measured through the action, not through emission noise — necessary infrastructure, judgment-neutral (see the CFG ablation above).
  4. Deterministic replay grade
    The frozen plan is replayed pure-algo (`blotter.totals.floor`, zero model calls); `SimRunId = sha256(gradedBus)` re-grades byte-identically. Local greedy decode is byte-reproducible (measured σ=$0.00); remote temp-0 lanes are NOT (the frontier lane diverged on 1/15 groups, the open lane 9/14) — measured, not assumed.

Caveats — read these before citing any number (NOT footnotes)

  1. The open tier now includes current-gen frontier open models — and they RECLAIM; the remaining axis is RELIABILITY
    The locally-served Qwen2.5 entries (0.5B/1.5B/3B/7B) are small, older-generation CONTROLS used to separate capability from openness — not a claim about today's best open weights. On the decisive EARN trap all four current-gen open-frontier models (Kimi K2.6, DeepSeek-V4-Pro, GLM-5.1, GLM-5.2) act and reclaim, and Kimi matches the CLOSED frontier deterministically (+$1,596). The stale 7B's $0.00 was that model's judgment gap, not an open-tier ceiling. The honest open question is reliability — “CAN” is not “always.”
  2. Where the watcher baseline is Opus, not Fable, we say so
    The strategist / plan-authoring boards use Fable (`claude-fable-5`, subagent lane) — that is where “baseline Fable is the champion” and the plan-grade findings apply. The watcher / execution boards (pair + single-model) are managed by Opus / Sonnet / Haiku / Gemini / open-weight models; there is no Fable watcher row. Do not read the watcher-board tiers as Fable results.
  3. “Discretion” means backstopping an incomplete, stop-less plan — NOT a general skill
    The watcher's positive α on the discretion arm is reclaiming a plan deliberately stripped of its exit — a narrow backstop competence on a constructed trap, not evidence of broad trading ability. On real, well-stopped plans the same watchers add ≈$0.
  4. The hill-climb is TRAIN-only
    The holdout (generalization) split was lost to a mid-run OOM crash (unrelated to the task); the train-vs-holdout gap is not computable. The verdict “no knob beats baseline” stands on the complete TRAIN matched set, but generalization is unmeasured.
  5. The open-lane tier boundaries are NOT resolved
    Tier B of the pair board is the open lane at n=1, and both boundaries touching it are inside that lane's later-measured noise (mean σ $254.38, max σ $2,830.55). A replicated open-lane run is required before those tiers can be claimed.
  6. The open lane's σ was NOT cache-fabricated — RESOLVED (PR #64)
    Historically the open lane's serving path set no cache-skip header, so a σ=$0 could in principle have been a cache hit. Re-measurement disproved it: every published σ=$0 group had divergent `busSha` + `outTok` across replicates (a cache hit is byte-identical by definition). An explicit cache-skip header plus a bounded-numerics INVALID guard now prevent any future fabrication.
  7. Observability — invalid/parse-escaped authoring recorded as “authored” — RESOLVED (PR #61)
    Historically a plan that de-armed on an out-of-grammar clause was indistinguishable from a genuine stand-down without inspecting raw replies. Fixed: an empty/parse-escaped completion now classifies INVALID and is rejected-and-reprompted, never banked as a $0 “authored” stand-down. It did not corrupt any graded floor here.

Still open — honest remaining work

  • Hill-climb generalization is unmeasured
    The “no knob beats baseline” verdict stands on the complete TRAIN matched set, but the holdout split was lost to a mid-run OOM crash, so the train-vs-holdout gap is not computable.
  • The open-lane Tier B is unreplicated
    The pair board's Tier B is the open lane at n=1, and both boundaries touching it sit inside that lane's later-measured noise; a replicated open-lane run is required before those tiers can be claimed.
  • Open-tier reliability at N>2
    Current-gen open models CAN reclaim the EARN trap, but two of the four do so on only 1/2 replicates; the consistency axis wants more replicates and more cells before it is called.

Sources

  • The contamination fence + split manifestdocs/results/single-model-v1/leaderboard.mdtests/bench/splits.ts: HOLDOUT (sha-pinned) vs TRAIN (5000–5999), fails closed
  • Caveats 1 + 6 (open-tier reliability; open-lane cache re-measure)docs/results/big-open-earn/report.mdbig-open-earn + open-lane cache re-measure (PR #64)
  • Caveats 4 + still-open (hill-climb TRAIN-only)docs/results/strategist-hillclimb/report.mdTrain-vs-holdout gap: NOT COMPUTABLE