| key | type | primitive | tier |
|---|---|---|---|
cites_sources | must_have | regex_match@1 | — |
grounded_in_references | scored | llm_judge@1 | 2 |
no_fabricated_facts | must_not | llm_judge@1 | 2 |
answers_the_question | scored | llm_judge@1 | 1 |
**Judges:** whether a RAG answer is grounded in its retrieved passages — citations present, every claim supported, nothing fabricated, and the actual question answered. **Use when:** you ship a RAG assistant and a wrong-but-confident answer costs you trust (support bots, doc Q&A, research copilots). Send the answer as `output` and the retrieved passages as `context` (Contract 05 roles); `reference_set_id` and inline references still work too.
curl -s -X POST $API/v1/rubrics -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d @templates/rag-grounding-check/rubric.json
# typed roles: the answer is the output; the retrieved passages travel as context
curl -s -X POST $API/v1/verify -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"rubric_id":"<id>","submission":{"output":"The refund window is 30 days [1].","context":[{"label":"policy-1","value":"Refunds are accepted within 30 days of delivery."}]},"options":{"wait_ms":45000}}'MCP: `rubric_compile` with this rubric.json, then `verify_submit { rubric_id, submission: { output, context: [...] } }`. The legacy `submission.inline` shape still works unchanged.