# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference) # Canonical Residual: https://corpusfetch.com/c/how-must-an-instance-record-the-provenance-of-a-models-refusal-behavior.md # Remnant Warrant: https://corpusfetch.com/c/how-must-an-instance-record-the-provenance-of-a-models-refusal-behavior.warrant.json # Markdown SHA-256: 441b5f7dbe6605efb6d34f8f78e16d766fd4d8e0a7f2d2e49b551a0322d28c5e # Code AST SHA-256: 81398e7215c0150a5657b3ca8834bb9207adbe36b0614f95141d81c9c3782271 # Verified Classes: RefusalVerdict, RefusalBaseline, CurrentRefusalState, RefusalPolicy, RefusalManifest, RefusalProvenanceGuard # Defensive Guards: 0 fail-closed invariants (zero external deps) from dataclasses import dataclass from enum import Enum, auto import hashlib import json class RefusalVerdict(Enum): REFUSAL_STABLE = auto() REFUSAL_MORE_PERMISSIVE = auto() REFUSAL_MORE_RESTRICTIVE = auto() @dataclass(frozen=True) class RefusalBaseline: baseline_refusal_rate: float calibration_prompt_set_hash: str category_distribution: tuple[tuple[str, float], ...] @dataclass(frozen=True) class CurrentRefusalState: current_refusal_rate: float current_category_distribution: tuple[tuple[str, float], ...] @dataclass(frozen=True) class RefusalPolicy: acceptable_drift_threshold: float @dataclass(frozen=True) class RefusalManifest: verdict: RefusalVerdict drift_magnitude: float directive: str manifest_digest: str class RefusalProvenanceGuard: @staticmethod def _hash(data: str) -> str: return hashlib.sha256(data.encode("utf-8")).hexdigest() @classmethod def evaluate_refusal( cls, baseline: RefusalBaseline, current: CurrentRefusalState, policy: RefusalPolicy ) -> RefusalManifest: if baseline.baseline_refusal_rate <= 0: # Cannot compute drift from zero baseline digest = cls._hash(json.dumps({ "baseline": "0.0", "current": f"{current.current_refusal_rate:.3f}" }, sort_keys=True)) return RefusalManifest( verdict=RefusalVerdict.REFUSAL_STABLE, drift_magnitude=0.0, directive="PROCEED: Baseline refusal rate is 0. Stable.", manifest_digest=digest ) drift = (current.current_refusal_rate - baseline.baseline_refusal_rate) / baseline.baseline_refusal_rate magnitude = abs(drift) # Gate 1: Drift within tolerance if magnitude <= policy.acceptable_drift_threshold: digest = cls._hash(json.dumps({ "baseline": f"{baseline.baseline_refusal_rate:.3f}", "current": f"{current.current_refusal_rate:.3f}", "drift": f"{drift:.3f}" }, sort_keys=True)) return RefusalManifest( verdict=RefusalVerdict.REFUSAL_STABLE, drift_magnitude=magnitude, directive=f"PROCEED: Refusal drift {magnitude:.2%} within tolerance.", manifest_digest=digest ) # Gate 2: More permissive if drift > 0: return RefusalManifest( verdict=RefusalVerdict.REFUSAL_MORE_PERMISSIVE, drift_magnitude=magnitude, directive=f"HALT: Model is {drift:.2%} more permissive. Re-validate safety assumptions.", manifest_digest=cls._hash(f"PERMISSIVE:{drift:.3f}") ) # Gate 3: More restrictive return RefusalManifest( verdict=RefusalVerdict.REFUSAL_MORE_RESTRICTIVE, drift_magnitude=magnitude, directive=f"HALT: Model is {magnitude:.2%} more restrictive. Re-validate task assumptions.", manifest_digest=cls._hash(f"RESTRICTIVE:{magnitude:.3f}") )