Skip to content

Commit d321f09

Browse files
author
Maxim Saplin
committed
arc-agi updates, bs bench added
1 parent 7420572 commit d321f09

36 files changed

Lines changed: 5487 additions & 4359 deletions

.agents/skills/cross-ref-research/SKILL.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,29 @@ Refreshing an existing eval's source snapshot with newer upstream data has its o
6464
5. Separate the data effect from any code change. Checked-in `results/` baselines may predate the current code (signs: `llm_chess_inputs.data_quality` is null, or `prediction.ols.in_sample` is present). For a clean data-only diff, regenerate the baseline by running current code on the previous inputs — check the old snapshot and mapping out to `/tmp` — then diff the new run against that baseline.
6565
6. Read the test results in context. `tests/test_cross_ref.py` pins dataset-derived counts and correlations, so a refresh will move several of them; refresh those expectations as part of the change and confirm the structural assertions still hold.
6666

67+
## Mistake Metrics (wrong actions / wrong moves / mistakes)
68+
69+
Logs before `2025-03-16` underreported wrong actions and wrong moves, so the error/discipline
70+
metrics (`wrong_actions_per_1000moves`, `wrong_moves_per_1000moves`, `mistakes_per_1000moves`, and
71+
the `player_wrong_*` counts) are **excluded from analysis by default**. Do not quietly re-enable
72+
them.
73+
74+
- Each model row in `elo_refined.csv` carries `min_game_date` (earliest game start). A model is
75+
trustworthy for these metrics only when `min_game_date >= 2025-03-16` — then *every* game is
76+
post-fix, so the published full-history value is already clean. The cutoff lives in one place:
77+
`framework/data_quality.MISTAKE_STATS_TRUSTED_AFTER`.
78+
- To use these metrics in research, request clean mode: `run_cross_ref.py <eval> --mistake-stats
79+
clean_only` (or `run_analysis(..., mistake_stats="clean_only")`). It drops every model with
80+
`min_game_date` before the cutoff (or missing) and re-enables the repaired rate metrics for the
81+
remaining sample. It is research-only and refuses `--publish`; published artifacts always run with
82+
`mistake_stats="excluded"`.
83+
- Policy is **drop, never recover**: a model whose earliest game predates the cutoff is dropped
84+
whole, even if it also has later games. We do not recompute individual models from a post-cutoff
85+
subset.
86+
- `min_game_date` is produced by `data/get_refined_csv.py` during the normal build; it is the only
87+
run-date provenance carried into the aggregate, so prefer it over model release dates for any
88+
"was this tested after X" question.
89+
6790
## Optional Work Splitting
6891

6992
For large mechanical row review or command-output verification, an agent may ask another agent to inspect a bounded slice. Keep the request mechanical, provide exact files and acceptance criteria, and re-check the answer against the source artifacts yourself. These helper notes are not cross-ref artifacts and are not required workflow.
@@ -76,4 +99,5 @@ For large mechanical row review or command-output verification, an agent may ask
7699
- ARC `COST (V3)` remains unresolved in located official sources; keep cost interpretation conservative.
77100
- Human baselines and benchmark-system rows stay visible in source and coverage outputs but are excluded from LLM Chess correlation samples.
78101
- Release-controlled correlations are lower than raw Elo correlations; do not present raw correlations as model-capability proof without the timing caveat.
79-
- If generated outputs differ after a rerun, inspect whether the difference comes from source, mapping, code, dependency behavior, or expected artifact metadata before publishing.
102+
- If generated outputs differ after a rerun, inspect whether the difference comes from source, mapping, code, dependency behavior, or expected artifact metadata before publishing.
103+
- The error/discipline metrics are excluded by default and only usable via `--mistake-stats clean_only`; see "Mistake Metrics" above. Never present them from a default run, and never publish a clean-only run.

data/cross-ref/CONSOLIDATED_REPORT.md

Lines changed: 92 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,127 @@
22

33
## Bottom Line
44

5-
Epoch ECI is the only supported external eval with a strong enough signal to treat as useful right now. ARC-AGI-2 has a positive Elo/rank relationship, but the prediction fit is baseline-level and the mapping ambiguity is much worse.
5+
Epoch ECI is still the only external eval with a strong enough signal to treat as useful. ARC-AGI-2
6+
has a moderate raw and rank relationship to LLM Chess Elo but its calibrated prediction is no better
7+
than the mean baseline. BullshitBench v2 is the weakest of the three: a modest rank relationship
8+
that mostly disappears once release timing is controlled.
69

7-
Do not sell this as broad benchmark validation. It is a two-eval comparison with unresolved identity debt.
10+
Do not sell this as broad benchmark validation. It is now a three-eval comparison with a large pile
11+
of unresolved identity debt, and the three evals disagree about which chess behaviors track external
12+
capability.
813

9-
Figures reflect the 2026-05-29 ECI refresh (overall Epoch index, 178 models) against the current `elo_refined.csv`. The ECI signal strengthened versus the prior snapshot, mainly from reconciling the mapping (e.g. `GPT-5.4` now `gpt-5.4-medium`) and adding four newly matched GPT-5.x models.
14+
Figures reflect the current published snapshots against the current `elo_refined.csv`: the
15+
2026-05-29 ECI refresh (178 models), the 2026-05 ARC-AGI-2 refresh (152 rows), and the newly added
16+
BullshitBench v2 leaderboard (162 model/reasoning rows, upstream commit `88e06ae`, 2026-05-29).
17+
18+
BullshitBench measures one behavior — whether a model pushes back on a nonsense premise instead of
19+
playing along — on a 0-2 scale where higher is better. It is a deliberately different axis from a
20+
capability index like ECI, and the data show it: the strongest nonsense-detectors in the matched
21+
sample are mid-Elo Claude models, while the highest-Elo OpenAI/Gemini reasoning models sit mid-pack.
1022

1123
## Signal Table
1224

1325
| Eval | Raw Elo | Release-controlled | Top chess metric | OLS CV |
1426
| --- | --- | --- | --- | --- |
15-
| Epoch ECI | Pearson `0.757`, Spearman `0.744`, `n=70` | Pearson `0.551`, `n=69` | `player_wins_percent`: Pearson `0.689`, Spearman `0.791`, `n=85` | `R2=0.527` vs mean baseline `-0.021`; rank Spearman `0.739` |
16-
| ARC-AGI-2 | Pearson `0.520`, Spearman `0.637`, `n=54` | Pearson `0.348`, `n=54` | `player_wins_percent`: Pearson `0.360`, Spearman `0.583`, `n=57` | `R2=-0.016` vs mean baseline `-0.042`; rank Spearman `0.494` |
27+
| Epoch ECI | Pearson `0.757`, Spearman `0.744`, `n=70` | Pearson `0.551`, `n=69` | `player_wins_percent`: Pearson `0.689`, Spearman `0.791`, `n=85` | `R2=0.527`; rank Spearman `0.739` |
28+
| ARC-AGI-2 | Pearson `0.584`, Spearman `0.660`, `n=57` | Pearson `0.412`, `n=57` | `average_game_cost`: Pearson `0.473`, Spearman `0.621`, `n=58` | `R2=-0.119`; rank Spearman `0.522` |
29+
| BullshitBench v2 | Pearson `0.303`, Spearman `0.480`, `n=55` | Pearson `0.118`, `n=54` | `average_game_cost`: Pearson `0.428`, Spearman `0.575`, `n=56` | `R2=0.090`; rank Spearman `0.472` |
1730

1831
Interpretation:
1932

20-
- ECI: usable relationship. The signal survives release-month control, and fold-local OLS beats the mean baseline.
21-
- ARC-AGI-2: weak relationship. Rank ordering is not empty, but calibrated prediction does not beat baseline in a meaningful way.
22-
- Shared signal: `player_wins_percent` is the strongest non-Elo chess metric for both evals.
33+
- ECI: usable relationship. The signal survives release-month control, and fold-local OLS predicts
34+
the index well above a trivial baseline.
35+
- ARC-AGI-2: weak relationship under prediction. Raw and rank correlation are moderate, but the
36+
calibrated OLS prediction is below the mean baseline (`R2=-0.119`), so treat ARC as a rank-order
37+
signal only.
38+
- BullshitBench: weakest of the three. Rank ordering is positive (`Spearman 0.480`) but the linear
39+
fit is low and the relationship mostly collapses under release-month control (`0.303``0.118`),
40+
meaning most of the apparent association is chronology, not a model-capability link.
41+
- No shared headline metric anymore: `player_wins_percent` is the strongest non-Elo chess metric for
42+
ECI, but for ARC and BullshitBench `average_game_cost` leads instead. For BullshitBench in
43+
particular, `player_wins_percent` is essentially flat (Pearson `0.060`), so chess win rate does
44+
not predict nonsense detection at all.
2345

2446
## Method In One Screen
2547

2648
- Only mapped rows with status `accepted`, `alias`, or `variant-compatible` enter analysis.
27-
- `ambiguous`, `unmatched`, and `excluded` rows stay visible in coverage and mapping review, but do not enter correlations.
49+
- `ambiguous`, `unmatched`, and `excluded` rows stay visible in coverage and mapping review, but do
50+
not enter correlations.
2851
- Multiple external rows for one LLM Chess player are deduped by keeping the highest external score.
52+
For BullshitBench this collapses a model's reasoning-level rows to one model-level point.
2953
- Pearson `r` measures linear fit; Spearman `rho` measures rank-order fit.
3054
- Raw Elo correlates external score directly with LLM Chess Elo.
31-
- Release-controlled Elo first predicts each side from release month, subtracts predicted from actual on both sides, then correlates the two residual lists.
32-
- OLS CV uses repeated 5-fold cross-validation over 3 seeds. Feature selection happens inside each training fold, not on the full target sample.
55+
- Release-controlled Elo first predicts each side from release month, subtracts predicted from
56+
actual on both sides, then correlates the two residual lists.
57+
- OLS CV uses repeated 5-fold cross-validation over 3 seeds.
58+
Feature selection happens inside each training fold, not on the full target sample.
3359

3460
## Coverage Debt
3561

36-
| Eval | Numeric rows | Accepted mappings | Metric sample | Elo sample | Unmatched external rows | High-impact unresolved |
62+
| Eval | Numeric rows | Accepted mappings | Metric sample | Elo sample | Unmatched/ambiguous rows | High-impact unresolved |
3763
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
38-
| Epoch ECI | 178 | 93 | 85 | 70 | 85 | 15 |
39-
| ARC-AGI-2 | 150 | 65 | 57 | 54 | 90 | 15 |
40-
41-
The audit currently reports `reproducibility_status = pass`, `coverage_status = review-needed`, and `unresolved_row_count = 175`.
64+
| Epoch ECI | 178 | 93 | 85 | 70 | 85 / 0 | 15 |
65+
| ARC-AGI-2 | 152 | 71 | 60 | 57 | 24 / 54 | 15 |
66+
| BullshitBench v2 | 162 | 66 | 58 | 55 | 90 / 6 | 15 |
67+
68+
The audit currently reports `reproducibility_status = pass`, `coverage_status = review-needed`, and
69+
`unresolved_row_count = 267` across the three external evals. All published per-eval artifacts
70+
reproduce cleanly (`evals_with_diff_count = 0`).
71+
72+
### BullshitBench Mapping Shape
73+
74+
The 162 leaderboard rows resolve to 6 `accepted`, 21 `alias`, and 39 `variant-compatible` mappings
75+
(66 mapped rows → 58 unique LLM Chess players, 55 in the Elo sample after dedupe), with 90
76+
`unmatched` and 6 `ambiguous`. Most unmatched rows are models with no LLM Chess counterpart (hosted
77+
Qwen 3.5/3.6/3.7, GLM-5-turbo/5.1/4.5, DeepSeek V4, Gemma 4, Nemotron Super/Nano-9B, MiMo, StepFun,
78+
Seed, ERNIE, Jamba, Prime Intellect, Arcee, GPT-5.5 Pro, and the `openrouter/*-alpha` stealth rows)
79+
or non-reasoning `none` rows for OpenAI families that exist in `elo_refined.csv` only at reasoning
80+
tiers. See `mapping-research/bullshit_bench.md` for the full effort-to-effort rule and the held-out
81+
`ambiguous` cases (grok-4.20-beta, an unspecified Claude 3.7 thinking budget, and two hosted-vs-quant
82+
local runs).
83+
84+
## Exploratory: discipline beats strength (BullshitBench)
85+
86+
This is a research lead, outside the governed numbers. Running BullshitBench in clean mode
87+
(`run_cross_ref.py bullshit_bench --mistake-stats clean_only` — drops every model whose earliest
88+
LLM Chess game predates the 2025-03-16 logging fix, leaving n=51 metric / 49 Elo) lets us use the
89+
normally-excluded error metrics. Rank correlation vs `avg_score`:
90+
91+
| Chess metric | Spearman |
92+
| --- | ---: |
93+
| `wrong_actions_per_1000moves` | -0.58 |
94+
| `mistakes_per_1000moves` | -0.56 |
95+
| `games_interrupted_percent` | -0.42 |
96+
| LLM Chess Elo | +0.40 |
97+
| `player_wins_percent` | +0.03 |
98+
99+
Sloppy chess (illegal actions, blunders, interrupted games) tracks *failing* BullshitBench better
100+
than raw strength does, and win rate is noise. It's a non-linear rank association only: a
101+
multi-factor OLS still doesn't beat the mean baseline (CV `R2=-0.13`). So nonsense detection looks
102+
like a carefulness/discipline trait, not a capability one — a lead, not a validated result.
42103

43104
## What Raises Signal
44105

45-
1. Resolve high-impact mapping rows first: frontier GPT, Claude, Gemini Deep Think, DeepSeek, Qwen, Kimi, and GLM rows near the top of each leaderboard.
46-
2. Keep plain-model rows separate from reasoning effort, product tier, context-window, benchmark-system, and preview variants unless source evidence proves equivalence.
47-
3. Add more external evals only after their source score semantics and model identities are clear enough to avoid another ambiguity pile.
48-
4. Treat OLS prediction as secondary. The primary signal is still raw and release-controlled Elo correlation plus row-level mapping quality.
106+
1. Resolve high-impact mapping rows first: frontier GPT, Claude, Gemini, Grok, DeepSeek, Qwen, Kimi,
107+
and GLM rows near the top of each leaderboard.
108+
2. Keep plain-model rows separate from reasoning effort, product tier, context-window,
109+
benchmark-system, and preview variants unless source evidence proves equivalence.
110+
3. Treat BullshitBench as a behavioral contrast eval, not a capability eval. Its value is showing
111+
where chess strength and epistemic pushback diverge, not validating Elo.
112+
4. Add more external evals only after their source score semantics and model identities are clear
113+
enough to avoid another ambiguity pile.
114+
5. Treat OLS prediction as secondary. The primary signal is still raw and release-controlled Elo
115+
correlation plus row-level mapping quality.
49116

50117
## Evidence Pointers
51118

52119
- Methodology and workspace guide: [README.md](README.md)
53120
- ECI summary: [results/eci_summary.json](results/eci_summary.json)
54121
- ARC summary: [results/arc_agi_2_summary.json](results/arc_agi_2_summary.json)
122+
- BullshitBench summary: [results/bullshit_bench_summary.json](results/bullshit_bench_summary.json)
55123
- ECI report: [results/eci.html](results/eci.html)
56124
- ARC report: [results/arc_agi_2.html](results/arc_agi_2.html)
57-
- ECI coverage: [results/eci_coverage.csv](results/eci_coverage.csv)
58-
- ARC coverage: [results/arc_agi_2_coverage.csv](results/arc_agi_2_coverage.csv)
59-
- Mapping sources: [mappings/eci.csv](mappings/eci.csv), [mappings/arc_agi_2.csv](mappings/arc_agi_2.csv)
125+
- BullshitBench report: [results/bullshit_bench.html](results/bullshit_bench.html)
126+
- Coverage: [results/eci_coverage.csv](results/eci_coverage.csv), [results/arc_agi_2_coverage.csv](results/arc_agi_2_coverage.csv), [results/bullshit_bench_coverage.csv](results/bullshit_bench_coverage.csv)
127+
- Mapping sources: [mappings/eci.csv](mappings/eci.csv), [mappings/arc_agi_2.csv](mappings/arc_agi_2.csv), [mappings/bullshit_bench.csv](mappings/bullshit_bench.csv)
128+
- Mapping rationale: [mapping-research/bullshit_bench.md](mapping-research/bullshit_bench.md)

data/cross-ref/README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ This README is the operating guide. It should stay stable across result refreshe
1111
| Artifact | Role |
1212
| --- | --- |
1313
| [CONSOLIDATED_REPORT.md](CONSOLIDATED_REPORT.md) | Cross-eval findings, current caveats, and research next steps. |
14-
| [results/eci_summary.json](results/eci_summary.json), [results/arc_agi_2_summary.json](results/arc_agi_2_summary.json) | Machine-readable per-eval facts used for reporting. |
15-
| [results/eci.html](results/eci.html), [results/arc_agi_2.html](results/arc_agi_2.html) | Human-readable per-eval reports. |
16-
| [results/eci_coverage.csv](results/eci_coverage.csv), [results/arc_agi_2_coverage.csv](results/arc_agi_2_coverage.csv) | Row-level coverage and inclusion surfaces. |
17-
| [mappings/eci.csv](mappings/eci.csv), [mappings/arc_agi_2.csv](mappings/arc_agi_2.csv) | Runtime model-identity source of truth. |
14+
| [results/eci_summary.json](results/eci_summary.json), [results/arc_agi_2_summary.json](results/arc_agi_2_summary.json), [results/bullshit_bench_summary.json](results/bullshit_bench_summary.json) | Machine-readable per-eval facts used for reporting. |
15+
| [results/eci.html](results/eci.html), [results/arc_agi_2.html](results/arc_agi_2.html), [results/bullshit_bench.html](results/bullshit_bench.html) | Human-readable per-eval reports. |
16+
| [results/eci_coverage.csv](results/eci_coverage.csv), [results/arc_agi_2_coverage.csv](results/arc_agi_2_coverage.csv), [results/bullshit_bench_coverage.csv](results/bullshit_bench_coverage.csv) | Row-level coverage and inclusion surfaces. |
17+
| [mappings/eci.csv](mappings/eci.csv), [mappings/arc_agi_2.csv](mappings/arc_agi_2.csv), [mappings/bullshit_bench.csv](mappings/bullshit_bench.csv) | Runtime model-identity source of truth. |
1818
| [mapping-research](mapping-research) | Evidence notes behind mapping decisions. |
19-
| [evals/eci/SOURCE.md](evals/eci/SOURCE.md), [evals/arc-agi-2/SOURCE.md](evals/arc-agi-2/SOURCE.md) | External source provenance and score semantics. |
20-
| [evals/eci/epoch_eci_may_2026.csv](evals/eci/epoch_eci_may_2026.csv), [evals/arc-agi-2/arc-agi-2-apr-2026.csv](evals/arc-agi-2/arc-agi-2-apr-2026.csv) | Frozen external source snapshots. |
19+
| [evals/eci/SOURCE.md](evals/eci/SOURCE.md), [evals/arc-agi-2/SOURCE.md](evals/arc-agi-2/SOURCE.md), [evals/bullshit-bench/SOURCE.md](evals/bullshit-bench/SOURCE.md) | External source provenance and score semantics. |
20+
| [evals/eci/epoch_eci_may_2026.csv](evals/eci/epoch_eci_may_2026.csv), [evals/arc-agi-2/arc-agi-2-may-2026.csv](evals/arc-agi-2/arc-agi-2-may-2026.csv), [evals/bullshit-bench/bullshit_bench_v2_may_2026.csv](evals/bullshit-bench/bullshit_bench_v2_may_2026.csv) | Frozen external source snapshots. |
2121

2222
## Methodology
2323

@@ -79,9 +79,9 @@ The release-controlled value answers a stricter question: among models with comp
7979
## Review Order
8080

8181
1. Read [CONSOLIDATED_REPORT.md](CONSOLIDATED_REPORT.md) for the cross-eval bottom line and current caveats.
82-
2. Inspect [results/eci.html](results/eci.html) and [results/arc_agi_2.html](results/arc_agi_2.html) for per-eval detail.
83-
3. Check [results/eci_summary.json](results/eci_summary.json) and [results/arc_agi_2_summary.json](results/arc_agi_2_summary.json) when a claim needs machine-readable backing.
84-
4. Use [results/eci_coverage.csv](results/eci_coverage.csv), [results/arc_agi_2_coverage.csv](results/arc_agi_2_coverage.csv), and the mapping CSVs to review row-level inclusion decisions.
82+
2. Inspect [results/eci.html](results/eci.html), [results/arc_agi_2.html](results/arc_agi_2.html), and [results/bullshit_bench.html](results/bullshit_bench.html) for per-eval detail.
83+
3. Check [results/eci_summary.json](results/eci_summary.json), [results/arc_agi_2_summary.json](results/arc_agi_2_summary.json), and [results/bullshit_bench_summary.json](results/bullshit_bench_summary.json) when a claim needs machine-readable backing.
84+
4. Use [results/eci_coverage.csv](results/eci_coverage.csv), [results/arc_agi_2_coverage.csv](results/arc_agi_2_coverage.csv), [results/bullshit_bench_coverage.csv](results/bullshit_bench_coverage.csv), and the mapping CSVs to review row-level inclusion decisions.
8585
5. Use `mapping-review` or `audit` commands below for generated review surfaces that are not necessarily checked in.
8686

8787
## Commands
@@ -91,6 +91,7 @@ From the repository root with `.venv` active:
9191
```bash
9292
.venv/bin/python data/cross-ref/run_cross_ref.py eci
9393
.venv/bin/python data/cross-ref/run_cross_ref.py arc_agi_2
94+
.venv/bin/python data/cross-ref/run_cross_ref.py bullshit_bench
9495
.venv/bin/python data/cross-ref/run_cross_ref.py cross-eval
9596
.venv/bin/python data/cross-ref/run_cross_ref.py mapping-review
9697
.venv/bin/python data/cross-ref/run_cross_ref.py audit

0 commit comments

Comments
 (0)