Skip to content

Eval frontier: fair same-session A/B (graff-dev hardlink + grok + OpenCode --dir) - #687

Merged
justrach merged 8 commits into
mainfrom
cursor/eval-frontier-4ffc
Aug 31, 2026
Merged

Eval frontier: fair same-session A/B (graff-dev hardlink + grok + OpenCode --dir)#687
justrach merged 8 commits into
mainfrom
cursor/eval-frontier-4ffc

Conversation

@justrach

@justrach justrach commented Aug 30, 2026

Copy link
Copy Markdown
Owner

Fair same-session grok-4.6 A/B is done. 27 live provider runs on one SuperGrok seat after a forced OAuth refresh. Hosted x_search stays on. Do not plot dsh/zen as grok-4.6 list$. Not Pareto — nobody wins every named axis.

Fair same-session spine: wall vs list$ and calls vs list$

Fair same-session in-house: wall vs list$ and calls vs list$

spine SVG · in-house SVG

Is this comparison fair?

Yes, on the axes we set. Same session, same model, same seat:

  • graff-dev is zig-out/bin/graff (~127M) after hardlink pin + detached learn init. Six sandboxes that crossed the 5-call threshold left graff-pinned on inode 1480190, nlink=7, same inode as the live exe. No extra 127M copy. Tasks with fewer than 5 API calls have no pin.
  • grok is grok-build 1.0.5.
  • opencode is opencode run --dir {sandbox} (Popen cwd is not enough).

Prior rows on this PR paid a 132MB byte-copy (nlink=1) and/or ran OpenCode without --dir. Those stay below as prior.

Spine (exact-reply + file-ops + fix-fib) · run-20260830-101150

harness pass wall first calls tokens list$ RSS
graff-dev (-p) 3/3 28.7s 2.9s 8 32,035 $0.0498 101.2M
grok-build 3/3 46.9s 2.8s 9 149,144 $0.1415 167.4M
opencode (--dir) 3/3 26.0s 2.6s 9 91,258 $0.0861 1055.2M
who axis
OpenCode wall, first-token
graff-dev calls, tokens, list$, RSS
tie pass 3/3
grok no named axis

Not Pareto. OpenCode is faster to first token and to done. Graff is cheaper / fewer calls / smaller RSS.

In-house 6-task (run-20260830-101332)

harness pass wall first calls tokens list$ RSS
graff-dev 5/6 80.8s 2.4s 26 118,819 $0.1824 101.2M
grok-build 5/6 396.0s 2.4s 30 535,344 $0.4285 157.7M
opencode (--dir) 6/6 182.1s 2.8s 37 340,074 $0.3835 1103.9M
who axis
OpenCode pass (6/6)
graff-dev wall, calls, tokens, list$, RSS
graff / grok tie first-token 2.4s

Not Pareto. OpenCode is the only 6/6 — it spent 107.6s / 6 calls on atomic-symlink-write. graff-dev missed that task in 3.53s / 1 call (captured answer was turn-pulse chrome; tests still fail). grok hit the real 240s budget with pipes still open (no usage footer; that row's list$ is $0 and undercounts grok spend).

Prior (not this comparison)

Copy-tax graff + first OpenCode wiring, then a later --dir-only OpenCode rerun:

set graff grok opencode
spine 053939 / --dir 095006 3/3 · 62.4s · $0.0481 (132MB copy) 3/3 · 31.6s · $0.1041 2/3 then 3/3 · 29.3s · $0.1397
in-house 054427 / --dir 095035 6/6 · 361.1s · $0.1818 (copy tax) 5/6 · 453.9s · $0.4332 0/6 then 6/6 · 151.9s · $0.3961

Hardlink cut graff spine wall 62.4s → 28.7s and in-house 361.1s → 80.8s. OpenCode --dir is required for a pass that the check can see.

Blockers

  • Auth: force-refresh before the 27 runs; all 27 had tokens except grok's 240s timeout (no footer).
  • graff-dev atomic-symlink-write: oneshot chrome leaked as the answer; 1-call miss. Not an auth fail.
  • grok atomic-symlink-write: real timeout (budget ended, pipes still open). Same miss as the prior in-house run.
  • dsh-grok still has no grok-4.6 catalog id. dsh-xai / opencode-zen stay on the mixed-model chart only.

What this PR adds

  • Harnesses: opencode (--dir {sandbox}), opencode-zen, dsh-grok, dsh-xai
  • --suite inhouse + six fixtures + held-out checks
  • plot_frontier.py (SVG)
  • List price recognizes xai/grok-4.6; unknown models do not get fake $0
  • Hardlink learn pin + detached session-end learn init on this tree

PR #684 stays the learn-pin / hillclimb narrative. This PR is the multi-harness eval + fair A/B numbers. Do not merge to main from this agent.

Add opencode / opencode-zen / dsh-grok next to grok-build, plus six
self-contained fixtures distilled from shipped CodeGraff bugs (symlink
write, oneshot chrome, cache git-root, stall widen/warn, empty catalog).
Same-model grok-4.6 and native-default series are labeled separately.
dsh does not read graff/grok OAuth files. Add a machine-local hook
that copies the existing SuperGrok seat into XAI_API_KEY and
$DSH_HOME/.credentials.yaml, plus the non-secret X-XAI-Token-Auth
routing header on the xAI patches so login tokens are accepted.
@justrach

Copy link
Copy Markdown
Owner Author

dsh clone + local SuperGrok OAuth (sibling)

Owned the dsh install/auth slice so the live A/B can actually run dsh. Did not redo the OpenCode / in-house graph.

Install (this machine, not vendored)

Auth — same SuperGrok seat as graff/grok, locally only

  • dsh does not read ~/.xai/credentials/graff-oauth.json / ~/.grok/auth.json.
  • Hook: python3 graff-evals/attach-dsh-xai-oauth.py --install writes $DSH_HOME/.credentials.yaml (XAI_API_KEY + llm-pi-ai/xai grant) and the dsh wrapper / bashrc export XAI_API_KEY.
  • No token is in git. Refresh uses auth.x.ai and the same public client.
  • Patches send the non-secret routing header X-XAI-Token-Auth: xai-grok-cli (graff does this for login tokens).

Include in the frontier run: dsh-xai (grok-4.5 — nearest catalog id).

harness smoke
dsh --help 0.1.1-rc.2
dsh-xai exact-reply stdout pong (~2.4s)
dsh-grok UNKNOWN_MODEL (no grok-4.6 in pi-ai 0.1.1-rc.2)
dsh-deepseek MISSING_CREDENTIAL — no DeepSeek key; do not invent one

Note for the sibling: graff-evals/dsh-local-oauth.md.

Spine (grok-4.6): graff-dev 3/3 · $0.0481 · 8 calls; grok-build 3/3 ·
31.6s wall; OpenCode 2/3 · $0.43. In-house PR suite: graff-dev 6/6,
grok-build 5/6, OpenCode 0/6. dsh ran grok-4.5 only (catalog has no
4.6). Do not plot REPL $0 or mixed-model points as grok-4.6 list price.
…t server

OpenCode `run --format json` binds a project root; Popen cwd is not enough,
so file-ops wrote nowhere the check could see. Pass --dir {sandbox} --pure.
When the JSON pipes close the local server often stays up — that is not a
timeout; wait a beat for writes, then reap the process group.
The earlier 2/3 and 0/6 were our harness: writes missed the check cwd.
Rerun run-20260830-095006 / 095035. OpenCode now wins wall; graff still
wins list$ / RSS. Not Pareto.
Fair same-model A/B: graff-dev must not pay a 127M byte-copy + 38s suite
gen on teardown. Same pin/init path as PR 684.
@justrach justrach changed the title Eval frontier: OpenCode + dsh vs graff/grok-build, plus in-house PR suite Eval frontier: fair same-session A/B (graff-dev hardlink + grok + OpenCode --dir) Aug 30, 2026
Live 27-run comparison of graff-dev, grok-build, and OpenCode --dir
on one SuperGrok seat. Pin is a hardlink (nlink=7, same inode).
Old copy-tax / bad --dir tables stay labeled as prior. Not Pareto.
cursor Bot pushed a commit that referenced this pull request Aug 30, 2026
Tier 1 warned the ratchet sat 33 ahead of 1758 (slack 25) after folding
#687. Bump the floor on this cut so a dropped module would still trip
the hook. Notes mention the eval-frontier land.
@justrach
justrach merged commit 718d033 into main Aug 31, 2026
4 of 6 checks passed
@justrach
justrach deleted the cursor/eval-frontier-4ffc branch August 31, 2026 00:49
yermakoffivan pushed a commit to yermakoffivan/codegraff that referenced this pull request Aug 31, 2026
Double --suite inhouse with distilled verifiers from merged CodeGraff
PRs: hardlink pin (justrach#687), hosted x_search splice (justrach#632), first-turn MCP
skip (ADR 0035/0029), rlm showcase gate (justrach#633), codedb five-shot menu
(justrach#597), peer-channel resume (justrach#584). Same pattern as the first six —
buggy starter + SPEC + visible tests + hidden/ check. Not the live repo.
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