ragevalcitations, checked to the character

51/52 quotes found verbatim16/30 answers cite the expected passage0 network calls to replay

corpus 26b03ce9a1c2c1d4 · k = 5 · 30 questions

Seven retrievers, the same thirty questions

Recall is the share of expected passages found anywhere in the top 5. MRR is how high the first one sat. Either alone misleads, so both are shown, and every row can be read question by question below.

Retrieval

ConfigurationRecall @5MRR @5In CI
Dense0.7670.603Gated
BM250.6000.465Gated
Hybrid · dense + BM250.8000.570Gated
Full-text0.4000.222Recorded
Hybrid · dense + Full-text0.7670.439Recorded
Rerank over Dense0.8330.490Recorded
Rerank over Hybrid · dense + BM250.8000.451Recorded

Gated rows are compared with their frozen report on every pull request; any change in any question fails the build. Recorded rows were measured once and published as they came out. The best value in each column is in bold.

Answers over dense retrieval

Citation hit @5
0.533
16 of 30 answers cite the expected passage
Over retrieved gold
0.696
of the 23 whose expected passage was retrieved
Quotes found verbatim
51/52
98% of citations resolve to a span

A hit means a citation overlaps the one span the golden set records, so the rate is a lower bound: several misses cite another sentence of the same PEP that also answers the question. Answered by gemini/gemini-3.5-flash (1), groq/openai/gpt-oss-120b (29), prompt 682ec1326b2f.

Question by question

Each cell is the rank at which the expected passage first appeared, 1 to 5; a dash means it was not in the top 5. 4 questions are missed by every configuration: q14, q21, q23, q29.

QuestionDenseBM25Hybrid BM25Full-textHybrid FTRerank denseRerank hybridAnswer
q01What is the maximum line length PEP 8 asks for?311–212hit
q02How many spaces per indentation level does PEP 8 require?1114111hit
q03What does the Zen of Python say about there being one way to do something?111–111hit
q04Which quotes should a docstring use?1111133hit
q05What is the regular expression a Python source encoding declaration must match?1111111hit
q06What is an f-string?3111122hit
q07What does the walrus operator do?121–312hit
q08What does PEP 484 say about runtime enforcement of type hints?3–5–3––hit
q09What is the canonical form of a version's release segment?111–522hit
q10Which table in pyproject.toml declares the build system?1222222hit
q11What is a build backend?–––––33n/r
q12What does paramstyle indicate in the DB-API?1–3–433hit
q13What two methods does the with statement need on a context manager?1–2–533hit
q14What does yield from do?–––––––n/r
q15What is a virtual environment?1213211miss
q16What is a namespace package?1–54122miss
q17What is an enumeration?–444511n/r
q18What does PEP 448 generalise?111–311hit
q19What operator does PEP 465 add for matrix multiplication?2––––33miss
q20What makes a function a coroutine under PEP 492?2–5425–miss
q21How is a project name normalised for the simple repository API?–––––––n/r
q22Where may underscores appear in a numeric literal?4113322hit
q23What is a protocol class?–––––––n/r
q24What does the dataclass decorator generate?153–422hit
q25How does a package declare that it ships type information?2–42133hit
q26What does from __future__ import annotations change?323–445miss
q27What problem do context variables solve?–11––43n/r
q28What does PEP 585 allow in place of typing.List?121–222miss
q29How is an optional type written under PEP 604?–––––––n/r
q30What does a match statement compare a subject against?1111122miss