# Retrieval Candidate Pools A `RetrievalCandidatePool` freezes the output of first-stage retrieval before reranking. Its identity binds the project, immutable suite case, source embedding space/index, corpus revision, retrieval configuration digest and ordered candidate IDs/scores/content hashes. Text is excluded. M8 uses a top-40 ceiling. Thirty-two cases contain 40 unique in-scope candidates; one scoped case contains 39. ModelForge records the actual count and never pads the pool with out-of-scope data. Control and reranked results must reference the same pool IDs. Corpus/config/pool mismatch is a typed comparability failure. The pool is immutable after creation. Reranking therefore cannot benefit from a second dense or sparse retrieval run, and it cannot recover a relevant item absent from the frozen pool.