@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,601 @@
1
+ id: sales_guaranteed
2
+ version: "1.0.0"
3
+ title: "Guaranteed media buy with human IO approval"
4
+ protocol: media-buy
5
+ category: sales_guaranteed
6
+ summary: "Seller agent that requires human-in-the-loop IO signing before guaranteed media buys go live."
7
+ track: media_buy
8
+ required_tools:
9
+ - sync_governance
10
+ - get_products
11
+ - create_media_buy
12
+ requires_scenarios:
13
+ - media_buy_seller/refine_products
14
+ - media_buy_seller/delivery_reporting
15
+ - media_buy_seller/measurement_terms_rejected
16
+ - media_buy_seller/pending_creatives_to_start
17
+ - media_buy_seller/inventory_list_targeting
18
+ - media_buy_seller/inventory_list_no_match
19
+ - media_buy_seller/invalid_transitions
20
+ - media_buy_seller/proposal_finalize
21
+ - media_buy_seller/proposal_finalize_asap_timing
22
+ - media_buy_seller/proposal_not_found_errors
23
+ - governance_aware_seller/governance_multi_agent_rejected
24
+
25
+ # Cross-step assertion (adcp#2664). status.monotonic rejects resource
26
+ # status transitions observed across steps that aren't on the spec
27
+ # lifecycle graph — e.g. active → pending_creatives on a media_buy.
28
+ invariants:
29
+ - status.monotonic
30
+
31
+ context:
32
+ governance_agent_url: "https://test-agent.adcontextprotocol.org"
33
+
34
+ narrative: |
35
+ You run a sell-side platform that requires human approval before guaranteed media buys go
36
+ live. When a buyer creates a guaranteed buy, your platform returns an A2A task in the
37
+ submitted state with a task_id — no media_buy_id is issued yet because IO signing may fail.
38
+ A human reviewer on your side reviews the deal terms and signs the IO through your own
39
+ internal workflow.
40
+
41
+ The buyer either polls tasks/get with the task_id or configures a push_notification_config
42
+ webhook to receive a callback when IO signing completes. Only on task completion does your
43
+ platform issue a media_buy_id and the final CreateMediaBuy result; the buyer then calls
44
+ get_media_buys to confirm the buy is active and sync creatives.
45
+
46
+ This storyboard isolates the guaranteed approval path — the async handshake between agent
47
+ automation and human decision-making that makes guaranteed buys work in practice. IO review
48
+ is modelled entirely at the A2A task layer; there is no interim "pending_approval" media buy
49
+ status (that value only exists on Account.status, not MediaBuy.status).
50
+
51
+ Proposal-driven workflows are part of guaranteed selling: most guaranteed deals start with
52
+ an RFP/brief, generate a proposal with curated bundles and rationale, refine, finalize to
53
+ committed status with firm pricing and an inventory hold, and then the buyer accepts via
54
+ create_media_buy. The `media_buy_seller/proposal_finalize` scenario covers that flow and is
55
+ capability-gated on `media_buy.supports_proposals` — sellers that declare `false` (or omit
56
+ the field, since the schema default is false) skip it with skip_result.reason: not_applicable;
57
+ sellers that explicitly declare `true` are graded against it. Direct-buy guaranteed sellers
58
+ (auction PG, retail SKU, quoted-rate) declare `supports_proposals: false`; full-service
59
+ guaranteed sellers declare `true`.
60
+
61
+ The requires_io_approval capability is scoped to creates that reference products with
62
+ delivery_type: guaranteed (those in this storyboard's primary fixtures). Four of the
63
+ general seller scenarios included via requires_scenarios — measurement_terms_rejected,
64
+ pending_creatives_to_start, inventory_list_targeting, and invalid_transitions — use
65
+ open-ended product briefs and must complete creates synchronously, returning a media_buy_id
66
+ directly rather than a task envelope. This storyboard seeds non-guaranteed fixture products
67
+ so those four scenarios have a synchronous-create path available. A seller whose catalog
68
+ contains only guaranteed products will fail those four shared scenarios.
69
+
70
+ agent:
71
+ interaction_model: media_buy_seller
72
+ capabilities:
73
+ - sells_media
74
+ - supports_guaranteed
75
+ - requires_io_approval
76
+ examples:
77
+ - "Premium publisher with IO requirements"
78
+ - "Retail media network with sales approval"
79
+ - "CTV platform with guaranteed deals"
80
+
81
+ caller:
82
+ role: buyer_agent
83
+ example: "Scope3 (DSP)"
84
+
85
+ prerequisites:
86
+ description: |
87
+ The caller needs a brand identity and operator credentials for account setup.
88
+ The test kit provides a sample brand (Acme Outdoor) with campaign parameters
89
+ suitable for testing the guaranteed approval flow.
90
+ test_kit: "test-kits/acme-outdoor.yaml"
91
+ controller_seeding: true
92
+
93
+ fixtures:
94
+ products:
95
+ # Non-guaranteed products listed first so open-brief get_products calls (used by
96
+ # requires_scenarios) resolve to products[0] as a non-guaranteed product, enabling
97
+ # synchronous creates. The four shared scenarios (measurement_terms_rejected,
98
+ # pending_creatives_to_start, inventory_list_targeting, invalid_transitions) capture
99
+ # products[0].product_id and must get a non-guaranteed ID to complete synchronously.
100
+ - product_id: "display_outdoor_non_guaranteed"
101
+ delivery_type: "non_guaranteed"
102
+ channels: ["display"]
103
+ format_ids:
104
+ - id: "display_300x250"
105
+ - product_id: "video_outdoor_non_guaranteed"
106
+ delivery_type: "non_guaranteed"
107
+ channels: ["video"]
108
+ format_ids:
109
+ - id: "video_30s"
110
+ # Guaranteed products used by the main storyboard phases (hardcoded in sample_requests).
111
+ - product_id: "sports_preroll_q2_guaranteed"
112
+ delivery_type: "guaranteed"
113
+ channels: ["video"]
114
+ format_ids:
115
+ - id: "video_30s"
116
+ - product_id: "outdoor_ctv_q2_guaranteed"
117
+ delivery_type: "guaranteed"
118
+ channels: ["ctv"]
119
+ format_ids:
120
+ - id: "video_30s"
121
+ pricing_options:
122
+ - product_id: "display_outdoor_non_guaranteed"
123
+ pricing_option_id: "cpm_display_non_guaranteed"
124
+ pricing_model: "cpm"
125
+ currency: "USD"
126
+ floor_price: 5.0
127
+ - product_id: "video_outdoor_non_guaranteed"
128
+ pricing_option_id: "cpm_video_non_guaranteed"
129
+ pricing_model: "cpm"
130
+ currency: "USD"
131
+ floor_price: 12.0
132
+ - product_id: "sports_preroll_q2_guaranteed"
133
+ pricing_option_id: "cpm_guaranteed_fixed"
134
+ pricing_model: "cpm"
135
+ currency: "USD"
136
+ fixed_price: 35.0
137
+ - product_id: "outdoor_ctv_q2_guaranteed"
138
+ pricing_option_id: "cpm_guaranteed_fixed"
139
+ pricing_model: "cpm"
140
+ currency: "USD"
141
+ fixed_price: 45.0
142
+
143
+ phases:
144
+ - id: capability_discovery
145
+ title: "Capability discovery"
146
+ narrative: |
147
+ The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
148
+
149
+ steps:
150
+ - id: get_capabilities
151
+ title: "Check agent capabilities"
152
+ narrative: |
153
+ Verify that the agent declares the expected protocol support before
154
+ proceeding with domain-specific operations.
155
+ task: get_adcp_capabilities
156
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
157
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
158
+ doc_ref: "/protocol/get_adcp_capabilities"
159
+ comply_scenario: capability_discovery
160
+ stateful: false
161
+ expected: |
162
+ Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
163
+ sample_request:
164
+ context:
165
+ correlation_id: "sales_guaranteed--get_capabilities"
166
+ validations:
167
+ - check: response_schema
168
+ description: "Response matches get-adcp-capabilities-response.json schema"
169
+ - check: field_present
170
+ path: "supported_protocols"
171
+ description: "Agent declares supported protocols"
172
+
173
+ - check: field_present
174
+ path: "context"
175
+ description: "Response echoes back the context object"
176
+ - check: field_value
177
+ path: "context.correlation_id"
178
+ value: "sales_guaranteed--get_capabilities"
179
+ description: "Context correlation_id returned unchanged"
180
+ - id: account_setup
181
+ title: "Account setup"
182
+ narrative: |
183
+ Before buying anything, the buyer establishes an account relationship with
184
+ your platform. This is the handshake: the buyer tells you which brand and
185
+ agency (operator) they represent, and you return an account ID, status, and
186
+ any setup requirements.
187
+
188
+ steps:
189
+ - id: sync_accounts
190
+ title: "Establish account relationship"
191
+ narrative: |
192
+ The buyer registers their brand and operator with your platform. This is
193
+ the first call in any new relationship. Your platform validates the request,
194
+ provisions the account, and returns its status.
195
+ task: sync_accounts
196
+ schema_ref: "account/sync-accounts-request.json"
197
+ response_schema_ref: "account/sync-accounts-response.json"
198
+ doc_ref: "/accounts/tasks/sync_accounts"
199
+ stateful: true
200
+ expected: |
201
+ Return the account with:
202
+ - account_id: your platform's identifier for this relationship
203
+ - action: created or updated
204
+ - status: active or pending_approval
205
+ - account_scope: operator, brand, operator_brand, or agent
206
+ - setup: URL and message if pending_approval
207
+ - payment_terms: net_30, prepay, etc.
208
+
209
+ sample_request:
210
+ accounts:
211
+ - brand:
212
+ domain: "acmeoutdoor.example"
213
+ operator: "pinnacle-agency.example"
214
+ billing: "operator"
215
+ payment_terms: "net_30"
216
+
217
+ idempotency_key: "$generate:uuid_v4#sales_guaranteed_account_setup_sync_accounts"
218
+ context:
219
+ correlation_id: "sales_guaranteed--sync_accounts"
220
+ validations:
221
+ - check: response_schema
222
+ description: "Response matches sync-accounts-response.json schema"
223
+ - check: field_present
224
+ path: "accounts[0].account_id"
225
+ description: "Account has a platform-assigned ID"
226
+ - check: field_present
227
+ path: "accounts[0].status"
228
+ description: "Account has a status (active or pending_approval)"
229
+
230
+ - check: field_present
231
+ path: "context"
232
+ description: "Response echoes back the context object"
233
+ - check: field_value
234
+ path: "context.correlation_id"
235
+ value: "sales_guaranteed--sync_accounts"
236
+ description: "Context correlation_id returned unchanged"
237
+ - id: sync_governance
238
+ title: "Register governance agent"
239
+ narrative: |
240
+ The buyer registers the configured governance agent on the account before
241
+ accepting a guaranteed media buy.
242
+ task: sync_governance
243
+ schema_ref: "account/sync-governance-request.json"
244
+ response_schema_ref: "account/sync-governance-response.json"
245
+ doc_ref: "/accounts/tasks/sync_governance"
246
+ stateful: true
247
+ expected: |
248
+ Acknowledge governance registration for the account:
249
+ - status: synced
250
+ - governance_agents[0].url echoes the configured governance agent
251
+
252
+ sample_request:
253
+ accounts:
254
+ - account:
255
+ brand:
256
+ domain: "acmeoutdoor.example"
257
+ operator: "pinnacle-agency.example"
258
+ governance_agents:
259
+ - url: "$context.governance_agent_url"
260
+ authentication:
261
+ schemes: ["Bearer"]
262
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
263
+
264
+ idempotency_key: "$generate:uuid_v4#sales_guaranteed_account_setup_sync_governance"
265
+ context:
266
+ correlation_id: "sales_guaranteed--sync_governance"
267
+ validations:
268
+ - check: response_schema
269
+ description: "Response matches sync-governance-response.json schema"
270
+ - check: field_value
271
+ path: "accounts[0].status"
272
+ value: "synced"
273
+ description: "Governance agent is registered on the account"
274
+ - check: field_present
275
+ path: "context"
276
+ description: "Response echoes back the context object"
277
+ - check: field_value
278
+ path: "context.correlation_id"
279
+ value: "sales_guaranteed--sync_governance"
280
+ description: "Context correlation_id returned unchanged"
281
+ - id: product_discovery
282
+ title: "Discover guaranteed products"
283
+ narrative: |
284
+ The buyer sends a brief to discover your guaranteed inventory. The emphasis
285
+ here is on products with delivery_type: guaranteed — fixed-price, reserved
286
+ inventory that requires an IO commitment. Your platform returns products with
287
+ pricing, delivery forecasts, and SLA commitments.
288
+
289
+ steps:
290
+ - id: get_products_brief
291
+ title: "Send a brief targeting guaranteed inventory"
292
+ narrative: |
293
+ The buyer describes what they want, emphasizing guaranteed delivery. Your
294
+ platform returns products with delivery_type: guaranteed, including SLA
295
+ commitments, minimum spend requirements, and IO terms.
296
+ task: get_products
297
+ schema_ref: "media-buy/get-products-request.json"
298
+ response_schema_ref: "media-buy/get-products-response.json"
299
+ doc_ref: "/media-buy/task-reference/get_products"
300
+ comply_scenario: full_sales_flow
301
+ stateful: false
302
+ expected: |
303
+ Return guaranteed products matching the brief. Each product should include:
304
+ - product_id: unique identifier
305
+ - name and description
306
+ - delivery_type: guaranteed
307
+ - pricing_models: fixed CPM or flat-rate pricing
308
+ - forecast: committed impressions with SLA guarantees
309
+ - creative_format_ids: required creative formats
310
+ - minimum_spend or commitment terms if applicable
311
+
312
+ sample_request:
313
+ buying_mode: "brief"
314
+ brief: "Guaranteed premium video on sports and outdoor lifestyle publishers. Q2 flight, $50K budget. Adults 25-54, US only. Need completion rate SLA."
315
+ account:
316
+ brand:
317
+ domain: "acmeoutdoor.example"
318
+ operator: "pinnacle-agency.example"
319
+
320
+ context:
321
+ correlation_id: "sales_guaranteed--get_products_brief"
322
+ validations:
323
+ - check: response_schema
324
+ description: "Response matches get-products-response.json schema"
325
+ - check: field_present
326
+ path: "products"
327
+ description: "Response contains a products array"
328
+ - check: field_present
329
+ path: "products[0].product_id"
330
+ description: "Each product has a product_id"
331
+ - check: field_present
332
+ path: "products[0].delivery_type"
333
+ description: "Each product declares delivery_type: guaranteed"
334
+
335
+ - check: field_present
336
+ path: "context"
337
+ description: "Response echoes back the context object"
338
+ - check: field_value
339
+ path: "context.correlation_id"
340
+ value: "sales_guaranteed--get_products_brief"
341
+ description: "Context correlation_id returned unchanged"
342
+ - check: field_present
343
+ path: "products[0].format_ids"
344
+ description: "Products include format_ids for creative requirements"
345
+ - check: field_present
346
+ path: "products[0].format_ids[0].agent_url"
347
+ description: "Format IDs include agent_url — must match this agent's URL"
348
+ - check: field_present
349
+ path: "products[0].format_ids[0].id"
350
+ description: "Format IDs include id — must be accepted back in sync_creatives"
351
+ - id: create_buy_submitted
352
+ title: "Create guaranteed buy (task submitted for approval)"
353
+ narrative: |
354
+ The buyer creates a guaranteed media buy. Because your platform requires human
355
+ IO signing, the A2A task transitions to submitted rather than completed. The
356
+ buyer gets back a task_id and configures a webhook (or polls tasks/get) to be
357
+ notified when IO review finishes.
358
+
359
+ steps:
360
+ - id: create_media_buy
361
+ title: "Create a guaranteed media buy"
362
+ narrative: |
363
+ The buyer commits to guaranteed products with budgets and flight dates. Your
364
+ platform accepts the request but does not create the media buy yet. Instead,
365
+ the A2A task enters the submitted state — no media_buy_id is issued because
366
+ IO signing may fail. The buyer receives a task_id to watch.
367
+
368
+ The buyer includes push_notification_config so your platform can call back
369
+ when the IO is signed (completed) or rejected (failed).
370
+ task: create_media_buy
371
+ schema_ref: "media-buy/create-media-buy-request.json"
372
+ response_schema_ref: "media-buy/create-media-buy-response.json"
373
+ doc_ref: "/media-buy/task-reference/create_media_buy"
374
+ comply_scenario: create_media_buy
375
+ stateful: true
376
+ expected: |
377
+ Return an A2A task envelope in submitted state:
378
+ - status: submitted (task-level — the CreateMediaBuy success artifact is not yet produced)
379
+ - task_id / taskId: the handle the buyer polls or receives webhooks on
380
+ - message (optional): human-readable explanation (e.g., "Awaiting IO signature from sales team; typical turnaround 2–4 hours")
381
+
382
+ Do NOT return media_buy_id or packages yet — those land on the task's final artifact
383
+ when the task transitions to completed. Do NOT return completed status for guaranteed
384
+ buys that require IO signing. Do NOT use a "pending_approval" media buy status; that
385
+ value is not in MediaBuy.status — IO review is modelled at the task layer only.
386
+
387
+ sample_request:
388
+ brand:
389
+ domain: "acmeoutdoor.example"
390
+ account:
391
+ brand:
392
+ domain: "acmeoutdoor.example"
393
+ operator: "pinnacle-agency.example"
394
+ start_time: "2026-04-01T00:00:00Z"
395
+ end_time: "2026-06-30T23:59:59Z"
396
+ packages:
397
+ - product_id: "sports_preroll_q2_guaranteed"
398
+ budget: 30000
399
+ pricing_option_id: "cpm_guaranteed_fixed"
400
+ creative_assignments:
401
+ - creative_id: "video_30s_trail_pro"
402
+ - product_id: "outdoor_ctv_q2_guaranteed"
403
+ budget: 20000
404
+ pricing_option_id: "cpm_guaranteed_fixed"
405
+ push_notification_config:
406
+ url: "https://buyer.example/webhooks/adcp"
407
+ authentication:
408
+ schemes:
409
+ - "HMAC-SHA256"
410
+ credentials: "sales-guaranteed-webhook-secret-token"
411
+
412
+ idempotency_key: "$generate:uuid_v4#sales_guaranteed_create_buy_submitted_create_media_buy"
413
+ context:
414
+ correlation_id: "sales_guaranteed--create_media_buy"
415
+ context_outputs:
416
+ - name: media_buy_id
417
+ path: "task_completion.media_buy_id"
418
+ validations:
419
+ - check: response_schema
420
+ description: "Response matches create-media-buy-response.json schema"
421
+
422
+ - check: field_present
423
+ path: "context"
424
+ description: "Response echoes back the context object"
425
+ - check: field_value
426
+ path: "context.correlation_id"
427
+ value: "sales_guaranteed--create_media_buy"
428
+ description: "Context correlation_id returned unchanged"
429
+ - id: confirm_active
430
+ title: "Confirm active after IO signing"
431
+ narrative: |
432
+ The human on your side reviews and signs the IO through your internal workflow.
433
+ Your platform then transitions the A2A task to completed and emits the final
434
+ CreateMediaBuy result — including the newly-issued media_buy_id — to the buyer's
435
+ push_notification webhook (or to the next tasks/get poll). The buyer now calls
436
+ get_media_buys with that media_buy_id and sees the buy active. There is no
437
+ intermediate "pending_approval" media buy status in this flow; the buy does not
438
+ exist as a queryable MediaBuy until the task completes.
439
+
440
+ steps:
441
+ - id: get_media_buys_active
442
+ title: "Check media buy status (active)"
443
+ narrative: |
444
+ After the task completes and your platform issues a media_buy_id, the buyer
445
+ calls get_media_buys to confirm the buy is live. Your platform returns active
446
+ (or pending_creatives when creatives are still outstanding), indicating the
447
+ buy is approved and inventory is reserved.
448
+ task: get_media_buys
449
+ schema_ref: "media-buy/get-media-buys-request.json"
450
+ response_schema_ref: "media-buy/get-media-buys-response.json"
451
+ doc_ref: "/media-buy/task-reference/get_media_buys"
452
+ comply_scenario: media_buy_lifecycle
453
+ stateful: true
454
+ expected: |
455
+ Return the media buy in active status:
456
+ - media_buy_id: matches the buy created earlier
457
+ - status: active (IO has been signed)
458
+ - confirmed_at: timestamp when the IO was signed
459
+ - packages: line items with reserved inventory
460
+ - valid_actions: updated for active state (creative sync, pause, etc.)
461
+
462
+ sample_request:
463
+ account:
464
+ brand:
465
+ domain: "acmeoutdoor.example"
466
+ operator: "pinnacle-agency.example"
467
+ media_buy_ids:
468
+ - "$context.media_buy_id"
469
+
470
+ context:
471
+ correlation_id: "sales_guaranteed--get_media_buys_active"
472
+ validations:
473
+ - check: response_schema
474
+ description: "Response matches get-media-buys-response.json schema"
475
+ - check: field_present
476
+ path: "media_buys[0].status"
477
+ description: "Media buy status is active"
478
+ - check: field_present
479
+ path: "media_buys[0].confirmed_at"
480
+ description: "Active buy includes a confirmed_at timestamp"
481
+
482
+ - check: field_present
483
+ path: "context"
484
+ description: "Response echoes back the context object"
485
+ - check: field_value
486
+ path: "context.correlation_id"
487
+ value: "sales_guaranteed--get_media_buys_active"
488
+ description: "Context correlation_id returned unchanged"
489
+ - id: creative_sync
490
+ title: "Creative sync"
491
+ narrative: |
492
+ With the IO signed and the media buy active, the buyer syncs creative assets
493
+ to your platform. Each package has creative format requirements that the buyer
494
+ discovered during product discovery.
495
+
496
+ steps:
497
+ - id: sync_creatives
498
+ title: "Push creative assets"
499
+ narrative: |
500
+ The buyer uploads creative assets for the confirmed packages. Your platform
501
+ validates each creative against the format specs and returns per-creative status.
502
+ task: sync_creatives
503
+ schema_ref: "creative/sync-creatives-request.json"
504
+ response_schema_ref: "creative/sync-creatives-response.json"
505
+ doc_ref: "/creative/task-reference/sync_creatives"
506
+ comply_scenario: creative_sync
507
+ stateful: true
508
+ expected: |
509
+ Accept and validate creatives:
510
+ - Per-creative action: created or updated
511
+ - Per-creative status: accepted, pending_review, or rejected
512
+ - Validation errors for rejected creatives
513
+
514
+ sample_request:
515
+ account:
516
+ brand:
517
+ domain: "acmeoutdoor.example"
518
+ operator: "pinnacle-agency.example"
519
+ creatives:
520
+ - creative_id: "video_30s_trail_pro"
521
+ name: "Trail Pro 3000 - 30s CTV Spot"
522
+ format_id:
523
+ agent_url: "https://your-platform.example.com"
524
+ id: "ssai_30s"
525
+ assets:
526
+ video:
527
+ asset_type: "video"
528
+ url: "https://cdn.pinnacle-agency.example/trail-pro-30s.mp4"
529
+ width: 1920
530
+ height: 1080
531
+ duration_ms: 30000
532
+ mime_type: "video/mp4"
533
+
534
+ idempotency_key: "$generate:uuid_v4#sales_guaranteed_creative_sync_sync_creatives"
535
+ context:
536
+ correlation_id: "sales_guaranteed--sync_creatives"
537
+ validations:
538
+ - check: response_schema
539
+ description: "Response matches sync-creatives-response.json schema"
540
+ - check: field_present
541
+ path: "creatives[0].action"
542
+ description: "Each creative has an action (created/updated)"
543
+
544
+ - check: field_present
545
+ path: "context"
546
+ description: "Response echoes back the context object"
547
+ - check: field_value
548
+ path: "context.correlation_id"
549
+ value: "sales_guaranteed--sync_creatives"
550
+ description: "Context correlation_id returned unchanged"
551
+ - id: delivery_monitoring
552
+ title: "Delivery and reporting"
553
+ narrative: |
554
+ The campaign is live with guaranteed delivery commitments. The buyer monitors
555
+ delivery to ensure the seller is meeting the SLA guarantees from the IO.
556
+
557
+ steps:
558
+ - id: get_delivery
559
+ title: "Check delivery metrics"
560
+ narrative: |
561
+ The buyer requests delivery data for the active guaranteed media buy. Your
562
+ platform returns performance metrics with pacing against the guaranteed
563
+ commitment.
564
+ task: get_media_buy_delivery
565
+ schema_ref: "media-buy/get-media-buy-delivery-request.json"
566
+ response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
567
+ doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
568
+ comply_scenario: reporting_flow
569
+ stateful: true
570
+ expected: |
571
+ Return delivery metrics for the guaranteed media buy:
572
+ - Per-package delivery: impressions, clicks, spend, completion rates
573
+ - Pacing against guaranteed commitment: on track, ahead, behind
574
+ - Budget utilization: spent vs. committed
575
+ - SLA compliance: completion rate vs. guaranteed threshold
576
+
577
+ sample_request:
578
+ account:
579
+ brand:
580
+ domain: "acmeoutdoor.example"
581
+ operator: "pinnacle-agency.example"
582
+ media_buy_ids:
583
+ - "$context.media_buy_id"
584
+ include_package_daily_breakdown: true
585
+
586
+ context:
587
+ correlation_id: "sales_guaranteed--get_delivery"
588
+ validations:
589
+ - check: response_schema
590
+ description: "Response matches get-media-buy-delivery-response.json schema"
591
+ - check: field_present
592
+ path: "media_buy_deliveries"
593
+ description: "Response contains media buy delivery data"
594
+
595
+ - check: field_present
596
+ path: "context"
597
+ description: "Response echoes back the context object"
598
+ - check: field_value
599
+ path: "context.correlation_id"
600
+ value: "sales_guaranteed--get_delivery"
601
+ description: "Context correlation_id returned unchanged"