src/clawbench/runner/judge.py:187:
return bool(obj.get("match")), str(obj.get("reason", ""))
If a judge model replies {"match": "false", "reason": "..."} — a string, which LLMs emit routinely — then bool("false") is True and a mismatch is scored as a PASS. Verified: python3 -c 'print(bool("false"))' → True.
src/clawbench/runner/judge_llm.py:156 has the same bug plus a worse default:
return bool(obj.get("match", True)), str(obj.get("reason", ""))
A verdict object missing the match key defaults to True (pass). This is the lenient rubric — the one that produces the published Reward-lenient column.
Also conflated today: a missing/garbled verdict is indistinguishable from a genuine mismatch, both collapsing to False in judge.py.
Ask: parse tri-state explicitly — accept real booleans, accept case-insensitive "true"/"false" strings, return None (inconclusive) for anything else, and never default a missing key to a pass. _parse_verdict currently has no unit tests; a small matrix (bool / string / missing / garbage / nested) would pin this.
Impact is scoring integrity on published numbers, so worth doing before the next leaderboard refresh.
src/clawbench/runner/judge.py:187:If a judge model replies
{"match": "false", "reason": "..."}— a string, which LLMs emit routinely — thenbool("false") is Trueand a mismatch is scored as a PASS. Verified:python3 -c 'print(bool("false"))'→True.src/clawbench/runner/judge_llm.py:156has the same bug plus a worse default:A verdict object missing the
matchkey defaults to True (pass). This is the lenient rubric — the one that produces the published Reward-lenient column.Also conflated today: a missing/garbled verdict is indistinguishable from a genuine mismatch, both collapsing to
Falsein judge.py.Ask: parse tri-state explicitly — accept real booleans, accept case-insensitive
"true"/"false"strings, returnNone(inconclusive) for anything else, and never default a missing key to a pass._parse_verdictcurrently has no unit tests; a small matrix (bool / string / missing / garbage / nested) would pin this.Impact is scoring integrity on published numbers, so worth doing before the next leaderboard refresh.