The compatibility surface : identity-exact or
error. A manifest identity — one build_identities member entry — is
matched only by an observed identity carrying the EXACT
(kind, name, version, digest) tuple. Version ranges deny
:compatibility_identity_inexact on BOTH sides (a range is malformed,
never silently unmatchable — the manifest side is decode-checked through
the registry table; verify/2 re-asserts it for struct-bypassed inputs,
the structural-bypass rim lesson, and checks the host-built observed side, which
never passes a decoder).
A manifest identity with no exact observed counterpart denies
:compatibility_entry_missing. Two observed candidates for one
manifest identity — including byte-identical duplicates, a repeated
observation is the defect, not a dedup case — deny
:compatibility_duplicate_entry; so does a duplicated name in a
struct-bypassed manifest (decode denies it through unique_by).
Observed identities the manifest does not name are evidence-neutral:
the host's wider surface is not this manifest's concern, and no check
entry or denial exists for them.
Subjects are schema-derived paths (["build_identities", i] for
manifest entries, ["identities", i] for observed ones) — never input
values.
Compatibility verification reports identity facts; it never authorizes execution.
Summary
Functions
true when the identity's version is an exact spelling — false for
any range expression (*, latest, x/X segments, comparator or
tilde vocabulary, charset violations). Total over junk input: any
non-conforming shape answers false, never raises. This is the public
binary-level predicate; the decode-side registry check applies the same
rule to manifest entries (their agreement is pinned by test).
Verify every manifest identity against the observed identities:
identity-exact matching, one %{surface: :compatibility} check per
manifest identity (detail = the matched observed Digest), the seven
host-owned atoms in not_verified. Denies per the moduledoc; every
malformed input shape denies typed.
Functions
true when the identity's version is an exact spelling — false for
any range expression (*, latest, x/X segments, comparator or
tilde vocabulary, charset violations). Total over junk input: any
non-conforming shape answers false, never raises. This is the public
binary-level predicate; the decode-side registry check applies the same
rule to manifest entries (their agreement is pinned by test).
@spec verify( AgentBlueprintProtocol.Deployment.t(), AgentBlueprintProtocol.Compatibility.Observed.t() ) :: {:ok, AgentBlueprintProtocol.Evidence.t()} | {:error, AgentBlueprintProtocol.Error.t()}
Verify every manifest identity against the observed identities:
identity-exact matching, one %{surface: :compatibility} check per
manifest identity (detail = the matched observed Digest), the seven
host-owned atoms in not_verified. Denies per the moduledoc; every
malformed input shape denies typed.