Label semantics

The part integrators get wrong. A label is not a severity — severity is measured, published, and yours to derive. Every list on this page is generated from the served guidance, so it cannot drift from what the engine does.

Success labels

The only labels that positively assert a verification outcome, and therefore the only ones that may reach a clean verdict.

verified_existsverified_statute_existsquote_exact_matchquote_normalized_matchsupports

Existence is not currency

verified_statute_exists says the section is real, not that it is in force
It is a success label for existence. A repealed, recodified or omitted section is a real citation, so it verifies — and a historical citation is never a fabrication. The currency signal rides alongside it as status.

If you are gating on current law, derive your success set from label_classes as usual, then additionally reject status in repealed, recodified, omitted, eliminated, former, historical_range, transferred, renumbered. null, range, reserved and vacant are not currency findings. Where a section was recodified, successor names the current section — which may sit in a different title.
The statute gate verifies to the section
verified_statute_exists / statute_section_not_found decide the SECTION a U.S.C. or C.F.R. citation names. A paragraph pin below the section — '(b)(4)(ii)', '(a)(2)(A)' — is carried in the citation but NOT read: a pin that does not exist under a real section still verifies, and a pin that names the wrong paragraph of the right section passes silently. verdict_get_law resolves C.F.R. sections and appendices the same way (paragraph isolation applies to appendix ITEMS only). Treat sub-section pins as UNCHECKED; a consumer that needs pin correctness must read the section text (verdict_get_law serves it for C.F.R.)

Applies to verdict_check_citations, verdict_check_brief, verdict_check_ai_output, verdict_get_law. Since guidance 1.14.1 (disclosure; the gate has always been section-level).
The statute gate does not check citation style
It verifies existence. A flattened transcription — § 401-02 where the source printed §§ 401–02 — verifies just the same, and the envelope keeps the dash glyph but not the section-mark count. A consumer that must catch that transcription defect needs its own source-versus-output check; this gate will not be its detector.

Coverage gaps

outside_indexed_volumesreporter_not_coveredstatute_title_not_covered

A gap means “no corpus we hold claims this cite” — nothing more. It has already survived the rescue chain before you see it, so it is a meaningful review signal, but it is never proof of fabrication and must never block. Gate it as unknown.

The discriminator: typed_hallucination_category
It is set only on accusation-class labels and is always null on a coverage gap. That invariant is guaranteed by construction and pinned by a test in the engine suite, so it is safe to render as the fabrication-versus-gap discriminator. It is not safe to gate on — see below.

Accusations, and their published precision

We measure our own accusation labels and publish the numbers. Where a label's measured precision does not support blocking, the guidance says so — and your gate should read that rather than assume.

LabelTierPrecisionMeasured
case_name_mismatchreview0.2552026-08-21
citation_year_mismatchreview0.6672026-08-21
case_name_variantadvisen/arelease gate
not_found_in_covered_volumeblockn/arelease gate

Fabrication-class labels run under a standing zero-false-positive release gate: every release re-proves zero false accusations over a fabricated/real probe corpus, and field false-positive classes are fixed same-day and disclosed.

Never gate on a shared type string

This one has deleted correct citations three times
case_name_mismatch carries typed_hallucination_category: "citation" — the same string a genuine fabrication label carries — while measuring precision 0.255, which is why it is review, not block. A gate keyed on the type string promotes it and deletes a correct citation. Derive blocking from label_metrics.recommended_tier and nothing else.

Everything else must be loud

These 17 labels are in neither class. Resolve them through label_metrics, advisory markers and the accusation category — and route anything left over to a bucket that refuses a clean verdict.

pin_cite_out_of_rangecase_name_mismatchcase_name_variantcitation_year_mismatchcitation_year_later_than_decisionparallel_cite_mismatchstatute_section_not_foundnot_found_in_covered_volumereporter_or_volume_nonexistentambiguous_multiple_matchesquote_not_foundcontradictsrelated_insufficientwrong_jurisdictionnegative_treatment_flagsuperseded_or_outdatedmanual_review_required
An allowlist used for severity triage is a silence generator
A consumer once classified labels through a block allowlist and an advisory allowlist. A fabricated-volume label matched neither, fell through both, and the gate printed clean — silent in the one direction a gate must never be silent. Pin the label enum and the output_schema_sha256 of the tools you call, and let a label newer than your pin break your checker visibly.

Our reference gate does exactly this, in about 200 lines with no dependencies — it derives its policy from the served guidance and is meant to be copied: see the tools for what it calls, and read label_metrics in the consumer guidance for the live numbers. Generated from guidance 1.14.1; where this page and the served guidance disagree, the guidance wins.