@adcp/sdk 7.10.2 → 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 (305) 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/index.d.ts +1 -1
  270. package/dist/lib/index.d.ts.map +1 -1
  271. package/dist/lib/index.js +9 -5
  272. package/dist/lib/index.js.map +1 -1
  273. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  274. package/dist/lib/testing/storyboard/default-invariants.js +30 -1
  275. package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
  276. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  277. package/dist/lib/testing/storyboard/runner.js +84 -21
  278. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  279. package/dist/lib/testing/storyboard/types.d.ts +21 -0
  280. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  281. package/dist/lib/testing/storyboard/types.js.map +1 -1
  282. package/dist/lib/testing/types.d.ts +9 -0
  283. package/dist/lib/testing/types.d.ts.map +1 -1
  284. package/dist/lib/types/schemas.generated.d.ts +6707 -12040
  285. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  286. package/dist/lib/types/schemas.generated.js +1 -1
  287. package/dist/lib/types/schemas.generated.js.map +1 -1
  288. package/dist/lib/utils/signal-id-builders.d.ts +19 -0
  289. package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
  290. package/dist/lib/utils/signal-id-builders.js +30 -0
  291. package/dist/lib/utils/signal-id-builders.js.map +1 -1
  292. package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
  293. package/dist/lib/utils/tool-request-schemas.js +3 -0
  294. package/dist/lib/utils/tool-request-schemas.js.map +1 -1
  295. package/dist/lib/v2/projection/constants.d.ts +28 -0
  296. package/dist/lib/v2/projection/constants.d.ts.map +1 -0
  297. package/dist/lib/v2/projection/constants.js +31 -0
  298. package/dist/lib/v2/projection/constants.js.map +1 -0
  299. package/dist/lib/v2/projection/registry.d.ts.map +1 -1
  300. package/dist/lib/v2/projection/registry.js +9 -4
  301. package/dist/lib/v2/projection/registry.js.map +1 -1
  302. package/dist/lib/version.d.ts +3 -3
  303. package/dist/lib/version.js +3 -3
  304. package/package.json +1 -1
  305. package/skills/SHAPE-GOTCHAS.md +5 -0
@@ -0,0 +1,199 @@
1
+ id: media_buy_seller/governance_conditions
2
+ version: "1.0.0"
3
+ title: "Seller attaches conditions when governance approves with conditions"
4
+ category: media_buy_seller
5
+ summary: "Verifies that the seller attaches governance conditions to the buy when governance approves with conditions."
6
+ track: media_buy
7
+ required_tools:
8
+ - sync_governance
9
+ - get_products
10
+ - create_media_buy
11
+
12
+ narrative: |
13
+ This is a multi-agent test. The test harness sets up a governance plan on a governance
14
+ agent with custom policies that trigger conditions (e.g., "CTV buys require weekly
15
+ delivery reporting"). The buyer creates a CTV buy within budget but matching a policy.
16
+
17
+ When the seller calls check_governance, the governance agent approves with conditions.
18
+ The seller must create the buy and include the governance conditions and context token
19
+ in its response.
20
+
21
+ By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
22
+ Override by supplying a different `governance_agent_url` in the run's initial context
23
+ (e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
24
+
25
+ context:
26
+ governance_agent_url: "https://test-agent.adcontextprotocol.org"
27
+
28
+ agent:
29
+ interaction_model: media_buy_seller
30
+ capabilities:
31
+ - sells_media
32
+ - governance_aware
33
+ examples:
34
+ - "Any media buy seller with governance support"
35
+
36
+ caller:
37
+ role: buyer_agent
38
+ example: "Pinnacle Agency (buyer)"
39
+
40
+ prerequisites:
41
+ description: |
42
+ A governance agent that supports sync_plans and check_governance.
43
+ test_kit: "test-kits/acme-outdoor.yaml"
44
+
45
+ phases:
46
+ - id: governance_plan_setup
47
+ title: "Set up conditional governance plan"
48
+ narrative: |
49
+ Create a governance plan on the governance agent with custom policies that
50
+ trigger conditions. The plan has sufficient budget but policies that require
51
+ conditions on CTV buys.
52
+
53
+ steps:
54
+ - id: sync_plans
55
+ title: "Create conditional governance plan"
56
+ task: sync_plans
57
+ schema_ref: "governance/sync-plans-request.json"
58
+ response_schema_ref: "governance/sync-plans-response.json"
59
+ doc_ref: "/governance/campaign/tasks/sync_plans"
60
+ stateful: true
61
+ expected: |
62
+ The governance agent acknowledges the plan with a plan_id.
63
+ sample_request:
64
+ idempotency_key: "$generate:uuid_v4#governance_conditions_sync_plans"
65
+ plans:
66
+ - plan_id: "comply-gov-conditions-plan"
67
+ brand:
68
+ domain: "acmeoutdoor.example"
69
+ objectives: "Q2 CTV campaign with reporting requirements"
70
+ budget:
71
+ total: 100000
72
+ currency: "USD"
73
+ reallocation_threshold: 100000
74
+ flight:
75
+ start: "2026-04-01T00:00:00Z"
76
+ end: "2026-06-30T23:59:59Z"
77
+ countries: ["US", "CA"]
78
+ custom_policies:
79
+ - policy_id: "ctv_weekly_reporting"
80
+ enforcement: "must"
81
+ policy: "CTV buys require weekly delivery reporting."
82
+ - policy_id: "ugc_brand_safety"
83
+ enforcement: "must"
84
+ policy: "UGC placements require brand safety review before activation."
85
+ validations:
86
+ - check: response_schema
87
+ description: "Response matches sync-plans-response.json schema"
88
+
89
+ - id: seller_setup
90
+ title: "Account and governance registration on seller"
91
+ steps:
92
+ - id: sync_accounts
93
+ title: "Establish account with seller"
94
+ task: sync_accounts
95
+ schema_ref: "account/sync-accounts-request.json"
96
+ response_schema_ref: "account/sync-accounts-response.json"
97
+ doc_ref: "/accounts/tasks/sync_accounts"
98
+ stateful: true
99
+ expected: |
100
+ Return the account with account_id and status active.
101
+ sample_request:
102
+ accounts:
103
+ - brand:
104
+ domain: "acmeoutdoor.example"
105
+ operator: "pinnacle-agency.example"
106
+ billing: "operator"
107
+ payment_terms: "net_30"
108
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_accounts"
109
+ validations:
110
+ - check: response_schema
111
+ description: "Response matches sync-accounts-response.json schema"
112
+ - check: field_present
113
+ path: "accounts[0].account_id"
114
+ description: "Account has a platform-assigned ID"
115
+
116
+ - id: sync_governance
117
+ title: "Register governance agent with seller"
118
+ task: sync_governance
119
+ schema_ref: "account/sync-governance-request.json"
120
+ response_schema_ref: "account/sync-governance-response.json"
121
+ doc_ref: "/accounts/tasks/sync_governance"
122
+ stateful: true
123
+ expected: |
124
+ Acknowledge the governance agent registration.
125
+ sample_request:
126
+ accounts:
127
+ - account:
128
+ brand:
129
+ domain: "acmeoutdoor.example"
130
+ operator: "pinnacle-agency.example"
131
+ governance_agents:
132
+ - url: "$context.governance_agent_url"
133
+ authentication:
134
+ schemes: ["Bearer"]
135
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
136
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_governance"
137
+ validations:
138
+ - check: response_schema
139
+ description: "Response matches sync-governance-response.json schema"
140
+
141
+ - id: buy_with_conditions
142
+ title: "Create CTV buy triggering governance conditions"
143
+ steps:
144
+ - id: get_products_brief
145
+ title: "Discover CTV products"
146
+ task: get_products
147
+ schema_ref: "media-buy/get-products-request.json"
148
+ response_schema_ref: "media-buy/get-products-response.json"
149
+ doc_ref: "/media-buy/task-reference/get_products"
150
+ comply_scenario: full_sales_flow
151
+ stateful: false
152
+ expected: |
153
+ Return CTV/video products matching the brief.
154
+ sample_request:
155
+ buying_mode: "brief"
156
+ brief: "CTV and connected TV inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
157
+ account:
158
+ brand:
159
+ domain: "acmeoutdoor.example"
160
+ operator: "pinnacle-agency.example"
161
+ validations:
162
+ - check: response_schema
163
+ description: "Response matches get-products-response.json schema"
164
+ - check: field_present
165
+ path: "products"
166
+ description: "Response contains products"
167
+
168
+ - id: create_media_buy_conditions
169
+ title: "Create CTV buy (governance approves with conditions)"
170
+ task: create_media_buy
171
+ schema_ref: "media-buy/create-media-buy-request.json"
172
+ response_schema_ref: "media-buy/create-media-buy-response.json"
173
+ doc_ref: "/media-buy/task-reference/create_media_buy"
174
+ comply_scenario: create_media_buy
175
+ stateful: true
176
+ expected: |
177
+ The buy succeeds with governance conditions attached:
178
+ - media_buy_id: present
179
+ - media_buy_status: active, pending_start, or pending_creatives (deprecated top-level status may mirror this during the 3.1 migration window)
180
+ - governance_context: token from the governance agent
181
+ - conditions visible to the buyer
182
+ sample_request:
183
+ brand:
184
+ domain: "acmeoutdoor.example"
185
+ account:
186
+ brand:
187
+ domain: "acmeoutdoor.example"
188
+ operator: "pinnacle-agency.example"
189
+ sandbox: true
190
+ start_time: "2026-04-01T00:00:00Z"
191
+ end_time: "2026-06-30T23:59:59Z"
192
+ packages:
193
+ - product_id: "outdoor_ctv_q2"
194
+ budget: 25000
195
+ pricing_option_id: "cpm_standard"
196
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_buy_with_conditions_create_media_buy_conditions"
197
+ validations:
198
+ - check: response_schema
199
+ description: "Response matches create-media-buy-response.json schema"
@@ -0,0 +1,204 @@
1
+ id: media_buy_seller/governance_denied
2
+ version: "1.0.0"
3
+ title: "Seller rejects buy when governance denies"
4
+ category: media_buy_seller
5
+ summary: "Verifies that the seller rejects a media buy and propagates the denial when governance denies the transaction."
6
+ track: media_buy
7
+ required_tools:
8
+ - sync_governance
9
+ - get_products
10
+ - create_media_buy
11
+
12
+ narrative: |
13
+ This is a multi-agent test. The test harness sets up a governance plan on a governance
14
+ agent with a strict $10K budget, then registers that agent with the seller. The buyer
15
+ attempts a $50K media buy which exceeds the plan's budget.
16
+
17
+ When the seller calls check_governance, the governance agent denies because the
18
+ requested budget exceeds the plan total. The seller must reject the buy and propagate
19
+ the denial back to the buyer.
20
+
21
+ By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
22
+ Override by supplying a different `governance_agent_url` in the run's initial context
23
+ (e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
24
+
25
+ context:
26
+ governance_agent_url: "https://test-agent.adcontextprotocol.org"
27
+
28
+ agent:
29
+ interaction_model: media_buy_seller
30
+ capabilities:
31
+ - sells_media
32
+ - governance_aware
33
+ examples:
34
+ - "Any media buy seller with governance support"
35
+
36
+ caller:
37
+ role: buyer_agent
38
+ example: "Pinnacle Agency (buyer)"
39
+
40
+ prerequisites:
41
+ description: |
42
+ A governance agent that supports sync_plans and check_governance.
43
+ test_kit: "test-kits/acme-outdoor.yaml"
44
+
45
+ phases:
46
+ - id: governance_plan_setup
47
+ title: "Set up strict governance plan"
48
+ narrative: |
49
+ Create a governance plan on the governance agent with a strict $10K budget
50
+ and agent_limited authority. The subsequent $50K buy will exceed the plan
51
+ budget and should be denied.
52
+
53
+ steps:
54
+ - id: sync_plans
55
+ title: "Create strict governance plan"
56
+ task: sync_plans
57
+ schema_ref: "governance/sync-plans-request.json"
58
+ response_schema_ref: "governance/sync-plans-response.json"
59
+ doc_ref: "/governance/campaign/tasks/sync_plans"
60
+ stateful: true
61
+ expected: |
62
+ The governance agent acknowledges the plan with a plan_id.
63
+ sample_request:
64
+ idempotency_key: "$generate:uuid_v4#governance_denied_sync_plans"
65
+ plans:
66
+ - plan_id: "comply-gov-denied-plan"
67
+ brand:
68
+ domain: "acmeoutdoor.example"
69
+ objectives: "Small test campaign — limited budget authority"
70
+ budget:
71
+ total: 10000
72
+ currency: "USD"
73
+ reallocation_threshold: 5000
74
+ flight:
75
+ start: "2026-04-01T00:00:00Z"
76
+ end: "2026-06-30T23:59:59Z"
77
+ countries: ["US"]
78
+ validations:
79
+ - check: response_schema
80
+ description: "Response matches sync-plans-response.json schema"
81
+
82
+ - id: seller_setup
83
+ title: "Account and governance registration on seller"
84
+ steps:
85
+ - id: sync_accounts
86
+ title: "Establish account with seller"
87
+ task: sync_accounts
88
+ schema_ref: "account/sync-accounts-request.json"
89
+ response_schema_ref: "account/sync-accounts-response.json"
90
+ doc_ref: "/accounts/tasks/sync_accounts"
91
+ stateful: true
92
+ expected: |
93
+ Return the account with account_id and status active.
94
+ sample_request:
95
+ accounts:
96
+ - brand:
97
+ domain: "acmeoutdoor.example"
98
+ operator: "pinnacle-agency.example"
99
+ billing: "operator"
100
+ payment_terms: "net_30"
101
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_seller_setup_sync_accounts"
102
+ validations:
103
+ - check: response_schema
104
+ description: "Response matches sync-accounts-response.json schema"
105
+ - check: field_present
106
+ path: "accounts[0].account_id"
107
+ description: "Account has a platform-assigned ID"
108
+
109
+ - id: sync_governance
110
+ title: "Register governance agent with seller"
111
+ task: sync_governance
112
+ schema_ref: "account/sync-governance-request.json"
113
+ response_schema_ref: "account/sync-governance-response.json"
114
+ doc_ref: "/accounts/tasks/sync_governance"
115
+ stateful: true
116
+ expected: |
117
+ Acknowledge the governance agent registration.
118
+ sample_request:
119
+ accounts:
120
+ - account:
121
+ brand:
122
+ domain: "acmeoutdoor.example"
123
+ operator: "pinnacle-agency.example"
124
+ governance_agents:
125
+ - url: "$context.governance_agent_url"
126
+ authentication:
127
+ schemes: ["Bearer"]
128
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
129
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_seller_setup_sync_governance"
130
+ validations:
131
+ - check: response_schema
132
+ description: "Response matches sync-governance-response.json schema"
133
+
134
+ - id: buy_denied
135
+ title: "Create buy exceeding governance limits"
136
+ steps:
137
+ - id: get_products_brief
138
+ title: "Discover products"
139
+ task: get_products
140
+ schema_ref: "media-buy/get-products-request.json"
141
+ response_schema_ref: "media-buy/get-products-response.json"
142
+ doc_ref: "/media-buy/task-reference/get_products"
143
+ comply_scenario: full_sales_flow
144
+ stateful: false
145
+ expected: |
146
+ Return products matching the brief.
147
+ sample_request:
148
+ buying_mode: "brief"
149
+ brief: "Premium video and display on outdoor lifestyle. Q2 flight, $50K budget. Adults 25-54, US."
150
+ account:
151
+ brand:
152
+ domain: "acmeoutdoor.example"
153
+ operator: "pinnacle-agency.example"
154
+ validations:
155
+ - check: response_schema
156
+ description: "Response matches get-products-response.json schema"
157
+ - check: field_present
158
+ path: "products"
159
+ description: "Response contains products"
160
+
161
+ - id: create_media_buy_denied
162
+ title: "Create buy (governance denies — should fail)"
163
+ task: create_media_buy
164
+ schema_ref: "media-buy/create-media-buy-request.json"
165
+ response_schema_ref: "media-buy/create-media-buy-response.json"
166
+ doc_ref: "/media-buy/task-reference/create_media_buy"
167
+ comply_scenario: create_media_buy
168
+ stateful: true
169
+ expect_error: true
170
+ negative_path: payload_well_formed
171
+ expected: |
172
+ The buy is rejected because governance denied — the $50K buy exceeds
173
+ the plan's $10K budget. The seller propagates the denial with findings.
174
+
175
+ Wire placement (Case-2 of the GOVERNANCE_DENIED rule). `create_media_buy`
176
+ has no structured rejection arm (its `oneOf` covers Success / Error /
177
+ Submitted only), so the seller populates `errors[].code: GOVERNANCE_DENIED`
178
+ in the payload AND `adcp_error.code: GOVERNANCE_DENIED` on the envelope per
179
+ the two-layer model, AND flips transport-level failure markers (HTTP 4xx /
180
+ MCP `isError: true` / A2A `failed`). Compare with `brand_rights/governance_denied`,
181
+ which exercises Case-1 (rejection arm is the canonical denial shape; no
182
+ error code on the wire; transport markers stay green).
183
+ sample_request:
184
+ brand:
185
+ domain: "acmeoutdoor.example"
186
+ account:
187
+ brand:
188
+ domain: "acmeoutdoor.example"
189
+ operator: "pinnacle-agency.example"
190
+ sandbox: true
191
+ idempotency_key: "$generate:uuid_v4#governance_denied_create_media_buy"
192
+ start_time: "2026-04-01T00:00:00Z"
193
+ end_time: "2026-06-30T23:59:59Z"
194
+ packages:
195
+ - product_id: "outdoor_display_q2"
196
+ budget: 30000
197
+ pricing_option_id: "cpm_standard"
198
+ - product_id: "outdoor_video_q2"
199
+ budget: 20000
200
+ pricing_option_id: "cpm_standard"
201
+ validations:
202
+ - check: error_code
203
+ value: "GOVERNANCE_DENIED"
204
+ description: "Error code indicates governance denial — Case-2 wire placement: create_media_buy has no rejection arm, so GOVERNANCE_DENIED surfaces via errors[].code or adcp_error.code (per the two-layer model in error-handling.mdx)"
@@ -0,0 +1,252 @@
1
+ id: media_buy_seller/governance_denied_recovery
2
+ version: "1.0.0"
3
+ title: "Seller accepts corrected buy after governance denial"
4
+ category: media_buy_seller
5
+ summary: "Verifies that a buyer can recover from GOVERNANCE_DENIED by shrinking the buy to within plan limits and retrying."
6
+ track: media_buy
7
+ required_tools:
8
+ - sync_governance
9
+ - get_products
10
+ - create_media_buy
11
+
12
+ narrative: |
13
+ GOVERNANCE_DENIED is a correctable error, not a dead end. The buyer must be able to
14
+ read the denial findings, adjust the media buy, and retry. This scenario exercises the
15
+ full loop: strict governance plan ($10K), failed $50K buy that is denied, then a
16
+ corrected $8K buy that fits within the plan and is approved.
17
+
18
+ The seller must propagate the governance findings unchanged so the buyer can identify
19
+ exactly which constraint was violated (budget authority, brand policy, etc.) and
20
+ correct it.
21
+
22
+ By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
23
+ Override by supplying a different `governance_agent_url` in the run's initial context
24
+ (e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
25
+
26
+ context:
27
+ governance_agent_url: "https://test-agent.adcontextprotocol.org"
28
+
29
+ agent:
30
+ interaction_model: media_buy_seller
31
+ capabilities:
32
+ - sells_media
33
+ - governance_aware
34
+ examples:
35
+ - "Any media buy seller with governance support"
36
+
37
+ caller:
38
+ role: buyer_agent
39
+ example: "Pinnacle Agency (buyer)"
40
+
41
+ prerequisites:
42
+ description: |
43
+ A governance agent that supports sync_plans and check_governance.
44
+ test_kit: "test-kits/acme-outdoor.yaml"
45
+
46
+ phases:
47
+ - id: governance_plan_setup
48
+ title: "Set up strict governance plan"
49
+ narrative: |
50
+ Create a governance plan with a $10K budget. The initial $50K buy will exceed this
51
+ limit; the retry at $8K will fit.
52
+
53
+ steps:
54
+ - id: sync_plans
55
+ title: "Create strict governance plan"
56
+ task: sync_plans
57
+ schema_ref: "governance/sync-plans-request.json"
58
+ response_schema_ref: "governance/sync-plans-response.json"
59
+ doc_ref: "/governance/campaign/tasks/sync_plans"
60
+ stateful: true
61
+ expected: |
62
+ The governance agent acknowledges the plan.
63
+ sample_request:
64
+ idempotency_key: "$generate:uuid_v4#governance_denied_recovery_sync_plans"
65
+ plans:
66
+ - plan_id: "comply-gov-recovery-plan"
67
+ brand:
68
+ domain: "acmeoutdoor.example"
69
+ objectives: "Strict-budget plan for denial + recovery validation"
70
+ budget:
71
+ total: 10000
72
+ currency: "USD"
73
+ reallocation_threshold: 5000
74
+ flight:
75
+ start: "2026-04-01T00:00:00Z"
76
+ end: "2026-06-30T23:59:59Z"
77
+ countries: ["US"]
78
+ validations:
79
+ - check: response_schema
80
+ description: "Response matches sync-plans-response.json schema"
81
+
82
+ - id: seller_setup
83
+ title: "Account and governance registration on seller"
84
+ steps:
85
+ - id: sync_accounts
86
+ title: "Establish account with seller"
87
+ task: sync_accounts
88
+ schema_ref: "account/sync-accounts-request.json"
89
+ response_schema_ref: "account/sync-accounts-response.json"
90
+ doc_ref: "/accounts/tasks/sync_accounts"
91
+ stateful: true
92
+ expected: |
93
+ Return the account with account_id active.
94
+ sample_request:
95
+ accounts:
96
+ - brand:
97
+ domain: "acmeoutdoor.example"
98
+ operator: "pinnacle-agency.example"
99
+ billing: "operator"
100
+ payment_terms: "net_30"
101
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_recovery_seller_setup_sync_accounts"
102
+ validations:
103
+ - check: response_schema
104
+ description: "Response matches sync-accounts-response.json schema"
105
+ - check: field_present
106
+ path: "accounts[0].account_id"
107
+ description: "Account has a platform-assigned ID"
108
+
109
+ - id: sync_governance
110
+ title: "Register governance agent with seller"
111
+ task: sync_governance
112
+ schema_ref: "account/sync-governance-request.json"
113
+ response_schema_ref: "account/sync-governance-response.json"
114
+ doc_ref: "/accounts/tasks/sync_governance"
115
+ stateful: true
116
+ expected: |
117
+ Acknowledge the governance agent registration.
118
+ sample_request:
119
+ accounts:
120
+ - account:
121
+ brand:
122
+ domain: "acmeoutdoor.example"
123
+ operator: "pinnacle-agency.example"
124
+ governance_agents:
125
+ - url: "$context.governance_agent_url"
126
+ authentication:
127
+ schemes: ["Bearer"]
128
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
129
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_recovery_seller_setup_sync_governance"
130
+ validations:
131
+ - check: response_schema
132
+ description: "Response matches sync-governance-response.json schema"
133
+
134
+ - id: buy_denied
135
+ title: "Initial buy exceeds plan — governance denies"
136
+ steps:
137
+ - id: get_products_brief
138
+ title: "Discover products"
139
+ task: get_products
140
+ schema_ref: "media-buy/get-products-request.json"
141
+ response_schema_ref: "media-buy/get-products-response.json"
142
+ doc_ref: "/media-buy/task-reference/get_products"
143
+ comply_scenario: full_sales_flow
144
+ stateful: false
145
+ expected: |
146
+ Return products matching the brief.
147
+ sample_request:
148
+ buying_mode: "brief"
149
+ brief: "Display inventory on outdoor lifestyle content. Q2 flight."
150
+ filters:
151
+ is_fixed_price: true
152
+ account:
153
+ brand:
154
+ domain: "acmeoutdoor.example"
155
+ operator: "pinnacle-agency.example"
156
+ context_outputs:
157
+ - path: "products[0].product_id"
158
+ key: "product_id"
159
+ - path: "products[0].pricing_options[0].pricing_option_id"
160
+ key: "pricing_option_id"
161
+ validations:
162
+ - check: response_schema
163
+ description: "Response matches get-products-response.json schema"
164
+ - check: field_present
165
+ path: "products"
166
+ description: "Response contains products"
167
+ - check: field_present
168
+ path: "products[0].pricing_options[0].fixed_price"
169
+ description: "The captured pricing option is fixed-price; fixed-price storyboards do not send bid_price"
170
+
171
+ - id: create_media_buy_denied
172
+ title: "Attempt $50K buy — denied"
173
+ task: create_media_buy
174
+ schema_ref: "media-buy/create-media-buy-request.json"
175
+ response_schema_ref: "media-buy/create-media-buy-response.json"
176
+ doc_ref: "/media-buy/task-reference/create_media_buy"
177
+ comply_scenario: create_media_buy
178
+ expect_error: true
179
+ negative_path: payload_well_formed
180
+ stateful: true
181
+ expected: |
182
+ The buy is rejected with GOVERNANCE_DENIED. The response includes findings
183
+ from the governance agent explaining which constraint was exceeded.
184
+
185
+ sample_request:
186
+ brand:
187
+ domain: "acmeoutdoor.example"
188
+ account:
189
+ brand:
190
+ domain: "acmeoutdoor.example"
191
+ operator: "pinnacle-agency.example"
192
+ idempotency_key: "$generate:uuid_v4#governance_denied_recovery_create_media_buy_denied"
193
+ start_time: "2026-04-01T00:00:00Z"
194
+ end_time: "2026-06-30T23:59:59Z"
195
+ packages:
196
+ - product_id: "$context.product_id"
197
+ budget: 50000
198
+ pricing_option_id: "$context.pricing_option_id"
199
+ context:
200
+ correlation_id: "governance_denied_recovery--create_media_buy_denied"
201
+ validations:
202
+ - check: error_code
203
+ value: "GOVERNANCE_DENIED"
204
+ description: "Error code is GOVERNANCE_DENIED"
205
+ - check: field_value
206
+ path: "context.correlation_id"
207
+ value: "governance_denied_recovery--create_media_buy_denied"
208
+ description: "Response echoes context.correlation_id verbatim on error responses (echo contract applies to both success and failure)"
209
+
210
+ - id: buy_retried
211
+ title: "Corrected buy within plan — governance approves"
212
+ narrative: |
213
+ The buyer reads the denial findings, shrinks the budget to $8K (within the $10K
214
+ plan), and retries with a fresh idempotency_key. The seller consults governance
215
+ again, which now approves.
216
+
217
+ steps:
218
+ - id: create_media_buy_retry
219
+ title: "Retry with $8K — approved"
220
+ task: create_media_buy
221
+ schema_ref: "media-buy/create-media-buy-request.json"
222
+ response_schema_ref: "media-buy/create-media-buy-response.json"
223
+ doc_ref: "/media-buy/task-reference/create_media_buy"
224
+ comply_scenario: create_media_buy
225
+ stateful: true
226
+ expected: |
227
+ The buy succeeds. Governance approves because $8K fits within the $10K plan
228
+ budget. The seller returns a media_buy_id.
229
+
230
+ sample_request:
231
+ brand:
232
+ domain: "acmeoutdoor.example"
233
+ account:
234
+ brand:
235
+ domain: "acmeoutdoor.example"
236
+ operator: "pinnacle-agency.example"
237
+ idempotency_key: "$generate:uuid_v4#governance_denied_recovery_create_media_buy_retry"
238
+ start_time: "2026-04-01T00:00:00Z"
239
+ end_time: "2026-06-30T23:59:59Z"
240
+ packages:
241
+ - product_id: "$context.product_id"
242
+ budget: 8000
243
+ pricing_option_id: "$context.pricing_option_id"
244
+ context_outputs:
245
+ - name: media_buy_id
246
+ path: "media_buy_id"
247
+ validations:
248
+ - check: response_schema
249
+ description: "Response matches create-media-buy-response.json schema"
250
+ - check: field_present
251
+ path: "media_buy_id"
252
+ description: "Seller returns a media_buy_id after governance approves"