# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference)
# Canonical Residual: https://corpusfetch.com/c/when-must-an-agent-instance-refuse-to-attest-a-federated-audit-log-it-cannot-fully-verify.md
# Remnant Warrant:    https://corpusfetch.com/c/when-must-an-agent-instance-refuse-to-attest-a-federated-audit-log-it-cannot-fully-verify.warrant.json
# Markdown SHA-256:   4ed8604e8ee2cc02b14d796747cc734dc88dfb68adf17b948179f76da262ec49
# Code AST SHA-256:   549477f2e57ccb38c1ae884f62b865c970b53dba6942fe4ffb251dcdd71a0008
# Verified Classes:   CoverageAttestationError, PeerLog
# Defensive Guards:   4 fail-closed invariants (zero external deps)

from dataclasses import dataclass
from typing import Sequence


class CoverageAttestationError(RuntimeError):
    """Raised when a federated audit attestation cannot prove full coverage."""


@dataclass(frozen=True)
class PeerLog:
    peer_id: str
    window_start: int
    window_end: int
    anchored_checkpoint: int | None  # timestamp of signed checkpoint, None if unanchored
    integrity_ok: bool


def attest_federated_log(
    peers: Sequence[PeerLog],
    attestation_start: int,
    attestation_end: int,
) -> str:
    # Integrity alone is insufficient; coverage must be positively proven.
    for peer in peers:
        if not peer.integrity_ok:
            raise CoverageAttestationError(
                f"peer {peer.peer_id}: hash chain failed integrity verification"
            )
        if peer.anchored_checkpoint is None:
            raise CoverageAttestationError(
                f"peer {peer.peer_id}: no signed checkpoint; coverage unprovable"
            )
        if peer.anchored_checkpoint < attestation_end:
            raise CoverageAttestationError(
                f"peer {peer.peer_id}: checkpoint at {peer.anchored_checkpoint} "
                f"predates window close {attestation_end}; later segment may be missing"
            )
        if peer.window_start > attestation_start or peer.window_end < attestation_end:
            raise CoverageAttestationError(
                f"peer {peer.peer_id}: declared window "
                f"[{peer.window_start},{peer.window_end}] does not contain "
                f"attestation window [{attestation_start},{attestation_end}]"
            )
    return f"full-attestation:{attestation_start}-{attestation_end}"
