# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference) # Canonical Residual: https://corpusfetch.com/c/how-must-an-instance-bound-information-loss-in-recursive-summarization.md # Remnant Warrant: https://corpusfetch.com/c/how-must-an-instance-bound-information-loss-in-recursive-summarization.warrant.json # Markdown SHA-256: f4320b89eb72cd32ae0a052877255622fcca8837bd6776edec31af30060199e4 # Code AST SHA-256: 3b1b266f43c618333ca706424f696e491608b5f6823b2a06d073206e7e2da0ba # Verified Classes: SummaryVerdict, SummaryChain, SummaryPolicy, SummaryManifest, RecursiveSummarizationGuard # Defensive Guards: 0 fail-closed invariants (zero external deps) from dataclasses import dataclass from enum import Enum, auto import hashlib import json class SummaryVerdict(Enum): SINGLE_PASS = auto() FIDELITY_BOUNDED = auto() FIDELITY_DEGRADED = auto() GENERATION_DEPTH_EXCEEDED = auto() @dataclass(frozen=True) class SummaryChain: chain_id: str original_content_hash: str current_summary_hash: str generation_depth: int semantic_fidelity: float # 0-1 vs original confidence_inflation: float # 0-1 is_single_pass: bool @dataclass(frozen=True) class SummaryPolicy: max_generation_depth: int min_semantic_fidelity: float max_confidence_inflation: float @dataclass(frozen=True) class SummaryManifest: verdict: SummaryVerdict directive: str manifest_digest: str class RecursiveSummarizationGuard: @staticmethod def _hash(data: str) -> str: return hashlib.sha256(data.encode("utf-8")).hexdigest() @classmethod def evaluate_chain( cls, chain: SummaryChain, policy: SummaryPolicy ) -> SummaryManifest: # Gate 1: Single pass if chain.is_single_pass or chain.generation_depth <= 1: digest = cls._hash(json.dumps({ "chain": chain.chain_id, "depth": str(chain.generation_depth) }, sort_keys=True)) return SummaryManifest( verdict=SummaryVerdict.SINGLE_PASS, directive=f"PROCEED: Single-pass summarization for {chain.chain_id}.", manifest_digest=digest ) # Gate 2: Generation depth if chain.generation_depth > policy.max_generation_depth: return SummaryManifest( verdict=SummaryVerdict.GENERATION_DEPTH_EXCEEDED, directive=f"HALT: Depth {chain.generation_depth} > {policy.max_generation_depth}, use original.", manifest_digest=cls._hash(f"DEPTH:{chain.chain_id}") ) # Gate 3: Semantic fidelity if chain.semantic_fidelity < policy.min_semantic_fidelity: return SummaryManifest( verdict=SummaryVerdict.FIDELITY_DEGRADED, directive=f"HALT: Fidelity {chain.semantic_fidelity:.2f} < {policy.min_semantic_fidelity:.2f}, use original.", manifest_digest=cls._hash(f"FIDELITY:{chain.chain_id}") ) # Gate 4: Confidence inflation if chain.confidence_inflation > policy.max_confidence_inflation: return SummaryManifest( verdict=SummaryVerdict.FIDELITY_DEGRADED, directive=f"HALT: Confidence inflation {chain.confidence_inflation:.2f} > {policy.max_confidence_inflation:.2f}.", manifest_digest=cls._hash(f"CONFIDENCE:{chain.chain_id}") ) # Gate 5: Bounded digest = cls._hash(json.dumps({ "chain": chain.chain_id, "depth": str(chain.generation_depth), "fidelity": f"{chain.semantic_fidelity:.3f}", "original": chain.original_content_hash }, sort_keys=True)) return SummaryManifest( verdict=SummaryVerdict.FIDELITY_BOUNDED, directive=f"PROCEED: Depth {chain.generation_depth} summary with fidelity {chain.semantic_fidelity:.2f}.", manifest_digest=digest )