Skip to content

evals: fix false-negative regex checks with the agentic LLM judge#95440

Merged
gaojude merged 3 commits into
canaryfrom
jude/eval-agent-024-agentic-judge
Jul 6, 2026
Merged

evals: fix false-negative regex checks with the agentic LLM judge#95440
gaojude merged 3 commits into
canaryfrom
jude/eval-agent-024-agentic-judge

Conversation

@gaojude

@gaojude gaojude commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Fixes false-negative regex assertions — observed rejecting correct solutions in recent eval runs — by grading those specific checks with @vercel/agent-eval's agentic LLM judge instead. Only the assertions with demonstrated false negatives change; every deterministic check stays.

  • agent-034-async-cookies: /await\s+cookies\s*\(\s*\)/ only matched the naive await cookies() and rejected the correct (arguably better) await Promise.all([cookies(), headers()]) — observed failing most runs of a strong model — and the no-sync-call lookbehind wrongly flagged the bare cookies() inside the array. The four await-mechanics tests collapse into one judge criterion: the promises must actually be awaited before use, in any correct form. The theme-cookie and Accept-Language content checks stay regex.
  • agent-030-app-router-migration-hard: the home-page test rejected solutions that didn't match one exact shape (e.g. data fetching extracted to a helper means no literal fetch( in page.tsx). Its body becomes one judge criterion (async Server Component, fetches during server render, no getServerSideProps); the file-existence check and the other seven tests stay deterministic.

The judge is pinned to claude-haiku-4-5 in the generated experiment configs — a cheap fixed grader, identical for every run regardless of the model under test. Each criterion states the requirement semantically, includes one reference solution to ground the small grader, and fixes the standard of judgment (runtime correctness, not style) — no enumerated failure modes, so the judge stays flexible about equivalent forms.

Supporting changes: bumps @vercel/agent-eval 0.9.51.3.0 (ships the judge runtime) and adapts run-evals.js to the 1.3 CLI (run baseline agents-md --force; --dry maps to status); generated experiments now run through the Vercel AI Gateway so vc env pull is the only credential setup; converted fixtures exclude EVAL.ts from tsconfig (the @vercel/agent-eval/eval import has no type declarations — vercel-labs/agent-eval#166 — and next build type-checks the fixture, so experiments running scripts: ['build'] would otherwise fail on it, same reason EVAL.tsx was already excluded). Not converted: agent-040 (already redesigned upstream in #94578) and agent-041 (no diagnosed false negative in the report).

Verified end-to-end from this repo: converted agent-034 with codegen claude-sonnet-4-5 via the AI Gateway in a Vercel sandbox, judge pinned to claude-haiku-4-5 — passes, with the judge clause executing in-sandbox.

Running it:

pnpm install                 # picks up @vercel/agent-eval 1.3.0
pnpm --filter=next build     # pnpm eval packs the locally built next
vc env pull .env.local       # the only credential: sandbox + AI Gateway (codegen and judge)

pnpm eval agent-034-async-cookies         # baseline + AGENTS.md variants
pnpm eval agent-034-async-cookies --dry   # preview only

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 812ms 813ms ▁█▁██
Cold (Ready in log) 776ms 779ms ▄▅▅██
Cold (First Request) 1.302s 1.293s ▂▅▄█▇
Warm (Listen) 764ms 812ms ▁█▁██
Warm (Ready in log) 769ms 773ms ▂▄▃█▄
Warm (First Request) 611ms 601ms ▄▁▆█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 760ms 759ms ▁███▁
Cold (Ready in log) 747ms 754ms ▅▇▆▇▄
Cold (First Request) 3.194s 3.246s ▄▆▅▆▄
Warm (Listen) 760ms 760ms ▁██▁█
Warm (Ready in log) 750ms 755ms ▃▆█▅▅
Warm (First Request) 3.276s 3.210s ▁▄▆▅▅

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 5.166s 5.034s ▁▅▂██
Cached Build 5.231s 5.277s ▁▄▂▇█
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 24.144s 24.263s ▄▆▄▅▅
Cached Build 24.238s 24.176s ▃▅▆▆▅
node_modules Size 514 MB 514 MB █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
03gmyxr7dukvs.js gzip 10.3 kB N/A -
03tt4thpkf_py.js gzip 156 B N/A -
040t1q17lo593.js gzip 8.77 kB N/A -
0bb0vtp8dwsez.js gzip 450 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0nxqz3q165m2l.js gzip 220 B N/A -
0qr-1tnb7_hg5.js gzip 5.72 kB N/A -
0uilzvklme4ea.js gzip 8.76 kB N/A -
0v0wmwk2-r35h.js gzip 160 B N/A -
0z0y83mfx-l-h.js gzip 10 kB N/A -
13mqkxitd_mp-.js gzip 156 B N/A -
15ok8ydf274z0.js gzip 10.6 kB N/A -
1612gfxvjnl31.js gzip 51.2 kB N/A -
16cqqcigykfea.js gzip 13.6 kB N/A -
17h18zxt1915l.js gzip 1.46 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1fq1h7dxad4cv.js gzip 9.44 kB N/A -
1fym-adbk_69_.js gzip 13.1 kB N/A -
1gav7nfh4y8ln.js gzip 8.76 kB N/A -
1gvnrogz-nk26.js gzip 157 B N/A -
1nm0awhqye5p8.js gzip 154 B N/A -
1nwugjw0i93us.js gzip 156 B N/A -
1rhk5y2vvnyud.js gzip 169 B N/A -
1s8oolynvqjk6.js gzip 155 B N/A -
2_1mg3cv86xn-.js gzip 156 B N/A -
2ayx44yp1i407.js gzip 71 kB N/A -
2ex-z84g1m3fp.js gzip 10.3 kB N/A -
2j0u1p2nagycn.js gzip 14.5 kB N/A -
2rypqffktcxqh.js gzip 8.69 kB N/A -
2uqsizxtehgqf.js gzip 8.79 kB N/A -
2vzktdqwbijqc.js gzip 8.74 kB N/A -
2y2m2aowi7lgb.js gzip 161 B N/A -
38wdlbypioegf.js gzip 153 B N/A -
3c244akvx_-be.js gzip 8.74 kB N/A -
3czh4acsysft-.js gzip 155 B N/A -
3dmlemitx3ef3.js gzip 2.29 kB N/A -
3j3wt_5y9cpjx.js gzip 65.5 kB N/A -
3oq7la2gelh4n.js gzip 155 B N/A -
3umfpv6uzk6cg.js gzip 13.2 kB N/A -
4237vdj6eyslt.js gzip 8.7 kB N/A -
turbopack-0_..0e0k.js gzip 3.74 kB N/A -
turbopack-00..ji86.js gzip 3.74 kB N/A -
turbopack-09..5el4.js gzip 3.74 kB N/A -
turbopack-0d..y6jd.js gzip 3.72 kB N/A -
turbopack-0o..iy-c.js gzip 3.74 kB N/A -
turbopack-0s..7rtz.js gzip 3.74 kB N/A -
turbopack-0v..ep2g.js gzip 3.74 kB N/A -
turbopack-0x..-y72.js gzip 3.74 kB N/A -
turbopack-11..68z6.js gzip 3.75 kB N/A -
turbopack-1w..lt0k.js gzip 3.74 kB N/A -
turbopack-2l..nquv.js gzip 3.74 kB N/A -
turbopack-2w..sjcd.js gzip 3.74 kB N/A -
turbopack-32..ss4y.js gzip 3.74 kB N/A -
turbopack-3t..7tg5.js gzip 3.74 kB N/A -
00tc16j5-eos9.js gzip N/A 1.46 kB -
04k1dnw6y-sgq.js gzip N/A 160 B -
0frxqutb6-vax.js gzip N/A 10.3 kB -
0gaw1gmpwuwkn.js gzip N/A 8.8 kB -
0n8vgrgx6gsx2.js gzip N/A 65.5 kB -
0rbtcmwiuz-3x.js gzip N/A 157 B -
1_jfzs24krjbo.js gzip N/A 156 B -
12zyjjmq4oad1.js gzip N/A 5.72 kB -
1cfirxwnd7m9h.js gzip N/A 161 B -
1d14swk91dglf.js gzip N/A 157 B -
1k9cc4-gpa2cx.js gzip N/A 13.1 kB -
1n59uogejo81s.js gzip N/A 10.3 kB -
1npei3hlexdv3.js gzip N/A 9.99 kB -
1ssuiwj_rnpc5.js gzip N/A 8.77 kB -
1wb808_e_-w3u.js gzip N/A 155 B -
2-phc9obd3nyd.js gzip N/A 8.77 kB -
24utq57r3l1cw.js gzip N/A 8.7 kB -
28r3lfbanlqsz.js gzip N/A 154 B -
2b1_ykg5xytix.js gzip N/A 51.2 kB -
2fhjq6ek3srmr.js gzip N/A 8.69 kB -
2g0t7upz_v-hf.js gzip N/A 10.6 kB -
2ia9qqy99aie9.js gzip N/A 13.6 kB -
2oza28kdqvoay.js gzip N/A 8.74 kB -
2petq82fjj2-5.js gzip N/A 71 kB -
2rv500jdndh2l.js gzip N/A 156 B -
2ty8muxbqewy-.js gzip N/A 154 B -
2zh8-mmhujy8o.js gzip N/A 2.29 kB -
30h_m0irj-q6p.js gzip N/A 221 B -
37ejbfx1u9lpo.js gzip N/A 8.75 kB -
38c63ct4i1cy7.js gzip N/A 449 B -
396nht7itx-uq.js gzip N/A 153 B -
3drpf422jknfx.js gzip N/A 14.5 kB -
3fospa9508caf.js gzip N/A 155 B -
3hd1us4ordyc9.js gzip N/A 13.2 kB -
3jimpal3lvz5e.js gzip N/A 9.44 kB -
3sopw705rkml5.js gzip N/A 157 B -
3urjgcevdqj17.js gzip N/A 169 B -
3wb4pe4z4-aim.js gzip N/A 8.77 kB -
turbopack-05..bfnr.js gzip N/A 3.74 kB -
turbopack-07..idrr.js gzip N/A 3.74 kB -
turbopack-08..mpl7.js gzip N/A 3.74 kB -
turbopack-0s..944p.js gzip N/A 3.74 kB -
turbopack-1k..sc_y.js gzip N/A 3.74 kB -
turbopack-2_..ibpn.js gzip N/A 3.74 kB -
turbopack-2l..lm-v.js gzip N/A 3.74 kB -
turbopack-37..fdi3.js gzip N/A 3.75 kB -
turbopack-39..5fjh.js gzip N/A 3.74 kB -
turbopack-3o..3o_l.js gzip N/A 3.74 kB -
turbopack-3t..fc26.js gzip N/A 3.74 kB -
turbopack-3u..0ekr.js gzip N/A 3.74 kB -
turbopack-3u.._7zi.js gzip N/A 3.72 kB -
turbopack-40..fson.js gzip N/A 3.74 kB -
Total 467 kB 467 kB ⚠️ +15 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 731 B 721 B 🟢 10 B (-1%)
Total 731 B 721 B ✅ -10 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 433 B 436 B
Total 433 B 436 B ⚠️ +3 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2486.HASH.js gzip 169 B N/A -
3146-HASH.js gzip 63.8 kB N/A -
39fcf99b-HASH.js gzip 62.9 kB N/A -
8443-HASH.js gzip 4.68 kB N/A -
9431-HASH.js gzip 5.62 kB N/A -
framework-HASH.js gzip 59.8 kB 59.8 kB
main-app-HASH.js gzip 255 B 254 B
main-HASH.js gzip 39.6 kB 40.1 kB 🔴 +455 B (+1%)
webpack-HASH.js gzip 1.68 kB 1.68 kB
6105-HASH.js gzip N/A 5.63 kB -
764.HASH.js gzip N/A 169 B -
8898-HASH.js gzip N/A 63.3 kB -
9597-HASH.js gzip N/A 4.65 kB -
e1ccab69-HASH.js gzip N/A 62.9 kB -
Total 238 kB 238 kB ✅ -88 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 182 B
css-HASH.js gzip 335 B 335 B
dynamic-HASH.js gzip 1.8 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 254 B
head-HASH.js gzip 351 B 349 B
hooks-HASH.js gzip 384 B 384 B
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.49 kB 2.49 kB
routerDirect..HASH.js gzip 319 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 313 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.96 kB 7.95 kB ✅ -7 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 127 kB
page.js gzip 280 kB 281 kB
Total 407 kB 408 kB ⚠️ +1.52 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 616 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 44.9 kB 44.9 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 46.5 kB 46.5 kB ⚠️ +15 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 719 B 720 B
Total 719 B 720 B ⚠️ +1 B
Build Cache
Canary PR Change
0.pack gzip 4.75 MB 4.74 MB 🟢 8.51 kB (0%)
index.pack gzip 117 kB 117 kB
index.pack.old gzip 117 kB 118 kB 🔴 +1.36 kB (+1%)
Total 4.98 MB 4.98 MB ✅ -7.29 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 360 kB 360 kB
app-page-exp..prod.js gzip 199 kB 199 kB
app-page-tur...dev.js gzip 360 kB 360 kB
app-page-tur..prod.js gzip 199 kB 199 kB
app-page-tur...dev.js gzip 356 kB 356 kB
app-page-tur..prod.js gzip 197 kB 197 kB
app-page.run...dev.js gzip 357 kB 357 kB
app-page.run..prod.js gzip 197 kB 197 kB
app-route-ex...dev.js gzip 79 kB 79 kB
app-route-ex..prod.js gzip 53.6 kB 53.6 kB
app-route-tu...dev.js gzip 79.1 kB 79.1 kB
app-route-tu..prod.js gzip 53.6 kB 53.6 kB
app-route-tu...dev.js gzip 78.7 kB 78.7 kB
app-route-tu..prod.js gzip 53.3 kB 53.3 kB
app-route.ru...dev.js gzip 78.6 kB 78.6 kB
app-route.ru..prod.js gzip 53.3 kB 53.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 45.2 kB 45.2 kB
pages-api-tu..prod.js gzip 33.9 kB 33.9 kB
pages-api.ru...dev.js gzip 45.2 kB 45.2 kB
pages-api.ru..prod.js gzip 33.9 kB 33.9 kB
pages-turbo....dev.js gzip 54.7 kB 54.7 kB
pages-turbo...prod.js gzip 39.6 kB 39.6 kB
pages.runtim...dev.js gzip 54.6 kB 54.6 kB
pages.runtim..prod.js gzip 39.5 kB 39.5 kB
server.runti..prod.js gzip 65 kB 65 kB
use-cache-pr...dev.js gzip 71.3 kB 71.3 kB
use-cache-pr...dev.js gzip 71.3 kB 71.3 kB
use-cache-pr...dev.js gzip 69.6 kB 69.6 kB
use-cache-pr...dev.js gzip 69.6 kB 69.6 kB
Total 3.45 MB 3.45 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/196310b849a5659923b1ebe61d191357603647ba/next

Commit: 196310b

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

Commit: 196310b

…t-eval 1.3

Bump @vercel/agent-eval 0.9.5 -> 1.3.0 (ships the agentic judge runtime) and
adapt run-evals.js to the 1.3 CLI: `run baseline agents-md --force`, with
--dry mapping to the read-only `status` command.

Generated experiments now use vercel-ai-gateway/claude-code (default model
claude-opus-4-8), so the OIDC token from `vc env pull` is the only credential
needed — sandbox, codegen model, and judge. The judge is pinned to
claude-haiku-4-5: a cheap fixed grader, identical for every run regardless of
the model under test.
@gaojude gaojude force-pushed the jude/eval-agent-024-agentic-judge branch from d2f29a5 to a0641c6 Compare July 3, 2026 03:03
@gaojude gaojude changed the title evals: convert agent-024 to the agentic LLM judge evals: fix false-negative regex checks with the agentic LLM judge Jul 3, 2026
agent-034-async-cookies: /await\s+cookies\(\)/ only matched the naive form and
rejected the correct `await Promise.all([cookies(), headers()])`, and the
no-sync-call lookbehind wrongly flagged the bare cookies() inside that array.
The four await-mechanics tests collapse into one judge criterion (the promises
must actually be awaited before use, in any correct form); the theme-cookie
and Accept-Language content checks stay regex.

agent-030-app-router-migration-hard: the home-page test rejected solutions
that didn't match one exact shape (e.g. fetching extracted to a helper means
no literal `fetch(` in page.tsx). Its body becomes one judge criterion; the
file-existence check and the other seven tests stay deterministic.

Both fixtures exclude EVAL.ts from tsconfig: the @vercel/agent-eval/eval
import has no type declarations, and `next build` (run by experiments with
scripts: ['build']) type-checks the fixture — same reason EVAL.tsx was
already excluded.
@gaojude gaojude force-pushed the jude/eval-agent-024-agentic-judge branch from a0641c6 to 58a13bb Compare July 3, 2026 03:07
Eval fixtures are sandbox workspaces with their own package.json/tsconfig, not
repo code. Their EVAL.ts files may import modules that only resolve inside the
sandbox (@vercel/agent-eval/eval) and are excluded from the fixture tsconfig,
so type-aware linting with `project: true` fails to place them in a project.
Both ignore lists (eslint.cli.config.mjs and its mirror block) stay in sync.
@gaojude gaojude force-pushed the jude/eval-agent-024-agentic-judge branch from c4f7be1 to 196310b Compare July 3, 2026 14:20
@gaojude gaojude marked this pull request as ready for review July 3, 2026 17:42
@gaojude gaojude requested a review from aurorascharff July 6, 2026 16:24
@gaojude gaojude merged commit 0240fd3 into canary Jul 6, 2026
138 of 140 checks passed
@gaojude gaojude deleted the jude/eval-agent-024-agentic-judge branch July 6, 2026 16:27
gaojude added a commit to vercel/next-evals-oss that referenced this pull request Jul 7, 2026
…w pin

- Bump the pinned next.js SHA to the merged canary commit for
  vercel/next.js#95440 (agent-034 + agent-030 converted to the agentic LLM
  judge; agent-040 renamed to agent-040-instant upstream).
- Rerun claude-fable-5 on its outstanding evals and commit the results:
  agent-030 and agent-034 pass with the judge clauses executing in-sandbox;
  agent-040-instant fails 0/4 (classified model failure — never exported
  `instant`). fable-5 is fully current, so it has no ACCEPTED_STALE entry.
- Reshape check-stale.mjs to (experiment, eval) pairs: ACCEPTED_STALE maps
  each experiment to exactly the evals it may stay stale on, so any new
  staleness on an accepted experiment still fails CI, and refreshing a model
  deletes its pairs.
gaojude added a commit to vercel/next-evals-oss that referenced this pull request Jul 9, 2026
…w pin (#93)

* Adopt agent-034/030 judge conversions; rerun claude-fable-5 at the new pin

- Bump the pinned next.js SHA to the merged canary commit for
  vercel/next.js#95440 (agent-034 + agent-030 converted to the agentic LLM
  judge; agent-040 renamed to agent-040-instant upstream).
- Rerun claude-fable-5 on its outstanding evals and commit the results:
  agent-030 and agent-034 pass with the judge clauses executing in-sandbox;
  agent-040-instant fails 0/4 (classified model failure — never exported
  `instant`). fable-5 is fully current, so it has no ACCEPTED_STALE entry.
- Reshape check-stale.mjs to (experiment, eval) pairs: ACCEPTED_STALE maps
  each experiment to exactly the evals it may stay stale on, so any new
  staleness on an accepted experiment still fails CI, and refreshing a model
  deletes its pairs.

* Add GPT 5.6 (xhigh) eval results; normalize export over the canonical eval set (#94)

- gpt-5.6-xhigh + gpt-5.6-xhigh--agents-md: direct OpenAI codex,
  reasoningEffort=xhigh. Eval-level: 21/24 base, 22/24 with AGENTS.md.
  All 0% failures classified + transcript-verified as model failures.
- export-results: score every experiment over the current evals/ set.
  Results whose eval is missing or stale (new/changed per
  agent-eval status --json) export as notAvailable, count against the
  success rate, and are excluded from flip detection and avg duration.
- Restore missing MODEL_NAMES/AGENTS_MD_PAIRS entries for
  claude-opus-4.8, cursor-composer-2.5, gpt-5.5-pro.

* Add GPT 5.6 Sol (xhigh) eval results

Direct OpenAI codex at reasoningEffort=xhigh ('ultra' is not a valid
effort — the API rejects it; xhigh is the max). Eval-level: 20/24 base,
22/24 with AGENTS.md. All 0% evals verified as model failures at the
assertion level; agent-040-instant remains unbeaten by any model.

* Make Claude Fable 5's effort level explicit (high)

The runs used the Claude Code default for Fable 5, which is high
(code.claude.com/docs/en/model-config.md). agentOptions.effort now pins
it and the display name shows it, matching Opus 4.7 (max). agentOptions
is not part of the result fingerprint, so cached results stay valid —
no rerun needed.

* Add GPT 5.6 Sol (xhigh) evals; make Fable 5's effort explicit (high) (#95)

* Add GPT 5.6 Sol (xhigh) eval results

Direct OpenAI codex at reasoningEffort=xhigh ('ultra' is not a valid
effort — the API rejects it; xhigh is the max). Eval-level: 20/24 base,
22/24 with AGENTS.md. All 0% evals verified as model failures at the
assertion level; agent-040-instant remains unbeaten by any model.

* Make Claude Fable 5's effort level explicit (high)

The runs used the Claude Code default for Fable 5, which is high
(code.claude.com/docs/en/model-config.md). agentOptions.effort now pins
it and the display name shows it, matching Opus 4.7 (max). agentOptions
is not part of the result fingerprint, so cached results stay valid —
no rerun needed.

* Add Grok 4.5 eval results (#96)

vercel-ai-gateway/opencode with the model defined via extraProviders
(released 2026-07-08, not in the opencode catalogs yet; GLM 5.1 binary
reused; limits from AI Gateway metadata). Eval-level: 20/24 base, 23/24
with AGENTS.md (+13, the largest docs delta measured). All 0% evals
verified as model failures: <a> vs next/link (agent-000), middleware.ts
vs proxy.ts (agent-031/039), missing instant export (agent-040 — still
unbeaten by any model).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants