Appearance
ADR-0046: A retrieval miss shows the field it failed to match, and never claims the document is silent
Status: Accepted — amends ADR-0031, which stands Date: 2026-09-10
Decisions
D-106 A question that maps to a populated curated field and matches nothing above the threshold shows that field, and never Not Stated
The record holds spans for the field. Answering Not Stated would claim the supplier is silent about something the app is holding. The field is shown instead, with nothing singled out.
Not Stated is reached only by a curated field with no Source Spans at all — which is exactly D-85's definition and the only case where silence is what actually happened.
D-107 The Routing Threshold gates singling out a span within a shown field, not whether an answer is given
Above it, Routing points at the matching span inside the field it belongs to. Below it, the field is shown whole. The threshold no longer decides between answering and refusing, because refusing is no longer one of the outcomes for a populated field.
What each amendment touches
- ADR-0031 — D-65, D-66, D-68 and D-69 stand untouched. D-67's reasoning stands entirely: retrieval always has a top hit and that is not a reason to show one. What changes is its consequence: below the threshold the surface no longer returns Not Stated, because that answer was false whenever the field had content. D-71's fixture gains the outcomes D-106 introduces.
- ADR-0036 — D-85 is not amended. It is protected. This ADR exists because D-67 was producing an answer D-85 forbids, and the repair is on D-67's side.
Context
Two Accepted ADRs gave incompatible answers for the same event.
D-67: "Below the Routing Threshold the answer is Not Stated." D-85: "Not Stated is narrowed: an SDS was consulted, the question fell inside a field the record curates, and the document is silent. That and nothing else."
A sub-threshold retrieval means the router failed to find a span. The document may say it plainly three lines from where the search gave up. That is ADR-0032's lie arriving through retrieval — after the same lie had already been caught arriving through storage and through vocabulary.
ADR-0036 revisited Routing's outcome set and never re-read the rule that produces one of those outcomes. Its own Context names this failure about a different document: "adding a term is not the same as re-reading the one it borders." Adding a definition is not the same as re-reading the rules that produce it.
The ticket said the app could not tell the two apart. It was wrong, and the correction is the whole ruling. The claim was that distinguishing "the document is silent" from "my search was not good enough" needs per-Section coverage bookkeeping, which ADR-0036 rejected on cost. That is true for a field the curator left empty. It is false for a field that has spans: the app is holding them. resolveSafetyRead already encodes the distinction — "Record present, curated field, no Source Spans → Not Stated (D-85)."
So the hard case and the dangerous case are not the same case. The dangerous one — claiming silence about content the app possesses — is decidable, and the residual undecidable one is the curator's unselected span, which ADR-0036 already accepted and no naming fixes.
Why showing the field is not the thing D-67 forbade. D-67 guards against a wrong span arriving verbatim, cited and Section-numbered, wearing authority it has not earned. That danger came from the span replacing everything else. Showing the whole curated field singles nothing out, asserts nothing about which span answers the question, and is the same content a user reaches by identifying the chemical and opening the record. There is no wrong span to show when no span is being chosen.
Decision
A retrieval miss inside a populated field shows the field. Not Stated is reserved for an empty one. The threshold moves from deciding whether to answer to deciding whether to point.
Rejected options
- A fifth no-answer state for retrieval failure — rejected. Its honest content would be "we hold this and could not match your question to it", and the useful response to that is to show what we hold. A state whose job is to explain why the app is withholding something it could show is worse than showing it.
- Remove the threshold and show the top hit — rejected. That is precisely the failure D-67 exists to prevent, and removing a guard because its consequence was wrong is not the same as fixing the consequence.
- Keep the threshold gating Not Stated for residual cases — rejected. It leaves the contradiction alive somewhere, which is what this ticket exists to end.
- Adopt per-Section Curation coverage so silence becomes provable — rejected again, on ADR-0036's original cost argument, and now also unnecessary: the case it would have decided is the one D-106 decides for free by looking at whether the field has spans.
This ruling may not be re-decided
If a change contradicts this ADR: stop and raise it. Do not implement over it.
Specifically: do not answer Not Stated for a field that holds Source Spans, whatever the retrieval score; do not restore a top-hit fallback because showing a whole field feels less precise; and do not read D-107 as licence to lower the threshold freely — a mis-set threshold is now a usability problem rather than a safety one, which is a reason to worry less, not a reason to stop measuring.
Consequences
What becomes easy. Not Stated now means one thing in every path that can produce it. Three separate mechanisms were producing it wrongly this week — storage (ADR-0032), vocabulary (ADR-0036), and retrieval (here) — and the vocabulary is finally consistent with every rule that reaches it.
A cost falls. The 2026-09-10 sizing note flagged the Routing Threshold as needing revalidation whenever the Corpus changes, because a mis-set threshold produced false silence. Under D-107 a mis-set threshold produces more or less highlighting. Revalidation still matters; it no longer has a safety consequence riding on it.
What becomes hard. Routing now has a richer outcome than "span or nothing", so the fixture must express "this field, nothing singled out" as an expected outcome, and the surface must render a field with and without a highlight.
The pattern, for the record. This is the third time the same false answer has been found arriving by a different route, and each time the previous fix was correct and incomplete because it was written about the route it was looking at. That is an argument for asking, of any rule that produces a user-visible answer, which other rules can produce the same one.
Coverage
| Upstream | Landed in | Evidence | Note |
|---|---|---|---|
| R-12 | D-106 | the nitrile-versus-latex case: a confident wrong safety answer is the failure mode this repository is built against, and false silence is one | ADR-0002 landed R-12 in D-02 |