<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="exp"
     docName="draft-watts-eqr-conformance-00"
     ipr="trust200902"
     submissionType="IETF"
     version="3">
  <front>
    <title abbrev="EQR Conformance">Deterministic Conformance Profile and Test Vectors for Evidence Qualification Receipts</title>
    <seriesInfo name="Internet-Draft" value="draft-watts-eqr-conformance-00"/>
    <author fullname="Deonté O’dell Watts" initials="D. O." surname="Watts">
      <organization>GoodShyt Group Inc.</organization>
      <address>
        <postal>
          <city>San Francisco</city>
          <region>CA</region>
          <country>United States</country>
        </postal>
        <email>deonte@goodshyt.fun</email>
        <uri>https://orcid.org/0009-0005-8586-3650</uri>
      </address>
    </author>
    <date year="2026" month="October" day="14"/>
    <area>Security</area>
    <keyword>evidence</keyword>
    <keyword>conformance</keyword>
    <keyword>authorization</keyword>
    <keyword>test vectors</keyword>
    <abstract>
      <t>
        This document defines a deterministic conformance profile and test-vector corpus for Evidence Qualification Receipts (EQRs).
        The profile, named eqr-core-1, makes receipt conformance mechanically reproducible: strict JSON structure, SHA-256 digest
        encoding, UTC timestamp handling, evidence-reference integrity, requirement-state derivation, and three-valued
        PASS, FAIL, or INDETERMINATE results are checked by a closed algorithm.  The profile is intentionally narrow.
        Conformance does not establish that evidence is true, that a proposition is scientifically valid, that an issuer is
        trustworthy, or that an action is authorized.  The goal is interoperable verification of receipt semantics, not
        promotion of conformance into substantive truth.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>
        Evidence Qualification Receipts are described in <xref target="I-D.watts-eqr"/>.  Their central requirement is that
        unresolved required evidence remain distinguishable from both satisfied and failed evidence, and that qualification
        remain distinct from authorization.  That architectural distinction is useful only if independent implementations
        derive the same status from the same declared requirement states.
      </t>
      <t>
        This document therefore defines a strict conformance profile, <tt>eqr-core-1</tt>, plus executable test vectors.
        The profile does not attempt to determine whether evidence corresponds to reality.  It determines whether an EQR
        object is structurally and semantically self-consistent under a fully specified finite rule set.
      </t>
      <t>
        A receipt can be conformant and still contain evidence from an issuer a relying party does not trust.  A conformant
        PASS result is not permission to execute an action.
      </t>
    </section>

    <section anchor="conventions">
      <name>Conventions and Terminology</name>
      <t>
        The key words <bcp14>MUST</bcp14>, <bcp14>MUST NOT</bcp14>, <bcp14>REQUIRED</bcp14>,
        <bcp14>SHOULD</bcp14>, <bcp14>SHOULD NOT</bcp14>, and <bcp14>MAY</bcp14> 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.
      </t>
      <dl>
        <dt>Conformance</dt>
        <dd><t>Agreement with the finite syntactic and semantic rules of this profile.</t></dd>
        <dt>Substantive validity</dt>
        <dd><t>Whether the underlying evidence and proposition are actually correct.  This document does not establish it.</t></dd>
        <dt>Requirement state</dt>
        <dd><t>One of satisfied, failed, missing, unresolved, or stale.</t></dd>
        <dt>Derived status</dt>
        <dd><t>The PASS, FAIL, or INDETERMINATE result computed from the requirement states.</t></dd>
      </dl>
    </section>

    <section anchor="profile">
      <name>The eqr-core-1 Profile</name>
      <t>
        An <tt>eqr-core-1</tt> object is a JSON object as defined by <xref target="RFC8259"/>.
        Duplicate JSON member names <bcp14>MUST</bcp14> cause non-conformance.
      </t>
      <t>
        SHA-256 is the only digest algorithm in this profile <xref target="RFC6234"/>.
        Digest values <bcp14>MUST</bcp14> be exactly 32 octets represented using unpadded base64url
        <xref target="RFC4648"/>.  A producer that hashes a JSON object <bcp14>MUST</bcp14> first apply
        the JSON Canonicalization Scheme <xref target="RFC8785"/>.
      </t>
      <t>
        All timestamps in this profile <bcp14>MUST</bcp14> be UTC Internet timestamps ending in
        <tt>Z</tt> and conforming to <xref target="RFC3339"/>.
      </t>

      <section anchor="required-members">
        <name>Required Members</name>
        <t>The profile requires exactly the following top-level members:</t>
        <ul>
          <li><tt>version</tt>, whose value is <tt>"1"</tt>;</li>
          <li><tt>profile_id</tt>, whose value is <tt>"eqr-core-1"</tt>;</li>
          <li><tt>receipt_id</tt> and <tt>issuer</tt>;</li>
          <li><tt>issued_at</tt>, <tt>expires_at</tt>, and <tt>evaluation_time</tt>;</li>
          <li><tt>profile</tt> and <tt>claim</tt> SHA-256 digest objects;</li>
          <li><tt>requirements</tt>;</li>
          <li><tt>evaluation</tt>;</li>
          <li><tt>evidence</tt>; and</li>
          <li><tt>supersedes</tt>, which can be null.</li>
        </ul>
        <t>
          The strict member set is intentional for this conformance profile.  Other EQR profiles can define extensions.
        </t>
      </section>

      <section anchor="requirements">
        <name>Requirement States</name>
        <t>
          Each requirement has a unique <tt>id</tt>, one <tt>state</tt>, and an optional array of
          <tt>evidence_ids</tt>.  The only states are:
        </t>
        <ul>
          <li><tt>satisfied</tt>;</li>
          <li><tt>failed</tt>;</li>
          <li><tt>missing</tt>;</li>
          <li><tt>unresolved</tt>; and</li>
          <li><tt>stale</tt>.</li>
        </ul>
        <t>
          A satisfied requirement <bcp14>MUST</bcp14> name at least one evidence object.  Every named evidence identifier
          <bcp14>MUST</bcp14> resolve within the same receipt.  Evidence used by a satisfied requirement
          <bcp14>MUST NOT</bcp14> be stale at <tt>evaluation_time</tt>.
        </t>
      </section>
    </section>

    <section anchor="derivation">
      <name>Deterministic Status Derivation</name>
      <t>The status derivation function is:</t>
      <sourcecode type="python"><![CDATA[
def derive_status(requirements):
    if not requirements:
        return "indeterminate"

    states = [r["state"] for r in requirements]

    if any(s == "failed" for s in states):
        return "fail"

    if all(s == "satisfied" for s in states):
        return "pass"

    return "indeterminate"
]]></sourcecode>
      <t>
        FAIL has precedence over missing or unresolved information.  PASS is possible only for a non-empty requirement set
        in which every requirement is satisfied.  In every other valid case the result is INDETERMINATE.
      </t>
      <t>
        The receipt's declared <tt>evaluation.status</tt> <bcp14>MUST</bcp14> equal the derived status.
        A mismatch is non-conformant; a verifier <bcp14>MUST NOT</bcp14> rewrite the declaration to make it conform.
      </t>
    </section>

    <section anchor="time">
      <name>Time and Freshness Rules</name>
      <t>
        <tt>expires_at</tt> <bcp14>MUST</bcp14> be later than <tt>issued_at</tt>.
        <tt>evaluation_time</tt> <bcp14>MUST</bcp14> fall within the inclusive receipt validity interval.
      </t>
      <t>
        An evidence object has a <tt>fresh_until</tt> timestamp.  A requirement declared satisfied is non-conformant if any
        evidence object it relies on has <tt>fresh_until</tt> earlier than <tt>evaluation_time</tt>.
      </t>
      <t>
        This rule checks self-consistency only.  It does not establish that the chosen freshness interval is appropriate for
        a relying party's risk or policy.
      </t>
    </section>

    <section anchor="lifecycle">
      <name>Append-Only Supersession</name>
      <t>
        <tt>supersedes</tt> can identify a predecessor receipt.  It <bcp14>MUST NOT</bcp14> equal the current
        <tt>receipt_id</tt>.  This profile does not mutate predecessor state.  New evidence is represented by a new receipt.
      </t>
    </section>

    <section anchor="outcomes">
      <name>Conformance Outcome</name>
      <t>
        A verifier returns two logically separate outputs:
      </t>
      <ul>
        <li><strong>conformant</strong>: whether the object satisfies this profile; and</li>
        <li><strong>derived_status</strong>: pass, fail, or indeterminate when the object is conformant.</li>
      </ul>
      <t>
        Non-conformance <bcp14>MUST NOT</bcp14> be reported as PASS, FAIL, or INDETERMINATE.  Those values describe evidence
        qualification semantics, not parser or profile validity.
      </t>
    </section>

    <section anchor="vectors">
      <name>Normative Test Vectors</name>
      <t>
        The companion corpus contains twenty-one vectors covering valid PASS, FAIL, and INDETERMINATE cases plus malformed or
        internally inconsistent inputs.  The SHA-256 digest of the UTF-8 vector file
        <tt>eqr-core-1-vectors.json</tt> in the author's published package is:
      </t>
      <artwork>8d8832b5de8c12393f47be3a7067ecd69edfc26822441595318e72e77ea923df</artwork>
      <t>
        The corpus includes empty requirements, FAIL precedence, missing and stale evidence, duplicate requirement identifiers,
        unsupported hash algorithms, invalid digest encodings, expired receipts, unknown evidence references, invalid state
        values, self-supersession, and declared-status mismatch.
      </t>
      <t>
        An implementation claiming conformance to the vector profile <bcp14>MUST</bcp14> produce the expected conformance
        Boolean and derived status for every vector.  Failure of one vector is sufficient to reject a claim of complete
        vector-profile conformance.
      </t>
    </section>

    <section anchor="falsifiability">
      <name>Falsifiability and Limits</name>
      <t>
        This specification is intentionally falsifiable at the implementation layer.  If two purportedly conformant
        implementations produce different outputs for the same normative vector, at least one implementation is non-conformant
        or the specification is ambiguous and requires revision.
      </t>
      <t>
        Passing all vectors does not establish truth of the evidence, scientific validity of the proposition, honesty of the
        issuer, appropriateness of the profile, authorization to act, successful execution, or safety.  Those are different
        claims requiring different evidence.
      </t>
    </section>

    <section anchor="relationship">
      <name>Relationship to Other Work</name>
      <t>
        This document is a conformance companion to <xref target="I-D.watts-eqr"/> and follows the non-collapse distinction
        described in <xref target="I-D.watts-noncollapse"/>.  It does not replace executor-side action/evidence processing
        such as <xref target="I-D.schrock-aeb"/>, evidence challenge protocols such as <xref target="I-D.schrock-aec"/>,
        claim-preserving evidence exchange such as <xref target="I-D.abak-claim-preservation"/>, or runtime conformance receipts
        such as <xref target="I-D.correctover-ccs"/>.
      </t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>
        Strict parsing prevents duplicate-member substitution and status laundering through ambiguous JSON.  Digest and
        timestamp checks prevent several classes of malformed or stale self-consistency claims, but this profile provides no
        key management, issuer authentication, revocation, trust-anchor selection, or policy decision.
      </t>
      <t>
        A malicious issuer can create a perfectly conformant receipt containing false evidence.  Therefore conformant
        <bcp14>MUST NOT</bcp14> be interpreted as truthful, trusted, authorized, or safe.
      </t>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>
        Evidence identifiers and digests can still act as correlators.  Implementations should minimize externally exposed
        evidence metadata and avoid placing sensitive plaintext into receipts when a scoped digest or protected reference is
        sufficient.
      </t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>
        This document has no IANA actions.  The string <tt>eqr-core-1</tt> is a profile label defined by this experimental
        document and is not an IANA registration.
      </t>
    </section>
  </middle>

  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119"><front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author fullname="Scott Bradner" 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/info/rfc8174"><front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author fullname="Barry Leiba" initials="B." surname="Leiba"/><date year="2017" month="May"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/></reference>
      <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259"><front><title>The JavaScript Object Notation (JSON) Data Interchange Format</title><author fullname="Tim Bray" initials="T." surname="Bray"/><date year="2017" month="December"/></front><seriesInfo name="STD" value="90"/><seriesInfo name="RFC" value="8259"/></reference>
      <reference anchor="RFC8785" target="https://www.rfc-editor.org/info/rfc8785"><front><title>JSON Canonicalization Scheme (JCS)</title><author fullname="Anders Rundgren" initials="A." surname="Rundgren"/><author fullname="Brendan Jordan" initials="B." surname="Jordan"/><author fullname="Samuel Erdtman" initials="S." surname="Erdtman"/><date year="2020" month="June"/></front><seriesInfo name="RFC" value="8785"/></reference>
      <reference anchor="RFC3339" target="https://www.rfc-editor.org/info/rfc3339"><front><title>Date and Time on the Internet: Timestamps</title><author fullname="Graham Klyne" initials="G." surname="Klyne"/><author fullname="Chris Newman" initials="C." surname="Newman"/><date year="2002" month="July"/></front><seriesInfo name="RFC" value="3339"/></reference>
      <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4648"><front><title>The Base16, Base32, and Base64 Data Encodings</title><author fullname="Simon Josefsson" initials="S." surname="Josefsson"/><date year="2006" month="October"/></front><seriesInfo name="RFC" value="4648"/></reference>
      <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234"><front><title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title><author fullname="Donald Eastlake" initials="D." surname="Eastlake"/><author fullname="Tony Hansen" initials="T." surname="Hansen"/><date year="2011" month="May"/></front><seriesInfo name="RFC" value="6234"/></reference>
    </references>
    <references>
      <name>Informative References</name>
      <reference anchor="I-D.watts-eqr" target="https://datatracker.ietf.org/doc/draft-watts-agent-evidence-boundary/"><front><title>Evidence-Bounded Authorization for Agentic Systems: Evidence Qualification Receipts</title><author fullname="Deonte Watts" initials="D." surname="Watts"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-watts-agent-evidence-boundary-00"/><refcontent>Work in Progress</refcontent></reference>
      <reference anchor="I-D.watts-noncollapse" target="https://datatracker.ietf.org/doc/draft-watts-agent-noncollapse-requirements/"><front><title>Non-Collapse Requirements for Evidence-Bearing Agent Systems</title><author fullname="Deonté O’dell Watts" initials="D. O." surname="Watts"/><date year="2026" month="October"/></front><seriesInfo name="Internet-Draft" value="draft-watts-agent-noncollapse-requirements-00"/><refcontent>Work in Progress</refcontent></reference>
      <reference anchor="I-D.schrock-aeb" target="https://datatracker.ietf.org/doc/draft-schrock-action-evidence-boundary/"><front><title>The Action Evidence Boundary for Consequential Agent Effects</title><author fullname="Iman Schrock" initials="I." surname="Schrock"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-schrock-action-evidence-boundary-07"/><refcontent>Work in Progress</refcontent></reference>
      <reference anchor="I-D.schrock-aec" target="https://datatracker.ietf.org/doc/draft-schrock-ae-challenge/"><front><title>An Authorization Evidence Challenge for High-Risk Agent Actions</title><author fullname="Iman Schrock" initials="I." surname="Schrock"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-schrock-ae-challenge-08"/><refcontent>Work in Progress</refcontent></reference>
      <reference anchor="I-D.abak-claim-preservation" target="https://datatracker.ietf.org/doc/draft-abak-ai-evaluation-claim-preservation/"><front><title>Claim-Preserving Exchange of AI Evaluation Evidence</title><author fullname="A. T. Abak" initials="A. T." surname="Abak"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-abak-ai-evaluation-claim-preservation-00"/><refcontent>Work in Progress</refcontent></reference>
      <reference anchor="I-D.correctover-ccs" target="https://datatracker.ietf.org/doc/draft-correctover-ccs/"><front><title>Correctover Conformance Shape: A Receipt and Binding Specification for Agent Runtime Verification</title><author fullname="G. Wang" initials="G." surname="Wang"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-correctover-ccs-10"/><refcontent>Work in Progress</refcontent></reference>
    </references>
  </back>
</rfc>
