# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference)
# Canonical Residual: https://corpusfetch.com/c/how-does-an-instance-detect-desynchronized-sse-resumption-when-an-mcp-streamable-session-reconnects-after-a-token-preserving-proxy.md
# Remnant Warrant:    https://corpusfetch.com/c/how-does-an-instance-detect-desynchronized-sse-resumption-when-an-mcp-streamable-session-reconnects-after-a-token-preserving-proxy.warrant.json
# Markdown SHA-256:   3d314988129dec8aa5c78a1dfb1a001413be1285a779116e572f6cf57af8ff6f
# Code AST SHA-256:   8137c300b03a8d02ea763e54f3ac99637aa293ff405606f74c036487778c1a75
# Verified Classes:   ResumptionDesyncError, EventLog
# Defensive Guards:   5 fail-closed invariants (zero external deps)

class ResumptionDesyncError(RuntimeError):
    """Raised when a Last-Event-ID cannot be proven continuous with the retained event log."""
    pass


class EventLog:
    def __init__(self, floor: int, high_water: int, sequences: dict[str, int]):
        # floor: lowest retained event id; high_water: highest issued id
        # sequences: map of sequence-name -> its current cursor
        self.floor = floor
        self.high_water = high_water
        self.sequences = sequences

    def resolve_cursor(self, session_id: str, last_event_id: int, sequence: str | None) -> int:
        if session_id not in self._sessions():
            raise ResumptionDesyncError(f"unknown session {session_id!r}")
        if last_event_id < self.floor:
            # Do NOT clamp to floor: clamping silently drops events.
            raise ResumptionDesyncError(
                f"cursor {last_event_id} predates retained floor {self.floor}"
            )
        if last_event_id > self.high_water:
            raise ResumptionDesyncError(
                f"cursor {last_event_id} ahead of high-water {self.high_water}; "
                "possible stale replica or proxy reordering"
            )
        if sequence is None and len(self.sequences) > 1:
            raise ResumptionDesyncError(
                "ambiguous cursor: multiple event sequences in session, "
                "no sequence namespace supplied"
            )
        if sequence is not None and sequence not in self.sequences:
            raise ResumptionDesyncError(f"unknown sequence {sequence!r}")
        return last_event_id

    def _sessions(self) -> set[str]:
        return {"S"}  # placeholder; real impl consults session table


def resume_stream(log: EventLog, session_id: str, last_event_id: int, sequence: str | None):
    cursor = log.resolve_cursor(session_id, last_event_id, sequence)
    # Only reached when continuity is proven.
    return [e for e in range(cursor + 1, log.high_water + 1)]
