This is a follow-up to Kmemo: a semantic cache for LLM calls that refuses to serve you the wrong answer. If you have not read it, the one-line version is that Convert 100 USD to EUR and Convert 250 USD to EUR sit at 0.99 cosine similarity, no threshold separates them, and Kmemo reads the candidates as text instead of trusting the number.

That post shipped 1.0 and ended with two things I could not report. 2.0.0 is out now, and both of them have an answer. One of the answers is not the one I was hoping for.

Gap one: I never said what a verifier catches

The figures in the first post were 67% of near misses rejected and 88% of paraphrases kept, and I labelled them guard-only. The lexical chain runs for free; the optional Verifier is a model call that sees whatever the guards let through. I described that residual as the verifier's job without ever measuring how much of it a verifier actually stops.

Against a named reference implementation, sentence_transformers.CrossEncoder over cross-encoder/quora-distilroberta-base: