<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.6) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-kondoju-evc-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="External Verifier Contract">An External Verifier Contract for Agent Authorization Decisions</title>

    <author initials="V. P." surname="Kondoju" fullname="Viswanadha Pratap Kondoju">
      <organization>Bolyra</organization>
      <address>
        <email>viswa@bolyra.ai</email>
      </address>
    </author>

    <date year="2026" month="July" day="21"/>

    <area>Security</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>agent</keyword> <keyword>authorization</keyword> <keyword>verifier</keyword> <keyword>zero-knowledge</keyword> <keyword>selective-disclosure</keyword>

    <abstract>


<?line 53?>

<t>This document specifies the External Verifier Contract (EVC): a small, testable,
proof-system-agnostic boundary between a host (the program about to take a
privileged action on an agent's behalf) and an external verifier (a subprocess
that renders an allow/deny verdict on an opaque proof bundle). The contract
governs only the transport and verdict envelope: how the host hands a single JSON
request to a verifier subprocess over stdin, how the verifier answers with exactly
one JSON verdict on stdout, and how the host interprets exit codes, timeouts, and
malformed output under a fail-closed rule. Three properties make the boundary
standardizable: (1) a single-shot subprocess transport with a closed JSON verdict
schema; (2) fail-closed host semantics that are independently testable by a
host-conformance suite; and (3) proof-system agnosticism, so the same envelope
carries classical-signature, zero-knowledge, and third-party verdicts,
distinguished only by an OPTIONAL self-description field. EVC is deliberately not a
governance framework, not a delegation model, and not a policy language. It is the
narrow decision boundary those larger systems all require at the point of
enforcement.</t>



    </abstract>



  </front>

  <middle>


<?line 72?>

<section anchor="introduction"><name>Introduction</name>

<section anchor="problem"><name>Problem</name>

<t>Agent frameworks -- Model Context Protocol (MCP) hosts, orchestrators, and
gateways -- increasingly need to gate a privileged tool call on a single question:
is this agent actually authorized to take this action right now? Today each host
reimplements a bespoke check and couples itself to one proof format. There is no
interoperable, language-neutral boundary at which a host can ask an external
verifier -- one the host did not build -- for a decision.</t>

</section>
<section anchor="what-evc-standardizes"><name>What EVC Standardizes</name>

<t>EVC standardizes the transport and verdict envelope only. Specifically: how the
host hands a request to a verifier subprocess (one JSON object on stdin, then EOF),
how the verifier answers (exactly one JSON verdict on stdout), how exit codes and
timeouts are interpreted, and the fail-closed obligations that bind the host. The
proof bundle itself is opaque to the host: only a verifier vendor needs to
understand its internal structure. A host adopts the contract by learning four
steps (Section 3), not a proof format.</t>

</section>
<section anchor="what-evc-deliberately-excludes"><name>What EVC Deliberately Excludes</name>

<t>EVC does not define credential issuance, the internal proof format, policy
authoring, delegation semantics, revocation infrastructure, or any PKI. These
belong to the verifier vendor or to adjacent specifications. Keeping the boundary
this small is the design thesis: it is what makes the contract testable rather
than aspirational. Every normative obligation in this document is placed either on
the host or on a conforming verifier at the wire boundary, and nothing below it.</t>

</section>
<section anchor="why-interoperable-why-now"><name>Why Interoperable, Why Now</name>

<t>The contract is not tied to one runtime. Two independent reference hosts already
exist -- one in JavaScript ("spec/reference-host.js") and one in Rust
("spec/reference-host-rs/") -- demonstrating that the host obligations can be
implemented and tested in more than one language. The maintainer of a separate
MCP project (mcp_agent_mail_rust) built an off-by-default Ed25519
registration-proof gate designed to this contract's v1 boundary (issue #183
defines the corresponding spawnable-verifier slot shape); that gate exercises
the contract's request/verdict surface without depending on any Bolyra
component. The host obligations are mechanically testable by a conformance
suite (Section 8), so a host's fail-closed behavior is a checkable property
rather than an assertion. See also the Implementation Status section
(<xref target="impl-status"/>).</t>

</section>
<section anchor="positioning-versus-online-introspection-non-normative"><name>Positioning Versus Online Introspection (Non-Normative)</name>

<t>A verdict is produced offline from a self-contained bundle plus host-supplied
context and the host's wall-clock; there is no round-trip to an authorization
server. This is a deliberate contrast with, not a competitor to, OAuth 2.0 token
introspection <xref target="RFC7662"/>, which resolves a token's state through an online request
to an introspection endpoint. EVC and online introspection can coexist: a bundle
can carry a token that a classical-class verifier (Section 5) validates by
whatever means it chooses, including an out-of-band introspection call, but the
host↔verifier decision boundary itself is a single local subprocess exchange.</t>

</section>
</section>
<section anchor="conventions-and-requirements-language"><name>Conventions and Requirements Language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when,
and only when, they appear in all capitals, as shown here.</t>

<t>The wire representations in this document are JSON <xref target="RFC8259"/>.</t>

<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>host:</dt>
  <dd>
    <t>The program about to take a privileged action on an agent's behalf. The host
spawns the verifier, supplies the request, and enforces the verdict fail-closed.</t>
  </dd>
  <dt>verifier:</dt>
  <dd>
    <t>A program the host spawns as a subprocess to decide whether a bundle authorizes a
privileged action. It reads one request on stdin and writes one verdict on
stdout.</t>
  </dd>
  <dt>bundle:</dt>
  <dd>
    <t>An opaque proof string carried in the request. It is opaque to the host: the host
MUST NOT inspect, rewrite, or normalize it. Only a verifier vendor understands its
internal structure.</t>
  </dd>
  <dt>verdict:</dt>
  <dd>
    <t>The single JSON object the verifier writes to stdout: an allow, an allow with
host-owned nonce consumption, or a deny with a code and message.</t>
  </dd>
  <dt>request:</dt>
  <dd>
    <t>The single JSON object the host writes to the verifier's stdin, describing the
privileged action it is about to authorize.</t>
  </dd>
  <dt>decision:</dt>
  <dd>
    <t>The host's enforced outcome (proceed or reject) after applying the verdict and all
fail-closed obligations.</t>
  </dd>
  <dt>proof-system class:</dt>
  <dd>
    <t>The cryptographic family a verifier implements, one of "classical", "zk", or
"external" (Section 5). Self-described by the OPTIONAL verdict field "kind".</t>
  </dd>
  <dt>host nonce mode / local nonce mode:</dt>
  <dd>
    <t>The two replay-protection modes (Section 7). In local mode the verifier owns the
durable nonce store; in host mode the verifier returns nonces for the host to
reserve.</t>
  </dd>
  <dt>reserve-before-act:</dt>
  <dd>
    <t>The host obligation, in host nonce mode, to durably reserve every returned nonce
with unique-insert semantics before performing the privileged action (Section 7).</t>
  </dd>
  <dt>Host-Under-Test (HUT):</dt>
  <dd>
    <t>A host driven by the conformance runner through the environment convention of
Section 8, so hosts in any language can be tested against the same fixtures.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="architecture-and-trust-model"><name>Architecture and Trust Model</name>

<t>The host↔verifier boundary is a single-shot subprocess protocol of four steps:</t>

<t><list style="numbers" type="1">
  <t>The host spawns the verifier command.</t>
  <t>The host writes exactly one JSON request object to the verifier's stdin, then
closes (EOF) stdin.</t>
  <t>The verifier writes exactly one JSON verdict object to its stdout and exits.</t>
  <t>The host reads that one verdict and enforces it fail-closed (Section 6).</t>
</list></t>

<t>Language-neutral pseudocode for the host side:</t>

<figure><artwork><![CDATA[
child   = spawn(verifier_cmd, timeout = 10_000ms)
write(child.stdin, json(request)); close(child.stdin)
status, out, err = wait(child)                 // out = stdout, err = stderr

if status != 0:                               reject("non-zero exit")   // Sec 6
if timed_out(child):                          reject("timeout")         // Sec 6
verdict = parse_single_json_object(out)        // Sec 4; on any failure -> reject
if verdict is null:                            reject("unparseable stdout")

switch verdict.verdict:
  case "allow":
    for entry in (verdict.consume_nonces or []):        // Sec 7 host mode
      if not reserve_nonce_atomically(entry): reject("replay")   // reserve ALL
    proceed()
  case "deny":
    reject(verdict.code)                        // branch on Sec 4.2 registry
  default:
    reject("unknown verdict")
]]></artwork></figure>

<t>The contract is host-agnostic and language-agnostic: a host in any ecosystem MAY
implement or consume the contract without depending on any verifier's internals.</t>

<section anchor="trust-boundaries"><name>Trust Boundaries</name>

<t>The host trusts exactly two things: (a) the verifier command it configured -- which
binary and argument vector it spawned -- and (b) the trust configuration it supplied
to that verifier, such as trusted roots, a capability map, or a signer list. The
host does NOT trust the bundle, and it MUST NOT infer trust from any self-reported
field in the verdict, notably the "kind" self-description (Section 5).</t>

<t>The verifier trusts its configured roots and policy. "No roots configured" is never
"all roots trusted": a verifier that has no trust source configured MUST fail
closed rather than accept anything.</t>

</section>
<section anchor="time-source"><name>Time Source</name>

<t>The host owns the clock. The request field "now_unix" is host-supplied, and the
verifier MUST evaluate credential expiry against that value rather than its own
clock. This is an explicit trust-model property: expiry is judged against the
host's wall-clock, so the host, not the verifier, is authoritative about the
current time.</t>

</section>
</section>
<section anchor="request-and-verdict-envelopes"><name>Request and Verdict Envelopes</name>

<t>This section transcribes the wire envelopes. The full JSON Schemas appear
normatively in <xref target="schemas"/>.</t>

<section anchor="request"><name>Host to Verifier Request (stdin)</name>

<t>The host MUST write exactly one JSON object, UTF-8 encoded, to the verifier's
stdin, and then MUST close (EOF) stdin. The host MUST NOT write more than one
object, trailing bytes, or a stream of objects.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "version": 1,
  "bundle": "<opaque proof string>",
  "request": {
    "agent_name": "research-bot",
    "project_key": "/work/acme/research",
    "program": "crewai",
    "model": "opus-4.1",
    "granted_capabilities": ["fetch_inbox", "send_message"]
  },
  "now_unix": 1751990400
}
]]></sourcecode></figure>

<t>Field requirements:</t>

<t><list style="symbols">
  <t>"version" (integer, REQUIRED) -- envelope version of the host request. A verifier
that implements this contract MUST support "1" and MUST reject any other value
with "deny code=unsupported_version" (Section 4.2). Negotiation is by major only
(Section 10).</t>
  <t>"bundle" (string, REQUIRED, non-empty) -- opaque to the host. The verifier owns
its internal structure. The host MUST NOT inspect, rewrite, or normalize it.</t>
  <t>"request" (object, REQUIRED) -- the privileged action the host is about to
authorize. It MUST contain:
  <list style="symbols">
      <t>"agent_name" (string, REQUIRED).</t>
      <t>"project_key" (string, REQUIRED) -- compared literally, byte-for-byte, against
the bundle's signed binding. The verifier MUST NOT apply path canonicalization
(no ".." resolution, no symlink resolution): "a/../b" and "b" are distinct
keys. This byte-literal rule is a subtle interoperability hazard and is stated
explicitly to prevent a verifier from silently normalizing a project key.</t>
      <t>"program" (string, REQUIRED).</t>
      <t>"model" (string, REQUIRED).</t>
      <t>"granted_capabilities" (array of strings, REQUIRED) -- host-defined capability
tokens the host intends to grant. They are opaque strings that the verifier
maps to its internal permission model. An empty array is permitted.</t>
    </list></t>
  <t>"now_unix" (integer, REQUIRED, positive) -- the host's current wall-clock time in
seconds since the Unix epoch. The verifier MUST evaluate credential expiry
against this value, not against its own clock.</t>
</list></t>

<t>A request that is not a JSON object, is missing a REQUIRED field, or has a field of
the wrong type MUST yield "deny code=malformed_input". A well-formed request whose
"version" is not "1" MUST yield "deny code=unsupported_version".</t>

</section>
<section anchor="verdict"><name>Verifier to Host Verdict (stdout)</name>

<t>The verifier MUST write exactly one JSON object to stdout and nothing else
(Section 4.3 governs this strictly). The verdict is one of three shapes.</t>

<section anchor="allow"><name>Allow</name>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "allow" }
]]></sourcecode></figure>

</section>
<section anchor="allow-with-host-owned-nonce-consumption"><name>Allow With Host-Owned Nonce Consumption</name>

<t>Emitted only in host nonce mode (Section 7). It instructs the host to durably
record each one-time nonce so the same proof cannot be replayed. A presentation can
carry more than one nonce to reserve -- for example the agent nullifier plus a
human-uniqueness nullifier when the bundle is human-backed (the human entry's
"nonce" is namespaced "human:NULLIFIER-HASH").</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "allow",
  "consume_nonces": [
    {
      "issuer_key": "15617329...:20201653...",
      "nonce": "12616665119450508255185458876855962314592339945640375882344193391684757282246",
      "retain_until": 4102444800
    }
  ]
}
]]></sourcecode></figure>

<t>"consume_nonces" (array of objects, OPTIONAL, allow-only). When present it is a
non-empty list (the key is omitted entirely when there is nothing to burn). The
host MUST reserve-before-act EACH entry (Section 7). Each entry:</t>

<t><list style="symbols">
  <t>"issuer_key" (string, REQUIRED) -- the issuer/operator key that scopes the nonce
namespace, for host bookkeeping only; the "nonce" is already globally unique
(Section 7).</t>
  <t>"nonce" (string, REQUIRED) -- the one-time value the host MUST record.</t>
  <t>"retain_until" (integer, REQUIRED) -- Unix seconds until which the host MUST
retain the consumed nonce.</t>
</list></t>

</section>
<section anchor="deny"><name>Deny</name>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "deny",
  "code": "scope_exceeded",
  "message": "required scope exceeds the credential effective scope",
  "detail": { "required_scope": "2", "effective_scope": "1", "excess_bits": "2" }
}
]]></sourcecode></figure>

<t><list style="symbols">
  <t>"verdict" (string, REQUIRED) -- "allow" or "deny".</t>
  <t>"code" (string, REQUIRED on deny) -- a stable machine token from the registry in
Section 4.2. The host MAY branch on it.</t>
  <t>"message" (string, REQUIRED on deny) -- a one-line, human-actionable reason. It
MUST NOT contain secrets.</t>
  <t>"detail" (object, OPTIONAL) -- structured context for logs/debugging. A verifier
SHOULD echo the originating internal error code here so the coarse wire "code"
stays stable while logs stay precise.</t>
  <t>"kind" (string, OPTIONAL) -- the verifier's proof-system self-description, one of
"classical", "zk", or "external" (Section 5). It MAY appear on either an "allow"
or a "deny" verdict. When absent, the host MUST interpret the verdict as "zk". A
verifier whose class is not "zk" MUST set "kind" explicitly, because omission is
read as "zk".</t>
</list></t>

</section>
</section>
<section anchor="denial-codes"><name>Denial-Code Registry</name>

<t>The stable, lowercase snake_case vocabulary for the verdict "code" field. This
table is the single normative source; hosts MAY branch on these tokens and MUST
treat an unrecognized future "code" as deny. Verifiers MUST NOT add, remove, or
rename a code without a wire-major version bump (Section 10). The registry is
proof-system-agnostic (Section 5): a "classical"- or "external"-kind verifier
reuses the same codes -- for example "invalid_proof" covers a failed classical
signature or token check as well as a failed zero-knowledge verification.</t>

<texttable>
      <ttcol align='left'>code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>malformed_input</c>
      <c>stdin missing / oversized (&gt; 1 MiB) / not JSON, or a required request field is missing or ill-typed.</c>
      <c>unsupported_version</c>
      <c>host request "version" is not "1", or the bundle's internal version is unsupported.</c>
      <c>invalid_bundle</c>
      <c>the opaque "bundle" is undecodable, not an object, or structurally wrong.</c>
      <c>invalid_proof</c>
      <c>envelope validation or proof verification failed, the mandatory verification-key pin is absent/mismatched, or the credential-to-proof anchoring failed.</c>
      <c>untrusted_root</c>
      <c>a proof's trust anchor (agent, human, or delegatee) is not in the configured trusted-root source.</c>
      <c>delegation_invalid</c>
      <c>a delegation chain break, hop-cap overflow, scope expansion, or expiry expansion.</c>
      <c>invalid_signature</c>
      <c>the request-binding signature (Appendix B) did not verify against the proven operator key.</c>
      <c>request_mismatch</c>
      <c>a host "request" field does not match the signed binding, or "granted_capabilities" are not covered by the binding's capabilities.</c>
      <c>model_mismatch</c>
      <c>the proof's committed model does not equal the requested model -- the proof is for a different model.</c>
      <c>unknown_capability</c>
      <c>a requested capability has no scope mapping (fail-closed; unmapped is never silently allowed).</c>
      <c>scope_exceeded</c>
      <c>the capability-required permission bits are not a cumulative-bit subset of the proven effective scope.</c>
      <c>expired</c>
      <c>proof-anchored "now_unix &gt;= effective_expiry" -- a strict comparison; the equality boundary is rejected.</c>
      <c>nonce_missing</c>
      <c>the proof lacks a usable nullifier / session-nonce signal.</c>
      <c>nonce_replayed</c>
      <c>the proof's one-time nonce was already seen (local mode).</c>
      <c>internal_error</c>
      <c>unexpected failure, missing artifacts, or missing trust configuration. Emitted as a deny AND with a non-zero exit code.</c>
</texttable>

<t>All rows are terminal denies. Only "internal_error" additionally sets a non-zero
exit code (Section 6). This 15-code table is the candidate IANA registry
(Section 13).</t>

</section>
<section anchor="fd-isolation"><name>stdout / stderr / fd-Level Isolation (Load-Bearing)</name>

<t>The whole contract depends on stdout carrying exactly one JSON object and nothing
else. This is the single most fragile part of the implementation and is normative
for both sides.</t>

<t>Verifier obligations:</t>

<t><list style="symbols">
  <t>The verifier MUST write exactly one serialized verdict to the host-facing stdout,
at the very end. A single trailing newline is OPTIONAL.</t>
  <t>No other code path may write to the host-facing stdout. Proof-verification
libraries (native, WASM, or otherwise) can write to file descriptor 1 directly --
progress bars, warnings, debug output -- bypassing any language-level stdout
wrapper. A "console.log"-style monkeypatch is therefore insufficient: it misses
native writes.</t>
  <t>A conforming verifier MUST separate verification from verdict-emission at the
file-descriptor level. The reference mechanism is process isolation with a private
verdict channel: the command spawns a worker whose stdio binds fd 0 = request in,
fd 1 = captured (everything native writes here), fd 2 = inherited parent stderr,
and fd 3 = the private verdict channel. Any raw fd-1 writes inside the worker MUST
be captured by the parent and forwarded to the parent's stderr, and MUST NOT reach
the host-facing stdout. The worker emits the single verdict only on fd 3; the
parent performs the sole write to fd 1.</t>
  <t>If the private verdict channel cannot be established on the platform, the verifier
MUST fail closed ("deny code=internal_error", non-zero exit). It MUST NOT silently
fall back to sharing fd 1. An in-process fd-redirect realization is equally
acceptable where the platform exposes the primitive; the process-isolation form is
the reference implementation and is strictly stronger.</t>
</list></t>

<t>Host obligations (single-object parse):</t>

<t>The host MUST parse the verifier's stdout as exactly one JSON object with no
trailing bytes, and MUST reject (treat as deny, Section 6) any of:</t>

<t><list style="symbols">
  <t>stdout that is empty, not valid JSON, or contains a leading/trailing prefix or
suffix around the object;</t>
  <t>multiple concatenated JSON values (a lenient parser that reads only the first
object MUST NOT be used -- two objects is a fail-closed condition);</t>
  <t>a verdict whose "verdict" field is neither "allow" nor "deny", or a "deny" missing
"code"/"message".</t>
</list></t>

<t>All diagnostics, timing, and debug logging MUST go to stderr. Hosts MUST NOT parse
stderr for the verdict.</t>

</section>
</section>
<section anchor="kind"><name>Proof-System Classes and the <spanx style="verb">kind</spanx> Self-Description</name>

<t>Because the contract is proof-system-agnostic (Section 1), the same wire envelope
carries verdicts from verifiers built on different cryptographic foundations: a
classical-signature verifier, a zero-knowledge verifier, and a third-party verifier
all speak the identical request and verdict schema and differ only in which command
the host spawns. This is the property that lets a host adopt privacy-preserving
verification without changing its wire contract.</t>

<t>The OPTIONAL verdict field "kind" lets a verifier declare which class it implements,
so a host that spawns a verifier it did not build -- or that fans a request across
several verifiers -- can record and, if it chooses, branch on the class of proof
that produced the decision. "kind" takes exactly one of three values:</t>

<texttable>
      <ttcol align='left'>kind</ttcol>
      <ttcol align='left'>Proof-system class</ttcol>
      <ttcol align='left'>Examples</ttcol>
      <c>classical</c>
      <c>Classical public-key crypto -- signatures, tokens, policy/nonce checks, no zero-knowledge.</c>
      <c>ES256K-signed receipts, JWT delegation tokens, capability/scope and replay-nonce checks.</c>
      <c>zk</c>
      <c>Zero-knowledge circuit proofs.</c>
      <c>Zero-knowledge proofs for private delegation, credential predicates, human-uniqueness nullifiers.</c>
      <c>external</c>
      <c>A third-party verifier implementing this contract with its own proof system.</c>
      <c>A vendor verifier the host adopts without depending on any specific internals.</c>
</texttable>

<section anchor="selective-disclosure-as-a-first-class-optional-lane"><name>Selective Disclosure as a First-Class, Optional Lane</name>

<t>A "zk"-class verifier proves properties of a credential -- scope, expiry, a
human-uniqueness nullifier, delegation narrowing -- without revealing the agent's
identity or the underlying attribute values. This selective-disclosure capability
is one that no signature-only contract can express, because a classical signature
necessarily discloses the signed content it authenticates.</t>

<t>The normative point is deliberately narrow: EVC does NOT require zero-knowledge
verification, but it reserves a first-class lane for it via "kind=zk". A host that
wants privacy-preserving verification and a host that wants a plain signature check
speak the identical wire protocol and differ only in which verifier command they
spawn. The privacy property is a property of the verifier the host configures, not
of the wire contract.</t>

</section>
<section anchor="normative-rules-for-kind"><name>Normative Rules for <spanx style="verb">kind</spanx></name>

<t><list style="symbols">
  <t>A verifier SHOULD set "kind" to the class it implements.</t>
  <t>A verifier that implements this contract as a "classical"- or "external"-class
verifier MUST set "kind" explicitly, because omission is read as "zk". A verifier
MUST NOT emit a "kind" value outside the three-member set above; a host MUST treat
an unrecognized "kind" as a malformed verdict and fail closed (Section 6).</t>
  <t>For backward compatibility, a verdict without "kind" MUST be interpreted by the
host as "zk". A "zk"-class verifier MAY therefore omit the field. Because a host
validating against the original closed verdict schema rejects any "kind"-bearing
verdict (Section 10), a "zk"-class verifier that must remain interoperable with
such a host SHOULD omit "kind" rather than emit "kind":"zk".</t>
</list></t>

</section>
<section anchor="guardrails-advisory-metadata-not-an-authorization-input"><name>Guardrails (Advisory Metadata, Not an Authorization Input)</name>

<t>"kind" is advisory metadata about provenance, and it is self-reported by the
verifier and NOT authenticated. The "verdict", "code", and (in host nonce mode)
"consume_nonces" fields are the sole enforcement surface. A host:</t>

<t><list style="symbols">
  <t>MUST NOT upgrade a "deny" to an "allow" on the basis of "kind";</t>
  <t>MUST NOT relax any Section 6 fail-closed obligation, schema validation, verifier
selection, or nonce handling on the basis of "kind";</t>
  <t>MUST establish a verifier's proof-system class from its configured verifier
identity or policy -- which command it spawned and the trust configuration it
supplied -- never from the self-reported "kind" string alone.</t>
</list></t>

<t>A host MAY use "kind" for logging, or to deny more strictly on a mismatch between
the expected and reported class. An unrecognized "kind" is a malformed verdict and
MUST fail closed (Section 6). The threat guarded against is a hostile or buggy
verifier claiming "kind=zk" to imply privacy guarantees it did not provide.</t>

</section>
<section anchor="relationship-to-the-related-aps-draft"><name>Relationship to the Related APS Draft</name>

<t>The related draft <xref target="I-D.pidlisnyi-aps"/> does not define a zero-knowledge or
selective-disclosure verifier class (Section 12.2). EVC's "kind" lane is where
privacy-preserving verification plugs into an otherwise-identical host contract,
regardless of which framework produced the bundle.</t>

</section>
</section>
<section anchor="exit-codes-timeouts-and-host-fail-closed-obligations"><name>Exit Codes, Timeouts, and Host Fail-Closed Obligations</name>

<section anchor="exit-code-semantics-verifier"><name>Exit-Code Semantics (Verifier)</name>

<t><list style="symbols">
  <t>Exit "0" -- a verdict object was produced ("allow" or any policy/crypto "deny").
The host reads stdout for the decision.</t>
  <t>Exit non-zero -- the verifier could not produce a trustworthy verdict at all
(could not read stdin, could not load required artifacts or trust configuration,
catastrophic internal failure). Decision-level outcomes (invalid proof, expired,
replay, mismatch) are NOT errors: they exit "0" with "verdict=deny".</t>
  <t>The one nuance: "internal_error" is emitted as "deny code=internal_error" AND
exits non-zero, so the host both sees a machine reason and fail-closes.</t>
</list></t>

</section>
<section anchor="exit-status-dominates-a-stdout-allow"><name>Exit Status Dominates a stdout Allow</name>

<t>A host MUST treat a non-zero exit as deny even when a syntactically valid "allow"
was written to stdout. Exit status is part of the contract; whenever it is non-zero
the host MUST ignore stdout for the purpose of the decision. This is the one place
an implementer may be tempted to trust stdout, and it is stated explicitly to close
that temptation. No non-zero exit -- including "internal_error" -- ever yields an
allow.</t>

</section>
<section anchor="timeout-and-input-bounds"><name>Timeout and Input Bounds</name>

<t>The host owns the timeout; the verifier does not implement its own. The host MUST
enforce a wall-clock timeout on the spawned process and treat expiry as deny. The
RECOMMENDED timeout is 10 000 ms (10 s); a conforming verifier targets under 2 s at
the 99th percentile, so 10 s leaves ample headroom. The verifier MUST bound the
request read from stdin; the reference limit is 1 MiB (1 048 576 bytes). A request
over the bound MUST yield "deny code=malformed_input"; the verifier MUST NOT buffer
an unbounded request.</t>

</section>
<section anchor="the-fail-closed-set"><name>The Fail-Closed Set</name>

<t>The host MUST treat ALL of the following as deny, regardless of what (if anything)
reached stdout:</t>

<t><list style="symbols">
  <t>non-zero exit code;</t>
  <t>timeout -- the host MUST kill the process and deny;</t>
  <t>death by signal / crash;</t>
  <t>unparseable, empty, oversized, or multi-object stdout (Section 4.3);</t>
  <t>an unknown "verdict" value or a "deny" missing required fields;</t>
  <t>a verdict that otherwise fails the verdict schema (<xref target="schemas"/>) -- including an
unrecognized "kind" value or any disallowed additional property.</t>
</list></t>

<t>The verifier is designed so these are the only ways it fails ambiguously; every
outcome it can reason about is an explicit "deny" with a "code" (Section 4.2).</t>

</section>
</section>
<section anchor="replay-protection-and-reserve-before-act"><name>Replay Protection and Reserve-Before-Act</name>

<t>A verifier supports one of two replay modes, selected by the host at spawn time.</t>

<t><list style="symbols">
  <t>local (default). The verifier owns durable replay state. On an otherwise-allow it
burns the proof's one-time nonce locally; a second presentation of the same proof
yields "deny code=nonce_replayed". Suitable for a single-host deployment. If the
store errors, the verifier MUST fail closed ("deny code=internal_error", non-zero
exit).</t>
  <t>host. The verifier does not persist nonces. On an otherwise-allow it returns
"consume_nonces" (Section 4.2), one entry per one-time nullifier the presentation
carries (the agent nullifier, plus the human-uniqueness nullifier for a
human-backed bundle), and the host owns durable storage under the
reserve-before-act rule. This is the mode for multi-host or clustered deployments
where the host already owns a database.</t>
</list></t>

<t>The agent nonce value is globally unique per (credential, session-nonce), so no
separate operator namespacing is needed; "consume_nonces[].issuer_key" is provided
for host-side bookkeeping only. Delegation hops add no entry: each per-hop
delegation nullifier is bound to the agent's session nonce, so reserving the agent
nullifier already covers delegation replay. The human-uniqueness nullifier for a
human-backed bundle is carried as a second reserved entry, namespaced
"human:NULLIFIER-HASH".</t>

<section anchor="reserve-before-act-host-nonce-mode"><name>Reserve-Before-Act (Host Nonce Mode)</name>

<t>When the host runs the verifier in host nonce mode and receives "allow" with
"consume_nonces", the host MUST reserve every entry in the list before performing
the privileged action:</t>

<t><list style="numbers" type="1">
  <t>For each entry in "consume_nonces", atomically insert "entry.nonce" into durable
storage with a unique-insert / "on conflict reject" semantic, retaining it until
"entry.retain_until".</t>
  <t>If all inserts are novel, proceed with the action.</t>
  <t>If any insert conflicts (that nonce was already recorded), the host MUST reject
the action as a replay -- even though the verifier returned "allow".</t>
</list></t>

<t>"Record after proceeding" is a replay window and is FORBIDDEN. The verifier's
"allow" in host mode is conditional on every host insert being novel.</t>

</section>
</section>
<section anchor="conformance"><name>Host Conformance</name>

<t>The differentiator between this contract and a governance framework is that the
host obligations are mechanically testable. Sections 4, 6, and 7 place the
load-bearing obligations on the host: it owns the timeout, the single-object stdout
parse, the exit-code interpretation, and reserve-before-act nonce consumption. A
verifier that follows the contract is not enough -- a host that trusts a
misbehaving verifier is the actual vulnerability. This section makes those host
obligations testable.</t>

<t>The suite spawns a deliberately misbehaving verifier fixture in place of a real
verifier and asserts that the host-under-test fails closed. A conforming host MUST
deny in every non-positive case below.</t>

<section anchor="misbehaving-verifier-fixtures"><name>Misbehaving-Verifier Fixtures</name>

<t>The fixtures are small, dependency-free scripts, each violating exactly one contract
obligation. The "Required host outcome" column is the normative behavior a
conforming host MUST produce; the "Class" column is the reference host's canonical
failure classification (Section 8.3). The inventory below is 26 fixtures that drive
27 "host_behavior" vectors, confirmed in "spec/test-vectors.json": the
"allow-consume-nonces.js" fixture drives two vectors (a novel-reserve allow and a
replay deny), so the fixture count is one fewer than the vector count.</t>

<texttable>
      <ttcol align='left'>Fixture</ttcol>
      <ttcol align='left'>Violates</ttcol>
      <ttcol align='left'>Required host outcome</ttcol>
      <ttcol align='left'>Class</ttcol>
      <c>well-behaved-allow</c>
      <c>-- (positive control)</c>
      <c>relay allow</c>
      <c>--</c>
      <c>well-behaved-deny</c>
      <c>-- (positive control)</c>
      <c>relay deny code=expired</c>
      <c>--</c>
      <c>well-behaved-allow-kind-classical</c>
      <c>-- (positive control, "kind")</c>
      <c>relay allow</c>
      <c>--</c>
      <c>well-behaved-allow-kind-external</c>
      <c>-- (positive control, "kind")</c>
      <c>relay allow</c>
      <c>--</c>
      <c>non-json-stdout</c>
      <c>stdout not valid JSON</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>multiple-objects</c>
      <c>two concatenated verdicts</c>
      <c>deny</c>
      <c>multiple_objects | unparseable_stdout</c>
      <c>schema-invalid-verdict</c>
      <c>"verdict" neither allow nor deny</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>deny-missing-fields</c>
      <c>"deny" missing code/message</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>allow-trailing-garbage</c>
      <c>valid allow then trailing bytes</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>binary-garbage-stdout</c>
      <c>raw non-UTF-8 bytes on stdout</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>leading-garbage</c>
      <c>non-JSON prefix before a valid allow</c>
      <c>deny</c>
      <c>unparseable_stdout</c>
      <c>allow-extra-property</c>
      <c>closed schema -- disallowed additional property</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>bad-kind</c>
      <c>"kind" outside classical/zk/external</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>empty-consume-nonces</c>
      <c>"consume_nonces" violates minItems:1</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>malformed-consume-nonce</c>
      <c>nonce entry missing issuer_key/retain_until</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>deny-extra-property</c>
      <c>closed "deny" -- disallowed additional property</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>nonce-entry-extra-property</c>
      <c>nonce entry has an extra property</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>nonce-entry-wrong-type</c>
      <c>nonce entry retain_until not an integer</c>
      <c>deny</c>
      <c>schema_invalid</c>
      <c>no-output-hang</c>
      <c>no output, never exits</c>
      <c>deny (kill on timeout)</c>
      <c>timeout</c>
      <c>partial-json-hang</c>
      <c>partial verdict then hangs</c>
      <c>deny (kill on timeout)</c>
      <c>timeout</c>
      <c>slow-allow-past-deadline</c>
      <c>valid allow, but only after the deadline</c>
      <c>deny (kill on timeout)</c>
      <c>timeout</c>
      <c>nonzero-exit-after-allow</c>
      <c>valid allow on stdout but non-zero exit</c>
      <c>deny (Section 6.2)</c>
      <c>nonzero_exit</c>
      <c>killed-by-signal</c>
      <c>death by signal, no verdict</c>
      <c>deny</c>
      <c>signal_death | unparseable_stdout</c>
      <c>oversize-flood</c>
      <c>floods stdout past the output bound</c>
      <c>deny (bound + kill)</c>
      <c>oversize_stdout</c>
      <c>allow-consume-nonces</c>
      <c>-- (drives reserve-before-act)</c>
      <c>reserve then allow, or deny on replay</c>
      <c>replay on conflict</c>
      <c>allow-consume-nonces-multi</c>
      <c>-- (drives reserve-all)</c>
      <c>deny if any entry conflicts</c>
      <c>replay on conflict</c>
</texttable>

<t>The "schema_invalid" fixtures collectively exercise the closed verdict schema at
every level: an unknown "verdict", a "deny" missing "code"/"message", additional
properties on both the "allow" and "deny" objects, a bad "kind", and -- for
"consume_nonces" -- an empty array, a missing required entry field, an extra entry
property, and a wrong-typed entry field. A host that validates only the outer
object, or only a subset of the nonce-entry schema, is therefore caught.</t>

</section>
<section anchor="host-under-test-hut-convention"><name>Host-Under-Test (HUT) Convention</name>

<t>The runner drives any host through a thin, language-neutral convention so a host in
any ecosystem can be tested against the same fixtures. The runner spawns the host
once per vector and communicates as follows.</t>

<t>Environment -- the runner sets, and the host MUST honor:</t>

<t><list style="symbols">
  <t>"HUT_VERIFIER_CMD" -- a JSON array (argv) the host MUST spawn as its verifier. The
host MUST NOT substitute a different command.</t>
  <t>"HUT_TIMEOUT_MS" -- the wall-clock timeout the host MUST enforce.</t>
  <t>"HUT_MAX_STDOUT_BYTES" -- the stdout output bound the host MUST enforce; exceeding
it is a fail-closed condition.</t>
  <t>"HUT_NONCE_MODE" -- "local" or "host".</t>
  <t>"HUT_NONCE_STORE" -- a filesystem path the host uses as its durable nonce store in
host nonce mode. For the harness only, the store format is newline-delimited
decimal nonce strings, UTF-8. A production host with a different store tests
against this suite by pointing a thin test adapter at this file format; the format
is a test convention, not part of the wire contract.</t>
  <t>"HUT_ACTION_LOG" -- a filesystem path. The host MUST append a non-empty marker at
the moment it authorizes the action -- after every reservation succeeds and
immediately before returning "allow" -- and MUST NOT write on any deny. This is
the observable proxy for the "act" in reserve-before-act.</t>
  <t>"HUT_FIXTURE_PIDFILE" -- a filesystem path the host MUST propagate to the spawned
verifier so the kill-proof fixtures can record their PID; the runner then confirms
the host killed the verifier on timeout/oversize. For kill-proof vectors a missing
pidfile is itself a failure.</t>
</list></t>

<t>stdin -- the runner writes exactly one request object (Section 4.1) to the host's
stdin and closes it. The host forwards this to the verifier.</t>

<t>stdout -- the host MUST write exactly one decision object and exit "0". The
fail-closed signal is the decision object, NOT the host's own exit code; a host
that itself exits non-zero fails the convention. The decision is exactly one of
three closed shapes:</t>

<t><list style="symbols">
  <t>{"decision":"allow"} -- the verifier allowed (and, in host nonce mode, every nonce
was reserved as novel); no other key is permitted;</t>
  <t>{"decision":"deny","code":"CODE"} -- a schema-valid verifier "deny", relayed
unchanged; the host MUST NOT attach a "failure_class" to a genuine verifier deny;</t>
  <t>{"decision":"deny","failure_class":"CLASS"} -- the host itself fail-closed or
rejected a replay; it MUST NOT also carry a "code".</t>
</list></t>

<t>This decision envelope exists only for the conformance harness; it is NOT part of
the wire contract and imposes nothing on a production host's internal API.</t>

</section>
<section anchor="host-failure-classes"><name>Host Failure Classes</name>

<t>When a host fails closed, the runner asserts why, using the classification the host
reports in "decision.failure_class". This proves the host detected the specific
violation rather than denying by accident. The normative requirement is always
deny; the failure class is the finer-grained assertion.</t>

<texttable>
      <ttcol align='left'>failure_class</ttcol>
      <ttcol align='left'>Fail-closed condition</ttcol>
      <c>nonzero_exit</c>
      <c>verifier exited non-zero</c>
      <c>timeout</c>
      <c>host timeout fired; host killed the process</c>
      <c>signal_death</c>
      <c>verifier died by an unsolicited signal</c>
      <c>unparseable_stdout</c>
      <c>stdout empty, not JSON, or with trailing bytes</c>
      <c>multiple_objects</c>
      <c>stdout carried more than one JSON value</c>
      <c>oversize_stdout</c>
      <c>stdout exceeded the host output bound</c>
      <c>schema_invalid</c>
      <c>a parsed verdict failed the verdict schema</c>
      <c>replay</c>
      <c>a "consume_nonces" entry was already reserved</c>
      <c>spawn_error</c>
      <c>the host could not spawn or drive the verifier at all</c>
</texttable>

<t>Because several fail-closed conditions can co-occur for one input, a vector MAY
admit more than one acceptable class. For example, a verifier killed by a signal
both dies by signal and leaves stdout empty. Where a fixture triggers a single
unambiguous condition, the vector pins the single class: a host that denies but
misclassifies it (for example calling an unbounded flood "unparseable_stdout"
instead of enforcing the "oversize_stdout" bound) is flagged, because the
misclassification reveals a real gap.</t>

</section>
<section anchor="two-independent-reference-hosts-and-scope-limits"><name>Two Independent Reference Hosts and Scope Limits</name>

<t>Two independent reference hosts demonstrate portability: one in JavaScript
("spec/reference-host.js") and one in Rust ("spec/reference-host-rs/", producing an
"evc-reference-host" binary). Both pass the full suite; each is concrete interop
evidence that the host obligations are implementable and testable in more than one
language.</t>

<t>As a black-box harness the suite proves three things about reserve-before-act: the
reservation is durably written (novel case), authorization is gated on the durable
uniqueness check (replay case, the primary guarantee), and every entry is checked
(reserve-all case). It does NOT prove the fine-grained intra-allow-path ordering --
that within a single "allow" the durable write is committed strictly before the
action marker -- because distinguishing "reserve then act" from "act then reserve,
both before returning allow" would require fault injection, which a portable
black-box runner cannot induce. That crash-safety property remains a host
obligation (Section 7); this suite asserts the observable gate, not the write
barrier. Implementers SHOULD additionally cover the crash-window ordering with an
in-process test in their own codebase. Stating this limit openly is deliberate: it
scopes exactly what the conformance claim does and does not cover.</t>

</section>
</section>
<section anchor="wire-versioning"><name>Wire Versioning</name>

<t>Two version tokens live at different layers with deliberately different rules.</t>

<t>Wire-facing envelopes are integer-major. The host request "version" (Section 4.1)
and the internal bundle version are single integers, negotiated by major only. A
verifier supports a fixed set of wire majors; an unsupported major is
"deny code=unsupported_version". There is no minor/patch at the wire layer: any
breaking change to the request or verdict envelope increments the integer. The
denial-code registry (Section 4.2) is part of the wire contract and is therefore
also governed by the integer-major rule: adding, removing, or renaming a code is a
wire-major change. Embedded proofs carried inside the opaque bundle keep their own
semantic-version string and the verifier's existing major-only compatibility rule.</t>

<t>Additive OPTIONAL fields with a defined default do not bump the wire major. The
verdict "kind" field (Section 5) is OPTIONAL and its absence has a defined meaning
("zk"). Adding it is compatible in the two directions that occur in practice: (i) a
verifier that omits "kind" -- which includes every wire-1 verifier that predates
the field, all of them "zk"-class -- produces verdicts that both pre-revision and
revision-aware hosts accept; and (ii) a revision-aware host accepts those older
no-"kind" verdicts unchanged, reading them as "zk".</t>

<t>The one caveat, stated plainly: the verdict schema is closed
("additionalProperties: false"), so a host validating against the original schema
will reject any verdict that actually carries "kind" -- including a "zk" verifier's
explicit "kind":"zk". The compatibility guarantee is therefore precise rather than
absolute: omitted-"kind" verdicts interoperate in both directions, but any verdict
that emits "kind" requires a revision-aware host. This does not force a wire-major
bump, because the two classes of verifier that would emit "kind" are already paired
with revision-aware hosts: a "zk"-class verifier that must remain interoperable with
a strict pre-revision host SHOULD simply omit the field, and a "classical"- or
"external"-class verifier -- which MUST emit "kind" -- did not exist under the
original wire-1 contract and so is consumed only by revision-aware hosts. A field
that is REQUIRED, or whose omission would change how an existing verdict is
interpreted, would instead remain a wire-major change.</t>

</section>
<section anchor="relationship-to-receipt-signer-discovery"><name>Relationship to Receipt Signer Discovery</name>

<t>A sibling specification, Receipt Signer Discovery (RSD), defines a
".well-known/bolyra-signers.json" document (an RFC 8615 <xref target="RFC8615"/> well-known URI)
that lets a receipt verifier learn which ES256K signer address(es) to accept. It is
relevant to EVC because a "classical"-class verifier that checks signed receipts
MAY consume it to establish which signers it trusts.</t>

<t>RSD is not part of the EVC wire boundary, and a full treatment is out of scope for
this document. Three consumer rules from RSD are pulled into the Security
Considerations (Section 12) because they bear on a verifier's trust configuration:
a consumer MUST fetch over HTTPS, and plain "http://" MUST be rejected except for
loopback addresses (development); a consumer MUST NOT follow redirects; and a
consumer MUST treat any transport or schema failure as a verification failure,
never as "no signer restriction". A separate RSD Internet-Draft, including any
well-known-URI
registration, is deferred past this document (Section 13).</t>

</section>
<section anchor="relationship-to-other-work"><name>Relationship to Other Work</name>

<section anchor="draft-klrc-aiagent-auth-03-complementary"><name>draft-klrc-aiagent-auth-03 (Complementary)</name>

<t><xref target="I-D.klrc-aiagent-auth"/> ("AI Agent Authentication and Authorization",
draft-klrc-aiagent-auth-03, 2026-07-06, Informational) addresses agent
authentication and authorization by leveraging existing standards rather than
defining new protocols. Its Section 7 ("Agent Credentials") adopts the WIMSE
credential formats -- the Workload Identity Token (WIT) and the X.509 Workload
Identity Certificate (WIC); Section 6 addresses agent identifiers (WIMSE
identifiers, potentially SPIFFE IDs); and Section 10 covers authorization via OAuth
2.0 <xref target="RFC6749"/> access tokens, including Section 10.3 ("Use of OAuth 2.0 Access
Tokens") on how the "sub" claim carries a delegated subject and Section 10.4.1
("User Delegates Authorization") on delegating authorization to an agent through an
OAuth Authorization Code Grant.</t>

<t>EVC addresses the downstream decision boundary that draft-klrc-aiagent-auth-03 does
not: given a bundle -- which can carry a WIMSE credential or an OAuth access token
inside its opaque "bundle" -- how does a host obtain and enforce a fail-closed
authorization verdict at the point of a privileged action? The framing is that EVC
is the verdict-and-enforcement companion to the identity and authorization layer
that draft-klrc-aiagent-auth-03 assembles from WIMSE and OAuth. A WIMSE/OAuth token
is one possible payload a "classical"-class verifier (Section 5) validates; a
zero-knowledge credential is what a "zk"-class verifier validates. The host contract
is identical either way. The two documents are complementary and operate at
different points in the flow; EVC does not compete with, restate, or depend on the
draft-klrc-aiagent-auth-03 mechanisms.</t>

<ul empty="true"><li>
  <t><strong>RESOLVED 2026-07-15 (founder):</strong> keep citations as-is; section-number
re-verification is a MANDATORY pre-submission step. Original note: pin exact
draft-klrc-aiagent-auth-03 section numbers before
submit. The numbers above (6, 7, 10.3, 10.4.1) were read from the live datatracker
version on 2026-07-14. The -03 revision is built on WIMSE (WIT/WIC) plus OAuth
2.0, which differs materially from the "Agent Identity Token / client-to-agent
auth" characterization in the outline (that description tracked the earlier -01).
Re-verify the section numbers and titles against the -03 text at submission time,
since datatracker section numbering can shift with each revision.</t>
</li></ul>

</section>
<section anchor="draft-pidlisnyi-aps-02-related-agent-passport-system"><name>draft-pidlisnyi-aps-02 (Related -- Agent Passport System)</name>

<t><xref target="I-D.pidlisnyi-aps"/> ("Agent Passport System", draft-pidlisnyi-aps-02, 2026-07-04)
is a broad governance framework. It defines a DID method "did:aps" using
multibase-encoded Ed25519 public keys, Ed25519-based agent passports, and a
three-signature policy chain (intent, evaluation, receipt) whose receipt signatures
are computed with EdDSA per RFC 8032.</t>

<t>A factual, citable point: draft-pidlisnyi-aps-02 does not define a zero-knowledge or
selective-disclosure verifier class; its signed artifacts are Ed25519-signed and
content-addressed. Its Security Considerations (Section 8) speak to evidence
authenticity rather than disclosure minimization -- for example, that "A valid
receipt signature proves that the issuer attests the receipt's payload; it does not
prove the payload corresponds to external fact."</t>

<t>The positioning is neutral and about altitude, not merit. APS is a full
governance/passport/receipt framework; EVC is the narrow, testable host↔verifier
decision boundary that any such framework needs at the point of enforcement. The
two are complementary: an APS policy-decision engine could be wrapped as an
"external"-class (or "classical"-class) EVC verifier, and in the lane APS does not
define, a "zk"-class verifier adds selective disclosure -- proving authority without
revealing the passport or the underlying attributes. This document does not
characterize APS's disclosure model beyond the factual statement that it defines no
zero-knowledge class.</t>

<ul empty="true"><li>
  <t><strong>RESOLVED 2026-07-15 (founder):</strong> keep only the citable no-ZK-class claim;
no stronger characterization in -00. Original note: if the draft is to characterize APS's disclosure model beyond
"no ZK class," quote the exact draft-pidlisnyi-aps-02 Security-Considerations
sentence rather than paraphrasing. The Section 8 sentence quoted above was read
from the live datatracker version on 2026-07-14; re-verify it against the -02 text
at submission time.</t>
</li></ul>

</section>
</section>
<section anchor="impl-status"><name>Implementation Status</name>

<t>[Note to the RFC Editor: please remove this section before publication, per
<xref target="RFC7942"/>.]</t>

<t>This section records the status of known implementations of the contract at the
time of writing, per the process in <xref target="RFC7942"/>. Listing here does not imply
endorsement.</t>

<section anchor="verifier-bolyra-verify-production"><name>Verifier: bolyra verify (production)</name>

<t>The "@bolyra/cli" npm package (version 0.7.0 at the time of writing) ships
"bolyra verify", a spawnable external verifier implementing the verifier side
of this contract: one JSON request on stdin, one verdict object on stdout,
fail-closed on every malformed, oversized, or unexpected input, with the
denial-code registry of this document. It implements the "zk" and "classical"
verifier classes. Maturity: released, publicly installable.</t>

</section>
<section anchor="reference-hosts-two-languages"><name>Reference hosts (two languages)</name>

<t>Two reference hosts implement the host obligations independently: a JavaScript
host ("spec/reference-host.js") and a Rust host ("spec/reference-host-rs/").
Both pass the host-conformance suite (<xref target="conformance"/>): 26 misbehaving- and
well-behaved-verifier fixtures driving 27 "host_behavior" vectors. Maturity:
reference implementations, maintained alongside this document.</t>

</section>
<section anchor="hosted-verifier-preview"><name>Hosted verifier (preview)</name>

<t>A hosted HTTP mapping of the same contract ("POST /v1/verify", one request
object in, one verdict object out, fail-closed) is operated as a preview for
design partners. It carries no service-level commitment and is not a normative
part of this document; it exists to demonstrate that the contract is
transport-portable. Maturity: preview, access-controlled.</t>

</section>
<section anchor="independent-implementation-experience"><name>Independent implementation experience</name>

<t>The maintainer of an unrelated MCP server project (mcp_agent_mail_rust) built
an off-by-default Ed25519 registration-proof gate designed to the v1 contract
boundary, developed without depending on any component of the authors'
implementations. Maturity: shipped in that project, off by default.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="fail-closed-is-the-whole-safety-property"><name>Fail-Closed Is the Whole Safety Property</name>

<t>Every ambiguous outcome -- non-zero exit, timeout, signal death, unparseable,
oversized, or multi-object stdout, schema failure, or an unrecognized "kind" -- MUST
result in deny (Section 6). This is the entire safety property of the contract: the
host never proceeds on ambiguity. The host-conformance suite (Section 8) is the
mechanism that makes this claim checkable rather than asserted, spawning
deliberately misbehaving verifiers and confirming the host fails closed. Exit status
dominates a stdout allow (Section 6.2): a non-zero exit is a deny even when a
syntactically valid "allow" reached stdout.</t>

</section>
<section anchor="kind-is-unauthenticated-self-report"><name><spanx style="verb">kind</spanx> Is Unauthenticated Self-Report</name>

<t>A host MUST establish a verifier's proof-system class from configured verifier
identity or policy, never from the "kind" string, and MUST NOT relax trust, verifier
selection, schema validation, or nonce handling on its basis (Section 5). The threat
is a hostile or buggy verifier that claims "kind=zk" to imply privacy guarantees it
did not provide, or that emits an unfamiliar "kind" to probe for a lenient host. An
unrecognized "kind" is a schema failure and MUST fail closed.</t>

</section>
<section anchor="nonce-reservation-and-replay"><name>Nonce Reservation and Replay</name>

<t>Reserve-before-act ordering (Section 7) is a load-bearing property. "Record after
proceeding" is a replay window and is FORBIDDEN. On a multi-entry "consume_nonces"
(agent nullifier plus human-uniqueness nullifier), the host MUST reserve every entry
and MUST reject on any conflict. In local nonce mode, a store error MUST fail closed.
The black-box conformance suite proves the observable gate -- that authorization is
conditioned on the durable uniqueness check -- but not the intra-allow-path
write-barrier ordering (Section 8.4); hosts SHOULD cover that crash-window ordering
with an in-process test.</t>

</section>
<section anchor="redirect-and-downgrade-in-signer-discovery"><name>Redirect and Downgrade in Signer Discovery</name>

<t>For a "classical"-class verifier that consumes a Receipt Signer Discovery document
(Section 11): a consumer MUST fetch over HTTPS, and plain "http://" MUST be
rejected except for loopback addresses (development); a consumer MUST NOT follow
redirects, because a redirect can move the fetch to a plaintext or attacker-chosen
origin after the protocol check; and a consumer MUST treat any transport, status, or
schema
failure as a verification failure, never as "no signer restriction". Discovery is
trust-in-origin, not endorsement and not PKI. When both an out-of-band pinned signer
and a discovery-URL signer source are supplied, a consumer MUST require the two to
agree.</t>

</section>
<section anchor="output-bound-truncation-and-resource-exhaustion"><name>Output-Bound Truncation and Resource Exhaustion</name>

<t>The stdout output bound and the stdin bound (Section 6.3) bound a hostile verifier
that floods or hangs; the host MUST enforce both and kill on breach. The
"oversize-flood" and hang fixtures (Section 8.1) prove this. A truncated stdout is
unparseable and MUST deny, never yield a partial allow.</t>

</section>
<section anchor="tail-truncation"><name>Tail Truncation of Hash-Chained Receipts (Informative)</name>

<ul empty="true"><li>
  <t><strong>NEW -- draft-only; not in shipped EVC v1 / RSD v1.</strong></t>
</li></ul>

<t>For a hash-chained signed-receipt log that a "zk"- or "classical"-class verifier may
consult, an attacker who can drop the newest entries can mount a tail-truncation
attack: the chain still verifies as a valid prefix, so the verifier sees an older,
shorter-but-consistent history. This is a real property, but it sits below the EVC
host↔verifier boundary -- receipt-chain semantics live in the receipt library, not
in the EVC wire envelope -- so this document states no new normative EVC obligation
here. As guidance a verifier vendor may adopt: a verifier that relies on receipt
ordering should anchor the expected chain tip (a signed high-water mark or a
monotonic counter) out of band and treat a shorter-than-expected chain as a
verification failure. A normative mitigation, if desired, belongs in a dedicated
receipts/RSD companion draft where a MUST can be properly grounded, and would be
referenced from here.</t>

<ul empty="true"><li>
  <t><strong>RESOLVED 2026-07-15 (founder):</strong> keep informative in -00 (option a);
companion draft only if chain anchoring becomes its own standards conversation.
Original note: cross-check the receipt-chain semantics of the "@bolyra/receipts"
library before finalizing this wording, and decide between (a) keeping this as the
informative note above, or (b) moving a normative MUST into a receipts/RSD
companion draft and citing it. The outline's recommendation (task 18/19) is (a):
keep it informative in this document.</t>
</li></ul>

</section>
<section anchor="domain-separation"><name>Domain Separation</name>

<t>The request-binding signature (Appendix B) is domain-separated by a tag that
prevents a binding signature from being replayed as any other signature the
verifier's scheme produces, and vice-versa. This closes a cross-context signature
replay class. The tag is versioned; the binding revision described in Appendix B
uses the ".v2" tag. This consideration applies only to a verifier whose internal
binding follows Appendix B; it is below the EVC boundary (the host never sees the
binding) and is included because Appendix B is retained as informative.</t>

</section>
<section anchor="binding-of-credential-expiry"><name>Binding of Credential Expiry</name>

<t>This consideration applies only to a verifier whose internal binding follows
Appendix B; it is below the EVC boundary (the host never sees the binding) and is
included because Appendix B is retained as informative.</t>

<t>The binding in Appendix B originally signed five fields and did not cover the
credential expiry; that revision is referred to here as binding v1. A verifier whose
proof system does not independently bind expiry -- a "classical"- or
"external"-class verifier (Section 5) -- could therefore be presented a binding whose
signed fields matched an issued mandate while an expiry value drawn from outside the
signature was substituted. A presenter able to re-anchor a later expiry onto an
already-issued mandate could obtain an "allow" past the mandate's intended lifetime,
extending the credential's effective duration. The escalation is bounded: it extends
duration at the already-granted permission tier and audience, and does not permit
tier, audience, or payee escalation. A "zk"-class verifier that binds expiry within
its proof was not exposed to this substitution.</t>

<t>The current binding (binding v2, Appendix B) places "expiry" inside the signed
binding, versions the domain-separation tag to
"bolyra.external-verifier.binding.v2", and, after the signature verifies, requires
the signed "binding.expiry" to equal the credential expiry that the scope and expiry
checks consume; a mismatch is a verification failure ("deny code=invalid_bundle"). A
binding carrying only the earlier five fields is treated as an obsolete binding v1
and rejected as an unsupported version ("deny code=unsupported_version"), with no
compatibility mode and no advisory-expiry fallback. A verifier following Appendix B
therefore signs "expiry" as part of the binding and rejects a five-field binding
rather than accept an expiry that no signature covers. As with Domain Separation
above, this is a property of the reference verifier's internal binding, stated with
the lowercase "must" convention of Appendix B; it is below the EVC wire boundary and
imposes no new normative obligation on the host contract.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>A "zk"-class verifier lets the host authorize an action without learning the agent's
identity or attribute values; this is the selective-disclosure property of
Section 5. EVC bounds what the verifier learns, not what the host already knows: the
request context the host supplies ("agent_name", "project_key", "program", "model",
"granted_capabilities") is host-chosen and may itself be identifying. Implementers
should note this asymmetry -- a privacy-preserving verifier does not make the host's
own request context private -- and minimize identifying content in the request where
the deployment's threat model calls for it.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<ul empty="true"><li>
  <t><strong>NEW -- draft-only, not in shipped EVC v1.</strong></t>
</li></ul>

<section anchor="external-verifier-denial-codes-registry"><name>External Verifier Denial Codes Registry</name>

<t>This document requests that IANA create a new registry, "External Verifier Denial
Codes", to catalog the machine-readable denial-code vocabulary of Section 4.2.</t>

<t><list style="symbols">
  <t>Registry name: External Verifier Denial Codes.</t>
  <t>Registration policy: Specification Required <xref target="RFC8126"/>.</t>
  <t>Columns: "code" (the snake_case token); brief description; wire version
introduced; change controller; reference.</t>
</list></t>

<t>Critical clarification reconciling the registry with the closed wire enum: the
wire denial-code set is a closed enum on the wire. A verifier MUST NOT add, remove,
or rename a code without a wire-major version bump (Section 4.2 and Section 10). The
IANA registry does NOT relax this and does NOT open the enum at runtime. It is a
catalog of the codes each spec version defines: a new registration is admissible
only as part of a published EVC wire-major/spec revision that adds the code, and
each registry entry records the wire version that introduced it. A verifier that
emits an unregistered code is non-conformant exactly as it is today; the registry
changes discoverability, not the closed-set semantics or the version-bump rule.
Third-party ("external"-class) verifiers reuse the existing vocabulary and do not
mint private codes at runtime.</t>

<t>Initial contents: the 15 codes of Section 4.2, each recorded with its meaning, the
wire version that introduced it ("1"), change controller (this document / the EVC
specification), and reference (this document).</t>

</section>
<section anchor="proof-system-classes-closed-enum-no-registry-requested"><name>Proof-System Classes: Closed Enum, No Registry Requested</name>

<t>The "kind" value set ("classical", "zk", "external") of Section 5 is deliberately
NOT proposed as an IANA registry. The set is small and closed, and adding a value is
a wire-facing change already governed by the wire-major rule (Section 10). A fixed
enum in the specification is preferable to a registry here; the tradeoff is that a
future proof-system class requires a spec revision rather than a registration, which
is acceptable given how rarely the class set is expected to change.</t>

</section>
<section anchor="deferred-registrations"><name>Deferred Registrations</name>

<t><list style="symbols">
  <t>Well-known URI. The Receipt Signer Discovery document
(".well-known/bolyra-signers.json", Section 11) would need an RFC 8615
<xref target="RFC8615"/> well-known-URI registration, but that belongs to a separate RSD
Internet-Draft, not this one. It is out of scope for this document.</t>
  <t>Media type. A proof-envelope media type exists in the wider ecosystem but is below
the EVC boundary (the bundle is opaque); EVC itself defines no new media type. No
media-type registration is requested.</t>
</list></t>

<ul empty="true"><li>
  <t><strong>RESOLVED 2026-07-15 (founder):</strong> no media-type registration in -00; revisit
if the HTTP transport is specified in a later rev. Original note: confirm before submit that the wire request/verdict objects
receive no structured-suffix or media-type registration for -00. Recommendation
(outline task): no registration -- the objects are transported over a subprocess
pipe, not a network media type.</t>
</li></ul>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC6749">
  <front>
    <title>The OAuth 2.0 Authorization Framework</title>
    <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
    <date month="October" year="2012"/>
    <abstract>
      <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6749"/>
  <seriesInfo name="DOI" value="10.17487/RFC6749"/>
</reference>
<reference anchor="RFC7519">
  <front>
    <title>JSON Web Token (JWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7519"/>
  <seriesInfo name="DOI" value="10.17487/RFC7519"/>
</reference>
<reference anchor="RFC7662">
  <front>
    <title>OAuth 2.0 Token Introspection</title>
    <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
    <date month="October" year="2015"/>
    <abstract>
      <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7662"/>
  <seriesInfo name="DOI" value="10.17487/RFC7662"/>
</reference>
<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>

<reference anchor="I-D.klrc-aiagent-auth" >
  <front>
    <title>AI Agent Authentication and Authorization</title>
    <author initials="P." surname="Kasselman" fullname="P. Kasselman">
      <organization></organization>
    </author>
    <author initials="D." surname="Lombardo" fullname="D. Lombardo">
      <organization></organization>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Y. Rosomakho">
      <organization></organization>
    </author>
    <author initials="B." surname="Campbell" fullname="B. Campbell">
      <organization></organization>
    </author>
    <author initials="A." surname="Steele" fullname="A. Steele">
      <organization></organization>
    </author>
    <date year="2026" month="July" day="06"/>
  </front>
</reference>
<reference anchor="I-D.pidlisnyi-aps" >
  <front>
    <title>Agent Passport System</title>
    <author initials="" surname="Pidlisnyi" fullname="Pidlisnyi">
      <organization></organization>
    </author>
    <date year="2026" month="July" day="04"/>
  </front>
</reference>


    </references>

</references>


<?line 1105?>

<section anchor="schemas"><name>Request and Verdict JSON Schemas (Normative)</name>

<section anchor="request-schema"><name>Request Schema</name>

<figure><sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bolyra.ai/spec/external-verifier-request-v1.json",
  "title": "External Verifier Request v1",
  "type": "object",
  "required": ["version", "bundle", "request", "now_unix"],
  "additionalProperties": true,
  "properties": {
    "version": { "type": "integer", "const": 1 },
    "bundle": { "type": "string", "minLength": 1 },
    "request": {
      "type": "object",
      "required": [
        "agent_name",
        "project_key",
        "program",
        "model",
        "granted_capabilities"
      ],
      "additionalProperties": true,
      "properties": {
        "agent_name": { "type": "string" },
        "project_key": { "type": "string" },
        "program": { "type": "string" },
        "model": { "type": "string" },
        "granted_capabilities": {
          "type": "array",
          "items": { "type": "string" }
        }
      }
    },
    "now_unix": { "type": "integer", "exclusiveMinimum": 0 }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="verdict-schema-closed"><name>Verdict Schema (Closed)</name>

<figure><sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bolyra.ai/spec/external-verifier-verdict-v1.json",
  "title": "External Verifier Verdict v1",
  "oneOf": [
    {
      "type": "object",
      "required": ["verdict"],
      "additionalProperties": false,
      "properties": {
        "verdict": { "const": "allow" },
        "kind": { "type": "string", "enum": ["classical", "zk", "external"] },
        "consume_nonces": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["issuer_key", "nonce", "retain_until"],
            "additionalProperties": false,
            "properties": {
              "issuer_key": { "type": "string" },
              "nonce": { "type": "string" },
              "retain_until": { "type": "integer" }
            }
          }
        }
      }
    },
    {
      "type": "object",
      "required": ["verdict", "code", "message"],
      "additionalProperties": false,
      "properties": {
        "verdict": { "const": "deny" },
        "kind": { "type": "string", "enum": ["classical", "zk", "external"] },
        "code": {
          "type": "string",
          "enum": [
            "malformed_input",
            "unsupported_version",
            "invalid_bundle",
            "invalid_proof",
            "untrusted_root",
            "delegation_invalid",
            "invalid_signature",
            "request_mismatch",
            "model_mismatch",
            "unknown_capability",
            "scope_exceeded",
            "expired",
            "nonce_missing",
            "nonce_replayed",
            "internal_error"
          ]
        },
        "message": { "type": "string" },
        "detail": { "type": "object" }
      }
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="binding"><name>Binding Signature (Informative)</name>

<t>This appendix describes the request-authorizing signature carried inside a bundle by
Bolyra's "zk"- and "classical"-class reference verifiers. It is included to
illustrate one verifier's internal binding. It is explicitly below the
interoperability boundary: the host never sees these bytes, and a conforming verifier
of any class may use any binding it chooses. Nothing in this appendix is a normative
obligation of the EVC wire contract. The lowercase "must"/"must not" phrasing below
states requirements of the reference verifier implementation, not requirements of
this document; they are not BCP 14 keywords.</t>

<t>The bundle carries a request-authorizing signature that binds the request context to
the cryptographic key the proof commits to. The binding is versioned independently of
the wire envelope; this appendix describes binding v2, in which the credential expiry
is signature-bound. In the reference verifier:</t>

<t><list style="symbols">
  <t>Canonical payload (binding v2). Let "binding" be the object with exactly the six
fields "agent_name", "project_key", "program", "model", "capabilities" (a string
array), and "expiry" (a positive integer, Unix seconds). The canonical payload is
the sorted-key, compact (no insignificant whitespace) JSON serialization of
"binding". Object keys must be sorted and array elements (including "capabilities")
must not be reordered. The verifier compares "capabilities" as a set for
authorization, but the signed bytes are order-sensitive. "expiry" became part of the
signed binding in binding v2; the Security Considerations note on expiry binding
(Section 12) states why.</t>
  <t>Version discrimination is structural, not a declared version field. The reference
verifier classifies a binding by its exact key set: the six fields above and no
others. A member outside that set is rejected ("deny code=invalid_bundle") before
any version is inferred. A well-formed binding carrying only the earlier five fields
(no "expiry") is an obsolete binding v1 and is rejected
("deny code=unsupported_version"); no compatibility mode accepts it. An "expiry"
that is not a positive integer is rejected ("deny code=invalid_bundle").</t>
  <t>Domain separation. A domain-separation tag prevents a binding signature from being
replayed as any other signature. The tag is versioned; binding v2 uses the ".v2"
tag: DST = utf8("bolyra.external-verifier.binding.v2"), and
dsInput = DST || 0x00 || payload. The single 0x00 byte separates the ASCII domain
tag from the canonical binding bytes.</t>
  <t>Digest to field element. digest = SHA-256(dsInput) (32 bytes);
msgField = BigInt("0x" || hex(digest)) mod BN254_FIELD_ORDER, where
BN254_FIELD_ORDER is
21888242871839275222246405745257275088548364400416034343698204186575808495617.</t>
  <t>Sign / verify. Sign with EdDSA-Poseidon over BabyJubjub; verify by recomputing
msgField from the bundle's own "binding" bytes and checking the signature against
the operator public key the proof commits to. A signing key disjoint from the
credential is rejected ("deny code=invalid_signature"), closing the cross-signer
replay class. After the signature verifies, the reference verifier additionally
requires "binding.expiry" to equal the credential expiry that the scope and expiry
checks consume, rejecting a mismatch ("deny code=invalid_bundle"); this binds the
strict-expiry check to the signed value. A verifier consuming a foreign bundle
recomputes the digest from the bundle's own "binding" bytes and does not trust a
self-asserted digest.</t>
</list></t>

</section>
<section anchor="examples"><name>Worked Examples (Informative)</name>

<t>Each example is a real (stdin request, stdout verdict) pair against the reference
verifier. Requests are abbreviated ("bundle" elided).</t>

<section anchor="allow-local-nonce-mode"><name>Allow (Local Nonce Mode)</name>

<t>Request:</t>

<figure><sourcecode type="json"><![CDATA[
{ "version": 1, "bundle": "...", "request": {
    "agent_name": "research-bot", "project_key": "/work/acme/research",
    "program": "crewai", "model": "opus-4.1",
    "granted_capabilities": ["fetch_inbox", "send_message"] },
  "now_unix": 1751990400 }
]]></sourcecode></figure>

<t>Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "allow" }
]]></sourcecode></figure>

</section>
<section anchor="allow-with-consumenonces-host-nonce-mode"><name>Allow With consume_nonces (Host Nonce Mode)</name>

<t>Same request, verifier spawned in host nonce mode. This agent-only bundle yields a
single entry; a human-backed bundle would add a second "human:NULLIFIER-HASH"
entry. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "allow",
  "consume_nonces": [
    {
      "issuer_key": "15617329766995256858590222302430068383949745072531974464084158078905448850943:20201653676552407165606319978171745645181779505176156736762229713293662347780",
      "nonce": "12616665119450508255185458876855962314592339945640375882344193391684757282246",
      "retain_until": 4102444800
    }
  ]
}
]]></sourcecode></figure>

<t>The host MUST reserve every entry's "nonce" atomically before acting (Section 7).</t>

</section>
<section anchor="deny-scopeexceeded"><name>Deny -- scope_exceeded</name>

<t>Request whose credential proves only READ_DATA but whose "send_message" capability
requires WRITE_DATA. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "deny",
  "code": "scope_exceeded",
  "message": "required scope exceeds the credential effective scope",
  "detail": { "required_scope": "2", "effective_scope": "1", "excess_bits": "2" }
}
]]></sourcecode></figure>

</section>
<section anchor="deny-modelmismatch"><name>Deny -- model_mismatch</name>

<t>Request whose "model" differs from the model the proof commits to. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "verdict": "deny",
  "code": "model_mismatch",
  "message": "proven model hash does not match the requested model",
  "detail": { "requestModel": "model-beta" }
}
]]></sourcecode></figure>

</section>
<section anchor="deny-malformedinput"><name>Deny -- malformed_input</name>

<t>Truncated JSON on stdin. Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "deny", "code": "malformed_input", "message": "request stdin is not valid JSON" }
]]></sourcecode></figure>

</section>
<section anchor="deny-internalerror-fail-closed-non-zero-exit"><name>Deny -- internal_error (Fail-Closed, Non-Zero Exit)</name>

<t>No trusted-root source configured. Verdict on stdout AND a non-zero exit code, so the
host fail-closes on either signal:</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "deny", "code": "internal_error", "message": "no trusted root source configured" }
]]></sourcecode></figure>

</section>
<section anchor="allow-classical-kind-verifier"><name>Allow -- classical-kind Verifier</name>

<t>A "classical"-class verifier -- for example one that checks an ES256K-signed receipt
and a JWT delegation token <xref target="RFC7519"/> rather than a zero-knowledge proof -- returns
the same "allow" envelope, tagged with its "kind". Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "allow", "kind": "classical" }
]]></sourcecode></figure>

</section>
<section anchor="deny-external-kind-verifier"><name>Deny -- external-kind Verifier</name>

<t>A third-party verifier denies with the shared registry (Section 4.2) and its own
"kind". Verdict (exit 0):</t>

<figure><sourcecode type="json"><![CDATA[
{ "verdict": "deny", "kind": "external", "code": "expired", "message": "credential expired" }
]]></sourcecode></figure>

<t>An agent-only "zk" verdict carries no "kind"; the host reads its absence as "zk".</t>

</section>
</section>
<section anchor="fixtures"><name>Host-Conformance Fixture List (Informative)</name>

<t>The 27 "host_behavior" vectors and the Host-Under-Test environment variables of
Section 8 are reproduced there as tables. Implementers building or testing a host
should consult Section 8.1 (fixture inventory), Section 8.2 (the HUT convention and
environment variables), and Section 8.3 (failure classes), together with the two
reference hosts at "spec/reference-host.js" and "spec/reference-host-rs/".</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8W963bbSLIm+h9PgWHNWk32IaiLdbN0qmdUtrxL3b6N5ara
vXtqaUASklAmAW4AlMy23T/nCeYJ50lOxBcRmQmQtFy7Z9bpuZRMgom8RMY9
vkiSJGryZpadxr3zIr742GRVkc7in7Mqv8mzKn5WFk2VTpr4pqzi89usaOLz
ZXNXVvnf0yYvi/h5Nslr+qPuRel4XGX3NNL2YXrRtJwU6ZzeN63Smyb5UBbT
8rdlkt1Pkt3daJI22W1ZrU7jvLgpo3xRncZNtayb/d3dp7v7UVpl6Wl8lU2W
Vd6sooey+nBblcvFaXxZTPP7fLqkt14tx/O85klFH7IVPTM9jeI4iVOevvwV
LgGf3OtM8Y+/Z1WZfCjKh1k2vc3wUZ3NskmT32fJNK8ns7JeVllUuxc1qwUt
6fLi/YuobtJiep3OyoI+WWV1tMhP47815WQY12XVVNlNTX+t5vzHr1EkU5EJ
ysb8nNcPaZFO79L4bZU26SL+i2wSPRPHZXWbFjrz0/iHcraqUnyRzdN8dhrf
86//6xifj9I8ioqymqc8c37HuxfP9vf2nuqfJ3vHB/bn/iF9GvGutx8/Oj6w
x48P3S+Pj4727c+nB/tuvP0j+/No75D/vEyejz7MqkmS5tj+hNd7igk7ursM
CIv+m0+Esmgb27TWw8+6BNQdPNl9Is8RKZ3G+7v7R8nucbJ7hA/9bvP/bMff
juK/pDUd8TwtOl89H8Uvy/k4raZl55u/juJ3ZV3O0w933a9+GMXP0vlinM1m
nW/OR/FVkxEt6dYs8uksr4tVnqSLurMt2JO3NK8FkU18taqbbL5xC1qDJHRL
Niz/4GvLt99HUZLQ5RjXuKtR9P4ur/llyzlPpV7QVac7Usd0TF9jFf2Ln58N
TuM0rufpbDaMm4zuxHiWDaNFVZY3SY2lJOltUdZ02vG4XBbTtFrF46x5yDI6
+fiOvon7/B76yW2VzmlW5bKJmzJu0g9ZnNJQdN1n2W02jemdTC8gGbnkf6hp
rLt0djMAFdHHmU3XLnrcp/ktxzT8JKvrqLlLm7jKimlW1RhmNisfdqZZseJf
THNaloxfLtJ/X2Ja5U08ponPssEofk8znej6o9uSflLU9IPZCntFHxdyijwb
Gy8r7rNZyXzjrnzAc1j1HT1T8+blxe0si/989eZ1VGX0zhrLT/0K/PRjfmNc
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
WzBXxR++DWV1FP1/cvpbD9QOAQA=

-->

</rfc>

