Retrieval and generation are the easy half. This is the half that decides whether a change made the system better, and blocks the pull request when it did not.
The LLM judge is validated against 42 human labels before it is allowed to score anything. An unvalidated judge measures its own preferences and calls the result quality.
A system that refuses everything scores perfectly on faithfulness. Tracking refusal alongside it is what stops that from looking like an improvement.
Two sentences can share almost every token and assert opposite things. Lexical similarity cannot see it, so the harness runs a natural-language-inference judge for that axis.
The positive class was written by the same author as the detector, which makes it circular. Fixing that needs an independent annotator, and the README says so.