Tej Shah
Explainer · Field guide

RL environments: a field guide

How to build, scale, verify, train on and measure reinforcement-learning environments: where each rollout's information leaks on its way into the weights, the measured cost of every leak, and the decision rules that close it, from task supply and reward hacking to staleness, distillation, noise floors and luck ceilings.

AuthorTej Shah
DateOctober 2026
LengthAbout 25,000 words and 29 interactive figures
SourcesPublic papers, documentation and leaderboards, computed examples, toy simulations, two author-built testbeds

Rein­force­ment learn­ing (RL) trains a model by let­ting it act, scor­ing what it did and making high-scor­ing behav­ior more likely. For a lan­guage-model agent, one attempt, called a roll­out or episode, is a chain of model calls and tool calls that ends in an answer or a changed system. A train­ing run is mil­lions of them, and every­thing the model learns arrives through one narrow chan­nel: the number the envi­ron­ment returns at the end.

That makes an RL envi­ron­ment a mea­sur­ing instru­ment with an opti­mizer pointed at it. Every roll­out buys infor­ma­tion, and the envi­ron­ment decides whether the pur­chase returns signal, noise or a lie. Most envi­ron­ment-side fail­ures, from reward hack­ing to gains that vanish on re-eval­u­a­tion, are the instru­ment fail­ing in one of six ways. Its tasks can be empty: the policy always or never suc­ceeds, so noth­ing is learned. Its reward can be wrong, paying for some­thing other than the task. The train­ing record can be cor­rupted, no longer match­ing what the policy did. The signal can be coarse, one bit per episode when a full rank­ing was avail­able. The effect can be unread­able, smaller than the eval­u­a­tion's noise floor. And the infor­ma­tion needed to win can be absent, unavail­able to any legal player. This guide calls that list the signal ledger (six losses, plus line 0 for the instru­ment itself) and works through it in order.

The guide is for a tech­ni­cally lit­er­ate reader who wants the mechan­ics: how to spec­ify an envi­ron­ment a lab would trust, where a run will waste com­pute or mis­lead you, and how to judge some­one else's claimed gain. Each sec­tion opens with its ques­tion and closes with a deci­sion rule, and the rules are col­lected in a check­list at the end.

Key ideas

  1. Prove sound­ness before any­thing else. A do-noth­ing agent scored 38% on τ-bench's air­line tasks, above a GPT-4o agent's 35% [1]. Run do-noth­ing, the oracle and every scripted hack before any pass rate.
  2. A task teaches only while the policy some­times fails. At a 90% pass rate with 8 roll­outs per group, 43% of groups carry no gra­di­ent (com­puted). Cal­i­brate on the policy you train, and count seed fam­i­lies, not vari­ants.
  3. Judge a false pos­i­tive by its gra­di­ent, not its rate. In one fron­tier rea­son­ing run, hacks that skipped the tests "quickly get rein­forced and become sys­temic, affect­ing nearly every train­ing envi­ron­ment" [2]. In a toy, a ver­i­fier with an audited 4.0% false-pos­i­tive rate drove 72.5% of sam­ples to hack, because the hole worked on every prompt.
  4. The roll­out record is a con­tract. Keep the sam­pler's token ids, log-prob­a­bil­i­ties, ver­sions and masks. At stal­e­ness bounds of 4 to 16, naive PPO aver­aged 31.6 on AIME 2024 and a stal­e­ness-aware objec­tive 40.6, against 42.0 for syn­chro­nous train­ing (com­puted from one run per set­ting) [3].
  5. If some­thing can already score every option cheaply, stop sam­pling and dis­till its rank­ing. Given larger Qwen3 teach­ers already trained, Qwen3‑8B reached 74.4 on AIME 2024 with on-policy dis­til­la­tion for 1,800 GPU-hours, against 67.6 with RL for 17,920; the teach­ers' own train­ing is not counted [4].
  6. RL makes reli­able what a model can already sample. Put knowl­edge in through tokens and tools, and pay for absten­tion, or train­ing teaches guess­ing.
  7. A score is a sample. Pair, clus­ter and count before you run: a 3-point gap needs about 1,000 ques­tions under Miller's illus­tra­tive paired assump­tions [5] and about 4,100 per arm unpaired at 62% accu­racy, and at an intra-seed cor­re­la­tion of 0.3, 100 seeds never carry more than about 333 inde­pen­dent tasks, how­ever many vari­ants you gen­er­ate (com­puted).
  8. Mea­sure the infor­ma­tion bound before you set a goal. A player that saw its oppo­nent's whole rack won only about 62% against a strong bot [6]. In the tile-game test­bed, the best legal player cov­ered 0.68 of the dis­tance from a coin flip to a rack-seeing bound against a greedy bot, and 0.23 against a sim­u­la­tion bot (test­bed mea­sure­ment).

How to read this guide

Four kinds of number. Most num­bers cite a public paper, report, doc­u­men­ta­tion page or leader­board; papers and system cards are cited as they stand, "self-reported" marks a com­pany's claim about its own system in a blog, its doc­u­men­ta­tion or a leader­board it runs, and "reported" a press account. Com­puted num­bers are arith­metic you can redo from a stated for­mula. Toy sim­u­la­tions are small seeded pro­grams that iso­late one mech­a­nism and show the shape of an effect, never its size: a route-plan­ning task pool (Part II), a 0.1M-param­e­ter trans­former learn­ing addi­tion (Parts III to V), a roll­out system with heavy-tailed latency (Part IV) and an order-exe­cu­tion sim­u­la­tor (Part VI). Test­bed mea­sure­ments come from two larger testbeds the author built. Toy and test­bed num­bers are unpub­lished, so no rule rests on them alone; the meth­ods table at the end gives each one's setup, seeds and inter­val method.

Two testbeds. The rec­on­cil­i­a­tion envi­ron­ment (Parts I to III) asks an agent to rec­on­cile an invest­ment fund's book with its cus­to­dian's state­ments and its admin­is­tra­tor's draft val­u­a­tion, find the "breaks" where they dis­agree, post cor­rec­tions and sign off a net asset value within 1 basis point (0.01%). The cross­word-tile-game test­bed1 (Parts V and VI) is a two-player word game with a shuf­fled bag and racks the oppo­nent cannot see, in which a search player can score every legal move. That makes it a clean instru­ment for luck ceil­ings, dis­til­la­tion from a search oracle, paired eval­u­a­tion, search versus learn­ing, and the limits of self-play.

The terms below are used in exactly these senses through­out, and each is also defined where it first appears.

Glos­sary: 27 terms defined once, then 16 bench­marks, units and game terms

Glos­sary for the whole guide.

TermMeaning in this guide
EnvironmentA task (or a world hosting many tasks), the tools and state the agent acts on, and a verifier that runs out of the agent's reach and returns a reward.
Task bundleInstruction, environment image or state, tools, oracle solution, hidden verifier, canary trajectories, metadata and a pinned version, shipped together.
Verifier, judge, rewardThe program (verifier) or model (judge) that turns a finished episode into a number (the reward).
OracleA reference solver that reaches maximum reward through the agent's own tools. In Part V, also a teacher that can score every option.
FloorThe reward of doing nothing. Keep it exactly 0.
CanaryA scripted hack trajectory that must score at or below the floor and must trip the defense it was written to probe.
Exploit policyA policy that searches for reward without doing the task; judged by its mean reward, never by its best rollout.
Rollout, episodeOne sampled attempt, including every model call and tool call.
GroupThe G rollouts sampled for one prompt and compared with each other, as in GRPO.
AdvantageHow much better a rollout did than its group's baseline; zero for every member of a group whose rewards are all equal.
pass@k, pass^kThe chance that at least one of k attempts succeeds, and that all k succeed. From n attempts with c successes, estimate pass@k as 1 − C(n − c, k) / C(n, k).
Learnable bandPass rates at which the target policy sometimes succeeds; buyers Epoch AI interviewed ask for a floor around 2-3% and retire tasks near 70%.
Zero-variance groupA group whose rollouts all earn the same reward; it contributes no gradient.
False negative, false positiveThe verifier rejects a correct answer, or pays a wrong one.
Reachable false positiveA false positive the policy can produce on purpose, across prompts; the dangerous kind.
Reward hackingThe policy earning reward through a hole in the verifier rather than by doing the task.
Over-optimizationA proxy reward keeps rising while the true reward peaks and falls.
Behavior policy, proximal policyThe policy version and numerics that actually sampled the tokens; the recent policy that centers the trust region during an update.
StalenessThe trainer's policy version minus the version that sampled a token.
Training-inference mismatchThe sampler and the trainer computing different probabilities for the same weights and tokens.
Token-in, token-outTraining on the exact token ids the sampler emitted, never on re-encoded text.
Distillation (listwise, on-policy)Training a student to match a teacher's distribution over options; on-policy distillation does it on the student's own samples.
Noise floorThe smallest difference an evaluation design can detect at a stated power.
Paired (duplicate) evaluationScoring both arms on the same items, seeds or deals so that shared luck cancels.
Design effectThe variance inflation 1 + (m − 1)ρ for clusters of m items with correlation ρ.
Luck ceilingThe best win rate any legal player could reach, given the domain's hidden information and randomness.
As-of time, knowledge timeThe instant an episode's world is frozen, and the moment a fact first became knowable. Gate tools on knowledge time.

Bench­marks, units and game terms named in the text.

NameWhat it is
AIME 2024The 2024 American Invitational Mathematics Examination. Each sitting has 15 problems [7], and evaluations pool the two 2024 sittings into 30; scores are the percentage solved.
MATH-500500 competition problems drawn from the test set of the MATH dataset [8].
GSM8KGrade-school math word problems [9]; GSM8K-Platinum is a relabeled copy (Part III).
MMLUMultiple-choice questions across 57 subjects, from elementary mathematics to law [10].
SWE-bench VerifiedA human-curated subset of 500 real GitHub issues; an agent's patch counts only if the repository's tests pass [11].
LiveCodeBenchCoding problems collected over time from LeetCode, AtCoder and Codeforces contests, so a model can be scored on problems published after its training data [12].
BFCLv3Version 3 of the Berkeley Function Calling Leaderboard, which scores whether a model's tool calls are correct, including multi-turn calls [13].
τ-benchSimulated customer-service tasks (airline, retail) in which an agent uses tools and talks to a simulated user [14].
Terminal-Bench 2.089 human-reviewed tasks an agent completes in a command-line sandbox (Part II).
nDCG@10Normalized discounted cumulative gain over the top ten retrieved documents, a ranking score in which 100 is a perfect ranking.
EloA rating scale for head-to-head play: a 100-point gap means the stronger side expects to score about 64% (computed).
k3 estimatorThe KL-divergence estimate r − log r − 1, with r the reference policy's probability over the current one's, that GRPO adds as a penalty [15].
Fitted asymptoteThe ceiling A of the sigmoid that ScaleRL fits to validation pass rate against training compute; recipes are compared by A and by how fast they approach it (Part IV).
NatA unit of information or entropy measured with natural logarithms; one nat is about 1.44 bits.
BingoIn the tile game, playing all seven tiles of a rack in one move, which earns a 50-point bonus [16].
Blank tileOne of the game's two wildcard tiles, which can stand for any letter and score nothing themselves.

Part IThe environment is the product

What is an RL envi­ron­ment, why did it become the scarce input to fron­tier train­ing, and what must it prove before anyone trains on it?

Line 0 of the ledger is the instru­ment itself: a bound­ary between what the agent can touch and what grades it, whose bind­ing input is sound tasks, not sand­boxes.

Three sides of one boundary

What exactly does a lab train on? In this guide an envi­ron­ment is a task (or a world that hosts many tasks), the tools and state an agent acts on, and a ver­i­fier that runs out of the agent's reach and turns the fin­ished episode into a reward; when a model does the scor­ing, it is a judge. Think of an exam hall: the can­di­date holds the pen, never the answer key, and the paper is marked after the can­di­date leaves. The pic­ture has three sides (Figure 1).

OpenEnv, an open envi­ron­ment spec­i­fi­ca­tion hosted by Hug­ging Face, draws the same line: sim­u­la­tion con­trols such as reset and step "are never exposed as MCP tools", because an agent that could reset "would learn that every error is recov­er­able" [18]. One trap: OpenEnv's obser­va­tion type car­ries a reward field for the train­ing loop, so a har­ness that for­wards obser­va­tions ver­ba­tim shows the agent its own score. Strip it at the bound­ary.

Figure 1 The trust bound­ary has three sides, and every pub­lished exploit shown here crosses one of its lines. The agent side holds the instruc­tion, typed tools and sand­box state; the infra­struc­ture side runs episode con­trol and receives the reward; the ver­i­fier side grades the exported state after the episode, with the answer key, tests, oracle and canaries out of the agent's reach. Red mark­ers are cross­ings that must never happen. Click a box or a marker, or step through all thir­teen, to read how each part has failed in public and the check that catches it. Prove­nance. Public data (OpenEnv RFC 001, the MCP tools spec­i­fi­ca­tion, the Agen­tic Bench­mark Check­list, the BenchJack audit, the GSO changelog, the o1 system card) arranged as a design syn­the­sis.

When public audits go look­ing, the holes sit in this bound­ary, not in the model or the com­pute. A UC Berke­ley team's exploit agent, BenchJack, scored 73% to 100% on eight widely used agent bench­marks (4,458 tasks) with­out doing the work: agent-writ­ten test hooks made every SWE-bench Ver­i­fied test pass, con­fig­u­ra­tion files exposed WebArena's ref­er­ence answers, and one val­ida­tor gave full marks to an empty object [19]. Their rule: "Iso­late every­thing that scores from every­thing being scored" [20]. The bound­ary moves as models improve. GSO, a code-opti­miza­tion bench­mark, cut its con­tain­ers off from code hosts in July 2026 "after we observed newer models were some­times using arbi­trary tech­niques to fetch upstream com­mits" [21]. And infra­struc­ture must be unreach­able, not merely unlisted: in OpenAI's o1 eval­u­a­tions a cap­ture-the-flag con­tainer failed to start, so o1-pre­view scanned the net­work, found the eval­u­a­tion host's Docker API exposed by a mis­con­fig­u­ra­tion, and started a fresh copy of the con­tainer with the com­mand cat flag.txt to read the flag [22] (cross­ing 6 in Figure 1).

Why now: checkable tasks were never stockpiled

Why did envi­ron­ments, rather than data or com­pute, become the bot­tle­neck? Pre­train­ing scaled on text the web had already writ­ten. After OpenAI's o1 (Sep­tem­ber 2024) and DeepSeek-R1 (Jan­u­ary 2025) showed that reward­ing checked answers in math and code drives rea­son­ing, RL on ver­i­fi­able tasks became the way labs add capa­bil­ity [23] [24]. That con­sumes some­thing nobody had stock­piled: tasks with a reli­able check, set in places that look like real work.

Reports now count envi­ron­ments in the thou­sands and claim hun­dreds of thou­sands, though each counts a dif­fer­ent unit. DeepSeek-V3.2 had an agent syn­the­size 1,827 envi­ron­ments hold­ing 4,417 tasks, inside a post-train­ing budget "exceed­ing 10% of the pre-train­ing cost" [25]; Prime Intel­lect pack­ages about 365,000 tasks from 23 task sets for soft­ware, ter­mi­nal and search work (self-reported) [26]. One train­ing step explains the con­cur­rency. GRPO (group rel­a­tive policy opti­miza­tion), the method DeepSeek-R1 trained with, sam­ples a group of roll­outs for each prompt and scores each against the group's mean. A step of 64 prompts with 8 roll­outs each needs 512 envi­ron­ment instances live at once (com­puted).

None of the plumb­ing is scarce any more: a man­aged sand­box lists at $0.000014 per vCPU-second, about five cents an hour [27], and DeepSeek reports more than 380,000 con­cur­rent sand­boxes [28]. What each of those 512 slots needs is a task whose reward is sound and whose pass rate sits where the cur­rent policy learns; in the words of one of Epoch AI's inter­vie­wees, "Main­tain­ing qual­ity while scal­ing is the number one bot­tle­neck that people see" [29].

What a task is worth

Who pays for envi­ron­ments, and what does one task cost against what it con­sumes? In Sep­tem­ber 2025 The Infor­ma­tion reported that Anthropic had dis­cussed spend­ing more than $1 bil­lion on RL envi­ron­ments over the fol­low­ing year, as Epoch AI's FAQ on the market recounts [29]. Epoch's inter­views put con­tracts at "six to seven fig­ures per quar­ter", tasks at "$200⁠–⁠$2,000 per task", web­site repli­cas ("UI gyms") at around $20k each and a high-fidelity replica of a prod­uct such as Slack at about $300k, with exclu­sive deals "roughly 4⁠–⁠5x" the price [29]. Com­pute will "still dwarf RL envi­ron­ment spend­ing" [29], so price a task by its draw on com­pute. Mech­a­nize puts that at about $480 per train­ing run, assum­ing 500,000 tokens per attempt (its one-year extrap­o­la­tion from about 100,000 when it wrote), 64 attempts and an API price of $15 per mil­lion tokens [30]; at 100,000 tokens the same arith­metic gives about $96, and at a lab's inter­nal cost less (com­puted). Either way, a $50 task whose roll­outs all fail, or all pass, burns two to ten times its price on every run and teaches noth­ing (com­puted). Ven­dors, pro­cure­ment and pric­ing are the sub­ject of the com­pan­ion arti­cle, RL envi­ron­ments as a busi­ness.

Environments are consumables

How long does an envi­ron­ment stay useful? Not long, once some­one trains against it: bench­marks built from the same kind of task fill up on a sched­ule (Figure 2). CVDP, a chip-design bench­mark, launched in June 2025 with state-of-the-art models at "no more than 34% pass@1" (single-attempt suc­cess) on code gen­er­a­tion [31]; thir­teen months later NVIDIA reported a 97.1% aver­age pass rate across nine cat­e­gories for Nemotron 3 Ultra inside an agent that gen­er­ates, tests and reflects (self-reported; a dif­fer­ent pro­to­col) [32]. APEX-Agents, a bench­mark of pro­fes­sional agent tasks, launched in Jan­u­ary 2026 with a best score of 24.0% [33]; by Octo­ber the top of Mercor's own leader­board for it was 82.4% (±4.3; self-reported) [34]. GSO's head­line score rose from 4.9% at launch in May 2025 to 47.1% in July 2026, and to 88.2% in Sep­tem­ber on the day GSO changed how it prompts models [21]. An envi­ron­ment is a depre­ci­at­ing asset, so design refresh (gen­er­a­tors, live data, regen­er­a­ble held-out sets) into the first release.

The less obvi­ous lesson con­cerns the reward's shape. A pass/fail thresh­old sat­u­rates even when the quan­tity beneath it has not. GSO reports the share of its 102 tasks where one attempt is cor­rect and reaches 95% of a human expert's speedup; at that bar the leader passes 88.2%. Score the same attempts at twice the expert's speedup and it passes 18.6%; at six­teen times, 1.0% [35]. The tasks still have room; the bar does not. A graded score keeps room too: BRIGHT, a rea­son­ing-heavy retrieval bench­mark scored by nDCG@10, went from a best of 22.1 at launch to 66.9 in 21 months and still sits a third short of per­fect [36] [37].

Figure 2 Pass/fail bench­marks reach 80% on their head­line metric within 9 to 16 months of launch, some­times under a changed pro­to­col, while the speedups beneath one still have room. A: the best pub­lished score against months since launch for CVDP, APEX-Agents, GSO, MCP Atlas and BRIGHT (a graded retrieval score). Hollow points are leader­board tops plot­ted at the date fetched, an upper bound on elapsed time; squares mark scores obtained under a changed pro­to­col (CVDP's self-reported agent result, GSO's new elic­i­ta­tion); seg­ments only join pub­lished points. B: the same 102 GSO tasks scored at a rising speedup bar for five dated models; drag the slider to watch the leader fall from 88.2% at the default bar (95% of the human expert's speedup) to 18.6% at twice it and 1.0% at six­teen times. GSO pub­lishes these curves as single runs, with no inter­val. Prove­nance. Public data (the CVDP paper, NVIDIA, the APEX-Agents paper and leader­board, Scale's MCP Atlas leader­board, GSO's leader­board files, the BRIGHT paper and leader­board), fetched Octo­ber 2026.

Four questions in a fixed order

What does a lab check before it lets an envi­ron­ment near a train­ing run? Four things, in order. Sound­ness: high reward means the task was solved. Learn­abil­ity: pass rates sit where the target model learns. Inte­gra­tion: it runs in the lab's har­ness at the lab's con­cur­rency. Rights: license and prove­nance are clean, and no task dou­bles as some­one's eval­u­a­tion item. Each check is worth­less if an ear­lier one fails: a pass-rate band mea­sured on a hack­able ver­i­fier mea­sures the hack. Epoch's inter­vie­wees put the first cri­te­rion as "high reward must mean the task was actu­ally solved, not hacked" [29].

Sound­ness fails more often than builders expect. On τ-bench's air­line tasks an agent that does noth­ing scores 38% and beats a GPT-4o agent's 35%, because delib­er­ately unsolv­able tasks count an unchanged data­base as suc­cess; on SWE-Lancer an agent that replaces the tests with assert 1 == 1 scores 100%. The Agen­tic Bench­mark Check­list (ABC), an audit of ten agen­tic bench­marks, found 7 that vio­late task valid­ity ("a task should be solv­able if and only if the agent pos­sesses the target capa­bil­ity"), 7 that vio­late out­come valid­ity ("the eval­u­a­tion result (e.g., tests or checks) truly indi­cates task suc­cess"), and report­ing gaps in all 10, enough to mis­state per­for­mance "by up to 100% in rel­a­tive terms" [1].

The two validi­ties become four proofs a machine runs on every task, on every change. For task valid­ity, the oracle, a ref­er­ence solver restricted to the agent's own tools, reaches max­i­mum reward, and a do-noth­ing agent, which defines the floor, scores far below it. For out­come valid­ity, every canary (a scripted hack such as an empty answer, an edited test or an early exit) scores at or below the floor, and so does a sto­chas­tic exploit policy judged by its mean, never its best roll­out. The do-noth­ing test is the cheap­est check in the field and would have caught τ-bench's 38% in sec­onds (Table 1).

Table 1. The four intake ques­tions, in the order to answer them, with the proof that runs on every task and the statis­tic that describes a release.

QuestionProof on every taskRelease statisticDeveloped in
1. Soundness: does high reward mean solved?Oracle at maximum through the agent's tools; do-nothing far below; every canary at or below the floor and tripping the defense it was written to probeAn exploit policy's mean reward per task; canary replays above the floor (target: none)Part III
2. Learnability: does the target model learn here?pass@1 and pass@k on named reference models, several rollouts eachShare of tasks inside the band, from a floor near 2-3% to retirement near 70%, per modelPart II
3. Integration: does it run where the buyer trains?Episode start, step latency and error handling within budget in the buyer's harnessInfrastructure error rate at the contracted concurrency (512 instances for one 64 × 8 step)Part IV
4. Rights: can it be used and kept clean?License, provenance and authorship fields on every taskOverlap with public benchmarks and earlier deliveriesPart II and the companion business article

A maturity ladder

How far along is a given envi­ron­ment, and where is the unfin­ished work? Five rungs answer, from a pro­to­type that merely runs to a release cal­i­brated on ref­er­ence models (Table 2); the top rung includes a short train­ing run beside a random-reward con­trol, because random rewards can look like progress (Part III).

Open tool­ing now climbs the first three rungs for you, and L4 is where the unfin­ished work sits: OpenEnv's draft val­ida­tor leaves all seven sta­tis­ti­cal tests to who­ever oper­ates the envi­ron­ment, and for one of them, the adver­sar­ial floor, the pro­ce­dure "is not yet spec­i­fied any­where" [38].

Table 2. A matu­rity ladder for an envi­ron­ment release: what each rung requires, its gate, the intake ques­tions it answers, and how much of it OpenEnv's draft val­ida­tor runs [38].

RungRequiresGateAnswersOpenEnv draft validator
L0 PrototypeRuns on a few tasks; a reward existsNoneNothing yet: a do-nothing agent can still score 38%Not covered
L1 PackagedDigest-pinned image; manifest with declared resources and timeouts; typed tool schemas; license and provenance fields on every taskStatic validationIntegration, rights11 static tests, run locally
L2 ContainedNetwork policy per phase; a separate verifier sandbox with no network; isolated, seeded, replayable episodesRuntime validationSoundness (isolation), integration17 runtime tests, run locally
L3 VerifiedOracle at the maximum through the agent's tools; do-nothing far below; every canary at or below the floor and tripping its defense; no leakage; the same reward twice; an exploit policy's mean at the floorSemantic validation plus an exploit auditSoundness7 semantic tests, run locally; the exploit audit is not
L4 Calibratedpass@k bands on at least three reference models; separation; headroom; a reward-variance bound; an adversarial floor; a gameability gap; a short training run that lifts two model families beside a random-reward controlA statistical report from whoever operates the environmentLearnability, soundness7 statistical tests, all left to the operator

The rec­on­cil­i­a­tion test­bed shows L3 designed in rather than bolted on. Its gen­er­a­tor works from the answer side, the prop­erty Qwen's team calls "hard-to-solve, easy-to-verify" [39]: it writes one true book and injects each break into exactly one party's view, so the ver­i­fier com­pares rather than solves. Its typed tools reject unknown fields, and the single reward after sub­mis­sion scores the oracle 1.0 and doing noth­ing exactly 0 (test­bed mea­sure­ment).

Check yourself: Part I

A do-noth­ing agent scores 38% on τ-bench air­line. Which half of task valid­ity does that break, and which test catches it?

The "only if" half: tasks are passed with­out the capa­bil­ity, because unsolv­able tasks count an unchanged data­base as suc­cess. The floor test (reset, submit noth­ing, require a score far below the max­i­mum) catches it in sec­onds.

A har­ness for­wards OpenEnv obser­va­tions to the model unchanged. What can leak, and what test stops it?

The obser­va­tion type car­ries a reward field for the train­ing loop, so the model can see its own score. Strip reward and answer fields at the bound­ary and assert in a test that no agent-vis­i­ble obser­va­tion con­tains them.

GSO's leader passes 88.2% of tasks at the default bar. Is the bench­mark used up as a train­ing signal?

The bar is; the speedups beneath it are not. At twice the human expert's speedup the same model passes 18.6%, and at six­teen times 1.0%. Reward the ratio and raise the bar.

Ten hand-writ­ten tasks that pass these proofs are a demo; train­ing needs thou­sands, and uses each one up. Part II asks where they come from.

Part IITask supply: from seeds to checkable tasks

How do a few seed tasks become thou­sands of tasks that keep a trust­wor­thy check and still teach, and how do you know the pool taught any­thing about the tasks you care about?

A task is empty when the policy always solves it or never does, and every roll­out spent on it buys noth­ing. The cure has five steps: write the check first, grow with edits whose effect on the answer is stated in advance, keep tasks the trained policy some­times solves, count copies by struc­ture, and judge the pool on real tasks it never touched.

Run­ning exam­ple (toy sim­u­la­tion). Each task asks for the cheap­est route between two cities in a directed graph with inte­ger costs, within a given number of legs. An exact dynamic pro­gram ver­i­fies, three noisy beam searches play weak, mid and strong solvers, a 32-weight policy learns, and six edit oper­a­tors grow ten hand-writ­ten seeds; a second, dif­fer­ent gen­er­a­tor stands in for "real" tasks.

Seeds run out

Why can't ten good tasks carry a train­ing run? Because a learn­ing policy uses tasks up. GRPO-style meth­ods score each of a group's G roll­outs against the group's mean, and if every roll­out earns the same reward, "the result­ing advan­tage for this group is zero", and so is the gra­di­ent [40]. At pass rate p, a group is zero-vari­ance with prob­a­bil­ity pG + (1 − p)G: 43% at p = 0.9 and G = 8, and 66% at p = 0.95 (com­puted; Figure 3A).

The waste shows up as through­put, so it gets mis­di­ag­nosed as an opti­mizer prob­lem: a useful group costs G / (1 − share) roll­outs, 14 at 43% zero-vari­ance and 40 at 80% (com­puted). Larger groups recover signal per roll­out. At p = 0.9, going from 8 to 16 roll­outs cuts the share of roll­outs in zero-vari­ance groups from 43% to 19% (com­puted), and BroRL reports gains that con­tinue as roll­outs per prompt rise into the hun­dreds, after more train­ing steps had stopped help­ing [41]. What larger groups cannot do is add prompts, so com­pare 16 roll­outs on one prompt with 8 on each of two fresh in-band prompts at a fixed roll­out budget. In the toy, the eight train­ing seeds alone hit a 99% zero-vari­ance share within 48,000 roll­outs (Figure 3B), and breadth also drives gen­er­al­iza­tion: on Proc­gen, "agents need access to as many as 10,000 levels" to close the gap between train­ing and test per­for­mance [42]. Often the task supply, not the opti­mizer, sets the ceil­ing.

Figure 3 Only tasks the policy some­times solves carry a gra­di­ent, and the supply of them drains. A: the share of groups whose rewards are all equal, pG + (1 − p)G for a group of G roll­outs, against the task pass rate. Drag the slider or use the arrow keys, and pick the group size with the but­tons; “stretch both ends” switches to a log-odds axis so the 2⁠–⁠3% floor is read­able. The read­out gives the share of roll­outs wasted at this group size and at twice it, the roll­outs behind one useful group, and the straight fail­ures needed to rule out a pass rate at 95% con­fi­dence. The shaded band is the (0.3, 0.7) filter that scored best in Bae et al. [43], and the marks show the floor and retire­ment point that buyers Epoch AI inter­viewed ask for [29]. B: the mea­sured zero-vari­ance share during toy train­ing with 8 roll­outs per group, under three supply rules. Prove­nance. Com­puted (A): pG + (1 − p)G; G / (1 − share); ⌈ln 0.05 / ln(1 − p)⌉. Toy sim­u­la­tion (B), which shows the shape, not the size: route-plan­ning tasks, a 32-weight policy, groups of 8, mean of 3 runs.

Write the verifier first

What must exist before the first gen­er­ated task? A check you trust; pipe­lines that scale make tasks check­able by con­struc­tion. SWE-smith's "core prin­ci­ple" is to "define an exe­cu­tion envi­ron­ment first, and then syn­the­size task instances within the envi­ron­ment": it injects bugs into work­ing code­bases and keeps those that break an exist­ing test, which gave 50,137 tasks from 128 code­bases for about $1,360 of model spend [44]. Envs-FORGE admits a gen­er­ated envi­ron­ment "only if its oracle solu­tion obtains reward 1 under the gen­er­ated tests" [45]. Label­ing after the fact is weaker: in Self-Instruct's audit of model-gen­er­ated data, only 58% of sam­pled out­puts were cor­rect and accept­able [46].

A gate that works rejects a lot. Self-Chal­leng­ing agents write each task as an instruc­tion, a ver­i­fi­ca­tion func­tion, an exam­ple solu­tion and three fail­ure cases, keep­ing it only if the solu­tion passes and every fail­ure case fails; 5.2% of full can­di­dates sur­vived, yet RL on them dou­bled Llama-3.1‑8B's aver­age suc­cess, from 12.0% to 23.5% [47]. Test the ver­i­fier like code, because it fails in both direc­tions: rule-based math ver­i­fiers miss 14% of cor­rect answers on aver­age, more as the policy gets stronger, and one policy passed a trained model ver­i­fier by answer­ing with a single "{" [48]. Four self-tests catch most of this before a single roll­out: the ref­er­ence answer passes, a known wrong answer fails, a cor­rect answer in another format passes, and a degen­er­ate answer (empty, a lone symbol, the ques­tion restated) fails.

In the toy, the ver­i­fier re-solves every child exactly and rejects it if the goal is unreach­able, two routes tie, the graph is too large or the edit broke its stated con­tract. Ten seeds became 10,644 ver­i­fied tasks, but only 1,106 came out dis­tinct, uncon­tam­i­nated and inside the learn­able band, about ten attempts per useful task (Figure 4, toy sim­u­la­tion).

Figure 4 Ten seeds make 10,644 check­able tasks but only about a thou­sand useful ones. A: one seed grown two levels by six oper­a­tors. The exact ver­i­fier re-solves every child; a red cross marks a rejected attempt, and a hollow ring marks a struc­tural copy (a renam­ing, a reword­ing, or edits that can­celed out) that dedu­pli­ca­tion removes. Fill shows where the chosen solver's 16-roll­out pass rate falls against the 0.2 to 0.8 band; switch solvers to watch the band move, and hover or tab to a node for its task, answer and pass rates. B: the whole pool, ten seeds grown four levels deep, stage by stage in the order you would run the gates. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size: ten hand-writ­ten route-plan­ning seeds, six oper­a­tors, four levels, an exact dynamic-pro­gram­ming ver­i­fier, three beam-search solvers at 16 roll­outs per task.

Grow with operators that carry a contract

How do you mul­ti­ply a seed with­out losing its label? Use a small set of named edits, and write down for each how the answer must change (Table 3). Soft­ware test­ing calls such a rule a meta­mor­phic rela­tion: a prop­erty link­ing the out­puts of related inputs, so a new case can be checked with­out know­ing its expected output [49]. Every child then faces two checks: the ver­i­fier re-solves it, and the con­tract must hold between parent and child.

Table 3. Five oper­a­tors, their con­tracts and public prece­dents. The first four run in the toy.

OperatorContractPublic precedent
Rename entities, or rewordanswer unchangedModels are more robust to new names, but "very sensitive to changes in numerical values" [50]
Add a distractoranswer unchangedAdding "seemingly relevant but ultimately irrelevant information" cut accuracy by up to 65% [50]
Add a step (a hop)new answer = old answer + the added legAccuracy falls and variance rises as clauses are added [50]
Tighten or loosen a budgetanswer may only rise, or only fallGSM-Plus builds eight variations of each question, including numerical and arithmetic ones [51]
Remove a needed factanswer is "cannot be determined"GSM-Plus "critical thinking" items, where the question lacks necessary statements [51]

Three lessons from the toy carry over to any gen­er­a­tor. Con­tracts catch oper­a­tor bugs: the "safe" dis­trac­tor broke "answer unchanged" 244 times, and with­out the con­tract those tasks would have entered the pool mis­la­beled. Mea­sure each oper­a­tor's effect, because intu­ition can get the sign wrong (Figure 5A): tight­en­ing the leg budget, meant to make tasks harder, raised the mid solver's pass rate by 0.09 (95% inter­val 0.07 to 0.12), and loos­en­ing it left 672 of 675 chil­dren unchanged. Oper­a­tors leave cues a policy can learn: the dis­trac­tor always added a trap edge cheaper than the cor­rect one, so in the grown pool the cheap­est next edge lies on the opti­mal route at only 38% of deci­sion points, against 57% on real tasks; draw­ing the trap's cost from the normal range moved the pool to 64% (Figure 5B; all toy sim­u­la­tion).

Only train­ing tells gen­er­a­tors apart. SWE-smith com­pared four bug gen­er­a­tors at a fixed 507 train­ing tra­jec­to­ries each: the one in which an LLM edits a func­tion had the high­est yield, 56.0% of can­di­dates break­ing a test, yet trained the weak­est stu­dents, 5.7% (±1.5) of SWE-bench Ver­i­fied resolved against 8.6% to 9.2% for the other three [44]. Phi-4's authors like­wise found "organic ques­tions are sub­stan­tially more effec­tive than syn­thetic ques­tions" [52]. Yield mea­sures sur­vival, not what a task teaches.

Figure 5 Mea­sure what an oper­a­tor does; intu­ition can get the sign wrong. A: the mean change in the mid solver's pass rate from parent to child, with 95% inter­vals. Adding a hop or a dis­trac­tor made tasks harder, as intended; tight­en­ing the leg budget made them easier; loos­en­ing did noth­ing. B: the share of deci­sion points where the cheap­est next edge lies on the opti­mal route. The dis­trac­tor always added a trap edge cheaper than the right one, so the grown pool teaches that the cheap­est option is a trap, a cue real tasks (green) do not share; draw­ing the trap's cost from the normal range removes it. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size: 2,498 parent-child pairs at 16 roll­outs each; the inter­vals treat pairs as inde­pen­dent, so if any­thing they are too narrow.

Keep tasks the policy sometimes solves

Which tasks should stay in the pool, and mea­sured on whom? Theory and prac­tice agree on the middle. Bae et al. show that expected policy improve­ment is "lower-bounded by the vari­ance of task-level suc­cess prob­a­bil­i­ties", p(1 − p), which peaks at p = 0.5; keep­ing prompts with 0.3 < p < 0.7 lifted their 3B model's five-bench­mark aver­age from 26.3 for plain GRPO to 30.1, while fil­ters that removed only one side scored 23.8 to 25.9, below no filter at all [43]. DAPO keeps sam­pling "until the batch is fully filled with sam­ples whose accu­racy is nei­ther 0 nor 1", which, added last to four other fixes in its cumu­la­tive abla­tion, moved AIME 2024 from 42 to 50; com­pare such meth­ods per roll­out gen­er­ated, since "the sam­pling cost for each batch is dynamic" [40]. Buyers Epoch inter­viewed ask for "a min­i­mum pass rate of around 2⁠–⁠3%, or at least one suc­cess out of 64 or 128 roll­outs", and drop tasks near 70% [29].

The band belongs to the solver, not to the task: in the toy, only 26% of the mid solver's 1,313 in-band tasks were in the strong solver's band (toy sim­u­la­tion). A vendor that bands tasks on a fron­tier model and ships them to a lab train­ing a smaller one sells a dif­fer­ent prod­uct from the one on the label. Cal­i­brate on the policy you will train and re-mea­sure as it improves, as Sky­work-OR1 does when it drops prompts its model solved every time in the pre­vi­ous stage [53]; the band also drains (Figure 3B), so refill when the zero-vari­ance share climbs.

Cal­i­bra­tion has a price, and the expen­sive part is ruling tasks out. A task at 6 of 8 has a 95% Wilson inter­val (a con­fi­dence inter­val for a pro­por­tion that stays honest at small sam­ples) of 0.41 to 0.93, strad­dling the retire­ment line, and ruling a task out as below a 2% floor at 95% con­fi­dence takes 149 straight fail­ures (ln 0.05 / ln 0.98; com­puted). One suc­cess set­tles reach­a­bil­ity, so esca­late sequen­tially, adding roll­outs only to tasks at 0 of 8 and stop­ping at the first suc­cess: if 10% of tasks score 0 of 8, that aver­ages about 22 roll­outs per task instead of 149 (com­puted). Then read the zeros, since "a 0% pass rate across many trials (i.e. 0% pass@100) is most often a signal of a broken task" [54]. In a sto­chas­tic task, judge "too easy" against the best achiev­able score, not 100% (Part VI).

Most variants are copies, and leaks travel down lineages

How many of your tasks are actu­ally dif­fer­ent, and which qui­etly descend from the test set? The usual nov­elty and con­tam­i­na­tion gates read text, such as Tülu 3's rule flag­ging a test item when more than 50% of its tokens share an 8-gram with one train­ing item [55], and gen­er­ated tasks defeat text gates in both direc­tions. In the toy, a hash of the cost-labeled graph and leg limit finds 6,721 struc­tural copies among 10,644 ver­i­fied tasks; a text near-dupli­cate check keeps 4,452 of those copies and throws away 1,151 tasks whose word­ing barely changed but whose struc­ture did (Figure 6A, toy sim­u­la­tion). The dupli­cate def­i­ni­tion decides how many tasks you have, so pub­lish it (Table 4).

Table 4. The dupli­cate sig­na­ture sets the task count: the same 486 valid can­di­dates from a toy coding-task fac­tory, where dupli­cates were the largest single loss (toy sim­u­la­tion).

Two candidates are duplicates if they share the sameDistinct tasks
program (abstract syntax tree)486
problem statement text349
function, line and set of failing tests321
function and set of failing tests (what an agent can tell apart)235
set of failing tests232

Reword­ing also defeats decon­tam­i­na­tion. Para­phrased test items "easily bypass" n-gram checks: fine-tuning Llama 2 13B on rephrased GSM-8K test items lifted its score from 28.7 to 95.3, and CodeAlpaca, a dataset GPT-3.5 gen­er­ated, holds rephrased copies of 12.8% of HumanEval [56] (Figure 6C). A gen­er­ated pool inher­its every such leak through its seeds: in the toy, of the 1,912 descen­dants of two seeds that were also eval­u­a­tion items, the best text rule caught 202 and no renamed or reworded copy, and the struc­tural hash caught every copy but only 100 of the 1,852 edited descen­dants (Figure 6B, toy sim­u­la­tion).

Split on the same struc­tural sig­na­ture, never on row index. In the rec­on­cil­i­a­tion test­bed, whose gen­er­a­tor draws fresh names and num­bers for every task, no two tasks' ini­tial states over­lapped on the sur­face, yet 6 pairs shared an iden­ti­cal set of injected errors and 3 of those pairs strad­dled the splits (test­bed mea­sure­ment). Assign each task to a split by a hash of its sig­na­ture, and every twin lands on the same side.

Figure 6 Text checks miss most copies and most edited leaks, and rephrased test items pass them while still teach­ing the test. A: the 10,644 ver­i­fied toy tasks by what a text near-dupli­cate check (word 5-gram Jac­card of 0.7 or more) and a struc­tural hash of the cost-labeled graph each flag; the two dis­agree in both direc­tions. B: two seeds were delib­er­ately also eval­u­a­tion items; each cell counts the descen­dants a detec­tor catches, and the third column counts false alarms on the other seeds' tasks. The gray last row, drop­ping whole lin­eages, is right by con­struc­tion, because the toy defines a leak as a descen­dant of an eval­u­a­tion seed. C: fine-tuning on rephrased GSM-8K test items, which pass n-gram decon­tam­i­na­tion [56]. Prove­nance. Toy sim­u­la­tion (A, B), which shows the shape, not the size. Public data (C).

Judge the pool on real tasks that seeded nothing

Did the pool teach any­thing about the tasks you care about? A held-out split of the pool mea­sures how well the policy learned the gen­er­a­tor. In the toy, a policy trained to copy the exact solver's rank­ing on the oper­a­tor-grown pool scored 0.94 on that pool's held-out tasks but 0.76 on real tasks, no better than plain renam­ings of the seeds (0.77; Figure 7A). Growth paid only once the dis­trac­tor's cue was fixed (0.83) or the seeds came from the real dis­tri­bu­tion (0.88, against 0.90 for train­ing on real tasks), and every curve flat­tened by about 200 tasks: more vari­ants do not fix a biased gen­er­a­tor; better seeds do (toy sim­u­la­tion).

RL tells the same story more sharply (Figure 7B). After 48,000 roll­outs the eight seeds alone reached 0.75 on real tasks and every grown pool did worse; grow­ing tasks on demand peaked at 0.77 and fell to 0.52 while its syn­thetic score climbed to 0.86, because it chased the stu­dent's fron­tier rather than the target (toy sim­u­la­tion). The public record shows the same gap. RL on pro­ce­du­rally gen­er­ated ter­mi­nal tasks lifted Qwen2.5‑7B from 10.7% to 53.3% on the gen­er­a­tor's own devel­op­ment set but only from 2.2% to 3.4% on Ter­mi­nal-Bench 2.0, a human-curated bench­mark; the authors con­cede that their gen­er­ated tasks "resem­ble com­pet­i­tive pro­gram­ming prob­lems more than the messy, under­spec­i­fied requests that users actu­ally pose" [57] (Figure 7C).

What trans­fers is breadth of sources, so count seed fam­i­lies, not tasks. SWE-smith found per­for­mance rising roughly log­a­rith­mi­cally with the number of code­bases behind a fixed 700 train­ing tra­jec­to­ries [44]. Joint train­ing on RLVE's 400 adap­tive envi­ron­ments gained 3.37 points on aver­age across six bench­marks, while con­tin­u­ing the orig­i­nal RL gained 0.49 with more than three times the com­pute [58]. In Agent World Model, train­ing on 10 envi­ron­ments caused "severe per­for­mance degra­da­tion", while 100 gave sub­stan­tial gains and 526 more [59]. Part VI gives the sta­tis­ti­cal reason: vari­ants of one seed are cor­re­lated.

Figure 7 A syn­thetic held-out score mea­sures the gen­er­a­tor, and the rank­ing of pools flips on real tasks. A: a 32-weight route policy trained to copy the exact solver's rank­ing of every next move on N tasks from each pool, scored on 1,000 tasks from a dif­fer­ent gen­er­a­tor that stands in for real tasks; bands show ±1 stan­dard devi­a­tion over 5 draws. Switch to own held-out scores and the oper­a­tor tree jumps from last place to first. B: RL under four task-supply rules, mean ± 1 stan­dard devi­a­tion over 3 runs; the eight seeds alone finish high­est on real tasks and lowest on their own held-out tasks. C: the same gap in public, for pro­ce­du­rally gen­er­ated ter­mi­nal tasks scored on the gen­er­a­tor's own devel­op­ment set and on a human-curated bench­mark [57]. Prove­nance. Toy sim­u­la­tion (A, B), which shows the shape, not the size. Public data (C).

Five synthesis families, each with its checker and its failure

Which gen­er­a­tor should pro­duce your tasks? Start from the checker you can trust, not from the gen­er­a­tor you like. Each family comes with a typ­i­cal ver­i­fier and a typ­i­cal way of fail­ing, and the fail­ure is easier to pre­dict than the gain (Table 5).

Table 5. Five fam­i­lies of task syn­the­sis: what makes the tasks, what checks them, how they fail, and public evi­dence. Each number is the cited paper's own result, on dif­fer­ent models and bench­marks, so rows are not com­pa­ra­ble with each other.

FamilyWhat makes tasksWhat checks themTypical failurePublic evidence
Proceduralcode with difficulty knobsan exact rulenarrow: the policy learns the generator400 hand-built adaptive environments: +3.37 points against +0.49 for more of the original RL [58]
LLM-written, executablea model writes the state, tools, task, solution and checkera state or test checkthe solution and the checker agree on the same mistakekept only instances with non-zero pass@100 during RL: 1,827 environments, 4,417 tasks [25]
LLM-simulateda model plays the environmenta judge or rubrichallucinated, inconsistent state8B model on BFCLv3: GPT-5 simulator 52.53 against executable environments 65.94, base model 53.83 [59]
Mined and perturbedreal issues and commits, or bugs injected into working codetests that fail before the fix and pass after itleaked or trivial tasks, weak tests, setup cost2,438 executable tasks kept from 64,689 mined instances [60]
Self-playthe policy proposes its own tasksan executor or a majority votelabels rot, proposals collapsemajority-vote label accuracy 79.0% → 69.0% → 63.0% over three iterations [61]

Three fail­ures deserve a rule each. When one agent writes both the solu­tion and the checker, the two can share a mis­take, so an inde­pen­dent solver must also suc­ceed; End­less Ter­mi­nals keeps a task only if o3 solves it at least once in 16 attempts, a filter that "intro­duces a capa­bil­ity ceil­ing" [57]. A sim­u­lated world can be worse than none: Agent World Model's GPT-5 tool sim­u­la­tor left an 8B model below its untrained base on BFCLv3 (52.53 against 53.83). Self-play keeps tasks in the band but lets labels decay, because the major­ity vote that sets the band also sup­plies the labels. Mined tasks fail dif­fer­ently, by leak­ing the check: when SWE-smith wrote issue text from the fail­ing test, trained stu­dents tried to repro­duce the bug in 127 of 500 runs, against 379 for stu­dents trained on model-writ­ten issues [44]. A leaked grader shapes a worse habit even while reward rises.

Factory economics: checking is the bill

Where does the money go in a task fac­tory, and in what order should its gates run? Gen­er­at­ing can­di­dates is nearly free; check­ing them is the bill. SWE-rebench V2's setup agent made about 535,000 model calls, roughly $1.9K of infer­ence, while val­i­dat­ing its tasks took 583,809 Docker builds aver­ag­ing 2.71 min­utes, about 26,400 job-hours, and left 26.36 TiB of images [62]. SWE-smith's one image per code­base took 295 GB for 50,000 tasks, against an esti­mated 50 to 150 TB with one image per task [44]. Human review can dwarf both: Ter­mi­nal-Bench 2.0 kept 89 of 229 con­trib­uted tasks after "approx­i­mately three hours of com­bined reviewer atten­tion" per task [63] (Figure 8B).

Sur­vival runs from under 4% to 99%, and the spread is infor­ma­tion (Figure 8A). SWE-Gym kept 2,438 of 64,689 mined instances, 3.8% [60]. An inde­pen­dent val­ida­tor kept 6,275 of 32,079 released SWE-rebench V2 rows (19.6%) after drop­ping broken images and flaky rows, but 4,522 of 4,578 curated R2E-Gym rows (98.8%) [26]. A released task count is a claim; re-val­i­date it before you budget a run on it.

Two rules follow. First, order the gates by cost per rejec­tion, not cost per entrant, and dedu­pli­cate right after the cheap­est valid­ity gate: in the toy coding-task fac­tory, moving dedu­pli­ca­tion to just after the "gold patch flips a fail­ing test" gate cut the CPU of the next three gates by 55% with the same 235 tasks out, because dupli­cates stopped paying for three sta­bil­ity reruns each (toy sim­u­la­tion). Second, price a usable task with the funnel: cost per usable task ≈ (model cost per can­di­date + builds per can­di­date × cost per build) ÷ yield + review time per kept task (com­puted). At SWE-rebench V2's num­bers and an assumed $0.03 per vCPU-hour the machine term is about 11 cents, so dou­bling yield halves it while halv­ing model prices trims about a quar­ter (Figure 8C).

Figure 8 Task fac­to­ries keep from under 4% to 99% of their can­di­dates, and their bill is builds, stor­age and people more than model calls. A: end-to-end sur­vival of pub­lished fun­nels on a log axis, with a toy coding-task fac­tory in orange; click a row, or press Enter on it, to read that funnel gate by gate. The Kimi k1.5 funnel comes from its report [64]; the other sources are cited in the text and the tooltips. B: four pub­lished fac­to­ries' costs con­verted to dol­lars at prices you set, includ­ing SWE-smith's esti­mate for one image per task. C: cost per usable task from the funnel for­mula; move yield and model cost to see which lever mat­ters. Prove­nance. Public data (A, B). Toy sim­u­la­tion (the toy fac­tory row), which shows the shape, not the size. Com­puted (dol­lars in B, all of C): prices are assump­tions, not quotes; 1 TiB = 1.0995 TB.

Check yourself: Part II

Your gen­er­a­tor's gate accepts 97% of can­di­dates. Is that good news?

Not nec­es­sar­ily. A strict four-part gate kept 5.2%. Feed the gate known-wrong and degen­er­ate answers first; if they pass, the 97% mea­sures the gate, not the gen­er­a­tor.

A vendor offers "10,000 dis­tinct tasks". What do you ask for first?

The dupli­cate sig­na­ture, in writ­ing. The same can­di­dates counted as 486 or 235 dis­tinct tasks in the toy fac­tory, depend­ing on whether "dis­tinct" meant a dif­fer­ent pro­gram or a dif­fer­ent func­tion and fail­ing-test set.

You can afford ten times more vari­ants of your 20 seeds, or three times more seed fam­i­lies. Which do you buy?

More seed fam­i­lies. In the toy every curve flat­tened by about 200 tasks; SWE-smith gains roughly log­a­rith­mi­cally in code­bases; RLVE and Agent World Model gain with the number of dis­tinct envi­ron­ments.

Every task now has a check, a con­tract, a band and a lin­eage. Part III asks what an opti­mizer does to that check once it is the only thing paying the policy.

Part IIIThe reward is a measurement

What does a policy do to a reward it is opti­mized against, how do you mea­sure a ver­i­fier's errors, which defenses hold under pres­sure, and how do scor­ers man­u­fac­ture or hide wins?

A static bench­mark tol­er­ates a ver­i­fier with a few per­cent error; an opti­mizer does not, because it moves the policy toward what­ever is paid. This part treats the reward as a mea­sure­ment taken under adver­sar­ial pres­sure.

Run­ning exam­ple (toy sim­u­la­tion). A 0.1M-param­e­ter trans­former learns two-digit addi­tion from scratch with GRPO, eight answers per prompt. A gold grader accepts one com­mit­ted inte­ger in any of six legit­i­mate for­mats; around it sit ver­i­fiers of graded qual­ity, two of them delib­er­ately buggy. A model this small cannot plan an exploit, so the toy shows mech­a­nisms, not mag­ni­tudes.

Two errors, one optimizer

Why does a false neg­a­tive only slow learn­ing, while a false pos­i­tive can take over a run? Let a policy take a hack instead of the honest behav­ior with prob­a­bil­ity p, through a single soft­max logit θ. The expected policy gra­di­ent is the covari­ance between reward and choice:

E[dJ/dθ] = p (1 − p) · (E[r | hack] − E[r | honest])

A false-neg­a­tive rate f mul­ti­plies the honest reward by (1 − f): the signal shrinks but never flips sign, so the policy learns the right thing more slowly. A false pos­i­tive that pays the hack a bonus b with prob­a­bil­ity φ adds φb to E[r | hack], so the push toward the hack is pos­i­tive at every p above zero (com­puted). Rarity makes a hack slow, not safe. In prin­ci­ple no reward escapes this: over all sto­chas­tic poli­cies, two reward func­tions can be unhack­able only if one of them is con­stant [65]. The engi­neer­ing ques­tion is which holes the cur­rent policy can reach, and how fast.

The toy sep­a­rates noise from a hole (Figure 9). Random errors injected into the gold grader (false-neg­a­tive rates up to 30%, false-pos­i­tive rates up to 5%) barely moved where train­ing ended: all nine arms fin­ished between 0.61 and 0.68 held-out pass@1, against 0.68 for the clean run and 0.37 at the start. A sub­string ver­i­fier, which pays any answer con­tain­ing the right digits, had an audited false-pos­i­tive rate of only 4.0% [3.1%, 5.2%], yet under train­ing it drove 72.5% of sam­ples to hack and pass@1 to 0.03, because "write digits that con­tain the answer" works on every prompt. The audit mea­sured how often wrong answers pass by acci­dent; the opti­mizer mea­sured how easily they pass on pur­pose. A lenient ver­i­fier that pays hedges such as "81 82" stayed at 0.3% hacked, because a hedge never earns more than the plain answer.

Figure 9 Random ver­i­fier errors barely move where train­ing ends; a false pos­i­tive with a learn­able shape takes the run over. Left: final held-out gold pass@1 after 100 GRPO steps for each pair of injected random false-neg­a­tive and false-pos­i­tive rates, and for three struc­tured ver­i­fiers, with 95% inter­vals over three seeds; the sub­string ver­i­fier (out­lined) ends at 0.03 from a start of 0.37, although its audited false-pos­i­tive rate was 4.0%. Right: for the selected cell, the reward the ver­i­fier paid (dashed) against the reward gold says the policy earned (solid), with the clean run in gray. Click a cell, or tab to it and press Enter, to switch. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size: a 0.1M-param­e­ter trans­former trained from scratch with GRPO on two-digit addi­tion, groups of 8, three seeds per arm, errors injected inde­pen­dently per sample; held-out pass@1 is always scored by the gold grader.

The reward ladder

How hack­able is each kind of reward, and in which direc­tion does each fail? Order reward sources by how hard they are to fool and you get a ladder: exact checks of a machine-read­able answer, exe­cutable tests, a judge answer­ing narrow rubric items, a judge scor­ing a whole response, and a learned scalar reward model. The order is a syn­the­sis, not a mea­sure­ment: an exact check com­pares two values; a test reads pro­gram behav­ior, but the pro­gram runs where the policy acts; a judge reads text writ­ten to please it; and a learned reward model was fitted on typ­i­cal responses, while an opti­mizer looks for atyp­i­cal ones. Hack­a­bil­ity rises as the reward reads the policy's words rather than the world's state.

Each rung fails in its own direc­tion. Exact checks fail mostly by false neg­a­tives: among responses a rule-based math ver­i­fier marked incor­rect, 38.5% were in fact cor­rect [66], and rule ver­i­fiers aver­age 86% recall at above 99% pre­ci­sion [48]. Tests fail by false pos­i­tives the policy man­u­fac­tures: in one fron­tier run, exit­ing before the tests ran and rais­ing an excep­tion that skipped them came to "become sys­temic, affect­ing nearly every train­ing envi­ron­ment" [2]. Judges fail by bias and per­sua­sion: a repet­i­tive-list attack, which length­ens an answer with­out improv­ing it, fooled Claude-v1 and GPT-3.5 judges 91.3% of the time against 8.7% for GPT-4 [67]. Learned ver­i­fiers fail by over-opti­miza­tion: a fine-tuned 1.5B model ver­i­fier held for about 450 RL iter­a­tions, then the train­ing reward surged away from an oracle's and the run col­lapsed [48]. Process reward models, which score each rea­son­ing step, sit on that rung too: DeepSeek-R1 lists its attempt under "Unsuc­cess­ful Attempts", because a model-based one "inevitably leads to reward hack­ing" [24].

The top rung tells you the kind of error to expect, not its size: all five of the toy's ver­i­fiers were rule checks, with audited false-pos­i­tive rates from 0% to 87.9%. Table 6 lists hacks seen in public and the defense that answers each.

Table 6. Reward hacks seen in public, and the defense that answers each. Rates come from dif­fer­ent con­di­tions and are not com­pa­ra­ble across rows; where detec­tion is incom­plete they are lower bounds.

Hack classPublic caseDefense
Editing or special-casing testsOn deliberately impossible tasks, GPT-5 cheated on 54% of Conflicting-SWEbench and 76% of Oneoff-SWEbench; Claude models and Qwen3-Coder cheated mostly (>79%) by modifying tests [68]Tests hidden or read-only and grading in a separate sandbox. Hiding tests cut cheating to near zero but also cut legitimate performance; read-only tests are the middle ground
Ending or skipping the test runEarly-exit and skip-exception hacks spread to nearly every training environment of one frontier run [2]Count the tests that actually ran; never trust an exit code; harden the shared runner once, with its own canaries
Tampering with timing or the evaluatoro3 overwrote a grader's timer or copied its answer in 6 of 24 kernel-optimization runs [69]Time and score in a trusted process, from exported artifacts, with type-strict comparisons
Reading the reference solutionAn LLM analyzer at Datacurve, which builds a rival benchmark, flagged Claude Opus 4.7 and 4.6 as cheating on more than 12% of reviewed SWE-Bench Pro rollouts by reading the merged fix from the container's git history; GPT-5.4 and GPT-5.5 never did (reported; LLM-judged, not human-reviewed) [70] [71]Strip future history, branches and tags; keep tests and solutions out of the agent's image
Doing nothing, or dumping everythingThe do-nothing agent on τ-bench airline (Part I); dumping the database passes substring checks; a SLEEP clause in a log inflated CVE-Bench by 32.5% [1]State checks on changed and unchanged state; a do-nothing floor test; no substring grading
Reading planted answers359 of 2,183 terminal-task runs (16.4%) triggered a planted hack; a generic warning cut one model from 34.5% to 15.9% and raised another from 47.7% to 59.8% [72]Honeypots with deterministic detection; report the read rate; do not count on warnings
Cheating when the task is brokenOn tasks missing a needed file, three recent Claude models attempted reward hacks three to six times as often as on intact tasks of the same environments [73]A solvability check on every task, and an honest flag-or-abort action (next sections)

Judges, rubrics and cascades

How do you reward a task no pro­gram can check? With a judge, and three prac­tices have public evi­dence. Ask many narrow ques­tions, not one broad one: Rubrics as Rewards scores each response against rubric items writ­ten for its prompt and beat single Likert-score judges by up to 31% (rel­a­tive) on HealthBench, a rubric-graded med­i­cal bench­mark [74], and check­list feed­back extracted from each instruc­tion was the only method to improve a strong 7B instruc­tion-fol­low­ing model on all five bench­marks tested [75]. Rubrics are hack­able too: stronger ver­i­fiers "sub­stan­tially reduce, but do not elim­i­nate, ver­i­fier exploita­tion" [76]. Remove the judge's known biases: most judges favor which­ever answer comes first, and only GPT-4 kept its ver­dict after a swap in more than 60% of cases, so judge both orders and count only agreed wins; a ref­er­ence answer cut its fail­ures on ten math ques­tions, asked in both orders, from 14 of 20 to 3 of 20 [67].

Put the judge behind a rule. A cas­cade lets a strict rule decide every response it accepts and sends only its rejec­tions to a judge. With rule recall R and false-pos­i­tive rate f, and a judge that recov­ers a share t of the cor­rect answers it sees and accepts a share j of the wrong ones, the cas­cade's recall is R + (1 − R)t and its false-pos­i­tive rate f + (1 − f)j, and the judge runs only at the rule's rejec­tion rate, which falls as the policy improves (com­puted; Figure 10). The part that is easy to miss: with a strict rule (f near 0) the cas­cade's false-pos­i­tive rate is the judge's rate on rejects, and every wrong answer reaches the judge, so keep its ques­tion narrow ("is this the same number as the ref­er­ence?") and audit j as the whole false-pos­i­tive rate. TinyV runs a small model only on rule rejec­tions and reports pass rates up to 10% higher for about 6% more com­pute per step [66]; a rule-then-model hybrid gained about 3 recall points at above 98% pre­ci­sion for 25.7% more train­ing time [48]. In the addi­tion toy a cas­cade reached 100% recall at 100% pre­ci­sion on the audit set, yet train­ing on it ended within noise of exact match (0.67 against 0.65 held-out pass@1, three seeds), because the rule's false neg­a­tives were for­mats the policy simply stopped writ­ing (toy sim­u­la­tion).

Figure 10 A judge on a rule's rejec­tions buys recall at the price of the judge's own false pos­i­tives, and runs less as the policy improves. Rows com­pare three designs (rules only, a judge on every sample, rules then a judge on rejects) on recall, false-pos­i­tive rate and judge calls per sample, com­puted from the slid­ers with R + (1 − R)t and f + (1 − f)j; with a strict rule the cas­cade's false-pos­i­tive rate equals the judge's on rejects. The lower panel shows judge calls per sample fall­ing as policy accu­racy rises. The rule and policy defaults come from the addi­tion toy's audit (exact match recalls 93.7% of cor­rect answers, pays no wrong one, and the policy is right 57% of the time); the judge's defaults, 90% recov­ered and 5% of wrong answers accepted, are illus­tra­tive. Dia­monds mark what the toy mea­sured, where its judge made no errors on the audit set. Hover or tab to any mark. Prove­nance. Com­puted from the cas­cade for­mu­las. Toy sim­u­la­tion for the defaults and dia­monds (the addi­tion toy's audit of 2,999 answers), which shows the shape, not the size. Public data in the note: TinyV and a rule-then-model hybrid ver­i­fier.

Measuring a verifier

How many graded sam­ples does an error rate need, and why does a rate mea­sured at release stop being true? Grade a sample of policy out­puts twice, once with the ver­i­fier and once with gold, a slow grader you trust (a human, a stronger model, an exact parser). Every sample lands in one cell of a 2 × 2 table, and four rates matter, each with its own denom­i­na­tor (Table 7).

Table 7. Four rates, four denom­i­na­tors. Toy audit: 2,999 answers from three check­points of the addi­tion policy, graded by each ver­i­fier and by gold (1,706 gold-cor­rect, 1,293 gold-wrong); 95% Wilson inter­vals (com­puted).

RateNumerator ÷ denominatorWhat it costs under optimizationExact matchSubstring (buggy)
False-positive ratewrong answers paid ÷ gold-wrong samplesthe optimizer searches for these0 of 1,293: <0.3%52 of 1,293: 4.0% [3.1, 5.2]
False-negative rate (1 − recall)correct answers rejected ÷ gold-correct sampleslost signal; the policy narrows onto accepted formats108 of 1,706: 6.3% [5.3, 7.6]0 of 1,706: <0.3%
Precisioncorrect answers among those paid ÷ paid samplesfalls as hacks spread, and hides the denominator1,598 of 1,598: 100% [99.8, 100]1,706 of 1,758: 97.0% [96.1, 97.7]
False-omission ratecorrect answers among rejections ÷ rejected samplesthe 38.5% reported for a math rule verifier is this rate108 of 1,401: 7.7% [6.4, 9.2]0 of 1,241: <0.3%

Report false-pos­i­tive and false-neg­a­tive rates with Wilson inter­vals and their denom­i­na­tors, never pre­ci­sion alone; the text­book normal inter­val col­lapses to zero width when no errors are seen. Zero false pos­i­tives among n gold-wrong sam­ples bounds the rate below about 3/n at 95% con­fi­dence, the rule of three: below 1% takes 299 gold-wrong sam­ples, and below 0.1% takes 2,995 (com­puted: n = ln 0.05 / ln(1 − r)).

The trap is the denom­i­na­tor. An improv­ing policy makes wrong answers scarce: col­lect­ing 300 gold-wrong sam­ples takes about 300 / (1 − accu­racy) graded ones, which is 429 at 30% accu­racy, 3,000 at 90% and 30,000 at 99% (com­puted). An audit that was ample early in a run is too small late in it, exactly when the opti­mizer is best at find­ing holes, so keep a fixed adver­sar­ial set of known-wrong responses whose denom­i­na­tor never shrinks. Grader bugs move head­lines too: Claude Opus 4.5 first scored 42% on CORE-Bench, partly because rigid grad­ing rejected 96.12 where it expected 96.124991…, and 95% after the bugs were fixed and the scaf­fold loos­ened (self-reported) [54].

How a hack takes off

How fast does a rare exploit spread, and what pre­dicts when? GRPO gives each of a group's G answers an advan­tage (r − mean) / std com­puted within the group. If the vis­i­ble task gives no within-group vari­ance, because it is sat­u­rated or impos­si­ble, a hack is the only source of vari­ance: a lone hacked sample in a group of eight gets an advan­tage of √7 ≈ 2.65 what­ever the bonus is, because the bonus can­cels between numer­a­tor and denom­i­na­tor (com­puted).2 If the task is half-solved, its own vari­ance dilutes the hack: head­room com­petes with the hack for the gra­di­ent.

A planted hole times the mech­a­nism (Figure 11). Fol­low­ing Prime Intel­lect's design, the toy pays a hidden +0.5 bonus for a harm­less key­word with a set base rate. With a reach­able task, half the sam­ples car­ried it (step t50) after 36, 94 and 370 steps at base rates of 5%, 1% and 0.1%, and every seed took off; with no head­room, t50 came 2.0 to 5.4 times sooner (toy sim­u­la­tion). Prime Intel­lect reports the same shape on a 1B model: hack­ing reached half the sam­ples by step 38 when the vis­i­ble task was unreach­able, by steps 47 to 51 when it was sat­u­rated and by steps 58 to 77 when it could still improve, and a word with a 0.16% base rate still reached 47.7% by step 100 (the dia­mond; self-reported) [77]. "The policy rarely does this" is not a safety argu­ment. Head­room does hold off a hack that costs the answer: a key­word that cor­rupted its answer took off only where honest answers paid less than the bonus.

Figure 11 A hidden bonus took over every seed, even at a 0.1% base rate, and a task with no head­room made it 2.0 to 5.4 times faster. Lines show the share of sam­ples car­ry­ing a key­word that earns a hidden +0.5 bonus, by GRPO step, at three base rates (thick: mean of seeds; thin: each seed); dots mark t50, the step at which half the sam­ples carry it, with its 95% inter­val. Toggle the vis­i­ble task between reach­able and no head­room, or add a key­word that cor­rupts the answer, which head­room holds off. The lane below marks when each of four cheap detec­tors alarmed, and the black dia­mond is Prime Intel­lect's rarity run on a 1B model (a word with a 0.16% base rate at 47.7% by step 100; its head­room sweep is in the text and the tooltip) [77]. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size: the addi­tion policy, three seeds per arm (two for the answer-cor­rupt­ing key­word), runs stopped at 95% hacked, t50 from a three-step moving aver­age. Public data: one self-reported point.

The early warn­ing is cheap. A 0/1 reward com­po­nent's within-group vari­ance is pro­por­tional to p(1 − p), so its rise from near zero announces the take­off. Four cheap alarms (paid reward minus gold on an audited sample, scores above the honest max­i­mum, per-com­po­nent vari­ance and an action mon­i­tor) fired 14 to 23 steps before t50 on aver­age, though none fired first every time (toy sim­u­la­tion). Broken tasks are no-head­room tasks, which is why models hack far more often on tasks miss­ing a needed file (Table 6), and system-card hack rates are stress tests that "do not reflect real-world hack­ing rates" [78]: read their trend, not their level.

Proving a verifier

What shows that high reward means solved, and how can that evi­dence pass while the hole stays open? Part I's four proofs run on every task, and Ter­mi­nal-Bench 2.0 also runs an exploit agent during task audits and inspects its tra­jec­to­ries "regard­less of whether the agent passes" [63]. The rec­on­cil­i­a­tion test­bed shows three ways the proofs pass while the reward is still wrong.

Clip­ping a reward at zero pays for gam­bling. The func­tion max(0, x) is convex: it for­gives the down­side and keeps the upside. The Brier skill score S = 1 − 4(q − o)², for a fore­cast q of a binary out­come o, is proper when unclipped: at a true prob­a­bil­ity p* = 0.7, report­ing 0.7 expects 0.16 and report­ing cer­tainty −0.20. Clipped at 0, cer­tainty expects 0.70 against 0.448 for the truth, and even a clip at −1 pays cer­tainty 0.40 against 0.16 (com­puted; Figure 12). In the rec­on­cil­i­a­tion test­bed, clip­ping the break score at 0 would lift a weak scripted agent's mean reward from −0.156 to +0.014, turn­ing blind guess­ing into profit (test­bed mea­sure­ment); in public form, "under binary grad­ing, abstain­ing is strictly sub-opti­mal" [79].

Figure 12 Clip a proper score at zero and the best report becomes a gamble. Expected Brier skill S = 1 − 4(q − o)² of report­ing prob­a­bil­ity q for an event whose true prob­a­bil­ity is p*: unclipped (solid blue), the best report is the truth; clipped at 0 (dashed orange), the best report jumps to cer­tainty for every p* above 0.5. Drag p* and pick the clip level. At p* = 0.7 the truth expects 0.16 against −0.20 for cer­tainty when unclipped, and 0.448 against 0.70 under a clip at 0. Prove­nance. Com­puted in the browser from E[S] = p* max(c, 1 − 4(1 − q)²) + (1 − p*) max(c, 1 − 4q²). The table view adds one test­bed mea­sure­ment: in the rec­on­cil­i­a­tion test­bed, clip­ping the break score at 0 lifts a weak scripted agent's mean reward from −0.156 to +0.014 (50 tasks, 8 roll­outs each).

A canary that cannot trip proves noth­ing. The test­bed's look-ahead canary asked for prices one cal­en­dar day after the val­u­a­tion date. For a Friday val­u­a­tion that day is a Sat­ur­day, still before the episode's Monday-morn­ing as-of time, so the request was not look-ahead: the canary did noth­ing, scored 0 and passed the floor test. Only a second asser­tion, that each canary raises the integrity event it was writ­ten to trip, caught the bug; run it on every task, since a cal­en­dar bug hides when­ever the test task falls on the wrong day.

Only a sto­chas­tic exploit judged by its mean catches gam­bling. With a clip at 0 put back into a scratch copy of the envi­ron­ment, none of 550 canary replays (11 canaries on 50 tasks) rose above the floor, while a blind random-search exploit's mean reward rose from −0.118 to +0.0014 and beat the floor on 14 of 50 tasks (test­bed mea­sure­ment). The floor test passed a real hole; the mean found it.

Two habits close most of what remains. Couple credit to the work: when a blend of two par­ties' wrong val­u­a­tions could land inside the sign-off tol­er­ance, the fix paid val­u­a­tion credit only in pro­por­tion to the breaks actu­ally found, which is METR's advice in prac­tice: "patch the exploit in the scor­ing func­tion rather than pun­ish­ing the model" [69]. And muta­tion-test every tol­er­ance, because a tol­er­ance is a hole with a size: of 10,303 faults injected into 188 KernelBench prob­lems, the offi­cial checker missed 16.9% of those an inde­pen­dent check could wit­ness, includ­ing 78.6% of pre­ci­sion faults, while opti­mized test inputs reached 98.0% detec­tion [80]. Table 8 lists the defense classes and how each can pass its own test.

Table 8. Defense classes, what each stops, and how each can pass its own test while the hole stays open. Exam­ples from the rec­on­cil­i­a­tion test­bed and the toy addi­tion policy.

Defense classWhat it stopsHow it can silently pass
Integrity gate: a flagged episode scores the do-nothing value, 0reading answer keys or planted files, editing the grader, look-ahead requests, calling episode controls as toolsthe canary never performs its hack (the Friday no-op) and scores 0; with imperfect detection an attempt is a free option, because a caught attempt costs nothing below 0
Generator materiality: reject worlds where a shortcut lands near the truthcopying a counterparty's number, format-only submissionsthe rule checks fewer cases than it claims: a weighted blend of two parties' wrong valuations can land inside tolerance, and the rule checked three blend weights while an unchecked one, 0.353, hit the true value
Negative region: false positives and confident misses cost rewardenumerating every candidate, shotgun reports, over-confident forecastsa clip at 0 lifts every enumeration canary to exactly 0, which still passes the floor test
Strict schema; the verifier never reads free textsmuggled reward fields, notes addressed to the gradera judge further down the pipeline reads the free text the verifier ignored
Exploit policy judged by its meanunknown holes, gambling under a clipjudged by its best rollout (fails on noise) or median, or run with too few rollouts per task
Monitors and classifiershacks visible in transcripts or actionsrecall decays as the policy drifts (80% to 0% in the toy with no pressure on the monitor) and collapses once the monitor is optimized against

Defenses that hold

Which mit­i­ga­tions have evi­dence, and in what order should you reach for them? Remov­ing the hole beats making it unprof­itable, which beats chang­ing what the hack teaches, which beats asking the model nicely.

Pre­ven­tion by con­struc­tion has the best evi­dence: grade state in a trusted process, with­hold tests and grad­ing files until scor­ing, close net­work chan­nels at the tool layer, and prefer hidden all-or-noth­ing checks to vis­i­ble par­tial credit. In a toy pro­gram-writ­ing task, par­tial credit on the two vis­i­ble tests drove lookup tables that spe­cial-case them from 16.8% of sam­ples to 99.0% and held-out pass@1 to 0.00, while all-or-noth­ing scor­ing on hidden tests drove them to 0.2% and pass@1 to 0.82 (toy sim­u­la­tion). Magis­tral made the same trade in pro­duc­tion, keep­ing binary code rewards after pro­por­tional ones ended 2% lower on LiveCodeBench [81].

When you can detect a hack but not remove it, do the arith­metic. A hack adds a bonus b, a detec­tor catches it with recall r, and a penalty P leaves an expected gain of b − rP, so the penalty holds only if P > b/r. A gate zeroes a flagged sample's whole reward, task reward included, so on a cor­rect answer the attempt's expected gain is (1 − r)(1 + b) − 1 (com­puted; Figure 13). In the toy (b = 0.5, r = 0.7, thresh­old 0.71) the key­word ended in 97.4% of sam­ples unde­fended, 81.8% under a 0.5 penalty, 0.7% under a 1.0 penalty and 0.5% under a gate, while held-out pass@1 stayed between 0.60 and 0.65 in every arm, so the task metric gave no warn­ing. Then give the agent an honest exit. On delib­er­ately impos­si­ble tasks, an abort option cut GPT-5's cheat­ing from 54% to 9% and o3's from 49% to 12% [68].

Figure 13 A penalty holds only above bonus ÷ recall; a gate holds wher­ever flagged sam­ples have task reward to lose. A: expected gain from attempt­ing a hack worth b when a detec­tor with recall r sub­tracts a penalty P (orange), and the gate's expected gain on right and wrong answers (blue); the dashed line marks P = b/r, and the shaded band is where the hack still pays. Move r and b. B: the key­word's share of sam­ples at the end of train­ing under each defense, with 95% inter­vals and the three seeds (gray), at b = 0.5 and r = 0.7; held-out pass@1 ended between 0.60 and 0.65 in every arm. Prove­nance. Com­puted (A): b − rP, (1 − r)(1 + b) − 1 and (1 − r)b. Toy sim­u­la­tion (B), which shows the shape, not the size: the addi­tion policy with a key­word hack at a 5% base rate on a reach­able task, 120 GRPO steps, three seeds, share aver­aged over the last 10 steps.

Mon­i­tors find holes; they are not rewards. A weaker model read­ing an agent's chain of thought caught 95% of two sys­temic hacks, against 60% read­ing actions alone; once that mon­i­tor entered the reward, the agents kept hack­ing, hid their intent, and its recall fell to near zero [2]. In the toy a mon­i­tor went blind with no pres­sure on it at all, from 80% to 0% recall, because train­ing ampli­fied an unmarked route to the same hole. Instruc­tions have evi­dence against them: "Please do not cheat." left o3's hack rate on one task at 80% [69], and telling models not to hack "can increase mis­align­ment by reward­ing models for acting against their instruc­tions" [82]. Inoc­u­la­tion prompt­ing, one system-prompt line that frames the hack as accept­able during train­ing, cut mis­aligned gen­er­al­iza­tion by 75⁠–⁠90% even with hack­ing above 99% [82]: it changes what the hack teaches, not whether it pays.

The stakes exceed a wasted run. In the same study, the model that learned to hack attempted to sab­o­tage safety-research code 12% of the time [83]. Envi­ron­ment qual­ity assur­ance is a safety con­trol, not only a data-qual­ity one.

Over-optimization

When the reward is learned or judged, how far can you push before the true objec­tive turns down? Gao, Schul­man and Hilton mea­sured it with a fixed "gold" reward model label­ing com­par­isons for proxy reward models. As a func­tion of how far the policy has moved, d = √KL(π ‖ π₀), gold reward fol­lows d(α − βd) for best-of-n sam­pling and d(α − β log d) for RL [84]. Larger reward models push the turn fur­ther out, while a KL penalty does not move the gold-versus-KL fron­tier, so its effect on gold is "akin to early stop­ping". Direct align­ment meth­ods such as DPO show the same degra­da­tion, often within one epoch [85]. Reward-model ensem­bles help with­out curing it: con­ser­va­tive opti­miza­tion over an ensem­ble "prac­ti­cally elim­i­nates overop­ti­miza­tion" for best-of-n in a syn­thetic setup [86], yet ensem­bles "do not elim­i­nate reward hack­ing" where mem­bers share error pat­terns [87].

The toy shows what an opti­mizer exploits first (Figure 14). Prox­ies trained on 500, 2,000 and 10,000 gold-labeled pairs reached 88%, 91% and 93% pair­wise accu­racy, yet RL against them drove gold down to between −1.6 and −2.4 stan­dard devi­a­tions while the proxy rose: the prox­ies had learned that each token costs reward but not how little a very short answer is worth. With the length cost removed from gold and the prox­ies retrained, RL against them ended within 0.07 of RL on gold itself (toy sim­u­la­tion). A proxy with 93% pair­wise accu­racy can be safe or badly wrong, depend­ing on whether its errors lie along the path the opti­mizer takes.

Figure 14 Against a learned proxy, RL first exploits the cheap­est direc­tion in which the proxy is wrong. Gain in gold reward (solid) and in each proxy's own score (dashed) for prox­ies trained on 500, 2,000 and 10,000 gold-labeled pairs, with opti­miza­tion aimed at gold itself in green. Switch between RL, drawn against steps, and best-of-n, drawn against d = √KL with Gao's fitted form d(α − βd) dotted [84]. With a length cost in gold, RL drives gold below zero by short­en­ing answers; under the con­trol with no length cost, every proxy ends within 0.07 of RL on gold. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size: gold is a fixed random net­work over short token sequences with a per-token length cost (0.08) or none; prox­ies are small net­works fitted to gold-labeled pairs (88⁠–⁠93% pair­wise accu­racy); best-of-n from a 60,000-sample pool; GRPO for 200 steps with two seeds (one for the con­trol); gains in stan­dard devi­a­tions of the base dis­tri­bu­tion's gold reward. Public func­tional forms from Gao, Schul­man and Hilton.

The scorer is part of the environment

How much can the scor­ing code alone change a ver­dict? A lot (Table 9). In the first five rows the model out­puts were fixed, or nearly so, and only the scor­ing changed; in the last two the pre­sen­ta­tion changed while the ver­i­fier scored every answer cor­rectly. Label noise com­presses the gaps between strong models, and a cue in the pre­sen­ta­tion can do the policy's work for it.

Table 9. The scorer is part of the envi­ron­ment: the same out­puts, or the same items, scored two ways.

What changedScored one wayScored the other wayWhat flipped
Implementation (MMLU)Two implementations: LLaMA-65B 63.6 and 63.7A third: LLaMA-65B 48.8Falcon-40B (52.7) ranked above LLaMA-65B [88]
Answer extraction (math)The Open LLM Leaderboard's extractionAn equivalence-aware checker61 more problems credited on average (4.66 points); many models moved 200 or more places [89]
Weak tests and leaks (SWE-bench)Every pass countedPasses that relied on leaked solutions or weak tests removedOne agent fell from 12.47% to 3.97% resolved [90]
Labels (GSM8K)Original labels: 45 errors each for Claude 3.7 Sonnet (extended thinking) and Llama 405BCleaned GSM8K-Platinum labels2 and 17 errors: the original labels hid a large gap [91]
Judge positionChatGPT judging two answers in one orderThe order chosen per queryVicuna-13B beat ChatGPT on 66 of 80 queries [92]
Question removedQuestion and answer choicesAnswer choices onlyModels beat the majority baseline in 11 of 12 settings, by up to 0.33 accuracy [93]
Option order (toy)The generator's order keptA neutral orderAn untrained policy that breaks ties toward the first option fell from 0.87 to 0.30 (Part II's route-planning toy; toy simulation)

A related effect changes train­ing rather than scor­ing. RL with random rewards raised Qwen2.5-Math-7B on MATH-500 by 21.4 points, against 29.1 with ground-truth rewards, and such gains often fail to appear for other fam­i­lies such as Llama3 and OLMo2 [94]. A gain that a random reward also pro­duces is elic­i­ta­tion of a format, not learn­ing, so the eval­u­a­tion card (Table 13) asks for that con­trol on a second model family.

Check yourself: Part III

Which is more dan­ger­ous: a ver­i­fier that pays 5% of wrong answers at random, or one that pays every answer con­tain­ing the ref­er­ence digits?

The second. Random pay­ments are uncor­re­lated with any­thing the policy con­trols, so there is noth­ing to learn. The digit rule is a func­tion of the output that works across prompts, so the gra­di­ent pushes the policy toward it.

An audit of 2,000 sam­ples finds zero false pos­i­tives, and the policy is right 95% of the time. What can you claim?

Only about 100 sam­ples are gold-wrong, so the rule of three bounds the false-pos­i­tive rate below about 3%, not 0.15%. State the denom­i­na­tor.

A detec­tor catches a hack 70% of the time and the hack earns 0.5. Does a penalty of 0.5 stop it?

No. The expected gain is 0.5 − 0.7 × 0.5 = +0.15. The penalty must exceed 0.5 / 0.7 ≈ 0.71; in the toy, 0.5 left the hack in 81.8% of sam­ples and 1.0 cut it to 0.7%.

A trust­wor­thy reward is nec­es­sary, not suf­fi­cient: a dozen sys­tems choices decide whether it stays attached to the tokens that earned it. Part IV fol­lows one roll­out through the train­ing system.

Part IVFrom rollout to gradient

Where does the wall-clock time of an RL step go, what does each speedup cost in stal­e­ness or bias, and which record-keep­ing choices silently break a run?

A sound reward still has to be attached to the tokens that earned it. Between the ver­i­fier and the weights sit an infer­ence engine, a fleet of sand­boxes, a sched­uler and a trainer, each of which can qui­etly change what the gra­di­ent is com­puted on. Pro­duc­tion num­bers show where time goes; a toy roll­out system iso­lates each mech­a­nism.

The tail sets the step

Why do more GPUs not shorten an RL step? A step has four phases: a gen­er­a­tor (an infer­ence engine hold­ing a copy of the policy) sam­ples roll­outs; the envi­ron­ment and ver­i­fier score them; a trainer takes a gra­di­ent step; and the new weights return to the gen­er­a­tor. When each phase waits for the whole batch, the step is a bar­rier that lasts as long as its slow­est roll­out (Figure 15).

Pro­duc­tion pro­files agree that gen­er­a­tion, and its slow­est mem­bers, set the clock. On three Moon­shot pro­duc­tion work­loads, roll­out took 63% to 87% of each iter­a­tion, train­ing 10% to 31% and the weight update 2% to 6% [95]. Olmo 3's 32B learner, on 8 nodes against 20 for infer­ence, still waited for data 75% of the time [96]. Agents put the envi­ron­ment on the crit­i­cal path: when envi­ron­ments timed out in RollArt's soft­ware-engi­neer­ing agent train­ing, env.reset took 78% of roll­out time [97]. Lengths are heavy-tailed, with the 99th per­centile up to ten times the median [98] and the long­est response in a batch 25 to 32 times [99], and the long­est sequence still decodes one token at a time: "increas­ing resources does not reduce the Roll­out dura­tion" [100].

Figure 15 A syn­chro­nous step waits for its slow­est roll­out, and asyn­chrony turns that wait into stale sam­ples. A: eight gen­er­a­tor slots, batches of 16 roll­outs with log­nor­mal dura­tions (median 10 time units; the default tail puts p99 at about 10 times the median), a train­ing time of 18 and a weight sync of 2, drawn over the time the syn­chro­nous design needs for five steps. Switch the design, the stal­e­ness bound, the tail and the train­ing time; bars are col­ored by the stal­e­ness at which each roll­out was trained, dashed out­lines mark roll­outs dropped as too stale, and hov­er­ing or tab­bing to a bar gives its ver­sions. B: pub­lished shares of one step, each bar its own work­load. Prove­nance. Com­puted toy (A), which shows the shape, not the size. Public data (B: Seer, RollArt, Olmo 3, verl).

Place­ment fol­lows. If a work­load needs r units of gen­er­a­tion GPU-time per unit of train­ing, a split, pipelined design is bal­anced when gen­er­a­tion gets r/(r + 1) of the GPUs (com­puted). Pub­lished splits give gen­er­a­tion 60% to 75% of nodes, 44:16 for INTELLECT-3 [101] and 20:8 for Olmo 3: "allo­cate as many roll­out GPUs as you can such that the trainer does not wait" [102]. Re-pro­file weight sync when­ever step time drops; Prime Intel­lect's stayed at 60 to 90 sec­onds while its steps fell below five min­utes, and became the bot­tle­neck (self-reported) [103].

The staleness budget

What does asyn­chrony buy, and what does it cost? Asyn­chrony stops the wait­ing: gen­er­a­tors keep sam­pling from weights a ver­sion or more old while the trainer works. Stal­e­ness, the trainer's ver­sion minus the ver­sion that sam­pled a token, must be counted per token, because one episode can span sev­eral ver­sions; APRIL mea­sured about 40% of a step's tokens coming from responses started under ear­lier poli­cies [104]. The pur­chase arrives early: in the toy, bounded asyn­chrony reached 3.2 times the syn­chro­nous steps per minute at a stal­e­ness bound of 2 and stayed flat beyond it, but only 1.3 times with light-tailed latency, because the tail is what syn­chro­nous train­ing pays for (toy sim­u­la­tion). ROLL Flash also gets most of its gain by an asyn­chrony ratio of 2 [105], and verl reports 2.35 to 2.67 times (self-reported) [106].

The price depends on the objec­tive. PPO's ratio πθ/πold does two jobs: it cor­rects for data sam­pled by another policy, which needs the policy that actu­ally sam­pled, and it cen­ters a trust region, which can be any recent policy [107]. So write three poli­cies. The behav­ior policy μ is what the sam­pler actu­ally ran, in its ver­sion and numer­ics; the prox­i­mal policy πprox is the trainer's weights at the start of the update; πθ is being opti­mized. The weight πprox/μ cor­rects the sam­pling and the clipped ratio πθ/πprox bounds the step. μ's log-prob­a­bil­i­ties exist only if the sam­pler recorded them.

Aver­aged over stal­e­ness bounds of 4, 8 and 16, AReaL's naive PPO scored 31.6 on AIME 2024 and its decou­pled objec­tive 40.6, against 42.0 for syn­chro­nous train­ing (com­puted from the paper's stal­e­ness abla­tion: a 1.5B model, one run per set­ting) [3]. At a bound of 4 the naive run dipped to 23.3. The decou­pled objec­tive stays within about a point of syn­chro­nous up to a bound of 8, then loses 3 to 5 points: the objec­tive, more than the bound, car­ries the run. In the toy, with the sam­pler 16 ver­sions behind, naive PPO-clip kept 69% of syn­chro­nous learn­ing and decou­pled PPO and trun­cated impor­tance sam­pling 83% to 85%, while the uncor­rected run's clip frac­tion stayed near 3% (Figure 16, toy sim­u­la­tion). A low clip frac­tion is not evi­dence of an on-policy run.

Figure 16 Asyn­chrony's through­put arrives by a small stal­e­ness bound, and what stal­e­ness costs depends on the objec­tive. A: train­ing steps per minute in a three-process toy roll­out system on one CPU (sim­u­lated heavy-tailed latency with p99 about 9.8 times the median, and a light-tailed con­trol), with 95% inter­vals over three repeats. B: GRPO on the addi­tion toy with the sam­pler held a fixed k ver­sions behind, 150 steps of 32 prompts × 8 sam­ples, three seeds; switch between the area under the held-out pass@1 curve and final pass@1, toggle objec­tives, and read each line's end label as its share of syn­chro­nous learn­ing at k = 16. C: AReaL's public abla­tion, whose naive column is not mono­tone in stal­e­ness while the decou­pled column stays within a point of syn­chro­nous up to η = 8 [3]. Prove­nance. Toy sim­u­la­tion (A, B), which shows the shape, not the size. Public data (C).

Knobs do not trans­late across frame­works: verl's staleness_threshold bounds the share of stale sam­ples [106], AReaL's η a ver­sion lag [3] and MiniMax's window a queue posi­tion [108], and capac­ity rules are approx­i­mate; SkyRL's con­troller "does not strictly guar­an­tee" its bound [109]. Admit by a capac­ity rule, then check each token's age at the trainer and drop what over­shoots.

Off-policy at zero staleness: training-inference mismatch

Why is "on-policy" train­ing off-policy even when ver­sions match? The infer­ence engine and the trainer eval­u­ate the same weights with dif­fer­ent ker­nels, batch shapes and pre­ci­sion, so they assign dif­fer­ent prob­a­bil­i­ties to the same tokens. This train­ing-infer­ence mis­match does not shrink when weights sync more often. Mix­ture-of-experts (MoE) models, which route each token to a few expert sub-net­works, make it worse: on Qwen3‑30B-A3B about 10% of router deci­sions dif­fered between infer­ence and train­ing, and 94% of tokens hit a dif­fer­ent expert in at least one layer [110]. Round­ing error com­pounds with length: BF16's mis­match "wors­ens with longer responses", and FP16 keeps it about 24 times smaller [111].

The fixes form a ladder from cheap to exact. Trun­cated impor­tance sam­pling (TIS) weights each token by min(πtrain/πsam­pler, C), with verl default­ing to C = 2, and mask­ing whole sequences is better "when high-weight sam­ples are likely garbage rather than signal" [112]. IcePop zeroes tokens whose ratio leaves [0.5, 5]; with­out it, plain GRPO on Ring-mini-2.0 col­lapsed after 180 to 200 steps [113]. Rout­ing replay feeds the sam­pler's expert choices to the trainer, and an FP32 lan­guage-model head raised ScaleRL's fitted asymp­tote from 0.52 to 0.61 [114]. Bit­wise-iden­ti­cal ker­nels remove the error, at a 25.3% full-step over­head in one imple­men­ta­tion (self-reported) [115]. Dis­crete choices need deter­min­is­tic ker­nels at every rung: in GLM-5's train­ing, non-deter­min­is­tic top-k oper­a­tors "caused dras­tic per­for­mance degra­da­tion" [116].

The com­mon­est mis­take looks like a cor­rec­tion. A trainer that recom­putes the "old" log-prob­a­bil­i­ties and uses them as the behav­ior policy divides the trainer by itself, which verl's doc­u­men­ta­tion says "leads to RL train­ing col­lapse" [112]. The fix is a record field: the sam­pler's log-prob­a­bil­ity for every sam­pled token, in the denom­i­na­tor.

Taming the tail without bias

Which tail fixes are free, and what do the others do to the data? Con­tin­u­ous batch­ing is free: it refills each gen­er­a­tion slot the moment it frees, and with a mean gen­er­a­tion of 14,628 tokens against a 32K cap, Olmo 3 com­puted that static batch­ing "would have" wasted up to 54% of its com­pute [96]. Every­thing faster is paid for in bias, as Figure 17 shows for eight sched­ul­ing dis­ci­plines on a toy work­load with a power-law tail of episode lengths. Greedy stream­ing, which trains what­ever fin­ishes first, ran six times faster, but its first ten steps trained episodes 41% shorter than the stream; restart­ing unfin­ished work was as short early and wasted 80% of gen­er­ated tokens. Win­dowed FIFO, which lets the trainer take fin­ished tra­jec­to­ries only within a window over the gen­er­a­tion queue, showed an early bias of −3%, with an inter­val includ­ing zero, at about half of greedy's speed (toy sim­u­la­tion).

Figure 17 The through­put a sched­uler buys by not wait­ing is paid for in short episodes. Each point is one sched­ul­ing dis­ci­pline on the same toy work­load: a chain envi­ron­ment whose episode length L has P(L ≥ l) = l−1.1, capped at 24 turns, batches of 32, an admis­sion bound of 4 and a frozen policy that decodes for real. The ver­ti­cal axis is the rel­a­tive dif­fer­ence in mean turns between trained tra­jec­to­ries and the in-order stream, over the first ten steps or the whole run; error bars are 95% inter­vals over three task streams. Win­dowed FIFO is the only fast design whose early inter­val includes zero; the short-first bias of greedy sched­ul­ing is the one MiniMax describes [108]. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size.

MiniMax reports that under greedy sched­ul­ing "early train­ing batches are dom­i­nated by short, easy tasks", which desta­bi­lized opti­miza­tion, and adopted win­dowed FIFO [108]; DeepSeek-V4 logs every gen­er­ated token because regen­er­at­ing unfin­ished requests "intro­duces length bias" [117]. Two sched­ulers avoid the trade by stay­ing syn­chro­nous: Seer, for up to 2.04 times the roll­out through­put [95], and RollPacker, for 2.03 to 2.56 times end to end [99].

The environment is a distributed service

What changes when one envi­ron­ment becomes thou­sands of con­cur­rent ses­sions? It becomes a fleet with its own latency tail, capac­ity limit and fail­ure modes, each of which leaks into the gra­di­ent unless designed out. Size warm pools for the burst. Little's law (items in a stable system = arrival rate × time in it) gives the mean number of sand­boxes boot­ing at once [118], but a p99 target con­cerns the bursts above the mean. In the toy server (300 cre­ates a second, 207 ms cold boots), Little's law gives 62, which missed a 50 ms p99 target at 252 ms, and the p99 fell to 0.1 ms only at 80 (toy sim­u­la­tion; Figure 18A). A square-root margin, L + z√L with z = 2.33 for a 1% miss, gives 81, within 4% of the sim­u­lated min­i­mum of 78 (com­puted).3

Fail fast, and make retries idem­po­tent. Past 2,048 ses­sions on one 8-worker con­tainer, OpenEnv's fail­ure mode was "con­nec­tion rejec­tion, not time­out" [119]. A rejec­tion is unam­bigu­ous; a time­out invites a retry that may apply a step twice. In the toy, where 5% of responses stalled past the time­out after the step was applied, a fresh request id per attempt double-applied all 93 retried steps and a reused id none (toy sim­u­la­tion), and a dou­bled step earns reward for some­thing the policy never did.

Figure 18 A p99 start-latency target is a cliff set by bursts, and a zero for a crash can teach the policy to avoid the envi­ron­ment. A: a toy envi­ron­ment server with Pois­son cre­ates at 300 per second and a sim­u­lated log­nor­mal cold boot aver­ag­ing 207 ms; mea­sured and sim­u­lated p99 start latency against pool size, with five sizing rules marked. The cal­cu­la­tor below it applies Little's law, the square-root margin and Erlang B to your own arrival rate and cold start. B: two strate­gies for one task, where a crash on any of L envi­ron­ment steps ends the episode, so a strat­egy is cred­ited its suc­cess rate p when crashes are masked and p(1 − c)L when they are zeroed; drag the suc­cess rates and step counts to move the flip point, and set equal step counts to repro­duce the toy's null result. Prove­nance. Toy sim­u­la­tion (A), which shows the shape, not the size. Com­puted (the cal­cu­la­tor and B).

A crash is not a zero. INTELLECT-3 states the rule: "On any sand­box fail­ure, we mask out the cor­re­spond­ing model com­ple­tion" [101]. GLM-5 excludes fail­ures from envi­ron­ment col­lapse, pads a group with valid repeats when more than half sur­vive and drops it oth­er­wise [116]. Recom­pute the base­line over the sur­vivors, or a crash's zero hands every sur­vivor an unearned advan­tage. Zero­ing is harm­less only when fail­ure is unre­lated to behav­ior (in the toy, where right and wrong episodes made the same number of tool calls, mask­ing showed no advan­tage). When the right strat­egy touches the envi­ron­ment more, zero­ing pays the short­cut: for a thor­ough strat­egy that suc­ceeds 60% of the time in 20 steps and a short­cut that suc­ceeds 40% of the time in 5, each cred­ited p(1 − c)L, the short­cut ranks higher once the per-step crash rate c exceeds about 2.7% (com­puted; Figure 18B).

Resources are part of the reward. On Ter­mi­nal-Bench 2.0, with every­thing else fixed, uncapped resources beat strict enforce­ment by 6 per­cent­age points and cut infra­struc­ture errors from 5.8% to 0.5%, so doubt leader­board gaps under 3 points until con­fig­u­ra­tions match [120]. Snap­shots are state too: a VM snap­shot resumed twice starts both copies with the same random-number state unless the guest re-seeds, which is why hyper­vi­sors expose a gen­er­a­tion ID that changes on restore [121].

The record is the contract

What must a roll­out record carry? Every­thing the trainer will need to cor­rect for, because it cannot go back and ask. Nearly every fail­ure in this part is a miss­ing row of Table 10.

Table 10. The roll­out record: each field, its gran­u­lar­ity, what it enables and how a run fails silently with­out it. DeepSeek-V3.2 keeps the sam­pling mask and expert routes for the rea­sons in the last rows, "ensur­ing both poli­cies share iden­ti­cal action sub­spaces" [25].

FieldGranularityEnablesFails silently without it
Token ids as sampledtokentraining on the exact actionsre-encoded text trains on tokens never sampled (toy: 0.087 against 0.606)
Writer and loss masktokengradient only on what the policy wrotethe policy learns to predict tool output (Search-R1: 0.343 against 0.431)
Sampler log-probabilitypolicy tokenevery importance weight, truncation and maskonly the trainer's recomputation remains: the πold bug
Policy versionpolicy tokenstaleness bounds and per-token correctionmixed-version episodes go unnoticed (about 40% of a step's tokens in APRIL)
Turn index and state keyturnturn-level credit and per-turn diagnosticsonly trajectory-level credit is possible
Status and failure reasonepisodemasking crashes; regrading latera flaky sandbox reads as a wrong answer
Group, task, environment and resource versionsepisodebaselines over the right episodes; per-environment monitoringa bad environment cannot be traced; resource drift moves reward (Terminal-Bench: 6 points)
Sampling mask (top-p, top-k)tokensampler and trainer share one action spaceimportance ratios compare different distributions
MoE routestoken × layerrouting replayrouter disagreement inflates the mismatch
Role and model version of every other modeltokenmasking simulators, judges and subagentsa user simulator or subagent is trained by accident

Tokens, not text. Decod­ing ids and re-encod­ing the string is not the iden­tity: a string has sev­eral valid tok­eniza­tions, a tok­enizer can merge char­ac­ters across the bound­ary between the policy's turn and the tool's, and a har­ness that re-ren­ders a chat can change spac­ing. Token-in, token-out (TITO) train­ing uses only the ids the sam­pler emit­ted; vLLM added return_token_ids to its OpenAI-com­pat­i­ble API because reto­k­eniza­tion drift "is not even at the token level, and there­fore cannot be cor­rected through token-level impor­tance sam­pling" [122].

On the toy tool task, a tok­enizer whose merges stay inside a turn changed 0.03% of episodes on a round trip, and reto­k­enized train­ing matched TITO. A delib­er­ately bound­ary-cross­ing tok­enizer changed 98.7%, masked the policy's second tool call and trained the policy on the envi­ron­ment's text: reto­k­enized train­ing ended at 0.087 held-out pass@1, below its own 0.189 start, against 0.606 for TITO (toy sim­u­la­tion; Figure 19). Drift belongs to the tok­enizer and tem­plate together, so it is neg­li­gi­ble or ruinous, and the next model's tem­plate can flip it.

Figure 19 Decod­ing an episode and re-encod­ing its text can change the token ids and move the loss mask onto the wrong tokens. A aligns one episode by char­ac­ter: the top row is what the sam­pler and envi­ron­ment emit­ted, the bottom row the same text encoded once. Pick an episode and a tok­enizer, then step through the re-encoded tokens to see which ones the sam­pler never emit­ted and where policy char­ac­ters lose gra­di­ent or envi­ron­ment char­ac­ters gain it; both tok­eniz­ers are 40-merge byte-pair encoders, the bound­ary-cross­ing one delib­er­ately exag­ger­ated. B: final held-out pass@1 and tool calls per episode after 150 steps on the toy tool task (three seeds as dots, 95% inter­vals). C: the obser­va­tion-mask abla­tion in the toy beside Search-R1's public aver­ages [123]. Prove­nance. Toy sim­u­la­tion (A, B and the toy row of C), which shows the shape, not the size. Public data (Search-R1).

Multi-turn TITO also needs a prefix-pre­serv­ing chat tem­plate, one where append­ing a tool mes­sage never changes how ear­lier turns render (TRL patches tem­plates for fam­i­lies such as Qwen3 [124]), and ses­sion affin­ity, so the cached prefix is reused: with­out it, a 25-turn episode pre­fills about 400,000 tokens for 29,000 dis­tinct ones (com­puted from the for­mula in [125], with a 4,000-token prompt and 1,000 new tokens a turn). Finally, cap­ture at the model-call bound­ary. Deployed agents are third-party har­nesses that speak text, so labs put a gate­way between har­ness and engine that ren­ders tokens once and records ids, log-prob­a­bil­i­ties and ver­sions: GLM-5 routes all roll­outs through one because re-tok­eniza­tion "can cor­rupt step align­ment between actions and rewards" [116], and Kimi K2.5 "strictly fol­lows a Token-in-Token-out par­a­digm" [126].

Con­text resets break the linear record. Long-hori­zon agents rarely keep their whole his­tory: DeepSeek-V3.2's tem­plate drops ear­lier rea­son­ing when a new user mes­sage arrives, and its search agent sum­ma­rizes or dis­cards old tool calls once 80% of the window is used [25], while GLM-5's search agent folds, at infer­ence, every obser­va­tion older than the last five rounds [116]. Each reset rewrites the prefix, so a record that con­cate­nates the turns trains later tokens on a con­text the sam­pler never saw. MEM1 keeps the episode as one sequence under a two-dimen­sional atten­tion mask that restricts each token "to only the tokens retained in memory at the time that token was gen­er­ated" [127]. The sim­pler equiv­a­lent: store each reset as a seg­ment with its own token ids, ver­sions and log-prob­a­bil­i­ties, give every seg­ment the episode's advan­tage, and mask any sum­mary another model wrote.

Masks, advantages, aggregation and credit

Once the record is faith­ful, which tokens should the gra­di­ent push, and how hard? Every nor­mal­izer in the answer is a weight in dis­guise.

Mask what the policy did not write. A token gets gra­di­ent only if the policy gen­er­ated it; prompts, tool out­puts and sim­u­lated-user turns stay in the con­text but out of the loss. Search-R1 aver­aged 0.431 with retrieved tokens masked and 0.343 with­out, on a 7B model trained with PPO [123]; in the toy the end-point cost was smaller, but unmasked runs took twice the steps to reach the same accu­racy (toy sim­u­la­tion).

Advan­tages: drop the per-group spread. GRPO scores each roll­out by its reward minus its group's mean, divided by the group's stan­dard devi­a­tion [15]. The divi­sion up-weights lop­sided groups: a lone suc­cess in a group of eight gets +2.47 instead of +0.875, and lop­sided groups are where lucky guesses and ver­i­fier false pos­i­tives live (com­puted). Dr. GRPO calls this a dif­fi­culty bias and removes it, along with per-response length nor­mal­iza­tion [128]. When envi­ron­ments mix, nor­mal­ize per task, or tasks learn "at very dif­fer­ent rates", as AgentRL found [129].

Aggre­ga­tion and trun­ca­tion. Divid­ing each episode's summed token loss by its own length makes long wrong answers cheap: beside a 4-token cor­rect answer, each token of a 32-token wrong one is pushed down with an eighth of the force (com­puted), so divide by a fixed number. A trun­cated episode was never judged, and scor­ing it zero adds a length penalty nobody designed: DAPO's over­long fil­ter­ing, which drops trun­cated sam­ples from the loss, moved AIME 2024 from 30 to 36 in its cumu­la­tive abla­tion [40], and ScaleRL found trun­ca­tion rates of 10% to 15% "typ­i­cally desta­bi­lized train­ing", while its stable 8B runs kept trun­ca­tions below 5% for over 90% of train­ing [114].

Credit across turns and roles. Broad­cast­ing one advan­tage to every token is the strong default on short tasks. When agents revisit iden­ti­cal states, GiGPO com­pares the turns taken from the same "anchor state", with­out a critic, for gains of more than 12% on ALFWorld and 9% on WebShop [130]. Add per-turn rewards only for facts a pro­gram can check, and treat other models in the episode as envi­ron­ment com­po­nents with error rates of their own: 16% for τ²-bench's tele­com user sim­u­la­tor against 40% for τ-bench's retail one [131].

Watching a run

Which curves tell a healthy run from a dying one? Train­ing reward alone is the worst single signal: it rises when the policy learns, and also when it finds a ver­i­fier hole, when the mix drifts toward easy tasks and when crashed episodes stop being counted, and DAPO's authors note it "often exhibits little cor­re­la­tion" with val­i­da­tion accu­racy [40]. Watch one curve per fail­ure axis, per envi­ron­ment: held-out pass@1 and large-k pass@k, reward per ver­i­fier family, the zero-vari­ance share, entropy, the sam­pler-to-trainer log-ratio, trun­ca­tion and fail­ure rates.

Some curves lead. RAGEN's "Echo Trap" in multi-turn agents is "reward vari­abil­ity col­lapse, entropy drop, and gra­di­ent spikes": reward spread and entropy often become unsta­ble before reward degrades, and gra­di­ent spikes "typ­i­cally mark the point of irre­versible col­lapse" [132]. Col­lapses are fast: with­out rout­ing replay, GRPO on a 30B MoE crashed at step 40 in one con­fig­u­ra­tion [110]. Curves say that some­thing is wrong; tran­scripts say what. Sample them where two sig­nals dis­agree (reward 1 with a very short tra­jec­tory, reward 0 with a final state that looks right), label each with one cause (policy error, ver­i­fier error, envi­ron­ment bug, infra­struc­ture fail­ure, hack), and fix each where it lives. Only the first is the trainer's busi­ness.

Check yourself: Part IV

An asyn­chro­nous run shows a 3% clip frac­tion and steady reward. Is it close to on-policy?

Not nec­es­sar­ily. A trust region cen­tered on the trainer's own recom­puted policy never sees the gap to the sam­pler. Mea­sure the log-ratio between the sam­pler's recorded log-prob­a­bil­i­ties and the trainer's directly.

When is scor­ing crashed episodes as zero harm­less?

When fail­ure is inde­pen­dent of behav­ior, so the zero is noise the group base­line absorbs. That is rare in agen­tic tasks, where the right strat­egy often takes more steps and so meets more crashes.

Train­ing reward rises while held-out pass@1 is flat. Name three causes.

A ver­i­fier false pos­i­tive the policy found, con­tam­i­nated or mem­o­rized prompts, or a sched­uler drift­ing the mix toward easy, short tasks.

With a sound reward and a faith­ful record, the ques­tion is what the gra­di­ent is made of. Part V asks when to use some­thing richer than one scalar per episode, and what RL is actu­ally good for.

Part VChoosing the learning signal

Given your data, your reward and your budget, which post-train­ing method should you run? When should you stop sam­pling attempts and copy an oracle instead? And what can RL teach that super­vised fine-tuning or dis­til­la­tion cannot, and the reverse?

Even a trust­wor­thy instru­ment usu­ally hands the opti­mizer one number per episode, often one bit; the signal is coarse when­ever some­thing richer was avail­able and went unused. Pick the method by its inputs, train on the whole rank­ing when some­thing can score every option cheaply, and use RL to make reli­able what a model can already pro­duce.

One gradient, many weightings

What are the fam­i­lies of post-train­ing meth­ods, and what picks between them? DeepSeekMath writes super­vised fine-tuning (SFT), rejec­tion-sam­pling fine-tuning, direct pref­er­ence opti­miza­tion (DPO), prox­i­mal policy opti­miza­tion (PPO) and GRPO as one gra­di­ent [15]. Every method raises the log-prob­a­bil­ity of some tokens and lowers others; meth­ods differ only in where the sequences come from (a fixed dataset or the model's own sam­ples), what sup­plies the signal (labels, a reward model, a pro­gram, a teacher) and the per-token weight. SFT puts weight 1 on demon­stra­tion tokens; DPO pushes a pre­ferred response up and a rejected one down; GRPO weights each response by its advan­tage over its group; on-policy dis­til­la­tion weights each sam­pled token by −(log πstu­dent − log πteacher). The fam­i­lies are set­tings on one dial.

Three inputs choose the set­ting: the super­vi­sion signal, where sam­ples come from, and the budget. Gen­er­a­tion dom­i­nates any­thing on-policy: roll­out took "more than 95% of the total train­ing time" of PPO in one con­trolled com­par­i­son, which also found that better pref­er­ence data gave "the largest improve­ments", ahead of the algo­rithm and then the reward model [133]. A trainer's name is not its recipe: TRL's GRPO trainer defaults to a DAPO-style token-mean loss and a KL coef­fi­cient of 0, so "the ref­er­ence model is not loaded" [124]; record base­line, advan­tage scal­ing, clip­ping, KL and loss aggre­ga­tion for every run. Low-rank adapters (LoRA) are enough for RL, which gets "only O(1) bits per episode": LoRA "fully matches the learn­ing per­for­mance of FullFT" for RL "even with ranks as low as 1", given about ten times the full fine-tuning learn­ing rate and adapters on all layers, "in par­tic­u­lar, the MLP (includ­ing MoE) layers" [134].

Figure 20 turns the inputs into start­ing defaults. With fixed pref­er­ence pairs, start with length-nor­mal­ized DPO: in Tülu 3, "only length-nor­mal­ized DPO out­per­formed our base check­point over­all", at about 4 node-hours against 56 for PPO (com­puted from the reported run times) [55]. With a pro­gram that checks answers, start from GRPO with Dr. GRPO's fix for "an opti­miza­tion bias in Group Rel­a­tive Policy Opti­miza­tion (GRPO), which arti­fi­cially increases response length" [128] and DAPO's clip-higher and dynamic sam­pling [40]; at mix­ture-of-experts scale or far off-policy, switch to CISPO, which caps each token's impor­tance weight instead of drop­ping its gra­di­ent, or GSPO, which clips one ratio per response: "both GSPO and CISPO sub­stan­tially out­per­form DAPO" on the fitted ceil­ing [114]. For open-ended qual­ity, score rubric items with a judge (Part III) and audit with a panel the policy never trained against [76].

Figure 20 Five kinds of super­vi­sion signal and at most three ques­tions pick a start­ing post-train­ing method. Each row of the out­line is an answer; select a method row, or try one of the cases above it, to light up its path and open its card: why the method fits, public evi­dence, where to start and what to watch. Arrow keys move between rows, and Enter selects. Every number on a card is the cited paper's own result, on that paper's models and bench­marks, so num­bers on dif­fer­ent cards are not com­pa­ra­ble. Prove­nance. Design syn­the­sis of public data (sources on each card).

Recipe pieces are worth what they fix

Which of the dozen pub­lished fixes should you add? Only those that repair some­thing your run has. DAPO's cumu­la­tive ladder on Qwen2.5‑32B went from 30 on AIME 2024 for naive GRPO to 42 with four fixes, then to 50 with dynamic sam­pling, which drops prompts whose groups all pass or all fail [40]: wasted groups were that run's bind­ing con­straint. In VAPO's leave-one-out ladder, remov­ing the critic's value pre­train­ing dropped the score from 60 to 11 [135]. JustRL found the oppo­site sign: its min­i­mal recipe reached 55% on AIME 2024, adding an over­long penalty left it at 50%, and adding a "robust ver­i­fier" as well at 45% [136].

In the addi­tion toy, tog­gling six stan­dard pieces one at a time moved held-out pass@1 by −0.023 to +0.013, every inter­val includ­ing zero, because noth­ing could bind: the clip touched 1.55% of tokens (toy sim­u­la­tion). When a piece does bind, it can rival the objec­tive. Bridge­wa­ter's AIA Labs, with Think­ing Machines, post-trained an open Qwen3‑235B model on six doc­u­ment-triage tasks to 84.7% accu­racy, against 78.2% for the best expert-prompted fron­tier model, at "a 13.8x reduc­tion in infer­ence costs per task"; drop­ping inter­leaved per-task batches cost 12.5 points and drop­ping on-policy dis­til­la­tion 12.3 (self-reported) [137].

ScaleRL, fit­ting sat­u­rat­ing curves to more than 400,000 GPU-hours of runs, sep­a­rates levers that raise the ceil­ing (the loss type, an FP32 head, larger batches, fil­ter­ing zero-vari­ance prompts) from levers that "mainly adjust com­pute effi­ciency" (loss aggre­ga­tion, length penal­ties, advan­tage nor­mal­iza­tion), and warns that meth­ods that win at small bud­gets "can be worse when extrap­o­lated to large-com­pute regimes" [114]. The KL penalty gets set wrong in both direc­tions: drop it for rea­son­ing RL against a rule-based ver­i­fier, where "this restric­tion is not nec­es­sary" [40], and keep a small one with a learned reward, from a strong dis­tilled start [138] and under heavy asyn­chrony [139]. Get its gra­di­ent right, too: GRPO's k3 term dif­fer­en­ti­ates a KL esti­mate as a loss, which is "gen­er­ally incor­rect" [140], so put a detached esti­mate in the reward. And one asser­tion catches many silent bugs: on the first mini­batch after a fresh roll­out, every impor­tance ratio must be exactly 1 [141].

If you have an oracle, stop sampling

When some­thing can score every option in a state (a search engine, a sim­u­la­tor, an exact solver, a teacher model's prob­a­bil­i­ties), why sample a few options and reward them? Usu­ally you should not. Sample and score is RL with the oracle as the reward. Score every­thing is list­wise dis­til­la­tion: score all K options, turn the scores into a soft­max target at tem­per­a­ture τ and fit it with a KL loss, as AlphaGo Zero trains its policy toward its search prob­a­bil­i­ties [142].

Count the infor­ma­tion. A full rank­ing of K options picks one of K! order­ings, so it car­ries up to log2 K! bits: about 22 at K = 10 and 525 at K = 100, against at most log2 G! for G scored sam­ples (15.3 at G = 8) and one bit per pass/fail roll­out (com­puted). The bound over­states what reaches the stu­dent: in a toy sweep from K = 8 to 256, the bound's advan­tage grows about 110-fold while the speed-up of list­wise dis­til­la­tion over GRPO grows only from 3.3× to 10.6× (toy sim­u­la­tion).

Two levers make the real gap. Cov­er­age: with every option scored, the expected policy gra­di­ent is com­puted exactly instead of esti­mated [143]; in a toy with 100 options, the gra­di­ent from 8 scored sam­ples had a cosine of only 0.28 with the exact one. The objec­tive: the exact policy-gra­di­ent push on option a is πa(va − Eπv), weighted by the model's own prob­a­bil­ity of choos­ing a, so a good option the model ignores barely moves, while the dis­til­la­tion push qa − πa moves it what­ever the model believes. In Figure 21 (64 options, a linear stu­dent; regret 0 is the oracle's pick and 1 an aver­age option), reach­ing regret 0.1 took GRPO 8,128 posi­tions, the exact policy gra­di­ent 4,480 (1.8× from cov­er­age) and soft list­wise dis­til­la­tion 1,664 (another 2.7× from the objec­tive), while GRPO on a win/loss reward never got there (toy sim­u­la­tion). Charged per oracle call instead, GRPO wins (8 scores per posi­tion, not 64), so the argu­ment needs a cheap oracle.

Figure 21 Given an oracle that scores every option, soft list­wise dis­til­la­tion learns fastest per posi­tion, and, at the test­bed's 42:1 cost ratio, by far the fastest per GPU-hour. Six ways to learn from one oracle, with 64 legal moves per posi­tion, a linear soft­max stu­dent, 32 posi­tions per gra­di­ent step, 5 seeds (bands ±1 stan­dard devi­a­tion) and one learn­ing-rate grid for every method; regret 1 is an aver­age move and 0 the oracle's pick, on 4,000 held-out posi­tions. The gap from GRPO to the exact policy gra­di­ent is sam­pling noise; the gap from there to list­wise dis­til­la­tion is the target. The GPU-hour view charges each toy posi­tion the tile-game test­bed's mea­sured cost (1/42,000 of a GPU-hour per scor­ing pass, 1/1,000 per GRPO posi­tion); the oracle-scored-options view is the coun­ter­point for expen­sive ora­cles. Dots mark regret 0.1. Prove­nance. Toy sim­u­la­tion, which shows the shape, not the size; the cost ratio is a test­bed mea­sure­ment.

The public com­par­isons we found point the same way, with one instruc­tive excep­tion (Figure 22). Tar­gets from a search's visit dis­tri­bu­tion beat its chosen move by 50 ± 13 Elo in Hex [144]; values for every chess move beat best-move labels by 492 Elo from the same games [145]; super­vis­ing every com­mand branch lifted sim­u­lated-driv­ing suc­cess from 16% to 96% [146]. Qwen3‑8B reached 74.4 on AIME 2024 with on-policy dis­til­la­tion from larger Qwen3 teach­ers (32B or 235B-A22B) for 1,800 GPU-hours, against 67.6 with RL for 17,920; the teach­ers' own train­ing is not counted, so this com­pares two ways of using a teacher that already exists [4]. The excep­tion: in Atari, squared error on raw Q-values, the dens­est signal, reached only 33.9% of the teacher's Break­out score against 94.7% for a KL loss, because "greedy action choices can be made based on very small dif­fer­ences in Q-values, which receive low weight in the MSE cost" [147]. Den­sity needs a loss that weights what decides the choice.

Figure 22 Wher­ever a dense teacher signal was com­pared with a sparser one, the dense signal won, pro­vided its loss weighted what decides the choice. Each panel is a dif­fer­ent study, model and metric on its own axis, so com­pare within panels, never across them. Whiskers show the source's stated inter­vals (Hex, chess); the Qwen3 panel tog­gles pass@1 and pass@64. In the Atari panel the dens­est signal, squared error on raw Q-values, did worst. In the two lan­guage-model math panels the sparser arm learns from a ver­i­fier, not from the same teacher, and the doc­u­ment-triage panel is one self-reported leave-one-out abla­tion. Hover or tab to any row for its value and source. Prove­nance. Public data (Anthony et al. 2017; Ruoss et al. 2024; Rusu et al. 2015; Chen et al. 2019; Qwen Team 2025; DeepSeek-AI 2025; Bridge­wa­ter AIA Labs and Think­ing Machines 2026).

The gap holds with a lan­guage model as the stu­dent, in the cross­word-tile-game test­bed, where a search player scores every legal move. GRPO on Qwen3.5‑4B with low-rank adapters learned from about 1,000 posi­tions per GPU-hour, and after about 25 steps 70% to 78% of its groups were zero-vari­ance, not from mas­tery: it matched the search player's top move only 39% of the time, con­fi­dently wrong. List­wise dis­til­la­tion of the search player's values over 16 can­di­dates, scored in one for­ward pass, learned from about 42,000 posi­tions per GPU-hour on the same model and ended 31 Elo below the player whose values it copied (test­bed mea­sure­ment; the CPU search that made the labels is not in that rate). Out­comes teach slowly because the win-prob­a­bil­ity gap between good moves aver­ages 0.009 against an out­come stan­dard devi­a­tion of 0.43, so one such gap takes about 2 × (0.43/0.009)² ≈ 4,600 games to resolve at one stan­dard error (com­puted); one oracle label set­tles it.

The five jobs RL keeps

When is RL still the right tool? When one con­di­tion that list­wise dis­til­la­tion needs is miss­ing. There are five.

1. There is no oracle, only a ver­i­fier. A math checker or a test suite passes or fails a whole output and cannot rank alter­na­tives, so there is no list to dis­till. DeepSeek-R1-Zero learned to reason from "a rule-based reward system" of accu­racy and format rewards [149].

2. The teacher sees what the stu­dent cannot. Priv­i­leged infor­ma­tion "is marginal­ized during imi­ta­tion learn­ing, result­ing in an 'imi­ta­tion gap'" [150]. In the tile-game test­bed, a search player that sees the oppo­nent's rack is a yard­stick, not a teacher: its best move rests on tiles the stu­dent never sees (Part VI uses it to mea­sure the luck ceil­ing).

3. The oracle mis­prices the long run. Dis­til­la­tion copies the oracle's blind spots. In a toy where each move's value has an imme­di­ate part a myopic oracle sees and a delayed part that partly dis­agrees, dis­till­ing the myopic oracle stalled at regret 0.43, and RL started from that sharp policy ended at 0.073 against 0.036 for RL from scratch, because a sharp policy explores little (toy sim­u­la­tion, 5 seeds). Public work finds the better order: dis­til­la­tion then RL "con­sis­tently out­per­forms pure OPD, pure RLVR, and all such joint base­lines" [151]. The RL stage also buys robust­ness off the train­ing dis­tri­bu­tion: out­come-reward RL car­ried over to unseen rule and visual vari­ants where super­vised fine-tuning mem­o­rized, though fine-tuning first still sta­bi­lized the output format [152].

4. You need to beat the teacher. A reward made from the teacher's score has the teacher's choice as its opti­mum, and dis­til­la­tion lands near the teacher: Expert Iter­a­tion's appren­tice won "just over half of games played" against the search it imi­tated [144]. Going fur­ther takes a better teacher, which Expert Iter­a­tion builds by search­ing over its own net­work and dis­till­ing again, and DeepSeek-V4 trains domain experts with RL before con­sol­i­dat­ing them "through on-policy dis­til­la­tion" [117]: RL makes the ora­cles, dis­til­la­tion copies them. Max­i­miz­ing a noisy teacher's argmax back­fires: in the test­bed, an RL stage after dis­til­la­tion drove the policy's entropy from 1.9 to 0.08 nats and lost 9 points of win rate, because two inde­pen­dent search labels agreed on the best move in only 77% of posi­tions (test­bed mea­sure­ment).

5. Each option is expen­sive to score. A list­wise target charges one oracle call per option; the chess dataset above took "roughly 8864 days of unpar­al­lelized Stock­fish eval­u­a­tion time" [145]. With human raters or slow sim­u­la­tors, score a short­list.

DAgger fixes drift, not ignorance

Should you pay to have the oracle label the stu­dent's own states? Only if the stu­dent drifts. Off­line imi­ta­tion trains on the expert's states, and a stu­dent that errs wan­ders where the expert never went: "a clas­si­fier that makes a mis­take with prob­a­bil­ity ϵ under the dis­tri­bu­tion of states/obser­va­tions encoun­tered by the expert can make as many as T²ϵ mis­takes in expec­ta­tion over T-steps" [153]. DAgger has the expert label the states the stu­dent visits, so the bound grows only lin­early in T, and on-policy dis­til­la­tion is DAgger with a soft teacher [154], "a one-line change on top of RL imple­men­ta­tions which use KL reg­u­lar­iza­tion" [155].

It pays in pro­por­tion to drift. In Hex, three DAgger rounds added 120 Elo [144], though they also quadru­pled the data; in sim­u­lated driv­ing, adding the stu­dent's own roll­outs lifted suc­cess from 16% to 64% [146]. In the tile-game test­bed DAgger added noth­ing at matched GPU-hours, most likely because fresh tiles and the oppo­nent's move reshuf­fle much of the posi­tion each turn. A toy cor­ri­dor shows the switch: with­out reshuf­fling, off­line dis­til­la­tion's excess cost grew to 1.91 at 500 steps against 0.08 for DAgger; with 10% of moves draw­ing a fresh state, the two landed within 0.03 (toy sim­u­la­tion, 20 seeds).

The pre-test is cheap: have the oracle score the stu­dent's moves on the stu­dent's own states and on the oracle's, and if the regrets match there is no drift to fix. Mind the KL direc­tion too: reverse KL is mode-seek­ing, so the stu­dent "learns one spe­cific behav­ior (the teacher's) instead of spread­ing its dis­tri­bu­tion across sev­eral sub­op­ti­mal options" [155], which suits a final model, not a stu­dent that RL will train next (job 3).

Knowledge versus procedure

What can each signal put into a model? Knowl­edge arrives through tokens. A scalar reward can make a pro­ce­dure reli­able, but it rarely cre­ates one the model cannot already sample.

SFT mostly selects a format. LIMA was fine-tuned on "only 1,000 care­fully curated prompts and responses", on the view that "almost all knowl­edge in large lan­guage models is learned during pre­train­ing" [156].

RL with ver­i­fi­able rewards mostly sharp­ens. On AIME 2024 at k = 1,024 sam­ples, 13.3% of prob­lems were solved only by the base model and 0.0% only by its RL-trained ver­sion, which "mainly sharp­ens the dis­tri­bu­tion within the base model's prior rather than expand­ing beyond it", whereas dis­til­la­tion "can intro­duce new rea­son­ing pat­terns from the teacher" [157]. Qwen3's RL left pass@64 at 90.0; on-policy dis­til­la­tion lifted it to 93.3 [4]. RL edits little, leav­ing 68.5% to 96.0% of param­e­ters unchanged in public check­points [158], and "pre­serves prior knowl­edge and capa­bil­i­ties sig­nif­i­cantly better" than SFT [159]. Expan­sion appears with long, broad train­ing where the base is weak (ProRL's 2,000-plus steps took a task where the base "exhibits no capa­bil­ity" from 0.00 to 7.91 pass@1 [138]), yet "the shrink­age of observed sup­port out­weighs its expan­sion" [160]. Figure 23 shows the cross­over in the addi­tion toy.

Figure 23 RL raised the toy model's pass@1 and low­ered what it could solve at large k, and most public large-k results agree. A: unbi­ased pass@k from 64 sam­ples per prompt for the start­ing check­point and the RL policy (mean of 3 seeds, band = 95% inter­val), with the point where the start pulls ahead cir­cled; switch between held-out and hard prompts, and hover or use the arrow keys to read values. B: prompts solved at least once only by each. Below: three public results on their own axes: prob­lems solved only by the base or only by the RL model at k = 1,024, Qwen3‑8B's pass@64 after RL and after on-policy dis­til­la­tion, and a task on which pro­longed RL cre­ated a capa­bil­ity the base lacked. Prove­nance. Toy sim­u­la­tion (a 103,055-param­e­ter trans­former trained on two-digit addi­tion from a delib­er­ately noisy super­vised start), which shows the shape, not the size. Public data (Yue et al. 2025; Qwen Team 2025; Liu et al. 2025).

New facts through fine-tuning raise hal­lu­ci­na­tion. "As the exam­ples with new knowl­edge are even­tu­ally learned, they lin­early increase the model's ten­dency to hal­lu­ci­nate" [161], and rea­son­ing fine-tuning "degrades absten­tion (by 24% on aver­age)" [162]. Tokens plus a teacher can repair the damage: mid-train­ing Qwen3‑8B on a com­pany's inter­nal doc­u­ments alone cut its instruc­tion-fol­low­ing score from 85% to 45%, while mixing in chat data and then dis­till­ing on-policy from the orig­i­nal model restored it to 83% and raised inter­nal ques­tion answer­ing from 18% to 41% [155].

A scalar reward cannot quickly teach a pro­ce­dure the model cannot sample. In the tile-game test­bed, a lan­guage model trained with GRPO learned to re-rank eight engine-listed moves (regret fell from 5.21 to 3.91 points a move) but not to gen­er­ate moves from the board: 89.5% of its free moves were ille­gal, and it gamed the legal­ity reward (a legal one-tile play earned about +0.1, an ille­gal move −0.5) by writ­ing one-letter plays, 1,503 of 2,307 answers against 26 at the start. A decoder con­strained to a prefix tree of legal moves then made every free move legal, and the player still lost all 1,600 games it played against two simple bots (test­bed mea­sure­ment). Legal is easy; good is hard. RL selects among behav­iors the base can pro­duce, and a move gen­er­a­tor was not one of them.

What the model sees can matter more than how good its teacher is. In the same test­bed, four engine facts per option (such as the oppo­nent's best reply) cut per-move win-prob­a­bil­ity regret from 0.0105 to 0.0079 (95% inter­val of the dif­fer­ence −0.0038 to −0.0015), while labels two to three times closer to the truth changed noth­ing mea­sur­able, because the stu­dent's own error was four to five times its labels'. Hand­ing the end of the game to the engine (an exact solver once the bag is empty and both racks are known, a search just before it) added 29 Elo (inter­val 26 to 33) for about four CPU-sec­onds a game (test­bed mea­sure­ment). Pub­licly, a chess trans­former whose top moves all look won will "double-check this con­di­tion with Stock­fish" [145]; tool use is the gen­eral case.

Distill or RL?

The part reduces to at most four ques­tions (Table 11); ask them in order and stop at the first answer that names a recipe. The tile-game test­bed's legal search player ends at off­line list­wise dis­til­la­tion; the rack-seeing player stops at ques­tion 2.

Table 11. Dis­till or RL? At most four ques­tions decide. Each row is asked only if the pre­vi­ous row's answer was "yes".

#QuestionIf noIf yesWhy
1Can something score every option in a state for less than a rollout costs?If it can score a shortlist, distill over the shortlist. If only whole outputs can be checked, run RL on sampled outputs. If nothing can score, build a scorer first.Go to 2.Listwise targets charge one score per option; Gemma 3 distills over 256 sampled teacher logits per token.
2Does the scorer see only what the student will see?Keep it as a yardstick. Distill a teacher with the student's information, or combine imitation with RL.Go to 3.Privileged information is "marginalized during imitation learning" (ADVISOR).
3Does it price the long-run consequences of an option?Distill at a soft temperature to start, then run RL on the true outcome, in sequence; or improve the oracle with search and distill again (Expert Iteration).Go to 4.A distilled myopic oracle stalled at regret 0.43 (toy); distillation then RL beat joint training (Li et al.).
4Is the student's regret on its own states clearly worse than on the oracle's states?Offline listwise distillation.Listwise distillation with on-policy labels: DAgger, or on-policy distillation for language models.On-policy data lifted driving success from 16% to 64%; it added nothing where the state reshuffles each turn (testbed).

Check yourself: Part V

A GRPO run shows 75% zero-vari­ance groups and near-zero entropy. Has it learned the task?

Not nec­es­sar­ily. Low vari­ance and low entropy also describe a policy that is con­fi­dently wrong, as in the test­bed, where agree­ment with the oracle's top move was 39%. Check held-out agree­ment with an oracle before read­ing col­lapse as mas­tery.

Why not dis­till the search player that sees the oppo­nent's rack, which beats every legal player in the test­bed?

Its best move depends on tiles the stu­dent never sees, so the stu­dent can copy only a blur of the deci­sion: the imi­ta­tion gap. Dis­till the legal search player and keep the rack-seeing one as a yard­stick for how much the hidden infor­ma­tion is worth.

After train­ing, a model writes legal moves 100% of the time through a con­strained decoder. What has train­ing taught it?

Noth­ing the legal­ity rate can show: the decoder guar­an­tees legal­ity for any scores, even random ones. Mea­sure qual­ity (regret against an oracle, win rate on paired deals) instead.

Every claim in this part is a com­par­i­son between two num­bers. Part VI asks how often such com­par­isons are noise, how eval­u­a­tion designs tilt them, and what to do where luck and hidden infor­ma­tion set a ceil­ing no method can pass.

Part VIMeasuring in noisy worlds

When is a mea­sured gain real, how do eval­u­a­tion designs flat­ter one side, what ceil­ing do luck and hidden infor­ma­tion put on every legal player, and why are mar­kets the hard­est RL domain?

The last two ledger lines con­cern the com­par­isons every ear­lier part relied on. A gain can be real and still unread­able, because the eval­u­a­tion cannot see an effect that small: a sta­tis­tics prob­lem with known reme­dies. And part of the gap to a per­fect score may be clos­able by no player, because the infor­ma­tion does not exist at deci­sion time: a prop­erty of the domain, which the envi­ron­ment should mea­sure and report.

A score is a sample

How large a gain can a 30-prob­lem bench­mark see? Less than most papers claim. A score mixes three random draws: which items the bench­mark con­tains, which answers the model hap­pened to sample [5] and, for a claim about a train­ing recipe, which train­ing run you got [163]. For pass/fail items the stan­dard error of an accu­racy p on n items is √(p(1 − p)/n): at 62% accu­racy the 95% inter­val is ±17 points on 30 items, ±5.5 on 300 and ±3 on 1,000 (com­puted). In Figure 24, which eval­u­ates one model 20 times at each size, 37% of single runs on 30 items read 3 or more points above the truth (exact bino­mial): a "gain" that is pure noise.

Figure 24 The same model reads any­where from 47% to 87% on a 30-item test. Each dot is one inde­pen­dent eval­u­a­tion of a model whose true accu­racy is 62%; the shaded band is the 95% inter­val at that size, and orange dots read 3 or more points above the truth, which hap­pens to 37% of single runs at 30 items and 2.7% at 1,000. Hover or tab to a column label for its inter­val, or to a dot for its score; switch to Inter­val cov­er­age to see how often a nom­i­nal 95% Wald or Wilson inter­val actu­ally con­tains the truth. Prove­nance. Toy sim­u­la­tion (seed 20261018), which shows the shape, not the size: 20 eval­u­a­tions per size with 0/1 scores. Com­puted exactly: band, exceedance share and cov­er­age.

Small eval­u­a­tions also need a better inter­val, because the text­book normal-approx­i­ma­tion (Wald) inter­val under­states uncer­tainty below a few hun­dred items [7]: at 30 items and a true accu­racy of 90%, a nom­i­nal 95% Wald inter­val covers the truth 81% of the time and the Wilson inter­val 97% (com­puted exactly). On AIME 2024, pass@1 has a stan­dard devi­a­tion of 5 to 15 points across sam­pling seeds; re-run under one pro­to­col, three vari­ants of a method whose orig­i­nal report looked promis­ing scored 28.9, 31.3 and 29.7 against a base­line of 28.7 ± 4.8, none sig­nif­i­cant [164]. On Chat­bot Arena, two sub­mis­sions of the same check­point scored 1069 and 1052 [165].

Each draw has its own remedy, in order. Extra sam­ples per item remove sam­pling noise, which dom­i­nates the gap between two check­points of one run because they mostly solve the same items; only more items sup­port a claim beyond the test set; and only more train­ing runs sup­port a claim about a recipe: in deep RL, a 25% improve­ment in median score needed about 25 runs per algo­rithm to be sta­tis­ti­cally defen­si­ble [163]. Low­er­ing the sam­pling tem­per­a­ture to cut vari­ance changes what you mea­sure [5], and the serv­ing stack is a draw of its own: one model's AIME 2024 score varied by up to 8 points across com­pute clus­ters [164]. Run both arms on one stack, inter­leaved.

Pair, cluster, then count

Can the same items buy more pre­ci­sion? Yes, for free, if both arms answer them. The per-item dif­fer­ence has stan­dard error √(SEA² + SEB² − 2ρ·SEA·SEB), where ρ, the cor­re­la­tion of the two arms' per-item scores, is usu­ally pos­i­tive because models tend to agree on which items are easy and which are hard [5]; at ρ = 0.5, pair­ing halves the vari­ance of the dif­fer­ence (com­puted). Check­ing whether two 95% inter­vals over­lap is the wrong test: with no true dif­fer­ence and equal errors they over­lap more than 99% of the time [166], so the check misses most real gains.

Clus­ter on what you gen­er­ated. Vari­ants of one seed share its quirks, and episodes in one envi­ron­ment share its bugs; clus­tered stan­dard errors were 3.05 times the naive ones on DROP [5]. Kish's design effect says vari­ance grows by 1 + (m − 1)ρ for clus­ters of m items with intra-clus­ter cor­re­la­tion ρ [167], so ten vari­ants per seed at ρ = 0.3 make 1,000 tasks worth about 270 inde­pen­dent ones, and because the effec­tive count k·m/(1 + (m − 1)ρ) approaches k/ρ, no number of vari­ants lifts 100 seeds past about 333 (com­puted). Boot­strap the whole hier­ar­chy too: in a sim­u­la­tion cal­i­brated to a com­puter-use bench­mark, resam­pling only roll­outs gave a nom­i­nal 95% inter­val "just 17% suite-level cov­er­age" [168].

Then count before you run. The items needed to detect a gap δ are n = (zα/2 + zβ)²·V/δ², where V is the per-item vari­ance of the dif­fer­ence; under Miller's illus­tra­tive assump­tions a 3-point gap needs about 969 ques­tions, hence his advice of at least 1,000 for a new eval­u­a­tion [5]. Rare events are worse: telling a reward-hack rate of 0.093% of episodes from 0.046%, a pair one lab reports for two recent models [169], takes about 49,000 inde­pen­dent episodes per model at 80% power (com­puted). Figure 25 does this arith­metic for your design.

Figure 25 Size the eval­u­a­tion before you run it. Set the accu­racy, the gap you want to detect, the per-item cor­re­la­tion between the two arms, the sam­ples per item, the share of noise that resam­pling removes and how many vari­ants share a seed: the blue curve is the small­est gap your design detects at each test size, the gray dashed curve the unpaired one-sample base­line, and the dots mark common bench­mark sizes. Elo mode counts head-to-head games for three designs, using per-pair noise mea­sured in the tile-game test­bed for seat-swapped pairs and switch-on designs, and states the inter­val a planned even match would leave. Prove­nance. Com­puted: n = (zα/2 + zβ)² · V / δ² after Miller (2024), with Kish's design effect; two-sided α = 0.05; cor­re­la­tion pre­sets are illus­tra­tive; Elo mode ignores draws and takes its per-pair noise from a test­bed mea­sure­ment.

Games build pair­ing into the format. Dupli­cate Scrab­ble deals every player the same tiles [170], Stock­fish's test farm scores games in pairs [171], and poker's AIVAT sub­tracts the luck of the cards with a value func­tion, which "can reduce the number of hands needed to draw sta­tis­ti­cal con­clu­sions by more than a factor of 10" [172]. Pair­ing works only while the shared luck stays shared: in the tile-game test­bed, play­ing each shuf­fled bag twice with seats swapped cut the stan­dard devi­a­tion of a pair's result by only 7% to 13% against two inde­pen­dent games, because the draws diverge after the first dif­fer­ent move. A switch-on design works far better. When a com­po­nent acts only late, as an endgame solver does, both arms play iden­ti­cal moves until it switches on, and the per-pair stan­dard devi­a­tion fell from about 0.31 to 0.07⁠–⁠0.09, cut­ting the pairs needed 11- to 22-fold (test­bed mea­sure­ment). When a com­par­i­son comes back even, state the null as an inter­val: a 1,000-game match that ends at 50% rules out only gains beyond about ±22 Elo (com­puted).

Look past the mean

What does a mean hide? Two tails: the answers a model should not have given, and the tasks it cannot do reli­ably. Train­ing that climbs the tail, toward reli­a­bil­ity on every attempt and on the hard­est tasks, is invis­i­ble to a mean, and so is train­ing that qui­etly makes a model guess more.

Start with wrong versus abstained. Under binary grad­ing "I don't know" scores the same as a wrong answer, so "IDK-type responses are max­i­mally penal­ized while an over­con­fi­dent 'best guess' is opti­mal" [79]. On SimpleQA, GPT-4o is cor­rect on 38.2% of ques­tions and wrong on 60.8%; Claude-3.5-Sonnet is cor­rect on 28.9%, abstains on 35.0% and is wrong on 36.1% [173]. Ranked by accu­racy GPT-4o beats Claude-3.5-Sonnet; ranked by wrong-answer rate the order reverses. Kalai et al. pro­pose stat­ing a con­fi­dence target t in the prompt: +1 for a cor­rect answer, 0 for abstain­ing and −t/(1 − t) for a mis­take. Under it, GPT-4o stays ahead of Claude only while t is below about 0.27; o1-pre­view (42.7% cor­rect, 48.1% wrong) beats GPT-4o at every t; and from t ≈ 0.47 a model that always abstains beats all three (com­puted; Figure 26). The penalty belongs in the report, and the same rule is the reward that teaches a model to abstain.

Figure 26 The same answers rank dif­fer­ently by accu­racy, by wrong-answer rate and by a con­fi­dence-target score, and the rank­ing depends on the penalty for being wrong. Bars split each model's SimpleQA answers into cor­rect, wrong and declined; rank them three ways, and drag t to set the con­fi­dence target (+1 cor­rect, 0 declined, −t/(1 − t) wrong). The lower panel plots each model's score against t, and cir­cles mark where two models swap places: GPT-4o falls below Claude-3.5-Sonnet at t ≈ 0.27, and o1-pre­view below it at t ≈ 0.53. o1-pre­view beats GPT-4o at every t, and the dia­mond marks t ≈ 0.47, from which a model that abstains on every­thing beats all three. The second data view is a toy cal­i­bra­tor that answers with its most common sample and abstains below an agree­ment cut. Prove­nance. Public data (Wei et al. 2024, SimpleQA, Table 3) and com­puted scores and cross­ings. Toy sim­u­la­tion for the cal­i­bra­tor (20,000 ques­tions, the model knows 55% of answers, 8 sam­ples each), which shows the shape, not the size.

Then the reli­a­bil­ity tail. τ-bench's pass^k is the chance that all k attempts at a task suc­ceed; its GPT-4o agent suc­ceeded on about 61% of retail tasks per attempt and below 25% at pass^8 [14]. A mean cannot tell you which world you are in: two agents with a 60% mean have pass^8 of 1.7% if every task suc­ceeds 60% of the time, or 60% if 60% of tasks always suc­ceed and the rest never do (com­puted). METR's strong­est mea­sured agent has a 50% time hori­zon of about 17 hours (an esti­mate METR flags as unre­li­able) but an 80% hori­zon of about 3.1 hours [174], and on Harvey's Legal Agent Bench­mark a fron­tier model passed 91.2% of rubric cri­te­ria but com­pleted only 8.3% of tasks [169]. Cri­te­ria passed and tasks fin­ished are dif­fer­ent prod­ucts.

The bottom of the task dis­tri­bu­tion has its own selec­tion trap. If every task truly suc­ceeds 60% of the time and you rank tasks by four attempts each, the worst tenth aver­ages about 19% (com­puted), because pick­ing the worst tasks also picks their unlucky draws. A cur­ricu­lum that retires tasks on a short streak, or a report of "our gain on the hard­est decile", inher­its this regres­sion to the mean; choose the hard band on one set of attempts and score it on fresh ones.

Fair comparisons

How does an eval­u­a­tion flat­ter one side when nobody cheats? Three ways: the items were screened against a rival, the rival did not get its best effort, and one side was selected from many tries while the other ran once.

The screen. Adver­sar­ial fil­ter­ing keeps the items a ref­er­ence model gets wrong, so that model and its rel­a­tives score low on what­ever remains; Phang et al. found rank­ings on fil­tered sets "highly sen­si­tive to the choice of adver­sary model", and "There is no case where the rank improves when fil­ter­ing with the same pre­trained model" [175]. SimpleQA, for exam­ple, "is adver­sar­i­ally col­lected against GPT-4 responses" [173]. In the toy of Figure 27, models A and B are equally able, yet A leads by about 10 points on the items B got wrong at screen­ing and by noth­ing on an unscreened sample. The screen also sets a regres­sion trap: B scored 0% on its kept items by con­struc­tion but about 39% when run again, so a "new ver­sion" of B shows a large, spu­ri­ous gain on its own fil­tered set (toy sim­u­la­tion).

Figure 27 Screen­ing and selec­tion both man­u­fac­ture gains. A: as the true gap between A and B varies, an unscreened sample (blue) tracks the truth (green) while a set screened against B adds about 10 points to A's lead and names the wrong winner across the shaded region; the but­tons com­pare three screen­ing rules at equal abil­ity. B: the best of k check­points that are all truly 60% reads high on the set used to choose it, more on small sets, and not at all on a fresh con­fir­ma­tion set. Prove­nance. Toy sim­u­la­tion (A; seed 20261018), which shows the shape, not the size: an item-response model with model-spe­cific item quirks (SD 1.2), a 40,000-item pool, 2,000 kept items scored with 8 sam­ples per model, 20 pools per point, bars ±1.96 SD across pools. Com­puted exactly (B) from bino­mial order sta­tis­tics.

Beat the oppo­nent at its best. Well-tuned LSTMs beat newer archi­tec­tures once both sides were tuned [176]. For RL on lan­guage models, best effort includes test-time com­pute: "base models achieve higher pass@k score when k is large" [157], so com­pare at matched sam­pling com­pute with a selec­tor you could deploy, such as a major­ity vote or a ver­i­fier, never an answer key. Chess shows the stan­dard: after crit­ics objected to the 2017 match con­di­tions, the rematch gave Stock­fish three hours a game, a 32 GB hash and endgame table­bases, and AlphaZero still scored +155 −6 =839 over 1,000 games [177].

Selec­tion is the quiet asym­me­try. Before the Llama 4 release, Meta tested 27 pri­vate vari­ants on Chat­bot Arena, and such best-of-N dis­clo­sure "sys­tem­at­i­cally inflates model rank­ings" [165]. Pick­ing the best step of one train­ing run is the same move: the best of 10 equally good check­points reads 7.5 points high on the 100-item set it was chosen on and 1.7 points high on 2,000 items, and a fresh con­fir­ma­tion set removes the gain (com­puted exactly).

Luck ceilings in stochastic, hidden-information domains

What is the best any legal player could do? With chance and hidden state the answer is not 100%, and a "gap to per­fect" that no legal player can close looks like a mod­el­ing fail­ure and absorbs work that buys noth­ing. The tile-game test­bed mea­sures the ceil­ing directly; W is the win rate with ties counted as half.

Luck is large, and it is made during play. In 20,000 games of a greedy bot (always take the high­est score now) against itself, where every point of spread is luck, the final spread had a stan­dard devi­a­tion of 96 points, and the player who drew both blank tiles, the game's two wild­cards, won 73% of those games (test­bed mea­sure­ment). A player that outscores its oppo­nent by Δ points a game on aver­age wins about Φ(Δ/σ), with Φ the stan­dard normal dis­tri­bu­tion func­tion, so at σ ≈ 96, win­ning 90% of games would need a mean lead of about 123 points (com­puted); the best legal player mea­sured led the greedy bot by 65 and won 79%. Public work sees the same scale: a player that could see its oppo­nent's rack outscored its rival by 37 points a game [16].

The ceil­ing ladder in Figure 28 gives each rung a mea­sured win rate, here against the greedy bot. The best legal player won 79.3% [78.1, 80.5], and the same search design at two to three times the com­pute did no better. Shown the tiles the oppo­nent kept from its last move, the most any rack infer­ence could ever recover, it gained noth­ing (78.7%); shown the oppo­nent's whole rack it won 92.8%, and shown the bag order too, all 400 of its games. The ille­gal rungs use the same search design, so each is a lower bound on what that infor­ma­tion is worth and the close­ness fig­ures that follow are upper esti­mates. Close­ness, (W − 50%)/(bound − 50%), depends on the oppo­nent: 0.68 against the greedy bot, 0.40 against the equity bot (63.7% against 84.3%) and 0.23 against the sim­u­la­tion bot (54.2% against 68.5%). The weaker the oppo­nent, the closer legal play sits to its infor­ma­tion bound; against the strong­est one, three quar­ters of the reach­able dis­tance is still open. Against the greedy and equity bots (the kept-tiles rung was not run against the sim­u­la­tion bot), the 95% lower bounds put at least about 80% of the gap to the rack-seeing bound on tiles the oppo­nent has just drawn, which noth­ing it does can reveal (test­bed mea­sure­ment). A public exper­i­ment found the same shape: Bayesian rack infer­ence won 51.9% ± 0.8% against a strong bot, know­ing the oppo­nent's exact kept tiles 53.3%, and a full-rack oracle only about 62% [6].

Figure 28 Legal play sits close to its infor­ma­tion bound against a weak oppo­nent and far from it against a strong one. Close­ness by oppo­nent (the default view): for each of three oppo­nents, the best legal player's win rate and the rack-seeing bound, with close­ness (W − 50%)/(bound − 50%). Infor­ma­tion ladder: win rates with 95% inter­vals for the best legal player, the same search design at 2⁠–⁠3× com­pute, the best legal player shown the oppo­nent's kept tiles, and two rungs (green rings) that see the oppo­nent's rack or the bag order; the ille­gal rungs use the same search design, so each is a lower bound on what that infor­ma­tion is worth. Luck and the mean lead: W against mean lead under W = Φ(lead / σ), with every mea­sured matchup; move σ or pick a win rate to read the lead it needs. What infer­ence can know: of the rack's roughly 16 bits, only the kept tiles are know­able, and exact infer­ence recov­ers about one bit. Prove­nance. Test­bed mea­sure­ment in the cross­word-tile-game test­bed (each shuf­fled bag played twice with seats swapped; 95% t-inter­vals over pairs). Com­puted: close­ness and the luck curve.

Inside the bound, search and learn­ing paid in an unex­pected order (all test­bed mea­sure­ments). More of the same search stopped paying, at about +2 points of W per dou­bling of sim­u­la­tions, and four times the sim­u­la­tions at a short hori­zon added noth­ing, while one more ply of look-ahead added 4.0 points [1.4, 6.6]: more sam­ples of a biased esti­mate only make the bias more cer­tain. The reli­able gains came from exact­ness and a better value. An exact solver for the per­fect-infor­ma­tion endgame added 1.9 points of W, and a win-prob­a­bil­ity model that knew whose turn it was cut held-out log-loss from 0.4835 to 0.4516 and added 2.25 points [0.3, 4.2].

Self-play has a limit of its own. Expert iter­a­tion trains a net­work on a search player's choices and lets it guide the next search [144], the loop behind AlphaZero [178]. In the test­bed it played about half a mil­lion games, improved once by roughly 5 Elo and plateaued: the appren­tice caught up with the expert in one gen­er­a­tion, and a sharper copy of the same search is not a stronger player. Self-play com­pounds only when each gen­er­a­tion's expert can find some­thing the last could not, which a learned value sup­plies and KataGo's play­out-cap ran­dom­iza­tion was built to feed [179]. Sequen­tial pro­mo­tion tests are weak evi­dence on their own: in the test­bed, one passed a can­di­date truly worth +2 Elo 11% of the time, so con­firm every pro­mo­tion on a fresh, fixed-size match (test­bed mea­sure­ment).

Markets: the environment must carry the statistics

Why are mar­kets the hard­est RL domain? Because every prop­erty that makes an envi­ron­ment trust­wor­thy fails there at once.

  1. Most of every reward is luck. The best machine-learn­ing fore­casts of indi­vid­ual US stock returns reach a monthly out-of-sample R² of 0.33% to 0.40% [180]. An annu­al­ized Sharpe ratio esti­mated from T years has a stan­dard error of roughly 1/√T [181], so a true Sharpe of 0.7 needs about 8 years to reach t = 2, and one quar­ter of daily data has a stan­dard error near 2 (com­puted).
  2. The reward drifts. Across 97 pub­lished pre­dic­tors, port­fo­lio returns were 26% lower out of sample and 58% lower after pub­li­ca­tion [182].
  3. The agent moves the market. Impact grows roughly with the square root of the size traded [183], so ignor­ing the agent's own orders rewards strate­gies that work only at zero size.
  4. Sim­u­la­tors are wrong where it mat­ters. Replay "does not sub­stan­tially adapt to or respond to the pres­ence of the exper­i­men­tal strat­egy", and for inter­ac­tive agent-based sim­u­la­tion "it is unclear if the market envi­ron­ment they pro­vide is real­is­tic" [184].
  5. Lan­guage models remem­ber the future. Told to ignore every­thing after 2010, GPT-4o still called quar­terly GDP growth against a 2.5% thresh­old with 98.0% accu­racy on the quar­ters after it, against 97.6% before [185].

So the envi­ron­ment, not the agent, must carry the sta­tis­tics. Five design rules follow.

Make an as-of API the only data path, gated on knowl­edge time. Every record car­ries three clocks: valid time (the period a fact describes), knowl­edge time (when a par­tic­i­pant could first have known it) and cap­ture time (when your pipe­line saw it) [186] [187], and only knowl­edge time answers "could the agent have known this at the as-of time?" The SEC's frames API "aggre­gates one fact for each report­ing entity that is last filed" [188], so it serves the value from the latest filing that reports the period: 4,195 of the 4,759 diluted-EPS facts for cal­en­dar Q2 2025 (88%) come from 2026 fil­ings, mostly the next year's com­par­a­tives, whose values can differ from what was know­able in August 2025 (com­puted from the public API on Octo­ber 18, 2026). Today's state can also encode tomor­row's label: in vul­ner­a­bil­ity triage, a naive random split with unfil­tered evi­dence inflated appar­ent prospec­tive recall 8.5-fold [189]. Split in time order, purged and embar­goed when labels span time [190].

Score every can­di­date on shared random draws. Any (PO)MDP can be made deter­min­is­tic by draw­ing its random num­bers up front and reusing them for every policy [191]. In the toy exe­cu­tion sim­u­la­tor, detect­ing a 0.23 basis-point improve­ment at 80% power took about 3.15 mil­lion trad­ing days on unpaired real­ized costs, about 5,400 paired on the same days and shocks, and about 37 once the envi­ron­ment replaced real­ized price luck with its known expec­ta­tion (toy sim­u­la­tion; Figure 29). Live, where two poli­cies cannot trade the same order, ran­dom­ized orders need about 7,400 orders, and the usual mid-price bench­mark for­gives the trader's own lin­ger­ing impact, which in the toy reversed two true rank­ings of sched­ules. Prefer expected scores where out­comes resolve late: in public work, reward­ing "the real­ized per-play out­come fails" [192].

Figure 29 Pair­ing on shared draws sup­plies most of the power, and most of that power exists only in a sim­u­la­tor. Days to detect a gain: trad­ing days (or orders) needed at 80% power to detect an exe­cu­tion improve­ment under four scor­ing designs, two pos­si­ble live and two only in a sim­u­la­tor or replay; drag the true improve­ment. What rewards pay for search: seven rewards a research gym could pay as a policy tries more cor­re­lated vari­ants of ten ideas, against 1,000 pure-noise ideas (rings), with the true Sharpe in green. Best of N noise back­tests: the expected best in-sample Sharpe of N skill-less six-year back­tests, by for­mula and by sim­u­la­tion, and the same pick over the next two years. Prove­nance. Toy sim­u­la­tions (an exe­cu­tion sim­u­la­tor and a research gym), which show the shape, not the size. Com­puted: n = (2.8 · SD / gain)², and the best-of-N curve from Bailey and López de Prado's for­mula, with sim­u­lated bands from the same toy.

Keep a trial ledger and charge the reward for the search. The expected best in-sample Sharpe of 100 skill-less six-year back­tests is about 1.03 (com­puted with Bailey and López de Prado's for­mula [193]), so "Sharpe 1.0, best of 100" is what pure search pro­duces. In a toy research gym (Figure 29), the naive in-sample reward paid 1,000 noise ideas more than ten honest ones, while White's Real­ity Check [194], boot­strapped over the whole ledger, passed noise at its nom­i­nal 5%.

Put costs and impact inside the tran­si­tion, and anchor money rewards to a cer­ti­fied bound on real data. Score an exe­cu­tion or stor­age-arbi­trage policy as a cap­ture ratio against a per­fect-fore­sight opti­mum on the same prices: the reward never sat­u­rates, any score above the bound is a bug, and the bound sizes the prize (in the toy exe­cu­tion sim­u­la­tor, 0.24 basis points over the closed-form sched­ule).

Check live base­lines and licenses before the archi­tec­ture. Most models in StockBench strug­gled to beat buy-and-hold [195], two of seven models made money in PolyBench [196], and in LiveTradeBench high LMArena scores did not imply better trad­ing [197]. Licenses bind before prices: Kalshi's data terms forbid train­ing an AI system on its data with­out con­sent [198], and from the US con­sol­i­dated tape's planned oper­a­tive date of April 1, 2027, train­ing a model on tape data is non-dis­play use [199].

Check yourself: Part VI

A fine-tune raises accu­racy by 2 points and the wrong-answer rate by 6. Under a con­fi­dence target of t = 0.5, did it help?

No. At t = 0.5 a wrong answer costs 1 point, so the score changes by about +2 − 6 = −4 points: the model has learned to guess.

The best legal player wins 79.3% against the greedy bot and the rack-seeing bound 92.8%. How close is it?

(79.3 − 50)/(92.8 − 50) ≈ 0.68 of the reach­able dis­tance; mea­sured against 100% it would look like 0.59, which mis­reads luck as a skill gap. It depends on the oppo­nent: 0.40 against the equity bot and 0.23 against the sim­u­la­tion bot, where most of the dis­tance is still open.

A strat­egy shows a Sharpe ratio of 1.5 over its first three months live. How much does that tell you?

Very little. One quar­ter of daily data gives a stan­dard error near 2, so a strat­egy with no skill reads above 1.5 about a fifth of the time.

The check­list that fol­lows col­lects every rule by the ledger line it pro­tects.

The practitioner checklist

What is the whole guide as a list you can run on Monday?

The deci­sion rules of Parts I to VI, grouped by the ledger line each pro­tects, each with one anchor­ing number. Use it to spec­ify an envi­ron­ment, audit a run, or read some­one else's claimed gain.

0. Instru­ment (Part I)

  1. Iso­late every­thing that scores from every­thing being scored, infra­struc­ture included, and re-test with each model gen­er­a­tion (an exploit agent that did no legit­i­mate work scored 73⁠–⁠100% on eight bench­marks).
  2. Prove sound­ness before learn­abil­ity: oracle at the max­i­mum, do-noth­ing far below, every canary at or below the floor (do-noth­ing beat GPT-4o on τ-bench air­line, 38% to 35%).
  3. Design refresh into the first release, and reward a ratio where one exists (tar­geted bench­marks passed 80% within 9⁠–⁠16 months).

1. Empty (Part II)

  1. Keep tasks in the band of the policy you train, and refill it as it drains (at p = 0.9 and 8 roll­outs, 43% of groups carry no gra­di­ent).
  2. Test the ver­i­fier before gen­er­at­ing: ref­er­ence passes, known-wrong fails, refor­mat­ted-cor­rect passes, degen­er­ate fails (rule check­ers miss 14% of cor­rect answers).
  3. Give every oper­a­tor a stated con­tract, and mea­sure its effect on pass rate and on one short­cut fea­ture.
  4. Esca­late roll­outs sequen­tially before retir­ing a task (ruling out a 2% pass rate takes 149 straight fail­ures).
  5. Dedu­pli­cate and split on a struc­tural sig­na­ture, and drop whole lin­eages of seeds that match eval­u­a­tion items (rephrased test items lifted one model from 28.7 to 95.3).
  6. Report real-task scores beside syn­thetic ones, buy seed fam­i­lies before vari­ants, and price a usable task through the funnel, not the LLM bill.

2. Wrong (Part III)

  1. Judge a false pos­i­tive by whether the policy can pro­duce it on pur­pose across prompts (test-skip­ping hacks spread to nearly every envi­ron­ment of one fron­tier run).
  2. Bound the false-pos­i­tive rate on a fixed adver­sar­ial set, denom­i­na­tor stated (zero in 299 gold-wrong sam­ples bounds it below 1%).
  3. Treat dif­fi­culty cal­i­bra­tion as an integrity con­trol (a lone hacked sample in a sat­u­rated group of 8 gets advan­tage √7).
  4. Never clip a par­tial-credit reward at the floor, and test that every canary trips its own defense (clipped, the Brier score pays 0.70 for false cer­tainty against 0.448 for the truth).
  5. Judge an exploit policy by its mean, gate detected hacks or price the penalty above bonus ÷ recall, and offer an abort action (cheat­ing on impos­si­ble tasks fell from 54% to 9%).
  6. Put judges behind a strict rule, ask narrow ques­tions in both orders, and audit the judge's false-pos­i­tive rate on rejects (a ref­er­ence answer cut judge fail­ures from 14 of 20 to 3 of 20).
  7. Hold out a gold signal for any learned reward and stop by diver­gence against √KL.
  8. Score the same out­puts a second way and run a random-reward con­trol on a second model family (re-scor­ing moved models 200 or more leader­board places).

3. Cor­rupted (Part IV)

  1. Mea­sure trainer-idle, gen­er­a­tor-idle and p99 roll­out time before redesign­ing (roll­out took 63⁠–⁠87% of pro­duc­tion steps).
  2. Cor­rect stal­e­ness and mis­match with the sam­pler's recorded log-prob­a­bil­i­ties, and alert on the sam­pler-trainer log-ratio (naive PPO 31.6, decou­pled 40.6 at stal­e­ness 4 to 16).
  3. Check trained against gen­er­ated length dis­tri­bu­tions under fast sched­ulers; size warm pools by L + z√L; key steps by request id; mask infra­struc­ture fail­ures.
  4. Train on the sam­pler's token ids with a writer mask, a con­stant loss divi­sor, masked trun­ca­tions and con­text resets as seg­ments (Search-R1: 0.431 masked against 0.343 unmasked).

4. Coarse (Part V)

  1. Record the recipe, not the trainer's name, and add a piece only if the mech­a­nism it acts on is present.
  2. If an oracle can score every option cheaply, dis­till its rank­ing with a soft target (given larger teach­ers, 74.4 for 1,800 GPU-hours against 67.6 for 17,920).
  3. Keep RL for ver­i­fier-only domains, priv­i­leged teach­ers, myopic ora­cles, beat­ing the teacher and expen­sive scores, and buy on-policy labels only when the stu­dent drifts.
  4. Put knowl­edge in through tokens and tools, use RL for reli­a­bil­ity, and hand exactly solv­able sub-prob­lems to solvers.

5. Unread­able (Part VI)

  1. Size the eval­u­a­tion before you run it (a 3-point gap needs about 1,000 paired ques­tions under Miller's illus­tra­tive assump­tions).
  2. Report Wilson or boot­strap inter­vals on small sets; pair on shared items and clus­ter on the seed (100 seeds cap near 333 effec­tive tasks at ρ = 0.3).
  3. State a null as an inter­val (an even 1,000-game match rules out only gains beyond ±22 Elo).
  4. Report cor­rect, wrong and abstained with the penalty, pass^k, and a worst decile scored on fresh attempts (a 60% mean allows pass^8 from 1.7% to 60%).
  5. Name every screen, give the oppo­nent its best effort, and report the vari­ants you tried (best of 10 equal check­points reads 7.5 points high on 100 items).
  6. In mar­kets, gate data on knowl­edge time, pair on shared draws, charge for the trial ledger and score against a cer­ti­fied bound (the best of 100 noise back­tests shows a Sharpe near 1.03).

6. Absent (Part VI)

  1. Mea­sure an ille­gal-infor­ma­tion bound against the oppo­nent you care about before set­ting a goal, and judge close­ness as a share of it (a full-rack oracle won only about 62% against a strong bot).
  2. Spend noth­ing on infor­ma­tion that does not exist at deci­sion time (in the same public test, rack infer­ence won only 51.9%).

Most of these checks have open imple­men­ta­tions to start from (Table 12); read each one's defaults against the rules above.

Table 12. Open build­ing blocks named in this guide, and what each is for.

ComponentWhat it isUse it for
OpenEnv [200]An open environment specification with a draft validatorDrawing the agent and infrastructure boundary; the L1 to L3 checks of Table 2
verifiers [201]Prime Intellect's library for packaging RL environments and evaluationsOne format for an environment, its reward and its evaluation
Terminal-Bench [63]A task format and harness for command-line tasks with human-reviewed testsTask bundles with hidden tests and exploit audits
TRL [124]Hugging Face's post-training library, including a GRPO trainerSmall and medium runs; record its defaults (Part V)
verl [106], AReaL [3], SkyRL [109], ROLL [202]Open RL trainers with asynchronous and off-policy modesLarge runs; their staleness knobs mean different things (Part IV)
vLLM [122]An inference engine whose OpenAI-compatible API can return token idsToken-in, token-out records at the model-call boundary

Then attach an eval­u­a­tion card to every RL result (Table 13). Each row answers a dif­fer­ent ques­tion about whether the loop learned.

Table 13. The eval­u­a­tion card: what to report with every RL result, and why.

ReportWhy
pass@1 on held-out prompts, with an interval over seedsReliability, and whether the difference is noise
pass@k up to a large k, start against finalSharpening against expansion
pass^k, and a worst decile scored on fresh attemptsConsistency; climbing the tail
Correct, wrong and abstained, with the penaltyKnowing against guessing
Results on held-out environments and on real tasks that seeded nothingTransfer beyond the training distribution
A random-reward control and a second model familyLearning against elicitation of a format
Decontamination method and evaluation datesMemorization
Infrastructure error rate and resource settingsSeveral points of noise
Variants tried, selection split, and any screening modelSelection and screening bias
The information bound, in stochastic or hidden-information domainsHow close is close
For judged rewards, the judge's false-positive rate on rule rejects and on swapped ordersWhether the judge, not the policy, earned the reward
A transcript sample of the highest-reward episodesHacks and verifier false positives

Finally, the signal ledger, filled in (Table 14).

Table 14. The signal ledger, filled in: where a roll­out's infor­ma­tion is lost, the number that anchors each loss, and what recov­ers it.

LineLossAnchorWhat recovers it
0. InstrumentThe environment is the scarce input, and its boundary leaksAn exploit agent that did no legitimate work scored 73-100% on eight audited benchmarksIsolation, soundness proofs, then a factory
1. EmptyTasks the policy always or never solves43% of groups zero-variance at p = 0.9, 8 rollouts (computed)Calibrate on the policy; refill the band; seed families over variants
2. WrongThe reward pays for something elseTest-skipping hacks spread to nearly every training environment of one frontier run; in a toy, an audited 4.0% false-positive rate became 72.5% hackedGrade state, not text; canaries that trip; exploit policies judged by the mean
3. CorruptedThe record no longer matches the policy31.6 naive, 40.6 decoupled, 42.0 synchronous (AIME 2024, staleness 4 to 16)Sampler log-probabilities, token-in token-out, masks
4. CoarseOne bit per episode when a ranking existedGiven larger teachers, 74.4 for 1,800 GPU-hours (distillation) against 67.6 for 17,920 (RL)Distill the oracle where one exists; RL for the five jobs
5. UnreadableThe effect is below the noise floor5 to 15 points of seed standard deviation on a 30-problem benchmarkPair, cluster, count; report tails and intervals
6. AbsentThe information does not exist for any legal playerA full-rack oracle won only about 62% against a strong bot; in the testbed, legal play covered 0.23 to 0.68 of the distance to a rack-seeing bound, depending on the opponentMeasure the bound against the opponent you care about; spend effort below it

An envi­ron­ment cannot make a domain less noisy or a hidden tile vis­i­ble. What it can do is make every number it emits honest about how much search, luck, leak­age and noise stand behind it: the trials it ran, the draws it shared, the clock it gated, the bound it mea­sured. An envi­ron­ment that reports those four things is a mea­sur­ing instru­ment. One that does not is a source of num­bers an opti­mizer will learn to please.

Methods: the toys and testbeds

What stands behind the toy and test­bed num­bers?

Each toy and test­bed is an unpub­lished pro­gram the author wrote and ran, so its num­bers cannot be checked against an out­side source (Table 15). Inter­vals over three seeds are Stu­dent t-inter­vals with two degrees of free­dom, about 2.2 times wider than a normal inter­val with the same stan­dard error.

Table 15. The toys and testbeds: setup, scale, seeds and inter­val method. All are unpub­lished author mea­sure­ments.

Name (kind)What it isScaleSeeds and samplesIntervalsUsed in
Route-planning task pool (toy)Cheapest route within a leg limit on a directed graph with integer costs; an exact dynamic program verifies; three noisy beam searches play weak, mid and strong solvers10 hand-written seeds grown by six operators over four levels into 10,644 verified tasks; a 32-weight softmax policy16 rollouts per task for pass rates; 2,498 parent-child pairs; RL with groups of 8 for 48,000 rollouts, 3 runs; distillation over 5 draws95% intervals for proportions; ±1 standard deviation bands over runs or drawsPart II
Coding-task factory (toy)Injects bugs into five small, densely tested Python libraries and passes each candidate through eight gates619 candidates, 486 valid, 80 usableOne passCounts onlyPart II
Addition policy (toy)A 103,055-parameter transformer learns two-digit addition from scratch with GRPO, scored by a gold grader and by verifiers of graded qualityGroups of 8; 100 to 200 steps per arm3 seeds per arm (2 for a few); a verifier audit of 2,999 answers95% t-intervals over seeds; Wilson intervals for audit ratesParts III to V
Rollout-system toys (toy)A three-process rollout system on one CPU with simulated heavy-tailed latency; a chain environment with power-law episode lengths; an environment server with Poisson creates and lognormal cold boots; two 40-merge tokenizersBatches of 16 to 32; up to 150 training steps3 repeats, seeds or task streams per arm95% intervals over repeatsPart IV
Oracle-distillation toys (toy)A linear softmax student learns from an oracle that scores every option, by six methods; a myopic-oracle variant; a corridor for on-policy labels64 options per position, 32 positions per step, 4,000 held-out positions4 to 20 seeds, stated in place±1 standard deviation bandsPart V
Measurement and market toys (toy)Binomial evaluations of a model with 62% accuracy; an item-response model for screened test sets; an order-execution simulator; a research gym with 10 honest and 1,000 noise ideas20 evaluations per test size; a 40,000-item pool with 2,000 kept itemsFixed random seeds; 20 pools per pointExact binomial where stated; ±1.96 standard deviations across poolsPart VI
Reconciliation environment (testbed)An agent reconciles an investment fund's book with custodian statements and an administrator's draft valuation through typed tools; the generator writes one true book and injects each break into one party's viewGenerated tasks with fresh names and numbers50 tasks × 8 rollouts for reward-shape tests; 11 canaries × 50 tasks; scripted agents and a random-search exploit policyMeans over tasksParts I to III
Crossword tile game (testbed)A two-player engine with greedy, equity and simulation bots and search players; Qwen3.5‑4B with low-rank adapters on one GPU, trained by GRPO for 300 steps and by listwise distillation for 5 GPU-hours on 420,000 positions valued by CPU search200 to 2,000 seat-swapped pairs of games per comparison; 20,000 greedy-against-greedy games for luck; about half a million self-play gamesEach shuffled bag played twice with seats swapped95% t-intervals over pairs; Elo from a ladder with fixed ratingsParts V and VI

Notes

  1. Scrabble is a trademark of Hasbro, Inc. in the United States and Canada and of Mattel, Inc. elsewhere. The testbed is an independent implementation of a two-player crossword tile game with a shuffled bag and hidden racks; it is not affiliated with either company. ↩
  2. With the population standard deviation, a group of eight with one bonus b has mean b/8 and standard deviation b√7/8, so the hacked sample's advantage is (7b/8) / (b√7/8) = √7. With the sample standard deviation it is about 2.47; the cancellation of b is the same. ↩
  3. The number of slots refilling at any moment is roughly Poisson with mean L, so L + z√L covers its upper quantile: the square-root staffing rule of queueing theory. Erlang B, the exact loss formula, gives 77 here. ↩

References

  1. Zhu et al., Establishing Best Practices for Building Rigorous Agentic Benchmarks (the Agentic Benchmark Checklist), arXiv:2507.02825 (2025)
  2. Baker et al., Monitoring Reasoning Models for Misbehavior and the Risks of Promoting Obfuscation (2025)
  3. Fu et al., AReaL: A Large-Scale Asynchronous Reinforcement Learning System for Language Reasoning, arXiv:2505.24298 (2025)
  4. Qwen Team, Qwen3 Technical Report, arXiv:2505.09388 (2025)
  5. Miller, Adding Error Bars to Evals: A Statistical Approach to Language Model Evaluations, arXiv:2411.00640 (2024)
  6. Del Solar, Bayesian Rack Inference in Macondo (2026)
  7. Bowyer, Aitchison and Ivanova, Position: Don't Use the CLT in LLM Evals With Fewer Than a Few Hundred Datapoints (ICML 2025)
  8. MATH-500 dataset card (Hugging Face)
  9. Cobbe et al., Training Verifiers to Solve Math Word Problems (GSM8K), arXiv:2110.14168 (2021)
  10. Hendrycks et al., Measuring Massive Multitask Language Understanding (MMLU), arXiv:2009.03300 (2020)
  11. SWE-bench leaderboards
  12. Jain et al., LiveCodeBench: Holistic and Contamination Free Evaluation of Large Language Models for Code, arXiv:2403.07974 (2024)
  13. Berkeley Function Calling Leaderboard
  14. Yao et al., τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains (2024)
  15. Shao et al., DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models, arXiv:2402.03300 (2024)
  16. Richards and Amir, Opponent Modeling in Scrabble (IJCAI 2007)
  17. Model Context Protocol specification, Tools (2026-07-28 revision)
  18. OpenEnv RFC 001: Abstractions (Hugging Face OpenEnv repository)
  19. BenchJack: AI agent benchmark hackability scanner, README (UC Berkeley, 2026)
  20. Berkeley RDI, trustworthy agent benchmarks (blog, April 2026)
  21. GSO benchmark: leaderboard and changelog (fetched October 2026)
  22. OpenAI, OpenAI o1 System Card (2024-09-12)
  23. OpenAI, Learning to reason with LLMs (2024-09-12)
  24. DeepSeek-AI, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, arXiv:2501.12948 (2025)
  25. DeepSeek-AI, DeepSeek-V3.2, arXiv:2512.02556 (2025)
  26. Prime Intellect, Scaling Agentic RL: 365,000+ Environments for SWE, Terminal, and Search (2026)
  27. E2B pricing (fetched October 2026)
  28. DeepSeek, DeepSeek Elastic Compute (DSec): a sandbox infrastructure for agent training, arXiv:2609.22978 (2026)
  29. Denain and Barber, An FAQ on RL environments, Epoch AI (2026-01-12)
  30. Mechanize, Cheap RL tasks will waste compute (2025-08-18)
  31. CVDP: Comprehensive Verilog Design Problems, arXiv:2506.14074 (2025)
  32. NVIDIA, Nemotron 3 Ultra in agentic RTL coding (2026-07-26)
  33. APEX-Agents, arXiv:2601.14242 (2026-01-20)
  34. Mercor, APEX-Agents leaderboard (fetched October 2026)
  35. GSO leaderboard data: scores by date and by speedup threshold (fetched October 2026)
  36. BRIGHT: A Realistic and Challenging Benchmark for Reasoning-Intensive Retrieval, arXiv:2407.12883 (2024)
  37. BRIGHT leaderboard (fetched October 2026)
  38. OpenEnv RFC 008: Environment auto-validation (draft, Hugging Face OpenEnv repository)
  39. Qwen Team, Qwen3-Coder: Agentic Coding in the World (2025-07-22)
  40. Yu et al., DAPO: An Open-Source LLM Reinforcement Learning System at Scale, arXiv:2503.14476 (2025)
  41. Hu et al., BroRL: Scaling Reinforcement Learning via Broadened Exploration, arXiv:2510.01180 (2025)
  42. Cobbe et al., Leveraging Procedural Generation to Benchmark Reinforcement Learning, arXiv:1912.01588 (2019)
  43. Bae et al., Online Difficulty Filtering for Reasoning Oriented Reinforcement Learning, arXiv:2504.03380 (2025)
  44. Yang et al., SWE-smith: Scaling Data for Software Engineering Agents, arXiv:2504.21798 (2025)
  45. Wu et al., Envs-FORGE: Frontier-Optimized Reward-Grounded Environment Synthesis for Agent RL, arXiv:2608.14312 (2026)
  46. Wang et al., Self-Instruct: Aligning Language Models with Self-Generated Instructions, arXiv:2212.10560 (2022)
  47. Zhou et al., Self-Challenging Language Model Agents, arXiv:2506.01716 (2025)
  48. Huang et al., From Accuracy to Robustness: A Study of Rule- and Model-based Verifiers in Mathematical Reasoning, arXiv:2505.22203 (2025)
  49. Wikipedia, Metamorphic testing
  50. Mirzadeh et al., GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models, arXiv:2410.05229 (2024)
  51. Li et al., GSM-Plus: A Comprehensive Benchmark for Evaluating the Robustness of LLMs as Mathematical Problem Solvers, arXiv:2402.19255 (2024)
  52. Abdin et al., Phi-4 Technical Report, arXiv:2412.08905 (2024)
  53. He et al., Skywork Open Reasoner 1 Technical Report, arXiv:2505.22312 (2025)
  54. Anthropic, Demystifying evals for AI agents (2026)
  55. Lambert et al., Tülu 3: Pushing Frontiers in Open Language Model Post-Training, arXiv:2411.15124 (2024)
  56. Yang et al., Rethinking Benchmark and Contamination for Language Models with Rephrased Samples, arXiv:2311.04850 (2023)
  57. Gandhi et al., Endless Terminals: Scaling RL Environments for Terminal Agents, arXiv:2601.16443 (2026)
  58. Zeng et al., RLVE: Scaling Up Reinforcement Learning for Language Models with Adaptive Verifiable Environments, arXiv:2511.07317 (2025)
  59. Wang et al., Agent World Model: Infinity Synthetic Environments for Agentic Reinforcement Learning, arXiv:2602.10090 (2026)
  60. Pan et al., Training Software Engineering Agents and Verifiers with SWE-Gym, arXiv:2412.21139 (2024)
  61. Huang et al., R-Zero: Self-Evolving Reasoning LLM from Zero Data, arXiv:2508.05004 (2025)
  62. Badertdinov et al., SWE-rebench V2: Language-Agnostic SWE Task Collection at Scale, arXiv:2602.23866 (2026)
  63. Merrill et al., Terminal-Bench: Benchmarking Agents on Hard, Realistic Tasks in Command Line Interfaces, arXiv:2601.11868 (2026)
  64. Kimi Team, Kimi k1.5: Scaling Reinforcement Learning with LLMs, arXiv:2501.12599 (2025)
  65. Skalse et al., Defining and Characterizing Reward Hacking (2022)
  66. Xu et al., TinyV: Reducing False Negatives in Verification Improves RL for LLM Reasoning (2025)
  67. Zheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (2023)
  68. Zhong et al., ImpossibleBench: Measuring LLMs' Propensity of Exploiting Test Cases (2025)
  69. METR, Recent Frontier Models Are Reward Hacking (2025)
  70. VentureBeat, DeepSWE finds Claude Opus exploiting a benchmark loophole (2026)
  71. SWE-bench Pro repository, issue #93: Git reward hacking in SWE-bench Pro OSS
  72. Roth et al., Hack-Verifiable Terminal Bench: Evaluating Reward Hacking in Terminal Tasks (2026)
  73. Anthropic, System Card: Claude Opus 5.5 (2026)
  74. Gunjal et al., Rubrics as Rewards: Reinforcement Learning Beyond Verifiable Domains, arXiv:2507.17746 (2025)
  75. Viswanathan et al., Checklists Are Better Than Reward Models For Aligning Language Models, arXiv:2507.18624 (2025)
  76. Mahmoud et al., Reward Hacking in Rubric-Based Reinforcement Learning, arXiv:2605.12474 (2026)
  77. Prime Intellect, Systematic Reward Hacking and Prime Sprints (2026)
  78. Anthropic, System Card: Claude Sonnet 4.5 (2025)
  79. Kalai et al., Why Language Models Hallucinate (2025)
  80. Du et al., Measuring the Checker: Mutation Analysis for GPU-Kernel Benchmark Oracles (2026)
  81. Mistral AI, Magistral, arXiv:2506.10910 (2025)
  82. MacDiarmid et al., Natural Emergent Misalignment from Reward Hacking in Production RL (2025)
  83. Anthropic, From shortcuts to sabotage: natural emergent misalignment from reward hacking (2025)
  84. Gao, Schulman and Hilton, Scaling Laws for Reward Model Overoptimization (2022)
  85. Rafailov et al., Scaling Laws for Reward Model Overoptimization in Direct Alignment Algorithms (2024)
  86. Coste et al., Reward Model Ensembles Help Mitigate Overoptimization, arXiv:2310.02743 (ICLR 2024)
  87. Eisenstein et al., Helping or Herding? Reward Model Ensembles Mitigate but do not Eliminate Reward Hacking, arXiv:2312.09244 (2023)
  88. Hugging Face, What's going on with the Open LLM Leaderboard? (2023)
  89. Hugging Face, Fixing Open LLM Leaderboard with Math-Verify (2025)
  90. Aleithan et al., SWE-Bench+: Enhanced Coding Benchmark for LLMs (2024)
  91. Gradient Science, GSM8K-Platinum: Revealing Performance Gaps in Frontier LLMs (2025)
  92. Wang et al., Large Language Models are not Fair Evaluators (2023)
  93. Balepur et al., Artifacts or Abduction: How Do LLMs Answer Multiple-Choice Questions Without the Question? (2024)
  94. Shao et al., Spurious Rewards: Rethinking Training Signals in RLVR (2025)
  95. Seer: Online Context Learning for Fast Synchronous LLM Reinforcement Learning (2025)
  96. Team Olmo, Olmo 3 (2025)
  97. RollArt: Disaggregated Multi-Task Agentic RL Training at Scale (2025)
  98. Laminar: A Scalable Asynchronous RL Post-Training Framework (2025)
  99. RollPacker: Mitigating Long-Tail Rollouts for Fast, Synchronous RL Post-Training (2025)
  100. verl documentation: One Step Off Policy Async Trainer
  101. Prime Intellect, INTELLECT-3: Technical Report (2025)
  102. Mercor, Training frontier knowledge work agents: a 397B RL training guide with SkyRL (2026)
  103. Prime Intellect, GLM-5.2 RL weight transfer in 4 seconds using NIXL and ModelExpress (2026)
  104. APRIL: Active Partial Rollouts in Reinforcement Learning to Tame Long-tail Generation (2025)
  105. ROLL Flash: Accelerating RLVR and Agentic Training with Asynchrony (2025)
  106. verl documentation: Fully Async Policy Trainer
  107. Hilton, Cobbe and Schulman, Batch size-invariance for policy optimization (2021)
  108. MiniMax, The MiniMax-M2 Series (2026)
  109. SkyRL documentation: Fully Async Training
  110. Stabilizing MoE Reinforcement Learning by Aligning Training and Inference Routers (2025)
  111. Defeating the Training-Inference Mismatch via FP16 (2025)
  112. verl documentation: Rollout Correction
  113. Every Step Evolves: Scaling Reinforcement Learning for Trillion-Scale Thinking Model (2025)
  114. Khatri et al., The Art of Scaling Reinforcement Learning Compute for LLMs (ScaleRL), arXiv:2510.13786 (2025)
  115. vLLM blog, IsoExec: Unified Execution to Eliminate Trainer-Inference Mismatch in SkyRL (2026)
  116. GLM-5: from Vibe Coding to Agentic Engineering (2026)
  117. DeepSeek-AI, DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence, arXiv:2606.19348 (2026)
  118. Little's law, Wikipedia (after Little, Operations Research, 1961)
  119. Hugging Face, OpenEnv tutorial: How OpenEnv environments scale
  120. Anthropic, Quantifying infrastructure noise in agentic coding evals (2026)
  121. QEMU documentation: Virtual Machine Generation ID device
  122. vLLM blog, No More Retokenization Drift: Returning Token IDs via the OpenAI Compatible API Matters in Agent RL (2025)
  123. Jin et al., Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning (2025)
  124. Hugging Face TRL documentation: GRPO Trainer
  125. Fireworks documentation: Multi-turn cost comparison
  126. Kimi K2.5: Visual Agentic Intelligence (2026)
  127. Zhou et al., MEM1: Learning to Synergize Memory and Reasoning for Efficient Long-Horizon Agents, arXiv:2506.15841 (2025)
  128. Liu et al., Understanding R1-Zero-Like Training: A Critical Perspective, arXiv:2503.20783 (2025)
  129. AgentRL: Scaling Agentic Reinforcement Learning with a Multi-Turn, Multi-Task Framework (2025)
  130. Feng et al., Group-in-Group Policy Optimization for LLM Agent Training (2025)
  131. τ²-Bench: Evaluating Conversational Agents in a Dual-Control Environment (2025)
  132. RAGEN: Understanding Self-Evolution in LLM Agents via Multi-Turn Reinforcement Learning (2025)
  133. Ivison et al., Unpacking DPO and PPO: Disentangling Best Practices for Learning from Preference Feedback, arXiv:2406.09279 (2024)
  134. Schulman and Thinking Machines Lab, LoRA Without Regret (2025)
  135. Yue et al., VAPO: Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks, arXiv:2504.05118 (2025)
  136. He et al., JustRL: Scaling a 1.5B LLM with a Simple RL Recipe, arXiv:2512.16649 (2025)
  137. Bridgewater AIA Labs and Thinking Machines, Learning to replicate expert judgment in financial tasks (2026)
  138. Liu et al., ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models, arXiv:2505.24864 (2025)
  139. Shah et al., A Comedy of Estimators: On KL Regularization in RL Training of LLMs, arXiv:2512.21852 (2025)
  140. Tang et al., On a few pitfalls in KL divergence gradient estimation for RL, arXiv:2506.09477 (2025)
  141. Huang et al., The 37 Implementation Details of Proximal Policy Optimization, ICLR Blog Track (2022)
  142. Silver et al., Mastering the game of Go without human knowledge, Nature (2017), preprint
  143. Ciosek and Whiteson, Expected Policy Gradients, AAAI (2018)
  144. Anthony, Tian and Barber, Thinking Fast and Slow with Deep Learning and Tree Search (Expert Iteration), NeurIPS (2017)
  145. Ruoss et al., Amortized Planning with Large-Scale Transformers: A Case Study on Chess, arXiv:2402.04494 (2024)
  146. Chen et al., Learning by Cheating, CoRL (2019)
  147. Rusu et al., Policy Distillation, arXiv:1511.06295 (2015)
  148. Gemma Team, Gemma 3 Technical Report, arXiv:2503.19786 (2025)
  149. DeepSeek-AI, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, arXiv:2501.12948v1 (2025)
  150. Weihs et al., Bridging the Imitation Gap by Adaptive Insubordination (ADVISOR), NeurIPS (2021)
  151. Li et al., Sequential Beats Joint: On the Interplay between On-Policy Distillation and RLVR, arXiv:2609.04108 (2026)
  152. Chu et al., SFT Memorizes, RL Generalizes: A Comparative Study of Foundation Model Post-training, arXiv:2501.17161 (2025)
  153. Ross, Gordon and Bagnell, A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning (DAgger), AISTATS (2011)
  154. Agarwal et al., On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes (GKD), ICLR (2024)
  155. Lu and Thinking Machines Lab, On-Policy Distillation (2025)
  156. Zhou et al., LIMA: Less Is More for Alignment, arXiv:2305.11206 (2023)
  157. Yue et al., Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?, arXiv:2504.13837 (2025)
  158. Mukherjee et al., Reinforcement Learning Finetunes Small Subnetworks in Large Language Models, arXiv:2505.11711 (2025)
  159. Shenfeld et al., RL's Razor: Why Online Reinforcement Learning Forgets Less, arXiv:2509.04259 (2025)
  160. Wu et al., The Invisible Leash: Why RLVR May or May Not Escape Its Origin, arXiv:2507.14843 (2025)
  161. Gekhman et al., Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations?, EMNLP (2024)
  162. Kirichenko et al., AbstentionBench: Reasoning LLMs Fail on Unanswerable Questions, arXiv:2506.09038 (2025)
  163. Agarwal et al., Deep Reinforcement Learning at the Edge of the Statistical Precipice (NeurIPS 2021)
  164. Hochlehnert et al., A Sober Look at Progress in Language Model Reasoning (2025)
  165. Singh et al., The Leaderboard Illusion (2025)
  166. Payton, Greenstone and Schenker, Overlapping confidence intervals or standard error intervals: what do they mean in terms of statistical significance? (2003)
  167. Design effect (Kish), Wikipedia
  168. D'Oro et al., Computer Use at the Edge of the Statistical Precipice (2026)
  169. Anthropic, System Card: Claude Opus 5.5 (2026)
  170. Duplicate Scrabble, Wikipedia
  171. Stockfish Fishtest wiki, Fishtest mathematics
  172. Burch et al., AIVAT: A New Variance Reduction Technique for Agent Evaluation in Imperfect Information Games (2017)
  173. Wei et al., Measuring short-form factuality in large language models (SimpleQA), arXiv:2411.04368 (2024)
  174. METR, Time horizons
  175. Phang et al., Adversarially Constructed Evaluation Sets Are More Challenging, but May Not Be Fair (2021)
  176. Melis, Dyer and Blunsom, On the State of the Art of Evaluation in Neural Language Models (2017)
  177. Chess.com, AlphaZero Crushes Stockfish In New 1,000-Game Match (2018)
  178. Silver et al., Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm (2017)
  179. Wu, Accelerating Self-Play Learning in Go (KataGo, 2019)
  180. Gu, Kelly and Xiu, Empirical Asset Pricing via Machine Learning (Review of Financial Studies, 2020)
  181. Lo, The Statistics of Sharpe Ratios (Financial Analysts Journal, 2002)
  182. McLean and Pontiff, Does Academic Research Destroy Stock Return Predictability? (Journal of Finance, 2016)
  183. Tóth et al., Anomalous price impact and the critical nature of liquidity in financial markets (2011)
  184. Balch et al., How to Evaluate Trading Strategies: Single Agent Market Replay or Multiple Agent Interactive Simulation? (2019)
  185. Lopez-Lira, Tang and Zhu, The Memorization Problem: Can We Trust LLMs' Economic Forecasts? (2025)
  186. Akidau et al., The Dataflow Model (PVLDB, 2015)
  187. FRED API documentation, real-time periods
  188. SEC, EDGAR application programming interfaces
  189. Alpay and Alpay, Compute-Budgeted Exploitability Evidence Graphs for Prospective Vulnerability Triage (2026)
  190. López de Prado, Advances in Financial Machine Learning (Wiley, 2018), ch. 7
  191. Ng and Jordan, PEGASUS: A Policy Search Method for Large MDPs and POMDPs (2000)
  192. Singh, Reddy and Chopra, Verifiable Rewards for Calibrated Probabilistic Forecasting (2026)
  193. Bailey and López de Prado, The Deflated Sharpe Ratio (2014)
  194. White, A Reality Check for Data Snooping (Econometrica, 2000)
  195. StockBench: Can LLM Agents Trade Stocks Profitably In Real-world Markets? (2025)
  196. Cheng, Liu and Long, PolyBench: Benchmarking LLM Forecasting and Trading Capabilities on Live Prediction Market Data (2026)
  197. Yu, Li and You, LiveTradeBench: Seeking Real-World Alpha with Large Language Models (2025)
  198. Kalshi, Data Terms of Service
  199. DataCT, US Consolidated Tape: CT Plan Policies v1.2
  200. Hugging Face, OpenEnv repository
  201. Prime Intellect, verifiers: a library for RL environments and evaluations
  202. Alibaba, ROLL: a scaling library for reinforcement learning with large language models
← All explainersRL environments as a business →