{
  "_about": "Spec-text evidence for the September 9, 2026 addendum to https://nofluffadvisory.com/writing/adcp-vs-aamp/. The essay published against AdCP v3.1.8 and called Trusted Match 'a different, thinner surface' that did not 'attempt in-auction machinery'. This snapshot pins the v3.1.19 spec text that falsified both claims. Quotes are verbatim from the specification page; field defaults are from its normative field tables.",
  "subject": "AdCP Trusted Match Protocol (TMP) specification, v3.1.19",
  "date": "2026-09-09",
  "source": "https://docs.adcontextprotocol.org/dist/docs/3.1.19/trusted-match/specification",
  "essay_claims_falsified": [
    "Trusted Match is 'a different, thinner surface' (prose, published 2026-07-31, written against v3.1.8)",
    "'AdCP does not attempt in-auction machinery' (diagram tooltip, same publication)"
  ],
  "status_caveat": "TMP is marked Experimental within AdCP 3.x: 'it may change between 3.x releases with at least 6 weeks notice.' Sellers implementing it MUST declare trusted_match.core in experimental_features. Treat every finding below as pinned to 3.1.19, not settled.",
  "findings": [
    {
      "topic": "Serve-time latency budget",
      "quote": "TMP targets sub-50ms end-to-end latency (publisher -> router -> agents -> router -> publisher).",
      "detail": "Stated target in the Latency section. This is the claim that most directly falsifies 'does not attempt in-auction machinery'."
    },
    {
      "topic": "Per-provider timeout",
      "field": "timeout_ms",
      "type": "integer",
      "required": false,
      "default": 50,
      "quote": "Per-provider timeout in milliseconds. Must be <= the router's overall latency_budget_ms. Default: 50.",
      "detail": "Same machinery shape as ARTF's tmax budget: a hard millisecond bound per participant, enforced by the intermediary."
    },
    {
      "topic": "Slow-agent exclusion",
      "quote": "Agents that exceed the timeout are excluded from the merged response for that request.",
      "detail": "Plus: 'The router SHOULD apply adaptive per-agent timeouts based on observed latency percentiles' and 'The router MAY preemptively skip agents whose p95 latency consistently exceeds the budget.'"
    },
    {
      "topic": "Contextual embedding channel",
      "fields": [
        {
          "field": "embedding",
          "type": "string",
          "required": false,
          "quote": "Content embedding as base64-encoded int8 vector. Captures semantic content beyond topics and keywords."
        },
        {
          "field": "embedding_model",
          "type": "string",
          "required": false,
          "quote": "Embedding model identifier (e.g., nomic-embed-text-v1.5). Required when embedding is present."
        },
        {
          "field": "embedding_dims",
          "type": "integer",
          "required": false,
          "quote": "Number of dimensions in the embedding vector. Required when embedding is present."
        }
      ],
      "detail": "All three sit on ContextSignals, the baseline disclosure level: 'context_signals is the baseline - every buyer agent MUST handle it.'"
    },
    {
      "topic": "Classifier boundary",
      "quote": "Pre-computed classifier outputs for the content environment. MUST NOT contain raw content (conversation text, article body, URLs). Only classified outputs. The publisher is the classifier boundary.",
      "detail": "ContextSignals definition. The parallel field-table entry adds the intended use: 'Use when content is ephemeral (conversation turns, search queries) or to supplement artifact-based matching.'"
    },
    {
      "topic": "Structural separation / identity data",
      "quote": "Context Match requests MUST NOT contain user identity data (user tokens, device IDs, IP addresses, session tokens, or any data that could identify a specific user).",
      "detail": "From Privacy Requirements. The enumeration is of identifiers, not of derived content representations; an embedding of a single ephemeral conversation turn is not addressed either way. This is the open question taken to the working group."
    },
    {
      "topic": "Property types in scope",
      "field": "property_type",
      "enum_includes": "ai_assistant",
      "detail": "The enum also carries website, mobile_app, ctv_app, desktop_app, dooh, podcast, radio, linear_tv, streaming_audio. ai_assistant is the surface where 'ephemeral conversation turns' and embeddings intersect. Corrected 2026-09-09: an earlier revision of this file listed 'site' and 'ctv'; neither is a member."
    },
    {
      "topic": "Context Match cacheability",
      "quote": "Context Match responses are cacheable because the same packages are evaluated for every user on a given placement.",
      "detail": "Recommended cache key {property_rid, placement_id, provider_id}, TTL 5 minutes. The decorrelation argument depends on context being user-independent."
    },
    {
      "topic": "Consent applies only to Identity Match",
      "quote": "Privacy consent signals for the identity match. Publishers MUST include consent information when operating in regulated jurisdictions (EU/EEA, California, etc.). Buyers MUST NOT process user tokens without consent information when required by applicable law.",
      "detail": "Every occurrence of 'consent' in the specification sits on the Identity Match path: the Consent object (gdpr, tcf_consent, gpp, us_privacy) hangs off IdentityMatchRequest, and the Consent-handling clause refuses the fail-open reading ('consent status unknown' rather than 'consent not required'). Context Match has no consent field, no consent-handling clause and no regulated-jurisdiction obligation. That asymmetry follows from the assumption that the context path carries nothing user-specific."
    },
    {
      "topic": "A reversibility rule already exists, on the identity path",
      "quote": "User tokens MUST NOT contain PII or be reversible to PII by the buyer agent.",
      "detail": "The spec already treats non-reversibility as a normative requirement. It applies it to opaque user tokens on Identity Match. There is no context-path analogue constraining what a derived representation of user-authored content may be reversible to."
    }
  ],
  "absent_from_spec": {
    "_note": "Case-insensitive counts over the full specification page as fetched 2026-09-09, word-boundary matched except where a substring test is the correct one (re-identif, k-anonym). Corrected 2026-09-09: an earlier revision recorded TEE=9, which was a substring count picking up 'guarantee'; the word-boundary count is 6. The privacy-vocabulary terms below are absent, but the page is NOT free of privacy vocabulary - see the PII/GDPR/CCPA counts and the two consent findings above. Absence of these four terms is not itself a defect.",
    "personal data": 0,
    "re-identif (substring)": 0,
    "k-anonym (substring)": 0,
    "differential privacy": 0,
    "PII": 3,
    "GDPR": 3,
    "CCPA": 1,
    "TEE": 6,
    "Identity Match": 48
  }
}
