Skip to content

Spec convention for compliance-mode requests (distinct from X-AdCP-Sandbox-Mode) #4372

Description

@bokelley

Summary

Sandbox mode and compliance-test mode are different concerns, but today both are conflated under `X-AdCP-Sandbox-Mode: on`. This creates ambiguity for adopters who want to:

  • Run the compliance storyboard against a real seller deployment (production-shaped, with real DBs, real adapters) without polluting production state — "compliance against production-mode"
  • Run a buyer's integration tests against a sandboxed seller surface that auto-approves everything — "buyer testing against sandbox-mode"

Today both modes hit the same code path. Sellers can't tell which case applies. Compliance runners can't reliably opt into auto-approval (or any other compliance-friendly behavior) without breaking sandbox-mode semantics for non-compliance traffic.

Concrete pain (today's session)

We spent significant time debugging storyboard failures that turned out to be:

  • Seller's manual-approval gate intercepting before `canceled=true` reached the cancel branch
  • Seller's INVALID_DOMAIN gate rejecting RFC 2606 example domains
  • Both legitimate for production; both blockers for compliance validation

Workaround: flip seller tenant config to "auto-approve everything" before running the storyboard. But that means we're not actually testing the seller-as-deployed; we're testing a stripped-down compliance variant.

A spec-blessed compliance-mode header would let:

  • The storyboard runner identify itself as a compliance test
  • The seller opt into compliance-friendly behavior (auto-approve, deterministic IDs, bypass domain blocklists, etc.) ONLY for compliance traffic, without changing production-or-sandbox-buyer behavior
  • The seller report compliance test results without polluting production audit trails

Proposed header

`X-AdCP-Test-Mode: compliance` (or `X-AdCP-Compliance-Run: true`)

Semantics: "this request is part of an automated compliance suite. Seller MAY apply compliance-friendly defaults (auto-approve gated operations, accept reserved-TLD domains, etc.) without violating production safety. Sellers that don't recognize the header behave normally — no compatibility burden."

Capability advertisement: `get_adcp_capabilities` could include a `compliance_mode` block describing which gates the seller will bypass.

Why this is different from sandbox

  • Sandbox = "non-production state, fake money/inventory, but real seller behavior including all gates." Useful for buyer integration testing where you want to validate gate handling.
  • Compliance = "running the compliance storyboard, please don't make me fight your config." Useful for spec validation where gates are off-topic.

Both have legitimate use cases. They shouldn't be the same header.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.compliance-suiteneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasrfcProtocol change — auto-adds to roadmap boardschemaJSON Schema source-of-truth: definitions, codegen artifacts, validation, hygiene

    Type

    No type

    Projects

    Status
    No status

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions