<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-ailex-vap-legal-ai-provenance-02"
     category="exp"
     submissionType="independent"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="VAP-LAP">Verifiable AI Provenance (VAP) Framework and Legal AI Profile (LAP)</title>

    <seriesInfo name="Internet-Draft" value="draft-ailex-vap-legal-ai-provenance-02"/>

    <author fullname="Shintaro Yamakawa" initials="S." surname="Yamakawa" role="editor">
      <organization>AILEX LLC / VeritasChain Standards Organization</organization>
      <address>
        <postal>
          <street>1-10-8 Dogenzaka, Shibuya-ku</street>
          <region>Tokyo</region>
          <code>150-0043</code>
          <country>Japan</country>
        </postal>
        <email>info@ailex.co.jp</email>
        <uri>https://ailex.co.jp</uri>
      </address>
    </author>

    <date year="2026" month="February" day="24"/>

    <area>Security</area>
    <workgroup>Network Working Group</workgroup>

    <keyword>AI</keyword>
    <keyword>provenance</keyword>
    <keyword>audit trail</keyword>
    <keyword>legal technology</keyword>
    <keyword>verifiable</keyword>
    <keyword>SCITT</keyword>

    <abstract>
      <t>
        This document specifies the Verifiable AI Provenance (VAP) Framework,
        a cross-domain upper framework for cryptographically verifiable
        decision audit trails in high-risk AI systems, along with the Legal
        AI Profile (LAP), a domain-specific instantiation for legal AI and
        LegalTech systems.
      </t>
      <t>
        VAP defines common infrastructure including hash chain integrity,
        digital signatures, unified conformance levels (Bronze/Silver/Gold),
        external anchoring via RFC 3161 Time-Stamp Protocol and compatible
        transparency services (including IETF SCITT), a Completeness
        Invariant pattern guaranteeing no selective logging, standardized
        Evidence Pack format for regulatory submission, and privacy-preserving
        verification protocols.
      </t>
      <t>
        LAP extends VAP for the judicial AI domain, addressing unique
        requirements including attorney oversight verification (Human
        Override Coverage), three-pipeline completeness invariants for legal
        consultation, document generation, and fact-checking, tiered content
        retention with legal hold protocols for judicial discovery
        compliance, graduated override enforcement mechanisms, and privacy-
        preserving fields designed to maintain attorney-client privilege
        while enabling third-party auditability.
      </t>
    </abstract>
  </front>

  <middle>

    <!-- ============================== -->
    <!-- Section 1: Introduction        -->
    <!-- ============================== -->

    <section anchor="introduction">
      <name>Introduction</name>

      <t>
        The deployment of AI systems in high-risk domains -- including
        finance, healthcare, transportation, and the administration of
        justice -- creates a structural accountability gap.  AI decisions
        that affect fundamental rights and societal infrastructure lack
        standardized, cryptographically verifiable audit trails that
        independent third parties can inspect.
      </t>
      <t>
        Current approaches rely on trust-based governance: AI providers
        assert that their systems are safe and well-logged, but no
        independent party can cryptographically verify these claims.  The
        Verifiable AI Provenance (VAP) Framework addresses this gap by
        defining a "Verify, Don't Trust" architecture for AI decision
        provenance.
      </t>
      <t>This document defines two complementary specifications:</t>
      <ol>
        <li>
          VAP Framework (Part I): A cross-domain upper framework defining
          common infrastructure for verifiable AI provenance applicable to
          any high-risk AI domain.
        </li>
        <li>
          Legal AI Profile (LAP) (Part II): A domain-specific profile for
          legal AI systems, addressing requirements arising from
          professional regulation of attorneys and high-risk AI system
          governance.
        </li>
      </ol>

      <section anchor="scope">
        <name>Scope</name>
        <t>
          VAP targets AI systems where "system failure could cause significant
          and irreversible harm to human life, societal infrastructure, or
          democratic institutions."  This intentionally strict scope
          distinguishes VAP from general-purpose logging frameworks.
        </t>
        <t>
          LAP specifically addresses legal AI systems that provide AI-powered
          legal consultation, document generation, and fact-checking services
          to licensed attorneys.
        </t>
      </section>

      <section anchor="design-philosophy">
        <name>Design Philosophy</name>
        <t>
          The core principle is "Verify, Don't Trust."  Rather than relying on
          AI providers' claims about the safety and integrity of their systems,
          VAP enables independent, cryptographic verification of every AI
          decision's provenance, completeness, and human oversight.
        </t>
        <t>
          NOTE: This Internet-Draft is the authoritative specification for
          the VAP Framework and LAP Profile.  Where differences exist
          between this document and other published descriptions of the
          VAP Framework (e.g., companion white papers or implementation
          guides), this Internet-Draft takes precedence.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 2: Conventions         -->
    <!-- ============================== -->

    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
        "OPTIONAL" in this document are to be interpreted as described in BCP
        14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
        when, they appear in all capitals, as shown here.
      </t>

      <section anchor="terminology">
        <name>Terminology</name>
        <dl>
          <dt>VAP</dt>
          <dd>Verifiable AI Provenance Framework - the cross-domain upper
          framework defined in this document.</dd>

          <dt>Profile</dt>
          <dd>A domain-specific instantiation of VAP (e.g., VCP for
          finance, CAP for content, LAP for legal).</dd>

          <dt>LAP</dt>
          <dd>Legal AI Profile - the judicial AI domain profile defined in
          this document.</dd>

          <dt>Provenance</dt>
          <dd>Cryptographically verifiable record of data origin,
          derivation, and history.</dd>

          <dt>Completeness Invariant</dt>
          <dd>A mathematical guarantee that every attempt event has exactly
          one corresponding outcome event.</dd>

          <dt>Evidence Pack</dt>
          <dd>A self-contained, signed package of provenance events
          suitable for regulatory submission and third-party audit.</dd>

          <dt>External Anchor</dt>
          <dd>Registration of a Merkle root hash with an external trusted
          timestamping service such as <xref target="RFC3161"/> or a
          compatible transparency log such as IETF SCITT
          <xref target="IETF-SCITT"/>.</dd>

          <dt>Human Override</dt>
          <dd>An event recording a human professional's review, approval,
          modification, or rejection of an AI-generated output.</dd>

          <dt>Override Coverage</dt>
          <dd>The ratio of AI outputs reviewed by a human professional to
          total AI outputs, expressed as a percentage.</dd>

          <dt>Causal Link</dt>
          <dd>A reference from an outcome event to its originating attempt
          event, establishing referential integrity within a pipeline.</dd>

          <dt>Content Retention Tier</dt>
          <dd>One of three levels of content preservation (Full Content,
          Recoverable Hash, Hash-Only) defining the availability of
          original event content at a given point in the retention
          lifecycle.</dd>

          <dt>Legal Hold</dt>
          <dd>A directive freezing the current retention tier for events
          within scope, preventing content deletion or tier transition
          during litigation, investigation, or regulatory inquiry.</dd>

          <dt>Override Enforcement Level</dt>
          <dd>One of four graduated control levels (Metric Only, Warn,
          Gate, Strict) governing how the system responds when AI outputs
          lack corresponding HUMAN_OVERRIDE events.</dd>

          <dt>Hash Input</dt>
          <dd>The canonical byte sequence over which EventHash is computed,
          defined as the JCS-canonicalized event with the security.event_hash,
          security.signature, and security.sign_algo fields removed.
          See <xref target="hash-chain-spec"/>.</dd>
        </dl>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 3: Architecture        -->
    <!-- ============================== -->

    <section anchor="architecture">
      <name>VAP Framework Architecture</name>

      <section anchor="layer-model">
        <name>Layer Model</name>
        <t>
          VAP is organized into four core layers, a common infrastructure
          layer, and a domain profile layer:
        </t>
        <dl>
          <dt>Integrity Layer</dt>
          <dd>Hash chain, digital signatures, timestamps (REQUIRED for all
          levels).</dd>

          <dt>Provenance Layer</dt>
          <dd>Actor, input, context, action, and outcome recording
          (REQUIRED).</dd>

          <dt>Accountability Layer</dt>
          <dd>Operator identification, approval chain, delegation records
          (REQUIRED for operator_id; RECOMMENDED for approval chain).</dd>

          <dt>Traceability Layer</dt>
          <dd>Trace IDs, causal links, cross-profile references (REQUIRED
          for trace_id; OPTIONAL for cross-references).</dd>

          <dt>Common Infrastructure</dt>
          <dd>Conformance levels, external anchoring, completeness
          invariant, evidence packs, privacy-preserving verification,
          retention framework (availability depends on conformance
          level).</dd>

          <dt>Domain Profile Layer</dt>
          <dd>Domain-specific event types, data model extensions, regulatory
          mappings (defined per profile).</dd>
        </dl>
      </section>

      <section anchor="domain-profiles">
        <name>Domain Profiles</name>
        <t>
          VAP supports multiple domain profiles.  Each profile MUST define:
        </t>
        <ol>
          <li>Event Types: Domain-specific event type taxonomy.</li>
          <li>Data Model Extensions: Additional fields beyond the VAP common
          event structure.</li>
          <li>Conformance Mapping: Mapping to VAP Bronze/Silver/Gold
          levels.</li>
          <li>Regulatory Alignment: Mapping to applicable regulations
          (informative).</li>
          <li>Completeness Invariant Application: How the completeness
          invariant applies to domain-specific event flows.</li>
        </ol>
        <t>
          Registered profiles include VCP (Finance), CAP (Content/Creative
          AI), and LAP (Legal AI, defined in Part II of this document).
          Additional profiles for automotive (DVP), medical (MAP), and
          public administration (PAP) domains are under development.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 4: Cryptographic Foundation -->
    <!-- ============================== -->

    <section anchor="crypto-foundation">
      <name>Cryptographic Foundation</name>

      <section anchor="algo-requirements">
        <name>Algorithm Requirements</name>
        <t>
          All VAP-conformant implementations MUST support the primary
          algorithms listed below.  Implementations SHOULD support
          at least one alternative algorithm in each category for
          migration purposes.  Post-quantum algorithms are listed for
          future migration readiness and are currently OPTIONAL.
        </t>
        <table anchor="algo-table">
          <name>Required Cryptographic Algorithms</name>
          <thead>
            <tr>
              <th>Category</th>
              <th>Primary (MTI)</th>
              <th>Alternative</th>
              <th>Post-Quantum (Future MTI)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Hash</td>
              <td>SHA-256</td>
              <td>SHA-384, SHA-512</td>
              <td>SHA3-256</td>
            </tr>
            <tr>
              <td>Signature</td>
              <td>Ed25519 (<xref target="RFC8032"/>)</td>
              <td>ECDSA P-256 (<xref target="RFC6979"/>)</td>
              <td>ML-DSA-65 (<xref target="FIPS204"/>)</td>
            </tr>
            <tr>
              <td>Encryption</td>
              <td>AES-256-GCM</td>
              <td>ChaCha20-Poly1305</td>
              <td>N/A (see KEM row)</td>
            </tr>
            <tr>
              <td>KEM</td>
              <td>N/A (classical key exchange)</td>
              <td>N/A</td>
              <td>ML-KEM-1024 (<xref target="FIPS203"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>
          Note: The Post-Quantum signature algorithm ML-DSA-65 (formerly
          known as CRYSTALS-Dilithium, renamed upon FIPS 204 standardization
          in August 2024) provides security equivalent to AES-192.  This
          parameter set was selected as a balance between signature size
          (3,309 bytes) and security margin for legal audit trails requiring
          multi-decade retention.  ML-DSA-44 (AES-128 equivalent) was
          considered insufficient for the intended retention periods;
          ML-DSA-87 (AES-256 equivalent) imposes significantly larger
          signatures (4,627 bytes) with marginal practical benefit for
          this use case.
        </t>
        <t>
          Note: ML-KEM-1024 (formerly known as CRYSTALS-Kyber, renamed
          upon FIPS 203 standardization in August 2024) is a key
          encapsulation mechanism (KEM), not an encryption algorithm.
          It is listed separately from symmetric encryption because KEM
          and symmetric encryption serve different roles: KEM establishes
          shared secrets for key agreement, while AES-256-GCM provides
          authenticated encryption of content.
        </t>
        <t>
          Implementations MUST include algorithm identifiers in all
          cryptographic fields.  The following table defines the canonical
          algorithm identifiers used in field values and wire-format
          prefixes:
        </t>
        <table anchor="algo-id-table">
          <name>Canonical Algorithm Identifiers</name>
          <thead>
            <tr>
              <th>Algorithm</th>
              <th>Field Value (hash_algo / sign_algo)</th>
              <th>Wire Prefix (in encoded strings)</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>SHA-256</td>
              <td>"sha-256"</td>
              <td>"sha-256:"</td>
              <td>NIST FIPS 180-4</td>
            </tr>
            <tr>
              <td>SHA-384</td>
              <td>"sha-384"</td>
              <td>"sha-384:"</td>
              <td>NIST FIPS 180-4</td>
            </tr>
            <tr>
              <td>SHA-512</td>
              <td>"sha-512"</td>
              <td>"sha-512:"</td>
              <td>NIST FIPS 180-4</td>
            </tr>
            <tr>
              <td>SHA3-256</td>
              <td>"sha3-256"</td>
              <td>"sha3-256:"</td>
              <td>NIST FIPS 202</td>
            </tr>
            <tr>
              <td>Ed25519</td>
              <td>"ed25519"</td>
              <td>"ed25519:"</td>
              <td><xref target="RFC8032"/></td>
            </tr>
            <tr>
              <td>ECDSA P-256</td>
              <td>"ecdsa-p256"</td>
              <td>"ecdsa-p256:"</td>
              <td><xref target="RFC6979"/></td>
            </tr>
            <tr>
              <td>ML-DSA-65</td>
              <td>"ml-dsa-65"</td>
              <td>"ml-dsa-65:"</td>
              <td><xref target="FIPS204"/></td>
            </tr>
          </tbody>
        </table>
        <t>
          All algorithm identifiers MUST be lowercase ASCII strings
          with hyphens as separators.  The field value and wire prefix
          use the same string (the wire prefix appends a colon as
          delimiter).  Implementations MUST perform case-insensitive
          comparison when validating algorithm identifiers but MUST
          produce lowercase output.  These identifiers enable crypto
          agility and algorithm migration as specified in
          <xref target="algo-migration"/>.
        </t>
      </section>

      <section anchor="hash-chain-spec">
        <name>Hash Chain Specification</name>
        <t>
          Events MUST be linked in a hash chain where each event's hash
          includes the hash of the preceding event.
        </t>
        <t>
          The Hash Input is computed by removing the following fields from
          the event before canonicalization:
        </t>
        <ul>
          <li>security.event_hash</li>
          <li>security.signature</li>
        </ul>
        <t>
          The remaining fields (including security.hash_algo,
          security.sign_algo, and security.signer_id) are retained in the
          hash input.  This explicit exclusion list prevents circular
          references (event_hash cannot be included in its own computation)
          and ensures that implementations agree on the hash input.
        </t>
        <t>
          The computation proceeds as follows:
        </t>
        <artwork><![CDATA[
  HashInput[n] = Event[n] with {security.event_hash,
                                security.signature} removed

  EventHash[n] = HashAlgo(JCS-Canonicalize(HashInput[n]))

  where:
    Event[n].header.prev_hash = EventHash[n-1]
    Event[0].header.prev_hash = null  (genesis event)
    HashAlgo is the algorithm specified in security.hash_algo
    JCS-Canonicalize follows RFC 8785
]]></artwork>
        <t>
          Canonicalization MUST follow <xref target="RFC8785"/> (JSON
          Canonicalization Scheme).
        </t>
        <t>
          Chain integrity verification MUST confirm:
        </t>
        <ol>
          <li>Each event's EventHash matches the recomputed hash over
          the Hash Input.</li>
          <li>Each event's prev_hash matches the preceding event's
          EventHash.</li>
          <li>The genesis event has a null prev_hash.</li>
          <li>The hash_algo specified in each event is a supported
          algorithm.</li>
        </ol>
      </section>

      <section anchor="sig-requirements">
        <name>Digital Signature Requirements</name>
        <t>
          Every event MUST be signed.  The signature MUST be computed over
          the EventHash bytes (not over the raw event):
        </t>
        <artwork><![CDATA[
  Signature = SignAlgo.Sign(PrivateKey, EventHash_bytes)
]]></artwork>
        <t>
          The signature MUST be encoded as follows:
        </t>
        <artwork><![CDATA[
  security.signature = sign_algo_id ":" Base64url(Signature_bytes)
]]></artwork>
        <t>
          where sign_algo_id is the canonical algorithm identifier from
          <xref target="algo-id-table"/> matching the security.sign_algo
          field (e.g., "ed25519", "ecdsa-p256"), and Base64url encoding
          follows <xref target="RFC4648"/> Section 5 (URL-safe alphabet,
          no padding).
        </t>
        <t>
          The primary mandatory-to-implement (MTI) signature algorithm is
          Ed25519 <xref target="RFC8032"/>.  Implementations MUST support
          Ed25519 and SHOULD support at least one additional algorithm
          from <xref target="algo-table"/> for migration purposes.
        </t>
      </section>

      <section anchor="algo-migration">
        <name>Algorithm Migration</name>
        <t>
          VAP is designed for crypto agility per BCP 201
          <xref target="RFC7696"/>.  Algorithm migration proceeds as
          follows:
        </t>
        <ol>
          <li>A new algorithm is added to the supported set via a
          specification update.</li>
          <li>Implementations begin producing events with the new
          algorithm alongside the existing algorithm (dual-signing
          period, RECOMMENDED minimum 6 months).</li>
          <li>Once all verifiers support the new algorithm, the old
          algorithm is deprecated.</li>
          <li>After a deprecation notice period (RECOMMENDED minimum
          12 months), implementations MAY stop producing events with
          the old algorithm.</li>
        </ol>
        <t>
          During migration, the hash chain MAY contain events signed
          with different algorithms.  Verifiers MUST support all
          algorithms that appear in the chain being verified.
        </t>

        <section anchor="pq-readiness">
          <name>Post-Quantum Readiness</name>
          <t>
            Audit trails with multi-decade retention periods (up to 10 years
            at Gold level) face exposure to "harvest now, decrypt later"
            attacks.  NIST has announced timelines for deprecating RSA and
            ECC algorithms (targeted deprecation by 2030, disallowance
            by 2035).
          </t>
          <t>
            Implementations with Gold-level retention requirements SHOULD
            prepare for post-quantum transition by:
          </t>
          <ul>
            <li>Tracking ML-DSA (FIPS 204) readiness in their
            cryptographic libraries.</li>
            <li>Planning for hybrid classical+PQ signing approaches
            during the transition period, per the guidance in
            <xref target="RFC9794"/>.</li>
            <li>Ensuring that signed Evidence Packs can be re-signed
            with post-quantum algorithms when available, while preserving
            the original classical signature chain for historical
            verification.</li>
          </ul>
        </section>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 5: Common Event Structure -->
    <!-- ============================== -->

    <section anchor="common-event">
      <name>Common Event Structure</name>
      <t>
        All VAP-conformant events MUST include the following fields:
      </t>
      <artwork><![CDATA[
{
  "vap_version": "1.3",
  "profile": {
    "id": "string (VCP|CAP|LAP|DVP|MAP|PAP)",
    "version": "semver string"
  },
  "header": {
    "event_id": "UUIDv7 (RFC 9562)",
    "chain_id": "UUIDv7",
    "prev_hash": "sha-256:<64 lowercase hex chars> | null",
    "timestamp": "RFC 3339 datetime with timezone",
    "event_type": "string (profile-specific)",
    "causal_link": {
      "target_event_id": "UUIDv7 | null",
      "link_type": "string (OUTCOME_OF|OVERRIDE_OF|HOLD_ON|
                            RECOVERY_OF|TIER_CHANGE_OF|null)"
    }
  },
  "provenance": {
    "actor": {
      "actor_id": "string",
      "actor_hash": "sha-256:<64 lowercase hex chars>",
      "role": "string"
    },
    "input": { },
    "context": { },
    "action": { },
    "outcome": { }
  },
  "accountability": {
    "operator_id": "string",
    "last_approval_by": "string",
    "approval_timestamp": "RFC 3339"
  },
  "domain_payload": { },
  "security": {
    "event_hash": "sha-256:<64 lowercase hex chars>",
    "hash_algo": "sha-256",
    "signature": "ed25519:base64url...",
    "sign_algo": "ed25519",
    "signer_id": "string"
  }
}
]]></artwork>
      <t>
        Event identifiers MUST use UUIDv7 (<xref target="RFC9562"/>) to
        ensure time-ordered sortability.  JSON canonicalization MUST follow
        <xref target="RFC8785"/>.
      </t>
      <t>
        The profile.id field MUST be 1-4 uppercase ASCII characters
        matching a registered profile identifier (see
        <xref target="iana-profile-registry"/>).  Note that profile
        identifiers use uppercase (e.g., "LAP") while algorithm
        identifiers use lowercase (e.g., "sha-256") per
        <xref target="algo-id-table"/>; this distinction is intentional
        and reflects their different registries.
      </t>
      <t>
        Timestamps MUST conform to <xref target="RFC3339"/> (a profile of
        ISO 8601) and MUST include a timezone offset or "Z" for UTC.
        Implementations SHOULD use UTC for all timestamps.
      </t>
      <t>
        The header.causal_link field provides a standardized location for
        referential integrity across all profiles.  Outcome events MUST
        set target_event_id to the originating attempt event's identifier
        and link_type to "OUTCOME_OF".  HUMAN_OVERRIDE events MUST set
        target_event_id to the target output event and link_type to
        "OVERRIDE_OF".  Events with no causal link MUST set both fields
        to null.
      </t>
      <t>
        Hash values MUST be encoded as lowercase hexadecimal strings,
        prefixed with the canonical algorithm identifier (from
        <xref target="algo-id-table"/>) followed by a colon
        (e.g., "sha-256:a1b2c3...").  The hexadecimal string MUST
        be the exact length corresponding to the hash output (64
        characters for sha-256, 96 for sha-384, 128 for sha-512).
      </t>
      <t>
        All text fields MUST be encoded as UTF-8
        (<xref target="RFC3629"/>).
      </t>

      <section anchor="numeric-encoding">
        <name>Numeric Value Encoding</name>
        <t>
          Fields representing monetary amounts, cryptographic values, or
          high-precision measurements SHOULD be encoded as JSON strings
          rather than JSON numbers.  This recommendation is motivated by:
        </t>
        <ul>
          <li>IEEE 754 double-precision floating-point, the only numeric
          type in JSON (per <xref target="RFC8259"/>, Section 6), cannot
          exactly represent all decimal values.  Financial and legal
          contexts require exact decimal representation.</li>
          <li>JSON parsers across programming languages exhibit inconsistent
          behavior for large integers (exceeding 2^53) and high-precision
          decimals, leading to silent data corruption.</li>
          <li>Canonicalization stability: <xref target="RFC8785"/> defines
          specific rules for numeric serialization, but string encoding
          avoids parser-dependent numeric reformatting entirely, ensuring
          consistent hash computation across implementations.</li>
        </ul>
        <t>
          Fields where exact precision is not critical (e.g., event_count,
          token_count) MAY use JSON numbers.  Implementations MUST document
          which fields use string encoding.  Implementations that use JSON
          numbers for counters MUST ensure that any numeric-to-string
          conversion performed during canonicalization is deterministic and
          documented, to avoid signature verification ambiguity across
          languages and libraries.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 6: Conformance Levels  -->
    <!-- ============================== -->

    <section anchor="conformance-levels">
      <name>Conformance Levels</name>
      <t>
        VAP defines three conformance levels applicable to all domain
        profiles.  Each level inherits all requirements of lower levels
        (Gold is a superset of Silver, which is a superset of Bronze).
      </t>

      <section anchor="bronze-level">
        <name>Bronze Level</name>
        <t>Target: SMEs, early adopters.  Core capabilities:</t>
        <ul>
          <li>Event logging for all AI decision points (REQUIRED)</li>
          <li>Hash chain linking all events using a supported hash
          algorithm (REQUIRED)</li>
          <li>Digital signature on every event using a supported
          signature algorithm (REQUIRED)</li>
          <li><xref target="RFC3339"/> timestamps with timezone
          (REQUIRED)</li>
          <li>UUIDv7 event identifiers (REQUIRED)</li>
          <li>Minimum 6-month retention (REQUIRED)</li>
          <li>Event structure validation against the Common Event
          Structure (<xref target="common-event"/>) with at minimum
          all REQUIRED fields present and correctly typed
          (REQUIRED)</li>
        </ul>
        <t>
          Note: Formal JSON Schema definitions for validation are
          provided in <xref target="json-schemas"/>.  Bronze
          implementations MUST validate the presence and type of
          all REQUIRED fields defined in <xref target="common-event"/>.
        </t>
      </section>

      <section anchor="silver-level">
        <name>Silver Level</name>
        <t>
          Target: Enterprise, regulated industries.  Additional requirements
          beyond Bronze:
        </t>
        <ul>
          <li>Daily external anchoring to a trusted timestamping service
          conforming to <xref target="RFC3161"/> (with
          <xref target="RFC5816"/> ESSCertIDv2 support) or an equivalent
          transparency log (REQUIRED)</li>
          <li>Completeness Invariant verification (REQUIRED)</li>
          <li>Evidence Pack generation capability (REQUIRED)</li>
          <li>Sensitive data hashing for privacy preservation
          (REQUIRED)</li>
          <li>Minimum 2-year retention (REQUIRED)</li>
          <li>Merkle tree construction per <xref target="merkle-tree"/>
          (REQUIRED)</li>
          <li>Third-party verification endpoint conforming to
          <xref target="verification-protocol"/> (REQUIRED)</li>
        </ul>
      </section>

      <section anchor="gold-level">
        <name>Gold Level</name>
        <t>
          Target: Highly regulated industries.  Additional requirements
          beyond Silver:
        </t>
        <ul>
          <li>Hourly external anchoring (REQUIRED)</li>
          <li>HSM for signing key storage, <xref target="FIPS140-3"/> Level 2 or above
          (REQUIRED).  Note: FIPS 140-2 validated modules MAY be used
          during the transition period ending September 2026, after
          which FIPS 140-3 is REQUIRED.</li>
          <li>Integration with a transparency log service such as IETF
          SCITT <xref target="IETF-SCITT"/> or equivalent
          (REQUIRED)</li>
          <li>Real-time audit API conforming to
          <xref target="verification-protocol"/> (REQUIRED)</li>
          <li>Minimum 5-year retention (REQUIRED)</li>
          <li>24-hour incident response and evidence preservation
          (REQUIRED)</li>
          <li>Geographic redundancy, minimum 2 regions (REQUIRED)</li>
          <li>Annual third-party audit (REQUIRED)</li>
          <li>Crypto-shredding support (REQUIRED)</li>
        </ul>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 7: External Anchoring  -->
    <!-- ============================== -->

    <section anchor="external-anchoring">
      <name>External Anchoring</name>
      <t>
        External anchoring proves that events existed at a specific point
        in time, preventing backdating, forward-dating, and log forking.
      </t>

      <section anchor="anchoring-types">
        <name>Anchoring Service Types</name>
        <t>
          VAP defines an abstract anchoring interface that can be realized
          by multiple service types.  The baseline anchoring service is
          <xref target="RFC3161"/> Time-Stamp Authority (TSA), with
          <xref target="RFC5816"/> support for ESSCertIDv2 (enabling
          SHA-256 certificate identification instead of SHA-1).
          Additional service types include transparency logs and public
          blockchains.
        </t>
        <dl>
          <dt>RFC 3161 TSA (Baseline)</dt>
          <dd>Traditional enterprise timestamping via X.509 PKI
          (<xref target="RFC3161"/>).  This is the normative baseline.
          Trust model: CA trust hierarchy.  Implementations MUST
          support <xref target="RFC5816"/> for SHA-256-based
          certificate identification.</dd>

          <dt>Transparency Log (e.g., IETF SCITT)</dt>
          <dd>Append-only transparency logs providing public
          verifiability.  IETF SCITT (<xref target="IETF-SCITT"/>)
          is one such service; implementations MAY use any transparency
          log providing equivalent append-only and inclusion-proof
          guarantees.  Registration via SCRAPI
          (<xref target="IETF-SCRAPI"/>) is RECOMMENDED for SCITT
          integration.  Trust model: public append-only log with
          cryptographic inclusion proofs.</dd>

          <dt>Blockchain</dt>
          <dd>Bitcoin or Ethereum anchoring for maximum
          decentralization.  Trust model: PoW/PoS consensus.  This
          option is non-normative and provided for environments
          requiring decentralized trust.</dd>
        </dl>
        <t>
          Gold Level implementations MUST use at least one transparency
          log service (such as SCITT) or equivalent, in addition to or
          instead of RFC 3161 TSA.  Implementations SHOULD use multiple
          independent anchoring services for critical deployments.
        </t>
      </section>

      <section anchor="anchor-record">
        <name>Anchor Record Format</name>
        <artwork><![CDATA[
{
  "anchor_id": "UUIDv7",
  "anchor_type": "RFC3161 | TRANSPARENCY_LOG | BLOCKCHAIN",
  "merkle_root": "sha-256:<64 lowercase hex chars>",
  "event_count": 1000,
  "first_event_id": "UUIDv7",
  "last_event_id": "UUIDv7",
  "first_event_timestamp": "RFC 3339",
  "last_event_timestamp": "RFC 3339",
  "anchor_timestamp": "RFC 3339",
  "anchor_proof": { },
  "service_endpoint": "https://tsa.example.com"
}
]]></artwork>
        <t>
          The anchor_proof field is an object whose structure depends
          on the anchor_type:
        </t>
        <dl>
          <dt>RFC3161</dt>
          <dd>anchor_proof MUST contain: "tst_token" (Base64url-encoded
          RFC 3161 TimeStampToken per <xref target="RFC4648"/>
          Section 5), "hash_algo" (algorithm used in TSA request),
          and "tsa_cert_hash" (SHA-256 hash of the TSA certificate).
          Verification: parse the TimeStampToken, confirm the imprint
          matches the merkle_root, and validate the TSA signature
          chain.</dd>

          <dt>TRANSPARENCY_LOG</dt>
          <dd>anchor_proof MUST contain: "inclusion_proof" (array of
          Base64url-encoded sibling hashes from leaf to root),
          "tree_size" (integer, total leaves at time of inclusion),
          "leaf_index" (integer, position of this entry),
          and "log_id" (identifier of the transparency log).
          Verification follows the Merkle audit path algorithm
          defined in <xref target="RFC9162"/> Section 2.1.3.</dd>

          <dt>BLOCKCHAIN</dt>
          <dd>anchor_proof MUST contain: "tx_id" (transaction
          identifier as hex string), "block_height" (integer),
          "chain" (e.g., "bitcoin", "ethereum"), and
          "confirmations" (integer, number of confirmations at
          recording time).  This anchor type is non-normative.</dd>
        </dl>
      </section>

      <section anchor="merkle-tree">
        <name>Merkle Tree Construction</name>
        <t>
          Events MUST be batched into a binary Merkle hash tree for
          efficient anchoring and selective disclosure.  The tree
          construction follows <xref target="RFC9162"/> (Certificate
          Transparency Version 2.0) Section 2, which obsoletes
          <xref target="RFC6962"/>:
        </t>
        <artwork><![CDATA[
  MTH({})       = SHA-256()    (empty hash for zero inputs)
  MTH({d(0)})   = SHA-256(0x00 || d(0))
  MTH(D[n])     = SHA-256(0x01 || MTH(D[0:k]) || MTH(D[k:n]))

  where:
    D[n] is the list of n event hashes
    k is the largest power of 2 less than n
    0x00 is the leaf node prefix
    0x01 is the interior node prefix
    || denotes concatenation
]]></artwork>
        <t>
          This construction uses domain separation prefixes (0x00 for
          leaves, 0x01 for interior nodes) to prevent second-preimage
          attacks, and handles non-power-of-two leaf counts without
          duplicating leaves, consistent with <xref target="RFC9162"/>.
        </t>
        <t>
          The resulting Merkle root is submitted to the external
          anchoring service.  Merkle inclusion proofs enable selective
          disclosure: a verifier can confirm that a specific event is
          included in an anchored batch without accessing other events
          in the batch.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 8: Completeness Invariant -->
    <!-- ============================== -->

    <section anchor="completeness-invariant">
      <name>Completeness Invariant</name>
      <t>
        The Completeness Invariant is a mathematical guarantee that every
        "attempt" event has exactly one corresponding "outcome" event.
        This prevents selective logging -- the omission of inconvenient
        records.
      </t>
      <t>General form:</t>
      <artwork><![CDATA[
  For each pipeline P:
    Count(P_ATTEMPT) = Count(P_SUCCESS)
                     + Count(P_DENY)
                     + Count(P_ERROR)
]]></artwork>
      <t>The invariant enforces three properties:</t>
      <dl>
        <dt>Completeness</dt>
        <dd>Every ATTEMPT has an outcome.  Violation indicates missing
        events.</dd>
        <dt>Uniqueness</dt>
        <dd>Each ATTEMPT has exactly one outcome.  Violation indicates
        duplicate records.</dd>
        <dt>Referential Integrity</dt>
        <dd>Every outcome contains a causal link (via
        header.causal_link.target_event_id) to its originating ATTEMPT.
        Violation indicates orphan events.</dd>
      </dl>
      <t>
        Domain profiles MUST specify which event types constitute attempts
        and outcomes for the invariant.  Each outcome event MUST set
        header.causal_link.target_event_id to the originating attempt
        event's event_id and header.causal_link.link_type to "OUTCOME_OF".
      </t>
      <t>
        Verification SHOULD account for a configurable grace period for
        in-flight operations.  The grace period MUST NOT exceed 300 seconds
        (RECOMMENDED default: 60 seconds).  If an ATTEMPT event has no
        corresponding outcome event after the grace period has elapsed, a
        verification implementation SHOULD treat this as a completeness
        violation.  Implementations MAY emit a synthetic TIMEOUT_ERROR
        outcome event when the grace period expires, to maintain the
        invariant.
      </t>
    </section>

    <!-- ============================== -->
    <!-- Section 9: Evidence Pack       -->
    <!-- ============================== -->

    <section anchor="evidence-pack">
      <name>Evidence Pack Specification</name>
      <t>
        An Evidence Pack is a self-contained, signed package of provenance
        events suitable for regulatory submission and third-party audit.
      </t>

      <section anchor="pack-structure">
        <name>Pack Structure</name>
        <t>An Evidence Pack MUST contain:</t>
        <ul>
          <li>manifest.json: Pack metadata and integrity information</li>
          <li>events/: Event batches (max 10,000 events per file)</li>
          <li>anchors/: External anchor records</li>
          <li>merkle/: Merkle tree structure and selective disclosure
          proofs</li>
          <li>keys/: Public keys for signature verification</li>
          <li>signatures/: Pack-level signature</li>
        </ul>
        <t>
          The Evidence Pack SHOULD be packaged as a ZIP archive with the
          media type application/vap-evidence-pack+zip (see
          <xref target="iana-media-type"/>).  The manifest MUST use
          the media type application/vap-manifest+json.
        </t>
      </section>

      <section anchor="pack-manifest">
        <name>Pack Manifest</name>
        <t>The manifest MUST include the following fields:</t>
        <dl>
          <dt>pack_id (REQUIRED)</dt>
          <dd>UUIDv7 uniquely identifying this Evidence Pack.</dd>
          <dt>vap_version (REQUIRED)</dt>
          <dd>VAP framework version (e.g., "1.3").</dd>
          <dt>profile (REQUIRED)</dt>
          <dd>Object containing profile id and version.</dd>
          <dt>conformance_level (REQUIRED)</dt>
          <dd>"Bronze", "Silver", or "Gold".</dd>
          <dt>generated_at (REQUIRED)</dt>
          <dd><xref target="RFC3339"/> timestamp of pack generation.</dd>
          <dt>time_range (REQUIRED)</dt>
          <dd>Object with start and end <xref target="RFC3339"/>
          timestamps.</dd>
          <dt>statistics (REQUIRED)</dt>
          <dd>Object containing total_events and events_by_type
          breakdown.</dd>
          <dt>completeness_verification (REQUIRED for Silver+)</dt>
          <dd>Object containing invariant_type, invariant_valid boolean,
          grace_period_seconds, and per-pipeline results.</dd>
          <dt>integrity (REQUIRED)</dt>
          <dd>Object containing checksums (SHA-256 per file),
          merkle_root, and pack_hash.</dd>
          <dt>external_anchors (REQUIRED for Silver+)</dt>
          <dd>Array of anchor records referencing this pack's time
          range.</dd>
          <dt>retention_status (REQUIRED for Silver+ in LAP)</dt>
          <dd>Object containing events_at_tier1, events_at_tier2,
          events_at_tier3 counts, and active_legal_holds count and
          identifiers.  See <xref target="lap-conformance-map"/>.</dd>
          <dt>enforcement_metrics (REQUIRED for Silver+ in LAP)</dt>
          <dd>Object containing enforcement_level, warnings_issued,
          gates_blocked, gates_overridden, and rapid_approvals count and
          percentage.  See <xref target="override-coverage"/>.</dd>
        </dl>
        <t>
          The manifest MAY include additional profile-specific fields as
          defined by the domain profile specification.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 10: Privacy-Preserving -->
    <!-- ============================== -->

    <section anchor="privacy-verification">
      <name>Privacy-Preserving Verification</name>
      <t>
        VAP enables verification of system integrity without disclosure of
        sensitive data.  This is achieved through:
      </t>
      <ol>
        <li>Hash-based attestation: Sensitive fields are stored as
        cryptographic hashes, enabling existence verification without
        content disclosure.</li>
        <li>Selective disclosure via Merkle proofs: Individual events can
        be proven to exist within an Evidence Pack without revealing
        other events.</li>
        <li>Per-tenant salting: Hash salts are unique per tenant to
        prevent cross-tenant correlation attacks.</li>
      </ol>
      <t>
        This mechanism is particularly critical for LAP, where attorney-
        client privilege prevents disclosure of consultation content while
        still requiring verifiable audit trails.
      </t>

      <section anchor="salt-management">
        <name>Salt Management Requirements</name>
        <t>
          Per-tenant salts MUST meet the following requirements:
        </t>
        <ul>
          <li>Minimum entropy: 256 bits (32 bytes), generated using a
          cryptographically secure random number generator.</li>
          <li>Uniqueness: Each tenant MUST have a distinct salt.
          Implementations MUST NOT share salts across tenants.</li>
          <li>Storage: Salts MUST be stored separately from the hashed
          data and protected with access controls equivalent to signing
          keys.</li>
          <li>Rotation: Salts SHOULD be rotated at least annually.
          Upon rotation, previously hashed values are NOT re-hashed;
          the provenance chain records the salt epoch in effect at
          each event's timestamp.</li>
        </ul>
        <t>
          For fields with low input entropy (such as bar registration
          numbers, which occupy a bounded numeric space), plain
          SHA-256(salt || value) is vulnerable to dictionary attack if
          the salt is compromised.  For such fields, implementations
          MUST use HMAC-SHA-256 with the tenant salt as key:
        </t>
        <artwork><![CDATA[
  BarNumberHash = "sha-256:" || hex(HMAC-SHA-256(tenant_salt,
                                                bar_number_bytes))
]]></artwork>
        <t>
          In the event of salt compromise, the implementation MUST:
        </t>
        <ol>
          <li>Generate a new salt immediately.</li>
          <li>Record a SALT_ROTATION event in the provenance chain.</li>
          <li>Assess and document the exposure window (events between
          last rotation and compromise discovery).</li>
          <li>Notify affected tenants per applicable data breach
          notification requirements.</li>
        </ol>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 11: Retention Framework -->
    <!-- ============================== -->

    <section anchor="retention-framework">
      <name>Retention Framework</name>
      <table anchor="retention-table">
        <name>Retention Requirements by Conformance Level</name>
        <thead>
          <tr>
            <th>Level</th>
            <th>Events</th>
            <th>Anchor Records</th>
            <th>Evidence Packs</th>
            <th>Keys</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Bronze</td>
            <td>6 months</td>
            <td>N/A</td>
            <td>On-demand</td>
            <td>1 year after last use</td>
          </tr>
          <tr>
            <td>Silver</td>
            <td>2 years</td>
            <td>5 years</td>
            <td>2 years</td>
            <td>3 years after last use</td>
          </tr>
          <tr>
            <td>Gold</td>
            <td>5 years</td>
            <td>10 years</td>
            <td>5 years</td>
            <td>7 years after last use</td>
          </tr>
        </tbody>
      </table>
      <t>
        Retention periods MUST be extended upon: regulatory investigation
        notification, legal hold orders, security or safety incidents, and
        third-party audit requests.
      </t>
      <t>
        Domain profiles MAY specify extended retention periods beyond the
        VAP baseline where domain-specific regulations require longer
        retention (see <xref target="lap-conformance-map"/> for LAP
        extensions).
      </t>

      <section anchor="gdpr-interaction">
        <name>Privacy Regulation Interaction</name>
        <t>
          For privacy regulation compliance (e.g., <xref target="GDPR"/>
          "right to be forgotten"), implementations at Silver level and
          above SHOULD support crypto-shredding: encrypting personal data
          with per-user keys and deleting those keys to render the data
          cryptographically unrecoverable while preserving hash chain
          integrity.
        </t>
        <t>
          VAP audit trails are designed to minimize tension with data
          protection regulations:
        </t>
        <ul>
          <li>Audit entries use hash-based references to personal data
          rather than storing personal data directly in the provenance
          chain.  This reduces the personal data footprint within the
          immutable hash chain.</li>
          <li>Audit trails constitute a separate processing purpose with
          an independent legal basis.  Under <xref target="GDPR"/>
          Article 6(1)(c) (legal obligation) or Article 6(1)(f)
          (legitimate interests in maintaining system integrity and
          accountability), provenance data may be retained independently
          of the subject's consent.</li>
          <li><xref target="GDPR"/> Article 17(3) provides exceptions to
          the right of erasure for legal claims (subparagraph (e)) and
          legal obligations (subparagraph (b)).  Audit trail records
          documenting AI system compliance may fall within these
          exceptions, subject to jurisdiction-specific determination.</li>
        </ul>
        <t>
          NOTE: The applicability of specific GDPR exceptions to VAP audit
          trails is a legal determination outside the scope of this
          specification.  Implementations SHOULD consult legal counsel
          regarding data protection compliance in their deployment
          jurisdictions.
        </t>
      </section>

      <section anchor="content-retention-tiers">
        <name>Content Retention Tiers</name>
        <t>
          Implementations face a tension between privacy-preserving
          verification (which favors early deletion of sensitive content)
          and legal discovery obligations (which may require content
          disclosure).  To address this, VAP defines three content
          retention tiers that domain profiles MAY adopt:
        </t>
        <dl>
          <dt>Tier 1 - Full Content Retention</dt>
          <dd>All event content (inputs, outputs, documents) is retained
          in encrypted form alongside provenance hashes.  Duration:
          configurable per tenant.  Encryption MUST use AES-256-GCM
          or ChaCha20-Poly1305 with per-tenant keys.</dd>

          <dt>Tier 2 - Recoverable Hash Retention</dt>
          <dd>Original content is deleted but a content recovery key is
          escrowed with a designated custodian.  The escrowed key
          enables re-association of content from encrypted backups if
          a legal hold or disclosure order is triggered.  Duration:
          from end of Tier 1 to the applicable retention period
          endpoint.  See <xref target="escrow-requirements"/> for
          custodian requirements.</dd>

          <dt>Tier 3 - Hash-Only Retention</dt>
          <dd>Only provenance hashes remain.  Content is
          cryptographically unrecoverable (crypto-shredding complete).
          Duration: remainder of the retention period.</dd>
        </dl>
        <t>
          Transition from Tier 1 to Tier 2 MUST NOT occur while any Legal
          Hold is active for the affected events.  Transition from Tier 2
          to Tier 3 MUST NOT occur while any Legal Hold is active.
        </t>
        <t>
          Implementations MUST log all tier transitions as
          RETENTION_TIER_CHANGE events in the provenance chain.
        </t>
      </section>

      <section anchor="escrow-requirements">
        <name>Escrow Custodian Requirements</name>
        <t>
          Tier 2 escrow custodians MUST satisfy the following:
        </t>
        <ul>
          <li>The custodian MUST be organizationally independent from the
          VAP implementation operator (i.e., the entity that generates
          and signs provenance events).</li>
          <li>Key escrow operations (deposit, retrieval, destruction)
          MUST each generate a provenance event in the custodian's own
          audit log.</li>
          <li>Escrow keys MUST be encrypted at rest using the custodian's
          own key management infrastructure.</li>
          <li>Key granularity: implementations SHOULD use per-case or
          per-tenant escrow keys rather than a single global key, to
          limit the blast radius of any single key compromise.</li>
          <li>Recovery execution MUST require dual authorization: one
          from the requesting party (e.g., the tenant attorney) and
          one from the custodian.</li>
        </ul>
        <t>
          A CONTENT_RECOVERY_EXECUTED event MUST be logged upon successful
          recovery, including: hold_id, recovered_event_range,
          recovered_by (actor hash), custodian_id, and
          court_order_reference_hash (if applicable).
        </t>
      </section>

      <section anchor="legal-hold">
        <name>Legal Hold Protocol</name>
        <t>
          A Legal Hold freezes the current retention tier for all events
          within scope, preventing content deletion or tier transition.
        </t>
        <t>Legal Hold triggers:</t>
        <ol>
          <li>Court Order: Judicial order for evidence preservation.</li>
          <li>Regulatory Investigation: Government regulatory action.</li>
          <li>Litigation Hold: Reasonably anticipated litigation.</li>
          <li>Professional Body Inquiry: Investigation by a professional
          regulatory body (e.g., bar association).</li>
          <li>Disciplinary Proceedings: Professional disciplinary
          matters.</li>
        </ol>
        <t>When a Legal Hold is activated:</t>
        <ol>
          <li>All events within scope MUST be frozen at their current
          retention tier (Tier 1 or Tier 2).</li>
          <li>A LEGAL_HOLD_ACTIVATED event MUST be recorded in the
          provenance chain, including: hold_id (UUIDv7), hold_trigger
          (enumerated trigger type), scope (event time range or case
          identifiers), activated_by (actor identity hash), and
          activation_timestamp (<xref target="RFC3339"/>).</li>
          <li>Tier transitions for in-scope events MUST be blocked
          until a corresponding LEGAL_HOLD_RELEASED event is
          recorded.</li>
          <li>The Legal Hold itself MUST be included in Evidence Packs
          generated during the hold period.</li>
        </ol>
        <t>
          Legal Hold activation MUST be available at Bronze level.
          Automated Legal Hold detection (e.g., triggered by court
          filing notifications or regulatory inquiry receipt) is
          RECOMMENDED at Gold level.
        </t>
      </section>

      <section anchor="judicial-disclosure">
        <name>Judicial Disclosure Response</name>
        <t>
          When a court or regulatory body orders full content disclosure
          for specific events, the response depends on the current
          retention tier:
        </t>
        <dl>
          <dt>Events at Tier 1</dt>
          <dd>Content is available in encrypted form and can be disclosed
          subject to appropriate access controls and professional
          review.</dd>

          <dt>Events at Tier 2</dt>
          <dd>Content recovery key is retrieved from escrow per
          <xref target="escrow-requirements"/>.  Content is
          reconstructed from encrypted backups.  A
          CONTENT_RECOVERY_EXECUTED event MUST be logged in the
          provenance chain.</dd>

          <dt>Events at Tier 3</dt>
          <dd><t>Content is cryptographically unrecoverable.  The
          implementation MUST provide:</t>
          <ol>
            <li>Hash chain integrity proof demonstrating unbroken
            provenance.</li>
            <li>Tier transition log showing when and why content was
            deleted.</li>
            <li>Certification that no Legal Hold was active at the
            time of deletion.</li>
            <li>Statistical metadata (token counts, timestamps, event
            types) that remains available.</li>
          </ol></dd>
        </dl>
        <t>
          This three-tier approach enables implementations to demonstrate
          to judicial authorities that content deletion followed a
          documented, auditable process rather than constituting potential
          evidence spoliation.
        </t>
        <t>
          NOTE: The adequacy of hash-only evidence for specific judicial
          proceedings is a jurisdiction-specific legal determination
          outside the scope of this specification.  This framework
          provides the maximum available technical evidence in each
          retention tier.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 12: Third-Party Verification -->
    <!-- ============================== -->

    <section anchor="verification-protocol">
      <name>Third-Party Verification Protocol</name>
      <t>
        Verification is available at three access levels:
      </t>
      <dl>
        <dt>Public</dt>
        <dd>Access to Merkle roots only.  Verifies anchor existence.</dd>
        <dt>Auditor</dt>
        <dd>Access to Evidence Packs.  Full chain and completeness
        verification.</dd>
        <dt>Regulator</dt>
        <dd>Real-time API access (Gold level).  Live monitoring
        capability.</dd>
      </dl>
      <t>Verification steps:</t>
      <ol>
        <li>Anchor Verification: Confirm Merkle root in external
        timestamping service or transparency log.</li>
        <li>Chain Verification: Validate hash chain integrity from
        genesis to latest event.</li>
        <li>Signature Verification: Authenticate all events with
        public keys.</li>
        <li>Completeness Verification: Check invariant for the time
        period.</li>
        <li>Selective Query (optional): Verify specific events via
        Merkle proofs.</li>
      </ol>

      <section anchor="verification-api">
        <name>Minimum Verification API</name>
        <t>
          Silver and Gold level implementations that expose a third-party
          verification endpoint MUST support at minimum the following
          HTTP endpoints.  All responses MUST use Content-Type
          application/json and MUST include appropriate authentication
          (e.g., Bearer token, mutual TLS).
        </t>
        <dl>
          <dt>GET /vap/v1/anchors?from={RFC3339}&amp;to={RFC3339}</dt>
          <dd>Returns anchor records for the specified time range.
          Response: JSON array of Anchor Record objects per
          <xref target="anchor-record"/>.  REQUIRED for Silver+.</dd>

          <dt>GET /vap/v1/chain/verify?from={RFC3339}&amp;to={RFC3339}</dt>
          <dd>Performs and returns chain integrity verification results
          for the specified time range.  Response: JSON object with
          fields: chain_valid (boolean), events_verified (integer),
          first_event_id, last_event_id, errors (array of
          {event_id, error_type, detail}).  REQUIRED for Silver+.</dd>

          <dt>GET /vap/v1/completeness?from={RFC3339}&amp;to={RFC3339}</dt>
          <dd>Returns completeness invariant verification for the time
          range.  Response: JSON object with fields: invariant_valid
          (boolean), grace_period_seconds (integer), pipelines (array
          of {pipeline_id, attempts, outcomes, valid}).
          REQUIRED for Silver+.</dd>

          <dt>GET /vap/v1/events/{event_id}/proof</dt>
          <dd>Returns Merkle inclusion proof for a specific event.
          Response: JSON object with fields: event_id, anchor_id,
          merkle_root, inclusion_proof (array of Base64url sibling
          hashes), leaf_index, tree_size.
          REQUIRED for Silver+.</dd>

          <dt>GET /vap/v1/events/stream (WebSocket or SSE)</dt>
          <dd>Real-time event stream for live monitoring.
          REQUIRED for Gold only.</dd>
        </dl>
        <t>
          Error responses MUST use standard HTTP status codes (400 for
          malformed requests, 401/403 for authentication/authorization
          failures, 404 for unknown resources, 500 for server errors)
          with a JSON body containing "error" (string code) and "detail"
          (human-readable description).
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Part II: LAP                   -->
    <!-- ============================== -->

    <section anchor="lap-overview">
      <name>Legal AI Profile (LAP) Overview</name>
      <t>
        The Legal AI Profile (LAP) is a VAP domain profile for judicial AI
        and LegalTech systems.  LAP addresses unique challenges in the
        legal domain:
      </t>
      <dl>
        <dt>Unauthorized Practice of Law Risk</dt>
        <dd>Proving that AI does not independently practice law, through
        HUMAN_OVERRIDE events documenting attorney oversight.</dd>

        <dt>Hallucination</dt>
        <dd>Recording fact-check provenance through LEGAL_FACTCHECK
        events with citation chain verification.</dd>

        <dt>Selective Logging</dt>
        <dd>Preventing omission of inconvenient AI outputs through
        three-pipeline Completeness Invariant.</dd>

        <dt>Attorney-Client Privilege</dt>
        <dd>Maintaining confidentiality through privacy-preserving
        fields (prompt hashes instead of raw content) and tiered
        content retention with legal hold support.</dd>

        <dt>Accountability Ambiguity</dt>
        <dd>Recording "who, when, and on what basis" through the
        Accountability Layer and graduated override enforcement.</dd>
      </dl>

      <section anchor="lap-registration">
        <name>Profile Registration</name>
        <table anchor="lap-reg-table">
          <name>LAP Profile Registration</name>
          <thead>
            <tr><th>Field</th><th>Value</th></tr>
          </thead>
          <tbody>
            <tr><td>Profile ID</td><td>LAP</td></tr>
            <tr><td>Full Name</td><td>Legal AI Profile</td></tr>
            <tr><td>Domain</td><td>Legal AI / LegalTech</td></tr>
            <tr><td>Regulatory Scope</td>
            <td>Attorney regulation, AI governance (informative)</td></tr>
            <tr><td>Time Precision</td><td>Second</td></tr>
            <tr><td>Profile Version</td><td>0.4.0</td></tr>
          </tbody>
        </table>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 14: LAP Event Types    -->
    <!-- ============================== -->

    <section anchor="lap-events">
      <name>LAP Event Type Taxonomy</name>
      <t>
        LAP defines three functional pipelines, one cross-cutting control
        event type, and administrative event types for retention and
        enforcement management:
      </t>

      <section anchor="pipeline-query">
        <name>Pipeline 1: Legal Query</name>
        <t>AI-powered legal consultation:</t>
        <ul>
          <li>LEGAL_QUERY_ATTEMPT: Question submission to AI</li>
          <li>LEGAL_QUERY_RESPONSE: AI response generated successfully</li>
          <li>LEGAL_QUERY_DENY: Response refused (content filter,
          unauthorized role)</li>
          <li>LEGAL_QUERY_ERROR: System error (API failure, timeout)</li>
        </ul>
      </section>

      <section anchor="pipeline-doc">
        <name>Pipeline 2: Document Generation</name>
        <t>AI-assisted legal document drafting:</t>
        <ul>
          <li>LEGAL_DOC_ATTEMPT: Document generation request</li>
          <li>LEGAL_DOC_RESPONSE: Document generated successfully</li>
          <li>LEGAL_DOC_DENY: Generation refused (insufficient consent,
          unauthorized)</li>
          <li>LEGAL_DOC_ERROR: System error (API failure, parse error)</li>
        </ul>
      </section>

      <section anchor="pipeline-factcheck">
        <name>Pipeline 3: Fact Check</name>
        <t>AI-powered legal fact verification:</t>
        <ul>
          <li>LEGAL_FACTCHECK_ATTEMPT: Fact-check request</li>
          <li>LEGAL_FACTCHECK_RESPONSE: Fact-check completed</li>
          <li>LEGAL_FACTCHECK_DENY: Fact-check refused (OPTIONAL)</li>
          <li>LEGAL_FACTCHECK_ERROR: System error</li>
        </ul>
        <t>
          Implementations MAY define LEGAL_FACTCHECK_DENY for cases where
          a fact-check request is refused due to rate limiting,
          insufficient permissions, or consent constraints.  The
          deny_reason field SHOULD distinguish these from system errors.
        </t>
        <t>
          If an implementation does not support LEGAL_FACTCHECK_DENY,
          refusal conditions MUST be recorded as LEGAL_FACTCHECK_ERROR
          with a deny_equivalent indicator set to true in the error
          detail, ensuring the Completeness Invariant is maintained.
        </t>
      </section>

      <section anchor="human-override-events">
        <name>Cross-Cutting: Human Override</name>
        <t>
          HUMAN_OVERRIDE events record an attorney's review of any AI
          output:
        </t>
        <ul>
          <li>APPROVE: Attorney confirms AI output without
          modification</li>
          <li>MODIFY: Attorney edits AI output (modification hash
          recorded)</li>
          <li>REJECT: Attorney rejects AI output entirely</li>
        </ul>
        <t>
          HUMAN_OVERRIDE events MUST set header.causal_link.target_event_id
          to the target outcome event's identifier and
          header.causal_link.link_type to "OVERRIDE_OF".  The event MUST
          also include the attorney's identity (bar number hash), override
          type, and optional modification details in the domain_payload.
        </t>
      </section>

      <section anchor="retention-enforcement-events">
        <name>Retention and Enforcement Events</name>
        <t>
          LAP defines additional event types for retention management and
          override enforcement:
        </t>
        <dl>
          <dt>RETENTION_TIER_CHANGE</dt>
          <dd>Records transitions between content retention tiers.
          Fields: previous_tier, new_tier, affected_event_range,
          reason, authorized_by.</dd>

          <dt>LEGAL_HOLD_ACTIVATED</dt>
          <dd>Records activation of a legal hold.  Fields: hold_id,
          hold_trigger, scope, activated_by.</dd>

          <dt>LEGAL_HOLD_RELEASED</dt>
          <dd>Records release of a legal hold.  Fields: hold_id,
          released_by, release_reason.</dd>

          <dt>CONTENT_RECOVERY_EXECUTED</dt>
          <dd>Records recovery of content from Tier 2 escrow.  Fields:
          hold_id, recovered_event_range, recovered_by, custodian_id,
          court_order_reference_hash.</dd>

          <dt>REVIEW_WARNING_ACKNOWLEDGED</dt>
          <dd>Records that an attorney acknowledged an unreviewed-output
          warning before proceeding with export.  Fields:
          target_event_id, warning_type, acknowledged_by.</dd>

          <dt>REVIEW_GATE_BLOCKED</dt>
          <dd>Records that an export attempt was blocked due to missing
          HUMAN_OVERRIDE.  Fields: target_event_id, document_type,
          blocked_action.</dd>

          <dt>REVIEW_GATE_OVERRIDE</dt>
          <dd>Records that an attorney bypassed a review gate with
          explicit justification.  Fields: target_event_id,
          override_reason, overridden_by.</dd>

          <dt>SALT_ROTATION</dt>
          <dd>Records rotation of tenant privacy salt.  Fields:
          previous_salt_epoch, new_salt_epoch, rotated_by,
          reason.</dd>
        </dl>
        <t>
          These events are NOT part of the three-pipeline Completeness
          Invariant (they are control and administrative events, similar
          to HUMAN_OVERRIDE).  However, they MUST be included in the hash
          chain and signed.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 15: LAP Completeness   -->
    <!-- ============================== -->

    <section anchor="lap-completeness">
      <name>LAP Completeness Invariant</name>
      <t>
        LAP applies the Completeness Invariant independently to all three
        pipelines:
      </t>
      <artwork><![CDATA[
  For each pipeline P in {QUERY, DOC, FACTCHECK}:

    Count(LEGAL_{P}_ATTEMPT)
    = Count(LEGAL_{P}_RESPONSE)
    + Count(LEGAL_{P}_DENY)    [if supported]
    + Count(LEGAL_{P}_ERROR)

  Expanded:

    LEGAL_QUERY_ATTEMPT = LEGAL_QUERY_RESPONSE
                        + LEGAL_QUERY_DENY
                        + LEGAL_QUERY_ERROR

    LEGAL_DOC_ATTEMPT   = LEGAL_DOC_RESPONSE
                        + LEGAL_DOC_DENY
                        + LEGAL_DOC_ERROR

    LEGAL_FACTCHECK_ATTEMPT = LEGAL_FACTCHECK_RESPONSE
                            + LEGAL_FACTCHECK_DENY  [if supported]
                            + LEGAL_FACTCHECK_ERROR
]]></artwork>
      <t>
        For implementations that do not support LEGAL_FACTCHECK_DENY, the
        invariant simplifies to ATTEMPT = RESPONSE + ERROR for Pipeline 3.
        Refusal conditions recorded as ERROR with deny_equivalent MUST be
        counted toward the invariant.
      </t>
      <t>
        Each outcome event MUST set header.causal_link.target_event_id to
        the originating attempt event's event_id and
        header.causal_link.link_type to "OUTCOME_OF", ensuring referential
        integrity can be verified independently of event ordering.
      </t>
    </section>

    <!-- ============================== -->
    <!-- Section 16: Override Coverage  -->
    <!-- ============================== -->

    <section anchor="override-coverage">
      <name>Override Coverage and Enforcement</name>

      <section anchor="override-metric">
        <name>Override Coverage Metric</name>
        <t>
          HUMAN_OVERRIDE events are outside the Completeness Invariant but
          LAP defines Override Coverage as a critical operational metric:
        </t>
        <artwork><![CDATA[
  Override Coverage =
    Count(distinct target_event_id with at least one
          HUMAN_OVERRIDE where link_type = "OVERRIDE_OF") /
    Count(LEGAL_*_RESPONSE)
]]></artwork>
        <t>
          This metric quantifies the degree to which human professionals
          review AI outputs.  In jurisdictions where regulations require
          that a licensed professional personally scrutinize AI-generated
          work products, this metric provides measurable evidence of
          compliance.
        </t>
        <t>
          Design notes on the denominator:
        </t>
        <ul>
          <li>The numerator counts distinct target events (not raw
          HUMAN_OVERRIDE count) to prevent a single output reviewed
          multiple times from inflating coverage above 100%.</li>
          <li>DENY events are excluded from the denominator because a
          denial represents the AI system refusing to produce output.
          There is no AI-generated work product for a professional to
          review.  If a jurisdiction requires that denial decisions
          themselves be reviewed, the implementation SHOULD track this
          as a separate "Denial Review Coverage" metric.</li>
          <li>ERROR events are excluded from the denominator because
          they do not produce an output suitable for professional
          approval or rejection.  Completeness of error handling is
          evaluated separately via the per-pipeline invariant.</li>
        </ul>
        <table anchor="coverage-assessment">
          <name>Override Coverage Assessment</name>
          <thead>
            <tr>
              <th>Coverage</th>
              <th>Assessment</th>
              <th>Operational Implication</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>100%</td>
              <td>Ideal</td>
              <td>Full professional oversight of all AI outputs</td>
            </tr>
            <tr>
              <td>70-99%</td>
              <td>Good</td>
              <td>Majority reviewed; low-risk outputs may be excluded</td>
            </tr>
            <tr>
              <td>30-69%</td>
              <td>Warning</td>
              <td>Insufficient review; operational improvement
              recommended</td>
            </tr>
            <tr>
              <td>&lt;30%</td>
              <td>Critical</td>
              <td>Professional oversight requirements likely unmet</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="enforcement-levels">
        <name>Enforcement Levels</name>
        <t>
          Override Coverage tracking alone provides post-hoc
          accountability but does not prevent the use of unreviewed AI
          outputs in professional practice.  LAP defines four enforcement
          levels to address this structural limitation:
        </t>
        <dl>
          <dt>Level 0 - Metric Only</dt>
          <dd>Override Coverage is computed and reported.  No enforcement
          action is taken.  The system relies on the professional's
          ethical obligations.</dd>

          <dt>Level 1 - Warn</dt>
          <dd><t>When a user attempts to export, copy, or transmit an
          AI-generated output that has no corresponding HUMAN_OVERRIDE
          event, the system MUST display a prominent warning indicating
          that the output has not been professionally reviewed.</t>
          <t>The warning MUST: (a) be displayed in-context at the point
          of export or copy action; (b) require explicit acknowledgment
          before proceeding; and (c) record a REVIEW_WARNING_ACKNOWLEDGED
          event in the provenance chain.</t></dd>

          <dt>Level 2 - Gate</dt>
          <dd><t>For designated high-risk document types, the system MUST
          require a HUMAN_OVERRIDE event before permitting export or
          transmission.</t>
          <t>The gate MUST: (a) block export, copy, and transmit actions
          until a HUMAN_OVERRIDE (APPROVE or MODIFY) event exists for
          the target output; (b) record a REVIEW_GATE_BLOCKED event when
          an export attempt is blocked; and (c) allow the gate to be
          bypassed ONLY by a user with "attorney" role AND explicit
          override, recorded as a REVIEW_GATE_OVERRIDE event with a
          mandatory reason field.</t>
          <t>Document types subject to gating SHOULD be configurable per
          tenant.  The default gated types are: court filings, settlement
          and mediation documents, client-facing legal opinions, and
          contracts and agreements.</t></dd>

          <dt>Level 3 - Strict</dt>
          <dd>ALL AI-generated outputs require HUMAN_OVERRIDE before any
          export action.  No bypass mechanism.  This level is intended
          for maximum-compliance environments but is not mandated by
          this specification due to potential impact on workflow
          efficiency.</dd>
        </dl>
      </section>

      <section anchor="enforcement-mapping">
        <name>Enforcement Level Mapping</name>
        <table anchor="enforcement-table">
          <name>Enforcement Level by Conformance Level</name>
          <thead>
            <tr>
              <th>Enforcement</th>
              <th>Bronze</th>
              <th>Silver</th>
              <th>Gold</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Level 0 (Metric Only)</td>
              <td>Default</td>
              <td>Minimum</td>
              <td>N/A</td>
            </tr>
            <tr>
              <td>Level 1 (Warn)</td>
              <td>OPTIONAL</td>
              <td>REQUIRED</td>
              <td>REQUIRED</td>
            </tr>
            <tr>
              <td>Level 2 (Gate)</td>
              <td>N/A</td>
              <td>RECOMMENDED</td>
              <td>RECOMMENDED</td>
            </tr>
            <tr>
              <td>Level 3 (Strict)</td>
              <td>N/A</td>
              <td>OPTIONAL</td>
              <td>OPTIONAL</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="override-latency">
        <name>Override Latency Threshold</name>
        <t>
          To distinguish genuine professional review from perfunctory
          approval, LAP defines an Override Latency metric:
        </t>
        <artwork><![CDATA[
  Override Latency = HUMAN_OVERRIDE.timestamp
                   - target_output_event.timestamp
]]></artwork>
        <t>
          Implementations at Silver level and above SHOULD flag
          HUMAN_OVERRIDE events with Override Latency below a
          configurable threshold (RECOMMENDED default: 10 seconds) as
          "rapid approval" in the provenance chain.
        </t>
        <t>
          This does NOT block the override but records a
          RAPID_APPROVAL_FLAG in the event metadata, which: (a) is
          visible in Evidence Packs and audit reports; (b) may indicate
          insufficient review depth; and (c) can trigger alerts at Gold
          level when rapid approvals exceed a configurable percentage
          (RECOMMENDED: 20%).
        </t>
      </section>

      <section anchor="structural-limitation">
        <name>Structural Limitation Acknowledgment</name>
        <t>
          This specification acknowledges that no technical mechanism can
          fully guarantee the quality or depth of human professional
          review.  A licensed attorney may approve an AI output after
          genuine review or after cursory inspection; the system cannot
          distinguish between these without introducing unacceptable
          surveillance of professional judgment.
        </t>
        <t>
          The enforcement framework therefore aims to: (a) create friction
          against entirely unreviewed AI output usage; (b) provide
          auditable evidence of review or lack thereof; (c) enable
          risk-proportionate controls (stronger for high-risk document
          types); and (d) preserve professional autonomy while recording
          accountability metadata.
        </t>
        <t>
          The combination of enforcement levels, latency monitoring, and
          comprehensive provenance logging shifts the accountability model
          from "trust alone" to "trust with verification infrastructure,"
          acknowledging that while absolute prevention is impossible, the
          cost and detectability of non-compliance can be substantially
          increased.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 17: LAP Privacy Fields -->
    <!-- ============================== -->

    <section anchor="lap-privacy-fields">
      <name>LAP Privacy-Preserving Fields</name>
      <t>
        Legal AI handles extremely sensitive data protected by professional
        privilege.  LAP extends VAP's privacy-preserving verification with
        the following hashed fields:
      </t>
      <table anchor="privacy-fields-table">
        <name>LAP Privacy-Preserving Fields</name>
        <thead>
          <tr>
            <th>Original Data</th>
            <th>Hash Field</th>
            <th>Hash Method</th>
            <th>Sensitive Content</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>User query text</td>
            <td>PromptHash</td>
            <td>SHA-256(salt || content)</td>
            <td>Legal consultation content (privileged)</td>
          </tr>
          <tr>
            <td>AI response text</td>
            <td>ResponseHash</td>
            <td>SHA-256(salt || content)</td>
            <td>AI-generated legal advice</td>
          </tr>
          <tr>
            <td>Document output</td>
            <td>OutputHash</td>
            <td>SHA-256(salt || content)</td>
            <td>Generated legal documents</td>
          </tr>
          <tr>
            <td>Case number</td>
            <td>CaseNumberHash</td>
            <td>HMAC-SHA-256(salt, value)</td>
            <td>Case identifier (high specificity)</td>
          </tr>
          <tr>
            <td>Bar number</td>
            <td>BarNumberHash</td>
            <td>HMAC-SHA-256(salt, value)</td>
            <td>Professional registration number</td>
          </tr>
          <tr>
            <td>Party names</td>
            <td>PartyHash</td>
            <td>HMAC-SHA-256(salt, value)</td>
            <td>Personal information of parties</td>
          </tr>
          <tr>
            <td>Modification detail</td>
            <td>ModificationHash</td>
            <td>SHA-256(salt || content)</td>
            <td>Professional's corrections</td>
          </tr>
          <tr>
            <td>Factcheck content</td>
            <td>TargetContentHash</td>
            <td>SHA-256(salt || content)</td>
            <td>Content under verification</td>
          </tr>
        </tbody>
      </table>
      <t>
        Fields with low input entropy (CaseNumberHash, BarNumberHash,
        PartyHash) MUST use HMAC-SHA-256 with the tenant salt as key,
        per <xref target="salt-management"/>, to resist dictionary
        attacks.  Fields with high input entropy (content hashes) MAY
        use simple salted SHA-256.
      </t>
      <t>
        Hash computation uses per-tenant salts as specified in
        <xref target="salt-management"/>.  Third-party verifiers can
        confirm event existence and chain integrity without accessing
        privileged content.
      </t>
      <t>
        The availability of original content corresponding to these
        hashes depends on the current Content Retention Tier
        (<xref target="content-retention-tiers"/>).  At Tier 1, original
        content is available in encrypted form.  At Tier 2, it is
        recoverable via escrowed keys.  At Tier 3, only hashes remain.
      </t>
    </section>

    <!-- ============================== -->
    <!-- Section 18: LAP Conformance    -->
    <!-- ============================== -->

    <section anchor="lap-conformance-map">
      <name>LAP Conformance Level Mapping</name>
      <table anchor="lap-conformance-table">
        <name>LAP Conformance Requirements</name>
        <thead>
          <tr>
            <th>Requirement</th>
            <th>Bronze</th>
            <th>Silver</th>
            <th>Gold</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>Hash Chain</td><td>Yes</td><td>Yes</td><td>Yes</td></tr>
          <tr><td>Digital Signature</td><td>Yes</td><td>Yes</td><td>Yes</td></tr>
          <tr><td>External Anchoring</td><td>No</td><td>Daily</td><td>Hourly</td></tr>
          <tr><td>Completeness Invariant</td><td>No</td><td>3 Pipelines</td><td>3 Pipelines</td></tr>
          <tr><td>Override Coverage Tracking</td><td>No</td><td>Yes</td><td>Yes (with alerts)</td></tr>
          <tr><td>Override Enforcement Level</td><td>Level 0</td><td>Level 1 (REQUIRED)</td><td>Level 1 (REQUIRED)</td></tr>
          <tr><td>Evidence Pack</td><td>No</td><td>Yes</td><td>Yes</td></tr>
          <tr><td>Privacy Hashing</td><td>No</td><td>Yes</td><td>Yes</td></tr>
          <tr><td>Content Retention Tiers</td><td>Tier 3 only</td><td>Tier 2 + Tier 3</td><td>All 3 Tiers</td></tr>
          <tr><td>Legal Hold Protocol</td><td>Yes (manual)</td><td>Yes (manual)</td><td>Yes (automated detection)</td></tr>
          <tr><td>Content Recovery Escrow</td><td>No</td><td>RECOMMENDED</td><td>REQUIRED</td></tr>
          <tr><td>HSM</td><td>No</td><td>No</td><td>Yes (<xref target="FIPS140-3"/>)</td></tr>
          <tr><td>Retention</td><td>6 months</td><td>3 years</td><td>10 years</td></tr>
          <tr><td>Real-time Audit API</td><td>No</td><td>No</td><td>Yes</td></tr>
        </tbody>
      </table>
    </section>

    <!-- ============================== -->
    <!-- Section 19: Regulatory Alignment -->
    <!-- ============================== -->

    <section anchor="regulatory-alignment">
      <name>LAP Regulatory Alignment (Informative)</name>

      <section anchor="attorney-regulation">
        <name>Attorney Professional Regulation</name>
        <t>
          In many jurisdictions, only licensed attorneys may provide legal
          advice.  AI systems that generate legal analysis or draft legal
          documents operate in a regulatory space where the boundary
          between "legal information" and "legal advice" determines
          whether unauthorized practice of law has occurred.
        </t>
        <t>LAP provenance supports regulatory compliance through:</t>
        <ul>
          <li>Actor.role and BarNumberHash: supports verification that
          the user is a licensed attorney.</li>
          <li>HUMAN_OVERRIDE (APPROVE/MODIFY): supports demonstrating
          attorney scrutiny.</li>
          <li>ModificationHash: supports evidence of attorney
          modifications.</li>
          <li>Enforcement Level 1/2: provides system-level friction
          against use of unreviewed outputs.</li>
          <li>Override Latency monitoring: flags potentially insufficient
          review.</li>
        </ul>
        <t>
          In Japan, the <xref target="JAPAN-ATTORNEY-ACT"/> Article 72
          prohibits unauthorized practice of law.  The
          <xref target="MOJ-GUIDELINE"/> (August 2023) clarifies that
          AI contract review services may constitute unauthorized practice
          when crossing into dispute-related legal advice.  The
          <xref target="JFBA-AI-GUIDANCE"/> (September 2025) requires
          that responsibility for legal advice remains with the attorney
          and that AI output cannot reach clients without attorney review.
          LAP's Human Override Coverage metric provides verifiable evidence
          that these requirements are met.
        </t>
        <t>
          Japan's AI Promotion Act <xref target="JAPAN-AI-ACT"/>
          (enacted May 2025, effective September 2025) establishes
          transparency as a statutory principle.  While no specific audit
          trail requirements are imposed, the Act's agile governance
          model relies on private-sector technical standards for
          implementation, creating potential demand for frameworks like
          VAP.
        </t>
      </section>

      <section anchor="high-risk-governance">
        <name>High-Risk AI System Governance</name>
        <t>
          Legal AI systems may be classified as high-risk under AI
          governance frameworks such as the <xref target="EU-AI-ACT"/>,
          particularly under Annex III Section 8(a) which explicitly
          covers AI systems intended to "assist a judicial authority in
          researching and interpreting facts and the law."
        </t>
        <t>
          LAP Silver level and above provides audit trail capabilities
          that can help satisfy the following <xref target="EU-AI-ACT"/>
          requirements:
        </t>
        <ul>
          <li>Article 12 (Automatic event logging): Hash chain and
          event logging provide automatic recording over the system
          lifetime.</li>
          <li>Article 14 (Human oversight): HUMAN_OVERRIDE events
          document human ability to override and reverse AI outputs.</li>
          <li>Article 18 (10-year documentation retention): Gold level
          supports 10-year retention.</li>
          <li>Article 19 (Minimum 6-month log retention): All conformance
          levels meet this minimum.</li>
          <li>Tiered content retention with legal hold supports discovery
          obligations under Article 12 and national procedural law.</li>
        </ul>
        <t>
          NOTE: Enforcement timelines for Annex III high-risk AI
          obligations are subject to revision.  The core technical
          requirements under Articles 12, 14, 18, and 19 remain stable
          regardless of enforcement timing.  The degree to which LAP
          capabilities satisfy specific regulatory requirements should be
          evaluated on a per-jurisdiction basis.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 20: Security Considerations -->
    <!-- ============================== -->

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>
        This section describes the threat model and security considerations
        for VAP-LAP implementations, following the guidance in
        <xref target="RFC3552"/>.
      </t>

      <section anchor="threat-model">
        <name>Threat Model</name>
        <t>
          VAP assumes the following attacker capabilities and trust
          assumptions:
        </t>
        <ul>
          <li>Attacker capabilities: An adversary may have read access to
          the event store, network access to observe event traffic, and
          in some scenarios write access to event storage (insider
          threat).  The adversary's goal is to forge, suppress, reorder,
          or selectively disclose provenance events.</li>
          <li>Trust assumptions: The signing key holder is trusted to
          sign only genuine events.  The external anchoring service is
          trusted to provide accurate timestamps and append-only
          guarantees.  Verifiers are trusted to correctly execute the
          verification algorithm.</li>
        </ul>
      </section>

      <section anchor="threat-hash-chain">
        <name>Hash Chain Manipulation</name>
        <t>
          An adversary with write access could attempt to modify past
          events, insert fabricated events, or delete events.  The hash
          chain provides integrity: any modification to a past event
          changes its EventHash, breaking the chain at that point.
          External anchoring at Silver level and above makes post-hoc
          modification detectable by comparing the stored Merkle root
          against the independently timestamped root.  Implementations
          SHOULD use Merkle consistency proofs (per
          <xref target="RFC9162"/> Section 2.1.4) to detect log forking.
        </t>
      </section>

      <section anchor="threat-timestamp">
        <name>Timestamp Manipulation</name>
        <t>
          Timestamp rollback or clock skew can cause false completeness
          verification failures and undermine event ordering guarantees.
          Implementations SHOULD use monotonic time sources and SHOULD
          cross-validate local timestamps against external anchoring
          timestamps.  External anchoring at Silver level and above
          provides an independent time reference.  Implementations MUST
          reject events with timestamps that differ from the external
          anchor timestamp by more than a configurable bound
          (RECOMMENDED: 300 seconds for batch anchoring, 60 seconds
          for real-time anchoring).
        </t>
      </section>

      <section anchor="threat-insider">
        <name>Insider Threats</name>
        <t>
          An authorized operator could forge events, suppress events
          before they are anchored, or create fabricated ERROR events to
          satisfy the Completeness Invariant while hiding actual outcomes.
          Mitigations include:
        </t>
        <ul>
          <li>External anchoring makes suppression detectable after
          anchoring.</li>
          <li>Gold level implementations SHOULD require multi-party
          signatures for administrative events (Legal Hold, tier
          changes).</li>
          <li>Separation of duties: the event signer and the external
          anchor submitter SHOULD be different principals where
          operationally feasible.</li>
          <li>Completeness Invariant cross-validation against
          application-layer logs (e.g., HTTP request logs) can detect
          fabricated events at audit time.</li>
        </ul>
      </section>

      <section anchor="threat-key-compromise">
        <name>Key Compromise</name>
        <t>
          Compromise of signing keys allows event forgery.  Bronze
          implementations SHOULD rotate keys annually.  Silver MUST
          rotate semi-annually.  Gold MUST use HSM storage (<xref target="FIPS140-3"/>)
          and quarterly rotation.
        </t>
        <t>
          Upon key compromise detection, the implementation MUST:
        </t>
        <ol>
          <li>Immediately revoke the compromised key.</li>
          <li>Generate a new signing key pair.</li>
          <li>Record a KEY_ROTATION event signed by the new key,
          referencing the compromised key identifier.</li>
          <li>Re-anchor all events signed with the compromised key
          using a fresh Merkle tree signed under the new key.</li>
          <li>Notify all relying parties of the compromise and the
          validity window of the affected key.</li>
        </ol>
        <t>
          During key rotation (including non-emergency rotation), the hash
          chain continues unbroken.  The new key signs a KEY_ROTATION
          event that includes the old key's public key hash, establishing
          chain continuity.  Verifiers MUST accept events signed by
          either key during the overlap period specified in the
          KEY_ROTATION event.
        </t>
      </section>

      <section anchor="threat-privacy-leakage">
        <name>Privacy Leakage</name>
        <t>
          Per-tenant salting prevents cross-tenant hash correlation.
          Implementations MUST NOT share salts across tenants.  Event
          metadata (timestamps, event types, counts) may leak statistical
          information even when content is hashed; this is an inherent
          limitation of any audit trail system.  Selective disclosure via
          Merkle proofs (<xref target="merkle-tree"/>) enables verifiers
          to inspect specific events without accessing the full event
          store, reducing exposure.
        </t>
        <t>
          For privacy analysis guidance, see <xref target="RFC6973"/>.
        </t>
      </section>

      <section anchor="threat-availability">
        <name>Availability Attacks</name>
        <t>
          Denial-of-service attacks against the logging infrastructure
          could prevent event recording, violating completeness.  Gold
          level implementations MUST have geographic redundancy.
          Implementations SHOULD buffer events locally when the central
          event store is unavailable, and MUST reconcile buffered events
          upon reconnection.
        </t>
      </section>

      <section anchor="threat-denial-provenance">
        <name>Denial of Provenance</name>
        <t>
          A signer could repudiate previously signed events.  External
          anchoring provides non-repudiation: the independently
          timestamped Merkle root proves the event existed at the
          anchor time.  Combined with the signer's public key
          bound to their identity, this provides evidence against
          repudiation.
        </t>
      </section>

      <section anchor="threat-selective-disclosure">
        <name>Selective Disclosure Attacks</name>
        <t>
          An adversary could present only favorable events to a verifier,
          hiding unfavorable records.  The Completeness Invariant detects
          such omissions: any missing outcome event will cause the
          invariant to fail for the affected pipeline.  External
          anchoring of Merkle roots makes it infeasible to present a
          consistent subset of events that satisfies the invariant
          if any events have been omitted.
        </t>
      </section>

      <section anchor="threat-replay">
        <name>Replay Attacks</name>
        <t>
          An adversary could replay valid events from one context into
          another.  The chain_id field binds events to a specific chain,
          and the prev_hash field creates a strict ordering dependency
          that makes replayed events detectable (they will break the
          hash chain at the insertion point).  UUIDv7 event identifiers
          provide globally unique, time-ordered identification that
          further constrains replay.
        </t>
      </section>

      <section anchor="threat-content-retention">
        <name>Content Retention and Discovery Risk</name>
        <t>
          The tension between privacy-preserving hash-only retention and
          judicial discovery obligations creates a risk that hash-only
          evidence may be deemed insufficient by courts.  The Tiered
          Retention model (<xref target="content-retention-tiers"/>)
          mitigates this by maintaining recoverable content during
          periods when discovery is most likely, while the Legal Hold
          Protocol (<xref target="legal-hold"/>) prevents premature
          content destruction when litigation is anticipated.
        </t>
      </section>

      <section anchor="threat-override">
        <name>Override Enforcement Circumvention</name>
        <t>
          Enforcement Levels 1 and 2 (<xref target="enforcement-levels"/>)
          can be circumvented by users who copy AI output through means
          outside the system's control (e.g., screen capture, manual
          transcription).  Technical enforcement addresses the common
          case of system-mediated export but cannot prevent all forms of
          circumvention.  The provenance chain nonetheless records the
          absence of HUMAN_OVERRIDE events, providing post-hoc
          accountability.
        </t>
      </section>

      <section anchor="threat-rapid-approval">
        <name>Rapid Approval Gaming</name>
        <t>
          Users aware of the Override Latency threshold
          (<xref target="override-latency"/>) might delay approval clicks
          to avoid the RAPID_APPROVAL_FLAG.  This is a known limitation.
          Statistical analysis of approval latency distributions across
          users and document types can detect such gaming patterns in
          audit reviews.
        </t>
      </section>

      <section anchor="threat-legal-hold">
        <name>Legal Hold Integrity</name>
        <t>
          Legal Hold activation and release events must be protected from
          unauthorized modification.  Gold level implementations SHOULD
          require multi-party authorization for Legal Hold release.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 21: IANA Considerations -->
    <!-- ============================== -->

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>

      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>
          IANA is requested to register the following media types in the
          "Media Types" registry:
        </t>

        <section anchor="iana-media-pack">
          <name>application/vap-evidence-pack+zip</name>
          <dl>
            <dt>Type name:</dt><dd>application</dd>
            <dt>Subtype name:</dt><dd>vap-evidence-pack+zip</dd>
            <dt>Required parameters:</dt><dd>None</dd>
            <dt>Optional parameters:</dt>
            <dd>profile (string): VAP profile identifier
            (e.g., "LAP", "VCP")</dd>
            <dt>Encoding considerations:</dt><dd>binary (ZIP archive)</dd>
            <dt>Security considerations:</dt>
            <dd>Evidence Packs contain signed provenance data.
            Implementations MUST verify the pack-level signature
            before processing.  The pack may contain privacy-sensitive
            metadata; access control is the responsibility of the
            implementation.  See <xref target="security-considerations"/>
            of this document.</dd>
            <dt>Interoperability considerations:</dt>
            <dd>The internal structure follows
            <xref target="pack-structure"/>.  Implementations MUST
            support the manifest.json format defined in
            <xref target="pack-manifest"/>.</dd>
            <dt>Published specification:</dt><dd>This document</dd>
            <dt>Applications that use this media type:</dt>
            <dd>AI audit trail systems, regulatory submission tools,
            third-party verification services</dd>
            <dt>Fragment identifier considerations:</dt><dd>N/A</dd>
            <dt>Additional information:</dt><dd>N/A</dd>
            <dt>Contact:</dt><dd>AILEX LLC, info@ailex.co.jp</dd>
            <dt>Author:</dt><dd>Shintaro Yamakawa</dd>
            <dt>Change controller:</dt><dd>IETF</dd>
          </dl>
        </section>

        <section anchor="iana-media-manifest">
          <name>application/vap-manifest+json</name>
          <dl>
            <dt>Type name:</dt><dd>application</dd>
            <dt>Subtype name:</dt><dd>vap-manifest+json</dd>
            <dt>Required parameters:</dt><dd>None</dd>
            <dt>Optional parameters:</dt><dd>None</dd>
            <dt>Encoding considerations:</dt>
            <dd>UTF-8 encoded JSON per <xref target="RFC8259"/></dd>
            <dt>Security considerations:</dt>
            <dd>The manifest is integrity-protected as part of the
            Evidence Pack signature.  See
            <xref target="security-considerations"/>.</dd>
            <dt>Interoperability considerations:</dt>
            <dd>JSON format per <xref target="pack-manifest"/>.</dd>
            <dt>Published specification:</dt><dd>This document</dd>
            <dt>Applications that use this media type:</dt>
            <dd>AI audit trail systems</dd>
            <dt>Contact:</dt><dd>AILEX LLC, info@ailex.co.jp</dd>
            <dt>Author:</dt><dd>Shintaro Yamakawa</dd>
            <dt>Change controller:</dt><dd>IETF</dd>
          </dl>
        </section>
      </section>

      <section anchor="iana-profile-registry">
        <name>VAP Domain Profile Registry</name>
        <t>
          IANA is requested to create a "VAP Domain Profile Identifiers"
          registry with the following initial entries.  The registration
          policy is Specification Required per <xref target="RFC8126"/>
          Section 4.6.
        </t>
        <table anchor="iana-profile-table">
          <name>VAP Domain Profile Identifiers</name>
          <thead>
            <tr>
              <th>Profile ID</th>
              <th>Full Name</th>
              <th>Domain</th>
              <th>Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr><td>VCP</td><td>VeritasChain Protocol</td><td>Finance</td>
            <td>This document</td></tr>
            <tr><td>CAP</td><td>Content AI Profile</td><td>Content/Creative AI</td>
            <td>This document</td></tr>
            <tr><td>LAP</td><td>Legal AI Profile</td><td>Legal AI / LegalTech</td>
            <td>This document</td></tr>
            <tr><td>DVP</td><td>Driving/Vehicle Profile</td><td>Automotive</td>
            <td>Reserved</td></tr>
            <tr><td>MAP</td><td>Medical AI Profile</td><td>Healthcare</td>
            <td>Reserved</td></tr>
            <tr><td>PAP</td><td>Public Admin Profile</td><td>Public Administration</td>
            <td>Reserved</td></tr>
          </tbody>
        </table>
        <t>
          Each registration MUST include: Profile ID (1-4 uppercase ASCII
          characters), Full Name, Domain description, and a reference to
          the defining specification.
        </t>
      </section>

      <section anchor="iana-event-registry">
        <name>VAP Event Type Registry</name>
        <t>
          IANA is requested to create a "VAP Event Types" registry.  The
          registration policy is Specification Required per
          <xref target="RFC8126"/> Section 4.6.  Initial entries include
          all event types defined in <xref target="lap-events"/> of this
          document.
        </t>
      </section>
    </section>

    <!-- ============================== -->
    <!-- Section 22: Relationship to Other Work -->
    <!-- ============================== -->

    <section anchor="related-work">
      <name>Relationship to Other Work</name>
      <t>
        Several IETF efforts address aspects of AI accountability and
        provenance.  This section clarifies how VAP relates to and
        complements these efforts.
      </t>
      <dl>
        <dt>IETF SCITT (<xref target="IETF-SCITT"/>)</dt>
        <dd>SCITT provides content-agnostic transparency infrastructure
        for digital supply chains.  VAP Evidence Packs can be registered
        as SCITT Signed Statements, leveraging SCITT's append-only
        guarantees and inclusion proofs to strengthen VAP's external
        anchoring.  VAP and SCITT are complementary: SCITT provides the
        transparency infrastructure, while VAP defines what goes into
        the payload (domain-specific provenance events with completeness
        guarantees).</dd>

        <dt>IETF RATS / EAT (RFC 9711)</dt>
        <dd>The Remote Attestation Procedures (RATS) architecture and
        Entity Attestation Token (EAT) format address device and software
        integrity attestation.  VAP could leverage EAT claims for
        attesting the integrity of AI model components within the
        provenance chain.  The two frameworks operate at different
        layers: RATS/EAT attests what the system is, while VAP records
        what the system did.</dd>

        <dt>IETF AIPREF Working Group</dt>
        <dd>AIPREF standardizes preferences about AI content usage
        (input-side concern).  VAP addresses output-side accountability.
        The two are naturally complementary: VAP audit trails could
        prove that an AI system honored AIPREF preferences.</dd>

        <dt>draft-reilly-sentinel-protocol</dt>
        <dd>The Sentinel Protocol defines evidence packages for AI
        lifecycle provenance covering datasets, training, and inference.
        VAP differentiates through: (1) domain-specific profiles (e.g.,
        LAP) with regulatory mappings, (2) the Completeness Invariant
        preventing omission attacks, and (3) tiered conformance levels
        mapping to specific regulatory requirements.  The two
        specifications could be complementary, with Sentinel addressing
        model lifecycle and VAP addressing operational decision
        provenance.</dd>

        <dt>ISO/IEC Standards</dt>
        <dd>ISO/IEC 42001 (AI Management System), ISO/IEC 42005
        (AI Impact Assessment), and the emerging ISO/IEC 24970 (AI
        System Logging) define architecture-agnostic requirements that
        VAP's technical mechanisms can satisfy.  VAP conformance levels
        are designed to map to these frameworks' requirements.</dd>
      </dl>
    </section>

  </middle>

  <back>

    <!-- ============================== -->
    <!-- References                     -->
    <!-- ============================== -->

    <references>
      <name>References</name>

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

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9562.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3161.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5816.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9162.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>

      </references>

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

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3552.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6973.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7696.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9794.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6962.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml"/>

        <reference anchor="RFC6979">
          <front>
            <title>Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author initials="T." surname="Pornin" fullname="Thomas Pornin"/>
            <date year="2013" month="August"/>
          </front>
          <seriesInfo name="RFC" value="6979"/>
          <seriesInfo name="DOI" value="10.17487/RFC6979"/>
        </reference>

        <reference anchor="EU-AI-ACT">
          <front>
            <title>Regulation (EU) 2024/1689 laying down harmonised rules on artificial intelligence (Artificial Intelligence Act)</title>
            <author>
              <organization>European Parliament and Council</organization>
            </author>
            <date year="2024"/>
          </front>
          <refcontent>Official Journal of the European Union, L 2024/1689</refcontent>
        </reference>

        <reference anchor="JAPAN-ATTORNEY-ACT">
          <front>
            <title>Attorney Act (Bengoshi-ho), Act No. 205 of 1949</title>
            <author>
              <organization>Government of Japan</organization>
            </author>
            <date year="1949"/>
          </front>
        </reference>

        <reference anchor="MOJ-GUIDELINE">
          <front>
            <title>Regarding the Relationship between AI-based Contract Document Support Services and Attorney Act Article 72</title>
            <author>
              <organization>Ministry of Justice, Japan</organization>
            </author>
            <date year="2023" month="August"/>
          </front>
        </reference>

        <reference anchor="JFBA-AI-GUIDANCE">
          <front>
            <title>Precautions Regarding the Use of Generative AI in Attorney Practice</title>
            <author>
              <organization>Japan Federation of Bar Associations</organization>
            </author>
            <date year="2025" month="September"/>
          </front>
        </reference>

        <reference anchor="JAPAN-AI-ACT">
          <front>
            <title>Act on Promotion of Development and Use of AI-related Technologies (AI Promotion Act)</title>
            <author>
              <organization>Government of Japan</organization>
            </author>
            <date year="2025" month="May"/>
          </front>
        </reference>

        <reference anchor="IETF-SCITT">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author initials="H." surname="Birkholz" fullname="Henk Birkholz"/>
            <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud"/>
            <author initials="C." surname="Fournet" fullname="Cedric Fournet"/>
            <author initials="Y." surname="Deshpande" fullname="Yogesh Deshpande"/>
            <author initials="S." surname="Lasker" fullname="Steve Lasker"/>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-22"/>
        </reference>

        <reference anchor="IETF-SCRAPI">
          <front>
            <title>SCITT Reference API</title>
            <author initials="O." surname="Steele" fullname="Orie Steele"/>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-scrapi-06"/>
        </reference>

        <reference anchor="GDPR">
          <front>
            <title>Regulation (EU) 2016/679 - General Data Protection Regulation</title>
            <author>
              <organization>European Parliament and Council</organization>
            </author>
            <date year="2016"/>
          </front>
        </reference>

        <reference anchor="FIPS203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="FIPS" value="203"/>
        </reference>

        <reference anchor="FIPS204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="FIPS" value="204"/>
        </reference>

        <reference anchor="FIPS140-3">
          <front>
            <title>Security Requirements for Cryptographic Modules</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2019" month="March"/>
          </front>
          <seriesInfo name="FIPS" value="140-3"/>
        </reference>

      </references>
    </references>

    <!-- ============================== -->
    <!-- Appendix A: Profile Comparison -->
    <!-- ============================== -->

    <section anchor="profile-comparison" numbered="false">
      <name>Appendix A.  Profile Comparison</name>
      <table anchor="profile-compare-table">
        <name>Comparison of VAP Domain Profiles</name>
        <thead>
          <tr>
            <th>Aspect</th>
            <th>VCP (Finance)</th>
            <th>CAP (Content)</th>
            <th>LAP (Legal)</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>Time Precision</td><td>Nanosecond</td><td>Second</td><td>Second</td></tr>
          <tr><td>Key Invariant</td><td>SIG to ORD</td><td>GEN_ATTEMPT to GEN/DENY/ERROR</td><td>3 Pipeline Invariants</td></tr>
          <tr><td>Unique Feature</td><td>Signal integrity</td><td>Safe Refusal (SRP)</td><td>Human Override Coverage + Enforcement</td></tr>
          <tr><td>Regulatory Focus</td><td>Financial regulation</td><td>Content regulation</td><td>Attorney regulation + AI governance</td></tr>
          <tr><td>Privacy Model</td><td>Trade data</td><td>Creative content</td><td>Professional privilege + Tiered Retention</td></tr>
          <tr><td>Retention (Gold)</td><td>5 years</td><td>5 years</td><td>10 years</td></tr>
        </tbody>
      </table>
    </section>

    <!-- ============================== -->
    <!-- Appendix B: JSON Schemas       -->
    <!-- ============================== -->

    <section anchor="json-schemas" numbered="false">
      <name>Appendix B.  Validation Requirements</name>
      <t>
        Bronze level implementations MUST validate that all events
        conform to the Common Event Structure
        (<xref target="common-event"/>).  At minimum, validation MUST
        check:
      </t>
      <ul>
        <li>All REQUIRED top-level fields are present: vap_version,
        profile, header, provenance, accountability, security.</li>
        <li>header.event_id is a valid UUIDv7.</li>
        <li>header.timestamp conforms to <xref target="RFC3339"/>.</li>
        <li>header.prev_hash is either null (genesis) or matches the
        pattern "{algo_id}:{hex_string}" where algo_id is a canonical
        algorithm identifier from <xref target="algo-id-table"/>.</li>
        <li>security.event_hash matches the recomputed hash over the
        Hash Input.</li>
        <li>security.signature is present and valid for the specified
        sign_algo.</li>
        <li>header.causal_link.target_event_id is either null or a
        valid UUIDv7.</li>
      </ul>
      <t>
        Formal JSON Schema definitions will be published as a companion
        document or hosted at a stable URI referenced in a future
        revision of this specification.
      </t>
    </section>

    <!-- ============================== -->
    <!-- Appendix C: Implementation Status -->
    <!-- ============================== -->

    <section anchor="implementation-status" numbered="false">
      <name>Appendix C.  Implementation Status</name>
      <t>
        This section records the status of known implementations of the
        protocol defined by this specification at the time of posting
        of this Internet-Draft, and is based on a proposal described in
        <xref target="RFC7942"/>.  The description of implementations
        in this section is intended to assist the IETF in its decision
        processes in progressing drafts to RFCs.  Please note that the
        listing of any individual implementation here does not imply
        endorsement by the IETF.  Furthermore, no effort has been spent
        to verify the information presented here that was supplied by
        IETF contributors.  This is not intended as, and must not be
        construed to be, a catalog of available implementations or their
        features.  Readers are advised to note that other implementations
        may exist.
      </t>
      <t>
        According to <xref target="RFC7942"/>, "this section, as well as
        the cited RFC, should be removed before the document is approved
        for publication as an RFC."
      </t>
      <dl>
        <dt>AILEX SaaS Platform</dt>
        <dd>Organization: AILEX LLC.  Description: Production
        implementation of VAP-LAP for legal AI services including
        AI-powered consultation, document generation, and fact-checking.
        Maturity: Bronze-level conformance (hash chain integrity,
        digital signatures, event logging, UUIDv7 identifiers) with
        select Silver-level features implemented on an experimental
        basis: three-pipeline completeness invariant, privacy-preserving
        fields with per-tenant salting, and override coverage tracking.
        External anchoring and Evidence Pack generation (Silver
        REQUIRED) are not yet implemented.  Licensing: Proprietary.
        URL: https://users.ailex.co.jp</dd>
      </dl>
    </section>

    <!-- ============================== -->
    <!-- Appendix D: Change Log         -->
    <!-- ============================== -->

    <section anchor="changelog" numbered="false">
      <name>Appendix D.  Change Log</name>
      <t>
        This section tracks changes between Internet-Draft revisions and
        will be removed before publication.
      </t>

      <t>draft-ailex-vap-legal-ai-provenance-02</t>
      <ul>
        <li>Added individual author name (Shintaro Yamakawa) per IETF
        guidelines requiring personal author identification.</li>
        <li>Fixed cryptographic algorithm naming: Kyber-1024 renamed
        to ML-KEM-1024 per FIPS 203 standardization; separated into
        distinct KEM category from Encryption.  Added ML-DSA-65
        parameter set selection rationale.</li>
        <li>Resolved EventHash circular reference: defined explicit
        Hash Input excluding security.event_hash and
        security.signature from canonicalization input
        (Section 4.2).</li>
        <li>Resolved crypto agility contradiction: hash chain and
        signature formulas now parameterized by hash_algo/sign_algo
        fields instead of hardcoding SHA-256/Ed25519.  Added
        Algorithm Migration procedure (Section 4.4) with
        post-quantum readiness subsection referencing FIPS 204 and
        RFC 9794.</li>
        <li>Updated Merkle tree construction to follow RFC 9162
        (replacing obsoleted RFC 6962), with domain separation
        prefixes and correct handling of non-power-of-two leaf
        counts (Section 7.3).</li>
        <li>Fixed encoding specifications: timestamps now require
        RFC 3339; Base64 encoding now requires RFC 4648 Section 5
        (URL-safe, no padding); hash values standardized as
        lowercase hex; RFC 8259 added to normative references
        (Section 5).</li>
        <li>Updated FIPS 140-2/3 to FIPS 140-3 as primary
        requirement with transition period note (Section 6.3).</li>
        <li>Added RFC 5816 (ESSCertIDv2) as normative reference for
        RFC 3161 TSA SHA-256 support (Section 7.1).</li>
        <li>Specified anchor_proof structure per anchor_type with
        type-specific fields and verification procedures
        (Section 7.2).</li>
        <li>Added Completeness Invariant grace period maximum of
        300 seconds with TIMEOUT_ERROR mechanism (Section 8).</li>
        <li>Added standardized causal_link field in header for
        all event types, with link_type enumeration
        (Section 5).</li>
        <li>Fixed Override Coverage metric: numerator changed to
        count distinct target_event_id to prevent exceeding
        100%.  DENY removed from denominator with rationale
        documented (Section 16.1).</li>
        <li>Added salt management requirements: 256-bit minimum
        entropy, HMAC-SHA-256 for low-entropy fields, rotation
        and compromise response procedures (Section 10.1).</li>
        <li>Added minimum verification API with HTTP endpoints for
        Silver and Gold levels (Section 12.1).</li>
        <li>Added Bronze-level validation requirements specifying
        minimum field presence and type checking
        (Appendix B).</li>
        <li>Expanded Security Considerations with explicit threat
        model, 12 specific threat analyses per RFC 3552, key
        rotation procedures, and denial-of-provenance mitigation
        (Section 20).</li>
        <li>Expanded IANA Considerations with media type registration
        templates, VAP Domain Profile registry, and VAP Event Type
        registry per RFC 8126 (Section 21).</li>
        <li>Added GDPR interaction subsection addressing right-to-
        erasure vs. audit trail tension (Section 11.1).</li>
        <li>Added escrow custodian requirements for Tier 2 content
        recovery (Section 11.4).</li>
        <li>Added Relationship to Other Work section positioning VAP
        relative to SCITT, RATS/EAT, AIPREF, Sentinel Protocol,
        and ISO/IEC standards (Section 22).</li>
        <li>Added Implementation Status appendix per RFC 7942
        (Appendix C).</li>
        <li>Added Japan AI Promotion Act (2025) to regulatory
        alignment references.</li>
        <li>Added SALT_ROTATION event type to LAP administrative
        events (Section 14.5).</li>
        <li>Removed EIP from profile.id enumeration (undefined
        profile).</li>
        <li>Normalized all algorithm identifiers to lowercase
        hyphenated ASCII strings with explicit canonical mapping
        table (Section 4.1).  Resolved inconsistency between
        field values (e.g., "SHA-256") and wire prefixes (e.g.,
        "sha256:") by unifying on a single form (e.g.,
        "sha-256" / "sha-256:").</li>
        <li>Added UTF-8 encoding requirement for all text fields
        (Section 5, RFC 3629).</li>
        <li>Updated vap_version from 1.2 to 1.3.</li>
        <li>Updated LAP Profile Version from 0.3.0 to 0.4.0.</li>
        <li>Updated Abstract to reference SCITT.</li>
      </ul>

      <t>draft-ailex-vap-legal-ai-provenance-01</t>
      <ul>
        <li>Added Tiered Content Retention model (Section 11.2).</li>
        <li>Added Legal Hold Protocol (Section 11.5) with five trigger
        types.</li>
        <li>Added Judicial Disclosure Response procedures
        (Section 11.6).</li>
        <li>Expanded Override Coverage with four-level Enforcement
        Framework.</li>
        <li>Added Override Latency Threshold with Rapid Approval
        Flag.</li>
        <li>Added Section 16.5 acknowledging structural
        limitations.</li>
        <li>Added seven new event types for retention and
        enforcement.</li>
        <li>Extended Evidence Pack manifest with retention_status and
        enforcement_metrics.</li>
        <li>Updated LAP Profile Version from 0.2.0 to 0.3.0.</li>
      </ul>

      <t>draft-ailex-vap-legal-ai-provenance-00  Initial submission.</t>
    </section>

    <!-- ============================== -->
    <!-- Acknowledgments                -->
    <!-- ============================== -->

    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>
        The VAP Framework and LAP Profile were developed with input from:
        the CAP v1.0 Safe Refusal Provenance (SRP) design experience,
        the VCP v1.1 operational feedback, regulatory engagement from
        legal practitioners, and open-source community contributions.
      </t>
      <t>
        LAP v0.4 design draws from the AILEX SaaS reference
        implementation, the Ministry of Justice guideline on AI services
        and <xref target="JAPAN-ATTORNEY-ACT"/> Article 72 (August 2023),
        the <xref target="JFBA-AI-GUIDANCE"/> on generative AI in
        attorney practice (September 2025), and operational feedback from
        pilot law firms regarding judicial discovery and attorney
        oversight workflows.
      </t>
      <t>
        The authors thank the reviewers who provided detailed technical
        feedback on the -01 draft, particularly regarding cryptographic
        algorithm naming accuracy, hash computation clarity, Merkle tree
        construction consistency, and IANA registration completeness.
      </t>
    </section>

  </back>

</rfc>
