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
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:
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:
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:
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
Both have legitimate use cases. They shouldn't be the same header.
Related