Grantwell

Hybrid retrieval over a grant corpus, with a gate that refuses any draft it cannot support.

Retrieval

Lexical (SQLite FTS5/BM25) and semantic (hashed embedding) run independently, then fuse with Reciprocal Rank Fusion. Fusion is constrained so neither retriever's top hit can be squeezed out.

The grounding gate

Leave the box empty and the service drafts its own grounded summary. Or paste an answer and watch it get checked: cite a document that was not retrieved, or state the wrong award amount or deadline, and it is rejected.

Offline evals

Recall@5, MRR and groundedness over a labelled fixture set. No network, no API key, so it runs in CI.