rag / evaluation / ci

RAG With an Evaluation Harness That Can Fail a Build

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.

Measured

tests
85
golden set
103
human labels
42
judges
2
ci gate
yes

What this project actually found

A judge nobody checked is not evidence

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.

Faithfulness, coverage and refusal are separate axes

A system that refuses everything scores perfectly on faithfulness. Tracking refusal alongside it is what stops that from looking like an improvement.

Contradiction detection needs an NLI model, not string overlap

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 known gap is stated rather than hidden

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.