v1.108.169 - the retrieval verdict survives compaction
The retrieval verdict survives compaction.
Two defects in contracts shipped days earlier, both found while checking a zero-result search that had been treated as proof of absence.
Every compact encoder dropped _meta.verdict. schema_driven.encode filters _meta through a strict allowlist, and verdict was in none of the 15 schema files. Under MUNCH encoding the whole retrieval-verdict contract was invisible: state, channels, coverage, scorer, did_you_mean. Tools without a custom encoder kept theirs, so the signal was present where it was least needed and absent on search_symbols, search_text, and get_ranked_context -- the three tools the absence contract is built on.
The sharpest consequence was on absence evidence. The server mints the citable absent:<sha> ref onto _meta.verdict.evidence_ref, and compact callers never received it, along with the absence_citable / absence_blocked_by refusal reason. The token-saving layer was eating the safety layer.
meta_keys could not be reused for the fix -- it flattens to a scalar and would have stringified the verdict into a Python repr. New meta_json_blobs parameter instead, mirroring the existing json_blobs mechanism; all 15 schemas now declare _META_JSON = ("verdict",).
search_text was never wired for the v1.108.168 rebuilding rule. That release wired search_symbols and get_ranked_context only. The absence chokepoint is generic -- it fires on any _meta.verdict dict -- so search_text could reach absent and mint a ref while structurally unable to detect a rewrite underneath its own scan.
Honest cost: carrying the verdict adds ~58 tokens to a 20-result encoded search and ~89 to a zero-result response. The zero-result case is where the value is: that is precisely the response an agent would otherwise read as proven absence. The verdict is carried at full fidelity, because trimming it inside the encoder would make compact and JSON disagree, which is the class of bug being fixed.
No schema, tool-count, or INDEX_VERSION change. New tests/test_v1_108_169.py (10), including a guard that every schema declaring _META also declares verdict in _META_JSON, so a future encoder cannot reintroduce the drop.