@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,247 @@
1
+ id: media_buy_seller/creative_reception
2
+ version: "1.0.0"
3
+ title: "Sales agent with creative capabilities"
4
+ category: media_buy_seller
5
+ summary: "Stateful sales agent that accepts pushed creative assets and renders them in its environment."
6
+ track: creative
7
+ required_tools:
8
+ - sync_creatives
9
+
10
+ narrative: |
11
+ You run a publisher platform, retail media network, or other sell-side system that
12
+ accepts creative assets from buyers. The buyer pushes assets or catalog items to your
13
+ platform, and you render them in your environment.
14
+
15
+ Your agent is stateful: buyers push creatives to you via sync_creatives, and you
16
+ persist them for rendering. This is where catalogs get interesting — the buyer might
17
+ push product feeds (flights, hotels, retail products) that your platform renders as
18
+ native ads.
19
+
20
+ This storyboard walks through the push-and-preview flow from the buyer's perspective.
21
+
22
+ agent:
23
+ interaction_model: stateful_push
24
+ capabilities:
25
+ - has_creative_library
26
+ examples:
27
+ - "Publisher platforms"
28
+ - "Retail media networks"
29
+ - "Native ad platforms"
30
+
31
+ caller:
32
+ role: buyer_agent
33
+ example: "Pinnacle Agency (buyer)"
34
+
35
+ prerequisites:
36
+ description: |
37
+ The buyer has creative assets (images, catalog feeds, or ad tags) ready to push.
38
+ The test kit provides sample assets compatible with common publisher formats.
39
+ test_kit: "test-kits/acme-outdoor.yaml"
40
+
41
+ phases:
42
+ - id: capability_discovery
43
+ title: "Capability discovery"
44
+ narrative: |
45
+ The buyer calls get_adcp_capabilities to confirm the agent supports creative operations before browsing or building creatives.
46
+
47
+ steps:
48
+ - id: get_capabilities
49
+ title: "Check agent capabilities"
50
+ narrative: |
51
+ Verify that the agent declares the expected protocol support before
52
+ proceeding with domain-specific operations.
53
+ task: get_adcp_capabilities
54
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
55
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
56
+ doc_ref: "/protocol/get_adcp_capabilities"
57
+ comply_scenario: capability_discovery
58
+ stateful: false
59
+ expected: |
60
+ Return capabilities declaring creative in supported_protocols, confirming the agent handles creative operations.
61
+ sample_request:
62
+ context:
63
+ correlation_id: "media_buy_seller_creative_reception--get_capabilities"
64
+ validations:
65
+ - check: response_schema
66
+ description: "Response matches get-adcp-capabilities-response.json schema"
67
+ - check: field_present
68
+ path: "supported_protocols"
69
+ description: "Agent declares supported protocols"
70
+
71
+ - check: field_present
72
+ path: "context"
73
+ description: "Response echoes back the context object"
74
+ - check: field_value
75
+ path: "context.correlation_id"
76
+ value: "media_buy_seller_creative_reception--get_capabilities"
77
+ description: "Context correlation_id returned unchanged"
78
+ - id: discover_accepted_formats
79
+ title: "Discover accepted formats"
80
+ narrative: |
81
+ The buyer first needs to know what creative formats your platform accepts.
82
+ For a publisher, this includes your native ad formats, display placements,
83
+ and any custom units. For retail media, this might include product listing
84
+ formats or sponsored product cards.
85
+
86
+ steps:
87
+ - id: list_formats
88
+ title: "Discover accepted creative formats"
89
+ narrative: |
90
+ The buyer asks: "What creative formats does your platform accept?" Your
91
+ platform returns the formats you support — native post formats, display
92
+ units, video slots, or product listing formats.
93
+ task: list_creative_formats
94
+ schema_ref: "creative/list-creative-formats-request.json"
95
+ response_schema_ref: "creative/list-creative-formats-response.json"
96
+ doc_ref: "/creative/task-reference/list_creative_formats"
97
+ comply_scenario: creative_sync
98
+ stateful: false
99
+ expected: |
100
+ Return the creative formats your platform accepts. Each format should define:
101
+ - Asset requirements (what the buyer needs to provide)
102
+ - Render dimensions
103
+ - Any catalog requirements (for product-feed formats)
104
+
105
+ - id: push_creatives
106
+ title: "Push creative assets"
107
+ narrative: |
108
+ The buyer pushes their creative assets to your platform. This could be:
109
+ - Standard display assets (images, HTML tags)
110
+ - Catalog items (product feeds, flight listings, hotel inventory)
111
+ - Native ad content (headlines, descriptions, images)
112
+
113
+ Your platform validates the assets against your format specs and stores them.
114
+
115
+ steps:
116
+ - id: sync_creatives
117
+ title: "Push creatives to the platform"
118
+ narrative: |
119
+ The buyer uploads creative assets to your platform. For standard ads, this
120
+ is images and copy. For catalog-driven formats, this is a product feed or
121
+ set of catalog items. Your platform validates each creative against the
122
+ format's asset requirements and returns a per-creative status.
123
+ task: sync_creatives
124
+ schema_ref: "creative/sync-creatives-request.json"
125
+ response_schema_ref: "creative/sync-creatives-response.json"
126
+ doc_ref: "/creative/task-reference/sync_creatives"
127
+ comply_scenario: creative_sync
128
+ stateful: true
129
+ expected: |
130
+ Accept the creatives, validate against format specifications, and return:
131
+ - Per-creative action (created or updated)
132
+ - Per-creative status (accepted, pending_review, rejected)
133
+ - Platform-assigned IDs if applicable
134
+ - Validation errors for rejected creatives
135
+
136
+ sample_request:
137
+ account:
138
+ brand:
139
+ domain: "acmeoutdoor.example"
140
+ operator: "pinnacle-agency.example"
141
+ creatives:
142
+ - creative_id: "acme_summer_native_001"
143
+ name: "Acme Summer Sale — native 2026"
144
+ format_id:
145
+ agent_url: "https://your-platform.example.com"
146
+ id: "native_post"
147
+ assets:
148
+ headline:
149
+ asset_type: "text"
150
+ content: "Summer Sale — 40% Off All Gear"
151
+ image:
152
+ asset_type: "image"
153
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg"
154
+ width: 1200
155
+ height: 628
156
+ click_url:
157
+ asset_type: "url"
158
+ url: "https://acmeoutdoor.example/summer-sale"
159
+
160
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_creative_reception_push_creatives_sync_creatives"
161
+ context:
162
+ correlation_id: "media_buy_seller_creative_reception--sync_creatives"
163
+ validations:
164
+ - check: response_schema
165
+ description: "Response matches sync-creatives-response.json schema"
166
+ - check: field_present
167
+ path: "creatives[0].action"
168
+ description: "Each creative has an action (created/updated)"
169
+
170
+ - check: field_present
171
+ path: "context"
172
+ description: "Response echoes back the context object"
173
+ - check: field_value
174
+ path: "context.correlation_id"
175
+ value: "media_buy_seller_creative_reception--sync_creatives"
176
+ description: "Context correlation_id returned unchanged"
177
+ - id: preview
178
+ title: "Preview pushed creatives"
179
+ narrative: |
180
+ After pushing assets, the buyer wants to see how their creatives will render
181
+ in your platform's environment. For a publisher, this shows the ad in the
182
+ publication's native chrome — with engagement buttons, community badges, and
183
+ platform-specific styling that the buyer can't preview elsewhere.
184
+
185
+ steps:
186
+ - id: preview_synced
187
+ title: "Preview a pushed creative"
188
+ narrative: |
189
+ The buyer asks to see how a synced creative will look in your environment.
190
+ Your platform renders the creative with its native chrome — the surrounding
191
+ UI, engagement buttons, and platform-specific styling.
192
+ task: preview_creative
193
+ schema_ref: "creative/preview-creative-request.json"
194
+ response_schema_ref: "creative/preview-creative-response.json"
195
+ doc_ref: "/creative/task-reference/preview_creative"
196
+ comply_scenario: creative_flow
197
+ stateful: true
198
+ expected: |
199
+ Return a preview showing the creative in your platform's environment.
200
+ The preview should include your platform's native chrome — not just the
201
+ raw assets, but how they'll actually appear to users.
202
+
203
+ sample_request:
204
+ account:
205
+ brand:
206
+ domain: "acmeoutdoor.example"
207
+ operator: "pinnacle-agency.example"
208
+ request_type: "single"
209
+ creative_manifest:
210
+ creative_id: "acme_summer_native_001"
211
+ format_id:
212
+ agent_url: "https://your-platform.example.com"
213
+ id: "native_post"
214
+ assets:
215
+ headline:
216
+ asset_type: "text"
217
+ content: "Summer Sale — 40% Off"
218
+ body:
219
+ asset_type: "text"
220
+ content: "Top-rated outdoor gear. This weekend only."
221
+ image:
222
+ asset_type: "image"
223
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero.jpg"
224
+ width: 1200
225
+ height: 628
226
+ click_url:
227
+ asset_type: "url"
228
+ url: "https://acmeoutdoor.example/summer-sale"
229
+ output_format: "url"
230
+ quality: "draft"
231
+
232
+ context:
233
+ correlation_id: "media_buy_seller_creative_reception--preview_synced"
234
+ validations:
235
+ - check: response_schema
236
+ description: "Response matches preview-creative-response.json schema"
237
+ - check: field_present
238
+ path: "previews[0].renders[0].preview_url"
239
+ description: "Preview includes a renderable URL"
240
+
241
+ - check: field_present
242
+ path: "context"
243
+ description: "Response echoes back the context object"
244
+ - check: field_value
245
+ path: "context.correlation_id"
246
+ value: "media_buy_seller_creative_reception--preview_synced"
247
+ description: "Context correlation_id returned unchanged"
@@ -0,0 +1,357 @@
1
+ id: media_buy_seller/delivery_reporting
2
+ version: "1.0.0"
3
+ title: "Seller returns valid delivery reporting"
4
+ category: media_buy_seller
5
+ summary: "Verifies that get_media_buy_delivery returns schema-compliant delivery data after simulated delivery via the test controller."
6
+ track: reporting
7
+ required_tools:
8
+ - get_products
9
+ - create_media_buy
10
+ - get_media_buy_delivery
11
+ - comply_test_controller
12
+
13
+ narrative: |
14
+ Delivery reporting is how buyers know if their campaign is working. The seller must
15
+ return schema-compliant delivery data from get_media_buy_delivery with per-package
16
+ metrics (impressions, spend, pacing).
17
+
18
+ This scenario creates a media buy, injects delivery data via the test controller's
19
+ simulate_delivery scenario, then calls get_media_buy_delivery and validates the
20
+ response against the schema. Without this test, sellers can return arbitrary formats
21
+ and still pass certification.
22
+
23
+ agent:
24
+ interaction_model: media_buy_seller
25
+ capabilities:
26
+ - sells_media
27
+ examples:
28
+ - "Any media buy seller"
29
+
30
+ caller:
31
+ role: buyer_agent
32
+ example: "Pinnacle Agency (buyer)"
33
+
34
+ prerequisites:
35
+ description: |
36
+ The seller must implement comply_test_controller with the simulate_delivery
37
+ scenario. This allows the test harness to inject delivery metrics into a
38
+ media buy so get_media_buy_delivery has data to return.
39
+ test_kit: "test-kits/acme-outdoor.yaml"
40
+ controller_seeding: true
41
+
42
+ fixtures:
43
+ products:
44
+ - product_id: "outdoor_display_q2"
45
+ delivery_type: "guaranteed"
46
+ channels: ["display"]
47
+ format_ids:
48
+ - id: "display_300x250"
49
+ - product_id: "outdoor_video_q2"
50
+ delivery_type: "guaranteed"
51
+ channels: ["video"]
52
+ format_ids:
53
+ - id: "video_15s"
54
+ - product_id: "video_viewability_q2"
55
+ delivery_type: "guaranteed"
56
+ channels: ["video"]
57
+ format_ids:
58
+ - id: "video_15s"
59
+ metric_optimization:
60
+ supported_metrics: ["viewed_seconds"]
61
+ pricing_options:
62
+ - product_id: "outdoor_display_q2"
63
+ pricing_option_id: "cpm_standard"
64
+ pricing_model: "cpm"
65
+ currency: "USD"
66
+ fixed_price: 8.0
67
+ - product_id: "outdoor_video_q2"
68
+ pricing_option_id: "cpm_standard"
69
+ pricing_model: "cpm"
70
+ currency: "USD"
71
+ fixed_price: 12.0
72
+ - product_id: "video_viewability_q2"
73
+ pricing_option_id: "vcpm_standard"
74
+ pricing_model: "vcpm"
75
+ currency: "USD"
76
+ fixed_price: 14.0
77
+
78
+ phases:
79
+ - id: setup
80
+ title: "Create a media buy for delivery testing"
81
+ steps:
82
+ - id: sync_accounts
83
+ title: "Establish account"
84
+ task: sync_accounts
85
+ schema_ref: "account/sync-accounts-request.json"
86
+ response_schema_ref: "account/sync-accounts-response.json"
87
+ doc_ref: "/accounts/tasks/sync_accounts"
88
+ stateful: true
89
+ expected: |
90
+ Return the account with account_id and status active.
91
+ sample_request:
92
+ accounts:
93
+ - brand:
94
+ domain: "acmeoutdoor.example"
95
+ operator: "pinnacle-agency.example"
96
+ billing: "operator"
97
+ payment_terms: "net_30"
98
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_delivery_reporting_setup_sync_accounts"
99
+ validations:
100
+ - check: response_schema
101
+ description: "Response matches sync-accounts-response.json schema"
102
+ - check: field_present
103
+ path: "accounts[0].account_id"
104
+ description: "Account has a platform-assigned ID"
105
+
106
+ - id: get_products_brief
107
+ title: "Discover products"
108
+ task: get_products
109
+ schema_ref: "media-buy/get-products-request.json"
110
+ response_schema_ref: "media-buy/get-products-response.json"
111
+ doc_ref: "/media-buy/task-reference/get_products"
112
+ comply_scenario: full_sales_flow
113
+ stateful: false
114
+ expected: |
115
+ Return products matching the brief.
116
+ sample_request:
117
+ buying_mode: "brief"
118
+ brief: "Display and video inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
119
+ account:
120
+ brand:
121
+ domain: "acmeoutdoor.example"
122
+ operator: "pinnacle-agency.example"
123
+ validations:
124
+ - check: response_schema
125
+ description: "Response matches get-products-response.json schema"
126
+ - check: field_present
127
+ path: "products"
128
+ description: "Response contains products"
129
+
130
+ - id: create_media_buy
131
+ title: "Create media buy"
132
+ task: create_media_buy
133
+ schema_ref: "media-buy/create-media-buy-request.json"
134
+ response_schema_ref: "media-buy/create-media-buy-response.json"
135
+ doc_ref: "/media-buy/task-reference/create_media_buy"
136
+ comply_scenario: create_media_buy
137
+ stateful: true
138
+ expected: |
139
+ Create the media buy. We need a media_buy_id to simulate delivery against.
140
+ sample_request:
141
+ brand:
142
+ domain: "acmeoutdoor.example"
143
+ account:
144
+ brand:
145
+ domain: "acmeoutdoor.example"
146
+ operator: "pinnacle-agency.example"
147
+ start_time: "2026-04-01T00:00:00Z"
148
+ end_time: "2026-06-30T23:59:59Z"
149
+ packages:
150
+ - product_id: "outdoor_display_q2"
151
+ budget: 15000
152
+ pricing_option_id: "cpm_standard"
153
+ - product_id: "outdoor_video_q2"
154
+ budget: 10000
155
+ pricing_option_id: "cpm_standard"
156
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_delivery_reporting_setup_create_media_buy"
157
+ validations:
158
+ - check: response_schema
159
+ description: "Response matches create-media-buy-response.json schema"
160
+
161
+ - id: simulate_and_verify
162
+ title: "Simulate delivery and validate reporting"
163
+ narrative: |
164
+ Inject delivery metrics via the test controller, then call get_media_buy_delivery
165
+ and validate the response format. This is the core test — does the seller return
166
+ schema-compliant delivery data with per-package metrics?
167
+
168
+ steps:
169
+ - id: simulate_delivery
170
+ title: "Inject simulated delivery metrics"
171
+ task: comply_test_controller
172
+ requires_tool: comply_test_controller
173
+ stateful: true
174
+ expected: |
175
+ The test controller acknowledges the simulated delivery data.
176
+ sample_request:
177
+ account:
178
+ sandbox: true
179
+ scenario: "simulate_delivery"
180
+ params:
181
+ media_buy_id: "$context.media_buy_id"
182
+ impressions: 5000
183
+ clicks: 150
184
+ reported_spend:
185
+ amount: 250.00
186
+ currency: "USD"
187
+ validations:
188
+ - check: field_value
189
+ path: "success"
190
+ allowed_values: [true]
191
+ description: "Delivery simulation succeeds"
192
+
193
+ - id: get_delivery
194
+ title: "Get delivery report and validate schema"
195
+ task: get_media_buy_delivery
196
+ schema_ref: "media-buy/get-media-buy-delivery-request.json"
197
+ response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
198
+ doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
199
+ comply_scenario: reporting_flow
200
+ stateful: true
201
+ expected: |
202
+ Return delivery metrics reflecting the simulated data:
203
+ - media_buy_deliveries array with at least one entry
204
+ - Per-package breakdown with impressions, spend
205
+ - Response matches the get-media-buy-delivery-response.json schema
206
+ sample_request:
207
+ account:
208
+ brand:
209
+ domain: "acmeoutdoor.example"
210
+ operator: "pinnacle-agency.example"
211
+ media_buy_ids:
212
+ - "$context.media_buy_id"
213
+ include_package_daily_breakdown: true
214
+ validations:
215
+ - check: response_schema
216
+ description: "Response matches get-media-buy-delivery-response.json schema"
217
+ - check: field_present
218
+ path: "media_buy_deliveries"
219
+ description: "Response contains delivery data"
220
+
221
+ - id: viewability_delivery
222
+ title: "Delivery reporting surfaces viewability.viewed_seconds for viewability-capable products"
223
+ narrative: |
224
+ 3.1 adds `viewability.viewed_seconds` to delivery-metrics — the
225
+ average in-view duration per measurable impression in seconds. It
226
+ shares the same denominator (`measurable_impressions`) as
227
+ `viewable_rate` and is governed by the same measurement `standard`
228
+ (e.g., MRC 50%/1s for display, 50%/2s for video). Sellers reporting
229
+ against a `viewed_seconds` optimization goal MUST populate this field.
230
+
231
+ This phase creates a separate media buy for a viewability-capable
232
+ vCPM video product, injects simulated delivery with a full viewability
233
+ block (measurable_impressions, viewable_impressions, viewable_rate,
234
+ viewed_seconds, standard), and verifies that get_media_buy_delivery
235
+ returns the viewed_seconds field inside the viewability block.
236
+ Response schema validation anchors the viewability block shape and
237
+ scalar bounds; the named fields make the shared denominator explicit
238
+ for buyers and controller implementers.
239
+
240
+ steps:
241
+ - id: create_media_buy_viewability
242
+ title: "Create media buy for viewability-capable video product"
243
+ task: create_media_buy
244
+ schema_ref: "media-buy/create-media-buy-request.json"
245
+ response_schema_ref: "media-buy/create-media-buy-response.json"
246
+ doc_ref: "/media-buy/task-reference/create_media_buy"
247
+ stateful: true
248
+ expected: |
249
+ Create the media buy. Returns a media_buy_id used for the
250
+ viewability delivery simulation.
251
+ sample_request:
252
+ brand:
253
+ domain: "acmeoutdoor.example"
254
+ account:
255
+ brand:
256
+ domain: "acmeoutdoor.example"
257
+ operator: "pinnacle-agency.example"
258
+ start_time: "2026-06-01T00:00:00Z"
259
+ end_time: "2026-06-30T23:59:59Z"
260
+ packages:
261
+ - product_id: "video_viewability_q2"
262
+ budget: 20000
263
+ pricing_option_id: "vcpm_standard"
264
+ optimization_goals:
265
+ - kind: "metric"
266
+ metric: "viewed_seconds"
267
+ target:
268
+ kind: "threshold_rate"
269
+ value: 3.0
270
+ priority: 1
271
+ idempotency_key: "$generate:uuid_v4#delivery_reporting_viewability_delivery_create_media_buy"
272
+ context_outputs:
273
+ - name: viewability_media_buy_id
274
+ path: "media_buy_id"
275
+ validations:
276
+ - check: response_schema
277
+ description: "Response matches create-media-buy-response.json schema"
278
+ - check: field_present
279
+ path: "media_buy_id"
280
+ description: "Media buy has a platform-assigned ID"
281
+
282
+ - id: simulate_viewability_delivery
283
+ title: "Inject simulated delivery with full viewability block including viewed_seconds"
284
+ task: comply_test_controller
285
+ requires_tool: comply_test_controller
286
+ stateful: true
287
+ expected: |
288
+ The test controller acknowledges the simulated delivery with a
289
+ full viewability block: measurable_impressions as the shared
290
+ denominator, viewable_impressions, viewable_rate, viewed_seconds,
291
+ and the MRC standard.
292
+ sample_request:
293
+ account:
294
+ sandbox: true
295
+ scenario: "simulate_delivery"
296
+ params:
297
+ media_buy_id: "$context.viewability_media_buy_id"
298
+ impressions: 80000
299
+ viewability:
300
+ measurable_impressions: 74000
301
+ viewable_impressions: 59200
302
+ viewable_rate: 0.80
303
+ viewed_seconds: 4.3
304
+ standard: "mrc"
305
+ reported_spend:
306
+ amount: 1030.00
307
+ currency: "USD"
308
+ validations:
309
+ - check: field_value
310
+ path: "success"
311
+ allowed_values: [true]
312
+ description: "Delivery simulation with viewability block succeeds"
313
+
314
+ - id: get_viewability_delivery
315
+ title: "Verify viewability.viewed_seconds appears in delivery report"
316
+ task: get_media_buy_delivery
317
+ schema_ref: "media-buy/get-media-buy-delivery-request.json"
318
+ response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
319
+ doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
320
+ stateful: true
321
+ expected: |
322
+ Delivery response carries a viewability block with viewed_seconds,
323
+ measurable_impressions (shared denominator), viewable_rate, and
324
+ standard. The viewed_seconds value represents the average in-view
325
+ duration per measurable impression — the reporting counterpart to
326
+ the viewed_seconds optimization metric. The denominator for both
327
+ viewable_rate and viewed_seconds is measurable_impressions (not
328
+ total impressions) since some environments cannot measure viewability.
329
+ sample_request:
330
+ account:
331
+ brand:
332
+ domain: "acmeoutdoor.example"
333
+ operator: "pinnacle-agency.example"
334
+ media_buy_ids:
335
+ - "$context.viewability_media_buy_id"
336
+ include_package_daily_breakdown: true
337
+ validations:
338
+ - check: response_schema
339
+ description: "Response matches get-media-buy-delivery-response.json schema"
340
+ - check: field_present
341
+ path: "media_buy_deliveries[0].totals.viewability"
342
+ description: "Viewability block present on delivery row"
343
+ - check: field_present
344
+ path: "media_buy_deliveries[0].totals.viewability.viewed_seconds"
345
+ description: "viewed_seconds — average in-view duration per measurable impression — present in viewability block"
346
+ - check: field_present
347
+ path: "media_buy_deliveries[0].totals.viewability.measurable_impressions"
348
+ description: "measurable_impressions denominator present (shared basis for viewable_rate and viewed_seconds)"
349
+ - check: field_present
350
+ path: "media_buy_deliveries[0].totals.viewability.viewable_impressions"
351
+ description: "viewable_impressions numerator present for viewable_rate"
352
+ - check: field_present
353
+ path: "media_buy_deliveries[0].totals.viewability.viewable_rate"
354
+ description: "viewable_rate present alongside viewed_seconds in the viewability block"
355
+ - check: field_present
356
+ path: "media_buy_deliveries[0].totals.viewability.standard"
357
+ description: "viewability standard present — governs threshold for both viewable_rate and viewed_seconds"