The tool-use cells (Qwen3 8B/14B, think vs nothink, run_code tool loop, 100 samples per problem at t=0.6) re-run on 341 problems published between October 2024 and April 2025 — after the models' training data — against the original window's 714 problems (May 2023–September 2024). Same prompts, same decoding, same grading; only problem freshness changes.
Every configuration loses 37–43% of its pass@1 relative to the original window. The uniformity across sizes and reasoning modes reads as broad familiarity with the older problems rather than something one configuration exploits; era-related difficulty drift is not controlled here.
| cell | pass@1 original | pass@1 fresh | absolute | relative |
|---|---|---|---|---|
| 8B nothink | 0.454 | 0.258 | -0.196 | -43.1% |
| 8B think | 0.770 | 0.460 | -0.310 | -40.2% |
| 14B nothink | 0.494 | 0.300 | -0.194 | -39.2% |
| 14B think | 0.829 | 0.522 | -0.306 | -37.0% |
The fresh window is hard-skewed (45% hard vs 28% originally) with a similar platform mix (AtCoder + LeetCode) and similar statement lengths, so composition is a real but bounded factor.
| window | difficulty | problems | share | median statement chars |
|---|---|---|---|---|
| 2305-2409 (original) | easy | 238 | 33% | 1,032 |
| 2305-2409 (original) | medium | 278 | 39% | 1,348 |
| 2305-2409 (original) | hard | 198 | 28% | 1,635 |
| 2410-2504 (fresh) | easy | 84 | 25% | 967 |
| 2410-2504 (fresh) | medium | 105 | 31% | 1,345 |
| 2410-2504 (fresh) | hard | 152 | 45% | 1,501 |
The direct contamination test: pass@1 on the original vs fresh window computed separately inside each announced difficulty tier, per cell (never pooling arms or sizes). A contaminated original window would show up as inflated original accuracy on hard problems, since memorization lets a model “solve” hard items it otherwise could not, so the original-minus-fresh gap would concentrate there. It does not. Even the strongest cell solves only 54% of original hard problems, nowhere near the ceiling recitation would produce, and the decline is concentrated in the medium tier (and, for the think arm, medium and hard alike), while easy sits at the ceiling and hard-nothink at the floor. That is the signature of a genuine capability drop on unseen problems, not recited hard ones, and it agrees with the Min-K% no-recitation result on the logprobs page. (Easy tiers near 1.0 and hard-nothink near 0.0 have little room to move, so the mid-range carries the cleanest signal.)
Shift-share decomposition of each cell's pass@1 drop into the harder tier mix vs performance decline inside each tier. The counterfactual makes it concrete: give 8B-think the fresh window's harder mix but keep its original per-tier ability, and it would score 0.693 — the mix explains the move from 0.770 only that far; the observed 0.460 requires the within-tier collapse (medium 0.816→0.503, hard 0.446→0.164). For thinking cells about a quarter of the drop is composition, 3/4 within-tier; for nothink cells the split is roughly even. Never-solved problems (0/100 attempts) double for nothink cells (29→54%) and triple for think cells (10→25–32%).
| cell | pass@1 drop | composition (harder mix) | within-tier decline |
|---|---|---|---|
| 14B nothink | -0.194 | -0.099 (51%) | -0.094 (49%) |
| 14B think | -0.306 | -0.068 (22%) | -0.238 (78%) |
| 8B nothink | -0.196 | -0.094 (48%) | -0.102 (52%) |
| 8B think | -0.310 | -0.077 (25%) | -0.233 (75%) |
Monthly solve rate across BOTH windows. The drop does not occur at the window boundary (red): it starts around July 2024 (violet), three months inside the original window, and at constant difficulty mix — April and July 2024 have nearly identical hard shares (0.32) but solve rates of 0.83 vs 0.63. This places the model's effective knowledge boundary around mid-2024: the "original" window is itself part-clean, and the honest familiar-vs-unseen comparison is pre-2024-07 (pass@1 ≈ 0.82) against everything after (≈ 0.45–0.55), a larger gap than the window-vs-window number. Difficulty labels drifting harder over 2024–25 (grey line) compounds but does not explain the step.
Samples that used more run_code rounds pass less often in both windows (selection: harder problems trigger iteration). The fresh window shifts mass toward more rounds at every level of the 8B-think cell.
| window | run_code rounds used | samples | pass rate |
|---|---|---|---|
| 2305-2409 (original) | 0 | 34,146 | 0.612 |
| 2305-2409 (original) | 1 | 14,320 | 0.937 |
| 2305-2409 (original) | 2 | 7,502 | 0.929 |
| 2305-2409 (original) | 3 | 15,432 | 0.885 |
| 2410-2504 (fresh) | 0 | 21,291 | 0.275 |
| 2410-2504 (fresh) | 1 | 5,281 | 0.823 |
| 2410-2504 (fresh) | 2 | 2,454 | 0.782 |
| 2410-2504 (fresh) | 3 | 5,068 | 0.705 |
If the original window's solutions were partially memorised, the model should assign its own CORRECT solutions higher likelihood there. It does not: the per-token likelihood of passing final answers is statistically indistinguishable across windows (deltas of a few thousandths of a nat, mixed sign). The freshness drop reflects harder unseen problem solving, not lost recitation; era-difficulty drift remains uncontrolled.
| cell | mean lp/tok passing, original | fresh | delta |
|---|---|---|---|
| 8B nothink | -0.0480 | -0.0385 | -0.0095 |
| 8B think | -0.1076 | -0.1092 | +0.0016 |
| 14B nothink | -0.0204 | -0.0259 | +0.0054 |
| 14B think | -0.1603 | -0.1748 | +0.0145 |
Paired per-instance bootstrap (shared problems, so common difficulty cancels). Thinking roughly doubles pass@1 on both windows: the lift is not a contamination artifact. On fresh problems, 8B-think matches 8B-nothink's performance on the original window.
| window | model | think − nothink (pass@1) | 95% paired CI | instances |
|---|---|---|---|---|
| 2305-2409 (original) | 8B | +0.316 | [+0.288, +0.343] | 714 |
| 2305-2409 (original) | 14B | +0.334 | [+0.306, +0.364] | 714 |
| 2410-2504 (fresh) | 8B | +0.202 | [+0.167, +0.238] | 341 |
| 2410-2504 (fresh) | 14B | +0.222 | [+0.185, +0.259] | 341 |
Execution-grounded failure modes (per-test harness verdicts, dominant class per failing sample). The two arms fail differently: nothink failures are dominated by running-but-wrong code, and freshness amplifies exactly that (wrong answers grow from 32% to 53% of ALL samples). Think failures are dominated by producing no runnable final answer at all — reasoning that never converges to a program — and that failure mode expands from 16% to 39% of all samples on fresh problems, while its crash/timeout modes shrink. The LLM bug-theme panels (the Failure themes section below) add the semantic layer over these mechanical verdicts. The dominant think-arm mode (no runnable answer) is dissected on the reasoning-traces page: 89% of those samples are cut off mid-reasoning by the token budget, on the same problem failing traces think ~10k characters longer than passing ones, and the truncated tail is often a verbatim repetition loop rather than slow reasoning — so budget increases alone recover less than the 9–11 point ceiling that converting these samples implies.
| cell | failure mode | of failures, original | of all samples | of failures, fresh | of all samples |
|---|---|---|---|---|---|
| 8B nothink | wrong answer | 59% | 32.1% | 71% | 52.9% |
| 8B nothink | no runnable answer | 19% | 10.4% | 14% | 10.5% |
| 8B nothink | time limit | 12% | 6.5% | 7% | 5.5% |
| 8B nothink | runtime error | 10% | 5.3% | 7% | 5.1% |
| 8B nothink | harness timeout | 0% | 0.3% | 0% | 0.2% |
| 8B think | wrong answer | 15% | 3.6% | 21% | 11.1% |
| 8B think | no runnable answer | 70% | 16.2% | 73% | 39.4% |
| 8B think | time limit | 7% | 1.7% | 4% | 2.4% |
| 8B think | runtime error | 7% | 1.5% | 2% | 1.1% |
| 8B think | harness timeout | 0% | 0.1% | 0% | 0.0% |
Sonnet-panel classification of failing fresh-window rollouts into the 7-theme
LiveCodeBench bug taxonomy (one failing k=1 sample per instance), the tool arm
(samuki-hf/tool-use) against the plain no-tools arm (samuki-hf/thinking-rollouts).
The two arms fail semantically differently: the plain arm is almost entirely
logic_flaw (compiles and runs, wrong answer), while giving the model
a run_code tool shifts a substantial slice of failures to surface causes the tool
surfaces — output_format and syntax_typo —
the errors a quick execution would have caught but the model failed to fix within its
three rounds. Within logic_flaw, wrong_algorithm dominates
both arms: on fresh problems the model most often reaches for a wrong approach, not a
small slip.
| size | arm | source | failures | logic_flaw | output_format | syntax_typo | function_misuse | type_conversion | input_parsing | uninitialized_var |
|---|---|---|---|---|---|---|---|---|---|---|
| 8b | nothink | no tools | 290 | 97.6 | 0.3 | 1.0 | 1.0 | 0.3 | 0.3 | 0.3 |
| 8b | nothink | tools | 314 | 87.6 | 0.0 | 11.5 | 0.0 | 1.0 | 0.0 | 0.0 |
| 8b | think | no tools | 251 | 99.2 | 0.0 | 0.4 | 0.0 | 0.4 | 0.0 | 0.4 |
| 8b | think | tools | 272 | 46.7 | 28.3 | 25.0 | 0.0 | 0.7 | 0.4 | 0.0 |
| 14b | nothink | no tools | 272 | 96.0 | 0.4 | 0.0 | 0.4 | 1.5 | 0.7 | 1.1 |
| 14b | nothink | tools | 286 | 95.1 | 0.3 | 3.1 | 0.3 | 0.3 | 0.0 | 1.0 |
| 14b | think | no tools | 238 | 98.3 | 0.4 | 1.3 | 0.0 | 0.0 | 0.0 | 0.0 |
| 14b | think | tools | 250 | 77.2 | 21.6 | 0.8 | 0.0 | 0.4 | 0.0 | 0.0 |
The 7-theme pass puts most fresh-window failures in logic_flaw (compiles, runs, wrong answer); the wrong-answer sub-taxonomy resolves what actually went wrong.
| wrong-answer subtheme | no tools (% of 1026) | tools (% of 867) |
|---|---|---|
| wrong_algorithm | 61.1 | 59.2 |
| wrong_condition | 8.6 | 10.8 |
| intractable_brute_force | 7.2 | 10.3 |
| broken_dp | 5.2 | 3.1 |
| broken_simulation | 4.7 | 3.8 |
| missing_edge_case | 4.6 | 2.7 |
| wrong_greedy | 3.0 | 4.6 |
| misread_statement | 2.4 | 2.4 |
| off_by_one | 2.1 | 2.3 |
| hardcoded_cases | 0.8 | 0.5 |
| output_format | 0.2 | 0.3 |
| wrong_tiebreak | 0.1 | 0.0 |
run_code usage per sample (up to 3 rounds).
| window | cell | mean run_code rounds |
|---|---|---|
| 2305-2409 (original) | 8B nothink | 1.78 |
| 2305-2409 (original) | 8B think | 1.06 |
| 2305-2409 (original) | 14B nothink | 0.85 |
| 2305-2409 (original) | 14B think | 0.01 |
| 2410-2504 (fresh) | 8B nothink | 1.84 |
| 2410-2504 (fresh) | 8B think | 0.74 |
| 2410-2504 (fresh) | 14B nothink | 0.78 |
| 2410-2504 (fresh) | 14B think | 0.01 |
On LiveCodeBench (both windows) 14B-think calls the tool in ~1% of samples while its nothink sibling calls at 0.8+ rounds under the identical prompt. But this is not a blanket thinking-mode prior: the same model calls the tool on 34% of DS-1000 samples and 20% of OCaml samples. The gradient tracks how mentally simulable the domain is — pinned-pandas execution output is hard to reason out (both models test heavily), OCaml compilation is moderately so, and pure algorithmic Python is where 14B trusts its own reasoning entirely while 8B keeps testing. Nowhere is this deliberated in the traces: only ~10–15% of thinking spans mention the tool at all and genuine explicit declines are far below the regex upper bound (most matches are algorithmic phrasing about the problem). The rare tool-aware moment reads like: "But without running it, it's hard to say. However, the code's logic should correctly compute the minimal…" — awareness, then confidence overrides. An implicit, capability- and domain-dependent cost-benefit, expressed as behavior rather than decided in words; on fresh LCB problems it forgoes insurance that tool iteration demonstrably provides. A second truncation effect is visible in the same table: 8B-think's call rate falls from 52% (original) to 38% (fresh) because budget-truncated samples die mid-reasoning before ever reaching a tool call.
| domain | model | samples calling the tool | think span mentions the tool | explicit decline (regex upper bound) |
|---|---|---|---|---|
| DS-1000 | 8b-think | 88.6% | 19.6% | ≤0.1% |
| DS-1000 | 14b-think | 34.2% | 13.5% | ≤0.3% |
| LCB original | 8b-think | 52.2% | 9.3% | ≤0.2% |
| LCB original | 14b-think | 1.4% | 11.0% | ≤0.4% |
| Multi-LCB OCaml | 8b-think | 53.2% | 9.0% | ≤0.3% |
| Multi-LCB OCaml | 14b-think | 20.1% | 15.2% | ≤0.9% |
| LCB fresh | 8b-think | 37.6% | 6.1% | ≤0.3% |
| LCB fresh | 14b-think | 1.1% | 9.9% | ≤0.8% |
Rollouts, per-test execution records, tool transcripts and teacher-forced
logprobs for all cells: samuki-hf/tool-use, domains
livecodebench and livecodebench-2410.