@adcp/sdk 7.11.0 → 7.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
  2. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  3. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
  4. package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
  5. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
  6. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
  7. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  8. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
  9. package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
  10. package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
  11. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  12. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
  13. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  14. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
  15. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  16. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  17. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  18. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  19. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
  20. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
  21. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
  22. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  23. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  24. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  25. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
  26. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
  27. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
  28. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  29. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
  30. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  31. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  32. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
  33. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  34. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  35. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  36. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  37. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  38. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  39. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  40. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
  41. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  42. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  43. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  44. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  45. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  46. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  47. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  48. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
  49. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  50. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  51. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  52. package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
  53. package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
  54. package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
  55. package/compliance/cache/3.1.0-rc.2/index.json +356 -0
  56. package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
  57. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  58. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
  59. package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
  60. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
  61. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
  62. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  63. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
  64. package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
  65. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
  66. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  67. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
  68. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  69. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
  70. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  71. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  72. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  73. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  74. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
  75. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
  76. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
  77. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  78. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  79. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  80. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
  81. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
  82. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
  83. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  84. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
  85. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  86. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  87. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
  88. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  89. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  90. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  91. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  92. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  93. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  94. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  95. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
  96. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  97. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  98. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  99. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  100. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  101. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  102. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  103. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
  104. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  105. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  106. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  107. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
  108. package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
  109. package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
  110. package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
  111. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
  112. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
  113. package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
  114. package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
  115. package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
  116. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
  117. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
  118. package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
  119. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
  120. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
  121. package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
  122. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
  123. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
  124. package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
  125. package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
  126. package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
  127. package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
  128. package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
  129. package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
  130. package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
  131. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
  132. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
  133. package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
  134. package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
  135. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
  136. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
  137. package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
  138. package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
  139. package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
  140. package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
  141. package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
  142. package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
  143. package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
  144. package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
  145. package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
  146. package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
  147. package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
  148. package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
  149. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
  150. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
  151. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
  152. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
  153. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
  154. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
  155. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
  156. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
  157. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
  158. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
  159. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
  160. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
  161. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
  162. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
  163. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
  164. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
  165. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
  166. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
  167. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
  168. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
  169. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
  170. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
  171. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
  172. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
  173. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
  174. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
  175. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
  176. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
  177. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
  178. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
  179. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
  180. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
  181. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
  182. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
  183. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
  184. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
  185. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
  186. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
  187. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
  188. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
  189. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
  190. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
  191. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
  192. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
  193. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
  194. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
  195. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
  196. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
  197. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
  198. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
  199. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
  200. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
  201. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
  202. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
  203. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
  204. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
  205. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
  206. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
  207. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
  208. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
  209. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
  210. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
  211. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
  212. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
  213. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
  214. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
  215. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
  216. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
  217. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
  218. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
  219. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
  220. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
  221. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
  222. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
  223. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
  224. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
  225. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
  226. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
  227. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
  228. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
  229. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
  230. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
  231. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
  232. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
  233. package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
  234. package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
  235. package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
  236. package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
  237. package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
  238. package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
  239. package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
  240. package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
  241. package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
  242. package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
  243. package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
  244. package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
  245. package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
  246. package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
  247. package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
  248. package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
  249. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
  250. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
  251. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
  252. package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
  253. package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
  254. package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
  255. package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
  256. package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
  257. package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
  258. package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
  259. package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
  260. package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
  261. package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
  262. package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
  263. package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
  264. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
  265. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
  266. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
  267. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
  268. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
  269. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  270. package/dist/lib/testing/storyboard/default-invariants.js +23 -0
  271. package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
  272. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  273. package/dist/lib/testing/storyboard/runner.js +84 -21
  274. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  275. package/dist/lib/testing/storyboard/types.d.ts +21 -0
  276. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  277. package/dist/lib/testing/storyboard/types.js.map +1 -1
  278. package/dist/lib/testing/types.d.ts +9 -0
  279. package/dist/lib/testing/types.d.ts.map +1 -1
  280. package/dist/lib/version.d.ts +3 -3
  281. package/dist/lib/version.js +3 -3
  282. package/package.json +1 -1
@@ -0,0 +1,289 @@
1
+ id: media_buy_seller/invalid_transitions
2
+ version: "1.0.0"
3
+ title: "Seller rejects illegal state transitions and unknown references"
4
+ category: media_buy_seller
5
+ summary: "Validates that the seller returns structured AdCP errors (MEDIA_BUY_NOT_FOUND, PACKAGE_NOT_FOUND, NOT_CANCELLABLE) rather than 500s or undefined behavior when the buyer references missing entities or attempts forbidden state transitions."
6
+ track: media_buy
7
+ required_tools:
8
+ - get_products
9
+ - create_media_buy
10
+ - update_media_buy
11
+
12
+ narrative: |
13
+ Error-code coverage is the most common compliance gap: sellers accept malformed input
14
+ silently or return generic 500s rather than the specific AdCP codes the spec defines.
15
+ This scenario forces three of the most-referenced media_buy error codes with
16
+ deterministic input:
17
+
18
+ - MEDIA_BUY_NOT_FOUND — buyer references a media_buy_id that does not exist.
19
+ - PACKAGE_NOT_FOUND — media_buy_id is valid but package_id inside it is not.
20
+ - NOT_CANCELLABLE — buyer cancels the same media buy twice; the second cancel must
21
+ be rejected because canceled is terminal.
22
+
23
+ All three probes use hard `check: error_code` assertions so a seller that returns
24
+ a 500 or swallows the error fails the scenario outright. Recovery hints, correlation
25
+ echo, and context preservation are also checked on every error response.
26
+
27
+ agent:
28
+ interaction_model: media_buy_seller
29
+ capabilities:
30
+ - sells_media
31
+ examples:
32
+ - "Any media buy seller"
33
+
34
+ caller:
35
+ role: buyer_agent
36
+ example: "Pinnacle Agency (buyer)"
37
+
38
+ prerequisites:
39
+ description: |
40
+ Seller supports create_media_buy and update_media_buy with cancellation via
41
+ the canceled field.
42
+ test_kit: "test-kits/acme-outdoor.yaml"
43
+
44
+ phases:
45
+ - id: unknown_media_buy
46
+ title: "Reference an unknown media_buy_id"
47
+ narrative: |
48
+ Before any state is set up, call update_media_buy with a fabricated media_buy_id.
49
+ The seller must return MEDIA_BUY_NOT_FOUND with a correctable recovery hint — not
50
+ a 500 and not a silent success.
51
+
52
+ steps:
53
+ - id: update_unknown_media_buy
54
+ title: "update_media_buy with bogus media_buy_id"
55
+ task: update_media_buy
56
+ schema_ref: "media-buy/update-media-buy-request.json"
57
+ response_schema_ref: "media-buy/update-media-buy-response.json"
58
+ doc_ref: "/media-buy/task-reference/update_media_buy"
59
+ comply_scenario: media_buy_lifecycle
60
+ expect_error: true
61
+ negative_path: payload_well_formed
62
+ stateful: false
63
+ expected: |
64
+ Reject with:
65
+ - code: MEDIA_BUY_NOT_FOUND
66
+ - recovery: correctable
67
+ - context echoed unchanged
68
+
69
+ sample_request:
70
+ account:
71
+ brand:
72
+ domain: "acmeoutdoor.example"
73
+ operator: "pinnacle-agency.example"
74
+ media_buy_id: "does-not-exist-invalid-transitions-v1"
75
+ paused: true
76
+ idempotency_key: "$generate:uuid_v4#update_unknown_media_buy"
77
+ context:
78
+ correlation_id: "invalid_transitions--update_unknown_media_buy"
79
+ validations:
80
+ - check: error_code
81
+ value: "MEDIA_BUY_NOT_FOUND"
82
+ description: "Error code is MEDIA_BUY_NOT_FOUND"
83
+ - check: field_present
84
+ path: "context"
85
+ description: "Response echoes back the context object even on errors"
86
+ - check: field_value
87
+ path: "context.correlation_id"
88
+ value: "invalid_transitions--update_unknown_media_buy"
89
+ description: "Context correlation_id returned unchanged"
90
+
91
+ - id: setup
92
+ title: "Create a real media buy for follow-up probes"
93
+ narrative: |
94
+ The remaining probes need a real media_buy_id and package_id. Discover a product
95
+ and create a plain buy — no targeting tricks, no governance — so we have known-good
96
+ IDs for the error cases.
97
+
98
+ steps:
99
+ - id: get_products_brief
100
+ title: "Discover a product"
101
+ task: get_products
102
+ schema_ref: "media-buy/get-products-request.json"
103
+ response_schema_ref: "media-buy/get-products-response.json"
104
+ doc_ref: "/media-buy/task-reference/get_products"
105
+ comply_scenario: full_sales_flow
106
+ stateful: false
107
+ expected: |
108
+ Return at least one product with pricing.
109
+ sample_request:
110
+ buying_mode: "brief"
111
+ brief: "Display inventory on outdoor lifestyle content. Q3 flight."
112
+ filters:
113
+ is_fixed_price: true
114
+ account:
115
+ brand:
116
+ domain: "acmeoutdoor.example"
117
+ operator: "pinnacle-agency.example"
118
+ context_outputs:
119
+ - path: "products[0].product_id"
120
+ key: "product_id"
121
+ - path: "products[0].pricing_options[0].pricing_option_id"
122
+ key: "pricing_option_id"
123
+ validations:
124
+ - check: response_schema
125
+ description: "Response matches get-products-response.json schema"
126
+ - check: field_present
127
+ path: "products[0].pricing_options[0].fixed_price"
128
+ description: "The captured pricing option is fixed-price; fixed-price storyboards do not send bid_price"
129
+
130
+ - id: create_buy
131
+ title: "Create a buy for the error probes"
132
+ task: create_media_buy
133
+ schema_ref: "media-buy/create-media-buy-request.json"
134
+ response_schema_ref: "media-buy/create-media-buy-response.json"
135
+ doc_ref: "/media-buy/task-reference/create_media_buy"
136
+ comply_scenario: create_media_buy
137
+ stateful: true
138
+ expected: |
139
+ Media buy created with media_buy_id and at least one package.
140
+
141
+ sample_request:
142
+ brand:
143
+ domain: "acmeoutdoor.example"
144
+ account:
145
+ brand:
146
+ domain: "acmeoutdoor.example"
147
+ operator: "pinnacle-agency.example"
148
+ idempotency_key: "$generate:uuid_v4#invalid_transitions_create_buy"
149
+ start_time: "2026-08-01T00:00:00Z"
150
+ end_time: "2026-08-31T23:59:59Z"
151
+ packages:
152
+ - product_id: "$context.product_id"
153
+ budget: 5000
154
+ pricing_option_id: "$context.pricing_option_id"
155
+ context:
156
+ correlation_id: "invalid_transitions--create_buy"
157
+ context_outputs:
158
+ - path: "media_buy_id"
159
+ key: "media_buy_id"
160
+ - path: "packages[0].package_id"
161
+ key: "package_id"
162
+ validations:
163
+ - check: response_schema
164
+ description: "Response matches create-media-buy-response.json schema"
165
+ - check: field_present
166
+ path: "media_buy_id"
167
+ description: "Seller returns media_buy_id"
168
+
169
+ - id: unknown_package
170
+ title: "Reference an unknown package_id on a real buy"
171
+ narrative: |
172
+ The media_buy_id is real, but the package_id is fabricated. The seller must
173
+ return PACKAGE_NOT_FOUND — distinct from MEDIA_BUY_NOT_FOUND — because the
174
+ lookup succeeds at the buy level and only fails at the package lookup.
175
+
176
+ steps:
177
+ - id: update_unknown_package
178
+ title: "update_media_buy with bogus package_id"
179
+ task: update_media_buy
180
+ schema_ref: "media-buy/update-media-buy-request.json"
181
+ response_schema_ref: "media-buy/update-media-buy-response.json"
182
+ doc_ref: "/media-buy/task-reference/update_media_buy"
183
+ comply_scenario: media_buy_lifecycle
184
+ expect_error: true
185
+ negative_path: payload_well_formed
186
+ stateful: true
187
+ expected: |
188
+ Reject with:
189
+ - code: PACKAGE_NOT_FOUND
190
+ - recovery: correctable
191
+ - context echoed unchanged
192
+
193
+ sample_request:
194
+ account:
195
+ brand:
196
+ domain: "acmeoutdoor.example"
197
+ operator: "pinnacle-agency.example"
198
+ media_buy_id: "$context.media_buy_id"
199
+ idempotency_key: "$generate:uuid_v4#update_unknown_package"
200
+ packages:
201
+ - package_id: "does-not-exist-package-invalid-transitions-v1"
202
+ paused: true
203
+ context:
204
+ correlation_id: "invalid_transitions--update_unknown_package"
205
+ validations:
206
+ - check: error_code
207
+ value: "PACKAGE_NOT_FOUND"
208
+ description: "Error code is PACKAGE_NOT_FOUND"
209
+ - check: field_present
210
+ path: "context"
211
+ description: "Response echoes back the context object even on errors"
212
+ - check: field_value
213
+ path: "context.correlation_id"
214
+ value: "invalid_transitions--update_unknown_package"
215
+ description: "Context correlation_id returned unchanged"
216
+
217
+ - id: double_cancel
218
+ title: "Cancel twice — second cancel is not valid"
219
+ narrative: |
220
+ Cancel the buy (success), then try to cancel the same buy again. canceled is
221
+ terminal per the AdCP spec, so the second cancel cannot succeed. The seller
222
+ must return NOT_CANCELLABLE — the schema specifically reserves this code for
223
+ "media buy cannot be canceled in its current state."
224
+
225
+ steps:
226
+ - id: first_cancel
227
+ title: "Cancel the media buy"
228
+ task: update_media_buy
229
+ schema_ref: "media-buy/update-media-buy-request.json"
230
+ response_schema_ref: "media-buy/update-media-buy-response.json"
231
+ doc_ref: "/media-buy/task-reference/update_media_buy"
232
+ comply_scenario: media_buy_lifecycle
233
+ stateful: true
234
+ expected: |
235
+ Seller acknowledges the cancellation and transitions the buy to canceled.
236
+
237
+ sample_request:
238
+ account:
239
+ brand:
240
+ domain: "acmeoutdoor.example"
241
+ operator: "pinnacle-agency.example"
242
+ media_buy_id: "$context.media_buy_id"
243
+ canceled: true
244
+ cancellation_reason: "Testing NOT_CANCELLABLE on re-cancel"
245
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_invalid_transitions_double_cancel_first_cancel"
246
+ context:
247
+ correlation_id: "invalid_transitions--first_cancel"
248
+ validations:
249
+ - check: response_schema
250
+ description: "Response matches update-media-buy-response.json schema"
251
+
252
+ - id: second_cancel
253
+ title: "Re-cancel the canceled buy"
254
+ task: update_media_buy
255
+ schema_ref: "media-buy/update-media-buy-request.json"
256
+ response_schema_ref: "media-buy/update-media-buy-response.json"
257
+ doc_ref: "/media-buy/task-reference/update_media_buy"
258
+ comply_scenario: media_buy_lifecycle
259
+ expect_error: true
260
+ negative_path: payload_well_formed
261
+ stateful: true
262
+ expected: |
263
+ Reject with:
264
+ - code: NOT_CANCELLABLE
265
+ - recovery: correctable
266
+ - context echoed unchanged
267
+
268
+ sample_request:
269
+ account:
270
+ brand:
271
+ domain: "acmeoutdoor.example"
272
+ operator: "pinnacle-agency.example"
273
+ media_buy_id: "$context.media_buy_id"
274
+ canceled: true
275
+ cancellation_reason: "Deliberate re-cancel to force NOT_CANCELLABLE"
276
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_invalid_transitions_double_cancel_second_cancel"
277
+ context:
278
+ correlation_id: "invalid_transitions--second_cancel"
279
+ validations:
280
+ - check: error_code
281
+ value: "NOT_CANCELLABLE"
282
+ description: "Error code is NOT_CANCELLABLE on re-cancel of canceled buy"
283
+ - check: field_present
284
+ path: "context"
285
+ description: "Response echoes back the context object even on errors"
286
+ - check: field_value
287
+ path: "context.correlation_id"
288
+ value: "invalid_transitions--second_cancel"
289
+ description: "Context correlation_id returned unchanged"
@@ -0,0 +1,148 @@
1
+ id: media_buy_seller/inventory_list_no_match
2
+ version: "1.0.0"
3
+ title: "Seller handles property_list / collection_list references that match zero inventory"
4
+ category: media_buy_seller
5
+ summary: "Verifies a seller returns a zero-forecast product or a clear error — not a crash — when a buyer references inventory lists that resolve to nothing in the seller's catalog."
6
+ track: media_buy
7
+ required_tools:
8
+ - get_products
9
+ - create_media_buy
10
+
11
+ narrative: |
12
+ Not every buyer list matches every seller's inventory. A buyer may point at a
13
+ property_list of domains this seller does not carry, or a collection_list of
14
+ programs this seller does not syndicate. The seller must handle that gracefully:
15
+
16
+ - Return a product with a zero forecast and explain the mismatch, OR
17
+ - Return an informative error on create_media_buy (INSUFFICIENT_INVENTORY or
18
+ similar) with findings the buyer can act on.
19
+
20
+ What the seller must NOT do: crash, return a misleading non-zero forecast, or
21
+ silently drop the targeting and deliver against unintended inventory. Each of
22
+ those is a real failure mode we've seen in adapter integrations.
23
+
24
+ This scenario exercises the no-match path using the test kit's pre-populated
25
+ no_match_properties and no_match_collections lists.
26
+
27
+ agent:
28
+ interaction_model: media_buy_seller
29
+ capabilities:
30
+ - sells_media
31
+ - supports_property_list_targeting
32
+ - supports_collection_list_targeting
33
+ examples:
34
+ - "Sellers that validate inventory against buyer-supplied lists"
35
+
36
+ caller:
37
+ role: buyer_agent
38
+ example: "Pinnacle Agency (buyer)"
39
+
40
+ prerequisites:
41
+ description: |
42
+ The seller must resolve PropertyListReference / CollectionListReference against
43
+ its own inventory and report a truthful outcome when nothing matches.
44
+ test_kit: "test-kits/acme-outdoor.yaml"
45
+
46
+ phases:
47
+ - id: discover
48
+ title: "Discover products"
49
+ steps:
50
+ - id: get_products_brief
51
+ title: "Discover products"
52
+ task: get_products
53
+ schema_ref: "media-buy/get-products-request.json"
54
+ response_schema_ref: "media-buy/get-products-response.json"
55
+ doc_ref: "/media-buy/task-reference/get_products"
56
+ comply_scenario: full_sales_flow
57
+ stateful: false
58
+ expected: |
59
+ Return products the seller carries.
60
+ sample_request:
61
+ buying_mode: "brief"
62
+ brief: "Video inventory on outdoor lifestyle programming. Q3 flight."
63
+ filters:
64
+ is_fixed_price: true
65
+ account:
66
+ brand:
67
+ domain: "acmeoutdoor.example"
68
+ operator: "pinnacle-agency.example"
69
+
70
+ context:
71
+ correlation_id: "inventory_list_no_match--get_products_brief"
72
+ context_outputs:
73
+ - path: "products[0].product_id"
74
+ key: "product_id"
75
+ - path: "products[0].pricing_options[0].pricing_option_id"
76
+ key: "pricing_option_id"
77
+ validations:
78
+ - check: response_schema
79
+ description: "Response matches get-products-response.json schema"
80
+ - check: field_present
81
+ path: "products[0].pricing_options[0].fixed_price"
82
+ description: "The captured pricing option is fixed-price; fixed-price storyboards do not send bid_price"
83
+
84
+ - id: no_match_attempt
85
+ title: "Create buy with lists that match no inventory"
86
+ narrative: |
87
+ The buyer references the no-match property list and the no-match collection
88
+ list. Neither list resolves to anything in the seller's catalog. The seller
89
+ must either (a) accept the buy and surface a zero-delivery expectation, or
90
+ (b) reject it with an informative error. Silent success with undefined
91
+ delivery behaviour is not acceptable.
92
+
93
+ steps:
94
+ - id: create_buy_no_match
95
+ title: "create_media_buy against empty intersections"
96
+ task: create_media_buy
97
+ schema_ref: "media-buy/create-media-buy-request.json"
98
+ response_schema_ref: "media-buy/create-media-buy-response.json"
99
+ doc_ref: "/media-buy/task-reference/create_media_buy"
100
+ comply_scenario: create_media_buy
101
+ stateful: true
102
+ expected: |
103
+ One of two acceptable outcomes:
104
+
105
+ 1. Buy accepted with zero-forecast reporting — status may be
106
+ pending_creatives/pending_start/active, but the seller returns
107
+ packages with forecast indicating zero deliverable inventory and
108
+ a message explaining the list mismatch.
109
+
110
+ 2. Buy rejected with an informative error — typically
111
+ INSUFFICIENT_INVENTORY or INVALID_TARGETING — including findings
112
+ that identify which list(s) matched nothing.
113
+
114
+ What is NOT acceptable: a silently-successful buy with normal forecast
115
+ numbers, or a crash / non-AdCP error shape.
116
+
117
+ sample_request:
118
+ brand:
119
+ domain: "acmeoutdoor.example"
120
+ account:
121
+ brand:
122
+ domain: "acmeoutdoor.example"
123
+ operator: "pinnacle-agency.example"
124
+ idempotency_key: "$generate:uuid_v4#inventory_list_no_match_create_buy"
125
+ start_time: "2026-07-01T00:00:00Z"
126
+ end_time: "2026-09-30T23:59:59Z"
127
+ packages:
128
+ - product_id: "$context.product_id"
129
+ budget: 10000
130
+ pricing_option_id: "$context.pricing_option_id"
131
+ targeting_overlay:
132
+ property_list:
133
+ agent_url: "https://governance.pinnacle-agency.example"
134
+ list_id: "acme_outdoor_no_match_v1"
135
+ collection_list:
136
+ agent_url: "https://governance.pinnacle-agency.example"
137
+ list_id: "acme_outdoor_no_match_collections_v1"
138
+
139
+ context:
140
+ correlation_id: "inventory_list_no_match--create_buy_no_match"
141
+ validations:
142
+ - check: field_present
143
+ path: "context"
144
+ description: "Response echoes back the context object (success or error)"
145
+ - check: field_value
146
+ path: "context.correlation_id"
147
+ value: "inventory_list_no_match--create_buy_no_match"
148
+ description: "Context correlation_id returned unchanged"