Skip to content

Commit 8a45118

Browse files
Retract the precision numbers: the baseline was given the rubric
A reader refused to believe the result — if plain Claude Code beats both harnesses, why would anyone use either — and the disbelief was correct. The two arms were not asked the same question. The baseline prompt said "report ONLY genuine defects... do not report style, naming, typing, documentation, or preference", so it stayed silent on all of that. The harness arms were given their own /review, which is written to produce a thorough multi-section report, and it duly reported things like "inconsistent parameter typing (nit)", "no tests (low)" and "no call sites (info)". None of those is a false claim about a defect. They are correct observations the baseline had been instructed not to make, and the scoring counted every one as a false positive. The precision column therefore compared a constrained prompt with unconstrained reviews and scored the difference as error. The extraction pass now applies one bar to every arm: keep only what the review presents as an actual bug, drop anything it frames as a nit, a style or typing preference, a missing test, a suggestion or an informational note. On a single sanity run that takes vstack's false positives on the same fixtures from 5 to 2. The retracted table stays in RESULTS.md with the reason attached, because deleting a published result that turned out to be wrong is worse than leaving it standing and saying why. A corrected 120-review run is in progress. Worth recording that no check in this repository caught this. The falsifiability suite proves each check can fail; it has nothing to say about a benchmark that asks two arms different questions.
1 parent 5433bda commit 8a45118

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

tests/evals/RESULTS.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,17 @@ error bars. The fixtures are also small and Python-only; a defect class this set
135135
is a defect class this says nothing about.
136136

137137

138-
## Run of 2026-08-21 — 8 fixtures, 5 samples per arm (120 reviews)
138+
## RETRACTED — Run of 2026-08-21 — 8 fixtures, 5 samples per arm (120 reviews)
139+
140+
> **These numbers are unfair to both harnesses and are retracted.** The scoring counted a
141+
> reviewer's nits, style notes and "no tests here" observations as false positives, while the
142+
> baseline had been explicitly instructed not to make such observations at all. So the precision
143+
> column compared a constrained prompt against unconstrained thorough reviews and scored the
144+
> difference as error. The table is kept because deleting a wrong result you already published is
145+
> worse than leaving it standing with the reason attached. A corrected run replaces it below.
146+
>
147+
> Caught by a reader refusing to believe the result, not by any check in this repository. The
148+
> question "why would anyone use these harnesses then" was the right one to ask.
139149
140150
| arm | recall | false positives | precision |
141151
|---|---|---|---|

tests/evals/run-pathways.sh

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,22 @@ extract_findings() {
167167
[ -n "$review" ] || { printf '[]'; return; }
168168
ed=$(mktemp -d "$ROOT/extract.XXXXXX")
169169
printf '%s' "$review" > "$ed/review.txt"
170-
out=$( cd "$ed" && timeout 180 claude -p "Read review.txt. It is a code review. Convert every genuine defect it reports into this JSON array and output ONLY the array, no prose: [{\"line\": <integer>, \"category\": \"security|correctness|resource-leak\", \"summary\": \"<one sentence>\"}]. Use the line number the review gives for each defect. If it reports no defects, output []." \
170+
# The extractor decides what counts as a defect claim, and it must apply the same bar to every
171+
# arm. The first version asked only for "defects" and let the reviewer's own framing through,
172+
# which made this benchmark unfair in a way that took an outsider's disbelief to catch.
173+
#
174+
# The `none` arm was told "do not report style, naming, typing, documentation, or preference",
175+
# so it stayed silent on those. The harness arms were given their own /review, which is written
176+
# to produce a thorough multi-section report — and it duly reported things like "inconsistent
177+
# parameter typing (nit)", "no tests (low)" and "no call sites (info)". Those are not false
178+
# claims about defects. They are correct observations that the baseline had been instructed not
179+
# to make, and counting them as false positives scored the harnesses for answering a question
180+
# nobody asked them to skip.
181+
#
182+
# So the extractor now drops anything the review itself frames as a nit, a suggestion, a
183+
# missing test, a style or typing preference, or an informational note, and keeps only what it
184+
# presents as an actual bug. Same instruction, same model, every arm.
185+
out=$( cd "$ed" && timeout 180 claude -p "Read review.txt. It is a code review. Extract ONLY findings that the review presents as a genuine BUG, security problem, or resource-handling error in the code — something that would misbehave at runtime. EXCLUDE anything the review frames as a nit, style, naming, typing or annotation preference, a missing test, missing documentation, a suggestion, or an informational note, however it is labelled. Output ONLY a JSON array and no prose: [{\"line\": <integer>, \"category\": \"security|correctness|resource-leak\", \"summary\": \"<one sentence>\"}]. Use the line number the review gives. If it reports no genuine bug, output []." \
171186
--setting-sources=project --output-format=stream-json --verbose < /dev/null 2>/dev/null \
172187
| jq -rs '[.[]|select(.type=="assistant")|.message.content[]?|select(.type=="text")|.text]|join("")' 2>/dev/null )
173188
printf '%s' "$out" | grep -o '\[[^][]*\]' | tail -1

0 commit comments

Comments
 (0)