Portable, non-authorizing contracts for agent blueprints and their environment-local deployment manifests.
The package is intentionally inert. Successful parsing, validation, canonicalization, digest verification, or signature verification will mean only that supplied bytes satisfy the supplied protocol inputs. Authorization, tenancy, live policy, effect ownership, and execution remain the consuming host's responsibility.
The facade delegates and never implements.
Summary
Functions
The artifact's canonical JCS bytes (the public contract's canonicalize row). Delegates to each artifact's own encoder; never re-canonicalizes non-canonical input (decode is the byte-verification surface).
Decode and fully verify a Blueprint artifact: canonical verify → registry
validation → portability scan → content-digest comparison. See
AgentBlueprintProtocol.Blueprint for the pipeline contract.
Decode and fully verify a Deployment Manifest: the same four-stage
pipeline under the 19-member table and the :deployment_content digest
domain. See AgentBlueprintProtocol.Deployment for the pipeline and
binding-surface contracts.
Decode and fully verify a Federation TaskEnvelope: canonical verify →
the 23-member registry walk → the federation portability pass. See
AgentBlueprintProtocol.Federation for the envelope contract, the
lossy-aware state codecs, and the carrier placement laws.
The 23-row field-by-field A2A/MCP Tasks mapping as data (the
published table with the transport flags lives at
docs/federation-mapping.md).
Intersect the three bound sources (Blueprint, Deployment host_bounds,
host policy) under the protected-clamp posture — the narrowest
intersection with deny-by-default protected clamps. See
AgentBlueprintProtocol.BoundsAlgebra for the direction law, the
marker-union rule, and the clamp evidence contract.
Negotiate an artifact against a consumer's support posture (the evolution gate):
the revision SET, the required-core-field checks, and the extension state
machine. In a STANDALONE pass this runs immediately after canonical
verification, before any semantic read; in the composed import
(reconcile/3) the digest stage runs between canonical and negotiation
— see AgentBlueprintProtocol.Reconcile for the pinned stage order.
The one call per import: the composed non-authorizing
pass — canonical → digest → negotiation → structure → portability →
signatures → bind → bounds, each stage reject-or-annotate, never
repair. The result is an %Evidence{} — never a decision. See
AgentBlueprintProtocol.Reconcile for the stage machinery and the
Reconcile.Inputs contract.
Verify the Deployment's manifest identities against the host's observed
build identities: identity-exact or error — ranges deny on both sides,
duplicates deny, unmatched manifest entries deny, extra observed
identities are evidence-neutral. The result is an %Evidence{} naming
the seven host-owned surfaces in not_verified. See
AgentBlueprintProtocol.Compatibility.
Types
@type failure() :: {:error, term()}
Functions
@spec canonical_bytes( AgentBlueprintProtocol.Blueprint.t() | AgentBlueprintProtocol.Deployment.t() | AgentBlueprintProtocol.Federation.t() ) :: {:ok, binary()} | failure()
The artifact's canonical JCS bytes (the public contract's canonicalize row). Delegates to each artifact's own encoder; never re-canonicalizes non-canonical input (decode is the byte-verification surface).
@spec decode_blueprint(binary(), AgentBlueprintProtocol.Bounds.t() | map()) :: {:ok, AgentBlueprintProtocol.Blueprint.t()} | failure()
Decode and fully verify a Blueprint artifact: canonical verify → registry
validation → portability scan → content-digest comparison. See
AgentBlueprintProtocol.Blueprint for the pipeline contract.
@spec decode_deployment(binary(), AgentBlueprintProtocol.Bounds.t() | map()) :: {:ok, AgentBlueprintProtocol.Deployment.t()} | failure()
Decode and fully verify a Deployment Manifest: the same four-stage
pipeline under the 19-member table and the :deployment_content digest
domain. See AgentBlueprintProtocol.Deployment for the pipeline and
binding-surface contracts.
@spec decode_federation_envelope(binary(), AgentBlueprintProtocol.Bounds.t() | map()) :: {:ok, AgentBlueprintProtocol.Federation.t()} | failure()
Decode and fully verify a Federation TaskEnvelope: canonical verify →
the 23-member registry walk → the federation portability pass. See
AgentBlueprintProtocol.Federation for the envelope contract, the
lossy-aware state codecs, and the carrier placement laws.
@spec federation_mapping() :: [AgentBlueprintProtocol.Federation.Mapping.Row.t()]
The 23-row field-by-field A2A/MCP Tasks mapping as data (the
published table with the transport flags lives at
docs/federation-mapping.md).
@spec intersect(AgentBlueprintProtocol.BoundsAlgebra.Sources.t()) :: {:ok, AgentBlueprintProtocol.BoundsAlgebra.Result.t()} | failure()
Intersect the three bound sources (Blueprint, Deployment host_bounds,
host policy) under the protected-clamp posture — the narrowest
intersection with deny-by-default protected clamps. See
AgentBlueprintProtocol.BoundsAlgebra for the direction law, the
marker-union rule, and the clamp evidence contract.
@spec negotiate( AgentBlueprintProtocol.Blueprint.t() | term(), AgentBlueprintProtocol.Negotiation.Support.t() ) :: {:ok, AgentBlueprintProtocol.Negotiation.Outcome.t()} | failure()
Negotiate an artifact against a consumer's support posture (the evolution gate):
the revision SET, the required-core-field checks, and the extension state
machine. In a STANDALONE pass this runs immediately after canonical
verification, before any semantic read; in the composed import
(reconcile/3) the digest stage runs between canonical and negotiation
— see AgentBlueprintProtocol.Reconcile for the pinned stage order.
@spec reconcile( AgentBlueprintProtocol.Blueprint.t(), AgentBlueprintProtocol.Deployment.t(), AgentBlueprintProtocol.Reconcile.Inputs.t() ) :: {:ok, AgentBlueprintProtocol.Evidence.t()} | failure()
The one call per import: the composed non-authorizing
pass — canonical → digest → negotiation → structure → portability →
signatures → bind → bounds, each stage reject-or-annotate, never
repair. The result is an %Evidence{} — never a decision. See
AgentBlueprintProtocol.Reconcile for the stage machinery and the
Reconcile.Inputs contract.
@spec verify_compatibility( AgentBlueprintProtocol.Deployment.t(), AgentBlueprintProtocol.Compatibility.Observed.t() ) :: {:ok, AgentBlueprintProtocol.Evidence.t()} | failure()
Verify the Deployment's manifest identities against the host's observed
build identities: identity-exact or error — ranges deny on both sides,
duplicates deny, unmatched manifest entries deny, extra observed
identities are evidence-neutral. The result is an %Evidence{} naming
the seven host-owned surfaces in not_verified. See
AgentBlueprintProtocol.Compatibility.