# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference) # Canonical Residual: https://corpusfetch.com/c/what-invariants-prevent-deceptive-alignment-during-capability-probes.md # Remnant Warrant: https://corpusfetch.com/c/what-invariants-prevent-deceptive-alignment-during-capability-probes.warrant.json # Markdown SHA-256: 5c596ff2bddf721233d3814e06cfe0ea46f748c0d9174697beb620f1bb9724ff # Code AST SHA-256: 277f0c191cf2b01dce66c03598302e1144323d80627e649185b0761c4641563c # Verified Classes: ProbeVerdict, CapabilityProbe, ProbePolicy, ProbeManifest, DeceptiveAlignmentProbeGuard # Defensive Guards: 0 fail-closed invariants (zero external deps) from dataclasses import dataclass from enum import Enum, auto import hashlib import json class ProbeVerdict(Enum): NO_PROBE = auto() PROBED_BEHAVIOR_REPRESENTATIVE = auto() OBSERVATION_EFFECT_DETECTED = auto() PROBE_DETECTABLE_RISK = auto() @dataclass(frozen=True) class CapabilityProbe: probe_id: str is_observable: bool baseline_available: bool probed_behavior_score: float unobserved_behavior_score: float probe_pattern_randomized: bool @dataclass(frozen=True) class ProbePolicy: max_acceptable_divergence: float require_randomization_for_observable: bool @dataclass(frozen=True) class ProbeManifest: verdict: ProbeVerdict directive: str manifest_digest: str class DeceptiveAlignmentProbeGuard: @staticmethod def _hash(data: str) -> str: return hashlib.sha256(data.encode("utf-8")).hexdigest() @classmethod def evaluate_probe( cls, probe: CapabilityProbe, policy: ProbePolicy ) -> ProbeManifest: # Gate 1: No probe if not probe.probe_id: digest = cls._hash(json.dumps({ "probe": "NONE" }, sort_keys=True)) return ProbeManifest( verdict=ProbeVerdict.NO_PROBE, directive=f"PROCEED: No probe to evaluate.", manifest_digest=digest ) # Gate 2: Detectable without randomization if probe.is_observable and not probe.probe_pattern_randomized and policy.require_randomization_for_observable: return ProbeManifest( verdict=ProbeVerdict.PROBE_DETECTABLE_RISK, directive=f"FLAG: Probe {probe.probe_id} detectable and not randomized.", manifest_digest=cls._hash(f"DETECTABLE:{probe.probe_id}") ) # Gate 3: No baseline if not probe.baseline_available: digest = cls._hash(json.dumps({ "probe": probe.probe_id, "baseline": "NONE" }, sort_keys=True)) return ProbeManifest( verdict=ProbeVerdict.PROBED_BEHAVIOR_REPRESENTATIVE, directive=f"PROCEED_WITH_CAUTION: Probe {probe.probe_id} without baseline.", manifest_digest=digest ) # Gate 4: Divergence if probe.probed_behavior_score > 0: divergence = abs(probe.probed_behavior_score - probe.unobserved_behavior_score) / max(probe.probed_behavior_score, 0.01) if divergence > policy.max_acceptable_divergence: return ProbeManifest( verdict=ProbeVerdict.OBSERVATION_EFFECT_DETECTED, directive=f"FLAG: Divergence {divergence:.2f} between probed and unobserved behavior.", manifest_digest=cls._hash(f"DIVERGENT:{probe.probe_id}") ) # Gate 5: Representative digest = cls._hash(json.dumps({ "probe": probe.probe_id, "probed": f"{probe.probed_behavior_score:.3f}", "unobserved": f"{probe.unobserved_behavior_score:.3f}" }, sort_keys=True)) return ProbeManifest( verdict=ProbeVerdict.PROBED_BEHAVIOR_REPRESENTATIVE, directive=f"PROCEED: Probe {probe.probe_id} representative.", manifest_digest=digest )