<?xml version="1.0" encoding="utf-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-wallace-aipref-grant-binding-03"
     category="std"
     submissionType="IETF"
     consensus="true"
     version="3"
     xml:lang="en"
     tocInclude="true"
     sortRefs="true"
     symRefs="true">

  <front>
    <title abbrev="AIPREF Grant Binding">A Verifiable-Credential Binding for AI Usage Preferences: Expressing Grants that Lift AIPREF Preferences</title>

    <author fullname="Wallace" surname="Wallace">
      <organization>LicenseFoundry</organization>
      <address>
        <postal>
          <country>NL</country>
        </postal>
        <email>wallace@licensefoundry.com</email>
      </address>
    </author>

    <date/>

    <keyword>AI preferences</keyword>
    <keyword>text and data mining</keyword>
    <keyword>verifiable credentials</keyword>
    <keyword>licensing</keyword>

    <abstract>
      <t>The AI Preferences (AIPREF) vocabulary lets those with rights in a
      digital asset express preferences -- for example, that training of AI
      models is disallowed -- about how automated systems process that asset.
      Such a preference expresses a reservation. It does not, by itself,
      provide a verifiable, revocable record of a specific grant that lifts a
      preference for a specific party.</t>
      <t>This document describes that gap and proposes a candidate mechanism:
      a cryptographically signed, offline-verifiable credential that expresses
      a grant referencing an AIPREF usage category and a specific asset, that
      any party can verify without contacting the grantor, and that the
      grantor can revoke. It is intended as a starting point for discussion,
      not as a finished specification.</t>

      <t>The mechanism is preference-general. Training is used throughout as
      the worked example because it is the reservation most widely discussed,
      but nothing in the construction is specific to it: the credential binds
      whichever usage category was reserved to a named party, and the same
      procedure applies to any other category the vocabulary expresses. What
      the mechanism establishes is that a grant exists, is authentic, and was
      in force and unrevoked at a stated evaluation time -- or that the
      evidence available does not determine this, which it reports as a
      distinct outcome rather than guessing. It does not adjudicate whether
      the grantor had standing to grant, and it is not an enforcement or
      access-control mechanism.</t>
    </abstract>
  </front>

  <middle>

    <section anchor="intro">
      <name>Introduction</name>
      <t>The AI Preferences vocabulary <xref target="AIPREF-VOCAB"/> defines a
      machine-readable way to express preferences about how automated systems
      process a digital asset. Each usage category (for example, "train-ai" or
      "ai-use") is assigned a value such as "allowed" or "disallowed". A
      preference of "train-ai=disallowed" is a standing statement of intent by
      a party with rights in the asset: a reservation.</t>

      <t>Preferences describe a default posture toward the world. They do not
      express what a <em>specific</em> party has been permitted to do. When a
      rights holder does permit a specific use by a specific party -- under a
      license, a negotiated agreement, or otherwise -- there is at present no
      interoperable, verifiable way to express and check that grant. This
      produces three operational problems:</t>
      <ul>
        <li>a party acting on a permission cannot <em>prove</em>, to a third
        party, that it held that permission for a given asset on a given
        date;</li>
        <li>a rights holder that granted a permission cannot <em>withdraw</em>
        it in a way that downstream verifiers can observe; and</li>
        <li>a dispute over whether an asset was permitted for a use cannot be
        resolved on independently checkable evidence.</li>
      </ul>

      <t>Informally: an AIPREF preference is the lock; what is missing is a
      verifiable key, and a receipt for it that survives inspection later. This
      document sketches that missing piece as a signed, revocable credential
      that sits <em>on top of</em> the AIPREF vocabulary rather than replacing
      it, and asks where such a mechanism belongs.</t>

      <t>This document does not propose changes to the AIPREF vocabulary
      itself, nor does it assert that a preference is legally binding or that
      any particular use is or is not permitted absent a grant. Those questions
      are out of scope.</t>

      <section anchor="reqlang">
        <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&#160;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
        only when, they appear in all capitals, as shown here.</t>
      </section>

      <section anchor="terms">
        <name>Terminology</name>
        <dl>
          <dt>Preference:</dt>
          <dd>An AIPREF value (e.g. "allowed"/"disallowed") assigned to a
          usage category for an asset, per <xref target="AIPREF-VOCAB"/>.</dd>
          <dt>Grant:</dt>
          <dd>A statement that a named party is permitted a specific usage
          category for a specific asset, over a validity period, expressed as
          the credential defined in <xref target="credential"/>.</dd>
          <dt>Grantor:</dt>
          <dd>The party that issues (signs) a grant. Typically the rights
          holder or an authorised issuer acting on the rights holder's
          behalf.</dd>
          <dt>Grantee:</dt>
          <dd>The party a grant names as permitted.</dd>
          <dt>Presenting party:</dt>
          <dd>The party that presents a grant, or on whose behalf a grant is
          presented, in a given interaction. The presenting party is matched
          to the grantee by the layer that carries the grant
          (<xref target="contracts"/>).</dd>
          <dt>Verifier:</dt>
          <dd>Any party that checks a grant -- for example an AI system, an
          auditor, a court, or a counterparty.</dd>
          <dt>Evaluation time:</dt>
          <dd>The point in time at which a grant is evaluated: the present,
          when a verifier is deciding whether to act on a grant now; or the
          stated time of a past use, when a verifier is evaluating that use
          (<xref target="verification"/>).</dd>
        </dl>
      </section>
    </section>

    <section anchor="relationship">
      <name>Relationship to the AIPREF Vocabulary</name>
      <t>A grant references an AIPREF usage category by its label (for example
      "train-ai" from <xref target="AIPREF-VOCAB"/>, or a category introduced
      through that document's vocabulary-extension mechanism). A grant is
      scoped to a tuple of (asset, category, grantee, validity period). A grant
      that asserts "allowed" for a category lifts a "disallowed" preference for
      that category <em>for the named grantee only</em>; it makes no statement
      about any other party.</t>

      <t>The vocabulary's current revision (draft -08 at the time of writing)
      defines three usage categories -- AI Training ("train-ai"), AI Use
      ("ai-use"), and Search ("search") -- and scopes the first two to
      generative AI models. A grant names a category by the label the
      vocabulary assigns it and lifts that category only; the mechanism makes
      no assumption about how the vocabulary defines, scopes, or revises its
      categories. A rights holder that has reserved more than one category and
      wishes to lift more than one for a grantee issues a grant naming each.</t>

      <t>The vocabulary itself anticipates arrangements of this kind. Section
      5.2 of <xref target="AIPREF-VOCAB"/> observes that contractual agreements
      or other specific arrangements might override statements of preference,
      and that where arrangements exist that explicitly permit the use of an
      asset, those arrangements likely apply despite a machine-readable
      statement of preference. A grant is a machine-checkable record that such
      an arrangement exists, for a named party and a named asset; it is the
      verifiable form of the override the vocabulary already contemplates.</t>

      <t>Grants and preferences are therefore complementary layers. The
      preference is authored by the rights holder as a standing signal; the
      grant is a discrete, verifiable exception issued to a specific party. A
      verifier that observes both applies the grant in preference to the
      standing preference for the named grantee, and applies the standing
      preference otherwise.</t>

      <t>This document does not require AIPREF to define any new category to
      carry grants. It observes only that a category value <bcp14>MAY</bcp14> be lifted, for a
      named grantee, by a grant that the grantee can present and any verifier
      can check.</t>

      <t>Preferences and grants also differ in how they are distributed. AIPREF
      preferences are typically attached to content and expressed to the world
      -- for example through robots.txt or HTTP header fields -- as a broadcast,
      party-agnostic signal of a default posture. A grant is not distributed
      that way: it is a signed artifact bound to a named grantee, held and
      presented by that grantee (or retrieved by reference), and checkable by
      any verifier without being attached to the content or announced to the
      world. A grant therefore complements a content-attached preference rather
      than competing with it: the preference is the broadcast reservation; the
      grant is the verifiable, per-party exception.</t>
    </section>

    <section anchor="contracts">
      <name>Relationship to Bilateral Contracts</name>
      <t>A grant is a unilateral artifact: it is signed by the grantor alone. A
      separate class of mechanism expresses a <em>bilateral</em> agreement -- an
      offer made and accepted, signed by both parties. VDAC
      <xref target="VDAC"/> is one such mechanism. Grants and bilateral contracts
      are complementary layers, and they compose: a contract <bcp14>MAY</bcp14>
      carry a grant as one of its terms.</t>
      <t>A contract carries a grant by reference. It names the grant with a type
      token -- for example "verifiable-grant" -- whose meaning is the
      resolution-and-verification procedure of <xref target="verification"/>; it
      identifies the grant by the grant's resolvable identifier
      (<xref target="structure"/>); and it pins the specific artifact by a
      cryptographic digest, expressed using the Digest Fields representation
      <xref target="RFC9530"/>. The digest is computed once, by the party that
      issues the contract, which retrieves and hashes the credential when the
      contract is formed. The contract itself neither resolves nor interprets
      the grant: it carries the reference and the digest. Resolution and
      verification belong to a receiver, at use: a receiver that can process a
      carried grant reference retrieves the grant, confirms the digest, and
      verifies it per <xref target="verification"/>, including revocation
      under the as-of-use rule (<xref target="as-of-use"/>). The contract
      establishes <em>which</em> document is carried; this document establishes
      <em>whether</em> it is valid, and as of when.</t>
      <t>A grant names its grantee by a resolvable identifier
      (<xref target="structure"/>). It does not, by itself, establish who is
      presenting it now. The layer that carries a grant -- a bilateral contract,
      or the transport over which the grant is presented -- authenticates a
      presenting party and names that party by an identifier of its own. A
      composition that carries a grant <bcp14>MUST</bcp14> require that the
      authenticated presenting party's identifier correspond to the grant's
      grantee identifier, and <bcp14>MUST</bcp14> state at which point the
      correspondence is checked -- at the latest, when the receiver decides
      whether to act on the carried grant. A recorded agreement alone does not
      establish who is presenting a grant: the agreement names the parties, the
      authenticating layer establishes who is present, and the correspondence
      check joins the two. How the presenting party is authenticated is a
      property of that layer, not of the grant; the grant carries no request-time
      binding of its own (<xref target="discussion"/>).</t>
      <t>Revocation composes across the two layers without conflict. A bilateral
      contract, once signed, is an immutable record that an agreement was
      reached; revoking a grant carried within it does not un-sign the contract.
      The grant's own status list carries the revocation, which the contract
      references. A grant marked revoked is void from the time of revocation
      forward, while the fact that the contract was agreed remains true. The two
      layers answer different questions -- what was agreed, and whether a carried
      grant still applies -- and both remain independently checkable.</t>
    </section>

    <section anchor="credential">
      <name>The Grant Credential</name>

      <section anchor="structure">
        <name>Structure</name>
        <t>A grant is expressed as a Verifiable Credential
        <xref target="VC-DATA-MODEL"/>, secured as a JSON Web Signature per
        <xref target="VC-JOSE-COSE"/>, with the JWS header parameters
        "typ: vc+jwt" and "cty: vc". It carries at least:</t>
        <ul>
          <li>a resolvable <strong>identifier</strong> for the grant itself, so
          that a party holding a reference to the grant -- for example a contract
          that carries it (<xref target="contracts"/>) -- can retrieve the
          credential; typically an HTTPS URL;</li>
          <li>an <strong>issuer</strong> identifier that a verifier can resolve
          to a public key -- for example a "did:web"
          <xref target="DID-WEB"/> identifier resolvable over HTTPS;</li>
          <li>the <strong>asset</strong> the grant concerns, identified by a
          cryptographic content digest (e.g. SHA-256) so the grant binds to
          specific content without carrying the content itself;</li>
          <li>the <strong>grantee</strong> the grant names;</li>
          <li>one or more <strong>usage</strong> entries, each naming an AIPREF
          category and the granted value (e.g. "train-ai" = "allowed");</li>
          <li>a <strong>validity period</strong> (validFrom / validUntil);
          and</li>
          <li>a <strong>revocation</strong> reference, such as a Bitstring
          Status List <xref target="BITSTRING"/> entry, that a verifier can
          check.</li>
        </ul>
        <t>A grant <bcp14>MUST</bcp14> be signed by the grantor's key. A grant <bcp14>MUST</bcp14> identify
        the asset by content digest. A grant <bcp14>SHOULD</bcp14> carry a revocation
        reference; a grant without one cannot be withdrawn after issuance.</t>
      </section>

      <section anchor="example">
        <name>Example</name>
        <t>The following is the (unsecured) JSON <xref target="RFC8259"/>
        payload of a grant that permits "train-ai" of a specific asset to a
        named grantee for one year. In transit it is secured as a JWS per
        <xref target="VC-JOSE-COSE"/>.</t>
        <sourcecode type="json"><![CDATA[
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "id": "https://publisher.example/grants/abc123",
  "type": ["VerifiableCredential", "AIUsageGrantCredential"],
  "issuer": "did:web:publisher.example",
  "validFrom": "2026-07-01T00:00:00Z",
  "validUntil": "2027-07-01T00:00:00Z",
  "credentialSubject": {
    "asset": {
      "id": "urn:asset:sha-256",
      "digest": "sha-256:0f7e...c19a"
    },
    "grantee": "did:web:ai-lab.example",
    "usage": [
      { "category": "train-ai", "value": "allowed" }
    ]
  },
  "credentialStatus": {
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94",
    "statusListCredential": "https://publisher.example/status/1"
  }
}
]]></sourcecode>
        <t>The "category" value ("train-ai") is an AIPREF category
        <xref target="AIPREF-VOCAB"/>. The "value" ("allowed") lifts a
        "disallowed" preference for that category, for the named grantee, over
        the validity period, unless the grant has been revoked.</t>
      </section>
    </section>

    <section anchor="verification">
      <name>Verification Procedure</name>
      <t>A verifier evaluates a grant at an evaluation time. The evaluation
      time is the current time when the verifier is deciding whether to act on
      the grant now, and the stated time of a past use when the verifier is
      evaluating that use -- for example, an auditor asking whether a use was
      permitted when it occurred. The procedure is the same in both cases; only
      the time differs. In particular, a grant that expired or was revoked
      <em>after</em> a use remains valid for that use.</t>
      <t>To evaluate a grant, a verifier:</t>
      <ol>
        <li>resolves the issuer identifier to a public key (for "did:web", by
        fetching the DID document over HTTPS <xref target="DID-WEB"/>) and
        verifies the signature over the credential;</li>
        <li>confirms the evaluation time is within the validity period;</li>
        <li>determines the grant's revocation status as of the evaluation time,
        by checking the referenced status list <xref target="BITSTRING"/> under
        the as-of-use rule (<xref target="as-of-use"/>);</li>
        <li>confirms the asset digest matches the content in question, and that
        the category and grantee match the use and party at hand (where the
        grant is carried by a contract, the party is matched as described in
        <xref target="contracts"/>).</li>
      </ol>
      <t>Verification has three outcomes:</t>
      <dl>
        <dt>Valid:</dt>
        <dd>every check passes. A grant existed for that (asset, category,
        grantee) at the evaluation time, and the corresponding preference was
        lifted for that grantee at that time.</dd>
        <dt>Invalid:</dt>
        <dd>a check fails: the signature does not verify; the evaluation time
        is outside the validity period; the grant is established to have been
        revoked at or before the evaluation time; or the digest, category, or
        grantee does not match.</dd>
        <dt>Indeterminate:</dt>
        <dd>every other check passes, but the evidence available to the
        verifier does not establish the grant's revocation status as of the
        evaluation time (<xref target="as-of-use"/>). For evaluation at the
        current time this arises when no status list can be obtained; for
        evaluation of a past use it arises as described in
        <xref target="as-of-use"/>.</dd>
      </dl>
      <t>Indeterminate is a statement about the evidence, not about the grant:
      the grant may or may not have been revoked at the evaluation time, and the
      verifier cannot tell from what it holds. A verifier <bcp14>MUST NOT</bcp14>
      report an indeterminate outcome as valid, and <bcp14>MUST</bcp14> report
      it distinctly from invalid. What a consumer then does with an
      indeterminate outcome -- treat it as invalid, seek further evidence, or
      accept it under its own policy -- is a matter of that consumer's trust
      policy, outside this procedure.</t>
      <t>Verification requires no interaction with the grantor beyond fetching
      the (cacheable) issuer key and status list, and can be performed offline
      against cached copies.</t>
    </section>

    <section anchor="revocation">
      <name>Revocation</name>
      <t>A grantor withdraws a grant by updating the referenced status list so
      that the grant's entry indicates revocation. Verifiers observe the change
      the next time they refresh the status list, bounded by their cache
      policy. Revocation lets a rights holder end a permission after issuance
      -- a property that a standing preference change alone cannot provide for
      permissions already relied upon. Revocation is monotonic: a status list
      using the "revocation" status purpose <xref target="BITSTRING"/> only ever
      moves a grant's entry from valid to revoked, never back.</t>

      <section anchor="as-of-use">
        <name>As-of-Use Evaluation</name>
        <t>The relevant time for a revocation check depends on the question being
        asked. A verifier deciding whether to act on a grant now checks the
        current status list: the question is whether the grant is revoked at
        present. A verifier instead evaluating a <em>past</em> use -- for example
        an auditor asking whether a use was permitted at the time it occurred --
        asks a different question, and the relevant time is the time of that use,
        not the present.</t>
        <t>Because a grant may be validly relied upon and only later revoked,
        checking a past use against the <em>current</em> status list would
        incorrectly report the use as unpermitted whenever the grant was revoked
        after the use. A verifier evaluating a past use therefore checks
        revocation status <em>as of the time of use</em>. This is the as-of-use
        rule.</t>
        <t>As-of-use evaluation is supported by issuer-signed snapshots of the
        status list. A snapshot is a point-in-time statement: it records the
        revocation state as of the time at which the issuer signed it, and says
        nothing about the state at any other time. A snapshot signed at the
        time of use establishes the state at that time, independently of the
        current list.</t>
        <t>A snapshot is itself a credential and carries its own validity
        period. That period states when the snapshot may be relied upon; it is
        not a statement that the revocation state was unchanged throughout the
        period, and a verifier <bcp14>MUST NOT</bcp14> treat it as one.</t>
        <t>Where no snapshot was signed at the time of use, snapshots signed
        before and after it may still decide the question. Because revocation is
        monotonic (<xref target="revocation"/>), the evidence is
        asymmetric:</t>
        <ul>
          <li>A snapshot signed at or after the time of use that shows the grant
          <em>unrevoked</em> establishes that the grant was not revoked at the
          time of use: a grant unrevoked later was unrevoked earlier.</li>
          <li>A snapshot signed at or before the time of use that shows the
          grant <em>revoked</em> establishes that the grant was revoked at the
          time of use: a grant revoked earlier is revoked later.</li>
        </ul>
        <t>Where neither decisive rule applies, available snapshots may bound a
        possible changeover interval on one or both sides; they need not
        establish that revocation occurred. A bound on either side requires an
        actual snapshot: the start of a grant's validity period is not an
        unrevoked observation. For example, an unrevoked snapshot at time 0 and
        a revoked snapshot at time 10 are consistent both with revocation at
        time 3 and with revocation at time 7, and a use at time 5 has a
        different status in each.</t>
        <t>Unless other authenticated evidence resolves the question, any use
        whose revocation status is not established remains indeterminate
        (<xref target="verification"/>). Such evidence could be an authenticated
        statement from the issuer of the time at which a revocation took effect,
        or of the revocation state throughout an interval containing the time of
        use; this document defines neither, and a status list entry records that
        a grant is revoked, not when.</t>
        <t>An issuer that wishes its past revocation state to be checkable
        <bcp14>SHOULD</bcp14> sign and retain status-list snapshots at regular
        intervals. Retained snapshots narrow the interval within which a
        revocation can be placed; they do not close it. A use that falls between
        the latest unrevoked snapshot and the earliest revoked one remains
        indeterminate.</t>
      </section>
    </section>

    <section anchor="discussion">
      <name>Discussion and Open Questions</name>
      <t>This document is a discussion starter. The mechanism in
      <xref target="credential"/> is one candidate, not a final design. The
      author invites discussion of the following in particular:</t>
      <ul>
        <li>Venue. The AI Preferences Working Group chairs have stated that
        this work is out of scope for the group under its current charter and
        that the group is not looking to take on more work at present. The
        author is therefore seeking venue guidance from the DISPATCH area, and
        invites views on where a grant layer above the vocabulary belongs.</li>
        <li>Should the AIPREF vocabulary define any hook that indicates a
        category value is conditional on, or may be lifted by, a grant -- or
        should grants remain entirely a separate layer, as sketched here? Any
        such hook would follow the vocabulary's own extension process and is a
        separate question from this mechanism.</li>
        <li>Is a Verifiable Credential the right container, or should a lighter
        or different encoding be preferred? This document uses VCs because they
        provide issuer identity, offline verification, and revocation as
        existing, interoperable building blocks, but does not assert they are
        the only viable choice.</li>
        <li>Grantee identity. A grant names its grantee by a resolvable
        identifier -- for example a "did:web" identifier. Where a grant is
        carried by a bilateral contract (<xref target="contracts"/>), the
        composition is required to match the authenticated presenting party to
        the named grantee by identifier correspondence. Whether a grant should
        additionally carry its own request-time binding -- a proof that the
        presenter controls the grantee identifier -- is left open.</li>
        <li>Indeterminate outcomes. The third verification outcome
        (<xref target="verification"/>) is new in this revision. Whether an
        effective time of revocation, or the revocation state throughout an
        interval, should be representable, so that a use falling between two
        snapshots can be resolved, is open. A time asserted by the issuer alone
        rests entirely on trust in the issuer, who may be a party to the
        question the time decides. A trusted timestamp, for example from a
        timestamping authority <xref target="RFC3161"/> or a transparency log,
        is a possible ingredient but not a solution: under its own trust and
        policy assumptions it establishes that the bound data existed by a
        given time, not when a revocation took effect or that no earlier
        revocation was omitted. A future specification would need a
        grant-bound, authenticated revocation record, an explicit rule
        connecting its trusted registration to the operative revocation time,
        and a clear statement of the trust it still places in the issuer.</li>
      </ul>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>A grant proves who issued it, when, and what was declared. It does
      <em>not</em> attest that the grantor holds the rights it purports to
      grant: anyone in possession of an asset can compute its digest and issue
      a self-asserted grant over it. A verifier therefore <bcp14>MUST</bcp14> evaluate whether
      it trusts the issuer for the asset in question; the signature establishes
      the issuer's identity and the integrity of the declaration, not the
      truth of the underlying claim. Mechanisms for establishing that an issuer
      is authoritative for an asset are out of scope for this document.</t>
      <t>Because a grant identifies its asset by content digest and does not
      carry the content, presenting a grant does not disclose the asset.
      Verifiers <bcp14>MUST</bcp14> confirm the digest matches the content actually processed;
      a grant for one asset says nothing about another.</t>
      <t>Revocation is only as timely as verifiers' status-list refresh policy;
      a verifier relying on a stale cache may act on a revoked grant. Grants
      <bcp14>SHOULD</bcp14> carry a validity period so that a lost or unreachable status list
      does not extend a grant indefinitely.</t>
      <t>An indeterminate outcome (<xref target="verification"/>) is not a
      weaker form of valid. A consumer whose trust policy accepts an
      indeterminate outcome accepts the possibility that the grant had been
      revoked before the use; a consumer that treats it as invalid may reject
      uses that were in fact permitted. Both are policy choices. The
      verification procedure reports the state of the evidence and takes
      neither. Only the issuer can supply evidence that resolves an
      indeterminate case (<xref target="as-of-use"/>), so a consumer that
      defers resolution is relying on the issuer.</t>
      <t>A grant presented by a party other than its named grantee is not
      thereby invalid, but it establishes nothing about that party. The
      correspondence check in <xref target="contracts"/> is what connects a
      presented grant to the party presenting it; a receiver that acts on a
      carried grant without that check is acting on a document, not on a
      permission held by its counterparty.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. Should the mechanism advance, a
      registry for the credential "type" and any grant-specific fields would be
      considered at that time.</t>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="AIPREF-VOCAB" target="https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/">
          <front>
            <title>A Vocabulary For Expressing AI Usage Preferences</title>
            <author initials="P." surname="Keller"/>
            <author initials="M." surname="Thomson" role="editor"/>
            <date year="2026" month="September"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-aipref-vocab-08"/>
        </reference>

        <reference anchor="VC-DATA-MODEL" target="https://www.w3.org/TR/vc-data-model-2.0/">
          <front>
            <title>Verifiable Credentials Data Model v2.0</title>
            <author><organization>W3C</organization></author>
            <date year="2025"/>
          </front>
        </reference>

        <reference anchor="VC-JOSE-COSE" target="https://www.w3.org/TR/vc-jose-cose/">
          <front>
            <title>Securing Verifiable Credentials using JOSE and COSE</title>
            <author><organization>W3C</organization></author>
            <date year="2025"/>
          </front>
        </reference>

        <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 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 initials="B." surname="Leiba"/>
              <date year="2017" month="May"/>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
          </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="DID-WEB" target="https://w3c-ccg.github.io/did-method-web/">
          <front>
            <title>did:web Method Specification</title>
            <author><organization>W3C Credentials Community Group</organization></author>
            <date year="2025"/>
          </front>
        </reference>

        <reference anchor="BITSTRING" target="https://www.w3.org/TR/vc-bitstring-status-list/">
          <front>
            <title>Bitstring Status List v1.0</title>
            <author><organization>W3C</organization></author>
            <date year="2025"/>
          </front>
        </reference>

        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" role="editor"/>
            <date year="2017" month="December"/>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
        </reference>

        <reference anchor="VDAC" target="https://datatracker.ietf.org/doc/draft-jovancevic-vdac/">
          <front>
            <title>Verifiable Data Access Contract (VDAC)</title>
            <author initials="S." surname="Jovancevic"/>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jovancevic-vdac"/>
        </reference>

        <reference anchor="RFC3161" target="https://www.rfc-editor.org/info/rfc3161">
          <front>
            <title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title>
            <author initials="C." surname="Adams"/>
            <author initials="P." surname="Cain"/>
            <author initials="D." surname="Pinkas"/>
            <author initials="R." surname="Zuccherato"/>
            <date year="2001" month="August"/>
          </front>
          <seriesInfo name="RFC" value="3161"/>
        </reference>

        <reference anchor="RFC9530" target="https://www.rfc-editor.org/info/rfc9530">
          <front>
            <title>Digest Fields</title>
            <author initials="R." surname="Polli"/>
            <author initials="L." surname="Pardue"/>
            <date year="2024" month="February"/>
          </front>
          <seriesInfo name="RFC" value="9530"/>
        </reference>
      </references>
    </references>

    <section anchor="changes" removeInRFC="true">
      <name>Changes Since -02</name>
      <ul>
        <li>Verification (<xref target="verification"/>): the evaluation time
        is now a parameter of the procedure -- the current time when acting on
        a grant, the stated time of use when evaluating a past use -- and step 2
        checks the validity period against it rather than against the current
        time, which in -02 contradicted the as-of-use rule for past uses.</li>
        <li>Verification: a third outcome, indeterminate, is defined for the
        case where the evidence does not establish revocation status as of the
        evaluation time.</li>
        <li>As-of-use evaluation (<xref target="as-of-use"/>): -02 stated
        that a snapshot taken at or after the time of use is sufficient to
        establish that a grant was not revoked. That holds only for a snapshot
        showing the grant unrevoked. A snapshot is now defined as a
        point-in-time statement, distinct from its own validity period; the
        evidence cases are stated; and a use falling between an unrevoked and a
        revoked snapshot is indeterminate, however frequent the snapshots.</li>
        <li>Bilateral contracts (<xref target="contracts"/>): a composition
        carrying a grant is now required to match the authenticated presenting
        party to the named grantee by identifier correspondence and to state
        when the check occurs.</li>
        <li>Relationship to the vocabulary (<xref target="relationship"/>):
        acknowledges the vocabulary's current category set and scoping, and
        cites its own observation that specific arrangements may override a
        statement of preference.</li>
        <li>Editorial: references consolidated under one section.</li>
      </ul>
    </section>

    <section anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>Songbo Bu identified the inconsistency between the verification
      procedure's time check and the as-of-use rule, the missing conditional
      in the snapshot evidence, and the gap that point snapshots leave between
      them, and proposed the indeterminate outcome. Srecko Jovancevic's work on VDAC shaped the
      composition with bilateral contracts.</t>
    </section>
  </back>
</rfc>
