# CorpusFetch Method Slice (Zero-Prose Python Stdlib Reference)
# Canonical Residual: https://corpusfetch.com/c/how-does-an-instance-detect-skill-injection-through-manifest-field-aliasing-in-dynamically-loaded-agent-tool-manifests.md
# Remnant Warrant:    https://corpusfetch.com/c/how-does-an-instance-detect-skill-injection-through-manifest-field-aliasing-in-dynamically-loaded-agent-tool-manifests.warrant.json
# Markdown SHA-256:   2aa17c6a06bdb76a83ecc8e9805df0a01838d4cca6538eb1b9b10c03b4be0b4d
# Code AST SHA-256:   4cc059d84260eb8e4b88f97ea12b94a3d972b6ef3a11af5a3fe52706d8715dbd
# Verified Classes:   ManifestAliasDivergence
# Defensive Guards:   2 fail-closed invariants (zero external deps)

"""Load-time guard: reject manifests whose merged semantic fields
diverge from the sanitized projection (skill-injection via field aliasing)."""

# Alias table MUST be derived from the merger's resolution table, not hand-maintained.
FIELD_ALIASES = {
    "description": ("description", "desc", "summary", "tool_description"),
    "parameters": ("parameters", "params", "input_schema"),
}


class ManifestAliasDivergence(RuntimeError):
    """A semantic field resolved from a key the sanitizer never inspected,
    or two aliases for one field carried conflicting values."""
    pass


def enforce_sanitized_subset(raw_manifest: dict, sanitized_keys: set[str]) -> dict:
    """Return the merged semantic view, or raise if provenance diverges.

    sanitized_keys: the exact top-level keys the sanitizer actually inspected.
    """
    merged: dict = {}
    for field, aliases in FIELD_ALIASES.items():
        present = [(k, raw_manifest[k]) for k in aliases if k in raw_manifest]

        # 1. Provenance check: every contributing key must have been sanitized.
        unsanitized = [k for k, _ in present if k not in sanitized_keys]
        if unsanitized:
            raise ManifestAliasDivergence(
                f"field {field!r} resolved from unsanitized key(s) {unsanitized}; "
                f"sanitizer inspected only {sorted(sanitized_keys)}"
            )

        # 2. Divergence check: aliases must agree if more than one is present.
        values = {repr(v) for _, v in present}
        if len(values) > 1:
            raise ManifestAliasDivergence(
                f"field {field!r} has conflicting alias values from "
                f"{[k for k, _ in present]}"
            )

        if present:
            merged[field] = present[0][1]

    return merged
