Skip to content

feat(judge): check the judge's quote, and measure it on the NEIs (20.9, 20.13) - #18

Merged
Yigtwxx merged 1 commit into
mainfrom
feat/judge-quote-nei
Oct 5, 2026
Merged

Yigtwxx merged 1 commit into
mainfrom
feat/judge-quote-nei

Conversation

@Yigtwxx

@Yigtwxx Yigtwxx commented Oct 5, 2026

Copy link
Copy Markdown
Owner

What this changes

  • 20.9: the judge's quote is checked (product). The review answer gains a quote field. A SUPPORTED or REFUTED opinion whose quote is not in the passage is dropped and noted. The match is exact after one normalisation: NFC, straight quotes, dashes and U+2212 to -, format characters removed, whitespace collapsed, casefold. Each ellipsis part must sit at word and number boundaries, so "2 million" is not in "1.2 million" and "3.2%" is not in "-3.2%", and must hold at least two words, counting a number as one. An NEI opinion may have no quote. The report shows the checked quote.
  • Cache: judgements are keyed by passage hash and check version (#q1), so an unchecked opinion, or one checked against a different passage, is never served. A guarded migration adds the quote column.
  • 20.13: what the judge would do with the NEIs (eval only). pipeline.closest() exposes the passage aggregate already found, and decide is unchanged. scripts/eval_averitec.py gains --judge-nei and --no-fallback, a second hypothetical column, an exact McNemar test against the product, and counts of quote-check drops.
  • Measured 2026-10-05 (gold URLs, Groq only):
    • The judge answered 97 of 105 NEI probes NEI. Its 8 other opinions fixed 5 claims and broke none: 0.427 against 0.371, p = 0.062.
    • The wrong-way count is unchanged at 11.
    • That is just short of the bar set beforehand (p < 0.05), so the product does not escalate NEIs.
    • The quote check dropped 0 of 106 opinions.
  • Docs: spec docs/superpowers/specs/2026-10-05-judge-quote-and-nei-design.md, OPEN-ITEMS §23 (decisions and result), the report, the README AVeriTeC paragraph and the CHANGELOG.

Why

Rule 1 ("never assert without a passage") binds the judge too. Its prompt asked for a verbatim quote, but nothing checked it. And the 2026-10-05 eval showed the judge never sees an NEI, while NEI on a read source is the largest loss.

The change had an independent review and three re-review rounds. They tightened the matcher: word and number boundaries, a minimum length, the sign kept, no NFKC, and the range dash. The reviews also added the passage hash to the cache key, showed the checked quote in the report, and guarded the eval tests against reaching a live run. A test had once started a 16-claim live run by accident; the stray results file was deleted, and an autouse fixture now fails any such test. The documentation numbers were fact-checked against the raw results.

Checklist

  • ruff check and ruff format --check are clean (and mypy --strict, plus mypy scripts/eval_averitec.py)
  • pytest passes (full suite)
  • Type annotations on every new function signature
  • No network access in unit tests (and now an autouse guard in the eval tests)
  • If a new reported state was added, spec section 15 is updated too (no new verification state; new judge drop notes only)
  • This change does not make the tool sound more confident than its evidence

🤖 Generated with Claude Code

https://claude.ai/code/session_01K46EEsxMvuAuM8wjvPNWLM

…9, 20.13)

The review prompt asked the judge to quote the passage, but nothing
checked it, so an opinion from memory or a paraphrase was attached like
any other (rule 1). The answer now carries a separate `quote`. A
SUPPORTED or REFUTED opinion whose quote is not in the passage is
dropped and noted: the match is exact after one normalisation, at word
and number boundaries, with at least two words a part. The report shows
the checked quote. Cached judgements are keyed by passage and by the
check version, so an unchecked or differently anchored one is never
served.

The eval gains --judge-nei and --no-fallback. Shown each NEI's closest
passage, the judge fixed 5 AVeriTeC claims and broke none (0.427 against
0.371, p = 0.062), just short of the bar set beforehand, so the product
does not escalate NEIs. The quote check dropped 0 of 106 opinions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K46EEsxMvuAuM8wjvPNWLM
@vercel

vercel Bot commented Oct 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
proofpath Ignored Ignored Oct 5, 2026 3:42pm UTC

@Yigtwxx
Yigtwxx merged commit bd329ff into main Oct 5, 2026
20 checks passed
@Yigtwxx
Yigtwxx deleted the feat/judge-quote-nei branch October 5, 2026 15:48
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.

1 participant