<?xml version='1.0' encoding='UTF-8'?>
<rfc ipr="trust200902" docName="draft-wang-jep-receipt-profile-01" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <front>
    <title abbrev="JEP Receipt Profile">JEP Receipt Profile: Verifiable Behavior and Evidence Receipts</title>
    <seriesInfo name="Internet-Draft" value="draft-wang-jep-receipt-profile-01"/>
    <author initials="Y." surname="Wang" fullname="Yuqiang Wang">
      <organization/>
      <address>
        <email>signal@humanjudgment.org</email>
        <uri>https://github.com/hjs-spec</uri>
      </address>
    </author>
    <date year="2026" month="October" day="5"/>
    <keyword>JEP</keyword>
    <keyword>receipts</keyword>
    <keyword>evidence</keyword>
    <keyword>AI agents</keyword>
    <abstract>
      <t>This document defines JEP Receipt Profile 1 (JEP-RP-1), a minimal receipt and evidence profile for the Judgment Event Protocol (JEP).</t>
      <t>JEP-RP-1 binds a JEP event to one digest-addressed receipt record through a critical JEP extension. It defines a small behavior-record format, portable receipt manifests and bundles, and independent receipt-validation checks. JEP remains authoritative for event verbs, Event Identity, Event Hash, signature processing, references, extension processing, validation modes, and acceptance semantics.</t>
      <t>Receipt records are technical evidence about observable behavior and related artifacts. JEP-RP-1 does not assign legal liability, prove subjective intent, establish authorization validity, determine causality or factual truth, define governance outcomes, or establish regulatory compliance.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>AI agents and automated services increasingly act across platforms, organizations, tools, and jurisdictions. Operators, counterparties, auditors, and downstream systems may need a portable record showing that a specific JEP event was cryptographically bound to a specific behavior or receipt record.</t>
      <t>JEP-RP-1 provides that receipt layer.</t>
      <t>The narrow profile question is:</t>
      <sourcecode type="text">Which JEP event was signed,
which receipt record was bound to it,
and can that binding be independently revalidated?</sourcecode>
      <t>The profile deliberately does not answer whether the recorded action was correct, authorized, fair, lawful, causally complete, or sufficient for an external policy.</t>
      <t>JEP Profiles <xref target="JEP-PROFILES"/> defines the general profile-selection and composition model. JEP Conformance <xref target="JEP-CONFORMANCE"/> defines executable Core validation-result and test-harness conventions used by Receipt Profile implementations.</t>
      <t>Earlier work used the technical name HJS in <tt>draft-wang-hjs-accountability</tt>. This document uses a new Internet-Draft filename and is intended to replace that draft series. The protocol component name is JEP Receipt Profile. Organizational names are outside the protocol namespace.</t>
      <t>Where this document conflicts with JEP-Core <xref target="JEP"/>, JEP-Core controls.</t>
    </section>
    <section anchor="requirements">
      <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>
      <t>Some examples use the single-backslash line-folding convention in <xref target="RFC8792"/>. A displayed folding header and continuation backslashes are presentation only and MUST be removed by unfolding before parsing an example as JSON.</t>
    </section>
    <section anchor="scope-layering">
      <name>Scope and Layering</name>
      <section anchor="defines">
        <name>JEP-RP-1 Defines</name>
        <t>JEP-RP-1 defines:</t>
        <ul spacing="normal">
          <li>one explicit Receipt Profile identifier;</li>
          <li>one critical receipt-binding extension;</li>
          <li>one minimal behavior-record format;</li>
          <li>one receipt-manifest format;</li>
          <li>receipt-bundle packaging semantics;</li>
          <li>independent receipt-validation checks;</li>
          <li>privacy and non-inference requirements.</li>
        </ul>
      </section>
      <section anchor="non-goals">
        <name>JEP-RP-1 Does Not Define</name>
        <t>JEP-RP-1 does not define:</t>
        <ul spacing="normal">
          <li>new JEP verbs;</li>
          <li>an independent signature format;</li>
          <li>a replacement for Event Identity or Event Hash;</li>
          <li>chain causality or complete-log semantics;</li>
          <li>authorization or delegation validity;</li>
          <li>legal liability, fault, intent, negligence, consent, fairness, or harm;</li>
          <li>regulatory compliance;</li>
          <li>monitoring duties, sanctions, remedies, or appeal rights;</li>
          <li>a global identity or trust framework;</li>
          <li>a mandatory archive format;</li>
          <li>a global model, tool, risk, or policy taxonomy.</li>
        </ul>
      </section>
      <section anchor="jep-ownership">
        <name>JEP Ownership</name>
        <t>JEP-Core is authoritative for:</t>
        <ul spacing="normal">
          <li>J, D, T, and V semantics;</li>
          <li>required Core event fields;</li>
          <li>Event Identity <tt>(who,id)</tt>;</li>
          <li>Event Hash;</li>
          <li>the JEP Signing Payload;</li>
          <li>signature processing;</li>
          <li>
            <tt>ref</tt>;</li>
          <li>
            <tt>ext</tt> and <tt>ext_crit</tt>;</li>
          <li>independent Core validation checks;</li>
          <li>validation modes;</li>
          <li>acceptance outcomes and idempotent acceptance.</li>
        </ul>
        <t>JEP-RP-1 MUST NOT redefine those semantics.</t>
      </section>
      <section anchor="actor-signer-agent">
        <name>Actor, Signer, and Observed Agent</name>
        <t>JEP-RP-1 distinguishes three concepts:</t>
        <ul spacing="normal">
          <li>
            <strong>JEP actor</strong>: the actor claimed by the JEP <tt>who</tt> field;</li>
          <li>
            <strong>signer</strong>: the key holder that produced the JEP signature;</li>
          <li>
            <strong>observed agent</strong>: the AI agent, runtime, service, or automated component described by the behavior record.</li>
        </ul>
        <t>These MAY refer to the same entity, but JEP-RP-1 MUST NOT assume that they do.</t>
        <t>Actor/key binding is determined by the selected trust profile.</t>
        <t>The observed-agent identifier is evidence content. It does not establish that the observed agent controlled the signing key or emitted the JEP event.</t>
      </section>
    </section>
    <section anchor="receipt-identifiers">
      <name>Profile and Extension Identifiers</name>
      <section anchor="profile-id">
        <name>Receipt Profile Identifier</name>
        <t>The JEP-RP-1 profile identifier is:</t>
        <sourcecode type="text">https://humanjudgment.org/jep/profiles/receipt/1/draft-01</sourcecode>
        <t>The human-readable label <tt>JEP-RP-1</tt> identifies the record-format family. The URI above identifies the specific experimental semantic contract first defined in this revision. The suffix <tt>draft-01</tt> is a literal part of that identifier, not a negotiation parameter or an instruction to fetch the latest draft.</t>
        <t>The profile identifier is a publisher-controlled HTTPS URI. Implementations MUST compare it as an exact string. Dereferencing it is not required for validation and MUST NOT select different rules. Documentation at the URI SHOULD remain available; redirects or document updates MUST NOT change the identified semantic contract.</t>
      </section>
      <section anchor="binding-ext-id">
        <name>Receipt-Binding Extension Identifier</name>
        <t>The JEP-RP-1 receipt-binding extension identifier is:</t>
        <sourcecode type="text">https://humanjudgment.org/jep/extensions/receipt-binding/1</sourcecode>
        <t>An event claiming JEP-RP-1 conformance MUST carry this extension under JEP <tt>ext</tt> and MUST list the identifier in <tt>ext_crit</tt>.</t>
        <t>A verifier that does not understand this critical extension cannot claim successful JEP-RP-1 validation.</t>
        <t>Unknown critical-extension handling remains a JEP-Core requirement: an unknown critical receipt extension causes <tt>extension_processing</tt> to fail. It MUST NOT be downgraded to a successful Core result or merely ignored.</t>
      </section>
      <section anchor="version-boundary">
        <name>Version and Naming Boundary</name>
        <t>JEP-RP-1 is not wire-compatible with the HJS-Core-1 binding model used by <tt>draft-wang-hjs-accountability-05</tt>.</t>
        <t>HJS-Core-1 commonly placed an external record digest in JEP <tt>what</tt>. That model is not a valid generic binding rule for JEP-Core 0.7 because D, T, and V have verb-specific required <tt>what</tt> members.</t>
        <t>JEP-RP-1 therefore moves receipt binding into a critical JEP extension and leaves Core <tt>what</tt> semantics entirely under JEP-Core.</t>
        <t>Historical HJS-Core-1 receipts MUST NOT be silently rewritten as JEP-RP-1 receipts.</t>
        <t>The Receipt Profile identifier is distinct from the optional HJS Archive and Privacy Profile family identifier <tt>jep-profile:hjs-archive:1</tt> in <xref target="JEP-PROFILES"/>. Neither identifier is an alias for, or implicitly selects, the other.</t>
        <t>Revision -00 used <tt>https://humanjudgment.org/jep/profiles/receipt/1</tt>. This revision uses the distinct identifier in <xref target="profile-id"/> because it adds constraints and resolves previously unspecified behavior. The two identifiers MUST NOT be treated as aliases. The receipt-binding extension identifier remains unchanged; its signed <tt>profile</tt> member selects the contract. The record-format markers <tt>"1"</tt> do not independently select a profile.</t>
        <t>A verifier MUST explicitly select the supported Receipt Profile contract in its validation context and compare it with the signed extension value. The selected identifier determines these rules without a separate agreement on an Internet-Draft revision. An absent selection leaves <tt>profile-binding</tt>
          <tt>indeterminate</tt>; an explicit selection that conflicts with the signed value makes it <tt>fail</tt>. Independently established failures retain precedence. A verifier MUST NOT try older profiles after failure, infer a version from the first passing rule set, or fetch an identifier and execute newly supplied rules.</t>
        <t>A handler that recognizes the receipt extension but cannot process its selected profile contract MUST NOT mark critical-extension processing successful. An unsupported profile contract leaves that processing unresolved under JEP-Core; an unknown critical extension itself still fails as required by JEP-Core. When validation explicitly requests this profile, a different signed profile value fails <tt>profile-binding</tt>. These cases MUST remain distinguishable in the report.</t>
        <t>Once published, this identifier MUST retain the semantic contract defined here. An editorial revision that preserves that contract MAY keep the identifier. A materially incompatible contract MUST use a new profile identifier, including during experimentation. A later stable specification MUST NOT silently redirect, alias, or reinterpret older identifiers. This follows the versioning model in <xref target="JEP-PROFILES"/>.</t>
        <t>Historical artifacts and reports MUST retain their original bytes, identifiers, and declared rules. Implementations MAY separately support -00. Migrating to this profile requires a new binding event carrying its identifier and a conforming primary record; the old event is not edited or relabeled. A behavior record already meeting these rules may retain its content and digest. A manifest contains the profile identifier, so migration changes its content and digest. An evaluation of old record content against new rules is not proof that the old signed event claimed the new profile. See <xref target="compatibility-table"/>.</t>
      </section>
    </section>
    <section anchor="event-model">
      <name>Receipt Event Model</name>
      <section anchor="receipt-event">
        <name>Receipt Event</name>
        <t>A JEP-RP-1 Receipt Event is a JEP-Core event that:</t>
        <ul spacing="normal">
          <li>validates under the requested JEP validation mode and selected profiles;</li>
          <li>carries the JEP-RP-1 receipt-binding extension;</li>
          <li>lists that extension in <tt>ext_crit</tt>;</li>
          <li>binds exactly one primary receipt record by digest.</li>
        </ul>
        <t>The underlying JEP verb remains authoritative.</t>
      </section>
      <section anchor="verbs">
        <name>Use of J, D, T, and V</name>
        <t>JEP-RP-1 does not assign new meanings to J, D, T, or V.</t>
        <t>A producer MUST satisfy the JEP-Core requirements for the selected verb before receipt binding is considered.</t>
        <t>In particular:</t>
        <ul spacing="normal">
          <li>a D event MUST retain the Core D <tt>what.delegatee</tt> and <tt>what.scope</tt> semantics;</li>
          <li>a T event MUST retain the Core T <tt>what.termination_scope</tt> and <tt>ref</tt> semantics;</li>
          <li>a V event MUST retain the Core V <tt>what.verification_scope</tt>, <tt>what.result</tt>, and <tt>ref</tt> semantics.</li>
        </ul>
        <t>Receipt metadata MUST NOT replace those Core fields.</t>
      </section>
      <section anchor="who">
        <name>
          <tt>who</tt>
        </name>
        <t>The JEP <tt>who</tt> field identifies the actor claimed by the Receipt Event.</t>
        <t>JEP-RP-1 MUST NOT describe <tt>who</tt> as a verified signer identity unless the applicable actor-binding check actually passed.</t>
        <t>
          <tt>who</tt> SHOULD NOT contain plaintext personal information unless the deployment requires that form and has an appropriate privacy basis.</t>
      </section>
      <section anchor="ref">
        <name>
          <tt>ref</tt>
        </name>
        <t>JEP-RP-1 uses JEP <tt>ref</tt> exactly as defined by JEP-Core.</t>
        <t>A logical reference to another JEP event SHOULD use Event Identity. An optional Event Hash MAY pin an exact signed artifact.</t>
        <t>JEP-RP-1 MUST NOT use Event Hash as a substitute for stable Event Identity when the reference is logically about an event.</t>
        <t>The presence of a JEP reference does not establish causality, completeness, authorization, endorsement, or legal effect.</t>
      </section>
    </section>
    <section anchor="binding-extension">
      <name>Receipt-Binding Extension</name>
      <section anchor="extension-value">
        <name>Extension Value</name>
        <t>The receipt-binding extension value MUST be a JSON object containing:</t>
        <ul spacing="normal">
          <li>
            <tt>profile</tt>
          </li>
          <li>
            <tt>record_type</tt>
          </li>
          <li>
            <tt>record_digest</tt>
          </li>
          <li>
            <tt>media_type</tt>
          </li>
        </ul>
        <t>
          <tt>profile</tt> MUST equal <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01</tt>.</t>
        <t>
          <tt>record_type</tt> MUST be one of:</t>
        <ul spacing="normal">
          <li>
            <tt>behavior</tt>
          </li>
          <li>
            <tt>receipt-manifest</tt>
          </li>
        </ul>
        <t>
          <tt>record_digest</tt> MUST be the <tt>sha256:</tt> digest string defined in <xref target="json-input"/> for the entire primary record. Other algorithms require a separately selected specification and are not baseline JEP-RP-1 conformance.</t>
        <t>
          <tt>media_type</tt> MUST equal the string <tt>application/json</tt> for either baseline primary record type. The declared <tt>record_type</tt> MUST agree with the supplied record format; a verifier MUST NOT infer a different type to make a record pass.</t>
        <t>The extension MAY additionally contain <tt>record_uri</tt>. If present, <tt>record_uri</tt> is a retrieval hint only. Validation MUST NOT depend solely on trusting the retrieved location.</t>
        <t>
          <tt>record_uri</tt>, when present, MUST be a non-empty string containing a URI as defined in <xref target="RFC3986"/>. Retrieval is optional and subject to local access policy; the URI is not an integrity substitute.</t>
      </section>
      <section anchor="extension-example">
        <name>Extension Example</name>
        <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "ext": {
    "https://humanjudgment.org/jep/extensions/receipt-binding/1": {
      "profile": "https://humanjudgment.org/jep/profiles/receipt/1/\
draft-01",
      "record_type": "behavior",
      "record_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "media_type": "application/json"
    }
  },
  "ext_crit": [
    "https://humanjudgment.org/jep/extensions/receipt-binding/1"
  ]
}</sourcecode>
        <t>The example digest is illustrative and is not a test vector.</t>
      </section>
      <section anchor="one-primary">
        <name>One Primary Record</name>
        <t>Each JEP-RP-1 Receipt Event binds exactly one primary receipt record through the receipt extension.</t>
        <t>Additional evidence objects are referenced from that primary record or a receipt manifest. This rule avoids ambiguity about which object the Receipt Event primarily authenticates.</t>
      </section>
      <section anchor="json-input">
        <name>JSON Input and Digest Rules</name>
        <t>The rules in this section apply to complete behavior-record and receipt-manifest JSON values, including all nested values and any additional members. The JEP event itself remains subject to the JEP-Core input and signing rules.</t>
        <t>Serialized record input MUST be UTF-8 JSON conforming to <xref target="RFC8259"/>, the I-JSON restrictions in <xref target="RFC7493"/>, and the input requirements of <xref target="RFC8785"/>. The top-level value MUST be an object. An implementation MUST reject an input that cannot be processed in this domain; it MUST NOT repair an invalid input and then report the original input as valid.</t>
        <t>Duplicate object member names MUST be rejected at every nesting level during parsing, before constructing a map that could discard duplicates. Name comparison takes place after JSON escape decoding: <tt>"a"</tt> and <tt>"\u0061"</tt> are the same name. A parsed-object API MUST require an equivalent guarantee from its input parser; a map alone cannot establish that the original input had no duplicates.</t>
        <t>Invalid UTF-8, invalid Unicode data such as an unpaired surrogate, Unicode noncharacters prohibited by I-JSON, invalid JSON number syntax, and non-finite numbers MUST be rejected. Numeric values MUST be handled using the IEEE 754 binary64 model required by JCS. Inputs that overflow that finite domain MUST be rejected. Implementations MUST NOT substitute an arbitrary-precision JSON serializer for the JCS number serialization rules.</t>
        <t>The digest input is the complete top-level record JSON value, not a named subobject and not a serialization containing only recognized members. Every accepted member and value contributes to the digest. Structural validation MUST NOT mutate this value. Implementations MUST NOT remove members, insert defaults, omit explicit <tt>null</tt> values, change array order, normalize Unicode, coerce strings to numbers, or otherwise transform the value before hashing, except for processing prescribed by RFC 8785.</t>
        <t>This rule does not preserve JSON whitespace, escape spelling, object member order, or number spelling. JCS specifies their serialization, including UTF-16 code-unit ordering of object names, the serialization of negative zero as <tt>0</tt>, and the binary64 handling and serialization of numbers. It preserves array order and performs no Unicode normalization. A need to preserve precision beyond binary64 must be addressed when constructing the record, for example with an application-defined string representation; a verifier MUST NOT silently convert a numeric member to a string.</t>
        <t>An optional member that is absent is different from a present member with the value <tt>null</tt>. If the declared type of a member excludes <tt>null</tt>, its presence with that value is a structure error, not a request to remove the member. Additional members are permitted unless an explicitly selected companion profile restricts them. A baseline verifier MUST retain them for canonicalization, MUST NOT assign them unstated baseline semantics, and MUST NOT claim that companion semantics were checked when they were not.</t>
        <t>The baseline calculation is:</t>
        <sourcecode type="text">canonical_bytes = UTF8(RFC8785(record))
digest_bytes = SHA-256(canonical_bytes)
digest_text = "sha256:" + lowercase_hex(digest_bytes)</sourcecode>
        <t>
          <tt>canonical_bytes</tt> is exactly the UTF-8 output of JCS, with no byte order mark, trailing newline, length prefix, or additional envelope. An API that already returns the JCS UTF-8 octets MUST NOT UTF-8 encode those octets a second time. The textual representation MUST contain exactly the <tt>sha256:</tt> prefix followed by 64 lowercase hexadecimal digits. A verifier MUST compare the recomputed digest, not the source JSON text or a retrieval URI.</t>
        <t>These rules specify an algorithm, not an implementation dependency. A conforming implementation can use any implementation that produces the required bytes and rejects invalid inputs.</t>
      </section>
    </section>
    <section anchor="behavior-records">
      <name>Behavior Records</name>
      <section anchor="behavior-shape">
        <name>Required Shape</name>
        <t>A JEP-RP-1 behavior record MUST be a JSON object containing:</t>
        <ul spacing="normal">
          <li>
            <tt>jep_receipt_record</tt>
          </li>
          <li>
            <tt>record_type</tt>
          </li>
          <li>
            <tt>agent</tt>
          </li>
          <li>
            <tt>action</tt>
          </li>
          <li>
            <tt>created_at</tt>
          </li>
          <li>
            <tt>evidence</tt>
          </li>
        </ul>
        <t>
          <tt>jep_receipt_record</tt> MUST equal <tt>"1"</tt>.</t>
        <t>
          <tt>record_type</tt> MUST equal <tt>"behavior"</tt>.</t>
        <t>
          <tt>agent</tt> MUST be a JSON object containing a non-empty string <tt>id</tt>. <tt>agent.role</tt> and <tt>agent.deployment_id</tt> MAY be present as non-empty strings.</t>
        <t>
          <tt>action</tt> MUST be a JSON object containing a non-empty string <tt>type</tt>. Additional action fields are deployment-defined.</t>
        <t>
          <tt>created_at</tt> MUST be a non-negative integer representing declared Unix seconds for record creation. It is not trusted time or proof of freshness.</t>
        <t>
          <tt>evidence</tt> MUST be a JSON array of zero or more Evidence Descriptors.</t>
        <t>The record MAY additionally contain:</t>
        <ul spacing="normal">
          <li>
            <tt>human_participants</tt>
          </li>
          <li>
            <tt>context</tt>
          </li>
          <li>
            <tt>redaction</tt>
          </li>
        </ul>
        <t>No other top-level members are defined by JEP-RP-1. Additional structured content SHOULD be placed in evidence objects or defined by an explicitly selected companion profile.</t>
      </section>
      <section anchor="evidence-desc">
        <name>Evidence Descriptor</name>
        <t>An Evidence Descriptor MUST be a JSON object containing:</t>
        <ul spacing="normal">
          <li>
            <tt>kind</tt>
          </li>
          <li>
            <tt>digest</tt>
          </li>
        </ul>
        <t>
          <tt>kind</tt> MUST be a non-empty string describing the evidence class.</t>
        <t>
          <tt>digest</tt> MUST be an algorithm-tagged digest string.</t>
        <t>An Evidence Descriptor MAY additionally contain:</t>
        <ul spacing="normal">
          <li>
            <tt>media_type</tt>
          </li>
          <li>
            <tt>uri</tt>
          </li>
          <li>
            <tt>redaction</tt>
          </li>
        </ul>
        <t>
          <tt>media_type</tt>, when present, MUST be a non-empty string.</t>
        <t>
          <tt>uri</tt>, when present, is a retrieval hint. A verifier MUST NOT treat URI dereference success as evidence-integrity success.</t>
        <t>
          <tt>redaction</tt>, when present, SHOULD be one of:</t>
        <ul spacing="normal">
          <li>
            <tt>none</tt>
          </li>
          <li>
            <tt>partial</tt>
          </li>
          <li>
            <tt>digest-only</tt>
          </li>
          <li>
            <tt>withheld</tt>
          </li>
        </ul>
        <t>A companion profile MAY define additional redaction values.</t>
        <t>Each descriptor is an object. Its <tt>digest</tt> identifies the exact evidence artifact octets under <xref target="artifact-digests"/>. For the baseline it MUST use <tt>sha256:</tt> followed by 64 lowercase hexadecimal digits. <tt>uri</tt> MUST be a non-empty URI string if present. <tt>redaction</tt> MUST be a non-empty string if present. Additional redaction labels require an explicitly selected companion profile for their interpretation; a label alone does not verify a redaction operation.</t>
      </section>
      <section anchor="human-participant">
        <name>Human Participant Reference</name>
        <t>
          <tt>human_participants</tt>, when present, MUST be an array of structured references.</t>
        <t>Each reference MUST contain:</t>
        <ul spacing="normal">
          <li>
            <tt>role</tt>
          </li>
          <li>
            <tt>reference_type</tt>
          </li>
        </ul>
        <t>
          <tt>role</tt> and <tt>reference_type</tt> MUST be non-empty strings.</t>
        <t>If <tt>reference_type</tt> is not <tt>withheld</tt>, the object MUST contain <tt>reference</tt>.</t>
        <t>If <tt>reference_type</tt> is <tt>withheld</tt>, <tt>reference</tt> MUST be absent.</t>
        <t>A reference MAY contain <tt>privacy_mode</tt> and <tt>salt_holder</tt>.</t>
        <t>JEP-RP-1 does not guarantee anonymity or unlinkability. Timing, metadata, content similarity, device identifiers, storage locations, or salt reuse can create linkability.</t>
        <t>Each reference MUST be an object. <tt>reference</tt>, when required, MUST be a non-empty string. <tt>privacy_mode</tt> and <tt>salt_holder</tt>, when present, MUST be non-empty strings. Their presence describes a reference method or salt custodian; it is not evidence that an identity, privacy claim, or salt-management procedure has been verified.</t>
      </section>
      <section anchor="context-redaction">
        <name>Context and Redaction</name>
        <t>
          <tt>context</tt>, when present, MUST be a JSON object whose semantics are defined by the deployment or companion profile.</t>
        <t>
          <tt>redaction</tt>, when present, MUST be a JSON object describing minimization or redaction applied to the behavior record or its referenced evidence.</t>
        <t>The presence of a redaction descriptor does not prove that redaction was legally required, sufficient, complete, or correctly performed.</t>
      </section>
      <section anchor="behavior-digest">
        <name>Behavior Record Digest</name>
        <t>The Behavior Record Digest MUST be calculated using the complete behavior-record value and the exact input, canonicalization, SHA-256, and textual-encoding rules in <xref target="json-input"/>. In particular, <tt>evidence</tt>, <tt>human_participants</tt>, <tt>context</tt>, <tt>redaction</tt>, and accepted additional fields are included when present.</t>
        <t>The receipt-binding extension is part of the JEP event, not a wrapper to add to the behavior record. The behavior-record digest MUST NOT be calculated by applying the JEP signing-payload rule that omits <tt>sig</tt>; there is no such field exclusion for receipt records.</t>
        <t>A behavior record MUST NOT embed the Event Hash of the JEP event that binds it, because doing so would create a circular artifact dependency.</t>
      </section>
    </section>
    <section anchor="manifests">
      <name>Receipt Manifests</name>
      <section anchor="manifest-shape">
        <name>Manifest Shape</name>
        <t>A JEP-RP-1 receipt manifest MUST be a JSON object containing:</t>
        <ul spacing="normal">
          <li>
            <tt>jep_receipt_manifest</tt>
          </li>
          <li>
            <tt>profile</tt>
          </li>
          <li>
            <tt>root_event</tt>
          </li>
          <li>
            <tt>events</tt>
          </li>
          <li>
            <tt>records</tt>
          </li>
          <li>
            <tt>created_at</tt>
          </li>
        </ul>
        <t>
          <tt>jep_receipt_manifest</tt> MUST equal <tt>"1"</tt>.</t>
        <t>
          <tt>profile</tt> MUST equal <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01</tt>.</t>
        <t>
          <tt>root_event</tt> MUST be an Event Descriptor.</t>
        <t>
          <tt>events</tt> MUST be a non-empty array of Event Descriptors.</t>
        <t>
          <tt>records</tt> MUST be a non-empty array of Record Descriptors.</t>
        <t>
          <tt>created_at</tt> MUST be a non-negative integer representing declared Unix seconds for manifest creation. It is not trusted time.</t>
        <t>A receipt manifest MAY additionally contain:</t>
        <ul spacing="normal">
          <li>
            <tt>external_refs</tt>
          </li>
          <li>
            <tt>redaction</tt>
          </li>
        </ul>
        <t>
          <tt>external_refs</tt>, when present, MUST be an array of Evidence Descriptors as defined in <xref target="evidence-desc"/>. <tt>redaction</tt>, when present, MUST be an object with the limitations in <xref target="context-redaction"/>. Additional members follow <xref target="json-input"/>.</t>
      </section>
      <section anchor="event-desc">
        <name>Event Descriptor</name>
        <t>An Event Descriptor MUST contain <tt>event_identity</tt>:</t>
        <sourcecode type="json">{
  "event_identity": {
    "who": "did:example:agent-123",
    "id": "urn:uuid:018f4f8d-7c63-7c2e-9b43-4ef657eec1c0"
  }
}</sourcecode>
        <t>The Event Descriptor and its <tt>event_identity</tt> member MUST each be objects. The <tt>who</tt> and <tt>id</tt> values MUST satisfy the corresponding JEP-Core field rules, including a non-empty ASCII <tt>id</tt>. Comparison uses the exact JEP Event Identity values; a verifier MUST NOT normalize, case-fold, or substitute an Event Hash for them.</t>
        <t>An Event Descriptor MAY additionally contain:</t>
        <ul spacing="normal">
          <li>
            <tt>event_hash</tt>
          </li>
          <li>
            <tt>uri</tt>
          </li>
        </ul>
        <t>
          <tt>event_hash</tt>, when present, pins one exact signed event artifact.</t>
        <t>
          <tt>uri</tt>, when present, is only a retrieval hint.</t>
        <t>Every Event Identity in <tt>events</tt> MUST be unique within the manifest.</t>
        <t>
          <tt>root_event.event_identity</tt> MUST equal one Event Identity listed in <tt>events</tt>.</t>
        <t>If <tt>root_event.event_hash</tt> is present, it MUST equal the Event Hash for the corresponding exact signed artifact, except as prohibited by <xref target="circularity"/>.</t>
        <t>
          <tt>event_hash</tt>, when present, MUST be a JEP algorithm-tagged Event Hash. Baseline implementations MUST support JEP-Core <tt>sha256</tt>. <tt>uri</tt>, when present, MUST be a non-empty URI string. If both the root descriptor and its matching entry in <tt>events</tt> include an Event Hash, their values MUST agree. A supplied event MUST match its descriptor's Event Identity as well as any Event Hash pin.</t>
      </section>
      <section anchor="record-desc">
        <name>Record Descriptor</name>
        <t>A Record Descriptor MUST contain:</t>
        <ul spacing="normal">
          <li>
            <tt>record_type</tt>
          </li>
          <li>
            <tt>digest</tt>
          </li>
        </ul>
        <t>
          <tt>record_type</tt> MUST be a non-empty string.</t>
        <t>
          <tt>digest</tt> MUST be an algorithm-tagged digest string.</t>
        <t>A Record Descriptor MAY additionally contain:</t>
        <ul spacing="normal">
          <li>
            <tt>media_type</tt>
          </li>
          <li>
            <tt>uri</tt>
          </li>
        </ul>
        <t>The digest, not the URI, is the integrity identity of the record.</t>
        <t>A Record Descriptor MUST be an object. <tt>media_type</tt>, when present, MUST be a non-empty string, and <tt>uri</tt>, when present, MUST be a non-empty URI string. For <tt>behavior</tt> and <tt>receipt-manifest</tt>, <tt>digest</tt> MUST be the baseline JCS/SHA-256 digest of that record type, and a present <tt>media_type</tt> MUST equal <tt>application/json</tt>. Other <tt>record_type</tt> values identify opaque artifacts whose baseline digest is defined in <xref target="artifact-digests"/>; additional structure semantics require a selected companion profile.</t>
      </section>
      <section anchor="circularity">
        <name>Binding-Event Circularity Rule</name>
        <t>If a JEP Receipt Event binds a receipt manifest as its primary record, that manifest MUST identify the binding event by Event Identity and MUST NOT include the binding event's Event Hash anywhere in the manifest.</t>
        <t>This rule applies to both <tt>root_event</tt> and any corresponding entry in <tt>events</tt>.</t>
        <t>The manifest MAY include Event Hash values for other JEP events.</t>
        <t>A verifier MUST reject a manifest that includes the binding event's Event Hash, because the binding Event Hash depends on the signed extension containing the manifest digest and would create a circular artifact dependency.</t>
      </section>
      <section anchor="manifest-digest">
        <name>Manifest Digest</name>
        <t>The Manifest Digest MUST be calculated over the complete receipt-manifest value according to <xref target="json-input"/>. The <tt>root_event</tt>, <tt>events</tt>, <tt>records</tt>, <tt>created_at</tt>, and all present optional or additional members are included without field exclusions.</t>
        <t>A Receipt Event MAY bind a receipt manifest as its primary record by using <tt>record_type</tt> equal to <tt>receipt-manifest</tt> in the receipt-binding extension. The circularity constraint in <xref target="circularity"/> is checked without deleting any member from the digest input.</t>
      </section>
    </section>
    <section anchor="bundles">
      <name>Receipt Bundles and Export</name>
      <section anchor="bundle">
        <name>Bundle</name>
        <t>A JEP receipt bundle is a packaging concept containing zero or more:</t>
        <ul spacing="normal">
          <li>signed JEP events;</li>
          <li>behavior records;</li>
          <li>receipt manifests;</li>
          <li>validation reports;</li>
          <li>external evidence objects.</li>
        </ul>
        <t>JEP-RP-1 does not define a <tt>validation-report</tt> primary record type. Reports MAY appear as bundle artifacts. The portable result object in <xref target="validation-output"/> describes a verifier observation; it does not make a report a receipt, a signature, or a new primary-record format.</t>
        <t>JEP-RP-1 does not define a mandatory ZIP, CBOR, JSON, archive, transport, or storage container.</t>
        <t>Packaging MUST NOT alter signed JEP event bytes or misrepresent digest-bound record content.</t>
      </section>
      <section anchor="partial-export">
        <name>Partial and Redacted Export</name>
        <t>A bundle MAY contain only a subset of available evidence.</t>
        <t>A partial or redacted export MUST NOT present omitted material as nonexistent, unchanged, irrelevant, agreed, waived, or verified.</t>
        <t>Where omission could affect interpretation, the export SHOULD include an explicit withheld, redacted, or partial-view indication.</t>
        <t>A digest of an original artifact does not verify a different redacted artifact. If only a redacted artifact is supplied, its bytes can be verified only against a digest that commits to those bytes, unless an explicitly selected specification defines and verifies a separate disclosure proof. If the original is required but unavailable, its integrity check is <tt>indeterminate</tt>; a redaction label cannot make it <tt>pass</tt>.</t>
        <t>A producer exporting a modified behavior record or manifest MUST calculate its new digest and, if claiming a receipt binding for that modified record, obtain a new binding event. It MUST NOT reuse the original binding as if the modified value were the original. The original artifact and its historical binding remain unchanged.</t>
      </section>
      <section anchor="no-chain">
        <name>No Chain Inference</name>
        <t>A bundle containing multiple events is not, merely by being a bundle, a causal chain, responsibility chain, authorization chain, or complete event history.</t>
        <t>Chain reconstruction, cycle analysis, termination cascade, complete-log assumptions, and causal interpretation belong to a selected chain profile or external system.</t>
      </section>
      <section anchor="artifact-digests">
        <name>External Artifact Digest Input</name>
        <t>The digest in an Evidence Descriptor commits to the exact octet sequence of one identified evidence artifact. The digest in a Record Descriptor with a <tt>record_type</tt> other than the reserved values <tt>behavior</tt> and <tt>receipt-manifest</tt> has the same octet-sequence meaning. The baseline is SHA-256 over those octets with the textual representation specified in <xref target="json-input"/>.</t>
        <t>These opaque-artifact digests MUST NOT apply JCS, whitespace removal, newline conversion, Unicode normalization, decompression, redaction, or a format conversion as an implicit preprocessing step. A JSON media type does not select JCS. If a producer wants to commit to a transformed representation, that representation is a distinct artifact whose exact bytes are the digest input.</t>
        <t>The packaging or retrieval mechanism MUST identify the artifact octets supplied to the verifier, separately from transport framing or an archive container. If transfer or content coding is used, the mechanism MUST specify how the identified artifact octets are recovered. In the absence of that agreement a verifier MUST report the affected required integrity check as <tt>indeterminate</tt>, rather than trying transformations until a digest matches.</t>
        <t>A descriptor for a JEP-RP-1 behavior record or manifest in the manifest's <tt>records</tt> array uses its reserved <tt>record_type</tt> and the JCS record-digest rule. An Evidence Descriptor always uses the opaque-artifact rule, even if its artifact happens to contain a JSON receipt record. A verifier MUST select the rule from the descriptor's defined context, not from filename, URI, or media type.</t>
        <t>The JEP-RP-1 baseline digest fields in this document use <tt>sha256</tt>. A different algorithm label in one of those fields violates the selected baseline and MUST fail the applicable descriptor or extension structure check; it is not merely an unsupported implementation feature. A companion specification can define separately identified fields or a different profile contract for additional algorithms, but MUST NOT change the meaning of a baseline field under the same selected rules.</t>
      </section>
    </section>
    <section anchor="validation">
      <name>Receipt Validation</name>
      <section anchor="validation-layers">
        <name>Layer Separation</name>
        <t>Receipt validation reports separately:</t>
        <ul spacing="normal">
          <li>JEP-Core validation status;</li>
          <li>Receipt Profile checks;</li>
          <li>Receipt Profile overall status.</li>
        </ul>
        <t>JEP-RP-1 MUST NOT replace or overwrite the underlying JEP validation result.</t>
        <t>Receipt binding is processed by the handler for the critical receipt extension during JEP validation. Implementations MAY perform local parsing, structure, and cryptographic checks separately, but MUST NOT finalize an overall JEP success while mandatory critical-extension processing remains unresolved. They MUST preserve the independent Core check results.</t>
        <t>For a recognized receipt extension, the required primary-record binding and structure checks are part of processing that extension. Failure of those checks makes the extension fail; inability to obtain required input leaves that processing indeterminate. This does not change the Core rule that an unknown critical extension fails. Supplemental bundle checks do not redefine the Core extension result when the primary binding itself has been completely checked.</t>
      </section>
      <section anchor="validation-mode">
        <name>Baseline Validation Mode</name>
        <t>A JEP-RP-1 Verifier MUST support JEP <tt>archival</tt> validation mode.</t>
        <t>If no JEP validation mode is explicitly requested, receipt validation MUST use <tt>archival</tt> mode.</t>
        <t>Archival receipt validation MUST NOT consume JEP acceptance state.</t>
        <t>A deployment MAY additionally request <tt>acceptance</tt>, <tt>chain</tt>, or <tt>policy</tt> mode when those semantics are required. Those modes remain JEP modes and MUST NOT be redefined by this profile.</t>
        <t>A requested but unsupported mode MUST NOT be silently replaced with <tt>archival</tt>. The default applies only when the request omits a mode. The verifier MUST report the effective mode, including a mode selected by default.</t>
      </section>
      <section anchor="validation-checks">
        <name>Receipt Profile Checks</name>
        <t>The initial JEP-RP-1 check identifiers are:</t>
        <ul spacing="normal">
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#profile-binding</tt>
          </li>
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#receipt-extension</tt>
          </li>
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#record-binding</tt>
          </li>
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#record-structure</tt>
          </li>
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#manifest-structure</tt>
          </li>
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#bundle-integrity</tt>
          </li>
          <li>
            <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#privacy-reference-format</tt>
          </li>
        </ul>
        <t>Check statuses use the JEP conformance vocabulary:</t>
        <ul spacing="normal">
          <li>
            <tt>pass</tt>
          </li>
          <li>
            <tt>fail</tt>
          </li>
          <li>
            <tt>not_checked</tt>
          </li>
          <li>
            <tt>not_applicable</tt>
          </li>
          <li>
            <tt>unsupported</tt>
          </li>
          <li>
            <tt>indeterminate</tt>
          </li>
        </ul>
        <t>A verifier MUST NOT report an unperformed Receipt Profile check as <tt>pass</tt>.</t>
        <section anchor="required-checks">
          <name>Required Checks and Context</name>
          <t>A validation request MUST identify its target event and explicitly selected profiles, using the semantic identifier in <xref target="profile-id"/>. It MAY omit the JEP validation mode, in which case the verifier MUST use <tt>archival</tt>. It MAY omit an inventory request, in which case the scope is the target event and its primary record. Before evaluation, the verifier MUST resolve the effective mode, scope, and required checks and report them under <xref target="validation-output"/>. The signed identifier selects the Receipt rules; the report also names the specification used. Context defaults do not insert or change a member of a signed event or digest-bound record.</t>
          <t>The following minimum set is mandatory for primary receipt validation. The table uses the check-identifier suffixes listed above.</t>
          <table>
            <name>Minimum Primary-Receipt Checks</name>
            <thead>
              <tr>
                <th>Check</th>
                <th>Applicability and condition for pass</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>profile-binding</td>
                <td>The requested profile and extension profile are JEP-RP-1.</td>
              </tr>
              <tr>
                <td>receipt-extension</td>
                <td>The extension is present, critical, and well formed under Section 6.</td>
              </tr>
              <tr>
                <td>record-binding</td>
                <td>The complete supplied primary value has the digest in the signed extension.</td>
              </tr>
              <tr>
                <td>record-structure</td>
                <td>A behavior primary record satisfies Section 7, including its descriptors and the circularity constraint.</td>
              </tr>
              <tr>
                <td>manifest-structure</td>
                <td>A manifest primary record satisfies Section 8, including identity consistency and the circularity constraint.</td>
              </tr>
              <tr>
                <td>privacy-reference-format</td>
                <td>Present human participant references satisfy Section 7.3; this does not verify identities or privacy outcomes.</td>
              </tr>
            </tbody>
          </table>
          <t>For a behavior primary record, <tt>manifest-structure</tt> is <tt>not_applicable</tt>. For a manifest primary record, <tt>record-structure</tt> is <tt>not_applicable</tt>. <tt>privacy-reference-format</tt> is <tt>not_applicable</tt> only if the assessed records have no human participant references to check. An absent or unreadable primary record does not make its applicable structure check <tt>not_applicable</tt>.</t>
          <t>
            <tt>bundle-integrity</tt> is required if inventory verification is requested. If no inventory is in scope it is <tt>not_applicable</tt>. Primary-only success authenticates the embedded descriptors as record content; it does not verify the artifacts those descriptors describe. Such a result MUST state that external artifact integrity was outside its scope.</t>
          <t>For inventory verification the request MUST identify a finite set of required descriptors. If a manifest is supplied and no narrower set is explicitly selected, this set is its <tt>root_event</tt> descriptor and all entries in its <tt>events</tt>, <tt>records</tt>, and <tt>external_refs</tt>, plus the Evidence Descriptors of the behavior records in that set. Nested receipt manifests are verified as records; their inventories are not recursively traversed unless the request explicitly includes them. Reports MUST disclose any narrower selection and omitted components.</t>
          <t>Each required event artifact MUST match its Event Identity and every applicable Event Hash pin, including a pin in <tt>root_event</tt>, and undergo JEP validation in the declared context. An event appearing in more than one descriptor can be checked once if all descriptor constraints are evaluated. Its critical receipt extension requires its own primary record; this does not implicitly request recursive inventory verification. Each required record or evidence artifact MUST be obtained and its digest checked. Required behavior records and manifests MUST also pass their structure checks; companion semantics are checked only when explicitly selected. For <tt>bundle-integrity</tt>, a failed required component produces <tt>fail</tt>; otherwise any required component that is <tt>unsupported</tt>, <tt>not_checked</tt>, or <tt>indeterminate</tt> produces <tt>indeterminate</tt>; otherwise every required component must pass or be legitimately not applicable. Component statuses MUST be retained. A verifier MUST NOT report complete inventory verification after silently discarding a required descriptor.</t>
          <t>A request without a manifest MUST enumerate its required descriptors or provide an explicitly selected packaging-profile rule that does so. An undefined inventory scope is <tt>indeterminate</tt>. A malformed manifest is <tt>fail</tt>; it is not an empty inventory. Extra, unreferenced bundle files do not become authenticated by being packaged next to a receipt.</t>
        </section>
      </section>
      <section anchor="validation-status">
        <name>Receipt Profile Overall Status</name>
        <t>The Receipt Profile overall status is one of:</t>
        <ul spacing="normal">
          <li>
            <tt>valid</tt>
          </li>
          <li>
            <tt>invalid</tt>
          </li>
          <li>
            <tt>indeterminate</tt>
          </li>
        </ul>
        <t>For the requested Receipt Profile validation context:</t>
        <ul spacing="normal">
          <li>
            <tt>invalid</tt> means the underlying required JEP validation is invalid or at least one required Receipt Profile check failed;</li>
          <li>
            <tt>indeterminate</tt> means no required check failed, but the underlying required JEP validation is indeterminate or at least one required Receipt Profile check is unsupported, not checked, or indeterminate;</li>
          <li>
            <tt>valid</tt> means the underlying required JEP validation is valid and every required Receipt Profile check passed or was not applicable.</li>
        </ul>
        <t>Failure takes precedence over an unresolved check. A required check can be <tt>not_applicable</tt> only under a stated applicability rule; a verifier MUST NOT use that status to bypass missing evidence. Missing required input produces <tt>indeterminate</tt> when no required check has failed. An explicit companion policy MAY reject unavailable evidence, but the policy outcome MUST be identified separately and MUST NOT be described as an observed digest mismatch.</t>
      </section>
      <section anchor="validation-procedure">
        <name>Validation Procedure</name>
        <t>A verifier MUST perform the applicable operations below before reporting success. It SHOULD follow the ordering shown, integrated with JEP-Core critical-extension processing:</t>
        <ol spacing="normal">
          <li>Fix the validation context, selected profiles, target event, and required inventory, if any.</li>
          <li>Parse and validate the JEP event and its signature under JEP-Core and the selected signature profile. Preserve each Core check result. Do not finalize critical-extension processing or acceptance while receipt checks required by the extension are pending.</li>
          <li>Check the profile identifier, presence and criticality of the receipt extension, and all required extension member types and values.</li>
          <li>Obtain the primary receipt record from supplied data or an allowed retrieval mechanism. Missing data is not a successful binding.</li>
          <li>Parse that complete record using <xref target="json-input"/>, without discarding duplicates or changing its value. Validate the structure for the declared record type. Calculate and compare its JCS/SHA-256 digest without excluding members.</li>
          <li>Enforce the relevant circularity rule, and check any human participant reference formats. Record structural and cryptographic outcomes separately when both can be determined.</li>
          <li>If inventory verification is requested, perform all required component checks described in <xref target="required-checks"/> and report which components were missing, failed, or omitted from scope.</li>
          <li>Complete the critical-extension handler, retain the resulting JEP-Core status, and calculate Receipt Profile status with the aggregation rules in <xref target="validation-status"/>. In acceptance mode, follow Core acceptance-state rules only after the checks required by that context have completed successfully.</li>
          <li>Return the context, underlying JEP result, Receipt Profile checks, component results when applicable, and Receipt Profile overall status. Do not represent a partial result as a completed result.</li>
        </ol>
        <t>A syntax, duplicate-name, or JCS-domain error in a supplied primary record makes <tt>record-binding</tt> fail because no valid canonical input exists. It also fails the applicable structure check. A well-formed JCS value with an incorrect digest makes <tt>record-binding</tt> fail even if structure passes. A digest match with an invalid record shape makes the applicable structure check fail even though <tt>record-binding</tt> passes. Missing primary input leaves both applicable checks <tt>indeterminate</tt> unless an independent failure is already established.</t>
        <t>A required external artifact that is unavailable is <tt>indeterminate</tt>. A supplied artifact that does not match its declared digest is <tt>fail</tt>. An unsupported required mechanism is <tt>unsupported</tt>. An optional, applicable check that was not performed is <tt>not_checked</tt>. These statuses MUST NOT be relabeled <tt>pass</tt>.</t>
        <t>A successful Receipt Profile result establishes the cryptographic and structural properties actually checked. It does not prove the external truth or completeness of the recorded behavior, nor interoperability of untested protocol or application semantics.</t>
        <t>
          <tt>fail</tt> describes a violation of the selected rules that the verifier has established. <tt>unsupported</tt> describes an implementation capability that is required by those rules but is unavailable. For example, a <tt>sha512:</tt> value in a baseline <tt>record_digest</tt> makes <tt>receipt-extension</tt> fail. An allowed, explicitly selected companion check that the verifier does not implement is <tt>unsupported</tt>. An implementation unable to compute mandatory SHA-256 MUST NOT claim conforming verifier capability or report success; that limitation alone does not prove the artifact invalid. Unknown critical extensions still fail according to JEP-Core.</t>
      </section>
      <section anchor="validation-output">
        <name>Portable Validation Result</name>
        <t>A conforming Receipt Profile Verifier MUST be able to produce the JSON result object defined here. This is a minimum exchange contract for validation results, not an archive container, network API, new signature format, or replacement for the JEP Conformance result. Field names and value semantics below are normative; member order and JSON whitespace are not.</t>
        <t>The object MUST contain <tt>profile</tt>, <tt>specification</tt>, <tt>receipt_status</tt>, <tt>jep</tt>, <tt>record</tt>, <tt>checks</tt>, <tt>context</tt>, <tt>warnings</tt>, and <tt>errors</tt>. Additional members MAY be included but MUST NOT redefine these members or widen the stated scope. Duplicate names MUST be rejected. Unknown additional members MUST NOT be used to infer successful checks.</t>
        <table>
          <name>Required Result Members</name>
          <thead>
            <tr>
              <th>Member</th>
              <th>Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>profile</td>
              <td>The exact identifier <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01</tt>, identifying the Receipt contract this report evaluates; it is not a claim that the input event carries that identifier.</td>
            </tr>
            <tr>
              <td>specification</td>
              <td>A non-empty string naming the exact specification revision used, initially <tt>draft-wang-jep-receipt-profile-01</tt>. This is audit metadata, not an override of the signed semantic identifier.</td>
            </tr>
            <tr>
              <td>receipt_status</td>
              <td>
                <tt>valid</tt>, <tt>invalid</tt>, or <tt>indeterminate</tt>, aggregated only as specified in <xref target="validation-status"/>.</td>
            </tr>
            <tr>
              <td>jep</td>
              <td>The underlying JEP validation-result object described in <xref target="JEP-CONFORMANCE"/>, with its status, effective mode, selected Core contract, independent checks, warnings, errors, and applicable acceptance result preserved. It MUST include asserted <tt>event_identity</tt> when available and <tt>event_hash</tt> when calculated. Unavailable identity or hash is <tt>null</tt>; it is not a fabricated identifier. For a successful Receipt result the Event Hash MUST have been calculated. This member does not reclassify unperformed Core checks as passing.</td>
            </tr>
            <tr>
              <td>record</td>
              <td>An object containing <tt>record_type</tt> and <tt>record_digest</tt>, copied from the signed extension when those values satisfy its field rules; otherwise the affected member is <tt>null</tt>. A syntactically valid declared digest can be reported even if its comparison or the event signature fails. An optional <tt>computed_record_digest</tt> reports the actual calculated digest, including on mismatch. These fields identify input and computation, not their validity.</td>
            </tr>
            <tr>
              <td>checks</td>
              <td>An object mapping every Receipt check identifier in <xref target="validation-checks"/> to its check-status string. All seven baseline entries MUST be present, including unperformed or inapplicable checks. Additional profile checks use their own identifiers. Detailed diagnostics supplement, and MUST NOT contradict, these values.</td>
            </tr>
            <tr>
              <td>context</td>
              <td>The effective evaluation context defined below, including the selected profiles, requested mode, scope, and required Receipt checks.</td>
            </tr>
            <tr>
              <td>warnings and errors</td>
              <td>Arrays of diagnostic objects, empty when none. Each entry SHOULD identify the affected check or component and provide an explanatory message. Diagnostics MUST NOT contradict the structured statuses. No new global error-code registry is defined.</td>
            </tr>
          </tbody>
        </table>
        <t>The <tt>context</tt> object MUST contain: <tt>profiles</tt>, a duplicate-free array of the explicitly selected profile identifiers; <tt>requested_mode</tt>, the requested JEP mode string or <tt>null</tt> when omitted; <tt>scope</tt>, either <tt>primary-receipt</tt> or <tt>inventory</tt>; and <tt>required_checks</tt>, a duplicate-free array of the full Receipt check identifiers required in that context. The effective mode is reported in <tt>jep.mode</tt>. The six minimum primary checks MUST be included in <tt>required_checks</tt>; <tt>bundle-integrity</tt> MUST additionally be included for inventory scope. Removing a required check from the array does not change its normative requirement.</t>
        <t>Any explicitly selected companion rules, signature class, trust/key source, historical-state assumptions, or policy parameters needed to interpret the result MUST be identified in the report, using additional context members or the underlying JEP result as appropriate. Sensitive evidence can be referenced through immutable identifiers rather than disclosed. If the necessary context cannot be reproduced, a consumer MUST NOT treat equal overall status strings as evidence of equivalent validation. This profile does not define or authenticate trust roots.</t>
        <t>For <tt>primary-receipt</tt> scope, <tt>context.external_artifact_integrity</tt> MUST be <tt>not_checked</tt> and <tt>context.inventory</tt> MUST be absent. The <tt>bundle-integrity</tt> check is <tt>not_applicable</tt>. This combination explicitly states that descriptor content, but not the referenced external artifacts, was assessed.</t>
        <t>For <tt>inventory</tt> scope, <tt>context.external_artifact_integrity</tt> MUST be <tt>see_inventory</tt> and <tt>context.inventory</tt> MUST be an object with <tt>selection</tt>, <tt>complete</tt>, <tt>components</tt>, and <tt>omitted</tt>. <tt>selection</tt> is <tt>manifest-default</tt> for the default finite inventory in <xref target="required-checks"/> or <tt>explicit</tt> for an explicitly selected set. <tt>complete</tt> is a boolean stating whether that required set was fully determined, not whether its artifacts were all available or valid. It MUST be false if missing input prevents enumeration of required descriptors. An incomplete required set cannot produce a passing inventory result.</t>
        <t>Each <tt>components</tt> entry MUST be an object with <tt>kind</tt> (<tt>event</tt>, <tt>record</tt>, or <tt>evidence</tt>), <tt>descriptor</tt> (the corresponding complete descriptor object), and <tt>status</tt> (the check-status vocabulary in <xref target="validation-checks"/>). It MUST preserve the results of the component checks actually performed, using a <tt>checks</tt> object and, for an event, its underlying JEP result. A wholly unavailable artifact can be represented by <tt>indeterminate</tt> plus an explanatory diagnostic and an empty <tt>checks</tt> object. All required descriptors MUST be represented; identical descriptors MAY share one entry, but distinct pins or constraints MUST NOT be discarded.</t>
        <t>The <tt>omitted</tt> array MUST list known descriptors excluded by an explicitly narrower scope, each as an object with <tt>kind</tt>, <tt>descriptor</tt>, and a non-empty <tt>reason</tt> string. It is empty when no known descriptors were excluded. A missing artifact that is required belongs in <tt>components</tt> with an unresolved status, not in <tt>omitted</tt>. Unreferenced packaged files need not be enumerated and acquire no authenticated status. Reported component outcomes MUST aggregate to <tt>bundle-integrity</tt> using <xref target="required-checks"/>; a required failure takes precedence even when <tt>complete</tt> is false.</t>
        <t>A consumer MUST check the report target, profile, effective context, required-check set, and aggregation consistency before relying on its outcome. An incomplete or internally inconsistent report is not a successful result under this exchange contract; that defect alone does not prove the underlying receipt invalid. Reports MUST NOT be compared solely by <tt>receipt_status</tt>. This result object is an unauthenticated verifier observation unless a separately selected mechanism authenticates it. The Receipt Event signature does not authenticate a later report, and a report never substitutes for validation of the underlying evidence.</t>
        <section anchor="validation-example">
          <name>Complete Primary-Receipt Result Example</name>
          <t>This example is the portable result for the signed test receipt in Appendix C under its stated fixture context. It reports a local verifier observation; its Event Hash identifies the target event, not a signature on this report.</t>
          <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "profile": "https://humanjudgment.org/jep/profiles/receipt/1/draf\
t-01",
  "specification": "draft-wang-jep-receipt-profile-01",
  "receipt_status": "valid",
  "jep": {
    "status": "valid",
    "mode": "archival",
    "profile": "jep-core-0.7",
    "event_identity": {
      "who": "urn:example:receipt-signer",
      "id": "receipt-test-1"
    },
    "event_hash": "sha256:d8522307eec9432c1e6b9ee56c2d6c8ed3bcd8f3d\
3584d87092fd85d946ac429",
    "checks": {
      "syntax": "pass",
      "cryptographic": "pass",
      "event_identity": "pass",
      "reference_integrity": "not_applicable",
      "extension_processing": "pass",
      "actor_binding": "not_applicable",
      "freshness": "not_applicable",
      "audience": "not_applicable",
      "chain_integrity": "not_checked",
      "policy": "not_checked"
    },
    "warnings": [],
    "errors": []
  },
  "record": {
    "record_type": "behavior",
    "record_digest": "sha256:e0d6b6bc6cf76a33e9124a4bd7298123e72374\
5586aac1caa8004c00e013cd6b",
    "computed_record_digest": "sha256:e0d6b6bc6cf76a33e9124a4bd7298\
123e723745586aac1caa8004c00e013cd6b"
  },
  "checks": {
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#prof\
ile-binding": "pass",
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#rece\
ipt-extension": "pass",
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#reco\
rd-binding": "pass",
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#reco\
rd-structure": "pass",
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#mani\
fest-structure": "not_applicable",
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#priv\
acy-reference-format": "not_applicable",
    "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#bund\
le-integrity": "not_applicable"
  },
  "context": {
    "profiles": [
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01"
    ],
    "requested_mode": null,
    "scope": "primary-receipt",
    "required_checks": [
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#pr\
ofile-binding",
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#re\
ceipt-extension",
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#re\
cord-binding",
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#re\
cord-structure",
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#ma\
nifest-structure",
      "https://humanjudgment.org/jep/profiles/receipt/1/draft-01#pr\
ivacy-reference-format"
    ],
    "signature_class": "JEP-Baseline-Ed25519-JWS-JCS-0.7",
    "key_source": "public deterministic fixture key",
    "key_fingerprint": "sha256:56475aa75463474c0285df5dbf2bcab73da6\
51358839e9b77481b2eab107708c",
    "identity_scope": "identifier syntax; no historical state",
    "external_artifact_integrity": "not_checked"
  },
  "warnings": [],
  "errors": []
}</sourcecode>
        </section>
      </section>
    </section>
    <section anchor="verification-events">
      <name>Verification Events</name>
      <t>A JEP V event MAY record a Receipt Profile evaluation.</t>
      <t>The V event MUST satisfy JEP-Core V requirements.</t>
      <t>JEP-RP-1 defines the following provisional profile-specific verification scopes:</t>
      <ul spacing="normal">
        <li>
          <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#receipt-validation</tt>
        </li>
        <li>
          <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#record-binding</tt>
        </li>
        <li>
          <tt>https://humanjudgment.org/jep/profiles/receipt/1/draft-01#bundle-integrity</tt>
        </li>
      </ul>
      <t>A V event MUST identify its target through JEP <tt>ref</tt>.</t>
      <t>A V event's <tt>what.result</tt> reports the semantic result of its declared verification scope. It MUST NOT be confused with the independent per-check status vocabulary used by a Receipt Profile verifier.</t>
      <t>A V event MUST NOT imply evaluation beyond its declared scope.</t>
    </section>
    <section anchor="conformance">
      <name>Conformance</name>
      <section anchor="conf-producer">
        <name>JEP-RP-1 Producer</name>
        <t>A conforming JEP-RP-1 Producer MUST:</t>
        <ul spacing="normal">
          <li>produce a JEP event conforming to the applicable JEP Producer requirements;</li>
          <li>preserve the selected JEP verb semantics;</li>
          <li>include the receipt-binding extension;</li>
          <li>list the extension in <tt>ext_crit</tt>;</li>
          <li>use the JEP-RP-1 profile identifier;</li>
          <li>bind exactly one primary receipt record by digest;</li>
          <li>produce the bound record according to the applicable Receipt Profile record format;</li>
          <li>avoid rewriting Event Identity or Event Hash semantics.</li>
        </ul>
        <t>A producer MUST apply the complete-input and rejection rules in <xref target="json-input"/>, and MUST identify external artifact octets according to <xref target="artifact-digests"/>. No alternative canonicalization algorithm is permitted for baseline records.</t>
      </section>
      <section anchor="conf-verifier">
        <name>JEP-RP-1 Verifier</name>
        <t>A conforming JEP-RP-1 Verifier MUST:</t>
        <ul spacing="normal">
          <li>perform or consume an actual JEP validation result;</li>
          <li>support JEP <tt>archival</tt> validation mode;</li>
          <li>process the critical receipt extension;</li>
          <li>support JEP-RP-1 behavior-record and manifest digest calculation;</li>
          <li>support the required Receipt Profile checks for its claimed validation context;</li>
          <li>preserve independent check statuses;</li>
          <li>distinguish Event Identity from Event Hash;</li>
          <li>distinguish JEP validity from Receipt Profile validity;</li>
          <li>enforce the binding-event circularity rule for bound manifests;</li>
          <li>return indeterminate when a required check cannot be completed and no required check has failed.</li>
        </ul>
        <t>A verifier MUST implement the minimum applicable checks and scope reporting in <xref target="required-checks"/>. If a required failure is already established, the overall result remains <tt>invalid</tt> even when another check cannot be completed. Merely supporting a digest library does not constitute full Receipt Profile verifier conformance.</t>
        <t>A verifier MUST support the portable result contract in <xref target="validation-output"/>. Inventory verification remains the additional capability in <xref target="conf-bundle"/>; primary-receipt conformance does not imply retrieval, complete inventories, actor authentication, or acceptance processing.</t>
      </section>
      <section anchor="conf-bundle">
        <name>Receipt Bundle Verifier</name>
        <t>An implementation claiming Receipt Bundle Verifier capability MUST additionally:</t>
        <ul spacing="normal">
          <li>validate manifest structure when a manifest is present;</li>
          <li>verify Event Identity descriptors;</li>
          <li>verify every required Event Hash pin;</li>
          <li>verify every required record digest and report any required missing artifact;</li>
          <li>report missing required bundle components as indeterminate, with any independent companion-policy rejection stated separately;</li>
          <li>avoid inferring causal-chain completeness from bundle membership.</li>
        </ul>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>A valid JEP-RP-1 receipt does not prove that the described behavior actually occurred as represented. It proves only the properties that were actually validated.</t>
      <t>Implementations MUST consider:</t>
      <ul spacing="normal">
        <li>actor/signer confusion;</li>
        <li>observed-agent/actor confusion;</li>
        <li>Event Identity/Event Hash confusion;</li>
        <li>substitution of an unbound receipt record;</li>
        <li>circular binding between a manifest digest and the binding event's Event Hash;</li>
        <li>URI substitution when a verifier trusts location instead of digest;</li>
        <li>omitted or selectively exported evidence;</li>
        <li>misleading redaction;</li>
        <li>fabricated but correctly hashed behavior content;</li>
        <li>unsupported critical extensions;</li>
        <li>profile confusion;</li>
        <li>false chain or completeness inference.</li>
      </ul>
      <t>A verifier MUST compare the recomputed primary-record digest with the digest inside the signed critical receipt extension.</t>
      <t>A verifier MUST enforce <xref target="circularity"/> when a Receipt Event binds a receipt manifest.</t>
      <t>A verifier MUST NOT claim actor binding unless the applicable trust-profile check passed.</t>
      <t>A verifier MUST NOT infer authorization, causality, truth, completeness, liability, or policy compliance from successful Receipt Profile structural validation.</t>
      <t>Parsers, canonicalizers, and schema validators can disagree about duplicate names, Unicode, or numeric representations. Implementations MUST enforce the input rules before a lossy parser or validation pass can conceal an error. Tests SHOULD cover UTF-16 name ordering, number serialization boundaries, explicit nulls, array order, unknown members, and malformed serialized JSON.</t>
      <t>Digest matching does not make a retrieval URI safe. Verifiers SHOULD restrict URI schemes and network destinations, avoid sending ambient credentials, and bound input size, nesting depth, retrieval count, and processing time. A resource limit MUST NOT be reported as successful verification or a digest mismatch; if it prevents a required check, that check remains unresolved.</t>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>Receipt records can expose:</t>
      <ul spacing="normal">
        <li>actor identifiers;</li>
        <li>observed-agent identifiers;</li>
        <li>behavior timing;</li>
        <li>action categories;</li>
        <li>tool or evidence relationships;</li>
        <li>human participant roles;</li>
        <li>organizational or workflow structure;</li>
        <li>storage and retrieval locations.</li>
      </ul>
      <t>Implementations SHOULD minimize plaintext personal data.</t>
      <t>Human participant references SHOULD use opaque, pseudonymous, rotating, digest-only, or withheld representations when direct identity is unnecessary.</t>
      <t>Digest-based references can still enable correlation or dictionary attacks, especially when the underlying value has low entropy.</t>
      <t>A receipt bundle SHOULD disclose only the evidence required for its intended validation purpose.</t>
      <t>Receipt Profile privacy mechanisms do not themselves establish consent, lawful basis, data-subject rights compliance, confidentiality obligations, or entitlement to disclosure.</t>
    </section>
    <section anchor="non-inference">
      <name>Non-Inference Boundary</name>
      <t>JEP-RP-1 is a technical receipt profile.</t>
      <t>A successful Receipt Profile validation MUST NOT be presented, by itself, as proof:</t>
      <ul spacing="normal">
        <li>that an external factual claim is true;</li>
        <li>that an AI output is correct or safe;</li>
        <li>that the behavior record is complete;</li>
        <li>that the observed agent caused a downstream outcome;</li>
        <li>that a delegation or tool call was authorized;</li>
        <li>that a human participant consented;</li>
        <li>that a process was fair;</li>
        <li>that a policy was adequate;</li>
        <li>that an explanation was sufficient;</li>
        <li>that a legal duty was satisfied;</li>
        <li>that any person or organization is liable or not liable;</li>
        <li>that a regulatory requirement was met.</li>
      </ul>
      <t>External profiles and policies MAY use receipt evidence when making such determinations, but those conclusions remain external to JEP-RP-1.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests no IANA actions.</t>
      <t>The JEP-RP-1 profile identifier, receipt-extension identifier, Receipt Profile check identifiers, and Receipt Profile verification-scope identifiers defined by this document are publisher-controlled HTTPS URI identifiers.</t>
      <t>Future specifications MAY define registries if stable interoperable deployment requires them.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>The examples in this section illustrate field placement only. Repeated-digit digests and the signature placeholder are not executable test values. The executable record-digest examples are in <xref target="test-vectors"/>.</t>
      <section anchor="ex-behavior">
        <name>Behavior Record</name>
        <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "jep_receipt_record": "1",
  "record_type": "behavior",
  "agent": {
    "id": "did:example:agent-789",
    "role": "planner",
    "deployment_id": "runtime-42"
  },
  "action": {
    "type": "tool_call",
    "name": "calendar.create_event"
  },
  "created_at": 1790424000,
  "evidence": [
    {
      "kind": "tool_request",
      "digest": "sha256:1111111111111111111111111111111111111111111\
111111111111111111111",
      "media_type": "application/json",
      "redaction": "digest-only"
    },
    {
      "kind": "tool_response",
      "digest": "sha256:2222222222222222222222222222222222222222222\
222222222222222222222",
      "media_type": "application/json",
      "redaction": "partial"
    }
  ]
}</sourcecode>
      </section>
      <section anchor="ex-j-event">
        <name>J Event Carrying a Receipt Binding</name>
        <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "jep": "1",
  "id": "urn:uuid:018f4f8d-7c63-7c2e-9b43-4ef657eec1c0",
  "verb": "J",
  "who": "did:example:receipt-service",
  "when": 1790424000,
  "what": {
    "claim": "agent-behavior-recorded"
  },
  "ext": {
    "https://humanjudgment.org/jep/extensions/receipt-binding/1": {
      "profile": "https://humanjudgment.org/jep/profiles/receipt/1/\
draft-01",
      "record_type": "behavior",
      "record_digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
aaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "media_type": "application/json"
    }
  },
  "ext_crit": [
    "https://humanjudgment.org/jep/extensions/receipt-binding/1"
  ],
  "sig": "..."
}</sourcecode>
        <t>The J <tt>what</tt> object remains a JEP-Core judgment claim. The receipt-record binding is carried only in the critical receipt extension.</t>
      </section>
      <section anchor="ex-manifest">
        <name>Receipt Manifest</name>
        <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "jep_receipt_manifest": "1",
  "profile": "https://humanjudgment.org/jep/profiles/receipt/1/draf\
t-01",
  "root_event": {
    "event_identity": {
      "who": "did:example:receipt-service",
      "id": "urn:uuid:018f4f8d-7c63-7c2e-9b43-4ef657eec1c0"
    }
  },
  "events": [
    {
      "event_identity": {
        "who": "did:example:receipt-service",
        "id": "urn:uuid:018f4f8d-7c63-7c2e-9b43-4ef657eec1c0"
      }
    }
  ],
  "records": [
    {
      "record_type": "behavior",
      "digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
aaaaaaaaaaaaaaaaaaaaa",
      "media_type": "application/json"
    }
  ],
  "created_at": 1790424010
}</sourcecode>
        <t>This example is suitable for a manifest that is itself bound by the root Receipt Event; therefore the binding event is identified by Event Identity without its Event Hash, avoiding a circular dependency.</t>
      </section>
    </section>
    <section anchor="changes">
      <name>Transition from HJS-05</name>
      <t>This Internet-Draft is intended to replace <tt>draft-wang-hjs-accountability</tt>. The following summarizes the technical transition from <tt>draft-wang-hjs-accountability-05</tt>:</t>
      <ul spacing="normal">
        <li>renamed the technical protocol component from HJS to <strong>JEP Receipt Profile</strong> and started a new Internet-Draft filename for the renamed component;</li>
        <li>aligned the profile with JEP-Core 0.7, JEP Profiles-01, and JEP Conformance-01;</li>
        <li>introduced JEP-RP-1 as the initial profile version under the new JEP Receipt Profile namespace;</li>
        <li>moved primary receipt-record binding from generic use of JEP <tt>what</tt> to a critical JEP extension so D, T, and V retain their required Core <tt>what</tt> semantics;</li>
        <li>made the receipt-binding extension mandatory and critical for JEP-RP-1;</li>
        <li>defined publisher-controlled HTTPS identifiers for the profile and extension;</li>
        <li>separated JEP actor, signer, and observed AI agent;</li>
        <li>changed logical event references from Event Hash to Event Identity;</li>
        <li>retained Event Hash only for exact signed-artifact pinning;</li>
        <li>changed receipt-manifest <tt>root_event</tt> and event descriptors to carry Event Identity plus optional Event Hash;</li>
        <li>prohibited a manifest from embedding the Event Hash of the JEP event that binds that manifest, eliminating a circular hash dependency;</li>
        <li>removed <tt>validation-report</tt> as a baseline primary record type; validation reports may remain bundle artifacts;</li>
        <li>made JEP <tt>archival</tt> mode the required and default repeatable receipt validation mode when no other mode is explicitly requested;</li>
        <li>removed assumptions that a bundle is a causal or responsibility chain;</li>
        <li>replaced cumulative or implicit validation assumptions with independent Receipt Profile checks and <tt>valid</tt> / <tt>invalid</tt> / <tt>indeterminate</tt> status;</li>
        <li>made receipt validation preserve the underlying JEP validation result rather than replacing it;</li>
        <li>defined exact baseline JSON shapes for behavior records, evidence descriptors, manifests, event descriptors, and record descriptors;</li>
        <li>defined JCS plus SHA-256 baseline digest rules for JEP-RP-1 records;</li>
        <li>removed the under-specified set of HJS-Core-1 optional extension identifiers from the narrow waist;</li>
        <li>moved model, tool, policy, risk, explanation, multi-party, identity-rotation, and other specialized semantics to companion or deployment profiles;</li>
        <li>tightened privacy and non-inference language;</li>
        <li>changed IANA language to request no action.</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="JEP" target="https://www.ietf.org/archive/id/draft-wang-jep-judgment-event-protocol-07.html">
          <front>
            <title>Judgment Event Protocol (JEP)</title>
            <author initials="Y." surname="Wang" fullname="Yuqiang Wang"/>
            <date year="2026" month="September" day="26"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wang-jep-judgment-event-protocol-07"/>
        </reference>
        <reference anchor="JEP-PROFILES" target="https://www.ietf.org/archive/id/draft-wang-jep-profiles-01.html">
          <front>
            <title>JEP Profiles and Interoperability</title>
            <author initials="Y." surname="Wang" fullname="Yuqiang Wang"/>
            <date year="2026" month="September" day="26"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wang-jep-profiles-01"/>
        </reference>
        <reference anchor="JEP-CONFORMANCE" target="https://www.ietf.org/archive/id/draft-wang-jep-conformance-02.html">
          <front>
            <title>JEP Conformance and Test Suite</title>
            <author initials="Y." surname="Wang" fullname="Yuqiang Wang"/>
            <date year="2026" month="September" day="30"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wang-jep-conformance-02"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>
        <reference anchor="RFC8785" target="https://www.rfc-editor.org/rfc/rfc8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author initials="A." surname="Rundgren"/>
            <author initials="B." surname="Jordan"/>
            <author initials="S." surname="Erdtman"/>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="RFC" value="8785"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/rfc/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray"/>
            <date year="2017" month="December"/>
          </front>
          <seriesInfo name="RFC" value="8259"/>
        </reference>
        <reference anchor="RFC7493" target="https://www.rfc-editor.org/rfc/rfc7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author initials="T." surname="Bray"/>
            <date year="2015" month="March"/>
          </front>
          <seriesInfo name="RFC" value="7493"/>
        </reference>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/rfc/rfc3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author initials="T." surname="Berners-Lee"/>
            <author initials="R." surname="Fielding"/>
            <author initials="L." surname="Masinter"/>
            <date year="2005" month="January"/>
          </front>
          <seriesInfo name="RFC" value="3986"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8792" target="https://www.rfc-editor.org/rfc/rfc8792">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author initials="K." surname="Watsen"/>
            <author initials="E." surname="Auerswald"/>
            <author initials="A." surname="Farrel"/>
            <author initials="Q." surname="Wu"/>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="RFC" value="8792"/>
        </reference>
      </references>
    </references>
    <section anchor="changes-01">
      <name>Changes from Revision -00</name>
      <t>This appendix records changes to a work in progress; it does not assert that implementations of -00 already meet -01.</t>
      <ul spacing="normal">
        <li>Specified the complete top-level digest input, lowercase SHA-256 text, and RFC 8785 processing without field exclusions, defaults, or implicit transformations.</li>
        <li>Made duplicate-name rejection, Unicode validity, binary64 processing, optional-null handling, and additional-member treatment explicit.</li>
        <li>Specified the types of participant references and optional manifest and descriptor members, and required baseline primary media type and digest values.</li>
        <li>Specified opaque external-artifact digests separately from JCS record digests, including transport and redaction boundaries.</li>
        <li>Defined the minimum required checks, primary-only scope, inventory scope, missing-input behavior, and integration with critical-extension processing. Preserved fail precedence and independent Core checks.</li>
        <li>Added reproducible canonical-byte, digest, and rejection examples; updated the JEP Conformance reference to revision -02.</li>
        <li>Assigned a distinct signed semantic profile identifier, preserved the -00 identifier, and removed reliance on an external draft-revision agreement for selecting these Receipt rules.</li>
        <li>Defined the minimum portable validation-result contract using existing JEP Conformance statuses, with explicit target, required checks, scope, inventory components, and omissions.</li>
      </ul>
      <t>Potential interoperability changes for -00 implementations include rejecting previously accepted duplicate names or invalid field types; retaining previously stripped members in digest input; requiring baseline <tt>sha256</tt> and <tt>application/json</tt> for primary records; and no longer reporting unavailable required evidence as verified. Previously unspecified evidence transformations MUST NOT be guessed or retrospectively assigned to historical receipts. Historical validation reports retain their original scope and revision.</t>
      <table anchor="compatibility-table">
        <name>Compatibility and Migration from -00</name>
        <thead>
          <tr>
            <th>Change</th>
            <th>Classification and handling</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Complete-record JCS and SHA-256; duplicate and Unicode rules</td>
            <td>Clarifies the already specified record algorithm and its input domain. An implementation bug is fixed without rewriting historical artifacts or claiming that earlier reports performed new checks.</td>
          </tr>
          <tr>
            <td>Types of participant reference values and optional manifest members</td>
            <td>New explicit constraints where -00 left types unspecified. Producers targeting -01 construct new records accordingly. An old record outside these constraints is not silently repaired or relabeled.</td>
          </tr>
          <tr>
            <td>Opaque evidence octets, descriptor digest algorithm, and transport recovery</td>
            <td>New explicit conventions where -00 was incomplete. Historical digests are interpreted under their original documented convention, if known. A byte transformation creates a new artifact and digest; a missing convention is not guessed.</td>
          </tr>
          <tr>
            <td>Default mode, required checks, missing input, and capability reporting</td>
            <td>The archival default already existed. The required-check and result rules are made explicit. New validation can be performed and separately reported without modifying an earlier result.</td>
          </tr>
          <tr>
            <td>Signed profile identifier and portable result contract</td>
            <td>New -01 contract. Preserve old identifiers, events, and reports. A producer creates a new signed binding selecting the new identifier. A verifier reports exactly the rules and scope evaluated; a new report cannot retroactively change the old signed claim.</td>
          </tr>
        </tbody>
      </table>
      <t>Migration to -01 requires the new signed identifier and applicable record constraints; changing a report label is insufficient. A historical behavior record whose content meets these rules can be bound by a new event without changing that content. A manifest MUST carry the new profile identifier and therefore receives a new digest. The historical event and reports remain unchanged. A diagnostic evaluation of old record content under new rules MUST NOT be reported as successful profile binding of an event carrying the old identifier.</t>
    </section>
    <section anchor="test-vectors">
      <name>Canonicalization and Rejection Test Vectors</name>
      <t>This appendix supplies deterministic tests for the record canonicalization and digest rules. A signed receipt example is provided in <xref target="signed-example"/>. Neither appendix establishes full-protocol conformance. The normative requirements in the body of this document take precedence over examples and derived test files.<xref target="signed-example"/>. Neither appendix establishes full-protocol conformance. The normative requirements in the body of this document take precedence over examples and derived test files.</t>
      <t>For each positive example, canonical-byte hexadecimal is wrapped for presentation only. Concatenate the hex lines, decode pairs of hexadecimal digits to octets, and apply SHA-256 to those octets. Do not hash the hex characters or the display newlines. The lowercase digest text consists of <tt>sha256:</tt> followed immediately by the displayed hash.</t>
      <section anchor="vector-minimal-behavior">
        <name>minimal-behavior</name>
        <t>Input JSON:</t>
        <sourcecode type="json">{
  "jep_receipt_record": "1",
  "record_type": "behavior",
  "agent": {
    "id": "agent:example"
  },
  "action": {
    "type": "observe"
  },
  "created_at": 0,
  "evidence": []
}</sourcecode>
        <t>Canonical UTF-8 bytes (139 octets), expressed in hexadecimal:</t>
        <sourcecode type="text">7b22616374696f6e223a7b2274797065223a226f627365727665227d2c226167
656e74223a7b226964223a226167656e743a6578616d706c65227d2c22637265
617465645f6174223a302c2265766964656e6365223a5b5d2c226a65705f7265
63656970745f7265636f7264223a2231222c227265636f72645f74797065223a
226265686176696f72227d</sourcecode>
        <t>SHA-256, in lowercase hexadecimal:</t>
        <sourcecode type="text">e0d6b6bc6cf76a33e9124a4bd7298123e723745586aac1caa8004c00e013cd6b</sourcecode>
      </section>
      <section anchor="vector-minimal-manifest">
        <name>minimal-manifest</name>
        <t>Input JSON:</t>
        <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "jep_receipt_manifest": "1",
  "profile": "https://humanjudgment.org/jep/profiles/receipt/1/draf\
t-01",
  "root_event": {
    "event_identity": {
      "who": "did:example:receipt-service",
      "id": "receipt-1"
    }
  },
  "events": [
    {
      "event_identity": {
        "who": "did:example:receipt-service",
        "id": "receipt-1"
      }
    }
  ],
  "records": [
    {
      "record_type": "behavior",
      "digest": "sha256:e0d6b6bc6cf76a33e9124a4bd7298123e723745586a\
ac1caa8004c00e013cd6b",
      "media_type": "application/json"
    }
  ],
  "created_at": 0
}</sourcecode>
        <t>Canonical UTF-8 bytes (439 octets), expressed in hexadecimal:</t>
        <sourcecode type="text">7b22637265617465645f6174223a302c226576656e7473223a5b7b226576656e
745f6964656e74697479223a7b226964223a22726563656970742d31222c2277
686f223a226469643a6578616d706c653a726563656970742d73657276696365
227d7d5d2c226a65705f726563656970745f6d616e6966657374223a2231222c
2270726f66696c65223a2268747470733a2f2f68756d616e6a7564676d656e74
2e6f72672f6a65702f70726f66696c65732f726563656970742f312f64726166
742d3031222c227265636f726473223a5b7b22646967657374223a2273686132
35363a6530643662366263366366373661333365393132346134626437323938
3132336537323337343535383661616331636161383030346330306530313363
643662222c226d656469615f74797065223a226170706c69636174696f6e2f6a
736f6e222c227265636f72645f74797065223a226265686176696f72227d5d2c
22726f6f745f6576656e74223a7b226576656e745f6964656e74697479223a7b
226964223a22726563656970742d31222c2277686f223a226469643a6578616d
706c653a726563656970742d73657276696365227d7d7d</sourcecode>
        <t>SHA-256, in lowercase hexadecimal:</t>
        <sourcecode type="text">c7a9e369784ffefbe3ea2c51abac214010dbe6c48efb64a92568bd1448368c78</sourcecode>
        <t>This manifest can be the primary record of an event whose Event Identity is <tt>(did:example:receipt-service, receipt-1)</tt>. It omits that binding event's Event Hash and references the behavior record in <xref target="vector-minimal-behavior"/>. No event signature or inventory validation result is implied.</t>
      </section>
      <section anchor="vector-unicode-null-array-number-boundaries">
        <name>unicode-null-array-number-boundaries</name>
        <t>Input JSON:</t>
        <sourcecode type="json">{
  "jep_receipt_record": "1",
  "record_type": "behavior",
  "agent": {
    "id": "agent:example"
  },
  "action": {
    "type": "observe"
  },
  "created_at": 0,
  "evidence": [],
  "context": {
    "n": null,
    "array": [
      null,
      {},
      []
    ],
    "numbers": [
      -0.0,
      1e-07,
      1e-06,
      1e+20,
      1e+21
    ],
    "names": {
      "\ue000": "bmp",
      "\ud83d\ude00": "non-bmp"
    },
    "strings": [
      "\u00e9",
      "e\u0301"
    ]
  }
}</sourcecode>
        <t>Canonical UTF-8 bytes (299 octets), expressed in hexadecimal:</t>
        <sourcecode type="text">7b22616374696f6e223a7b2274797065223a226f627365727665227d2c226167
656e74223a7b226964223a226167656e743a6578616d706c65227d2c22636f6e
74657874223a7b226172726179223a5b6e756c6c2c7b7d2c5b5d5d2c226e223a
6e756c6c2c226e616d6573223a7b22f09f9880223a226e6f6e2d626d70222c22
ee8080223a22626d70227d2c226e756d62657273223a5b302c31652d372c302e
3030303030312c3130303030303030303030303030303030303030302c31652b
32315d2c22737472696e6773223a5b22c3a9222c2265cc81225d7d2c22637265
617465645f6174223a302c2265766964656e6365223a5b5d2c226a65705f7265
63656970745f7265636f7264223a2231222c227265636f72645f74797065223a
226265686176696f72227d</sourcecode>
        <t>SHA-256, in lowercase hexadecimal:</t>
        <sourcecode type="text">41bfc5f24cfea4da326b1a5e37778db049f9d1cc41db1c07d46e4f261fb06259</sourcecode>
        <t>This input exercises explicit nulls, nested arrays, UTF-16 member-name ordering, canonically distinct Unicode strings, negative zero, and exponent-format boundaries. Removing a null or additional member, reordering an array, or normalizing the two strings before JCS would change the record value and violate the digest-input rules.</t>
      </section>
      <section anchor="rejection-vectors">
        <name>Rejection and Status Cases</name>
        <t>The following raw JSON snippets are invalid input for canonicalization. They are parser tests, not complete behavior records. A test harness MUST preserve the raw JSON text so that duplicate names are not removed before testing. Each snippet MUST be rejected:</t>
        <sourcecode type="json">{"a":1,"a":2}</sourcecode>
        <sourcecode type="json">{"outer":{"a":1,"\u0061":2}}</sourcecode>
        <sourcecode type="json">{"s":"\ud800"}</sourcecode>
        <sourcecode type="json">{"n":NaN}</sourcecode>
        <sourcecode type="json">{"n":1e400}</sourcecode>
        <t>A serialized record containing invalid UTF-8 octets is likewise rejected. A parser must not replace the invalid octets with replacement characters.</t>
        <t>The following cases apply to the complete records above. Other required checks are assumed to pass unless stated otherwise; the examples specify Receipt Profile check results, not signature test vectors.</t>
        <table>
          <name>Required Result Distinctions</name>
          <thead>
            <tr>
              <th>Condition</th>
              <th>Result</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>The primary record is unavailable.</td>
              <td>record-binding and its applicable structure check are indeterminate; receipt status is indeterminate.</td>
            </tr>
            <tr>
              <td>A well-formed record does not match record_digest.</td>
              <td>record-binding fails; receipt status is invalid.</td>
            </tr>
            <tr>
              <td>The minimal behavior record has evidence set to null, and record_digest is recomputed over that exact changed value.</td>
              <td>record-binding passes; record-structure fails; receipt status is invalid.</td>
            </tr>
            <tr>
              <td>A required opaque artifact is unavailable.</td>
              <td>Its component integrity result is indeterminate, never pass.</td>
            </tr>
            <tr>
              <td>Required inventory has one digest mismatch and one missing artifact.</td>
              <td>bundle-integrity fails; receipt status is invalid. Fail takes precedence.</td>
            </tr>
            <tr>
              <td>A behavior record contains an additional null-valued member and its digest includes it.</td>
              <td>The additional member is preserved. The baseline does not reject solely because the name is unrecognized.</td>
            </tr>
          </tbody>
        </table>
        <t>Implementers SHOULD additionally test invalid field types, inconsistent record-type declarations, absent critical markers, Event Identity and Event Hash mismatches, circular manifest bindings, unknown critical extensions, unperformed checks, and historical revision selection. Digest agreement alone does not test these properties.</t>
      </section>
    </section>
    <section anchor="signed-example">
      <name>Signed Receipt and Validation Cases</name>
      <t>This appendix exercises the existing <tt>JEP-Baseline-Ed25519-JWS-JCS-0.7</tt> signature class in <xref target="JEP-CONFORMANCE"/> together with the receipt-binding extension. It defines no new signature mechanism. The portable result contract is specified in Section 10.6; the JSON below is test-vector notation.</t>
      <t>The example uses a fixed public test key, the explicitly selected signed profile identifier in Section 4.1, and primary-receipt scope. The request omits the mode, so the effective mode is <tt>archival</tt>. No acceptance state, historical Event Identity database, audience restriction, freshness rule, actor/key binding, or external evidence assessment is selected. Signature success means validation with the supplied test public key; it does not authenticate an external person or organization. Event Identity checking here is limited to the identifier rules for the supplied event.</t>
      <t>The deterministic private seed below is public test material and MUST NOT be used for production signing. The primary record is exactly the minimal behavior record in <xref target="vector-minimal-behavior"/>.</t>
      <t>Ed25519 test private seed, in hexadecimal:</t>
      <sourcecode type="text">000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f</sourcecode>
      <t>Corresponding raw Ed25519 public key, in hexadecimal:</t>
      <sourcecode type="text">03a107bff3ce10be1d70dd18e74bc09967e4d6309ba50d5f1ddc8664125531b8</sourcecode>
      <t>Unsigned event:</t>
      <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "jep": "1",
  "id": "receipt-test-1",
  "verb": "J",
  "who": "urn:example:receipt-signer",
  "when": 0,
  "what": {
    "claim": "test-observation"
  },
  "ext": {
    "https://humanjudgment.org/jep/extensions/receipt-binding/1": {
      "profile": "https://humanjudgment.org/jep/profiles/receipt/1/\
draft-01",
      "record_type": "behavior",
      "record_digest": "sha256:e0d6b6bc6cf76a33e9124a4bd7298123e723\
745586aac1caa8004c00e013cd6b",
      "media_type": "application/json"
    }
  },
  "ext_crit": [
    "https://humanjudgment.org/jep/extensions/receipt-binding/1"
  ]
}</sourcecode>
      <t>Exact protected header UTF-8 text, with no trailing newline:</t>
      <sourcecode type="json">{"alg":"Ed25519"}</sourcecode>
      <t>Protected-header base64url segment:</t>
      <sourcecode type="text">eyJhbGciOiJFZDI1NTE5In0</sourcecode>
      <t>The JEP Signing Payload is the JCS UTF-8 serialization of the unsigned event. Its octets, expressed as hexadecimal using the display convention in <xref target="test-vectors"/>, are:</t>
      <sourcecode type="text">7b22657874223a7b2268747470733a2f2f68756d616e6a7564676d656e742e6f
72672f6a65702f657874656e73696f6e732f726563656970742d62696e64696e
672f31223a7b226d656469615f74797065223a226170706c69636174696f6e2f
6a736f6e222c2270726f66696c65223a2268747470733a2f2f68756d616e6a75
64676d656e742e6f72672f6a65702f70726f66696c65732f726563656970742f
312f64726166742d3031222c227265636f72645f646967657374223a22736861
3235363a65306436623662633663663736613333653931323461346264373239
3831323365373233373435353836616163316361613830303463303065303133
63643662222c227265636f72645f74797065223a226265686176696f72227d7d
2c226578745f63726974223a5b2268747470733a2f2f68756d616e6a7564676d
656e742e6f72672f6a65702f657874656e73696f6e732f726563656970742d62
696e64696e672f31225d2c226964223a22726563656970742d746573742d3122
2c226a6570223a2231222c2276657262223a224a222c2277686174223a7b2263
6c61696d223a22746573742d6f62736572766174696f6e227d2c227768656e22
3a302c2277686f223a2275726e3a6578616d706c653a726563656970742d7369
676e6572227d</sourcecode>
      <t>The JWS Signing Input is the ASCII protected-header segment, a dot, and the unpadded base64url encoding of the JEP Signing Payload. The transmitted detached form has an empty middle segment; the verifier reconstructs that segment for the signing input as required by <xref target="JEP-CONFORMANCE"/>.</t>
      <t>Detached signature string (unfold before use):</t>
      <sourcecode type="text">NOTE: '\' line wrapping per RFC 8792

eyJhbGciOiJFZDI1NTE5In0..3zdRKrT2dWuSffGaTeo0jDo7UeUCBelAFfuHSSMAqp\
F1_3W7kLxOuc3NzD377iIGzMFyXHHE3IWKSOVfFC4jBg</sourcecode>
      <t>Complete signed event:</t>
      <sourcecode type="json">NOTE: '\' line wrapping per RFC 8792

{
  "jep": "1",
  "id": "receipt-test-1",
  "verb": "J",
  "who": "urn:example:receipt-signer",
  "when": 0,
  "what": {
    "claim": "test-observation"
  },
  "ext": {
    "https://humanjudgment.org/jep/extensions/receipt-binding/1": {
      "profile": "https://humanjudgment.org/jep/profiles/receipt/1/\
draft-01",
      "record_type": "behavior",
      "record_digest": "sha256:e0d6b6bc6cf76a33e9124a4bd7298123e723\
745586aac1caa8004c00e013cd6b",
      "media_type": "application/json"
    }
  },
  "ext_crit": [
    "https://humanjudgment.org/jep/extensions/receipt-binding/1"
  ],
  "sig": "eyJhbGciOiJFZDI1NTE5In0..3zdRKrT2dWuSffGaTeo0jDo7UeUCBelA\
FfuHSSMAqpF1_3W7kLxOuc3NzD377iIGzMFyXHHE3IWKSOVfFC4jBg"
}</sourcecode>
      <t>The Event Hash uses the complete signed event, including <tt>sig</tt>, according to JEP-Core. It is <tt>sha256:</tt> followed by:</t>
      <sourcecode type="text">d8522307eec9432c1e6b9ee56c2d6c8ed3bcd8f3d3584d87092fd85d946ac429</sourcecode>
      <t>The expected results for this context are <tt>cryptographic: pass</tt>, <tt>extension_processing: pass</tt>, <tt>record-binding: pass</tt>, <tt>record-structure: pass</tt>, and Receipt Profile status <tt>valid</tt>. Manifest, inventory, and participant-reference checks are not applicable. This result does not establish any unselected trust, historical, or policy property.</t>
      <t>The following mutations define negative cases. When an event member changes, the event is re-signed with the test key unless the row explicitly changes the signature. Re-signing isolates the receipt rule under test from signature failure. The private seed, exact header, and rules above make the re-signed variants reproducible.</t>
      <table>
        <name>Signed Receipt Negative Cases</name>
        <thead>
          <tr>
            <th>Change</th>
            <th>Required result</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Withhold the primary record; keep the event unchanged.</td>
            <td>Signature passes. Binding, applicable structure, and extension processing are indeterminate; receipt status is indeterminate.</td>
          </tr>
          <tr>
            <td>Change action.type to "modified" in the record; keep the event unchanged.</td>
            <td>Signature and record structure pass. Binding fails; receipt status is invalid.</td>
          </tr>
          <tr>
            <td>Change the extension record_type to "receipt-manifest" and re-sign; supply the original behavior record.</td>
            <td>Signature and digest comparison pass. Manifest structure fails; receipt status is invalid.</td>
          </tr>
          <tr>
            <td>Set evidence to null; recompute record_digest over the changed value and re-sign.</td>
            <td>Signature and binding pass. Behavior-record structure fails; receipt status is invalid.</td>
          </tr>
          <tr>
            <td>Decode the signature bytes, flip bit 0 of the first byte, and re-encode.</td>
            <td>Cryptographic fails; receipt status is invalid regardless of digest agreement.</td>
          </tr>
          <tr>
            <td>Remove the receipt identifier from ext_crit and re-sign.</td>
            <td>Receipt-extension fails; receipt status is invalid.</td>
          </tr>
          <tr>
            <td>Use sha512: plus the SHA-512 lowercase hex of the primary canonical bytes in record_digest, and re-sign.</td>
            <td>Receipt-extension fails under the selected baseline; this is not an unsupported-algorithm success or indeterminate result.</td>
          </tr>
          <tr>
            <td>Add an unknown critical extension and re-sign.</td>
            <td>JEP extension_processing fails; receipt status is invalid.</td>
          </tr>
          <tr>
            <td>Omit the Receipt Profile selection from the validation context.</td>
            <td>Profile-binding is indeterminate. The signed value is not an instruction to enable an unselected profile.</td>
          </tr>
          <tr>
            <td>Use the -00 profile identifier in the extension and re-sign, while requesting this profile.</td>
            <td>Profile-binding and receipt-extension fail. The old identifier is not an alias for this contract.</td>
          </tr>
          <tr>
            <td>Omit a separate specification-revision hint while explicitly selecting the signed profile identifier.</td>
            <td>The original positive result is unchanged. The signed semantic identifier determines the Receipt contract.</td>
          </tr>
          <tr>
            <td>Explicitly request acceptance from a verifier implementing only archival mode.</td>
            <td>The requested mode is unsupported; the verifier does not substitute archival or claim valid acceptance.</td>
          </tr>
        </tbody>
      </table>
      <t>Derived executable fixtures MAY include additional manifest and inventory cases. Such fixtures MUST state the context and scope actually tested. Passing this appendix is not sufficient evidence of support for every JEP verb, companion profile, trust model, or acceptance mode.</t>
    </section>
  </back>
</rfc>
