Repository navigation
bench: measure ref-verify end to end inside Claude Code sessions - #37
Merged
Merged
Conversation
The reference benchmark scores the engine alone; it says nothing about what an agent tells a researcher who asks it to check a manuscript before submission, or what the skill adds over the model on its own. Eight manuscripts with 40 planted errors were each run twice through isolated `claude -p` sessions with and without the skill. With the skill the agent caught 80/80; without it 77/80, missing only numbers it did not check against an abstract. Neither raised a false alarm, and the skill took about twice as long per run. The README records the isolation command, scoring rules, and the skill/engine issues seen in the transcripts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The reference benchmark scores the engine alone. It doesn't tell us what an agent reports when a researcher says "check my references before I submit", or what the ref-verify skill adds over the model by itself. This PR measures that. It is measurement only: no engine or
SKILL.mdchanges.What
benchmarks/e2e/:truth.json: 40 planted errors of 10 types (fabricated with and without DOI, DOI swap, retracted, wrong year, wrong first author, title-less wrong volume/page, numeric claims with a wrong number, unit prefix, or direction). It also lists 60 correct references, 8 correct numeric claims, and 5 correct references CrossRef does not index (a Korean thesis, a KCI paper, NeurIPS, JMLR, arXiv).verify_truth.pyre-checks every label live: 0 problems, with a planted counter-example caught.run_e2e.pyruns each manuscript twice per condition, 32 runs in all (A: skill copied into<project>/.claude/skills/ref-verify/; B: same project without it).score.pyis stdlib only and marks anything it can't decide asreview;adjudication.jsonholds the decisions made after reading all 32 answers.engine_only.pyrunscheck-bibalone on each reference list.README.mdandresults/.Isolation, verified with positive controls before any run:
All 32 runs reported 0 hook events. The model was the subscription default (
claude-opus-5-5,apiKeySource: none).Results
B's misses are numbers it didn't check against a source. Twice it accepted "up to 380%" for Pelrine 2000 (abstract: 215%). Once it wrote "1,200만 장 … 부분은 맞습니다" (abstract: 1.2 million). The base model knows most planted papers, so reference-level errors are caught either way on this set. The README lists the limits and the skill/engine findings.
How tested
The full transcripts (32 stream-json files) are not committed; they are kept in the session's scratch directory.
🤖 Generated with Claude Code