Core idea: ClosureProbe does not decide whether nothing exists in the world. Given supplied evidence and an observable trace, it checks whether the system still had a receiver-anchored, exact-query basis for saying none after the evidence crossed its own boundaries.
The problem
A zero is not always a negative answer. A search may return an empty page while another page remains. A final continuation page may be empty even though an earlier page contained a match. A request may have been denied, a shard may have failed, a source scope may have changed, or a downstream adapter may have discarded the signal that said the search was incomplete.
Those cases can look similar after enough translation. A client may see an empty array. A model may see “0 results.” A downstream workflow may turn that into “no record exists.” The important question is not only whether the final sentence is correct. It is whether the observed system had enough evidence to make that sentence at all.
What ClosureProbe follows
ClosureProbe treats a negative claim as an evidence chain rather than a bare boolean. The chain starts from supplied request, response, and grounding material that the receiver reconstructs through a pinned source profile. It then follows that state through the observable stages of a toolchain.
At each stage, the analyzer asks whether the same negative conclusion is still tied to the same request, source context, scope, traversal, profile, and proposition. If not, it reports the earliest observed boundary where that chain stopped supporting the claim.
The protocol can succeed while the evidence gets weaker
ClosureProbe is not primarily a protocol-error detector. A source can correctly report an incomplete empty result, an adapter can faithfully produce an empty collection, a protocol can deliver that collection without a schema violation, and a client can retain it exactly. The evidentiary failure appears only when a later stage treats that observation as proof of absence.
That is why protocol completion, HTTP success, page length, source identity, and producer-profile validation remain separate in the model. A clean transport path does not upgrade partial evidence into complete evidence. ClosureProbe tests the epistemic transition that ordinary component-level checks can miss.
A negative needs more than zero
The profile keeps several evidence axes separate because one cannot stand in for another.
- Execution
- Did the operation actually succeed, rather than fail, deny access, or remain unknown?
- Cardinality
- Was the observed result zero, nonzero, or unavailable?
- Coverage
- Was the relevant bounded search complete, partial, or unknown?
- Continuation
- Was traversal exhausted, or is more data still indicated?
- Traversal
- Does the evidence cover the root query, or only one segment or continuation page?
- Scope
- Is the observation bound to the exact declared scope?
- Validation
- Did a pinned source profile reconstruct the producer-specific signals?
A producer-local negative is licensed only when execution succeeded, cardinality is zero, coverage is complete, continuation is exhausted, traversal closes the root query, query and scope bindings are exact, and the observation passes the pinned producer profile. A downstream none claim needs more: the evidence must also remain anchored and bound to the same source context and exact proposition.
Why the last empty page is not enough
Pagination is a simple example of the distinction ClosureProbe is designed to preserve. Suppose a Google Drive files.list response is empty but carries a nextPageToken. The current page has zero items, but the root query is still open. That is not licensed absence.
The opposite error can happen at the end of a traversal. A final continuation page may be empty and locally exhausted, while an earlier page contained a hit. Treating only that last segment as the whole query would erase the earlier evidence. ClosureProbe therefore distinguishes a complete root-to-final aggregate from a final segment viewed in isolation.
The frozen corpus tests both directions: an incomplete traversal must stay unlicensed, while a validated all-zero traversal can earn a bounded negative license.
The receiver does not trust the trace at face value
One of the main rc3 changes was to remove a self-certification gap at the root. A trace cannot begin with a field that merely says profile_validated. It must carry rootEvidence, and the receiver reconstructs the first observation from the supplied material using the exact installed profile and version.
The receiver recomputes canonical request and response digests, checks the declared source grounding, verifies proposition scope, and requires the reconstructed observation to match the first trace stage. If that chain cannot be rebuilt, the root is unanchored.
A sender's trust label cannot substitute for that reconstruction. Legitimate new evidence can strengthen a later stage, but the receiver must reconstruct that evidence too.
Four bindings keep the claim from drifting
ClosureProbe independently binds four things that are easy to blur together:
- Exact request: canonical JSON identity of the root query.
- Traversal: whether the observed material is the complete root query or only a segment.
- Source grounding: declared producer, instance, authority context, and proposition scope.
- Negative proposition: the exact subject, predicate, and scope of the asserted absence, bound again to the source context.
This lets the analyzer distinguish a true preservation failure from a different problem such as a source-profile substitution, scope change, request mismatch, or proposition drift.
What it can localize
The normative analyzer reports distinct findings rather than collapsing every failure into one generic error. The rc3 profile includes:
- unanchored_root_evidence
- grounding_binding_mismatch
- profile_binding_change
- guard_signal_loss
- dangerous_mutation
- unsupported_upgrade
- query_binding_mismatch
- claim_binding_missing or claim_binding_mismatch
- unverified_evidence_introduction
- unlicensed_negative
The useful output is the boundary: where did a chain that was previously anchored become weaker, different, or unjustifiably stronger?
Producer-specific semantics
Completeness means different things for different systems, so rc3 does not pretend that one generic “empty” rule is enough. The frozen release ships five producer-specific profiles plus one controlled generic contract.
Unsupported or ambiguous producer states fail closed. Elasticsearch is deliberately restricted to local-cluster semantics in this profile, and Microsoft Graph traversal links must satisfy the declared safe URL shape before they are accepted as part of a complete round.
How this differs from Negative Result Warrant
These two RISU projects are adjacent, but they answer different questions. Negative Result Warrant asks what evidence is sufficient for a bounded zero observation to become a usable negative premise. ClosureProbe asks what happens after that kind of evidence starts moving: did the basis survive the adapter, protocol, client, model-facing projection, and final claim?
In that sense, one qualifies a negative premise and the other tests its transport. ClosureProbe is useful precisely where a locally reasonable observation can become an unjustified downstream conclusion without any single component obviously “failing.”
Frozen adversarial record
The v0.1.0-rc3 release freezes a 50-case corpus: 37 producer-profile observations and 13 cross-boundary traces. The published evidence reproduces all 50 expected assessments.
- Frozen corpus
- 50 deterministic adversarial and control cases
- Published corpus result
- 50 passed · 0 failed
- Observation cases
- 37
- Cross-boundary traces
- 13
- Implementation and integration tests
- 33
- Controlled protocol check
- Official MCP 2.0.0 client/server packages over stdio
- Normative judge
- Deterministic · no LLM judge
Adversarial cases include forged root anchoring, source-scope drift, profile substitution, skipped cross-cluster search, malformed Microsoft Graph traversal links, denied or failed execution, continued results, segment-only evidence, and favorable guard mutation. Positive controls include exact complete zeros, validated multi-page aggregates, ordinary weakening, and legitimate receiver-reconstructed evidence upgrades.
The 50 of 50 result is a conformance result for the frozen artifact. It is not an error rate for external clients or a claim that arbitrary agent pipelines preserve negative evidence.
What rc3 hardened
The release candidate is the third step in an adversarial hardening sequence. rc2 had already stopped a sender from self-authorizing a downstream evidence upgrade. rc3 moved the trust root one step earlier and required the receiver to reconstruct the trace root itself.
It also added explicit evidenceAnchored propagation, machine-readable source context, context-bound proposition binding, separate findings for grounding drift and profile substitution, fail-closed Elasticsearch scope, and stricter Microsoft Graph traversal validation. These changes narrow what the system is willing to call a supported negative rather than expanding the claim.
Result
ClosureProbe turns a negative claim from a terminal string into an auditable evidence path. Within its declared profiles and supplied observable traces, it can determine whether the exact bounded negative remained anchored and identify the first observed boundary where that support was lost, substituted, mutated, or exceeded.
The contribution here is not the familiar statement that absence requires adequate search. It is the executable composition: producer-specific closure semantics, receiver reconstruction, independent bindings, anchor propagation, and first-boundary localization in one falsifiable system.
Where the system stops
ClosureProbe analyzes supplied observable traces. It does not automatically intercept hidden transforms, prove that the producer told the truth, authenticate the declared authority context, establish freshness beyond the supplied observation, infer semantic equivalence between different queries, or prove world-level nonexistence. It does not certify legal compliance, security, eligibility, medical correctness, or the safety of a downstream action.
A hidden boundary is a visibility limit, not an implicit pass. Canonical JSON digests establish normalized identity of supplied material, not byte-level authenticity or chain of custody. Those properties require separate evidence such as signatures, authenticated logs, timestamps, or retained transport artifacts.
Frozen release record
- Release
- v0.1.0-rc3
- Status
- Experimental pre-release
- Profile
- ClosureProbe Profile v0.3
- Release commit
- 12fae2c0cb0909a43f487323fb00e7372b1f3377
- Source archive SHA-256
- e0e8a2e0f2958accf090d595e233189a7def1906a29477019966c0a3e256a44a
- Git bundle SHA-256
- a6d0acdae171a1eee4d83f0be417431178507fbecc99a4fd2f94656f329b0e97