<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-car-rer-artifact-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="rer-artifact">RER Run Artifact Format: Hash-Chained, Signed Records of AI Inference Execution</title>
    <seriesInfo name="Internet-Draft" value="draft-car-rer-artifact-00"/>
    <author initials="K." surname="Cardillo" fullname="Kayla Cardillo">
      <organization>Tech Enrichment</organization>
      <address>
        <email>contactkaylacard@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="12"/>
    <area>Applications and Real-Time</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>AI agents</keyword>
    <keyword>audit</keyword>
    <keyword>cryptographic receipts</keyword>
    <keyword>hash chain</keyword>
    <keyword>Ed25519</keyword>
    <keyword>JCS</keyword>
    <keyword>inference audit</keyword>
    <keyword>RER</keyword>
    <abstract>
      <?line 77?>

<t>This document specifies the Run Envelope Runtime (RER) artifact format: a
hash-chained, Ed25519-signed JSON record of a single AI inference run. An
RER artifact carries (1) a signed envelope declaring the permissions and
limits under which the run was authorized, (2) a hash-chained event log
covering every model call, tool call, and policy decision made during
execution, and (3) a runtime signature binding the envelope hash and event
log head to the runtime implementation that produced the record.</t>
      <t>The artifact is designed for offline verification by parties who did not
participate in the run. A separate verifier package, with a minimal
dependency surface (canonicalization, SHA-256, Ed25519, JSON schema
validation), can establish the artifact's structural and cryptographic
integrity without any of the code that produced it. After sealing, the
integrity of the record does not depend on trust in the operator.</t>
      <t>This document complements the declaration-side agents.txt and ai.txt
well-known URI proposals (both filed, under review at the IANA
Well-Known URIs registry). Declaration says what an agent was permitted
to do. An RER artifact records what the runtime attested actually
happened. The two surfaces together cover the before-and-after of an
agent interaction.</t>
      <t>Two on-the-wire schema versions are defined here: rer-artifact/0.1 and
rer-artifact/0.2. Version 0.2 adds a bundle format, manifest binding,
and approval-protocol metadata while preserving the verification semantics
of 0.1.</t>
    </abstract>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The deployment of AI agents that take action -- calling tools, invoking
external services, completing transactions -- has outrun the audit
mechanisms available to verify what those agents actually did. Logs
produced by operators are necessarily trusted by consumers of those logs:
the operator owns the log, the storage, the redaction policy, and the
key. There is no structural reason for a third party to believe an
operator's account of an agent run.</t>
      <t>Several adjacent surfaces address parts of this problem. <xref target="AGENTSTXT"/>
specifies what an agent is permitted to do on a site, in advance.
<xref target="AITXT"/> specifies training-policy and licensing declarations. Both are
declarations at the boundary; neither describes what happened inside an
agent run.</t>
      <t>This document specifies the artifact half of the picture: a
hash-chained, cryptographically signed record of one execution. The
artifact is structured so that a verifier with no relationship to the
operator can establish, offline, that:</t>
      <ol spacing="normal" type="1"><li>
          <t>The events in the log have not been reordered, removed, or modified.</t>
        </li>
        <li>
          <t>The envelope declaring the run's permissions has not been substituted.</t>
        </li>
        <li>
          <t>The runtime that produced the artifact attested to the (envelope,
log-head) pair with an Ed25519 signature.</t>
        </li>
        <li>
          <t>Where payloads are present, their content has not changed since the
event was sealed.</t>
        </li>
      </ol>
      <section anchor="trust-boundary-verify-never-imports-runtime">
        <name>Trust boundary: verify never imports runtime</name>
        <t>A design constraint enforced throughout the reference implementation is
that the verifier package has no compile-time or run-time dependency on
the runtime that produces artifacts. The verifier depends only on:</t>
        <ul spacing="normal">
          <li>
            <t>An RFC 8785 <xref target="RFC8785"/> canonicalization implementation.</t>
          </li>
          <li>
            <t>A SHA-256 hash implementation conformant with <xref target="FIPS180-4"/>.</t>
          </li>
          <li>
            <t>An Ed25519 signature verification implementation conformant with
<xref target="RFC8032"/>.</t>
          </li>
          <li>
            <t>A JSON Schema validator.</t>
          </li>
        </ul>
        <t>A third party who wants to check a proof installs only the verifier.
They do not install, configure, or run the operator's runtime. This
constraint is what allows the verification result to be meaningful
independently of the operator's posture.</t>
      </section>
      <section anchor="relationship-to-other-standards">
        <name>Relationship to other standards</name>
        <t>W3C Verifiable Credentials <xref target="W3C-VC"/> is the closest existing analog.
VC defines a signed claim about an entity; an RER artifact is a signed
record about an execution. The two surfaces are compatible -- a VC could
be issued attesting the contents of an RER artifact -- but RER carries
information VC does not address natively, including a hash-chained
event log and a separation between envelope (what was allowed) and
events (what occurred).</t>
      </section>
      <section anchor="requirements-language">
        <name>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>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <ul spacing="normal">
        <li>
          <t><strong>run</strong>: A single execution of an AI inference loop. A run begins
when an envelope is bound to it and ends when a terminal event
(success, failure, or block) is recorded.</t>
        </li>
        <li>
          <t><strong>envelope</strong>: A signed declaration of the permissions, limits, and
policy bindings under which a run is authorized.</t>
        </li>
        <li>
          <t><strong>event</strong>: A single record in the run's append-only log. An event
represents a model call, a tool call, a policy decision, or a
lifecycle transition.</t>
        </li>
        <li>
          <t><strong>event log</strong>: The ordered sequence of events produced during a run.
Each event after the first carries a hash of the immediately prior
event's event_hash, forming a linear hash chain.</t>
        </li>
        <li>
          <t><strong>artifact</strong>: A document containing the envelope, the event log, and
a runtime signature. The deliverable record of a run.</t>
        </li>
        <li>
          <t><strong>bundle (v0.2 only)</strong>: An artifact plus its associated manifest and
any binary blob payloads referenced by the artifact's events. Bundles
package artifacts with side-data for portable distribution.</t>
        </li>
        <li>
          <t><strong>manifest (v0.2 only)</strong>: A document inside a bundle that lists each
blob, the artifact's content hash, the runtime key hash, and counts
derived from the artifact. The manifest is itself signed and hashed.</t>
        </li>
        <li>
          <t><strong>runtime</strong>: The software implementation that executes the run and
produces the artifact. The runtime holds the signing key.</t>
        </li>
        <li>
          <t><strong>verifier</strong>: The software (or party) checking an artifact. The
verifier holds the public key and the artifact only.</t>
        </li>
      </ul>
    </section>
    <section anchor="artifact-format">
      <name>Artifact format</name>
      <t>An RER artifact is a JSON document. Two on-the-wire versions are
defined: rer-artifact/0.1 (frozen) and rer-artifact/0.2 (frozen).</t>
      <t>This section specifies the wire format. Section 4 specifies the event
log carried inside the artifact. Section 5 specifies the envelope.
Section 6 specifies the cryptographic primitives. Section 7 specifies
the seven-check verification algorithm. Section 8 specifies the
additions made in version 0.2. Section 9 specifies the bundle format
(v0.2 only).</t>
      <section anchor="schema-identifiers">
        <name>Schema identifiers</name>
        <t>Three families of schema identifier appear:</t>
        <ul spacing="normal">
          <li>
            <t>envelope_version: rer-envelope/0.1 or rer-envelope/0.2.</t>
          </li>
          <li>
            <t>event_version: rer-event/0.1 or rer-event/0.2.</t>
          </li>
          <li>
            <t>artifact_version: rer-artifact/0.1 or rer-artifact/0.2.</t>
          </li>
        </ul>
        <t>An rer-artifact/0.1 artifact MUST contain only rer-envelope/0.1 and
rer-event/0.1 sub-records. An rer-artifact/0.2 artifact MUST contain
only rer-envelope/0.2 and rer-event/0.2 sub-records. Mixed-version
artifacts are not defined and MUST be rejected.</t>
      </section>
      <section anchor="top-level-structure">
        <name>Top-level structure</name>
        <t>The artifact is a JSON object with the following fields:</t>
        <artwork><![CDATA[
{
  "artifact_version": "rer-artifact/0.2",
  "run_id":           "<implementation-defined run identifier>",
  "envelope_hash":    "<hex SHA-256 over canonical envelope>",
  "log_head_hash":    "<hex SHA-256 -- last event's event_hash>",
  "manifest_hash":    null,
  "runtime": {
    "implementation": "<runtime name>",
    "version":        "<runtime version string>",
    "key_id":         "<base64url SHA-256 of public key>",
    "algorithm":      "Ed25519"
  },
  "runtime_signature": "<hex Ed25519 signature over header>",
  "envelope":          <SignedEnvelope>,
  "events":            [<Event>, <Event>, ...]
}
]]></artwork>
        <section anchor="field-semantics">
          <name>Field semantics</name>
          <dl>
            <dt>artifact_version (REQUIRED):</dt>
            <dd>
              <t>The schema identifier. MUST be rer-artifact/0.1 or rer-artifact/0.2.</t>
            </dd>
            <dt>run_id (REQUIRED):</dt>
            <dd>
              <t>A run-unique identifier. Format is implementation-defined; the
identifier is opaque to the verifier and is not parsed.</t>
            </dd>
            <dt>envelope_hash (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal SHA-256 over the RFC 8785 canonical JSON form
of the envelope's signable bytes (see Section 5 for the signable byte
rule).</t>
            </dd>
            <dt>log_head_hash (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal value equal to the event_hash of the final
event in the events array. When events is empty the artifact MUST
fail verification (see Section 7).</t>
            </dd>
            <dt>manifest_hash (v0.2 only):</dt>
            <dd>
              <t>Present in rer-artifact/0.2 artifacts. When the artifact is
distributed standalone, the value MUST be JSON null. When the
artifact is distributed inside a bundle, the value MUST equal the
bundle's bundle_hash (Section 9). In v0.1 the field MUST be absent
entirely (not null, not present-with-null) -- null and absent have
different canonicalization outcomes and therefore different
signature domains. This is intentional.</t>
            </dd>
            <dt>runtime (REQUIRED):</dt>
            <dd>
              <t>An object describing the producing runtime. The implementation
field is a free-form identifier (for example, "@rer/runtime") used
to distinguish runtimes. The version field SHOULD be a semantic
version string. The key_id field MUST be the base64url-encoded
<xref target="RFC4648"/> SHA-256 of the raw 32-byte Ed25519 public key. The
algorithm field MUST be the literal string "Ed25519".</t>
            </dd>
            <dt>runtime_signature (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal Ed25519 signature, 128 hex characters,
computed over the canonical form of the artifact header (Section 6).</t>
            </dd>
            <dt>envelope (REQUIRED):</dt>
            <dd>
              <t>The signed envelope under which the run executed. See Section 5.</t>
            </dd>
            <dt>events (REQUIRED):</dt>
            <dd>
              <t>An ordered array of zero or more events. See Section 4. An empty
events array MUST fail verification.</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="event-format">
      <name>Event format</name>
      <t>Each event in the events array is a JSON object with the following
fields:</t>
      <artwork><![CDATA[
{
  "event_version":      "rer-event/0.2",
  "step_index":         0,
  "event_type":         "rer.run.started",
  "parent_event_hash":  null,
  "timestamp":          "2026-05-13T12:34:56.789Z",
  "payload":            { ... } | absent,
  "payload_redacted":   false,
  "payload_hash":       "<hex SHA-256>",
  "event_hash":         "<hex SHA-256>"
}
]]></artwork>
      <section anchor="field-semantics-1">
        <name>Field semantics</name>
        <dl>
          <dt>event_version (REQUIRED):</dt>
          <dd>
            <t>rer-event/0.1 or rer-event/0.2. Within a single artifact all events
MUST share the version implied by the artifact_version (Section 3.1).</t>
          </dd>
          <dt>step_index (REQUIRED):</dt>
          <dd>
            <t>A non-negative integer that increases monotonically across the
events array. step_index is not required to be a dense sequence
(gaps are permitted) but MUST be strictly increasing between
consecutive events.</t>
          </dd>
          <dt>event_type (REQUIRED):</dt>
          <dd>
            <t>A dotted lower-case string identifying the event family. The base
set of event types defined by this specification is:
</t>
            <ul spacing="normal">
              <li>
                <t>rer.run.started -- first event in every run</t>
              </li>
              <li>
                <t>rer.policy.evaluated -- a policy decision applied to a model or
tool action</t>
              </li>
              <li>
                <t>rer.policy.step_blocked -- a model or tool action denied by policy</t>
              </li>
              <li>
                <t>rer.model.called -- a request was issued to a model</t>
              </li>
              <li>
                <t>rer.model.returned -- a model returned a response</t>
              </li>
              <li>
                <t>rer.tool.called -- a tool was invoked</t>
              </li>
              <li>
                <t>rer.tool.returned -- a tool returned a result</t>
              </li>
              <li>
                <t>rer.artifact.written -- an out-of-band artifact (blob) was produced
during the run</t>
              </li>
              <li>
                <t>rer.run.ended -- final event in every run</t>
              </li>
            </ul>
            <t>Implementations MAY define additional event types under the rer.*
namespace. Verifier behavior MUST NOT depend on the specific
event_type other than for human-readable inspection.</t>
          </dd>
          <dt>parent_event_hash (REQUIRED):</dt>
          <dd>
            <t>The event_hash of the immediately prior event in the events array.
For the first event (step_index = 0) the value MUST be JSON null.
This field is what makes the log a hash chain.</t>
          </dd>
          <dt>timestamp (REQUIRED):</dt>
          <dd>
            <t>An RFC 3339 timestamp with fractional seconds and "Z" timezone. The
timestamp is informational; verification does not depend on
timestamp ordering.</t>
          </dd>
          <dt>payload (OPTIONAL):</dt>
          <dd>
            <t>The event-specific data structure. The shape of payload depends on
event_type and is documented per event family. When the payload is
redacted (payload_redacted is true), the payload field MUST be
absent. When the payload is present (payload_redacted is false), the
payload field MUST contain the data over which payload_hash was
computed.</t>
          </dd>
          <dt>payload_redacted (REQUIRED):</dt>
          <dd>
            <t>A boolean. true means the producer chose not to embed payload bytes
in this event record. Verifiers MUST still recompute payload_hash
for non-redacted events (Section 7, check 7).</t>
          </dd>
          <dt>payload_hash (REQUIRED):</dt>
          <dd>
            <t>Lower-case hexadecimal SHA-256 over the RFC 8785 canonical form of
the payload. When payload is absent because the event has no payload
data at all (rather than because it is redacted), the canonical form
is canonicalize(null) and the hash is SHA-256 over that canonical
form. The payload_redacted flag distinguishes "redacted (data
existed)" from "no data."</t>
          </dd>
          <dt>event_hash (REQUIRED):</dt>
          <dd>
            <t>Lower-case hexadecimal SHA-256 over the canonical JSON form of the
event-header object, where the event-header object consists of
exactly these fields:
</t>
            <ul spacing="normal">
              <li>
                <t>event_version</t>
              </li>
              <li>
                <t>step_index</t>
              </li>
              <li>
                <t>event_type</t>
              </li>
              <li>
                <t>parent_event_hash</t>
              </li>
              <li>
                <t>timestamp</t>
              </li>
              <li>
                <t>payload_hash</t>
              </li>
            </ul>
            <t>Note: event_hash itself is NOT a field of the event-header object.
This breaks the obvious circular dependency in computing event_hash.</t>
          </dd>
        </dl>
      </section>
      <section anchor="hash-chain-rule">
        <name>Hash chain rule</name>
        <t>For every event at position i &gt; 0 in events:</t>
        <artwork><![CDATA[
events[i].parent_event_hash == events[i-1].event_hash
]]></artwork>
        <t>For event at position 0:</t>
        <artwork><![CDATA[
events[0].parent_event_hash == null
]]></artwork>
        <t>Any deviation MUST fail verification.</t>
      </section>
    </section>
    <section anchor="envelope-format">
      <name>Envelope format</name>
      <t>An envelope is a JSON object declaring the permissions and limits of
a run. The envelope is signed by the same key that signs the artifact
header. The envelope is sealed at run start; events are appended after.</t>
      <section anchor="top-level-structure-1">
        <name>Top-level structure</name>
        <artwork><![CDATA[
{
  "envelope_version": "rer-envelope/0.2",
  "permissions": {
    "allowed_models":  ["<model id>", ...],
    "allowed_tools":   ["<tool id>", ...]
  },
  "limits": {
    "max_steps":       <integer> | absent,
    "max_spend_usd":   <number>  | absent,
    "rate_limit_rpm":  <integer> | absent
  },
  "expiry":   "<RFC 3339 timestamp>" | absent,
  "metadata": { ... } | absent,
  "required_approvals":     [<ApprovalRule>, ...] | absent,   (v0.2)
  "required_signer_types":  ["<signer-type>", ...] | absent,  (v0.2)
  "signature":              "<hex Ed25519 signature>"
}
]]></artwork>
        <section anchor="field-semantics-2">
          <name>Field semantics</name>
          <dl>
            <dt>envelope_version (REQUIRED):</dt>
            <dd>
              <t>rer-envelope/0.1 or rer-envelope/0.2.</t>
            </dd>
            <dt>permissions.allowed_models (REQUIRED):</dt>
            <dd>
              <t>An ordered array of model identifier strings the run is permitted to
invoke. Order is significant for canonicalization but not for policy
semantics.</t>
            </dd>
            <dt>permissions.allowed_tools (REQUIRED):</dt>
            <dd>
              <t>An ordered array of tool identifier strings the run is permitted to
invoke.</t>
            </dd>
            <dt>limits (REQUIRED, fields OPTIONAL):</dt>
            <dd>
              <t>Implementation-enforced caps. Fields that are absent denote "no
limit on this dimension." The max_spend_usd field MAY be 0,
denoting "spending is forbidden." The max_steps and rate_limit_rpm
fields MUST be at least 1 when present.</t>
            </dd>
            <dt>expiry (OPTIONAL):</dt>
            <dd>
              <t>A wall-clock deadline after which the envelope MUST NOT authorize
further actions. Runtimes SHOULD reject envelopes whose expiry has
passed at the moment of run start; verifiers MAY surface an expired
envelope as informational and SHOULD NOT use expiry to make the
artifact fail verification, since verification can occur arbitrarily
later than the run.</t>
            </dd>
            <dt>metadata (OPTIONAL):</dt>
            <dd>
              <t>An open object. Producers MAY place application-specific data here.
Verifiers MUST treat metadata as opaque.</t>
            </dd>
            <dt>required_approvals (v0.2 only, OPTIONAL):</dt>
            <dd>
              <t>An ordered array of ApprovalRule objects describing actions that
require an explicit approval token before execution. Each
ApprovalRule MUST contain an action field naming the action requiring
approval and MAY contain tool_pattern, model_pattern, and
signer_types fields scoping the rule. signer_types values MUST be
drawn from the identifier set defined for required_signer_types
below.</t>
            </dd>
            <dt>required_signer_types (v0.2 only, OPTIONAL):</dt>
            <dd>
              <t>An ordered array of signer-type identifiers that approvers MUST
satisfy across the run as a whole. Each identifier MUST be one of
"human", "delegate", or "automated"; schema validation (check 1)
rejects other values. The semantics of "satisfy" (counting rules,
role hierarchy, threshold) are out of scope for this document.</t>
            </dd>
            <dt>signature (REQUIRED):</dt>
            <dd>
              <t>Lower-case hexadecimal Ed25519 signature, 128 hex characters,
computed over the envelope's signable bytes (Section 5.2).</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="signable-bytes">
        <name>Signable bytes</name>
        <t>The envelope is signed over its canonical form with the signature
field removed:</t>
        <artwork><![CDATA[
signable = canonicalize(envelope \ { signature })
]]></artwork>
        <t>Equivalently: copy the envelope, delete the signature field, then run
RFC 8785 canonicalization over the result. The signature is computed
over the UTF-8 bytes of the canonical string.</t>
        <t>The envelope_hash referenced from the artifact header is the SHA-256
over those same signable bytes. The envelope_hash is therefore
independent of the signature value -- substituting a different valid
signature does not change envelope_hash, but the envelope's signature
check (Section 7, check 3) will still fail because the public key the
verifier uses is the one bound to runtime.key_id, not to the swapped
signature.</t>
      </section>
    </section>
    <section anchor="cryptographic-primitives">
      <name>Cryptographic primitives</name>
      <t>This section binds the document to specific algorithms. Implementations
MUST use exactly these primitives. Algorithm agility is intentionally
not provided: the artifact format is small, the primitives are widely
supported, and a future version (rer-artifact/0.3 or later) would
declare alternative primitives in a new versioned envelope rather than
through field-level negotiation.</t>
      <section anchor="signing-ed25519">
        <name>Signing: Ed25519</name>
        <t>All signatures (envelope.signature and runtime_signature) MUST use the
Ed25519 signature scheme as specified in <xref target="RFC8032"/>. The signature
value MUST be exactly 64 bytes, encoded as 128 lower-case hexadecimal
characters in the JSON representation.</t>
        <t>The signed bytes are always the UTF-8 representation of an RFC 8785
canonical JSON string, computed over the field selection rules
specified in the appropriate section above (Section 5.2 for envelopes,
Section 6.6 for the artifact header).</t>
      </section>
      <section anchor="hashing-sha-256">
        <name>Hashing: SHA-256</name>
        <t>All hashes MUST be computed using SHA-256 as specified in
<xref target="FIPS180-4"/>. Hashes appear in JSON as 64 lower-case hexadecimal
characters representing the 32-byte digest.</t>
      </section>
      <section anchor="canonicalization-rfc-8785-jcs">
        <name>Canonicalization: RFC 8785 (JCS)</name>
        <t>All canonical JSON forms MUST be computed using JSON Canonicalization
Scheme <xref target="RFC8785"/>. The key properties this provides:</t>
        <ul spacing="normal">
          <li>
            <t>Object members are emitted in lexicographic order of UTF-16 code
units of the member name.</t>
          </li>
          <li>
            <t>Whitespace is eliminated outside string values.</t>
          </li>
          <li>
            <t>Number serialization follows ECMAScript ToString semantics with
specific normalization rules.</t>
          </li>
          <li>
            <t>String escaping is normalized.</t>
          </li>
        </ul>
        <t>This makes the byte representation of a JSON value a function only of
the value's structural content, not of the encoding choices of the
producer.</t>
      </section>
      <section anchor="key-format">
        <name>Key format</name>
        <t>For key import and export, this specification uses JSON Web Key (JWK)
<xref target="RFC7517"/> format with the OKP key type and the Ed25519 curve.</t>
        <t>A public key JWK has the form:</t>
        <artwork><![CDATA[
{ "kty": "OKP", "crv": "Ed25519", "x": "<base64url 32-byte public>" }
]]></artwork>
        <t>A private key JWK additionally includes a "d" member encoding the
32-byte private key seed:</t>
        <artwork><![CDATA[
{ "kty": "OKP", "crv": "Ed25519",
  "x": "<base64url public>", "d": "<base64url private seed>" }
]]></artwork>
        <t>Internally to a runtime or verifier implementation, keys MAY be held
as raw octet sequences. JWK is the on-the-wire form when keys are
exchanged.</t>
      </section>
      <section anchor="key-identifier-keyid">
        <name>Key identifier (key_id)</name>
        <t>The key_id field carried in the artifact's runtime object is computed
as:</t>
        <artwork><![CDATA[
key_id = base64url(SHA-256(raw_public_key_bytes))
]]></artwork>
        <t>where raw_public_key_bytes is the 32-byte Ed25519 public key in the
form defined by <xref target="RFC8032"/> Section 5.1.5. The base64url encoding
follows <xref target="RFC4648"/> Section 5 (URL-safe, padding stripped).</t>
        <t>The key_id is a stable, content-addressed identifier for the key. Two
artifacts produced under the same key will carry the same key_id. A
verifier obtains the public key out-of-band (from a key directory, a
TOFU pin, a CA-issued certificate, or any other channel appropriate
to the deployment) and confirms that the public key's key_id matches
the value embedded in the artifact.</t>
        <t>This document does not specify how public keys are distributed. The
key_id is the index into whatever distribution mechanism is in use.</t>
      </section>
      <section anchor="artifact-header-canonicalization">
        <name>Artifact header canonicalization</name>
        <t>The artifact header object -- what runtime_signature signs over -- is
a derived object containing the following members of the artifact:</t>
        <artwork><![CDATA[
header = canonicalize({ artifact_version, run_id, envelope_hash,
                        log_head_hash, runtime })
]]></artwork>
        <t>In rer-artifact/0.2 the header additionally includes the
manifest_hash member, carrying its value at signing time (null when
the artifact is not bound to a bundle, or the bundle_hash when it
is). This is the only signature-domain difference between the two
versions (Section 8.1). In rer-artifact/0.1 the member is absent
from the header, matching its absence from the artifact.</t>
        <t>The envelope object and the events array are not signed directly by
the runtime_signature; they are covered indirectly through
envelope_hash and log_head_hash, which a verifier independently
recomputes from the envelope and event bytes before checking the
signature (the "recompute, don't trust" rule in Section 7.1).</t>
        <t>The fields covered by the runtime_signature are therefore:</t>
        <ul spacing="normal">
          <li>
            <t>artifact_version</t>
          </li>
          <li>
            <t>run_id</t>
          </li>
          <li>
            <t>envelope_hash (binding the entire signed envelope)</t>
          </li>
          <li>
            <t>log_head_hash (binding the entire ordered event array)</t>
          </li>
          <li>
            <t>runtime (entire object)</t>
          </li>
          <li>
            <t>manifest_hash (rer-artifact/0.2 only; value or null)</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="verification-algorithm">
      <name>Verification algorithm</name>
      <t>A verifier MUST perform seven checks. Failure of any check MUST cause
the verification to return failure. A conforming verifier MUST NOT
short-circuit: all seven checks MUST be evaluated regardless of
earlier failures, and the verifier's output MUST include the per-check
result so consumers can distinguish, for example, a signature failure
from a chain failure.</t>
      <t>The no-short-circuit rule exists because verifier output is consumed
by downstream audit pipelines that benefit from a complete check
matrix, not a single pass/fail. The performance cost of running all
checks on an already-failing artifact is negligible compared to the
diagnostic value.</t>
      <section anchor="the-seven-checks">
        <name>The seven checks</name>
        <t><strong>Check 1 -- schema validation.</strong> The artifact, viewed as a JSON object,
MUST conform to the rer-artifact/0.1 or rer-artifact/0.2 JSON Schema.
The envelope and every event MUST conform to their corresponding
versioned schemas. Type errors, missing required fields, and
unexpected field types cause this check to fail.</t>
        <t><strong>Check 2 -- envelope hash.</strong> Recompute envelope_hash by:</t>
        <ol spacing="normal" type="1"><li>
            <t>Taking the artifact's envelope object,</t>
          </li>
          <li>
            <t>Removing the signature field,</t>
          </li>
          <li>
            <t>RFC 8785 canonicalizing the remainder,</t>
          </li>
          <li>
            <t>SHA-256 over the UTF-8 bytes of the canonical string.</t>
          </li>
        </ol>
        <t>The recomputed hash MUST equal the artifact's envelope_hash field,
compared using a constant-time hex-string equality.</t>
        <t><strong>Check 3 -- envelope signature.</strong> Verify the Ed25519 signature
artifact.envelope.signature against the public key (identified by
runtime.key_id and supplied to the verifier out-of-band) over the same
signable bytes computed in check 2.</t>
        <t><strong>Check 4 -- event chain hash.</strong> For each event at index i:</t>
        <ul spacing="normal">
          <li>
            <t>Recompute event_hash as SHA-256 over the canonical form of the
event-header subset specified in Section 4.1, which includes the
event's payload_hash field as carried. Verify it equals the
event's event_hash field.</t>
          </li>
          <li>
            <t>For i &gt; 0, verify events[i].parent_event_hash equals
events[i-1].event_hash.</t>
          </li>
          <li>
            <t>For i == 0, verify events[0].parent_event_hash is null.</t>
          </li>
        </ul>
        <t>Payload bytes themselves are not examined in this check; payload
integrity is established by check 7. For redacted events the
producer-stated payload_hash is bound through the event_hash
recomputation here and is never recomputed (the payload bytes are no
longer present).</t>
        <t>Any deviation fails this check.</t>
        <t><strong>Check 5 -- artifact header hash (log_head_hash).</strong> Verify that the
final event's event_hash equals the artifact's log_head_hash. An empty
events array fails this check.</t>
        <t><strong>Check 6 -- artifact header signature.</strong> Verify the Ed25519
runtime_signature against the public key, over the canonical form of
the artifact header as specified in Section 6.6.</t>
        <t>Important: in check 6 the verifier MUST use the freshly recomputed
envelope_hash from check 2 and the freshly recomputed log_head_hash
from check 5 -- not the values as carried in the artifact header. If
the artifact carries inconsistent values (a tampering attack that
changes envelope_hash but not envelope), the verifier independently
arrives at the correct hashes from the underlying envelope and event
bytes, then verifies the signature over those values. This is the
"recompute, don't trust" rule.</t>
        <t><strong>Check 7 -- payload hashes.</strong> For each non-redacted event, recompute
payload_hash as SHA-256 over canonicalize(payload) and confirm it
matches the event's payload_hash. For redacted events this check
trivially passes (the payload bytes are not present, so there is
nothing for the verifier to recompute -- the bound exists through the
event_hash check in step 4, which covered the producer-stated
payload_hash).</t>
      </section>
      <section anchor="result-structure">
        <name>Result structure</name>
        <t>A verifier conformant with this document MUST return a result
structure containing:</t>
        <ul spacing="normal">
          <li>
            <t>A boolean overall pass.</t>
          </li>
          <li>
            <t>A per-check boolean matrix containing exactly seven booleans, one
per check above.</t>
          </li>
          <li>
            <t>A list of human-readable reason strings describing every check
that failed.</t>
          </li>
        </ul>
        <t>The pass value MUST be true if and only if every check passed.</t>
      </section>
      <section anchor="safe-parsing">
        <name>Safe parsing</name>
        <t>Implementations MAY expose a "safe" verification entry point that
accepts arbitrary input (raw JSON string, untyped object, or any
other value) and never throws. Such an entry point applies, in order:</t>
        <ol spacing="normal" type="1"><li>
            <t>JSON parsing (failures are surfaced as schema_valid = false).</t>
          </li>
          <li>
            <t>Structural type guarding (non-object inputs fail schema_valid).</t>
          </li>
          <li>
            <t>JSON Schema validation (failures fail schema_valid).</t>
          </li>
          <li>
            <t>The full seven-check verification.</t>
          </li>
        </ol>
        <t>This is the recommended interface for verifiers that receive
artifacts from untrusted sources. A separate "strict" entry point
MAY throw on schema failure, suited for use by code that has already
validated the input.</t>
      </section>
    </section>
    <section anchor="version-02-additions">
      <name>Version 0.2 additions</name>
      <t>Version 0.2 extends 0.1 in four areas while preserving the
verification semantics of 0.1.</t>
      <section anchor="manifesthash">
        <name>manifest_hash</name>
        <t>The artifact header gains a manifest_hash field. Its value is JSON
null when the artifact is distributed standalone (without a bundle),
and equals the bundle's bundle_hash (Section 9) when distributed in a
bundle. The field MUST NOT appear in rer-artifact/0.1 artifacts.</t>
        <t>The field is excluded from runtime_signature coverage (Section 6.6).
This is intentional and is the only signature-domain difference
between 0.1 and 0.2.</t>
      </section>
      <section anchor="requiredapprovals">
        <name>required_approvals</name>
        <t>The envelope gains an optional required_approvals array. Each
ApprovalRule is a JSON object:</t>
        <artwork><![CDATA[
{
  "action":         "<action identifier>",
  "tool_pattern":   "<glob>" | absent,
  "model_pattern":  "<glob>" | absent,
  "signer_types":   ["<signer-type>", ...] | absent
}
]]></artwork>
        <t>When a run executes an action that matches an ApprovalRule, the
runtime MUST have received a valid approval token (mechanism out of
scope for this document; signing of approvals is reserved for a
future v0.3) before the action's policy event records an "allow"
decision.</t>
      </section>
      <section anchor="requiredsignertypes">
        <name>required_signer_types</name>
        <t>The envelope gains an optional required_signer_types array. Each
identifier MUST be one of "human", "delegate", or "automated"
(enforced by schema validation in check 1). The operational
semantics are deployment-specific -- the field is a contract between
the runtime and the operator's approval policy. Beyond schema
validation, verifiers do not interpret the field; it is part of the
signed envelope so its presence and content are tamper-evident.</t>
      </section>
      <section anchor="step-identity">
        <name>Step identity</name>
        <t>Events gain optional step_id, tool_call_id, and approval_id fields
inside their payloads. These are correlation identifiers for tracing
related events (a model.called and its paired model.returned; an
approval and the action it authorized). The fields are part of the
event payload, not the event header -- they affect payload_hash but
not event_hash directly. They are opaque to the verifier.</t>
      </section>
    </section>
    <section anchor="bundle-format-v02-only">
      <name>Bundle format (v0.2 only)</name>
      <t>A bundle is a portable distribution form for an artifact, a manifest,
the public key, and any blobs referenced by rer.artifact.written
events. Bundles are the recommended distribution form when artifacts
reference out-of-band payloads.</t>
      <section anchor="manifest-structure">
        <name>Manifest structure</name>
        <t>A manifest is a JSON object:</t>
        <artwork><![CDATA[
{
  "artifact_hash":        "<hex SHA-256 over artifact content>",
  "runtime_key_hash":     "<hex SHA-256 over raw public key>",
  "total_event_count":    <integer>,
  "redacted_event_count": <integer>,
  "blobs": [
    {
      "name":       "<filename or label>",
      "hash":       "<hex SHA-256 over blob bytes>",
      "size_bytes": <integer>
    },
    ...
  ],
  "bundle_hash":          "<hex SHA-256 over manifest minus bundle_hash>"
}
]]></artwork>
        <section anchor="artifacthash-manifest-field">
          <name>artifact_hash (manifest field)</name>
          <t>The manifest's artifact_hash is SHA-256 over the canonical form of
the artifact with manifest_hash and runtime_signature removed:</t>
          <artwork><![CDATA[
content_fields = artifact \ { manifest_hash, runtime_signature }
artifact_hash  = SHA-256(canonicalize(content_fields))
]]></artwork>
          <t>These two fields are excluded because manifest_hash is computed
downstream of the manifest (would-be circular) and runtime_signature
is downstream of the artifact content hash. Excluding them breaks the
circular dependency while preserving binding (the bundle_hash, which
references artifact_hash, is itself referenced by the artifact's
manifest_hash -- closing the binding from the other direction).</t>
        </section>
        <section anchor="bundlehash-manifest-field">
          <name>bundle_hash (manifest field)</name>
          <t>The manifest's bundle_hash is SHA-256 over the manifest with
bundle_hash itself removed:</t>
          <artwork><![CDATA[
self_minus_hash = manifest \ { bundle_hash }
bundle_hash     = SHA-256(canonicalize(self_minus_hash))
]]></artwork>
          <t>The bundle_hash is then referenced by the artifact's manifest_hash
field. Together this creates a closed binding: artifact carries
bundle_hash, bundle_hash is over manifest, manifest carries
artifact_hash which is over the rest of the artifact.</t>
        </section>
      </section>
      <section anchor="ten-check-bundle-verification">
        <name>Ten-check bundle verification</name>
        <t>When verifying a bundle, a conformant verifier MUST perform ten
checks (the seven artifact checks plus three bundle-specific checks).
As with single-artifact verification, no short-circuiting is
permitted: all ten checks MUST be evaluated.</t>
        <t>The ten checks are:</t>
        <t><strong>Bundle check 1 -- artifact verification.</strong> Run the full seven-check
artifact verification (Section 7) on the artifact carried in the
bundle. This check passes only if all seven artifact checks passed.</t>
        <t><strong>Bundle check 2 -- manifest self-integrity.</strong> Recompute bundle_hash
over the manifest with bundle_hash removed and confirm it matches
the manifest's bundle_hash field.</t>
        <t><strong>Bundle check 3 -- artifact content hash.</strong> Recompute the manifest's
artifact_hash by canonicalizing the artifact with manifest_hash and
runtime_signature removed, and SHA-256 over the canonical bytes.
Confirm it matches the manifest's artifact_hash.</t>
        <t><strong>Bundle check 4 -- manifest binding.</strong> Confirm
artifact.manifest_hash equals manifest.bundle_hash. This closes the
binding from artifact to manifest.</t>
        <t><strong>Bundle check 5 -- key integrity.</strong> Confirm SHA-256 over the supplied
raw public key bytes equals manifest.runtime_key_hash.</t>
        <t><strong>Bundle check 6 -- blob integrity.</strong> For each entry in manifest.blobs,
confirm that the supplied blob with that hash exists and that its
SHA-256 matches.</t>
        <t><strong>Bundle check 7 -- blob completeness.</strong> For every event in the
artifact with event_type rer.artifact.written, confirm the payload's
artifact_hash references a blob present in manifest.blobs.</t>
        <t><strong>Bundle check 8 -- event count.</strong> Confirm manifest.total_event_count
equals events.length.</t>
        <t><strong>Bundle check 9 -- redacted count.</strong> Confirm
manifest.redacted_event_count equals the number of events with
payload_redacted = true.</t>
        <t><strong>Bundle check 10 -- blob metadata.</strong> For each manifest blob, confirm
its size_bytes equals the supplied blob's byte length.</t>
        <t>A conforming verifier MUST return a ten-boolean per-check matrix and
a list of human-readable reasons for each failed check.</t>
      </section>
      <section anchor="export-form">
        <name>Export form</name>
        <t>A bundle is distributed as a directory or a tar/zip-equivalent
package containing:</t>
        <ul spacing="normal">
          <li>
            <t>artifact.json -- the RER artifact.</t>
          </li>
          <li>
            <t>manifest.json -- the manifest above.</t>
          </li>
          <li>
            <t>key.bin -- the 32-byte raw Ed25519 public key (or key.jwk -- a JWK
public key file).</t>
          </li>
          <li>
            <t><tt>blobs/&lt;hash&gt;.bin</tt> -- one file per manifest.blobs entry, named by its
hex hash.</t>
          </li>
        </ul>
        <t>The exact filesystem layout is informational; verifier interfaces
typically accept the four components as parameters rather than
prescribing a directory shape.</t>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational considerations</name>
      <section anchor="empty-and-minimal-artifacts">
        <name>Empty and minimal artifacts</name>
        <t>The smallest valid artifact contains exactly two events
(rer.run.started and rer.run.ended). An events array of length zero
MUST fail verification (check 5 cannot pass) and is not a permitted
shape. Implementations producing very short runs SHOULD still emit
both lifecycle events.</t>
      </section>
      <section anchor="time">
        <name>Time</name>
        <t>Timestamps are RFC 3339 with fractional-second precision and "Z"
timezone. Producers SHOULD use a monotonically non-decreasing
timestamp source across consecutive events. Verifiers MUST NOT use
timestamp values to gate verification; the hash chain is the
authoritative ordering primitive.</t>
      </section>
      <section anchor="redaction">
        <name>Redaction</name>
        <t>Setting payload_redacted = true and omitting the payload removes the
payload bytes from the artifact while preserving the hash binding.
This is the supported redaction primitive. Operators MUST NOT remove
events from the chain to redact -- that breaks check 4. The supported
operation is "this event happened, here is its hash chain, the
payload bytes have been withheld."</t>
        <t>A consequence is that redacted events are partially opaque: the
verifier confirms structural integrity but cannot recompute the
payload contents. Whether to trust the producer-stated payload_hash
in a redacted event is a deployment policy question -- for high-trust
deployments where the producer is the operator, this is acceptable;
for low-trust deployments, non-redacted events are required.</t>
      </section>
      <section anchor="key-rotation">
        <name>Key rotation</name>
        <t>Key rotation is supported by reference: each artifact embeds its
runtime.key_id, and a verifier obtains the public key by looking up
that key_id. When a runtime rotates keys, the new key gets a new
key_id (because key_id is content-addressed), and the operator
publishes the new key in whatever directory the verifier consults.
Old artifacts continue to verify against their original key_id;
their public key remains discoverable so long as the directory
retains it.</t>
        <t>This specification does not define a key directory format. Several
plausible options exist (a JWKS endpoint, a CT-like log, a TOFU
pinning model). The choice is deployment-specific.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <section anchor="what-the-format-establishes">
        <name>What the format establishes</name>
        <t>A successful verification establishes, with cryptographic strength:</t>
        <ul spacing="normal">
          <li>
            <t>The events have not been reordered, inserted, or removed since the
artifact was sealed.</t>
          </li>
          <li>
            <t>The envelope has not been substituted for a different envelope
since the artifact was sealed.</t>
          </li>
          <li>
            <t>The runtime that signed the artifact had access to the private key
corresponding to runtime.key_id at signing time.</t>
          </li>
          <li>
            <t>Non-redacted payloads have not been modified since the event was
sealed.</t>
          </li>
        </ul>
      </section>
      <section anchor="what-the-format-does-not-establish">
        <name>What the format does not establish</name>
        <t>A successful verification does NOT establish:</t>
        <ul spacing="normal">
          <li>
            <t>That the recorded events correspond to what actually occurred at
creation time. The runtime holds the signing key; a runtime (or an
operator with access to the key) can produce a fully valid artifact
describing events that never happened, or seal a log from which
events were omitted before signing. The hash chain makes the record
tamper-evident after sealing; it does not make the record's creation
honest. Assurance about the producing runtime's integrity must come
from outside the artifact -- for example, attestation of the runtime
build, operational controls, or cross-checks against counterparty
records.</t>
          </li>
          <li>
            <t>That the policy decisions recorded in events were correct. The
verifier sees that "policy decided allow"; it does not verify that
allow was the right answer given the envelope. Policy correctness
requires re-running the policy engine against the same envelope
and inputs, which is outside the scope of verification.</t>
          </li>
          <li>
            <t>That the model or tool responses recorded in events are themselves
truthful. The model's output is part of the signed record, but the
signature attests that the runtime saw that output, not that the
output is accurate.</t>
          </li>
          <li>
            <t>That the operator is honest about which key signed which run. The
key_id is content-addressed; if the operator publishes a key under
a misleading label, the artifact still verifies against the actual
key bytes. Operator identity binding is the job of the key
directory.</t>
          </li>
        </ul>
      </section>
      <section anchor="trust-boundary-in-the-implementation">
        <name>Trust boundary in the implementation</name>
        <t>The reference implementation enforces, as a build-time rule, that
the verifier package does not import or depend on the runtime
package. The verifier's dependencies are limited to:</t>
        <ul spacing="normal">
          <li>
            <t>RFC 8785 canonicalization.</t>
          </li>
          <li>
            <t>Node.js SubtleCrypto (or equivalent) for SHA-256 and Ed25519
verification.</t>
          </li>
          <li>
            <t>A JSON Schema validator (e.g., Ajv).</t>
          </li>
        </ul>
        <t>This constraint is the technical realization of the trust boundary.
A third party can install the verifier and check any artifact without
the operator's runtime code being present in the verification path.</t>
      </section>
      <section anchor="redaction-and-verifiability">
        <name>Redaction and verifiability</name>
        <t>Redaction trades transparency for verifiability of the chain. The
chain still proves the event happened; it no longer proves what the
event contained. Operators redacting sensitive payloads SHOULD
clearly publish their redaction policy so verifiers can evaluate
whether they accept redacted-payload artifacts as sufficient for
their use case.</t>
      </section>
      <section anchor="replay-and-uniqueness">
        <name>Replay and uniqueness</name>
        <t>The artifact format does not include a nonce or anti-replay
mechanism. run_id is implementation-defined and the verifier treats
it as opaque. Deployments needing replay protection (e.g., billing,
non-repudiation against duplicate-claim attacks) SHOULD layer a
deduplication index over run_id at the audit pipeline level.</t>
      </section>
      <section anchor="algorithm-agility">
        <name>Algorithm agility</name>
        <t>Algorithm agility is not provided at the field level. Ed25519 and
SHA-256 are the only primitives. A future revision of this document
(rer-artifact/0.3 or later) MAY define alternative primitives in a
new envelope version. Verifiers MUST reject artifacts whose version
identifiers they do not recognize.</t>
        <t>This decision trades flexibility for security predictability. The
artifact format is small; supporting algorithm negotiation in a
small format adds substantial complexity for limited benefit.
Versioning the entire envelope is the upgrade path.</t>
      </section>
      <section anchor="side-channels">
        <name>Side channels</name>
        <t>Constant-time comparisons MUST be used for all signature and hash
equality checks in the verifier. The reference implementation uses
the host platform's constant-time comparison primitive (Node.js
crypto.timingSafeEqual) for hex-encoded hash and signature
comparisons. Implementations on other platforms MUST use the
equivalent primitive.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <t>This document does not request a new IANA registration. The related
well-known URI registrations on which this work depends have been
filed and are under review at the IANA Well-Known URIs registry
<xref target="IANA-WK"/>:</t>
      <ul spacing="normal">
        <li>
          <t>agents.txt and agents.json -- filed, under review
(well-known-uris filings #72 and #73)</t>
        </li>
        <li>
          <t>ai.txt and ai.json -- filed, under review (#76 and #77)</t>
        </li>
        <li>
          <t>connect.txt, connect.json, connect-ledger.json -- filed, under
review (#81, #82, #85)</t>
        </li>
        <li>
          <t>verify.txt and verify.json -- filed, under review (#83 and #84)</t>
        </li>
      </ul>
      <t>These declarations cover the declaration-side surface (what an agent
is permitted to do, what training policies apply, how to connect,
what physical claims are verifiable). RER artifacts cover the
proof-side surface (what an agent actually did).</t>
      <t>A future revision of this document MAY register a media type for RER
artifacts (provisional candidate:
"application/vnd.rer.artifact+json"). A media type registration is
not requested at this time because operational deployments have not
yet generated the practice from which a stable registration request
should be derived.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="FIPS180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="AGENTSTXT" target="https://datatracker.ietf.org/doc/draft-car-agents-txt-wellknown/">
          <front>
            <title>AGENTS.TXT: Capability Declarations for Web Agents</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-car-agents-txt-wellknown-00"/>
        </reference>
        <reference anchor="AITXT" target="https://datatracker.ietf.org/doc/draft-car-ai-txt-wellknown/">
          <front>
            <title>AI.TXT: Training Policy, Licensing, and Attribution Declarations for AI Systems</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-car-ai-txt-wellknown-00"/>
        </reference>
        <reference anchor="CONNECTTXT" target="https://github.com/kaylacar/connect-txt">
          <front>
            <title>CONNECT.TXT: Agent Connection Declarations</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="VERIFYTXT" target="https://github.com/kaylacar/verify-txt">
          <front>
            <title>VERIFY.TXT: Physical Verification Declaration Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="W3C-VC" target="https://www.w3.org/TR/vc-data-model/">
          <front>
            <title>Verifiable Credentials Data Model</title>
            <author>
              <organization/>
            </author>
            <date year="2022" month="March"/>
          </front>
        </reference>
        <reference anchor="IANA-WK" target="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1092?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The RER artifact format was designed and developed by the author at
Tech Enrichment as part of a broader stack covering both declaration
and proof for AI agent interactions. The companion declaration
specifications appear in <xref target="AGENTSTXT"/>, <xref target="AITXT"/>, <xref target="CONNECTTXT"/>,
and <xref target="VERIFYTXT"/>.</t>
      <t>The trust-boundary discipline -- verify never imports runtime -- was
informed by long-standing practice in cryptographic software
engineering, where verification surfaces are isolated from key
material and execution surfaces. The seven-check structure with no
short-circuit, and the ten-check structure for bundles, reflects the
discipline that a verifier's value comes from telling the consumer
exactly which property failed, not from reaching a single pass/fail
decision quickly.</t>
    </section>
    <section anchor="worked-example-a-minimal-run">
      <name>Worked example: a minimal run</name>
      <t>The following non-normative example shows the smallest
verifiable artifact: a run with two lifecycle events
(rer.run.started, rer.run.ended), no model or tool calls, no redacted
events. All hash and signature values are placeholders represented as
"&lt;hex...&gt;".</t>
      <sourcecode type="json"><![CDATA[
{
  "artifact_version": "rer-artifact/0.2",
  "run_id": "01HX9C3MPN5K8VYE0G2DZ1Q7HA",
  "envelope_hash": "<hex64>",
  "log_head_hash": "<hex64>",
  "manifest_hash": null,
  "runtime": {
    "implementation": "@rer/runtime",
    "version": "0.2.0",
    "key_id": "<base64url 43 chars>",
    "algorithm": "Ed25519"
  },
  "runtime_signature": "<hex128>",
  "envelope": {
    "envelope_version": "rer-envelope/0.2",
    "permissions": {
      "allowed_models": ["claude-sonnet-4-5"],
      "allowed_tools": []
    },
    "limits": { "max_steps": 4 },
    "expiry": "2026-05-13T14:00:00.000Z",
    "signature": "<hex128>"
  },
  "events": [
    {
      "event_version": "rer-event/0.2",
      "step_index": 0,
      "event_type": "rer.run.started",
      "parent_event_hash": null,
      "timestamp": "2026-05-13T12:34:56.789Z",
      "payload": { "envelope_hash": "<hex64>",
                   "runtime_version": "0.2.0" },
      "payload_redacted": false,
      "payload_hash": "<hex64>",
      "event_hash": "<hex64>"
    },
    {
      "event_version": "rer-event/0.2",
      "step_index": 1,
      "event_type": "rer.run.ended",
      "parent_event_hash": "<hex64 -- events[0].event_hash>",
      "timestamp": "2026-05-13T12:34:57.123Z",
      "payload": { "status": "completed",
                   "reason": "no work requested",
                   "total_model_calls": 0,
                   "total_tool_calls": 0,
                   "total_spend_usd": 0 },
      "payload_redacted": false,
      "payload_hash": "<hex64>",
      "event_hash": "<hex64>"
    }
  ]
}
]]></sourcecode>
      <t>A verifier running the seven checks against this artifact, given the
correct public key, will recompute envelope_hash from the canonical
envelope-minus-signature bytes, verify the envelope signature, walk
the chain (parent_event_hash, event_hash, payload_hash for each
event), confirm the second event's event_hash equals log_head_hash,
verify runtime_signature over the artifact header, and confirm
payload hashes for both events. Every check resolves to a boolean;
the overall pass requires all seven booleans to be true.</t>
    </section>
    <section anchor="worked-example-tampering">
      <name>Worked example: tampering</name>
      <t>The following non-normative example shows two equivalence-class
attacks the seven checks catch.</t>
      <t><strong>Attack A -- event removal.</strong> Remove events[1] from the example
above. Effects:</t>
      <ul spacing="normal">
        <li>
          <t>Check 4 (chain) still passes -- events[0] alone has no parent
inconsistency.</t>
        </li>
        <li>
          <t>Check 5 (log_head_hash) fails -- events[0].event_hash no longer
equals the artifact's log_head_hash field.</t>
        </li>
        <li>
          <t>Check 6 (runtime_signature) fails -- the runtime signed over the
original log_head_hash, which no longer matches the recomputed
one.</t>
        </li>
      </ul>
      <t>The verifier returns pass = false with two failed checks identified.</t>
      <t><strong>Attack B -- payload swap on a non-redacted event.</strong> Modify events[0]
payload from {"envelope_hash": "X", ...} to {"envelope_hash": "Y",
...} without changing payload_hash. Effects:</t>
      <ul spacing="normal">
        <li>
          <t>Check 7 (payload hashes) -- recompute payload_hash from
canonical(new payload) and compare to events[0].payload_hash.
Mismatch. Fails.</t>
        </li>
        <li>
          <t>Check 4 (chain) -- unaffected: event_hash covers the carried
payload_hash field, which was not changed.</t>
        </li>
      </ul>
      <t>The verifier returns pass = false with one failed check identified.</t>
      <t>A check matrix that distinguishes (envelope failure | chain failure |
log-head failure | signature failure | payload failure) is more
informative for audit pipelines than a single pass/fail bit. That is
the operational rationale for the no-short-circuit rule.</t>
    </section>
    <section anchor="implementation-notes">
      <name>Implementation notes</name>
      <t>The reference implementation is available at
github.com/kaylacar/rer. It is structured as an npm monorepo with the
following packages relevant to this document:</t>
      <ul spacing="normal">
        <li>
          <t>@rer/core -- types, canonicalization, hashing, Ed25519, key
primitives.</t>
        </li>
        <li>
          <t>@rer/evidence -- the verifier (seven-check artifact verification,
ten-check bundle verification). Depends on @rer/core only.</t>
        </li>
        <li>
          <t>@rer/runtime -- the producer-side runtime. Depends on @rer/core;
not imported by @rer/evidence.</t>
        </li>
      </ul>
      <t>A standalone verifier (kaylacar/rer-verify) packages the verifier
with zero JavaScript runtime dependencies beyond Node.js's built-in
crypto and a JCS implementation. It is the operational realization
of the "anyone can check a proof without trusting the producer"
property.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA719eXPbVpbv//gUKKZqIuaRtCSvkZPUqBVl2lnsjK3E3Z2X
8gNJUEIMARwAlKx43J/9nd9Z7gJAsqdmalJdbZEE7nb29c7n86QrujI/Sicv
T1+mL3dVetx0xSZbdel3dXOZdUfpX7P2Yn5ykRVVvp6lr4pz+jd9ma/qZt2m
9SY9fpY+qzZ5k1erPD19l692XVFXkyRbLpv86iht8mae6aDJul5V2SXNt26y
TTdfZc08/H2+v5+ss45+P9w/fDTffzQ/OExW9MV53dwcpUW1qZNi2xylXbNr
u8P9/S/3D5OsybOj9Hi7LQt6lOZu06zCErNyflZc5sl13bw9b+rd9ohWus63
Of1f1aWvdsvLom3phSR5m9/QU+ujJE3n2FF2Tk+0/CnbrYuO/1o1N9uuPm+y
7UWxon2t8mKrD13QIaUrHBJ/PF0fPnx48CX//f3JK/63cIfkR6RDT5K2o+W+
ycq6on3f5G2SbAsspKtX8jlN27rpmnzTus83l/5jku26i7o50lno2x8W6UnW
rIuyrOnLNJUj/yG7KbP4h7o5z6riTz61o/QsX12kp1VTrC4uafv8RH6ZFeVR
uqqrjuDzFkMQ0Nb/eo7vF6v6MkkqRpTiKscKXn53cnhw8KX++eTg8QP7c//+
of75+OHBY/v28ZOH+ueDRw+e4M/vnv386uDJ/pxfpFNQ/HxFiNXkjI3pK5wY
rSLde/XXV9MJP+cPAf/NsTV66zlvLSsJ8C2NtOtyoKy9L4iCbVd1WZ/fyEiG
gAcP5/tPZA1Zc54TKVx03bY9unevuiq3u2W7qIq2W5zXV/fwB765h8Xfe/7s
1dkCfy14H4vtepMkwN3gnI7/7fT52auzv53Fu5SvF/ieILXNlkVZdDfpt/mq
zBpFbhonfZ0v02PG0cnoCmkPWddkq7d5syjybrOg47hHxHfP052g+Lx7182v
87J8W9XX1b3oAA4f8cc2b4q8xfrtdJ9VXd5UeTf/FqOFxDw2KIiaNvxsuNln
stGzhuimqM7Tn2si4ZtZ+mOxyiua8XzGADruuqZYMlsZngQR66ubtssv/xsn
UfxPn0IxdgInL54/Pz05GxyDfi9nwUBNT+qqyleDDY/v8LzoLnZL0OI9o897
KxkAyxhu5tfTl8+++/tgHfK1LOPni5uWuGmZ/krb3ihfDdfiaOjT13SFoW7G
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
B4YE3y5HuXziWblFQLSZiWredhpBKoRwHoHBNXojeKYUv2ZlZMr9kp4vUFjV
bER+bNQgLRX5WQQm0cEwAkLYE+zRhcPoJFvSKJGYYVnolPeZTwFfPHLJbj02
OPUONQa/sUMGP1cZeIvFrX7HAWJzgPYAmcT1nTx03gZFWHwi9BLB7+OQcsds
Spyl76yL87ztZPUnPVlz5N3ie9+fvJrKbkb8s7fujZ/oD5u8EswNqmNdehJ3
5Milq4qV5oOBtJxs/kL8cpeIPGgjg1zNYTqQMn9XrBxfZC0Q+AQ8O3jEvUpI
9dhVReeEoAzEsUgkmL++KDoJSnKyIIzOigPZpChxHp3G31UZozees4+J21J5
CS2pL216evLT8SuyEbZdela/kle97qYVt44fcwM3NwbjL2bQ98jYyLZqL9uT
+drqJHxskGE6QlMCCWEAYKGVYLQULm8SF46M28FoMY7IJJcWSieJlawuanS2
MN+8xYgElX4gUJqPFU5egFYKwKVS7x3+nI2lILCc5NWivRrG2fv+9Q/ThLEF
Tes+fDDx4RS5Fz/8LALXgn740jgm2apXOZcsB6KZhuQAjaQqNZeWnpRO3nZw
901oSKjvq+YKnyw9jb55xznRPunaCEkG/2aSqpvsGDLmCozG5vOxcckQKXdr
rnabrCeGie5wcaJu5GCcNnf66UfXCjukv1pbJSyT/k86Dabw25D+arxkzo+w
pEmCqVNt4hTIGRbamt/ngvhyQgeNlMGaeFHnEmpIicCpOJXI1xKJlg5VmEdC
RVH+TtsQePQKUypFd5q6Ol2f5eirfyK27evIzdkfKs6ZhTZ0qK99guSesus9
2tAbOc03eIpF3FRtAAlIjT1h2709e1JXmvAhBNk6gVwP8gUPFg99xo/A0XAo
MT4UJXK6rO29X17+OG+zDVkkW2AmmBPxGuib00V0kFJQzqWAM2MJc63Yxsl6
OJhwlCTQ6zqoVnEFoT4VxEVEWJ0GoOJIyRv0sTn2GnS9hAdjUNgWpr7ssZmS
8fdrQqVVVzfoP5Ocvfjul5QYKCpfT47nmvGzgqRhziPVwNzaijU+YFtFCl6g
MCSqlPv+QFOtRKw2BWSg60PhF0dopodI/IqkXus5rYTP10PUHHRmcUaMMMqb
9KK+DubQlkw+61vSNjzw2AEjmW4V7QHZJNyQIyzrTF27IdHjwYaF1I579l7f
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

-->

</rfc>
