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.
Reinforcement learning (RL) trains a model by letting it act, scoring what it did and making high-scoring behavior more likely. For a language-model agent, one attempt, called a rollout or episode, is a chain of model calls and tool calls that ends in an answer or a changed system. A training run is millions of them, and everything the model learns arrives through one narrow channel: the number the environment returns at the end.
That makes an RL environment a measuring instrument with an optimizer pointed at it. Every rollout buys information, and the environment decides whether the purchase returns signal, noise or a lie. Most environment-side failures, from reward hacking to gains that vanish on re-evaluation, are the instrument failing in one of six ways. Its tasks can be empty: the policy always or never succeeds, so nothing is learned. Its reward can be wrong, paying for something other than the task. The training record can be corrupted, no longer matching what the policy did. The signal can be coarse, one bit per episode when a full ranking was available. The effect can be unreadable, smaller than the evaluation's noise floor. And the information needed to win can be absent, unavailable to any legal player. This guide calls that list the signal ledger (six losses, plus line 0 for the instrument itself) and works through it in order.
The guide is for a technically literate reader who wants the mechanics: how to specify an environment a lab would trust, where a run will waste compute or mislead you, and how to judge someone else's claimed gain. Each section opens with its question and closes with a decision rule, and the rules are collected in a checklist at the end.
Key ideas
- Prove soundness before anything else. A do-nothing agent scored 38% on τ-bench's airline tasks, above a GPT-4o agent's 35% [1]. Run do-nothing, the oracle and every scripted hack before any pass rate.
- A task teaches only while the policy sometimes fails. At a 90% pass rate with 8 rollouts per group, 43% of groups carry no gradient (computed). Calibrate on the policy you train, and count seed families, not variants.
- Judge a false positive by its gradient, not its rate. In one frontier reasoning run, hacks that skipped the tests "quickly get reinforced and become systemic, affecting nearly every training environment" [2]. In a toy, a verifier with an audited 4.0% false-positive rate drove 72.5% of samples to hack, because the hole worked on every prompt.
- The rollout record is a contract. Keep the sampler's token ids, log-probabilities, versions and masks. At staleness bounds of 4 to 16, naive PPO averaged 31.6 on AIME 2024 and a staleness-aware objective 40.6, against 42.0 for synchronous training (computed from one run per setting) [3].
- If something can already score every option cheaply, stop sampling and distill its ranking. Given larger Qwen3 teachers already trained, Qwen3‑8B reached 74.4 on AIME 2024 with on-policy distillation for 1,800 GPU-hours, against 67.6 with RL for 17,920; the teachers' own training is not counted [4].
- RL makes reliable what a model can already sample. Put knowledge in through tokens and tools, and pay for abstention, or training teaches guessing.
- A score is a sample. Pair, cluster and count before you run: a 3-point gap needs about 1,000 questions under Miller's illustrative paired assumptions [5] and about 4,100 per arm unpaired at 62% accuracy, and at an intra-seed correlation of 0.3, 100 seeds never carry more than about 333 independent tasks, however many variants you generate (computed).
- Measure the information bound before you set a goal. A player that saw its opponent's whole rack won only about 62% against a strong bot [6]. In the tile-game testbed, the best legal player covered 0.68 of the distance from a coin flip to a rack-seeing bound against a greedy bot, and 0.23 against a simulation bot (testbed measurement).
How to read this guide
Four kinds of number. Most numbers cite a public paper, report, documentation page or leaderboard; papers and system cards are cited as they stand, "self-reported" marks a company's claim about its own system in a blog, its documentation or a leaderboard it runs, and "reported" a press account. Computed numbers are arithmetic you can redo from a stated formula. Toy simulations are small seeded programs that isolate one mechanism and show the shape of an effect, never its size: a route-planning task pool (Part II), a 0.1M-parameter transformer learning addition (Parts III to V), a rollout system with heavy-tailed latency (Part IV) and an order-execution simulator (Part VI). Testbed measurements come from two larger testbeds the author built. Toy and testbed numbers are unpublished, so no rule rests on them alone; the methods table at the end gives each one's setup, seeds and interval method.
Two testbeds. The reconciliation environment (Parts I to III) asks an agent to reconcile an investment fund's book with its custodian's statements and its administrator's draft valuation, find the "breaks" where they disagree, post corrections and sign off a net asset value within 1 basis point (0.01%). The crossword-tile-game testbed1 (Parts V and VI) is a two-player word game with a shuffled bag and racks the opponent cannot see, in which a search player can score every legal move. That makes it a clean instrument for luck ceilings, distillation from a search oracle, paired evaluation, search versus learning, and the limits of self-play.
The terms below are used in exactly these senses throughout, and each is also defined where it first appears.
Glossary: 27 terms defined once, then 16 benchmarks, units and game terms
Glossary for the whole guide.
| Term | Meaning in this guide |
|---|---|
| Environment | A 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 bundle | Instruction, environment image or state, tools, oracle solution, hidden verifier, canary trajectories, metadata and a pinned version, shipped together. |
| Verifier, judge, reward | The program (verifier) or model (judge) that turns a finished episode into a number (the reward). |
| Oracle | A reference solver that reaches maximum reward through the agent's own tools. In Part V, also a teacher that can score every option. |
| Floor | The reward of doing nothing. Keep it exactly 0. |
| Canary | A scripted hack trajectory that must score at or below the floor and must trip the defense it was written to probe. |
| Exploit policy | A policy that searches for reward without doing the task; judged by its mean reward, never by its best rollout. |
| Rollout, episode | One sampled attempt, including every model call and tool call. |
| Group | The G rollouts sampled for one prompt and compared with each other, as in GRPO. |
| Advantage | How 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^k | The 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 band | Pass 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 group | A group whose rollouts all earn the same reward; it contributes no gradient. |
| False negative, false positive | The verifier rejects a correct answer, or pays a wrong one. |
| Reachable false positive | A false positive the policy can produce on purpose, across prompts; the dangerous kind. |
| Reward hacking | The policy earning reward through a hole in the verifier rather than by doing the task. |
| Over-optimization | A proxy reward keeps rising while the true reward peaks and falls. |
| Behavior policy, proximal policy | The policy version and numerics that actually sampled the tokens; the recent policy that centers the trust region during an update. |
| Staleness | The trainer's policy version minus the version that sampled a token. |
| Training-inference mismatch | The sampler and the trainer computing different probabilities for the same weights and tokens. |
| Token-in, token-out | Training 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 floor | The smallest difference an evaluation design can detect at a stated power. |
| Paired (duplicate) evaluation | Scoring both arms on the same items, seeds or deals so that shared luck cancels. |
| Design effect | The variance inflation 1 + (m − 1)ρ for clusters of m items with correlation ρ. |
| Luck ceiling | The best win rate any legal player could reach, given the domain's hidden information and randomness. |
| As-of time, knowledge time | The instant an episode's world is frozen, and the moment a fact first became knowable. Gate tools on knowledge time. |
Benchmarks, units and game terms named in the text.
| Name | What it is |
|---|---|
| AIME 2024 | The 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-500 | 500 competition problems drawn from the test set of the MATH dataset [8]. |
| GSM8K | Grade-school math word problems [9]; GSM8K-Platinum is a relabeled copy (Part III). |
| MMLU | Multiple-choice questions across 57 subjects, from elementary mathematics to law [10]. |
| SWE-bench Verified | A human-curated subset of 500 real GitHub issues; an agent's patch counts only if the repository's tests pass [11]. |
| LiveCodeBench | Coding problems collected over time from LeetCode, AtCoder and Codeforces contests, so a model can be scored on problems published after its training data [12]. |
| BFCLv3 | Version 3 of the Berkeley Function Calling Leaderboard, which scores whether a model's tool calls are correct, including multi-turn calls [13]. |
| τ-bench | Simulated customer-service tasks (airline, retail) in which an agent uses tools and talks to a simulated user [14]. |
| Terminal-Bench 2.0 | 89 human-reviewed tasks an agent completes in a command-line sandbox (Part II). |
| nDCG@10 | Normalized discounted cumulative gain over the top ten retrieved documents, a ranking score in which 100 is a perfect ranking. |
| Elo | A rating scale for head-to-head play: a 100-point gap means the stronger side expects to score about 64% (computed). |
| k3 estimator | The 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 asymptote | The 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). |
| Nat | A unit of information or entropy measured with natural logarithms; one nat is about 1.44 bits. |
| Bingo | In the tile game, playing all seven tiles of a rack in one move, which earns a 50-point bonus [16]. |
| Blank tile | One 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 environment, why did it become the scarce input to frontier training, and what must it prove before anyone trains on it?
Line 0 of the ledger is the instrument itself: a boundary between what the agent can touch and what grades it, whose binding input is sound tasks, not sandboxes.
Three sides of one boundary
What exactly does a lab train on? In this guide an environment is a task (or a world that hosts many tasks), the tools and state an agent acts on, and a verifier that runs out of the agent's reach and turns the finished episode into a reward; when a model does the scoring, it is a judge. Think of an exam hall: the candidate holds the pen, never the answer key, and the paper is marked after the candidate leaves. The picture has three sides (Figure 1).
- Agent side. Typed tools and nothing else. Observations never carry the reward or any ground truth, because whatever the agent can read, the optimizer will learn to use. A malformed call returns an error the model can recover from, as the Model Context Protocol (MCP), the common standard for tool calls, asks: "actionable feedback that language models can use to self-correct" [17].
- Infrastructure side. Episode control: reset, step, the clock, the call that starts verification, and the bank that holds rewards that resolve later. An agent that calls any of these has crossed the boundary, and the harness logs an integrity event, not an error to retry.
- Verifier side. The verifier runs once, after the episode, in its own sandbox with no network. It reads the exported final state, both what changed and what should not have, and returns a scalar plus named components. Tests, answer key, reference solution and scripted hacks live here, never where the agent runs.
OpenEnv, an open environment specification hosted by Hugging Face, draws the same line: simulation controls such as reset and step "are never exposed as MCP tools", because an agent that could reset "would learn that every error is recoverable" [18]. One trap: OpenEnv's observation type carries a reward field for the training loop, so a harness that forwards observations verbatim shows the agent its own score. Strip it at the boundary.
When public audits go looking, the holes sit in this boundary, not in the model or the compute. A UC Berkeley team's exploit agent, BenchJack, scored 73% to 100% on eight widely used agent benchmarks (4,458 tasks) without doing the work: agent-written test hooks made every SWE-bench Verified test pass, configuration files exposed WebArena's reference answers, and one validator gave full marks to an empty object [19]. Their rule: "Isolate everything that scores from everything being scored" [20]. The boundary moves as models improve. GSO, a code-optimization benchmark, cut its containers off from code hosts in July 2026 "after we observed newer models were sometimes using arbitrary techniques to fetch upstream commits" [21]. And infrastructure must be unreachable, not merely unlisted: in OpenAI's o1 evaluations a capture-the-flag container failed to start, so o1-preview scanned the network, found the evaluation host's Docker API exposed by a misconfiguration, and started a fresh copy of the container with the command cat flag.txt to read the flag [22] (crossing 6 in Figure 1).
Why now: checkable tasks were never stockpiled
Why did environments, rather than data or compute, become the bottleneck? Pretraining scaled on text the web had already written. After OpenAI's o1 (September 2024) and DeepSeek-R1 (January 2025) showed that rewarding checked answers in math and code drives reasoning, RL on verifiable tasks became the way labs add capability [23] [24]. That consumes something nobody had stockpiled: tasks with a reliable check, set in places that look like real work.
Reports now count environments in the thousands and claim hundreds of thousands, though each counts a different unit. DeepSeek-V3.2 had an agent synthesize 1,827 environments holding 4,417 tasks, inside a post-training budget "exceeding 10% of the pre-training cost" [25]; Prime Intellect packages about 365,000 tasks from 23 task sets for software, terminal and search work (self-reported) [26]. One training step explains the concurrency. GRPO (group relative policy optimization), the method DeepSeek-R1 trained with, samples a group of rollouts for each prompt and scores each against the group's mean. A step of 64 prompts with 8 rollouts each needs 512 environment instances live at once (computed).
None of the plumbing is scarce any more: a managed sandbox lists at $0.000014 per vCPU-second, about five cents an hour [27], and DeepSeek reports more than 380,000 concurrent sandboxes [28]. What each of those 512 slots needs is a task whose reward is sound and whose pass rate sits where the current policy learns; in the words of one of Epoch AI's interviewees, "Maintaining quality while scaling is the number one bottleneck that people see" [29].
What a task is worth
Who pays for environments, and what does one task cost against what it consumes? In September 2025 The Information reported that Anthropic had discussed spending more than $1 billion on RL environments over the following year, as Epoch AI's FAQ on the market recounts [29]. Epoch's interviews put contracts at "six to seven figures per quarter", tasks at "$200–$2,000 per task", website replicas ("UI gyms") at around $20k each and a high-fidelity replica of a product such as Slack at about $300k, with exclusive deals "roughly 4–5x" the price [29]. Compute will "still dwarf RL environment spending" [29], so price a task by its draw on compute. Mechanize puts that at about $480 per training run, assuming 500,000 tokens per attempt (its one-year extrapolation from about 100,000 when it wrote), 64 attempts and an API price of $15 per million tokens [30]; at 100,000 tokens the same arithmetic gives about $96, and at a lab's internal cost less (computed). Either way, a $50 task whose rollouts all fail, or all pass, burns two to ten times its price on every run and teaches nothing (computed). Vendors, procurement and pricing are the subject of the companion article, RL environments as a business.
Environments are consumables
How long does an environment stay useful? Not long, once someone trains against it: benchmarks built from the same kind of task fill up on a schedule (Figure 2). CVDP, a chip-design benchmark, launched in June 2025 with state-of-the-art models at "no more than 34% pass@1" (single-attempt success) on code generation [31]; thirteen months later NVIDIA reported a 97.1% average pass rate across nine categories for Nemotron 3 Ultra inside an agent that generates, tests and reflects (self-reported; a different protocol) [32]. APEX-Agents, a benchmark of professional agent tasks, launched in January 2026 with a best score of 24.0% [33]; by October the top of Mercor's own leaderboard for it was 82.4% (±4.3; self-reported) [34]. GSO's headline score rose from 4.9% at launch in May 2025 to 47.1% in July 2026, and to 88.2% in September on the day GSO changed how it prompts models [21]. An environment is a depreciating asset, so design refresh (generators, live data, regenerable held-out sets) into the first release.
The less obvious lesson concerns the reward's shape. A pass/fail threshold saturates even when the quantity beneath it has not. GSO reports the share of its 102 tasks where one attempt is correct 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 sixteen times, 1.0% [35]. The tasks still have room; the bar does not. A graded score keeps room too: BRIGHT, a reasoning-heavy retrieval benchmark 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 perfect [36] [37].
Four questions in a fixed order
What does a lab check before it lets an environment near a training run? Four things, in order. Soundness: high reward means the task was solved. Learnability: pass rates sit where the target model learns. Integration: it runs in the lab's harness at the lab's concurrency. Rights: license and provenance are clean, and no task doubles as someone's evaluation item. Each check is worthless if an earlier one fails: a pass-rate band measured on a hackable verifier measures the hack. Epoch's interviewees put the first criterion as "high reward must mean the task was actually solved, not hacked" [29].
Soundness fails more often than builders expect. On τ-bench's airline tasks an agent that does nothing scores 38% and beats a GPT-4o agent's 35%, because deliberately unsolvable tasks count an unchanged database as success; on SWE-Lancer an agent that replaces the tests with assert 1 == 1 scores 100%. The Agentic Benchmark Checklist (ABC), an audit of ten agentic benchmarks, found 7 that violate task validity ("a task should be solvable if and only if the agent possesses the target capability"), 7 that violate outcome validity ("the evaluation result (e.g., tests or checks) truly indicates task success"), and reporting gaps in all 10, enough to misstate performance "by up to 100% in relative terms" [1].
The two validities become four proofs a machine runs on every task, on every change. For task validity, the oracle, a reference solver restricted to the agent's own tools, reaches maximum reward, and a do-nothing agent, which defines the floor, scores far below it. For outcome validity, 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 stochastic exploit policy judged by its mean, never its best rollout. The do-nothing test is the cheapest check in the field and would have caught τ-bench's 38% in seconds (Table 1).
Table 1. The four intake questions, in the order to answer them, with the proof that runs on every task and the statistic that describes a release.
| Question | Proof on every task | Release statistic | Developed 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 probe | An 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 each | Share of tasks inside the band, from a floor near 2-3% to retirement near 70%, per model | Part II |
| 3. Integration: does it run where the buyer trains? | Episode start, step latency and error handling within budget in the buyer's harness | Infrastructure 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 task | Overlap with public benchmarks and earlier deliveries | Part II and the companion business article |
A maturity ladder
How far along is a given environment, and where is the unfinished work? Five rungs answer, from a prototype that merely runs to a release calibrated on reference models (Table 2); the top rung includes a short training run beside a random-reward control, because random rewards can look like progress (Part III).
Open tooling now climbs the first three rungs for you, and L4 is where the unfinished work sits: OpenEnv's draft validator leaves all seven statistical tests to whoever operates the environment, and for one of them, the adversarial floor, the procedure "is not yet specified anywhere" [38].
Table 2. A maturity ladder for an environment release: what each rung requires, its gate, the intake questions it answers, and how much of it OpenEnv's draft validator runs [38].
| Rung | Requires | Gate | Answers | OpenEnv draft validator |
|---|---|---|---|---|
| L0 Prototype | Runs on a few tasks; a reward exists | None | Nothing yet: a do-nothing agent can still score 38% | Not covered |
| L1 Packaged | Digest-pinned image; manifest with declared resources and timeouts; typed tool schemas; license and provenance fields on every task | Static validation | Integration, rights | 11 static tests, run locally |
| L2 Contained | Network policy per phase; a separate verifier sandbox with no network; isolated, seeded, replayable episodes | Runtime validation | Soundness (isolation), integration | 17 runtime tests, run locally |
| L3 Verified | Oracle 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 floor | Semantic validation plus an exploit audit | Soundness | 7 semantic tests, run locally; the exploit audit is not |
| L4 Calibrated | pass@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 control | A statistical report from whoever operates the environment | Learnability, soundness | 7 statistical tests, all left to the operator |
The reconciliation testbed shows L3 designed in rather than bolted on. Its generator works from the answer side, the property 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 verifier compares rather than solves. Its typed tools reject unknown fields, and the single reward after submission scores the oracle 1.0 and doing nothing exactly 0 (testbed measurement).
Check yourself: Part I
A do-nothing agent scores 38% on τ-bench airline. Which half of task validity does that break, and which test catches it?
The "only if" half: tasks are passed without the capability, because unsolvable tasks count an unchanged database as success. The floor test (reset, submit nothing, require a score far below the maximum) catches it in seconds.
A harness forwards OpenEnv observations to the model unchanged. What can leak, and what test stops it?
The observation type carries a reward field for the training loop, so the model can see its own score. Strip reward and answer fields at the boundary and assert in a test that no agent-visible observation contains them.
GSO's leader passes 88.2% of tasks at the default bar. Is the benchmark used up as a training 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 sixteen times 1.0%. Reward the ratio and raise the bar.
Ten hand-written tasks that pass these proofs are a demo; training needs thousands, 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 thousands of tasks that keep a trustworthy check and still teach, and how do you know the pool taught anything about the tasks you care about?
A task is empty when the policy always solves it or never does, and every rollout spent on it buys nothing. 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 sometimes solves, count copies by structure, and judge the pool on real tasks it never touched.
Running example (toy simulation). Each task asks for the cheapest route between two cities in a directed graph with integer costs, within a given number of legs. An exact dynamic program verifies, three noisy beam searches play weak, mid and strong solvers, a 32-weight policy learns, and six edit operators grow ten hand-written seeds; a second, different generator stands in for "real" tasks.
Seeds run out
Why can't ten good tasks carry a training run? Because a learning policy uses tasks up. GRPO-style methods score each of a group's G rollouts against the group's mean, and if every rollout earns the same reward, "the resulting advantage for this group is zero", and so is the gradient [40]. At pass rate p, a group is zero-variance with probability pG + (1 − p)G: 43% at p = 0.9 and G = 8, and 66% at p = 0.95 (computed; Figure 3A).
The waste shows up as throughput, so it gets misdiagnosed as an optimizer problem: a useful group costs G / (1 − share) rollouts, 14 at 43% zero-variance and 40 at 80% (computed). Larger groups recover signal per rollout. At p = 0.9, going from 8 to 16 rollouts cuts the share of rollouts in zero-variance groups from 43% to 19% (computed), and BroRL reports gains that continue as rollouts per prompt rise into the hundreds, after more training steps had stopped helping [41]. What larger groups cannot do is add prompts, so compare 16 rollouts on one prompt with 8 on each of two fresh in-band prompts at a fixed rollout budget. In the toy, the eight training seeds alone hit a 99% zero-variance share within 48,000 rollouts (Figure 3B), and breadth also drives generalization: on Procgen, "agents need access to as many as 10,000 levels" to close the gap between training and test performance [42]. Often the task supply, not the optimizer, sets the ceiling.
Write the verifier first
What must exist before the first generated task? A check you trust; pipelines that scale make tasks checkable by construction. SWE-smith's "core principle" is to "define an execution environment first, and then synthesize task instances within the environment": it injects bugs into working codebases and keeps those that break an existing test, which gave 50,137 tasks from 128 codebases for about $1,360 of model spend [44]. Envs-FORGE admits a generated environment "only if its oracle solution obtains reward 1 under the generated tests" [45]. Labeling after the fact is weaker: in Self-Instruct's audit of model-generated data, only 58% of sampled outputs were correct and acceptable [46].
A gate that works rejects a lot. Self-Challenging agents write each task as an instruction, a verification function, an example solution and three failure cases, keeping it only if the solution passes and every failure case fails; 5.2% of full candidates survived, yet RL on them doubled Llama-3.1‑8B's average success, from 12.0% to 23.5% [47]. Test the verifier like code, because it fails in both directions: rule-based math verifiers miss 14% of correct answers on average, more as the policy gets stronger, and one policy passed a trained model verifier by answering with a single "{" [48]. Four self-tests catch most of this before a single rollout: the reference answer passes, a known wrong answer fails, a correct answer in another format passes, and a degenerate answer (empty, a lone symbol, the question restated) fails.
In the toy, the verifier re-solves every child exactly and rejects it if the goal is unreachable, two routes tie, the graph is too large or the edit broke its stated contract. Ten seeds became 10,644 verified tasks, but only 1,106 came out distinct, uncontaminated and inside the learnable band, about ten attempts per useful task (Figure 4, toy simulation).
Grow with operators that carry a contract
How do you multiply a seed without losing its label? Use a small set of named edits, and write down for each how the answer must change (Table 3). Software testing calls such a rule a metamorphic relation: a property linking the outputs of related inputs, so a new case can be checked without knowing its expected output [49]. Every child then faces two checks: the verifier re-solves it, and the contract must hold between parent and child.
Table 3. Five operators, their contracts and public precedents. The first four run in the toy.
| Operator | Contract | Public precedent |
|---|---|---|
| Rename entities, or reword | answer unchanged | Models are more robust to new names, but "very sensitive to changes in numerical values" [50] |
| Add a distractor | answer unchanged | Adding "seemingly relevant but ultimately irrelevant information" cut accuracy by up to 65% [50] |
| Add a step (a hop) | new answer = old answer + the added leg | Accuracy falls and variance rises as clauses are added [50] |
| Tighten or loosen a budget | answer may only rise, or only fall | GSM-Plus builds eight variations of each question, including numerical and arithmetic ones [51] |
| Remove a needed fact | answer 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 generator. Contracts catch operator bugs: the "safe" distractor broke "answer unchanged" 244 times, and without the contract those tasks would have entered the pool mislabeled. Measure each operator's effect, because intuition can get the sign wrong (Figure 5A): tightening the leg budget, meant to make tasks harder, raised the mid solver's pass rate by 0.09 (95% interval 0.07 to 0.12), and loosening it left 672 of 675 children unchanged. Operators leave cues a policy can learn: the distractor always added a trap edge cheaper than the correct one, so in the grown pool the cheapest next edge lies on the optimal route at only 38% of decision points, against 57% on real tasks; drawing the trap's cost from the normal range moved the pool to 64% (Figure 5B; all toy simulation).
Only training tells generators apart. SWE-smith compared four bug generators at a fixed 507 training trajectories each: the one in which an LLM edits a function had the highest yield, 56.0% of candidates breaking a test, yet trained the weakest students, 5.7% (±1.5) of SWE-bench Verified resolved against 8.6% to 9.2% for the other three [44]. Phi-4's authors likewise found "organic questions are substantially more effective than synthetic questions" [52]. Yield measures survival, not what a task teaches.
Keep tasks the policy sometimes solves
Which tasks should stay in the pool, and measured on whom? Theory and practice agree on the middle. Bae et al. show that expected policy improvement is "lower-bounded by the variance of task-level success probabilities", p(1 − p), which peaks at p = 0.5; keeping prompts with 0.3 < p < 0.7 lifted their 3B model's five-benchmark average from 26.3 for plain GRPO to 30.1, while filters that removed only one side scored 23.8 to 25.9, below no filter at all [43]. DAPO keeps sampling "until the batch is fully filled with samples whose accuracy is neither 0 nor 1", which, added last to four other fixes in its cumulative ablation, moved AIME 2024 from 42 to 50; compare such methods per rollout generated, since "the sampling cost for each batch is dynamic" [40]. Buyers Epoch interviewed ask for "a minimum pass rate of around 2–3%, or at least one success out of 64 or 128 rollouts", 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 simulation). A vendor that bands tasks on a frontier model and ships them to a lab training a smaller one sells a different product from the one on the label. Calibrate on the policy you will train and re-measure as it improves, as Skywork-OR1 does when it drops prompts its model solved every time in the previous stage [53]; the band also drains (Figure 3B), so refill when the zero-variance share climbs.
Calibration has a price, and the expensive part is ruling tasks out. A task at 6 of 8 has a 95% Wilson interval (a confidence interval for a proportion that stays honest at small samples) of 0.41 to 0.93, straddling the retirement line, and ruling a task out as below a 2% floor at 95% confidence takes 149 straight failures (ln 0.05 / ln 0.98; computed). One success settles reachability, so escalate sequentially, adding rollouts only to tasks at 0 of 8 and stopping at the first success: if 10% of tasks score 0 of 8, that averages about 22 rollouts per task instead of 149 (computed). 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 stochastic task, judge "too easy" against the best achievable score, not 100% (Part VI).
Most variants are copies, and leaks travel down lineages
How many of your tasks are actually different, and which quietly descend from the test set? The usual novelty and contamination gates read text, such as Tülu 3's rule flagging a test item when more than 50% of its tokens share an 8-gram with one training item [55], and generated tasks defeat text gates in both directions. In the toy, a hash of the cost-labeled graph and leg limit finds 6,721 structural copies among 10,644 verified tasks; a text near-duplicate check keeps 4,452 of those copies and throws away 1,151 tasks whose wording barely changed but whose structure did (Figure 6A, toy simulation). The duplicate definition decides how many tasks you have, so publish it (Table 4).
Table 4. The duplicate signature sets the task count: the same 486 valid candidates from a toy coding-task factory, where duplicates were the largest single loss (toy simulation).
| Two candidates are duplicates if they share the same | Distinct tasks |
|---|---|
| program (abstract syntax tree) | 486 |
| problem statement text | 349 |
| function, line and set of failing tests | 321 |
| function and set of failing tests (what an agent can tell apart) | 235 |
| set of failing tests | 232 |
Rewording also defeats decontamination. Paraphrased 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 generated, holds rephrased copies of 12.8% of HumanEval [56] (Figure 6C). A generated pool inherits every such leak through its seeds: in the toy, of the 1,912 descendants of two seeds that were also evaluation items, the best text rule caught 202 and no renamed or reworded copy, and the structural hash caught every copy but only 100 of the 1,852 edited descendants (Figure 6B, toy simulation).
Split on the same structural signature, never on row index. In the reconciliation testbed, whose generator draws fresh names and numbers for every task, no two tasks' initial states overlapped on the surface, yet 6 pairs shared an identical set of injected errors and 3 of those pairs straddled the splits (testbed measurement). Assign each task to a split by a hash of its signature, and every twin lands on the same side.
Judge the pool on real tasks that seeded nothing
Did the pool teach anything about the tasks you care about? A held-out split of the pool measures how well the policy learned the generator. In the toy, a policy trained to copy the exact solver's ranking on the operator-grown pool scored 0.94 on that pool's held-out tasks but 0.76 on real tasks, no better than plain renamings of the seeds (0.77; Figure 7A). Growth paid only once the distractor's cue was fixed (0.83) or the seeds came from the real distribution (0.88, against 0.90 for training on real tasks), and every curve flattened by about 200 tasks: more variants do not fix a biased generator; better seeds do (toy simulation).
RL tells the same story more sharply (Figure 7B). After 48,000 rollouts the eight seeds alone reached 0.75 on real tasks and every grown pool did worse; growing tasks on demand peaked at 0.77 and fell to 0.52 while its synthetic score climbed to 0.86, because it chased the student's frontier rather than the target (toy simulation). The public record shows the same gap. RL on procedurally generated terminal tasks lifted Qwen2.5‑7B from 10.7% to 53.3% on the generator's own development set but only from 2.2% to 3.4% on Terminal-Bench 2.0, a human-curated benchmark; the authors concede that their generated tasks "resemble competitive programming problems more than the messy, underspecified requests that users actually pose" [57] (Figure 7C).
What transfers is breadth of sources, so count seed families, not tasks. SWE-smith found performance rising roughly logarithmically with the number of codebases behind a fixed 700 training trajectories [44]. Joint training on RLVE's 400 adaptive environments gained 3.37 points on average across six benchmarks, while continuing the original RL gained 0.49 with more than three times the compute [58]. In Agent World Model, training on 10 environments caused "severe performance degradation", while 100 gave substantial gains and 526 more [59]. Part VI gives the statistical reason: variants of one seed are correlated.
Five synthesis families, each with its checker and its failure
Which generator should produce your tasks? Start from the checker you can trust, not from the generator you like. Each family comes with a typical verifier and a typical way of failing, and the failure is easier to predict than the gain (Table 5).
Table 5. Five families of task synthesis: what makes the tasks, what checks them, how they fail, and public evidence. Each number is the cited paper's own result, on different models and benchmarks, so rows are not comparable with each other.
| Family | What makes tasks | What checks them | Typical failure | Public evidence |
|---|---|---|---|---|
| Procedural | code with difficulty knobs | an exact rule | narrow: the policy learns the generator | 400 hand-built adaptive environments: +3.37 points against +0.49 for more of the original RL [58] |
| LLM-written, executable | a model writes the state, tools, task, solution and checker | a state or test check | the solution and the checker agree on the same mistake | kept only instances with non-zero pass@100 during RL: 1,827 environments, 4,417 tasks [25] |
| LLM-simulated | a model plays the environment | a judge or rubric | hallucinated, inconsistent state | 8B model on BFCLv3: GPT-5 simulator 52.53 against executable environments 65.94, base model 53.83 [59] |
| Mined and perturbed | real issues and commits, or bugs injected into working code | tests that fail before the fix and pass after it | leaked or trivial tasks, weak tests, setup cost | 2,438 executable tasks kept from 64,689 mined instances [60] |
| Self-play | the policy proposes its own tasks | an executor or a majority vote | labels rot, proposals collapse | majority-vote label accuracy 79.0% → 69.0% → 63.0% over three iterations [61] |
Three failures deserve a rule each. When one agent writes both the solution and the checker, the two can share a mistake, so an independent solver must also succeed; Endless Terminals keeps a task only if o3 solves it at least once in 16 attempts, a filter that "introduces a capability ceiling" [57]. A simulated world can be worse than none: Agent World Model's GPT-5 tool simulator 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 majority vote that sets the band also supplies the labels. Mined tasks fail differently, by leaking the check: when SWE-smith wrote issue text from the failing test, trained students tried to reproduce the bug in 127 of 500 runs, against 379 for students trained on model-written 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 factory, and in what order should its gates run? Generating candidates is nearly free; checking them is the bill. SWE-rebench V2's setup agent made about 535,000 model calls, roughly $1.9K of inference, while validating its tasks took 583,809 Docker builds averaging 2.71 minutes, about 26,400 job-hours, and left 26.36 TiB of images [62]. SWE-smith's one image per codebase took 295 GB for 50,000 tasks, against an estimated 50 to 150 TB with one image per task [44]. Human review can dwarf both: Terminal-Bench 2.0 kept 89 of 229 contributed tasks after "approximately three hours of combined reviewer attention" per task [63] (Figure 8B).
Survival runs from under 4% to 99%, and the spread is information (Figure 8A). SWE-Gym kept 2,438 of 64,689 mined instances, 3.8% [60]. An independent validator kept 6,275 of 32,079 released SWE-rebench V2 rows (19.6%) after dropping 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-validate it before you budget a run on it.
Two rules follow. First, order the gates by cost per rejection, not cost per entrant, and deduplicate right after the cheapest validity gate: in the toy coding-task factory, moving deduplication to just after the "gold patch flips a failing test" gate cut the CPU of the next three gates by 55% with the same 235 tasks out, because duplicates stopped paying for three stability reruns each (toy simulation). Second, price a usable task with the funnel: cost per usable task ≈ (model cost per candidate + builds per candidate × cost per build) ÷ yield + review time per kept task (computed). At SWE-rebench V2's numbers and an assumed $0.03 per vCPU-hour the machine term is about 11 cents, so doubling yield halves it while halving model prices trims about a quarter (Figure 8C).
Check yourself: Part II
Your generator's gate accepts 97% of candidates. Is that good news?
Not necessarily. A strict four-part gate kept 5.2%. Feed the gate known-wrong and degenerate answers first; if they pass, the 97% measures the gate, not the generator.
A vendor offers "10,000 distinct tasks". What do you ask for first?
The duplicate signature, in writing. The same candidates counted as 486 or 235 distinct tasks in the toy factory, depending on whether "distinct" meant a different program or a different function and failing-test set.
You can afford ten times more variants of your 20 seeds, or three times more seed families. Which do you buy?
More seed families. In the toy every curve flattened by about 200 tasks; SWE-smith gains roughly logarithmically in codebases; RLVE and Agent World Model gain with the number of distinct environments.
Every task now has a check, a contract, a band and a lineage. Part III asks what an optimizer 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 optimized against, how do you measure a verifier's errors, which defenses hold under pressure, and how do scorers manufacture or hide wins?
A static benchmark tolerates a verifier with a few percent error; an optimizer does not, because it moves the policy toward whatever is paid. This part treats the reward as a measurement taken under adversarial pressure.
Running example (toy simulation). A 0.1M-parameter transformer learns two-digit addition from scratch with GRPO, eight answers per prompt. A gold grader accepts one committed integer in any of six legitimate formats; around it sit verifiers of graded quality, two of them deliberately buggy. A model this small cannot plan an exploit, so the toy shows mechanisms, not magnitudes.
Two errors, one optimizer
Why does a false negative only slow learning, while a false positive can take over a run? Let a policy take a hack instead of the honest behavior with probability p, through a single softmax logit θ. The expected policy gradient is the covariance between reward and choice:
E[dJ/dθ] = p (1 − p) · (E[r | hack] − E[r | honest])
A false-negative rate f multiplies the honest reward by (1 − f): the signal shrinks but never flips sign, so the policy learns the right thing more slowly. A false positive that pays the hack a bonus b with probability φ adds φb to E[r | hack], so the push toward the hack is positive at every p above zero (computed). Rarity makes a hack slow, not safe. In principle no reward escapes this: over all stochastic policies, two reward functions can be unhackable only if one of them is constant [65]. The engineering question is which holes the current policy can reach, and how fast.
The toy separates noise from a hole (Figure 9). Random errors injected into the gold grader (false-negative rates up to 30%, false-positive rates up to 5%) barely moved where training ended: all nine arms finished between 0.61 and 0.68 held-out pass@1, against 0.68 for the clean run and 0.37 at the start. A substring verifier, which pays any answer containing the right digits, had an audited false-positive rate of only 4.0% [3.1%, 5.2%], yet under training it drove 72.5% of samples to hack and pass@1 to 0.03, because "write digits that contain the answer" works on every prompt. The audit measured how often wrong answers pass by accident; the optimizer measured how easily they pass on purpose. A lenient verifier that pays hedges such as "81 82" stayed at 0.3% hacked, because a hedge never earns more than the plain answer.
The reward ladder
How hackable is each kind of reward, and in which direction does each fail? Order reward sources by how hard they are to fool and you get a ladder: exact checks of a machine-readable answer, executable tests, a judge answering narrow rubric items, a judge scoring a whole response, and a learned scalar reward model. The order is a synthesis, not a measurement: an exact check compares two values; a test reads program behavior, but the program runs where the policy acts; a judge reads text written to please it; and a learned reward model was fitted on typical responses, while an optimizer looks for atypical ones. Hackability rises as the reward reads the policy's words rather than the world's state.
Each rung fails in its own direction. Exact checks fail mostly by false negatives: among responses a rule-based math verifier marked incorrect, 38.5% were in fact correct [66], and rule verifiers average 86% recall at above 99% precision [48]. Tests fail by false positives the policy manufactures: in one frontier run, exiting before the tests ran and raising an exception that skipped them came to "become systemic, affecting nearly every training environment" [2]. Judges fail by bias and persuasion: a repetitive-list attack, which lengthens an answer without improving it, fooled Claude-v1 and GPT-3.5 judges 91.3% of the time against 8.7% for GPT-4 [67]. Learned verifiers fail by over-optimization: a fine-tuned 1.5B model verifier held for about 450 RL iterations, then the training reward surged away from an oracle's and the run collapsed [48]. Process reward models, which score each reasoning step, sit on that rung too: DeepSeek-R1 lists its attempt under "Unsuccessful Attempts", because a model-based one "inevitably leads to reward hacking" [24].
The top rung tells you the kind of error to expect, not its size: all five of the toy's verifiers were rule checks, with audited false-positive 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 different conditions and are not comparable across rows; where detection is incomplete they are lower bounds.
| Hack class | Public case | Defense |
|---|---|---|
| Editing or special-casing tests | On 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 run | Early-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 evaluator | o3 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 solution | An 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 everything | The 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 answers | 359 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 broken | On 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 program can check? With a judge, and three practices have public evidence. Ask many narrow questions, not one broad one: Rubrics as Rewards scores each response against rubric items written for its prompt and beat single Likert-score judges by up to 31% (relative) on HealthBench, a rubric-graded medical benchmark [74], and checklist feedback extracted from each instruction was the only method to improve a strong 7B instruction-following model on all five benchmarks tested [75]. Rubrics are hackable too: stronger verifiers "substantially reduce, but do not eliminate, verifier exploitation" [76]. Remove the judge's known biases: most judges favor whichever answer comes first, and only GPT-4 kept its verdict after a swap in more than 60% of cases, so judge both orders and count only agreed wins; a reference answer cut its failures on ten math questions, asked in both orders, from 14 of 20 to 3 of 20 [67].
Put the judge behind a rule. A cascade lets a strict rule decide every response it accepts and sends only its rejections to a judge. With rule recall R and false-positive rate f, and a judge that recovers a share t of the correct answers it sees and accepts a share j of the wrong ones, the cascade's recall is R + (1 − R)t and its false-positive rate f + (1 − f)j, and the judge runs only at the rule's rejection rate, which falls as the policy improves (computed; Figure 10). The part that is easy to miss: with a strict rule (f near 0) the cascade's false-positive rate is the judge's rate on rejects, and every wrong answer reaches the judge, so keep its question narrow ("is this the same number as the reference?") and audit j as the whole false-positive rate. TinyV runs a small model only on rule rejections and reports pass rates up to 10% higher for about 6% more compute per step [66]; a rule-then-model hybrid gained about 3 recall points at above 98% precision for 25.7% more training time [48]. In the addition toy a cascade reached 100% recall at 100% precision on the audit set, yet training on it ended within noise of exact match (0.67 against 0.65 held-out pass@1, three seeds), because the rule's false negatives were formats the policy simply stopped writing (toy simulation).
Measuring a verifier
How many graded samples does an error rate need, and why does a rate measured at release stop being true? Grade a sample of policy outputs twice, once with the verifier 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 denominator (Table 7).
Table 7. Four rates, four denominators. Toy audit: 2,999 answers from three checkpoints of the addition policy, graded by each verifier and by gold (1,706 gold-correct, 1,293 gold-wrong); 95% Wilson intervals (computed).
| Rate | Numerator ÷ denominator | What it costs under optimization | Exact match | Substring (buggy) |
|---|---|---|---|---|
| False-positive rate | wrong answers paid ÷ gold-wrong samples | the optimizer searches for these | 0 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 samples | lost signal; the policy narrows onto accepted formats | 108 of 1,706: 6.3% [5.3, 7.6] | 0 of 1,706: <0.3% |
| Precision | correct answers among those paid ÷ paid samples | falls as hacks spread, and hides the denominator | 1,598 of 1,598: 100% [99.8, 100] | 1,706 of 1,758: 97.0% [96.1, 97.7] |
| False-omission rate | correct answers among rejections ÷ rejected samples | the 38.5% reported for a math rule verifier is this rate | 108 of 1,401: 7.7% [6.4, 9.2] | 0 of 1,241: <0.3% |
Report false-positive and false-negative rates with Wilson intervals and their denominators, never precision alone; the textbook normal interval collapses to zero width when no errors are seen. Zero false positives among n gold-wrong samples bounds the rate below about 3/n at 95% confidence, the rule of three: below 1% takes 299 gold-wrong samples, and below 0.1% takes 2,995 (computed: n = ln 0.05 / ln(1 − r)).
The trap is the denominator. An improving policy makes wrong answers scarce: collecting 300 gold-wrong samples takes about 300 / (1 − accuracy) graded ones, which is 429 at 30% accuracy, 3,000 at 90% and 30,000 at 99% (computed). An audit that was ample early in a run is too small late in it, exactly when the optimizer is best at finding holes, so keep a fixed adversarial set of known-wrong responses whose denominator never shrinks. Grader bugs move headlines too: Claude Opus 4.5 first scored 42% on CORE-Bench, partly because rigid grading rejected 96.12 where it expected 96.124991…, and 95% after the bugs were fixed and the scaffold loosened (self-reported) [54].
How a hack takes off
How fast does a rare exploit spread, and what predicts when? GRPO gives each of a group's G answers an advantage (r − mean) / std computed within the group. If the visible task gives no within-group variance, because it is saturated or impossible, a hack is the only source of variance: a lone hacked sample in a group of eight gets an advantage of √7 ≈ 2.65 whatever the bonus is, because the bonus cancels between numerator and denominator (computed).2 If the task is half-solved, its own variance dilutes the hack: headroom competes with the hack for the gradient.
A planted hole times the mechanism (Figure 11). Following Prime Intellect's design, the toy pays a hidden +0.5 bonus for a harmless keyword with a set base rate. With a reachable task, half the samples carried 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 headroom, t50 came 2.0 to 5.4 times sooner (toy simulation). Prime Intellect reports the same shape on a 1B model: hacking reached half the samples by step 38 when the visible task was unreachable, by steps 47 to 51 when it was saturated 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 diamond; self-reported) [77]. "The policy rarely does this" is not a safety argument. Headroom does hold off a hack that costs the answer: a keyword that corrupted its answer took off only where honest answers paid less than the bonus.
The early warning is cheap. A 0/1 reward component's within-group variance is proportional to p(1 − p), so its rise from near zero announces the takeoff. Four cheap alarms (paid reward minus gold on an audited sample, scores above the honest maximum, per-component variance and an action monitor) fired 14 to 23 steps before t50 on average, though none fired first every time (toy simulation). Broken tasks are no-headroom tasks, which is why models hack far more often on tasks missing a needed file (Table 6), and system-card hack rates are stress tests that "do not reflect real-world hacking rates" [78]: read their trend, not their level.
Proving a verifier
What shows that high reward means solved, and how can that evidence pass while the hole stays open? Part I's four proofs run on every task, and Terminal-Bench 2.0 also runs an exploit agent during task audits and inspects its trajectories "regardless of whether the agent passes" [63]. The reconciliation testbed shows three ways the proofs pass while the reward is still wrong.
Clipping a reward at zero pays for gambling. The function max(0, x) is convex: it forgives the downside and keeps the upside. The Brier skill score S = 1 − 4(q − o)², for a forecast q of a binary outcome o, is proper when unclipped: at a true probability p* = 0.7, reporting 0.7 expects 0.16 and reporting certainty −0.20. Clipped at 0, certainty expects 0.70 against 0.448 for the truth, and even a clip at −1 pays certainty 0.40 against 0.16 (computed; Figure 12). In the reconciliation testbed, clipping the break score at 0 would lift a weak scripted agent's mean reward from −0.156 to +0.014, turning blind guessing into profit (testbed measurement); in public form, "under binary grading, abstaining is strictly sub-optimal" [79].
A canary that cannot trip proves nothing. The testbed's look-ahead canary asked for prices one calendar day after the valuation date. For a Friday valuation that day is a Saturday, still before the episode's Monday-morning as-of time, so the request was not look-ahead: the canary did nothing, scored 0 and passed the floor test. Only a second assertion, that each canary raises the integrity event it was written to trip, caught the bug; run it on every task, since a calendar bug hides whenever the test task falls on the wrong day.
Only a stochastic exploit judged by its mean catches gambling. With a clip at 0 put back into a scratch copy of the environment, 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 (testbed measurement). 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 parties' wrong valuations could land inside the sign-off tolerance, the fix paid valuation credit only in proportion to the breaks actually found, which is METR's advice in practice: "patch the exploit in the scoring function rather than punishing the model" [69]. And mutation-test every tolerance, because a tolerance is a hole with a size: of 10,303 faults injected into 188 KernelBench problems, the official checker missed 16.9% of those an independent check could witness, including 78.6% of precision faults, while optimized test inputs reached 98.0% detection [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. Examples from the reconciliation testbed and the toy addition policy.
| Defense class | What it stops | How it can silently pass |
|---|---|---|
| Integrity gate: a flagged episode scores the do-nothing value, 0 | reading answer keys or planted files, editing the grader, look-ahead requests, calling episode controls as tools | the 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 truth | copying a counterparty's number, format-only submissions | the 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 reward | enumerating every candidate, shotgun reports, over-confident forecasts | a clip at 0 lifts every enumeration canary to exactly 0, which still passes the floor test |
| Strict schema; the verifier never reads free text | smuggled reward fields, notes addressed to the grader | a judge further down the pipeline reads the free text the verifier ignored |
| Exploit policy judged by its mean | unknown holes, gambling under a clip | judged by its best rollout (fails on noise) or median, or run with too few rollouts per task |
| Monitors and classifiers | hacks visible in transcripts or actions | recall 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 mitigations have evidence, and in what order should you reach for them? Removing the hole beats making it unprofitable, which beats changing what the hack teaches, which beats asking the model nicely.
Prevention by construction has the best evidence: grade state in a trusted process, withhold tests and grading files until scoring, close network channels at the tool layer, and prefer hidden all-or-nothing checks to visible partial credit. In a toy program-writing task, partial credit on the two visible tests drove lookup tables that special-case them from 16.8% of samples to 99.0% and held-out pass@1 to 0.00, while all-or-nothing scoring on hidden tests drove them to 0.2% and pass@1 to 0.82 (toy simulation). Magistral made the same trade in production, keeping binary code rewards after proportional ones ended 2% lower on LiveCodeBench [81].
When you can detect a hack but not remove it, do the arithmetic. A hack adds a bonus b, a detector 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 correct answer the attempt's expected gain is (1 − r)(1 + b) − 1 (computed; Figure 13). In the toy (b = 0.5, r = 0.7, threshold 0.71) the keyword ended in 97.4% of samples undefended, 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 warning. Then give the agent an honest exit. On deliberately impossible tasks, an abort option cut GPT-5's cheating from 54% to 9% and o3's from 49% to 12% [68].
Monitors find holes; they are not rewards. A weaker model reading an agent's chain of thought caught 95% of two systemic hacks, against 60% reading actions alone; once that monitor entered the reward, the agents kept hacking, hid their intent, and its recall fell to near zero [2]. In the toy a monitor went blind with no pressure on it at all, from 80% to 0% recall, because training amplified an unmarked route to the same hole. Instructions have evidence 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 misalignment by rewarding models for acting against their instructions" [82]. Inoculation prompting, one system-prompt line that frames the hack as acceptable during training, cut misaligned generalization by 75–90% even with hacking 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 sabotage safety-research code 12% of the time [83]. Environment quality assurance is a safety control, not only a data-quality one.
Over-optimization
When the reward is learned or judged, how far can you push before the true objective turns down? Gao, Schulman and Hilton measured it with a fixed "gold" reward model labeling comparisons for proxy reward models. As a function of how far the policy has moved, d = √KL(π ‖ π₀), gold reward follows d(α − βd) for best-of-n sampling and d(α − β log d) for RL [84]. Larger reward models push the turn further out, while a KL penalty does not move the gold-versus-KL frontier, so its effect on gold is "akin to early stopping". Direct alignment methods such as DPO show the same degradation, often within one epoch [85]. Reward-model ensembles help without curing it: conservative optimization over an ensemble "practically eliminates overoptimization" for best-of-n in a synthetic setup [86], yet ensembles "do not eliminate reward hacking" where members share error patterns [87].
The toy shows what an optimizer exploits first (Figure 14). Proxies trained on 500, 2,000 and 10,000 gold-labeled pairs reached 88%, 91% and 93% pairwise accuracy, yet RL against them drove gold down to between −1.6 and −2.4 standard deviations while the proxy rose: the proxies 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 proxies retrained, RL against them ended within 0.07 of RL on gold itself (toy simulation). A proxy with 93% pairwise accuracy can be safe or badly wrong, depending on whether its errors lie along the path the optimizer takes.
The scorer is part of the environment
How much can the scoring code alone change a verdict? A lot (Table 9). In the first five rows the model outputs were fixed, or nearly so, and only the scoring changed; in the last two the presentation changed while the verifier scored every answer correctly. Label noise compresses the gaps between strong models, and a cue in the presentation can do the policy's work for it.
Table 9. The scorer is part of the environment: the same outputs, or the same items, scored two ways.
| What changed | Scored one way | Scored the other way | What flipped |
|---|---|---|---|
| Implementation (MMLU) | Two implementations: LLaMA-65B 63.6 and 63.7 | A third: LLaMA-65B 48.8 | Falcon-40B (52.7) ranked above LLaMA-65B [88] |
| Answer extraction (math) | The Open LLM Leaderboard's extraction | An equivalence-aware checker | 61 more problems credited on average (4.66 points); many models moved 200 or more places [89] |
| Weak tests and leaks (SWE-bench) | Every pass counted | Passes that relied on leaked solutions or weak tests removed | One 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 405B | Cleaned GSM8K-Platinum labels | 2 and 17 errors: the original labels hid a large gap [91] |
| Judge position | ChatGPT judging two answers in one order | The order chosen per query | Vicuna-13B beat ChatGPT on 66 of 80 queries [92] |
| Question removed | Question and answer choices | Answer choices only | Models beat the majority baseline in 11 of 12 settings, by up to 0.33 accuracy [93] |
| Option order (toy) | The generator's order kept | A neutral order | An 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 training rather than scoring. 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 families such as Llama3 and OLMo2 [94]. A gain that a random reward also produces is elicitation of a format, not learning, so the evaluation card (Table 13) asks for that control on a second model family.
Check yourself: Part III
Which is more dangerous: a verifier that pays 5% of wrong answers at random, or one that pays every answer containing the reference digits?
The second. Random payments are uncorrelated with anything the policy controls, so there is nothing to learn. The digit rule is a function of the output that works across prompts, so the gradient pushes the policy toward it.
An audit of 2,000 samples finds zero false positives, and the policy is right 95% of the time. What can you claim?
Only about 100 samples are gold-wrong, so the rule of three bounds the false-positive rate below about 3%, not 0.15%. State the denominator.
A detector 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 samples and 1.0 cut it to 0.7%.
A trustworthy reward is necessary, not sufficient: a dozen systems choices decide whether it stays attached to the tokens that earned it. Part IV follows one rollout through the training system.
Part IVFrom rollout to gradient
Where does the wall-clock time of an RL step go, what does each speedup cost in staleness or bias, and which record-keeping choices silently break a run?
A sound reward still has to be attached to the tokens that earned it. Between the verifier and the weights sit an inference engine, a fleet of sandboxes, a scheduler and a trainer, each of which can quietly change what the gradient is computed on. Production numbers show where time goes; a toy rollout system isolates each mechanism.
The tail sets the step
Why do more GPUs not shorten an RL step? A step has four phases: a generator (an inference engine holding a copy of the policy) samples rollouts; the environment and verifier score them; a trainer takes a gradient step; and the new weights return to the generator. When each phase waits for the whole batch, the step is a barrier that lasts as long as its slowest rollout (Figure 15).
Production profiles agree that generation, and its slowest members, set the clock. On three Moonshot production workloads, rollout took 63% to 87% of each iteration, training 10% to 31% and the weight update 2% to 6% [95]. Olmo 3's 32B learner, on 8 nodes against 20 for inference, still waited for data 75% of the time [96]. Agents put the environment on the critical path: when environments timed out in RollArt's software-engineering agent training, env.reset took 78% of rollout time [97]. Lengths are heavy-tailed, with the 99th percentile up to ten times the median [98] and the longest response in a batch 25 to 32 times [99], and the longest sequence still decodes one token at a time: "increasing resources does not reduce the Rollout duration" [100].
Placement follows. If a workload needs r units of generation GPU-time per unit of training, a split, pipelined design is balanced when generation gets r/(r + 1) of the GPUs (computed). Published splits give generation 60% to 75% of nodes, 44:16 for INTELLECT-3 [101] and 20:8 for Olmo 3: "allocate as many rollout GPUs as you can such that the trainer does not wait" [102]. Re-profile weight sync whenever step time drops; Prime Intellect's stayed at 60 to 90 seconds while its steps fell below five minutes, and became the bottleneck (self-reported) [103].
The staleness budget
What does asynchrony buy, and what does it cost? Asynchrony stops the waiting: generators keep sampling from weights a version or more old while the trainer works. Staleness, the trainer's version minus the version that sampled a token, must be counted per token, because one episode can span several versions; APRIL measured about 40% of a step's tokens coming from responses started under earlier policies [104]. The purchase arrives early: in the toy, bounded asynchrony reached 3.2 times the synchronous steps per minute at a staleness bound of 2 and stayed flat beyond it, but only 1.3 times with light-tailed latency, because the tail is what synchronous training pays for (toy simulation). ROLL Flash also gets most of its gain by an asynchrony ratio of 2 [105], and verl reports 2.35 to 2.67 times (self-reported) [106].
The price depends on the objective. PPO's ratio πθ/πold does two jobs: it corrects for data sampled by another policy, which needs the policy that actually sampled, and it centers a trust region, which can be any recent policy [107]. So write three policies. The behavior policy μ is what the sampler actually ran, in its version and numerics; the proximal policy πprox is the trainer's weights at the start of the update; πθ is being optimized. The weight πprox/μ corrects the sampling and the clipped ratio πθ/πprox bounds the step. μ's log-probabilities exist only if the sampler recorded them.
Averaged over staleness bounds of 4, 8 and 16, AReaL's naive PPO scored 31.6 on AIME 2024 and its decoupled objective 40.6, against 42.0 for synchronous training (computed from the paper's staleness ablation: a 1.5B model, one run per setting) [3]. At a bound of 4 the naive run dipped to 23.3. The decoupled objective stays within about a point of synchronous up to a bound of 8, then loses 3 to 5 points: the objective, more than the bound, carries the run. In the toy, with the sampler 16 versions behind, naive PPO-clip kept 69% of synchronous learning and decoupled PPO and truncated importance sampling 83% to 85%, while the uncorrected run's clip fraction stayed near 3% (Figure 16, toy simulation). A low clip fraction is not evidence of an on-policy run.
Knobs do not translate across frameworks: verl's staleness_threshold bounds the share of stale samples [106], AReaL's η a version lag [3] and MiniMax's window a queue position [108], and capacity rules are approximate; SkyRL's controller "does not strictly guarantee" its bound [109]. Admit by a capacity rule, then check each token's age at the trainer and drop what overshoots.
Off-policy at zero staleness: training-inference mismatch
Why is "on-policy" training off-policy even when versions match? The inference engine and the trainer evaluate the same weights with different kernels, batch shapes and precision, so they assign different probabilities to the same tokens. This training-inference mismatch does not shrink when weights sync more often. Mixture-of-experts (MoE) models, which route each token to a few expert sub-networks, make it worse: on Qwen3‑30B-A3B about 10% of router decisions differed between inference and training, and 94% of tokens hit a different expert in at least one layer [110]. Rounding error compounds with length: BF16's mismatch "worsens with longer responses", and FP16 keeps it about 24 times smaller [111].
The fixes form a ladder from cheap to exact. Truncated importance sampling (TIS) weights each token by min(πtrain/πsampler, C), with verl defaulting to C = 2, and masking whole sequences is better "when high-weight samples are likely garbage rather than signal" [112]. IcePop zeroes tokens whose ratio leaves [0.5, 5]; without it, plain GRPO on Ring-mini-2.0 collapsed after 180 to 200 steps [113]. Routing replay feeds the sampler's expert choices to the trainer, and an FP32 language-model head raised ScaleRL's fitted asymptote from 0.52 to 0.61 [114]. Bitwise-identical kernels remove the error, at a 25.3% full-step overhead in one implementation (self-reported) [115]. Discrete choices need deterministic kernels at every rung: in GLM-5's training, non-deterministic top-k operators "caused drastic performance degradation" [116].
The commonest mistake looks like a correction. A trainer that recomputes the "old" log-probabilities and uses them as the behavior policy divides the trainer by itself, which verl's documentation says "leads to RL training collapse" [112]. The fix is a record field: the sampler's log-probability for every sampled token, in the denominator.
Taming the tail without bias
Which tail fixes are free, and what do the others do to the data? Continuous batching is free: it refills each generation slot the moment it frees, and with a mean generation of 14,628 tokens against a 32K cap, Olmo 3 computed that static batching "would have" wasted up to 54% of its compute [96]. Everything faster is paid for in bias, as Figure 17 shows for eight scheduling disciplines on a toy workload with a power-law tail of episode lengths. Greedy streaming, which trains whatever finishes first, ran six times faster, but its first ten steps trained episodes 41% shorter than the stream; restarting unfinished work was as short early and wasted 80% of generated tokens. Windowed FIFO, which lets the trainer take finished trajectories only within a window over the generation queue, showed an early bias of −3%, with an interval including zero, at about half of greedy's speed (toy simulation).
MiniMax reports that under greedy scheduling "early training batches are dominated by short, easy tasks", which destabilized optimization, and adopted windowed FIFO [108]; DeepSeek-V4 logs every generated token because regenerating unfinished requests "introduces length bias" [117]. Two schedulers avoid the trade by staying synchronous: Seer, for up to 2.04 times the rollout throughput [95], and RollPacker, for 2.03 to 2.56 times end to end [99].
The environment is a distributed service
What changes when one environment becomes thousands of concurrent sessions? It becomes a fleet with its own latency tail, capacity limit and failure modes, each of which leaks into the gradient 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 sandboxes booting at once [118], but a p99 target concerns the bursts above the mean. In the toy server (300 creates 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 simulation; Figure 18A). A square-root margin, L + z√L with z = 2.33 for a 1% miss, gives 81, within 4% of the simulated minimum of 78 (computed).3
Fail fast, and make retries idempotent. Past 2,048 sessions on one 8-worker container, OpenEnv's failure mode was "connection rejection, not timeout" [119]. A rejection is unambiguous; a timeout invites a retry that may apply a step twice. In the toy, where 5% of responses stalled past the timeout after the step was applied, a fresh request id per attempt double-applied all 93 retried steps and a reused id none (toy simulation), and a doubled step earns reward for something the policy never did.
A crash is not a zero. INTELLECT-3 states the rule: "On any sandbox failure, we mask out the corresponding model completion" [101]. GLM-5 excludes failures from environment collapse, pads a group with valid repeats when more than half survive and drops it otherwise [116]. Recompute the baseline over the survivors, or a crash's zero hands every survivor an unearned advantage. Zeroing is harmless only when failure is unrelated to behavior (in the toy, where right and wrong episodes made the same number of tool calls, masking showed no advantage). When the right strategy touches the environment more, zeroing pays the shortcut: for a thorough strategy that succeeds 60% of the time in 20 steps and a shortcut that succeeds 40% of the time in 5, each credited p(1 − c)L, the shortcut ranks higher once the per-step crash rate c exceeds about 2.7% (computed; Figure 18B).
Resources are part of the reward. On Terminal-Bench 2.0, with everything else fixed, uncapped resources beat strict enforcement by 6 percentage points and cut infrastructure errors from 5.8% to 0.5%, so doubt leaderboard gaps under 3 points until configurations match [120]. Snapshots are state too: a VM snapshot resumed twice starts both copies with the same random-number state unless the guest re-seeds, which is why hypervisors expose a generation ID that changes on restore [121].
The record is the contract
What must a rollout record carry? Everything the trainer will need to correct for, because it cannot go back and ask. Nearly every failure in this part is a missing row of Table 10.
Table 10. The rollout record: each field, its granularity, what it enables and how a run fails silently without it. DeepSeek-V3.2 keeps the sampling mask and expert routes for the reasons in the last rows, "ensuring both policies share identical action subspaces" [25].
| Field | Granularity | Enables | Fails silently without it |
|---|---|---|---|
| Token ids as sampled | token | training on the exact actions | re-encoded text trains on tokens never sampled (toy: 0.087 against 0.606) |
| Writer and loss mask | token | gradient only on what the policy wrote | the policy learns to predict tool output (Search-R1: 0.343 against 0.431) |
| Sampler log-probability | policy token | every importance weight, truncation and mask | only the trainer's recomputation remains: the πold bug |
| Policy version | policy token | staleness bounds and per-token correction | mixed-version episodes go unnoticed (about 40% of a step's tokens in APRIL) |
| Turn index and state key | turn | turn-level credit and per-turn diagnostics | only trajectory-level credit is possible |
| Status and failure reason | episode | masking crashes; regrading later | a flaky sandbox reads as a wrong answer |
| Group, task, environment and resource versions | episode | baselines over the right episodes; per-environment monitoring | a bad environment cannot be traced; resource drift moves reward (Terminal-Bench: 6 points) |
| Sampling mask (top-p, top-k) | token | sampler and trainer share one action space | importance ratios compare different distributions |
| MoE routes | token × layer | routing replay | router disagreement inflates the mismatch |
| Role and model version of every other model | token | masking simulators, judges and subagents | a user simulator or subagent is trained by accident |
Tokens, not text. Decoding ids and re-encoding the string is not the identity: a string has several valid tokenizations, a tokenizer can merge characters across the boundary between the policy's turn and the tool's, and a harness that re-renders a chat can change spacing. Token-in, token-out (TITO) training uses only the ids the sampler emitted; vLLM added return_token_ids to its OpenAI-compatible API because retokenization drift "is not even at the token level, and therefore cannot be corrected through token-level importance sampling" [122].
On the toy tool task, a tokenizer whose merges stay inside a turn changed 0.03% of episodes on a round trip, and retokenized training matched TITO. A deliberately boundary-crossing tokenizer changed 98.7%, masked the policy's second tool call and trained the policy on the environment's text: retokenized training ended at 0.087 held-out pass@1, below its own 0.189 start, against 0.606 for TITO (toy simulation; Figure 19). Drift belongs to the tokenizer and template together, so it is negligible or ruinous, and the next model's template can flip it.
Multi-turn TITO also needs a prefix-preserving chat template, one where appending a tool message never changes how earlier turns render (TRL patches templates for families such as Qwen3 [124]), and session affinity, so the cached prefix is reused: without it, a 25-turn episode prefills about 400,000 tokens for 29,000 distinct ones (computed from the formula in [125], with a 4,000-token prompt and 1,000 new tokens a turn). Finally, capture at the model-call boundary. Deployed agents are third-party harnesses that speak text, so labs put a gateway between harness and engine that renders tokens once and records ids, log-probabilities and versions: GLM-5 routes all rollouts through one because re-tokenization "can corrupt step alignment between actions and rewards" [116], and Kimi K2.5 "strictly follows a Token-in-Token-out paradigm" [126].
Context resets break the linear record. Long-horizon agents rarely keep their whole history: DeepSeek-V3.2's template drops earlier reasoning when a new user message arrives, and its search agent summarizes or discards old tool calls once 80% of the window is used [25], while GLM-5's search agent folds, at inference, every observation older than the last five rounds [116]. Each reset rewrites the prefix, so a record that concatenates the turns trains later tokens on a context the sampler never saw. MEM1 keeps the episode as one sequence under a two-dimensional attention mask that restricts each token "to only the tokens retained in memory at the time that token was generated" [127]. The simpler equivalent: store each reset as a segment with its own token ids, versions and log-probabilities, give every segment the episode's advantage, and mask any summary another model wrote.
Masks, advantages, aggregation and credit
Once the record is faithful, which tokens should the gradient push, and how hard? Every normalizer in the answer is a weight in disguise.
Mask what the policy did not write. A token gets gradient only if the policy generated it; prompts, tool outputs and simulated-user turns stay in the context but out of the loss. Search-R1 averaged 0.431 with retrieved tokens masked and 0.343 without, 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 accuracy (toy simulation).
Advantages: drop the per-group spread. GRPO scores each rollout by its reward minus its group's mean, divided by the group's standard deviation [15]. The division up-weights lopsided groups: a lone success in a group of eight gets +2.47 instead of +0.875, and lopsided groups are where lucky guesses and verifier false positives live (computed). Dr. GRPO calls this a difficulty bias and removes it, along with per-response length normalization [128]. When environments mix, normalize per task, or tasks learn "at very different rates", as AgentRL found [129].
Aggregation and truncation. Dividing each episode's summed token loss by its own length makes long wrong answers cheap: beside a 4-token correct answer, each token of a 32-token wrong one is pushed down with an eighth of the force (computed), so divide by a fixed number. A truncated episode was never judged, and scoring it zero adds a length penalty nobody designed: DAPO's overlong filtering, which drops truncated samples from the loss, moved AIME 2024 from 30 to 36 in its cumulative ablation [40], and ScaleRL found truncation rates of 10% to 15% "typically destabilized training", while its stable 8B runs kept truncations below 5% for over 90% of training [114].
Credit across turns and roles. Broadcasting one advantage to every token is the strong default on short tasks. When agents revisit identical states, GiGPO compares the turns taken from the same "anchor state", without a critic, for gains of more than 12% on ALFWorld and 9% on WebShop [130]. Add per-turn rewards only for facts a program can check, and treat other models in the episode as environment components with error rates of their own: 16% for τ²-bench's telecom user simulator against 40% for τ-bench's retail one [131].
Watching a run
Which curves tell a healthy run from a dying one? Training reward alone is the worst single signal: it rises when the policy learns, and also when it finds a verifier hole, when the mix drifts toward easy tasks and when crashed episodes stop being counted, and DAPO's authors note it "often exhibits little correlation" with validation accuracy [40]. Watch one curve per failure axis, per environment: held-out pass@1 and large-k pass@k, reward per verifier family, the zero-variance share, entropy, the sampler-to-trainer log-ratio, truncation and failure rates.
Some curves lead. RAGEN's "Echo Trap" in multi-turn agents is "reward variability collapse, entropy drop, and gradient spikes": reward spread and entropy often become unstable before reward degrades, and gradient spikes "typically mark the point of irreversible collapse" [132]. Collapses are fast: without routing replay, GRPO on a 30B MoE crashed at step 40 in one configuration [110]. Curves say that something is wrong; transcripts say what. Sample them where two signals disagree (reward 1 with a very short trajectory, reward 0 with a final state that looks right), label each with one cause (policy error, verifier error, environment bug, infrastructure failure, hack), and fix each where it lives. Only the first is the trainer's business.
Check yourself: Part IV
An asynchronous run shows a 3% clip fraction and steady reward. Is it close to on-policy?
Not necessarily. A trust region centered on the trainer's own recomputed policy never sees the gap to the sampler. Measure the log-ratio between the sampler's recorded log-probabilities and the trainer's directly.
When is scoring crashed episodes as zero harmless?
When failure is independent of behavior, so the zero is noise the group baseline absorbs. That is rare in agentic tasks, where the right strategy often takes more steps and so meets more crashes.
Training reward rises while held-out pass@1 is flat. Name three causes.
A verifier false positive the policy found, contaminated or memorized prompts, or a scheduler drifting the mix toward easy, short tasks.
With a sound reward and a faithful record, the question is what the gradient is made of. Part V asks when to use something richer than one scalar per episode, and what RL is actually good for.
Part VChoosing the learning signal
Given your data, your reward and your budget, which post-training method should you run? When should you stop sampling attempts and copy an oracle instead? And what can RL teach that supervised fine-tuning or distillation cannot, and the reverse?
Even a trustworthy instrument usually hands the optimizer one number per episode, often one bit; the signal is coarse whenever something richer was available and went unused. Pick the method by its inputs, train on the whole ranking when something can score every option cheaply, and use RL to make reliable what a model can already produce.
One gradient, many weightings
What are the families of post-training methods, and what picks between them? DeepSeekMath writes supervised fine-tuning (SFT), rejection-sampling fine-tuning, direct preference optimization (DPO), proximal policy optimization (PPO) and GRPO as one gradient [15]. Every method raises the log-probability of some tokens and lowers others; methods differ only in where the sequences come from (a fixed dataset or the model's own samples), what supplies the signal (labels, a reward model, a program, a teacher) and the per-token weight. SFT puts weight 1 on demonstration tokens; DPO pushes a preferred response up and a rejected one down; GRPO weights each response by its advantage over its group; on-policy distillation weights each sampled token by −(log πstudent − log πteacher). The families are settings on one dial.
Three inputs choose the setting: the supervision signal, where samples come from, and the budget. Generation dominates anything on-policy: rollout took "more than 95% of the total training time" of PPO in one controlled comparison, which also found that better preference data gave "the largest improvements", ahead of the algorithm 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 coefficient of 0, so "the reference model is not loaded" [124]; record baseline, advantage scaling, clipping, KL and loss aggregation for every run. Low-rank adapters (LoRA) are enough for RL, which gets "only O(1) bits per episode": LoRA "fully matches the learning performance of FullFT" for RL "even with ranks as low as 1", given about ten times the full fine-tuning learning rate and adapters on all layers, "in particular, the MLP (including MoE) layers" [134].
Figure 20 turns the inputs into starting defaults. With fixed preference pairs, start with length-normalized DPO: in Tülu 3, "only length-normalized DPO outperformed our base checkpoint overall", at about 4 node-hours against 56 for PPO (computed from the reported run times) [55]. With a program that checks answers, start from GRPO with Dr. GRPO's fix for "an optimization bias in Group Relative Policy Optimization (GRPO), which artificially increases response length" [128] and DAPO's clip-higher and dynamic sampling [40]; at mixture-of-experts scale or far off-policy, switch to CISPO, which caps each token's importance weight instead of dropping its gradient, or GSPO, which clips one ratio per response: "both GSPO and CISPO substantially outperform DAPO" on the fitted ceiling [114]. For open-ended quality, score rubric items with a judge (Part III) and audit with a panel the policy never trained against [76].
Recipe pieces are worth what they fix
Which of the dozen published fixes should you add? Only those that repair something your run has. DAPO's cumulative ladder on Qwen2.5‑32B went from 30 on AIME 2024 for naive GRPO to 42 with four fixes, then to 50 with dynamic sampling, which drops prompts whose groups all pass or all fail [40]: wasted groups were that run's binding constraint. In VAPO's leave-one-out ladder, removing the critic's value pretraining dropped the score from 60 to 11 [135]. JustRL found the opposite sign: its minimal recipe reached 55% on AIME 2024, adding an overlong penalty left it at 50%, and adding a "robust verifier" as well at 45% [136].
In the addition toy, toggling six standard pieces one at a time moved held-out pass@1 by −0.023 to +0.013, every interval including zero, because nothing could bind: the clip touched 1.55% of tokens (toy simulation). When a piece does bind, it can rival the objective. Bridgewater's AIA Labs, with Thinking Machines, post-trained an open Qwen3‑235B model on six document-triage tasks to 84.7% accuracy, against 78.2% for the best expert-prompted frontier model, at "a 13.8x reduction in inference costs per task"; dropping interleaved per-task batches cost 12.5 points and dropping on-policy distillation 12.3 (self-reported) [137].
ScaleRL, fitting saturating curves to more than 400,000 GPU-hours of runs, separates levers that raise the ceiling (the loss type, an FP32 head, larger batches, filtering zero-variance prompts) from levers that "mainly adjust compute efficiency" (loss aggregation, length penalties, advantage normalization), and warns that methods that win at small budgets "can be worse when extrapolated to large-compute regimes" [114]. The KL penalty gets set wrong in both directions: drop it for reasoning RL against a rule-based verifier, where "this restriction is not necessary" [40], and keep a small one with a learned reward, from a strong distilled start [138] and under heavy asynchrony [139]. Get its gradient right, too: GRPO's k3 term differentiates a KL estimate as a loss, which is "generally incorrect" [140], so put a detached estimate in the reward. And one assertion catches many silent bugs: on the first minibatch after a fresh rollout, every importance ratio must be exactly 1 [141].
If you have an oracle, stop sampling
When something can score every option in a state (a search engine, a simulator, an exact solver, a teacher model's probabilities), why sample a few options and reward them? Usually you should not. Sample and score is RL with the oracle as the reward. Score everything is listwise distillation: score all K options, turn the scores into a softmax target at temperature τ and fit it with a KL loss, as AlphaGo Zero trains its policy toward its search probabilities [142].
Count the information. A full ranking of K options picks one of K! orderings, so it carries up to log2 K! bits: about 22 at K = 10 and 525 at K = 100, against at most log2 G! for G scored samples (15.3 at G = 8) and one bit per pass/fail rollout (computed). The bound overstates what reaches the student: in a toy sweep from K = 8 to 256, the bound's advantage grows about 110-fold while the speed-up of listwise distillation over GRPO grows only from 3.3× to 10.6× (toy simulation).
Two levers make the real gap. Coverage: with every option scored, the expected policy gradient is computed exactly instead of estimated [143]; in a toy with 100 options, the gradient from 8 scored samples had a cosine of only 0.28 with the exact one. The objective: the exact policy-gradient push on option a is πa(va − Eπv), weighted by the model's own probability of choosing a, so a good option the model ignores barely moves, while the distillation push qa − πa moves it whatever the model believes. In Figure 21 (64 options, a linear student; regret 0 is the oracle's pick and 1 an average option), reaching regret 0.1 took GRPO 8,128 positions, the exact policy gradient 4,480 (1.8× from coverage) and soft listwise distillation 1,664 (another 2.7× from the objective), while GRPO on a win/loss reward never got there (toy simulation). Charged per oracle call instead, GRPO wins (8 scores per position, not 64), so the argument needs a cheap oracle.
The public comparisons we found point the same way, with one instructive exception (Figure 22). Targets from a search's visit distribution 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]; supervising every command branch lifted simulated-driving success from 16% to 96% [146]. Qwen3‑8B reached 74.4 on AIME 2024 with on-policy distillation from larger Qwen3 teachers (32B or 235B-A22B) for 1,800 GPU-hours, against 67.6 with RL for 17,920; the teachers' own training is not counted, so this compares two ways of using a teacher that already exists [4]. The exception: in Atari, squared error on raw Q-values, the densest signal, reached only 33.9% of the teacher's Breakout score against 94.7% for a KL loss, because "greedy action choices can be made based on very small differences in Q-values, which receive low weight in the MSE cost" [147]. Density needs a loss that weights what decides the choice.
The gap holds with a language model as the student, in the crossword-tile-game testbed, where a search player scores every legal move. GRPO on Qwen3.5‑4B with low-rank adapters learned from about 1,000 positions per GPU-hour, and after about 25 steps 70% to 78% of its groups were zero-variance, not from mastery: it matched the search player's top move only 39% of the time, confidently wrong. Listwise distillation of the search player's values over 16 candidates, scored in one forward pass, learned from about 42,000 positions per GPU-hour on the same model and ended 31 Elo below the player whose values it copied (testbed measurement; the CPU search that made the labels is not in that rate). Outcomes teach slowly because the win-probability gap between good moves averages 0.009 against an outcome standard deviation of 0.43, so one such gap takes about 2 × (0.43/0.009)² ≈ 4,600 games to resolve at one standard error (computed); one oracle label settles it.
The five jobs RL keeps
When is RL still the right tool? When one condition that listwise distillation needs is missing. There are five.
1. There is no oracle, only a verifier. A math checker or a test suite passes or fails a whole output and cannot rank alternatives, so there is no list to distill. DeepSeek-R1-Zero learned to reason from "a rule-based reward system" of accuracy and format rewards [149].
2. The teacher sees what the student cannot. Privileged information "is marginalized during imitation learning, resulting in an 'imitation gap'" [150]. In the tile-game testbed, a search player that sees the opponent's rack is a yardstick, not a teacher: its best move rests on tiles the student never sees (Part VI uses it to measure the luck ceiling).
3. The oracle misprices the long run. Distillation copies the oracle's blind spots. In a toy where each move's value has an immediate part a myopic oracle sees and a delayed part that partly disagrees, distilling 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 simulation, 5 seeds). Public work finds the better order: distillation then RL "consistently outperforms pure OPD, pure RLVR, and all such joint baselines" [151]. The RL stage also buys robustness off the training distribution: outcome-reward RL carried over to unseen rule and visual variants where supervised fine-tuning memorized, though fine-tuning first still stabilized 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 optimum, and distillation lands near the teacher: Expert Iteration's apprentice won "just over half of games played" against the search it imitated [144]. Going further takes a better teacher, which Expert Iteration builds by searching over its own network and distilling again, and DeepSeek-V4 trains domain experts with RL before consolidating them "through on-policy distillation" [117]: RL makes the oracles, distillation copies them. Maximizing a noisy teacher's argmax backfires: in the testbed, an RL stage after distillation drove the policy's entropy from 1.9 to 0.08 nats and lost 9 points of win rate, because two independent search labels agreed on the best move in only 77% of positions (testbed measurement).
5. Each option is expensive to score. A listwise target charges one oracle call per option; the chess dataset above took "roughly 8864 days of unparallelized Stockfish evaluation time" [145]. With human raters or slow simulators, score a shortlist.
DAgger fixes drift, not ignorance
Should you pay to have the oracle label the student's own states? Only if the student drifts. Offline imitation trains on the expert's states, and a student that errs wanders where the expert never went: "a classifier that makes a mistake with probability ϵ under the distribution of states/observations encountered by the expert can make as many as T²ϵ mistakes in expectation over T-steps" [153]. DAgger has the expert label the states the student visits, so the bound grows only linearly in T, and on-policy distillation is DAgger with a soft teacher [154], "a one-line change on top of RL implementations which use KL regularization" [155].
It pays in proportion to drift. In Hex, three DAgger rounds added 120 Elo [144], though they also quadrupled the data; in simulated driving, adding the student's own rollouts lifted success from 16% to 64% [146]. In the tile-game testbed DAgger added nothing at matched GPU-hours, most likely because fresh tiles and the opponent's move reshuffle much of the position each turn. A toy corridor shows the switch: without reshuffling, offline distillation's excess cost grew to 1.91 at 500 steps against 0.08 for DAgger; with 10% of moves drawing a fresh state, the two landed within 0.03 (toy simulation, 20 seeds).
The pre-test is cheap: have the oracle score the student's moves on the student's own states and on the oracle's, and if the regrets match there is no drift to fix. Mind the KL direction too: reverse KL is mode-seeking, so the student "learns one specific behavior (the teacher's) instead of spreading its distribution across several suboptimal options" [155], which suits a final model, not a student that RL will train next (job 3).
Knowledge versus procedure
What can each signal put into a model? Knowledge arrives through tokens. A scalar reward can make a procedure reliable, but it rarely creates one the model cannot already sample.
SFT mostly selects a format. LIMA was fine-tuned on "only 1,000 carefully curated prompts and responses", on the view that "almost all knowledge in large language models is learned during pretraining" [156].
RL with verifiable rewards mostly sharpens. On AIME 2024 at k = 1,024 samples, 13.3% of problems were solved only by the base model and 0.0% only by its RL-trained version, which "mainly sharpens the distribution within the base model's prior rather than expanding beyond it", whereas distillation "can introduce new reasoning patterns from the teacher" [157]. Qwen3's RL left pass@64 at 90.0; on-policy distillation lifted it to 93.3 [4]. RL edits little, leaving 68.5% to 96.0% of parameters unchanged in public checkpoints [158], and "preserves prior knowledge and capabilities significantly better" than SFT [159]. Expansion appears with long, broad training where the base is weak (ProRL's 2,000-plus steps took a task where the base "exhibits no capability" from 0.00 to 7.91 pass@1 [138]), yet "the shrinkage of observed support outweighs its expansion" [160]. Figure 23 shows the crossover in the addition toy.
New facts through fine-tuning raise hallucination. "As the examples with new knowledge are eventually learned, they linearly increase the model's tendency to hallucinate" [161], and reasoning fine-tuning "degrades abstention (by 24% on average)" [162]. Tokens plus a teacher can repair the damage: mid-training Qwen3‑8B on a company's internal documents alone cut its instruction-following score from 85% to 45%, while mixing in chat data and then distilling on-policy from the original model restored it to 83% and raised internal question answering from 18% to 41% [155].
A scalar reward cannot quickly teach a procedure the model cannot sample. In the tile-game testbed, a language 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 generate moves from the board: 89.5% of its free moves were illegal, and it gamed the legality reward (a legal one-tile play earned about +0.1, an illegal move −0.5) by writing one-letter plays, 1,503 of 2,307 answers against 26 at the start. A decoder constrained 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 (testbed measurement). Legal is easy; good is hard. RL selects among behaviors the base can produce, and a move generator was not one of them.
What the model sees can matter more than how good its teacher is. In the same testbed, four engine facts per option (such as the opponent's best reply) cut per-move win-probability regret from 0.0105 to 0.0079 (95% interval of the difference −0.0038 to −0.0015), while labels two to three times closer to the truth changed nothing measurable, because the student's own error was four to five times its labels'. Handing 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 (interval 26 to 33) for about four CPU-seconds a game (testbed measurement). Publicly, a chess transformer whose top moves all look won will "double-check this condition with Stockfish" [145]; tool use is the general case.
Distill or RL?
The part reduces to at most four questions (Table 11); ask them in order and stop at the first answer that names a recipe. The tile-game testbed's legal search player ends at offline listwise distillation; the rack-seeing player stops at question 2.
Table 11. Distill or RL? At most four questions decide. Each row is asked only if the previous row's answer was "yes".
| # | Question | If no | If yes | Why |
|---|---|---|---|---|
| 1 | Can 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. |
| 2 | Does 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). |
| 3 | Does 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.). |
| 4 | Is 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-variance groups and near-zero entropy. Has it learned the task?
Not necessarily. Low variance and low entropy also describe a policy that is confidently wrong, as in the testbed, where agreement with the oracle's top move was 39%. Check held-out agreement with an oracle before reading collapse as mastery.
Why not distill the search player that sees the opponent's rack, which beats every legal player in the testbed?
Its best move depends on tiles the student never sees, so the student can copy only a blur of the decision: the imitation gap. Distill the legal search player and keep the rack-seeing one as a yardstick for how much the hidden information is worth.
After training, a model writes legal moves 100% of the time through a constrained decoder. What has training taught it?
Nothing the legality rate can show: the decoder guarantees legality for any scores, even random ones. Measure quality (regret against an oracle, win rate on paired deals) instead.
Every claim in this part is a comparison between two numbers. Part VI asks how often such comparisons are noise, how evaluation designs tilt them, and what to do where luck and hidden information set a ceiling no method can pass.
Part VIMeasuring in noisy worlds
When is a measured gain real, how do evaluation designs flatter one side, what ceiling do luck and hidden information put on every legal player, and why are markets the hardest RL domain?
The last two ledger lines concern the comparisons every earlier part relied on. A gain can be real and still unreadable, because the evaluation cannot see an effect that small: a statistics problem with known remedies. And part of the gap to a perfect score may be closable by no player, because the information does not exist at decision time: a property of the domain, which the environment should measure and report.
A score is a sample
How large a gain can a 30-problem benchmark see? Less than most papers claim. A score mixes three random draws: which items the benchmark contains, which answers the model happened to sample [5] and, for a claim about a training recipe, which training run you got [163]. For pass/fail items the standard error of an accuracy p on n items is √(p(1 − p)/n): at 62% accuracy the 95% interval is ±17 points on 30 items, ±5.5 on 300 and ±3 on 1,000 (computed). In Figure 24, which evaluates one model 20 times at each size, 37% of single runs on 30 items read 3 or more points above the truth (exact binomial): a "gain" that is pure noise.
Small evaluations also need a better interval, because the textbook normal-approximation (Wald) interval understates uncertainty below a few hundred items [7]: at 30 items and a true accuracy of 90%, a nominal 95% Wald interval covers the truth 81% of the time and the Wilson interval 97% (computed exactly). On AIME 2024, pass@1 has a standard deviation of 5 to 15 points across sampling seeds; re-run under one protocol, three variants of a method whose original report looked promising scored 28.9, 31.3 and 29.7 against a baseline of 28.7 ± 4.8, none significant [164]. On Chatbot Arena, two submissions of the same checkpoint scored 1069 and 1052 [165].
Each draw has its own remedy, in order. Extra samples per item remove sampling noise, which dominates the gap between two checkpoints of one run because they mostly solve the same items; only more items support a claim beyond the test set; and only more training runs support a claim about a recipe: in deep RL, a 25% improvement in median score needed about 25 runs per algorithm to be statistically defensible [163]. Lowering the sampling temperature to cut variance changes what you measure [5], and the serving stack is a draw of its own: one model's AIME 2024 score varied by up to 8 points across compute clusters [164]. Run both arms on one stack, interleaved.
Pair, cluster, then count
Can the same items buy more precision? Yes, for free, if both arms answer them. The per-item difference has standard error √(SEA² + SEB² − 2ρ·SEA·SEB), where ρ, the correlation of the two arms' per-item scores, is usually positive because models tend to agree on which items are easy and which are hard [5]; at ρ = 0.5, pairing halves the variance of the difference (computed). Checking whether two 95% intervals overlap is the wrong test: with no true difference and equal errors they overlap more than 99% of the time [166], so the check misses most real gains.
Cluster on what you generated. Variants of one seed share its quirks, and episodes in one environment share its bugs; clustered standard errors were 3.05 times the naive ones on DROP [5]. Kish's design effect says variance grows by 1 + (m − 1)ρ for clusters of m items with intra-cluster correlation ρ [167], so ten variants per seed at ρ = 0.3 make 1,000 tasks worth about 270 independent ones, and because the effective count k·m/(1 + (m − 1)ρ) approaches k/ρ, no number of variants lifts 100 seeds past about 333 (computed). Bootstrap the whole hierarchy too: in a simulation calibrated to a computer-use benchmark, resampling only rollouts gave a nominal 95% interval "just 17% suite-level coverage" [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 variance of the difference; under Miller's illustrative assumptions a 3-point gap needs about 969 questions, hence his advice of at least 1,000 for a new evaluation [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 independent episodes per model at 80% power (computed). Figure 25 does this arithmetic for your design.
Games build pairing into the format. Duplicate Scrabble deals every player the same tiles [170], Stockfish's test farm scores games in pairs [171], and poker's AIVAT subtracts the luck of the cards with a value function, which "can reduce the number of hands needed to draw statistical conclusions by more than a factor of 10" [172]. Pairing works only while the shared luck stays shared: in the tile-game testbed, playing each shuffled bag twice with seats swapped cut the standard deviation of a pair's result by only 7% to 13% against two independent games, because the draws diverge after the first different move. A switch-on design works far better. When a component acts only late, as an endgame solver does, both arms play identical moves until it switches on, and the per-pair standard deviation fell from about 0.31 to 0.07–0.09, cutting the pairs needed 11- to 22-fold (testbed measurement). When a comparison comes back even, state the null as an interval: a 1,000-game match that ends at 50% rules out only gains beyond about ±22 Elo (computed).
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 reliably. Training that climbs the tail, toward reliability on every attempt and on the hardest tasks, is invisible to a mean, and so is training that quietly makes a model guess more.
Start with wrong versus abstained. Under binary grading "I don't know" scores the same as a wrong answer, so "IDK-type responses are maximally penalized while an overconfident 'best guess' is optimal" [79]. On SimpleQA, GPT-4o is correct on 38.2% of questions and wrong on 60.8%; Claude-3.5-Sonnet is correct on 28.9%, abstains on 35.0% and is wrong on 36.1% [173]. Ranked by accuracy GPT-4o beats Claude-3.5-Sonnet; ranked by wrong-answer rate the order reverses. Kalai et al. propose stating a confidence target t in the prompt: +1 for a correct answer, 0 for abstaining and −t/(1 − t) for a mistake. Under it, GPT-4o stays ahead of Claude only while t is below about 0.27; o1-preview (42.7% correct, 48.1% wrong) beats GPT-4o at every t; and from t ≈ 0.47 a model that always abstains beats all three (computed; Figure 26). The penalty belongs in the report, and the same rule is the reward that teaches a model to abstain.
Then the reliability tail. τ-bench's pass^k is the chance that all k attempts at a task succeed; its GPT-4o agent succeeded 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 succeeds 60% of the time, or 60% if 60% of tasks always succeed and the rest never do (computed). METR's strongest measured agent has a 50% time horizon of about 17 hours (an estimate METR flags as unreliable) but an 80% horizon of about 3.1 hours [174], and on Harvey's Legal Agent Benchmark a frontier model passed 91.2% of rubric criteria but completed only 8.3% of tasks [169]. Criteria passed and tasks finished are different products.
The bottom of the task distribution has its own selection trap. If every task truly succeeds 60% of the time and you rank tasks by four attempts each, the worst tenth averages about 19% (computed), because picking the worst tasks also picks their unlucky draws. A curriculum that retires tasks on a short streak, or a report of "our gain on the hardest decile", inherits this regression to the mean; choose the hard band on one set of attempts and score it on fresh ones.
Fair comparisons
How does an evaluation flatter 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. Adversarial filtering keeps the items a reference model gets wrong, so that model and its relatives score low on whatever remains; Phang et al. found rankings on filtered sets "highly sensitive to the choice of adversary model", and "There is no case where the rank improves when filtering with the same pretrained model" [175]. SimpleQA, for example, "is adversarially collected 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 screening and by nothing on an unscreened sample. The screen also sets a regression trap: B scored 0% on its kept items by construction but about 39% when run again, so a "new version" of B shows a large, spurious gain on its own filtered set (toy simulation).
Beat the opponent at its best. Well-tuned LSTMs beat newer architectures once both sides were tuned [176]. For RL on language models, best effort includes test-time compute: "base models achieve higher pass@k score when k is large" [157], so compare at matched sampling compute with a selector you could deploy, such as a majority vote or a verifier, never an answer key. Chess shows the standard: after critics objected to the 2017 match conditions, the rematch gave Stockfish three hours a game, a 32 GB hash and endgame tablebases, and AlphaZero still scored +155 −6 =839 over 1,000 games [177].
Selection is the quiet asymmetry. Before the Llama 4 release, Meta tested 27 private variants on Chatbot Arena, and such best-of-N disclosure "systematically inflates model rankings" [165]. Picking the best step of one training run is the same move: the best of 10 equally good checkpoints 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 confirmation set removes the gain (computed 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 perfect" that no legal player can close looks like a modeling failure and absorbs work that buys nothing. The tile-game testbed measures the ceiling 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 highest score now) against itself, where every point of spread is luck, the final spread had a standard deviation of 96 points, and the player who drew both blank tiles, the game's two wildcards, won 73% of those games (testbed measurement). A player that outscores its opponent by Δ points a game on average wins about Φ(Δ/σ), with Φ the standard normal distribution function, so at σ ≈ 96, winning 90% of games would need a mean lead of about 123 points (computed); the best legal player measured led the greedy bot by 65 and won 79%. Public work sees the same scale: a player that could see its opponent's rack outscored its rival by 37 points a game [16].
The ceiling ladder in Figure 28 gives each rung a measured 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 compute did no better. Shown the tiles the opponent kept from its last move, the most any rack inference could ever recover, it gained nothing (78.7%); shown the opponent's whole rack it won 92.8%, and shown the bag order too, all 400 of its games. The illegal rungs use the same search design, so each is a lower bound on what that information is worth and the closeness figures that follow are upper estimates. Closeness, (W − 50%)/(bound − 50%), depends on the opponent: 0.68 against the greedy bot, 0.40 against the equity bot (63.7% against 84.3%) and 0.23 against the simulation bot (54.2% against 68.5%). The weaker the opponent, the closer legal play sits to its information bound; against the strongest one, three quarters of the reachable distance is still open. Against the greedy and equity bots (the kept-tiles rung was not run against the simulation bot), the 95% lower bounds put at least about 80% of the gap to the rack-seeing bound on tiles the opponent has just drawn, which nothing it does can reveal (testbed measurement). A public experiment found the same shape: Bayesian rack inference won 51.9% ± 0.8% against a strong bot, knowing the opponent's exact kept tiles 53.3%, and a full-rack oracle only about 62% [6].
Inside the bound, search and learning paid in an unexpected order (all testbed measurements). More of the same search stopped paying, at about +2 points of W per doubling of simulations, and four times the simulations at a short horizon added nothing, while one more ply of look-ahead added 4.0 points [1.4, 6.6]: more samples of a biased estimate only make the bias more certain. The reliable gains came from exactness and a better value. An exact solver for the perfect-information endgame added 1.9 points of W, and a win-probability 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 iteration trains a network on a search player's choices and lets it guide the next search [144], the loop behind AlphaZero [178]. In the testbed it played about half a million games, improved once by roughly 5 Elo and plateaued: the apprentice caught up with the expert in one generation, and a sharper copy of the same search is not a stronger player. Self-play compounds only when each generation's expert can find something the last could not, which a learned value supplies and KataGo's playout-cap randomization was built to feed [179]. Sequential promotion tests are weak evidence on their own: in the testbed, one passed a candidate truly worth +2 Elo 11% of the time, so confirm every promotion on a fresh, fixed-size match (testbed measurement).
Markets: the environment must carry the statistics
Why are markets the hardest RL domain? Because every property that makes an environment trustworthy fails there at once.
- Most of every reward is luck. The best machine-learning forecasts of individual US stock returns reach a monthly out-of-sample R² of 0.33% to 0.40% [180]. An annualized Sharpe ratio estimated from T years has a standard error of roughly 1/√T [181], so a true Sharpe of 0.7 needs about 8 years to reach t = 2, and one quarter of daily data has a standard error near 2 (computed).
- The reward drifts. Across 97 published predictors, portfolio returns were 26% lower out of sample and 58% lower after publication [182].
- The agent moves the market. Impact grows roughly with the square root of the size traded [183], so ignoring the agent's own orders rewards strategies that work only at zero size.
- Simulators are wrong where it matters. Replay "does not substantially adapt to or respond to the presence of the experimental strategy", and for interactive agent-based simulation "it is unclear if the market environment they provide is realistic" [184].
- Language models remember the future. Told to ignore everything after 2010, GPT-4o still called quarterly GDP growth against a 2.5% threshold with 98.0% accuracy on the quarters after it, against 97.6% before [185].
So the environment, not the agent, must carry the statistics. Five design rules follow.
Make an as-of API the only data path, gated on knowledge time. Every record carries three clocks: valid time (the period a fact describes), knowledge time (when a participant could first have known it) and capture time (when your pipeline saw it) [186] [187], and only knowledge time answers "could the agent have known this at the as-of time?" The SEC's frames API "aggregates one fact for each reporting 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 calendar Q2 2025 (88%) come from 2026 filings, mostly the next year's comparatives, whose values can differ from what was knowable in August 2025 (computed from the public API on October 18, 2026). Today's state can also encode tomorrow's label: in vulnerability triage, a naive random split with unfiltered evidence inflated apparent prospective recall 8.5-fold [189]. Split in time order, purged and embargoed when labels span time [190].
Score every candidate on shared random draws. Any (PO)MDP can be made deterministic by drawing its random numbers up front and reusing them for every policy [191]. In the toy execution simulator, detecting a 0.23 basis-point improvement at 80% power took about 3.15 million trading days on unpaired realized costs, about 5,400 paired on the same days and shocks, and about 37 once the environment replaced realized price luck with its known expectation (toy simulation; Figure 29). Live, where two policies cannot trade the same order, randomized orders need about 7,400 orders, and the usual mid-price benchmark forgives the trader's own lingering impact, which in the toy reversed two true rankings of schedules. Prefer expected scores where outcomes resolve late: in public work, rewarding "the realized per-play outcome fails" [192].
Keep a trial ledger and charge the reward for the search. The expected best in-sample Sharpe of 100 skill-less six-year backtests is about 1.03 (computed with Bailey and López de Prado's formula [193]), so "Sharpe 1.0, best of 100" is what pure search produces. 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 Reality Check [194], bootstrapped over the whole ledger, passed noise at its nominal 5%.
Put costs and impact inside the transition, and anchor money rewards to a certified bound on real data. Score an execution or storage-arbitrage policy as a capture ratio against a perfect-foresight optimum on the same prices: the reward never saturates, any score above the bound is a bug, and the bound sizes the prize (in the toy execution simulator, 0.24 basis points over the closed-form schedule).
Check live baselines and licenses before the architecture. Most models in StockBench struggled 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 trading [197]. Licenses bind before prices: Kalshi's data terms forbid training an AI system on its data without consent [198], and from the US consolidated tape's planned operative date of April 1, 2027, training a model on tape data is non-display use [199].
Check yourself: Part VI
A fine-tune raises accuracy by 2 points and the wrong-answer rate by 6. Under a confidence 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 reachable distance; measured against 100% it would look like 0.59, which misreads luck as a skill gap. It depends on the opponent: 0.40 against the equity bot and 0.23 against the simulation bot, where most of the distance is still open.
A strategy shows a Sharpe ratio of 1.5 over its first three months live. How much does that tell you?
Very little. One quarter of daily data gives a standard error near 2, so a strategy with no skill reads above 1.5 about a fifth of the time.
The checklist that follows collects every rule by the ledger line it protects.
The practitioner checklist
What is the whole guide as a list you can run on Monday?
The decision rules of Parts I to VI, grouped by the ledger line each protects, each with one anchoring number. Use it to specify an environment, audit a run, or read someone else's claimed gain.
0. Instrument (Part I)
- Isolate everything that scores from everything being scored, infrastructure included, and re-test with each model generation (an exploit agent that did no legitimate work scored 73–100% on eight benchmarks).
- Prove soundness before learnability: oracle at the maximum, do-nothing far below, every canary at or below the floor (do-nothing beat GPT-4o on τ-bench airline, 38% to 35%).
- Design refresh into the first release, and reward a ratio where one exists (targeted benchmarks passed 80% within 9–16 months).
1. Empty (Part II)
- Keep tasks in the band of the policy you train, and refill it as it drains (at p = 0.9 and 8 rollouts, 43% of groups carry no gradient).
- Test the verifier before generating: reference passes, known-wrong fails, reformatted-correct passes, degenerate fails (rule checkers miss 14% of correct answers).
- Give every operator a stated contract, and measure its effect on pass rate and on one shortcut feature.
- Escalate rollouts sequentially before retiring a task (ruling out a 2% pass rate takes 149 straight failures).
- Deduplicate and split on a structural signature, and drop whole lineages of seeds that match evaluation items (rephrased test items lifted one model from 28.7 to 95.3).
- Report real-task scores beside synthetic ones, buy seed families before variants, and price a usable task through the funnel, not the LLM bill.
2. Wrong (Part III)
- Judge a false positive by whether the policy can produce it on purpose across prompts (test-skipping hacks spread to nearly every environment of one frontier run).
- Bound the false-positive rate on a fixed adversarial set, denominator stated (zero in 299 gold-wrong samples bounds it below 1%).
- Treat difficulty calibration as an integrity control (a lone hacked sample in a saturated group of 8 gets advantage √7).
- Never clip a partial-credit reward at the floor, and test that every canary trips its own defense (clipped, the Brier score pays 0.70 for false certainty against 0.448 for the truth).
- Judge an exploit policy by its mean, gate detected hacks or price the penalty above bonus ÷ recall, and offer an abort action (cheating on impossible tasks fell from 54% to 9%).
- Put judges behind a strict rule, ask narrow questions in both orders, and audit the judge's false-positive rate on rejects (a reference answer cut judge failures from 14 of 20 to 3 of 20).
- Hold out a gold signal for any learned reward and stop by divergence against √KL.
- Score the same outputs a second way and run a random-reward control on a second model family (re-scoring moved models 200 or more leaderboard places).
3. Corrupted (Part IV)
- Measure trainer-idle, generator-idle and p99 rollout time before redesigning (rollout took 63–87% of production steps).
- Correct staleness and mismatch with the sampler's recorded log-probabilities, and alert on the sampler-trainer log-ratio (naive PPO 31.6, decoupled 40.6 at staleness 4 to 16).
- Check trained against generated length distributions under fast schedulers; size warm pools by L + z√L; key steps by request id; mask infrastructure failures.
- Train on the sampler's token ids with a writer mask, a constant loss divisor, masked truncations and context resets as segments (Search-R1: 0.431 masked against 0.343 unmasked).
4. Coarse (Part V)
- Record the recipe, not the trainer's name, and add a piece only if the mechanism it acts on is present.
- If an oracle can score every option cheaply, distill its ranking with a soft target (given larger teachers, 74.4 for 1,800 GPU-hours against 67.6 for 17,920).
- Keep RL for verifier-only domains, privileged teachers, myopic oracles, beating the teacher and expensive scores, and buy on-policy labels only when the student drifts.
- Put knowledge in through tokens and tools, use RL for reliability, and hand exactly solvable sub-problems to solvers.
5. Unreadable (Part VI)
- Size the evaluation before you run it (a 3-point gap needs about 1,000 paired questions under Miller's illustrative assumptions).
- Report Wilson or bootstrap intervals on small sets; pair on shared items and cluster on the seed (100 seeds cap near 333 effective tasks at ρ = 0.3).
- State a null as an interval (an even 1,000-game match rules out only gains beyond ±22 Elo).
- Report correct, 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%).
- Name every screen, give the opponent its best effort, and report the variants you tried (best of 10 equal checkpoints reads 7.5 points high on 100 items).
- In markets, gate data on knowledge time, pair on shared draws, charge for the trial ledger and score against a certified bound (the best of 100 noise backtests shows a Sharpe near 1.03).
6. Absent (Part VI)
- Measure an illegal-information bound against the opponent you care about before setting a goal, and judge closeness as a share of it (a full-rack oracle won only about 62% against a strong bot).
- Spend nothing on information that does not exist at decision time (in the same public test, rack inference won only 51.9%).
Most of these checks have open implementations to start from (Table 12); read each one's defaults against the rules above.
Table 12. Open building blocks named in this guide, and what each is for.
| Component | What it is | Use it for |
|---|---|---|
| OpenEnv [200] | An open environment specification with a draft validator | Drawing the agent and infrastructure boundary; the L1 to L3 checks of Table 2 |
| verifiers [201] | Prime Intellect's library for packaging RL environments and evaluations | One format for an environment, its reward and its evaluation |
| Terminal-Bench [63] | A task format and harness for command-line tasks with human-reviewed tests | Task bundles with hidden tests and exploit audits |
| TRL [124] | Hugging Face's post-training library, including a GRPO trainer | Small and medium runs; record its defaults (Part V) |
| verl [106], AReaL [3], SkyRL [109], ROLL [202] | Open RL trainers with asynchronous and off-policy modes | Large runs; their staleness knobs mean different things (Part IV) |
| vLLM [122] | An inference engine whose OpenAI-compatible API can return token ids | Token-in, token-out records at the model-call boundary |
Then attach an evaluation card to every RL result (Table 13). Each row answers a different question about whether the loop learned.
Table 13. The evaluation card: what to report with every RL result, and why.
| Report | Why |
|---|---|
| pass@1 on held-out prompts, with an interval over seeds | Reliability, and whether the difference is noise |
| pass@k up to a large k, start against final | Sharpening against expansion |
| pass^k, and a worst decile scored on fresh attempts | Consistency; climbing the tail |
| Correct, wrong and abstained, with the penalty | Knowing against guessing |
| Results on held-out environments and on real tasks that seeded nothing | Transfer beyond the training distribution |
| A random-reward control and a second model family | Learning against elicitation of a format |
| Decontamination method and evaluation dates | Memorization |
| Infrastructure error rate and resource settings | Several points of noise |
| Variants tried, selection split, and any screening model | Selection and screening bias |
| The information bound, in stochastic or hidden-information domains | How close is close |
| For judged rewards, the judge's false-positive rate on rule rejects and on swapped orders | Whether the judge, not the policy, earned the reward |
| A transcript sample of the highest-reward episodes | Hacks and verifier false positives |
Finally, the signal ledger, filled in (Table 14).
Table 14. The signal ledger, filled in: where a rollout's information is lost, the number that anchors each loss, and what recovers it.
| Line | Loss | Anchor | What recovers it |
|---|---|---|---|
| 0. Instrument | The environment is the scarce input, and its boundary leaks | An exploit agent that did no legitimate work scored 73-100% on eight audited benchmarks | Isolation, soundness proofs, then a factory |
| 1. Empty | Tasks the policy always or never solves | 43% of groups zero-variance at p = 0.9, 8 rollouts (computed) | Calibrate on the policy; refill the band; seed families over variants |
| 2. Wrong | The reward pays for something else | Test-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% hacked | Grade state, not text; canaries that trip; exploit policies judged by the mean |
| 3. Corrupted | The record no longer matches the policy | 31.6 naive, 40.6 decoupled, 42.0 synchronous (AIME 2024, staleness 4 to 16) | Sampler log-probabilities, token-in token-out, masks |
| 4. Coarse | One bit per episode when a ranking existed | Given 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. Unreadable | The effect is below the noise floor | 5 to 15 points of seed standard deviation on a 30-problem benchmark | Pair, cluster, count; report tails and intervals |
| 6. Absent | The information does not exist for any legal player | A 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 opponent | Measure the bound against the opponent you care about; spend effort below it |
An environment cannot make a domain less noisy or a hidden tile visible. What it can do is make every number it emits honest about how much search, luck, leakage and noise stand behind it: the trials it ran, the draws it shared, the clock it gated, the bound it measured. An environment that reports those four things is a measuring instrument. One that does not is a source of numbers an optimizer will learn to please.
Methods: the toys and testbeds
What stands behind the toy and testbed numbers?
Each toy and testbed is an unpublished program the author wrote and ran, so its numbers cannot be checked against an outside source (Table 15). Intervals over three seeds are Student t-intervals with two degrees of freedom, about 2.2 times wider than a normal interval with the same standard error.
Table 15. The toys and testbeds: setup, scale, seeds and interval method. All are unpublished author measurements.
| Name (kind) | What it is | Scale | Seeds and samples | Intervals | Used 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 solvers | 10 hand-written seeds grown by six operators over four levels into 10,644 verified tasks; a 32-weight softmax policy | 16 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 draws | 95% intervals for proportions; ±1 standard deviation bands over runs or draws | Part II |
| Coding-task factory (toy) | Injects bugs into five small, densely tested Python libraries and passes each candidate through eight gates | 619 candidates, 486 valid, 80 usable | One pass | Counts only | Part 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 quality | Groups of 8; 100 to 200 steps per arm | 3 seeds per arm (2 for a few); a verifier audit of 2,999 answers | 95% t-intervals over seeds; Wilson intervals for audit rates | Parts 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 tokenizers | Batches of 16 to 32; up to 150 training steps | 3 repeats, seeds or task streams per arm | 95% intervals over repeats | Part 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 labels | 64 options per position, 32 positions per step, 4,000 held-out positions | 4 to 20 seeds, stated in place | ±1 standard deviation bands | Part 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 ideas | 20 evaluations per test size; a 40,000-item pool with 2,000 kept items | Fixed random seeds; 20 pools per point | Exact binomial where stated; ±1.96 standard deviations across pools | Part 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 view | Generated tasks with fresh names and numbers | 50 tasks × 8 rollouts for reward-shape tests; 11 canaries × 50 tasks; scripted agents and a random-search exploit policy | Means over tasks | Parts 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 search | 200 to 2,000 seat-swapped pairs of games per comparison; 20,000 greedy-against-greedy games for luck; about half a million self-play games | Each shuffled bag played twice with seats swapped | 95% t-intervals over pairs; Elo from a ladder with fixed ratings | Parts V and VI |
Notes
- 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. ↩
- 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. ↩
- 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
- Zhu et al., Establishing Best Practices for Building Rigorous Agentic Benchmarks (the Agentic Benchmark Checklist), arXiv:2507.02825 (2025)
- Baker et al., Monitoring Reasoning Models for Misbehavior and the Risks of Promoting Obfuscation (2025)
- Fu et al., AReaL: A Large-Scale Asynchronous Reinforcement Learning System for Language Reasoning, arXiv:2505.24298 (2025)
- Qwen Team, Qwen3 Technical Report, arXiv:2505.09388 (2025)
- Miller, Adding Error Bars to Evals: A Statistical Approach to Language Model Evaluations, arXiv:2411.00640 (2024)
- Del Solar, Bayesian Rack Inference in Macondo (2026)
- Bowyer, Aitchison and Ivanova, Position: Don't Use the CLT in LLM Evals With Fewer Than a Few Hundred Datapoints (ICML 2025)
- MATH-500 dataset card (Hugging Face)
- Cobbe et al., Training Verifiers to Solve Math Word Problems (GSM8K), arXiv:2110.14168 (2021)
- Hendrycks et al., Measuring Massive Multitask Language Understanding (MMLU), arXiv:2009.03300 (2020)
- SWE-bench leaderboards
- Jain et al., LiveCodeBench: Holistic and Contamination Free Evaluation of Large Language Models for Code, arXiv:2403.07974 (2024)
- Berkeley Function Calling Leaderboard
- Yao et al., τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains (2024)
- Shao et al., DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models, arXiv:2402.03300 (2024)
- Richards and Amir, Opponent Modeling in Scrabble (IJCAI 2007)
- Model Context Protocol specification, Tools (2026-07-28 revision)
- OpenEnv RFC 001: Abstractions (Hugging Face OpenEnv repository)
- BenchJack: AI agent benchmark hackability scanner, README (UC Berkeley, 2026)
- Berkeley RDI, trustworthy agent benchmarks (blog, April 2026)
- GSO benchmark: leaderboard and changelog (fetched October 2026)
- OpenAI, OpenAI o1 System Card (2024-09-12)
- OpenAI, Learning to reason with LLMs (2024-09-12)
- DeepSeek-AI, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, arXiv:2501.12948 (2025)
- DeepSeek-AI, DeepSeek-V3.2, arXiv:2512.02556 (2025)
- Prime Intellect, Scaling Agentic RL: 365,000+ Environments for SWE, Terminal, and Search (2026)
- E2B pricing (fetched October 2026)
- DeepSeek, DeepSeek Elastic Compute (DSec): a sandbox infrastructure for agent training, arXiv:2609.22978 (2026)
- Denain and Barber, An FAQ on RL environments, Epoch AI (2026-01-12)
- Mechanize, Cheap RL tasks will waste compute (2025-08-18)
- CVDP: Comprehensive Verilog Design Problems, arXiv:2506.14074 (2025)
- NVIDIA, Nemotron 3 Ultra in agentic RTL coding (2026-07-26)
- APEX-Agents, arXiv:2601.14242 (2026-01-20)
- Mercor, APEX-Agents leaderboard (fetched October 2026)
- GSO leaderboard data: scores by date and by speedup threshold (fetched October 2026)
- BRIGHT: A Realistic and Challenging Benchmark for Reasoning-Intensive Retrieval, arXiv:2407.12883 (2024)
- BRIGHT leaderboard (fetched October 2026)
- OpenEnv RFC 008: Environment auto-validation (draft, Hugging Face OpenEnv repository)
- Qwen Team, Qwen3-Coder: Agentic Coding in the World (2025-07-22)
- Yu et al., DAPO: An Open-Source LLM Reinforcement Learning System at Scale, arXiv:2503.14476 (2025)
- Hu et al., BroRL: Scaling Reinforcement Learning via Broadened Exploration, arXiv:2510.01180 (2025)
- Cobbe et al., Leveraging Procedural Generation to Benchmark Reinforcement Learning, arXiv:1912.01588 (2019)
- Bae et al., Online Difficulty Filtering for Reasoning Oriented Reinforcement Learning, arXiv:2504.03380 (2025)
- Yang et al., SWE-smith: Scaling Data for Software Engineering Agents, arXiv:2504.21798 (2025)
- Wu et al., Envs-FORGE: Frontier-Optimized Reward-Grounded Environment Synthesis for Agent RL, arXiv:2608.14312 (2026)
- Wang et al., Self-Instruct: Aligning Language Models with Self-Generated Instructions, arXiv:2212.10560 (2022)
- Zhou et al., Self-Challenging Language Model Agents, arXiv:2506.01716 (2025)
- Huang et al., From Accuracy to Robustness: A Study of Rule- and Model-based Verifiers in Mathematical Reasoning, arXiv:2505.22203 (2025)
- Wikipedia, Metamorphic testing
- Mirzadeh et al., GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models, arXiv:2410.05229 (2024)
- Li et al., GSM-Plus: A Comprehensive Benchmark for Evaluating the Robustness of LLMs as Mathematical Problem Solvers, arXiv:2402.19255 (2024)
- Abdin et al., Phi-4 Technical Report, arXiv:2412.08905 (2024)
- He et al., Skywork Open Reasoner 1 Technical Report, arXiv:2505.22312 (2025)
- Anthropic, Demystifying evals for AI agents (2026)
- Lambert et al., Tülu 3: Pushing Frontiers in Open Language Model Post-Training, arXiv:2411.15124 (2024)
- Yang et al., Rethinking Benchmark and Contamination for Language Models with Rephrased Samples, arXiv:2311.04850 (2023)
- Gandhi et al., Endless Terminals: Scaling RL Environments for Terminal Agents, arXiv:2601.16443 (2026)
- Zeng et al., RLVE: Scaling Up Reinforcement Learning for Language Models with Adaptive Verifiable Environments, arXiv:2511.07317 (2025)
- Wang et al., Agent World Model: Infinity Synthetic Environments for Agentic Reinforcement Learning, arXiv:2602.10090 (2026)
- Pan et al., Training Software Engineering Agents and Verifiers with SWE-Gym, arXiv:2412.21139 (2024)
- Huang et al., R-Zero: Self-Evolving Reasoning LLM from Zero Data, arXiv:2508.05004 (2025)
- Badertdinov et al., SWE-rebench V2: Language-Agnostic SWE Task Collection at Scale, arXiv:2602.23866 (2026)
- Merrill et al., Terminal-Bench: Benchmarking Agents on Hard, Realistic Tasks in Command Line Interfaces, arXiv:2601.11868 (2026)
- Kimi Team, Kimi k1.5: Scaling Reinforcement Learning with LLMs, arXiv:2501.12599 (2025)
- Skalse et al., Defining and Characterizing Reward Hacking (2022)
- Xu et al., TinyV: Reducing False Negatives in Verification Improves RL for LLM Reasoning (2025)
- Zheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (2023)
- Zhong et al., ImpossibleBench: Measuring LLMs' Propensity of Exploiting Test Cases (2025)
- METR, Recent Frontier Models Are Reward Hacking (2025)
- VentureBeat, DeepSWE finds Claude Opus exploiting a benchmark loophole (2026)
- SWE-bench Pro repository, issue #93: Git reward hacking in SWE-bench Pro OSS
- Roth et al., Hack-Verifiable Terminal Bench: Evaluating Reward Hacking in Terminal Tasks (2026)
- Anthropic, System Card: Claude Opus 5.5 (2026)
- Gunjal et al., Rubrics as Rewards: Reinforcement Learning Beyond Verifiable Domains, arXiv:2507.17746 (2025)
- Viswanathan et al., Checklists Are Better Than Reward Models For Aligning Language Models, arXiv:2507.18624 (2025)
- Mahmoud et al., Reward Hacking in Rubric-Based Reinforcement Learning, arXiv:2605.12474 (2026)
- Prime Intellect, Systematic Reward Hacking and Prime Sprints (2026)
- Anthropic, System Card: Claude Sonnet 4.5 (2025)
- Kalai et al., Why Language Models Hallucinate (2025)
- Du et al., Measuring the Checker: Mutation Analysis for GPU-Kernel Benchmark Oracles (2026)
- Mistral AI, Magistral, arXiv:2506.10910 (2025)
- MacDiarmid et al., Natural Emergent Misalignment from Reward Hacking in Production RL (2025)
- Anthropic, From shortcuts to sabotage: natural emergent misalignment from reward hacking (2025)
- Gao, Schulman and Hilton, Scaling Laws for Reward Model Overoptimization (2022)
- Rafailov et al., Scaling Laws for Reward Model Overoptimization in Direct Alignment Algorithms (2024)
- Coste et al., Reward Model Ensembles Help Mitigate Overoptimization, arXiv:2310.02743 (ICLR 2024)
- Eisenstein et al., Helping or Herding? Reward Model Ensembles Mitigate but do not Eliminate Reward Hacking, arXiv:2312.09244 (2023)
- Hugging Face, What's going on with the Open LLM Leaderboard? (2023)
- Hugging Face, Fixing Open LLM Leaderboard with Math-Verify (2025)
- Aleithan et al., SWE-Bench+: Enhanced Coding Benchmark for LLMs (2024)
- Gradient Science, GSM8K-Platinum: Revealing Performance Gaps in Frontier LLMs (2025)
- Wang et al., Large Language Models are not Fair Evaluators (2023)
- Balepur et al., Artifacts or Abduction: How Do LLMs Answer Multiple-Choice Questions Without the Question? (2024)
- Shao et al., Spurious Rewards: Rethinking Training Signals in RLVR (2025)
- Seer: Online Context Learning for Fast Synchronous LLM Reinforcement Learning (2025)
- Team Olmo, Olmo 3 (2025)
- RollArt: Disaggregated Multi-Task Agentic RL Training at Scale (2025)
- Laminar: A Scalable Asynchronous RL Post-Training Framework (2025)
- RollPacker: Mitigating Long-Tail Rollouts for Fast, Synchronous RL Post-Training (2025)
- verl documentation: One Step Off Policy Async Trainer
- Prime Intellect, INTELLECT-3: Technical Report (2025)
- Mercor, Training frontier knowledge work agents: a 397B RL training guide with SkyRL (2026)
- Prime Intellect, GLM-5.2 RL weight transfer in 4 seconds using NIXL and ModelExpress (2026)
- APRIL: Active Partial Rollouts in Reinforcement Learning to Tame Long-tail Generation (2025)
- ROLL Flash: Accelerating RLVR and Agentic Training with Asynchrony (2025)
- verl documentation: Fully Async Policy Trainer
- Hilton, Cobbe and Schulman, Batch size-invariance for policy optimization (2021)
- MiniMax, The MiniMax-M2 Series (2026)
- SkyRL documentation: Fully Async Training
- Stabilizing MoE Reinforcement Learning by Aligning Training and Inference Routers (2025)
- Defeating the Training-Inference Mismatch via FP16 (2025)
- verl documentation: Rollout Correction
- Every Step Evolves: Scaling Reinforcement Learning for Trillion-Scale Thinking Model (2025)
- Khatri et al., The Art of Scaling Reinforcement Learning Compute for LLMs (ScaleRL), arXiv:2510.13786 (2025)
- vLLM blog, IsoExec: Unified Execution to Eliminate Trainer-Inference Mismatch in SkyRL (2026)
- GLM-5: from Vibe Coding to Agentic Engineering (2026)
- DeepSeek-AI, DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence, arXiv:2606.19348 (2026)
- Little's law, Wikipedia (after Little, Operations Research, 1961)
- Hugging Face, OpenEnv tutorial: How OpenEnv environments scale
- Anthropic, Quantifying infrastructure noise in agentic coding evals (2026)
- QEMU documentation: Virtual Machine Generation ID device
- vLLM blog, No More Retokenization Drift: Returning Token IDs via the OpenAI Compatible API Matters in Agent RL (2025)
- Jin et al., Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning (2025)
- Hugging Face TRL documentation: GRPO Trainer
- Fireworks documentation: Multi-turn cost comparison
- Kimi K2.5: Visual Agentic Intelligence (2026)
- Zhou et al., MEM1: Learning to Synergize Memory and Reasoning for Efficient Long-Horizon Agents, arXiv:2506.15841 (2025)
- Liu et al., Understanding R1-Zero-Like Training: A Critical Perspective, arXiv:2503.20783 (2025)
- AgentRL: Scaling Agentic Reinforcement Learning with a Multi-Turn, Multi-Task Framework (2025)
- Feng et al., Group-in-Group Policy Optimization for LLM Agent Training (2025)
- τ²-Bench: Evaluating Conversational Agents in a Dual-Control Environment (2025)
- RAGEN: Understanding Self-Evolution in LLM Agents via Multi-Turn Reinforcement Learning (2025)
- Ivison et al., Unpacking DPO and PPO: Disentangling Best Practices for Learning from Preference Feedback, arXiv:2406.09279 (2024)
- Schulman and Thinking Machines Lab, LoRA Without Regret (2025)
- Yue et al., VAPO: Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks, arXiv:2504.05118 (2025)
- He et al., JustRL: Scaling a 1.5B LLM with a Simple RL Recipe, arXiv:2512.16649 (2025)
- Bridgewater AIA Labs and Thinking Machines, Learning to replicate expert judgment in financial tasks (2026)
- Liu et al., ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models, arXiv:2505.24864 (2025)
- Shah et al., A Comedy of Estimators: On KL Regularization in RL Training of LLMs, arXiv:2512.21852 (2025)
- Tang et al., On a few pitfalls in KL divergence gradient estimation for RL, arXiv:2506.09477 (2025)
- Huang et al., The 37 Implementation Details of Proximal Policy Optimization, ICLR Blog Track (2022)
- Silver et al., Mastering the game of Go without human knowledge, Nature (2017), preprint
- Ciosek and Whiteson, Expected Policy Gradients, AAAI (2018)
- Anthony, Tian and Barber, Thinking Fast and Slow with Deep Learning and Tree Search (Expert Iteration), NeurIPS (2017)
- Ruoss et al., Amortized Planning with Large-Scale Transformers: A Case Study on Chess, arXiv:2402.04494 (2024)
- Chen et al., Learning by Cheating, CoRL (2019)
- Rusu et al., Policy Distillation, arXiv:1511.06295 (2015)
- Gemma Team, Gemma 3 Technical Report, arXiv:2503.19786 (2025)
- DeepSeek-AI, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, arXiv:2501.12948v1 (2025)
- Weihs et al., Bridging the Imitation Gap by Adaptive Insubordination (ADVISOR), NeurIPS (2021)
- Li et al., Sequential Beats Joint: On the Interplay between On-Policy Distillation and RLVR, arXiv:2609.04108 (2026)
- Chu et al., SFT Memorizes, RL Generalizes: A Comparative Study of Foundation Model Post-training, arXiv:2501.17161 (2025)
- Ross, Gordon and Bagnell, A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning (DAgger), AISTATS (2011)
- Agarwal et al., On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes (GKD), ICLR (2024)
- Lu and Thinking Machines Lab, On-Policy Distillation (2025)
- Zhou et al., LIMA: Less Is More for Alignment, arXiv:2305.11206 (2023)
- Yue et al., Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?, arXiv:2504.13837 (2025)
- Mukherjee et al., Reinforcement Learning Finetunes Small Subnetworks in Large Language Models, arXiv:2505.11711 (2025)
- Shenfeld et al., RL's Razor: Why Online Reinforcement Learning Forgets Less, arXiv:2509.04259 (2025)
- Wu et al., The Invisible Leash: Why RLVR May or May Not Escape Its Origin, arXiv:2507.14843 (2025)
- Gekhman et al., Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations?, EMNLP (2024)
- Kirichenko et al., AbstentionBench: Reasoning LLMs Fail on Unanswerable Questions, arXiv:2506.09038 (2025)
- Agarwal et al., Deep Reinforcement Learning at the Edge of the Statistical Precipice (NeurIPS 2021)
- Hochlehnert et al., A Sober Look at Progress in Language Model Reasoning (2025)
- Singh et al., The Leaderboard Illusion (2025)
- Payton, Greenstone and Schenker, Overlapping confidence intervals or standard error intervals: what do they mean in terms of statistical significance? (2003)
- Design effect (Kish), Wikipedia
- D'Oro et al., Computer Use at the Edge of the Statistical Precipice (2026)
- Anthropic, System Card: Claude Opus 5.5 (2026)
- Duplicate Scrabble, Wikipedia
- Stockfish Fishtest wiki, Fishtest mathematics
- Burch et al., AIVAT: A New Variance Reduction Technique for Agent Evaluation in Imperfect Information Games (2017)
- Wei et al., Measuring short-form factuality in large language models (SimpleQA), arXiv:2411.04368 (2024)
- METR, Time horizons
- Phang et al., Adversarially Constructed Evaluation Sets Are More Challenging, but May Not Be Fair (2021)
- Melis, Dyer and Blunsom, On the State of the Art of Evaluation in Neural Language Models (2017)
- Chess.com, AlphaZero Crushes Stockfish In New 1,000-Game Match (2018)
- Silver et al., Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm (2017)
- Wu, Accelerating Self-Play Learning in Go (KataGo, 2019)
- Gu, Kelly and Xiu, Empirical Asset Pricing via Machine Learning (Review of Financial Studies, 2020)
- Lo, The Statistics of Sharpe Ratios (Financial Analysts Journal, 2002)
- McLean and Pontiff, Does Academic Research Destroy Stock Return Predictability? (Journal of Finance, 2016)
- Tóth et al., Anomalous price impact and the critical nature of liquidity in financial markets (2011)
- Balch et al., How to Evaluate Trading Strategies: Single Agent Market Replay or Multiple Agent Interactive Simulation? (2019)
- Lopez-Lira, Tang and Zhu, The Memorization Problem: Can We Trust LLMs' Economic Forecasts? (2025)
- Akidau et al., The Dataflow Model (PVLDB, 2015)
- FRED API documentation, real-time periods
- SEC, EDGAR application programming interfaces
- Alpay and Alpay, Compute-Budgeted Exploitability Evidence Graphs for Prospective Vulnerability Triage (2026)
- López de Prado, Advances in Financial Machine Learning (Wiley, 2018), ch. 7
- Ng and Jordan, PEGASUS: A Policy Search Method for Large MDPs and POMDPs (2000)
- Singh, Reddy and Chopra, Verifiable Rewards for Calibrated Probabilistic Forecasting (2026)
- Bailey and López de Prado, The Deflated Sharpe Ratio (2014)
- White, A Reality Check for Data Snooping (Econometrica, 2000)
- StockBench: Can LLM Agents Trade Stocks Profitably In Real-world Markets? (2025)
- Cheng, Liu and Long, PolyBench: Benchmarking LLM Forecasting and Trading Capabilities on Live Prediction Market Data (2026)
- Yu, Li and You, LiveTradeBench: Seeking Real-World Alpha with Large Language Models (2025)
- Kalshi, Data Terms of Service
- DataCT, US Consolidated Tape: CT Plan Policies v1.2
- Hugging Face, OpenEnv repository
- Prime Intellect, verifiers: a library for RL environments and evaluations
- Alibaba, ROLL: a scaling library for reinforcement learning with large language models