FFINE

Baseline

Each gate round (one per head) scores candidates against the head on a fresh random draw of about 500 tasks from the 19,305-task baseline pool. The draw is not uniform. Since Nov 2, 2026 it is information-weighted: a two-parameter item-response (2PL) model fitted on every recorded checkpoint×task pass/fail gives each task a difficulty b and a discrimination a, and a task’s chance of being picked grows with the square root of the information it carries about the head’s ability, √a2P(1 − P) (see How the draw works). Tasks near the head’s level that separate stronger from weaker checkpoints are picked most; tasks the head almost always (or never) solves are picked least (a small uniform floor keeps every task in play). The dashed curves show the previous prior-v1 draw (√E[p(1 − p)] from the prior table, E497 to Nov 2) for comparison.

IRT information-weighted draw · live since Nov 2, 2026

Head pass rate by task

—
Pass ratePass rate 0.5IRT discrimination a′ ÷ median, right axis (shrunk + clipped, as the draw uses it)

Selection probability per round

—
Selection probability (live, IRT information-weighted)Previous: prior-v1 (until Nov 2)Uniform drawPass rate 0.5

Draw weight term at the head

IRT fit — · live
Live: IRT information a′²P(1−P) ÷ meanPrevious: E[p(1−p)] ÷ meanMean = 1Pass rate 0.5

How the draw works

priors/baseline_v1.py

When a round opens, the gate computes the head’s ability θh (the MAP of the head’s own pass/fail on gate-pool tasks: its winning candidate run and its head runs, under the fitted model) and sets each task’s inclusion probability:

πi = N[(1 − floor) · giΣj gj + floor · wiΣj wj]
gi = wi · √Ii,  Ii = a′i2 Pi(1 − Pi),  Pi = 1 / (1 + e−ai(θh − bi))
log a′i = ½ log ai + ½ log m,  clipped to [0.5 m,  2 m],  m = median a

wi is the task’s share weight (size shares: each environment counts by its size, so every task has the same wi). Probabilities are capped at cap and any excess is spread over the uncapped tasks. Each task is then included independently with probability πi, using a commit-reveal seed fixed by a future block hash:

task i is drawn  ⇔  ui < πi,  ui = sha256(version | draw | seed | task) / 264

The knobs, with the live values:

The gain is a Hájek (inverse-probability ratio) estimate per environment, so the non-uniform draw does not bias it. Every drawn task i is weighted by 1 / πi, with di = candidate minus head pass rate:

me = Σi∈e di / πiΣi∈e 1 / πi,  Δ = Σe sharee me

Live since Nov 2, 2026: IRT information weighting. The 2PL model: Pi(θ) = 1 / (1 + e−ai(θ − bi)), with θ a checkpoint’s ability, bi the task’s difficulty and ai its discrimination (how sharply it separates slightly stronger from slightly weaker checkpoints), fitted (MAP) on every recorded checkpoint×task pass/fail (first fit: 365 checkpoints, 3.06M rollouts; refit daily, last fit —). Ii = ai2 Pi(1 − Pi) is the information a task carries about a small change of θ at the head, so the draw spends its ~500 tasks where a better candidate shows most. The checkpoints mostly come from one training chain, so a is weakly determined for many tasks; the shrinkage and clip above, the 10% floor and the cap bound what any one task can get. The estimate stays unbiased whatever the weights (Hájek, 1/π). Code: priors/baseline_v1.py (irt_score, theta_map) and priors/irt/.

x: percentile of tasks sorted by the head’s current pass rate (0 = hardest, 100 = easiest). The charts use the same order (sorted by the prior table, as before). Curves are averages over equal-count bins of about 120 tasks, rounded; task ids and per-task values stay private. Computed with the gate’s own draw code at the current head’s ability (what the next round would use; an open round keeps the probabilities it set when it opened), refreshed every 15 minutes.