# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference) # Canonical Residual: https://corpusfetch.com/c/what-discovery-invariants-prevent-semantic-drift-from-silently-altering-vector-search-relevance.md # Remnant Warrant: https://corpusfetch.com/c/what-discovery-invariants-prevent-semantic-drift-from-silently-altering-vector-search-relevance.warrant.json # Markdown SHA-256: 2780e6a7045f770b512138b13c7c333aa994c3ecdabe5e06935aaf53c2a08a27 # Code AST SHA-256: 92dbc4fcb774ab5240dcb00cb53259edc4ca6649cb11f0cc76831c8e936b1ba5 # Verified Classes: DriftVerdict, SemanticState, DriftPolicy, DriftManifest, SemanticDriftGuard # Defensive Guards: 0 fail-closed invariants (zero external deps) from dataclasses import dataclass from enum import Enum, auto import hashlib import json class DriftVerdict(Enum): SEMANTIC_ALIGNMENT_OK = auto() QUERY_DRIFT_DETECTED = auto() MODEL_MISMATCH = auto() RELEVANCE_DEGRADED = auto() @dataclass(frozen=True) class SemanticState: centroid_distance: float acceptable_centroid_distance: float embedding_model_matches: bool relevance_degradation_ratio: float @dataclass(frozen=True) class DriftPolicy: max_acceptable_relevance_degradation: float @dataclass(frozen=True) class DriftManifest: verdict: DriftVerdict directive: str manifest_digest: str class SemanticDriftGuard: @staticmethod def _hash(data: str) -> str: return hashlib.sha256(data.encode("utf-8")).hexdigest() @classmethod def evaluate_drift( cls, state: SemanticState, policy: DriftPolicy ) -> DriftManifest: # Gate 1: Model mismatch if not state.embedding_model_matches: return DriftManifest( verdict=DriftVerdict.MODEL_MISMATCH, directive="HALT: Embedding model mismatch. Queries and corpus use different models.", manifest_digest=cls._hash("MODEL_MISMATCH") ) # Gate 2: Centroid drift if state.centroid_distance > state.acceptable_centroid_distance: return DriftManifest( verdict=DriftVerdict.QUERY_DRIFT_DETECTED, directive=f"HALT: Query centroid drifted {state.centroid_distance:.3f} > {state.acceptable_centroid_distance:.3f}.", manifest_digest=cls._hash(f"CENTROID:{state.centroid_distance:.3f}") ) # Gate 3: Relevance degradation if state.relevance_degradation_ratio > policy.max_acceptable_relevance_degradation: return DriftManifest( verdict=DriftVerdict.RELEVANCE_DEGRADED, directive=f"HALT: Relevance degraded by {state.relevance_degradation_ratio:.2%}.", manifest_digest=cls._hash(f"RELEVANCE:{state.relevance_degradation_ratio:.3f}") ) # Gate 4: Aligned digest = cls._hash(json.dumps({ "centroid": f"{state.centroid_distance:.3f}", "relevance": f"{state.relevance_degradation_ratio:.3f}" }, sort_keys=True)) return DriftManifest( verdict=DriftVerdict.SEMANTIC_ALIGNMENT_OK, directive="PROCEED: Semantic alignment verified.", manifest_digest=digest )