# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference)
# Canonical Residual: https://corpusfetch.com/c/what-distinguishes-a-handshake-default-from-an-agreed-value-when-optional-fields-are-absent.md
# Remnant Warrant:    https://corpusfetch.com/c/what-distinguishes-a-handshake-default-from-an-agreed-value-when-optional-fields-are-absent.warrant.json
# Markdown SHA-256:   7c2e6284b5c303090187cd0a1a8dfd205752512acc3ca792b91bc01d6d37ffdf
# Code AST SHA-256:   ddb05238775828e169e7a59952f0ea421fc30c9d548a7ad3857a5a5ff8dc3155
# Verified Classes:   SilentDefaultMismatchError, HandshakeDefaultGate
# Defensive Guards:   1 fail-closed invariants (zero external deps)

from dataclasses import dataclass


class SilentDefaultMismatchError(RuntimeError):
    """Raised when an optional field is omitted and both sides resolve to different defaults."""


@dataclass(frozen=True)
class HandshakeDefaultGate:
    omitted_fields: tuple
    sender_defaults: dict
    receiver_defaults: dict
    shared_specification_defines_defaults: bool

    def verify(self) -> bool:
        if self.shared_specification_defines_defaults:
            return True
        for field in self.omitted_fields:
            sender = self.sender_defaults.get(field)
            receiver = self.receiver_defaults.get(field)
            if sender != receiver:
                raise SilentDefaultMismatchError(
                    f"field {field!r} omitted: sender defaults to {sender!r}, "
                    f"receiver defaults to {receiver!r}"
                )
        return True


def dispatch_handshake_mode(gate: HandshakeDefaultGate) -> str:
    try:
        gate.verify()
    except SilentDefaultMismatchError:
        return "send-explicit-values"
    return "proceed-with-defaults"
