<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     version="3"
     docName="draft-condrey-rats-pop-protocol-00"
     ipr="trust200902"
     category="std"
     consensus="true"
     submissionType="IETF"
     sortRefs="true"
     symRefs="true"
     tocInclude="true"
     tocDepth="4">

  <front>
    <title abbrev="PoP">Proof of Process (PoP): A Verifiable Process Transcript Format</title>

    <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop-protocol-00"/>
    <author fullname="David Condrey" initials="D." surname="Condrey">
      <organization>Writerslogic Inc</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>david@writerslogic.com</email>
        <uri>https://writerslogic.com</uri>
      </address>
    </author>
    <date year="2026" month="February" day="11"/>

    <area>Security</area>
    <workgroup>Remote ATtestation procedureS</workgroup>

    <keyword>attestation</keyword>
    <keyword>evidence</keyword>
    <keyword>authorship</keyword>
    <keyword>RATS</keyword>
    <keyword>behavioral</keyword>
    <keyword>VDF</keyword>
    <keyword>verifiable delay function</keyword>
    <keyword>provenance</keyword>
    <keyword>digital authorship</keyword>

    <abstract>
      <t>
        This document specifies the Proof of Process (PoP) Transcript Format, a structured data model for recording the evolutionary history of a digital document. It defines a canonical set of semantic editing events (Insertion, Deletion, Move, Replacement) and a schema for Tool Receipts, allowing distinct contributors—including human authors, AI agents, and automated editors—to cryptographically sign their specific contributions within a single provenance chain.
      </t>
      <t> 
        The protocol utilizes a hash-linked Provenance DAG (Directed Acyclic Graph) to ensure the integrity and ordering of events. This format enables Verifiers to reconstruct the document's lifecycle and apply flexible, policy-based logic to determine authorship attribution. It is designed to be content-aware but policy-agnostic, supporting diverse use cases ranging from academic integrity to software supply chain security.
      </t>
    </abstract>

    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status of this Memo: This Internet-Draft is submitted in full conformance
        with the provisions of BCP 78 and BCP 79.
      </t>
      <t>
        Internet-Drafts are working documents of the Internet Engineering Task
        Force (IETF). Note that other groups may also distribute working documents
        as Internet-Drafts. The list of current Internet-Drafts is at
        <eref target="https://datatracker.ietf.org/drafts/current/"/>.
      </t>
      <t>
        Internet-Drafts are draft documents valid for a maximum of six months
        and may be updated, replaced, or obsoleted by other documents at any
        time. It is inappropriate to use Internet-Drafts as reference material
        or to cite them other than as "work in progress."
      </t>
    </note>

    <note>
      <name>Copyright Notice</name>
      <t>
        Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.
      </t>
    </note>
  </front>

  <middle>

    <section anchor="intro">
      <name>Introduction</name>
      <t>
        As digital documents evolve through complex workflows involving human authors, automated tools, and AI
        assistants, stakeholders require a standardized method to record <em>what happened</em> during the document's
        lifecycle. Existing logs are often proprietary, unstructured, or easily mutated.
      </t>
      <t>
        This document specifies the <strong>Proof of Process (PoP) Transcript Format</strong>, a standardized data
        model for recording the evolutionary history of a digital artifact. It defines a canonical set of
        <strong>Semantic Events</strong> (Insert, Delete, Replace, Move) and a mechanism for linking these events into a
        hash-chained <strong>Provenance DAG (Directed Acyclic Graph)</strong>.
      </t>
      <t>
        Designed for interoperability, this format allows disparate editing environments (word processors, code editors,
        CMS platforms) to produce compatible <strong>Process Transcripts</strong>. These transcripts can support
        <strong>Tool Receipts</strong>, allowing AI agents and automated tools to cryptographically sign and attribute
        their specific contributions, thereby enabling a "compositional provenance" model where human and machine
        contributions are clearly demarcated within a single verifiable history.
      </t>
    </section>

    <section anchor="terminology">
      <name>Terminology</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>

      <dl spacing="normal">
        <dt>Artifact</dt>
        <dd>
          <t>A digital object such as a document, code bundle, or media file.</t>
        </dd>

        <dt>Event</dt>
        <dd>
          <t>A canonical semantic editing operation applied to an artifact state.</t>
        </dd>

        <dt>Transcript</dt>
        <dd>
          <t>An ordered sequence of events representing a process session.</t>
        </dd>

        <dt>Envelope</dt>
        <dd>
          <t>A CBOR-encoded container holding transcript commitments, anchors, receipts, and policy hooks.</t>
        </dd>

        <dt>Anchor</dt>
        <dd>
          <t>
            A mechanism that binds transcript state to chronology, such as an external timestamp or sequential-work
            proof.
          </t>
        </dd>

        <dt>Receipt</dt>
        <dd>
          <t>
            A signed statement from a tool indicating that content was produced or transformed, referenced by events.
          </t>
        </dd>

        <dt>Provenance DAG</dt>
        <dd>
          <t>A directed acyclic graph constructed from receipts and references between them.</t>
        </dd>

        <dt>Policy</dt>
        <dd>
          <t>A verifier-defined configuration for evaluation of process evidence.</t>
        </dd>

        <dt>Policy Commit</dt>
        <dd>
          <t>A cryptographic commitment to a policy descriptor, included to identify the applied policy.</t>
        </dd>

        <dt>Seed Commit</dt>
        <dd>
          <t>A cryptographic commitment to a seed used to parameterize evaluation functions and/or audits.</t>
        </dd>

        <dt>Deterministic Encoding</dt>
        <dd>
          <t>CBOR encoding with a canonical ordering as required for reproducible hashing.</t>
        </dd>
      </dl>
    </section>

    <section anchor="scope">
      <name>Functional Scope and Protocol Claims</name>
      <t>
        This section defines the scope of the transcript format regarding data integrity and provenance visibility.
      </t>

      <section anchor="integrity-claims">
        <name>Transcript Integrity Claims</name>
        <t>
          A valid PoP Transcript ensures:
        </t>
        <ul spacing="normal">
          <li>
            <strong>Event Immutability:</strong> Once an event is recorded and covered by a subsequent hash, it cannot
            be altered or removed without invalidating the chain.
          </li>
          <li>
            <strong>Completeness:</strong> The final hash of the transcript deterministically reconstructs the final
            state of the document. Any discrepancy between the transcript-derived state and the actual document content
            indicates tampering.
          </li>
          <li>
            <strong>Attribution:</strong> Every event is associated with a specific Actor ID (Key) or Tool Receipt,
            allowing precise attribution of <em>who</em> or <em>what</em> performed a specific edit.
          </li>
        </ul>
      </section>

      <section anchor="out-of-scope">
        <name>Out of Scope</name>
        <ul spacing="normal">
          <li>
            <strong>Content Quality or Truth:</strong> The transcript records that text was written; it does not verify
            the factual accuracy or quality of that text.
          </li>
          <li>
            <strong>Intent:</strong> The transcript records operations (e.g., "User deleted paragraph A"). It does not
            record <em>why</em> the operation occurred.
          </li>
          <li>
            <strong>Surveillance:</strong> This format is designed for <em>verification</em>, not <em>surveillance</em>.
            It supports privacy-preserving disclosure modes (e.g., Zero-Knowledge proofs of statistics) where the raw
            content of the edits remains private, revealing only the <em>metrics</em> of the process.
          </li>
        </ul>
      </section>
    </section>

    <section anchor="arch">
      <name>Architecture Overview</name>
      <t>
        PoP is a portable evidence format intended to be produced by an editing environment (the Producer) and
        consumed by a Verifier. A third party (Anchor Service) MAY provide timestamps or other anchoring evidence.
        Tools (e.g., language models, grammar checkers, converters) MAY provide signed receipts.
      </t>

      <figure anchor="fig-arch">
        <name>PoP Evidence Flow (Informative)</name>
        <artwork type="ascii-art"><![CDATA[
+-------------+  Transcript/Envelope   +-------------+
|  Producer   +----------------------->|  Verifier   |
|  (Editor)   |                        |  (Policy)   |
+------+------+                        +------+------+
       |                                      |
       |                                      |
+------+------+  Anchors (optional)           |
|   Anchor    +-------------------------------+
|   Service   |
+-------------+

+-------------+  Receipts (optional)   +-------------+
|   Tools     +----------------------->|  Producer   |
| (LLM, etc.) |                        |  / Verifier |
+-------------+                        +-------------+
      ]]></artwork>
      </figure>
      <t>
        PoP is compatible with RATS/EAT deployments by treating the PoP envelope as evidence that can be conveyed
        alongside attestation tokens, referenced by claims, or embedded in artifact metadata for later validation.
        The overall Proof of Process architecture is defined in <xref target="I-D.condrey-rats-pop"/>.
      </t>
    </section>

    <section anchor="data-model">
      <name>Data Model</name>
      <t>
        PoP uses CBOR <xref target="RFC8949"/> as the encoding and CDDL <xref target="RFC8610"/> for data model
        definitions. All hashing computations depend on deterministic CBOR encoding; Producers and Verifiers MUST use a
        deterministic CBOR encoding profile suitable for reproducible hashing.
      </t>

      <section anchor="ranges">
        <name>Ranges and Identifiers</name>
        <t>
          Offsets and ranges refer to a canonical byte or character indexing scheme over the logical artifact content.
          The indexing scheme MUST be specified by the Producer and bound in the envelope so that Verifiers can
          interpret ranges consistently.
        </t>
        <t>
          This specification defines a generic Range structure. Producers MAY use byte offsets, Unicode scalar
          offsets, or another deterministic scheme. The chosen scheme MUST be indicated in the envelope.
        </t>
      </section>

      <section anchor="events">
        <name>Canonical Event Types</name>
        <t>
          PoP defines canonical semantic event types. Events describe changes to artifact state at a semantic operation
          level rather than raw keystrokes. Raw keystroke telemetry is OPTIONAL and is not required for PoP
          verification.
        </t>
        <t>The following event types are defined:</t>
        <ul spacing="normal">
          <li><strong>INS</strong>: insert content at a range/position</li>
          <li><strong>DEL</strong>: delete content in a range</li>
          <li><strong>REP</strong>: replace content in a range with new content</li>
          <li><strong>MOV</strong>: move a range to a destination position</li>
          <li><strong>PASTE</strong>: insert content with an origin reference (e.g., receipt-bound)</li>
          <li><strong>SNAP</strong>: checkpoint snapshot of artifact hash and optional cursor state</li>
        </ul>
        <t>
          Events MUST include sufficient information to validate transcript integrity and, when required by policy,
          to validate that the transcript corresponds to the final artifact (e.g., via checkpoints).
        </t>
      </section>
    </section>

    <section anchor="hash-chain">
      <name>Event Hash Chaining</name>
      <t>
        PoP binds transcript events in order using a hash chain. The chain depends on deterministic encoding of each
        Event structure.
      </t>

      <section anchor="hash-alg">
        <name>Hash Algorithm</name>
        <t>
          Let <tt>H</tt> be a cryptographic hash function. This specification RECOMMENDS SHA-256.
          The initial hash value <tt>h_0</tt> MUST be defined as the hash of a domain separation string and the
          session identifier:
        </t>
        <t>
          <tt>h_0 = H("PoP-Transcript" || session_id)</tt>
        </t>
        <t>
          For each event <tt>E_i</tt>, the chain value is computed as:
        </t>
        <t>
          <tt>h_i = H(h_{i-1} || CBOR_Deterministic(E_i))</tt>
        </t>
        <t>
          The transcript root is defined as <tt>root = h_n</tt> for the final event <tt>E_n</tt>.
        </t>
      </section>

      <section anchor="hash-reqs">
        <name>Requirements</name>
        <ul spacing="normal">
          <li>Producers MUST use deterministic CBOR encoding for all hashed structures.</li>
          <li>Verifiers MUST recompute the hash chain and compare the derived root to the envelope root.</li>
          <li>Mismatch of any chain computation MUST cause verification failure.</li>
        </ul>
      </section>
    </section>







    <section numbered="true" toc="include" anchor="anchoring" title="Time Anchoring">
      <t>
        PoP supports optional chronology binding via Anchors. Policies MAY require specific anchor types or densities.
        This document defines two anchor classes: External Anchors and Sequential Work Anchors.
      </t>

      <section numbered="true" toc="include" anchor="external-anchor" title="External Anchors">
        <t>
          An External Anchor binds the transcript root (or an intermediate chain value) to an externally verifiable
          time assertion (e.g., a timestamping service, transparency log, or other notary).
        </t>
        <t>
          The specific external anchoring system is out of scope for this document; PoP defines a generic container for
          including and validating anchor evidence.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="seq-work-anchor" title="Sequential Work Anchors">
        <t>
          A Sequential Work Anchor provides evidence that a specified amount of sequential computation was performed
          between two transcript states. This can increase the cost of post-hoc backfilling. The concrete VDF or
          sequential-work scheme is policy-defined. This document defines a container to carry such evidence.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="anchor-verify" title="Anchor Verification Rules">
        <ul spacing="normal">
          <li>If an envelope includes anchors, verifiers MUST validate each anchor according to its type.</li>
          <li>If a policy requires anchors and they are absent or invalid, verification MUST fail.</li>
          <li>Anchor validation MUST bind to the relevant transcript state (root or intermediate chain values) as specified by the anchor.</li>
        </ul>
      </section>
    </section>

    <section numbered="true" toc="include" anchor="receipts" title="Tool Receipts and Provenance DAG">
      <t>
        PoP supports compositional provenance via signed tool receipts. Receipts enable producers to explicitly
        declare and bind tool-generated outputs (including AI assistance) without relying on brittle inference or
        detection. Receipts MAY be used for any deterministic or non-deterministic tool that emits content, patches,
        or transformations that contribute to the artifact.
      </t>

      <section numbered="true" toc="include" anchor="receipt-model" title="Receipt Model">
        <t>
          A Receipt is a signed statement that binds tool identity and an output commitment. An input commitment MAY be
          included to allow stronger binding, but is OPTIONAL to support privacy-preserving tools.
        </t>
        <t>
          Receipts MAY reference other receipts to form a provenance DAG. Policies MAY restrict recursion depth.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="receipt-verify" title="Receipt Verification Rules">
        <ul spacing="normal">
          <li>Verifiers MUST validate each receipt signature over its canonical encoding.</li>
          <li>Receipt public keys MUST be represented in a verifiable format; policies MAY require certificate chains or allow bare keys.</li>
          <li>If an event references a receipt (via <tt>source_ref</tt>), the referenced receipt MUST be present or retrievable under policy.</li>
          <li>Policies MAY require validation of the provenance DAG and MAY impose recursion and size limits.</li>
        </ul>
      </section>
    </section>

    <section numbered="true" toc="include" anchor="envelope" title="Envelope Structure">
      <t>
        The PoP Envelope is the primary interchange object. It binds transcript commitments, anchors, receipts, and
        policy hooks. The envelope is CBOR-encoded and SHOULD be embedded into artifact metadata or conveyed alongside
        artifacts.
      </t>

      <section numbered="true" toc="include" anchor="policy-seed" title="Policy and Seed Commitments">
        <t>
          PoP defines policy hooks but does not standardize a scoring model. To enable reproducible application of a
          policy, the envelope includes:
        </t>
        <ul spacing="normal">
          <li><strong>policy_commit</strong>: a commitment to a policy descriptor</li>
          <li><strong>seed_commit</strong>: a commitment to a seed used to parameterize evaluation and/or audits</li>
        </ul>
        <t>
          Commitments support commit-then-reveal workflows where the evaluation surface is unpredictable at capture time
          but verifiable after reveal under policy.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="claims" title="Claims Field">
        <t>
          The envelope MAY include a <tt>claims</tt> field carrying derived values (e.g., integrity pass/fail,
          evaluation outputs). Claims MUST NOT be treated as authoritative unless verifiers recompute or validate them
          under policy. Policies SHOULD treat claims as advisory and derive evaluation from transcript evidence.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="zk" title="Optional Zero-Knowledge Bundle">
        <t>
          The envelope MAY include a <tt>zk</tt> bundle to support privacy-preserving verification (e.g., threshold
          proofs for policy-defined evaluations without full transcript disclosure). The specific ZK proof system is
          policy-defined.
        </t>
      </section>
    </section>

    <section numbered="true" toc="include" anchor="verification" title="Verification Procedure">
      <t>
        Verifiers MUST perform the following procedure to validate a PoP envelope. Policies MAY impose additional
        requirements and MAY allow partial disclosure modes.
      </t>

      <section numbered="true" toc="include" anchor="verify-struct" title="Structural Validation">
        <ol spacing="normal">
          <li>Parse the envelope as CBOR and validate required fields.</li>
          <li>Validate version and supported algorithms.</li>
          <li>Validate encoding determinism constraints where applicable.</li>
        </ol>
      </section>

      <section numbered="true" toc="include" anchor="verify-chain" title="Hash Chain Validation">
        <ol spacing="normal">
          <li>Obtain the transcript (full disclosure or policy-authorized proofs).</li>
          <li>Recompute the hash chain from <tt>h_0</tt> through <tt>h_n</tt>.</li>
          <li>Compare derived <tt>root</tt> to the envelope <tt>root</tt>.</li>
        </ol>
        <t>Mismatch MUST cause verification failure.</t>
      </section>

      <section numbered="true" toc="include" anchor="verify-anchor" title="Anchor Validation">
        <ol spacing="normal">
          <li>Validate all included anchors.</li>
          <li>Confirm anchors bind to the intended transcript state (root or specified chain values).</li>
          <li>Apply policy requirements for anchor presence, density, or types.</li>
        </ol>
      </section>

      <section numbered="true" toc="include" anchor="verify-receipts" title="Receipt Validation">
        <ol spacing="normal">
          <li>Validate receipt signatures and canonical encodings.</li>
          <li>Resolve and validate referenced receipts as required by policy.</li>
          <li>Verify any policy constraints on receipt DAG depth or classes.</li>
        </ol>
      </section>

      <section numbered="true" toc="include" anchor="verify-binding" title="Artifact Binding Validation">
        <t>
          Policies MAY require validation that the transcript corresponds to the final artifact. This may be performed
          by verifying SNAP events, checkpoints, or other commitments that bind the transcript to the final artifact
          hash.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="verify-eval" title="Policy Evaluation">
        <t>
          After transcript and anchoring verification, a verifier MAY compute features and apply a policy-defined
          evaluation. If the envelope includes a ZK bundle and the policy allows it, the verifier MAY validate a ZK
          proof instead of obtaining the full transcript.
        </t>
      </section>
    </section>

    <section numbered="true" toc="include" anchor="policy-eval" title="Policy-Defined Evaluation">
      <t>
        PoP does not standardize any scoring function, threshold, or interpretation. Policies define evaluation inputs,
        models, and thresholds. PoP provides hooks to identify policies and support reproducible evaluation.
      </t>

      <section numbered="true" toc="include" anchor="policy-commit" title="Policy Commitments">
        <t>
          The <tt>policy_commit</tt> field is a cryptographic commitment to a policy descriptor, e.g.:
        </t>
        <t>
          <tt>policy_commit = H(policy_descriptor)</tt>
        </t>
        <t>
          The contents and distribution of the policy descriptor are out of scope for this document. Policies MUST be
          uniquely identifiable by <tt>policy_commit</tt>.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="seeded-eval" title="Seeded Evaluation (Optional)">
        <t>
          Policies MAY use seeds to parameterize evaluation functions (e.g., to mitigate adaptive optimization against a
          static evaluation surface). If used, the envelope includes <tt>seed_commit</tt>, and verifiers MAY require a
          reveal of the seed or a ZK proof that incorporates the committed seed.
        </t>
      </section>

      <section numbered="true" toc="include" anchor="eval-outputs" title="Evaluation Outputs">
        <t>
          Any evaluation outputs, including derived claims, are policy-defined and MUST be expressed as assessments of
          evidence, not assertions of cognitive origin. Policies SHOULD provide outputs that are interpretable and
          auditable (e.g., quantified import ratios, refinement ratios, or other measurable evidence summaries).
        </t>
      </section>
    </section>

    <section numbered="true" toc="include" anchor="security" title="Security Considerations">
      <t>
        PoP provides tamper-evident transcripts and optional chronology binding. It does not prevent an adversarial
        producer from performing arbitrary sequences of valid edits. Policies should treat PoP as evidence of recorded
        process, not proof of mental origin.
      </t>

      <section numbered="true" toc="include" anchor="threats" title="Threat Model Summary">
        <ul spacing="normal">
          <li><strong>Synthetic transcript generation</strong>: a producer may attempt to fabricate a transcript consistent with a target artifact.</li>
          <li><strong>Receipt forgery</strong>: a producer may attempt to forge or replay tool receipts.</li>
          <li><strong>Anchor replay or substitution</strong>: invalid anchors may be presented or misbound.</li>
          <li><strong>Adaptive optimization</strong>: if evaluation metrics are static and public, adversaries may optimize transcripts to pass thresholds.</li>
          <li><strong>Privacy leakage</strong>: transcripts can reveal sensitive drafting history if disclosed improperly.</li>
        </ul>
      </section>

      <section numbered="true" toc="include" anchor="mitigations" title="Mitigations">
        <ul spacing="normal">
          <li>Hash chaining over deterministic encodings provides tamper evidence.</li>
          <li>Anchors (timestamps, sequential work) can raise the cost of post-hoc fabrication and bind chronology.</li>
          <li>Receipt signatures and, when used, DAG validation mitigate provenance forgery.</li>
          <li>Seeded evaluation can mitigate adaptive optimization (policy-defined; not required by PoP).</li>
          <li>Policies should define disclosure requirements and support partial disclosure or ZK proofs.</li>
        </ul>
      </section>

      <section numbered="true" toc="include" anchor="algo-agility" title="Algorithm Agility">
        <t>
          Producers and verifiers SHOULD support algorithm agility for hash functions and signature schemes. Policies
          SHOULD specify allowed algorithms and minimum security strengths.
        </t>
      </section>
    </section>

    <section numbered="true" toc="include" anchor="privacy" title="Privacy Considerations">
      <t>
        Transcripts can reveal sensitive intermediate drafts, editing patterns, and content that was later removed.
        PoP supports multiple disclosure modes, but this document does not mandate a particular privacy policy.
      </t>

      <ul spacing="normal">
        <li><strong>Full disclosure</strong>: the entire transcript is revealed to a verifier.</li>
        <li><strong>Partial disclosure</strong>: Merkle proofs or selective event disclosure under policy.</li>
        <li><strong>Zero-knowledge</strong>: policy-defined threshold proofs without transcript disclosure.</li>
      </ul>

      <t>
        Policies SHOULD minimize disclosure and SHOULD avoid collecting raw keystrokes or invasive telemetry unless
        explicitly required for a deployment and accompanied by informed consent.
      </t>
    </section>

    <section numbered="true" toc="include" anchor="iana" title="IANA Considerations">
      <t>
        This document requests IANA to register a media type for PoP envelopes encoded in CBOR.
      </t>

      <section numbered="true" toc="include" anchor="media-type" title="Media Type Registration">
        <t>Type name: application</t>
        <t>Subtype name: pop+cbor</t>
        <t>Required parameters: none</t>
        <t>Optional parameters: none</t>
        <t>Encoding considerations: binary</t>
        <t>Security considerations: see <xref target="security"/></t>
        <t>Interoperability considerations: none</t>
        <t>Published specification: this document</t>
        <t>Applications that use this media type: editors, provenance systems, attestation verifiers</t>
        <t>Fragment identifier considerations: none</t>
        <t>Additional information:</t>
        <t>Magic number(s): none</t>
        <t>File extension(s): .pop</t>
        <t>Macintosh file type code(s): none</t>
        <t>Person &amp; email address to contact for further information: David Condrey (david@writerslogic.com)</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: none</t>
        <t>Author: Authors of this document</t>
        <t>Change controller: IETF</t>
      </section>
    </section>


    <section numbered="true" toc="include" anchor="appendix-a">
      <name>CDDL Summary (Normative)</name>
      <t>
        This appendix provides a consolidated CDDL summary for PoP-1.5 structures. Implementations MUST follow these
        definitions and MUST apply deterministic CBOR encoding for all hashed objects. The complete normative
        CDDL schema is defined in <xref target="I-D.condrey-rats-pop-schema"/>.
      </t>

      <figure anchor="cddl-pop">
        <name>PoP-1.5 CDDL Summary</name>
        <artwork><![CDATA[
; NOTE: This CDDL is a summary skeleton. Field-level constraints and algorithm
; registries should be expanded as the draft matures.

PoPEnvelope = {
  version: "PoP-1.5",
  session_id: bstr,
  root: bstr,
  transcript_commit: bstr,
  ? index_scheme: tstr,           ; e.g., "byte", "unicode_scalar"
  anchors: [* Anchor],

  seed_commit: bstr,
  policy_commit: bstr,

  receipts: [* Receipt],
  import_index: ImportSummary,

  ? claims: Claims,
  ? zk: ZKBundle
}

Range = {
  start: uint,
  len: uint
}

Event = {
  type: tstr,                      ; "INS" / "DEL" / "REP" / "MOV" / "PASTE" / "SNAP"
  ? range: Range,
  ? dst_pos: uint,
  ? data_hash: bstr,
  ? old_hash: bstr,
  ? new_hash: bstr,
  ? length: uint,
  ? doc_hash: bstr,                ; for SNAP
  ? cursor_pos: uint,              ; optional
  ? source_ref: bstr,              ; references Receipt.output_commit or receipt id
  ? aux: bstr
}

Anchor = {
  type: tstr,                      ; "external" / "seqwork" / policy-defined
  binds: bstr,                     ; root or intermediate chain value
  value: bstr,
  ? timestamp: uint
}

Receipt = {
  tool_id: tstr,
  tool_pubkey: bstr,
  input_commit: bstr / null,
  output_commit: bstr,
  flags: [* tstr],
  ? anchor: Anchor,
  sig: bstr
}

ImportSummary = {
  raw_import_bytes: uint,
  paste_events: uint,
  receipt_bound_events: uint,
  refined_pct: float
}

Claims = {
  integrity: float,
  time: float,
  liveness: float,
  emergence: float,
  topology: float,
  assistance: float,
  refinement: float,
  process_quality: float
}

ZKBundle = {
  score_threshold_proof: bstr,
  public_inputs: [* bstr]
}
]]></artwork>
      </figure>
    </section>

    <section numbered="true" toc="include" anchor="appendix-b">
      <name>Example Verification Flow (Informative)</name>
      <t>
        This appendix illustrates a typical verification sequence.
      </t>
      <ol spacing="normal">
        <li>Verifier parses the PoP envelope and checks required fields.</li>
        <li>Verifier obtains transcript disclosure (full transcript or policy-approved proofs).</li>
        <li>Verifier recomputes the transcript hash chain and validates the root.</li>
        <li>Verifier validates all anchors included in the envelope and applies policy requirements.</li>
        <li>Verifier validates receipt signatures and resolves any referenced receipts per policy.</li>
        <li>Verifier validates binding to the final artifact hash (if required by policy).</li>
        <li>Verifier applies policy-defined evaluation; if ZK is provided, verifies threshold proof.</li>
        <li>Verifier outputs an evidence summary as policy-defined assessment of process evidence.</li>
      </ol>
    </section>

  </middle>

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

      <!-- Normative References -->
      <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="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </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="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </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="D. Eastlake 3rd" initials="D." surname="Eastlake"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>

        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>

        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>

        <reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>

        <reference anchor="RFC9711" target="https://www.rfc-editor.org/info/rfc9711">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="December" year="2024"/>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>

        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>

        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>CBOR Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>

      </references>

      <!-- Informative References -->
      <references>
        <name>Informative References</name>

        <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 fullname="C. Adams" initials="C." surname="Adams"/>
            <author fullname="P. Cain" initials="P." surname="Cain"/>
            <author fullname="D. Pinkas" initials="D." surname="Pinkas"/>
            <author fullname="R. Zuccherato" initials="R." surname="Zuccherato"/>
            <date month="August" year="2001"/>
          </front>
          <seriesInfo name="RFC" value="3161"/>
          <seriesInfo name="DOI" value="10.17487/RFC3161"/>
        </reference>

        <reference anchor="RFC6973" target="https://www.rfc-editor.org/info/rfc6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>

        <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2024"/>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>

        <!-- Existing companion drafts (reused, not new) -->
        <reference anchor="I-D.condrey-rats-pop">
          <front>
            <title>Proof of Process Provenance Protocol (PPPP): An Evidence Framework for Document Authorship Attestation</title>
            <author fullname="D. Condrey" initials="D." surname="Condrey"/>
            <date/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop"/>
        </reference>

        <reference anchor="I-D.condrey-rats-pop-examples">
          <front>
            <title>Examples of Proof of Process Evidence Packets and Attestation Results</title>
            <author fullname="D. Condrey" initials="D." surname="Condrey"/>
            <date/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop-examples"/>
        </reference>

        <reference anchor="I-D.condrey-rats-pop-schema">
          <front>
            <title>Proof of Process CDDL Schema</title>
            <author fullname="D. Condrey" initials="D." surname="Condrey"/>
            <date/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop-schema"/>
        </reference>

      </references>

    </references>

    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>
        The author thanks the RATS working group for foundational work on
        remote attestation architectures. Thanks also to reviewers who
        provided feedback on CBOR encoding determinism, COSE signing
        surfaces, and transport binding interoperability.
      </t>
    </section>

  </back>


</rfc>
