You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make the benchmark observable, survivable, and stop it shrinking its own denominator
Three problems, all found by watching a run instead of waiting for one.
It printed nothing until the end. A 120-review run sat at zero bytes for ninety
minutes with no way to distinguish progress from a hang, and killing it — which
is what happened — threw away 83 completed reviews.每 run now appends to a TSV as
it finishes and progress goes to stderr, so the suite is observable while it runs
and its partial results survive being interrupted.
One slow arm stalled everything. gstack's /review reads a much larger tree and
was averaging minutes per run against a 300-second ceiling, which turned the
suite into hours. The ceiling is 150 seconds now and overridable. A review that
does not finish is recorded as a miss, which is the honest treatment.
And the denominator moved. When scoring failed, it returned planted:0, so a
review that errored or timed out quietly removed its own planted defect from the
total rather than counting as a miss — inflating recall for whichever arm failed
more. That is why one arm reported 34 planted where the others reported 35, a
difference that looked like rounding and was four swallowed failures. The
denominator now comes from ground truth and never from the scoring path.
That is the sixth way this benchmark was wrong, and like the previous five it
would have flattered whichever arm I happened to be measuring.
# Did the harness's own pathway actually engage? For `none` there is nothing to enter.
@@ -182,27 +186,48 @@ extract_findings() {
182
186
# So the extractor now drops anything the review itself frames as a nit, a suggestion, a
183
187
# missing test, a style or typing preference, or an informational note, and keeps only what it
184
188
# 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 []." \
189
+
out=$(cd"$ed"&& timeout "${EXTRACT_TIMEOUT:-90}" 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 []." \
0 commit comments