CacheStats.guardRejectionsByGuard is a per-guard breakdown where every configured guard is a key, so a silent guard reads as 0. SemanticCache.explain(prompt, scope) is a read-only diagnostic returning each nearby candidate with every guard's verdict, and whether the threshold or a guard stood in the way. It moves no counter and never runs the Verifier.
Plus fail-closed Verifier semantics, so a verifier that throws or times out rejects rather than serving unconfirmed, and CachingVerifier, which memoizes verdicts per (query, cachedPrompt).
CacheStats.guardRejectionsByGuardis a per-guard breakdown where every configured guard is a key, so a silent guard reads as0.SemanticCache.explain(prompt, scope)is a read-only diagnostic returning each nearby candidate with every guard's verdict, and whether the threshold or a guard stood in the way. It moves no counter and never runs theVerifier.Plus fail-closed
Verifiersemantics, so a verifier that throws or times out rejects rather than serving unconfirmed, andCachingVerifier, which memoizes verdicts per(query, cachedPrompt).