@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,339 @@
1
+ id: creative_lifecycle
2
+ version: "1.0.0"
3
+ title: "Creative lifecycle"
4
+ category: creative_lifecycle
5
+ summary: "Baseline creative lifecycle on a stateful platform: sync display creatives, list with filtering, and preview renderings."
6
+ track: creative
7
+ required_tools:
8
+ - list_creative_formats
9
+
10
+ narrative: |
11
+ You run a creative platform with a persistent library — an ad server, creative management
12
+ platform, or publisher that accepts and stores creative assets. A buyer agent pushes
13
+ display creatives, queries the library, and previews renderings before launch.
14
+
15
+ This storyboard covers the complete creative lifecycle from the buyer's perspective:
16
+ uploading a display asset, browsing the library, and previewing the deliverable.
17
+
18
+ The individual creative storyboards (template, ad server, native, sales agent) cover
19
+ specific interaction models and sub-modalities. This storyboard keeps the generic
20
+ creative baseline display-safe; video tag generation is covered by the
21
+ creative-ad-server specialism.
22
+
23
+ agent:
24
+ interaction_model: stateful_push
25
+ capabilities:
26
+ - has_creative_library
27
+ examples:
28
+ - "Publisher creative intake platforms"
29
+ - "Retail media creative libraries"
30
+ - "Display ad management platforms"
31
+
32
+ caller:
33
+ role: buyer_agent
34
+ example: "Pinnacle Agency (buyer)"
35
+
36
+ prerequisites:
37
+ description: |
38
+ The caller needs display creative assets and a brand identity. The test kit provides
39
+ sample assets at standard ad dimensions.
40
+ test_kit: "test-kits/acme-outdoor.yaml"
41
+
42
+ phases:
43
+ - id: capability_discovery
44
+ title: "Capability discovery"
45
+ narrative: |
46
+ The buyer calls get_adcp_capabilities to confirm the agent supports creative operations before browsing or previewing creatives.
47
+
48
+ steps:
49
+ - id: get_capabilities
50
+ title: "Check agent capabilities"
51
+ narrative: |
52
+ Verify that the agent declares the expected protocol support before
53
+ proceeding with domain-specific operations.
54
+ task: get_adcp_capabilities
55
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
56
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
57
+ doc_ref: "/protocol/get_adcp_capabilities"
58
+ comply_scenario: capability_discovery
59
+ stateful: false
60
+ expected: |
61
+ Return capabilities declaring creative in supported_protocols, confirming the agent handles creative operations.
62
+ sample_request:
63
+ context:
64
+ correlation_id: "creative_lifecycle--get_capabilities"
65
+ validations:
66
+ - check: response_schema
67
+ description: "Response matches get-adcp-capabilities-response.json schema"
68
+ - check: field_present
69
+ path: "supported_protocols"
70
+ description: "Agent declares supported protocols"
71
+
72
+ - check: field_present
73
+ path: "context"
74
+ description: "Response echoes back the context object"
75
+ - check: field_value
76
+ path: "context.correlation_id"
77
+ value: "creative_lifecycle--get_capabilities"
78
+ description: "Context correlation_id returned unchanged"
79
+ - id: discover_formats
80
+ title: "Discover accepted formats"
81
+ narrative: |
82
+ Before pushing any creatives, the buyer discovers what formats your platform accepts.
83
+ This determines which assets to prepare and what dimensions and specs to target.
84
+
85
+ steps:
86
+ - id: list_formats
87
+ title: "List creative formats"
88
+ narrative: |
89
+ The buyer calls list_creative_formats to discover what your platform accepts.
90
+ The response defines format specs: dimensions, asset requirements, mime types,
91
+ and any platform-specific constraints.
92
+ task: list_creative_formats
93
+ schema_ref: "creative/list-creative-formats-request.json"
94
+ response_schema_ref: "creative/list-creative-formats-response.json"
95
+ doc_ref: "/creative/task-reference/list_creative_formats"
96
+ comply_scenario: creative_lifecycle
97
+ stateful: false
98
+ expected: |
99
+ Return the first page of creative formats your platform accepts:
100
+ - format_id with your agent_url and unique id
101
+ - Asset requirements (dimensions, file sizes, mime types)
102
+ - Render dimensions
103
+ - Up to five formats on this compliance request; callers paginate for the rest when needed
104
+
105
+ sample_request:
106
+ pagination:
107
+ max_results: 5
108
+ context:
109
+ correlation_id: "creative_lifecycle--list_formats"
110
+
111
+ validations:
112
+ - check: response_schema
113
+ description: "Response matches list-creative-formats-response.json schema"
114
+ - check: field_present
115
+ path: "formats"
116
+ description: "Response contains formats array"
117
+
118
+ - check: field_present
119
+ path: "context"
120
+ description: "Response echoes back the context object"
121
+ - check: field_value
122
+ path: "context.correlation_id"
123
+ value: "creative_lifecycle--list_formats"
124
+ description: "Context correlation_id returned unchanged"
125
+ - check: field_present
126
+ path: "formats[0].format_id.agent_url"
127
+ description: "Format IDs include agent_url"
128
+ - check: field_present
129
+ path: "formats[0].format_id.id"
130
+ description: "Format IDs include id — must match those in get_products"
131
+ - id: sync_multiple
132
+ title: "Sync display creative"
133
+ narrative: |
134
+ The buyer pushes a display banner to your platform. Your platform validates the
135
+ creative against its format specs and returns per-creative status.
136
+
137
+ steps:
138
+ - id: sync_creatives
139
+ title: "Push a display creative"
140
+ narrative: |
141
+ The buyer syncs a 300x250 display banner. Your platform validates it against
142
+ its format specs and returns per-creative action and status.
143
+ task: sync_creatives
144
+ schema_ref: "creative/sync-creatives-request.json"
145
+ response_schema_ref: "creative/sync-creatives-response.json"
146
+ doc_ref: "/creative/task-reference/sync_creatives"
147
+ comply_scenario: creative_lifecycle
148
+ stateful: true
149
+ expected: |
150
+ Accept and validate the display creative:
151
+ - Per-creative action: created
152
+ - Per-creative status: accepted or pending_review
153
+ - Validation results for the creative
154
+ - Platform-assigned IDs if applicable
155
+
156
+ sample_request:
157
+ account:
158
+ brand:
159
+ domain: "acmeoutdoor.example"
160
+ operator: "pinnacle-agency.example"
161
+ creatives:
162
+ - creative_id: "display_trail_pro_300x250"
163
+ name: "Trail Pro 3000 - Display 300x250"
164
+ format_id:
165
+ agent_url: "https://your-platform.example.com"
166
+ id: "display_300x250"
167
+ assets:
168
+ image:
169
+ asset_type: "image"
170
+ url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png"
171
+ width: 300
172
+ height: 250
173
+ mime_type: "image/png"
174
+ idempotency_key: "$generate:uuid_v4#creative_lifecycle_sync_multiple_sync_creatives"
175
+ context:
176
+ correlation_id: "creative_lifecycle--sync_creatives"
177
+ validations:
178
+ - check: response_schema
179
+ description: "Response matches sync-creatives-response.json schema"
180
+ - check: field_present
181
+ path: "creatives"
182
+ description: "Response contains per-creative results"
183
+
184
+ - check: field_present
185
+ path: "context"
186
+ description: "Response echoes back the context object"
187
+ - check: field_value
188
+ path: "context.correlation_id"
189
+ value: "creative_lifecycle--sync_creatives"
190
+ description: "Context correlation_id returned unchanged"
191
+ - id: list_and_filter
192
+ title: "List creatives with filtering"
193
+ narrative: |
194
+ The buyer queries the creative library to see their synced creatives. First a broad
195
+ list, then filtered by format. This verifies the library correctly stores and indexes
196
+ the pushed creatives.
197
+
198
+ steps:
199
+ - id: list_all
200
+ title: "List all creatives in library"
201
+ narrative: |
202
+ The buyer calls list_creatives with no filters to see all creatives in the
203
+ library for their account. The response includes the display creative synced
204
+ in the previous phase.
205
+ task: list_creatives
206
+ schema_ref: "creative/list-creatives-request.json"
207
+ response_schema_ref: "creative/list-creatives-response.json"
208
+ doc_ref: "/creative/task-reference/list_creatives"
209
+ comply_scenario: creative_lifecycle
210
+ stateful: true
211
+ expected: |
212
+ Return creatives in the library:
213
+ - creatives array containing the synced items
214
+ - Each creative includes: creative_id, name, format_id, status
215
+ - At least one creative from the sync phase
216
+
217
+ sample_request:
218
+ account:
219
+ brand:
220
+ domain: "acmeoutdoor.example"
221
+ operator: "pinnacle-agency.example"
222
+
223
+ context:
224
+ correlation_id: "creative_lifecycle--list_all"
225
+ validations:
226
+ - check: response_schema
227
+ description: "Response matches list-creatives-response.json schema"
228
+ - check: field_present
229
+ path: "creatives"
230
+ description: "Response contains creatives array"
231
+
232
+ - check: field_present
233
+ path: "context"
234
+ description: "Response echoes back the context object"
235
+ - check: field_value
236
+ path: "context.correlation_id"
237
+ value: "creative_lifecycle--list_all"
238
+ description: "Context correlation_id returned unchanged"
239
+ - id: list_filtered
240
+ title: "List creatives filtered by format"
241
+ narrative: |
242
+ The buyer lists creatives filtered to a specific format (display only). The
243
+ response should only include creatives matching that format.
244
+ task: list_creatives
245
+ schema_ref: "creative/list-creatives-request.json"
246
+ response_schema_ref: "creative/list-creatives-response.json"
247
+ doc_ref: "/creative/task-reference/list_creatives"
248
+ comply_scenario: creative_lifecycle
249
+ stateful: true
250
+ expected: |
251
+ Return only creatives matching the format filter:
252
+ - creatives array filtered to display format
253
+ - Should include display_trail_pro_300x250
254
+
255
+ sample_request:
256
+ account:
257
+ brand:
258
+ domain: "acmeoutdoor.example"
259
+ operator: "pinnacle-agency.example"
260
+ filters:
261
+ format_ids:
262
+ - agent_url: "https://your-platform.example.com"
263
+ id: "display_300x250"
264
+
265
+ context:
266
+ correlation_id: "creative_lifecycle--list_filtered"
267
+ validations:
268
+ - check: response_schema
269
+ description: "Response matches list-creatives-response.json schema"
270
+ - check: field_present
271
+ path: "creatives"
272
+ description: "Response contains filtered creatives"
273
+
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: "creative_lifecycle--list_filtered"
280
+ description: "Context correlation_id returned unchanged"
281
+ - id: build_and_preview
282
+ title: "Preview display creative"
283
+ narrative: |
284
+ The buyer previews renderings for the synced display creative. Video/VAST tag
285
+ generation is covered by the creative-ad-server specialism, where the agent has
286
+ explicitly claimed that sub-modality.
287
+
288
+ steps:
289
+ - id: preview_display
290
+ title: "Preview the display creative"
291
+ narrative: |
292
+ The buyer calls preview_creative for the display banner to see how it renders
293
+ in the platform's environment before going live.
294
+ task: preview_creative
295
+ schema_ref: "creative/preview-creative-request.json"
296
+ response_schema_ref: "creative/preview-creative-response.json"
297
+ doc_ref: "/creative/task-reference/preview_creative"
298
+ comply_scenario: creative_flow
299
+ stateful: true
300
+ expected: |
301
+ Return a preview of the display creative:
302
+ - preview_url: rendered preview the buyer can inspect
303
+ - render_dimensions: matches the 300x250 format
304
+ - status: preview available
305
+
306
+ sample_request:
307
+ account:
308
+ brand:
309
+ domain: "acmeoutdoor.example"
310
+ operator: "pinnacle-agency.example"
311
+ request_type: "single"
312
+ creative_manifest:
313
+ creative_id: "display_trail_pro_300x250"
314
+ format_id:
315
+ agent_url: "https://your-platform.example.com"
316
+ id: "display_300x250"
317
+ assets:
318
+ image:
319
+ asset_type: "image"
320
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/banner_300x250.jpg"
321
+ width: 300
322
+ height: 250
323
+ click_url:
324
+ asset_type: "url"
325
+ url: "https://acmeoutdoor.example/trail-pro"
326
+
327
+ context:
328
+ correlation_id: "creative_lifecycle--preview_display"
329
+ validations:
330
+ - check: response_schema
331
+ description: "Response matches preview-creative-response.json schema"
332
+
333
+ - check: field_present
334
+ path: "context"
335
+ description: "Response echoes back the context object"
336
+ - check: field_value
337
+ path: "context.correlation_id"
338
+ value: "creative_lifecycle--preview_display"
339
+ description: "Context correlation_id returned unchanged"
@@ -0,0 +1,153 @@
1
+ id: creative/billing_out_of_band
2
+ version: "1.0.0"
3
+ title: "Creative report_usage rejects out-of-band billing"
4
+ category: creative
5
+ summary: "Verifies that a creative agent declaring bills_through_adcp: false rejects report_usage records with accepted: 0 and BILLING_OUT_OF_BAND."
6
+ track: creative
7
+ introduced_in: "3.1"
8
+ required_tools:
9
+ - get_adcp_capabilities
10
+ - report_usage
11
+
12
+ narrative: |
13
+ Creative agents that bill through an offline contract, SaaS license, or
14
+ bundled enterprise agreement should declare `creative.bills_through_adcp:
15
+ false`. Buyers use that capability as a pre-call discriminator and should
16
+ avoid sending AdCP billing records. If a buyer still probes with
17
+ `report_usage`, the agent must not silently accept a record it will not bill
18
+ on. It returns `accepted: 0` with `errors[0].code: BILLING_OUT_OF_BAND`.
19
+
20
+ `BILLING_OUT_OF_BAND` is terminal. The buyer must not auto-retry the same
21
+ `report_usage` record, because no request mutation will move the account onto
22
+ an AdCP billing surface. The recovery path is buyer-side routing: mark the
23
+ creative agent/account as out-of-band and reconcile from the native billing
24
+ export or offline contract.
25
+
26
+ agent:
27
+ interaction_model: creative_agent
28
+ capabilities:
29
+ - has_creative_library
30
+ - bills_out_of_band
31
+ examples:
32
+ - "Ad servers licensed by flat SaaS contract"
33
+ - "Creative platforms bundled into an enterprise agreement"
34
+
35
+ caller:
36
+ role: buyer_agent
37
+ example: "Pinnacle Agency (buyer)"
38
+
39
+ prerequisites:
40
+ description: |
41
+ The creative agent declares `creative.bills_through_adcp: false` in
42
+ `get_adcp_capabilities`. Agents that declare `true` are not exercising this
43
+ storyboard path; the rejection phase is skipped for them.
44
+ test_kit: "test-kits/acme-outdoor.yaml"
45
+
46
+ phases:
47
+ - id: capability_discovery
48
+ title: "Discover creative billing mode"
49
+ narrative: |
50
+ The buyer reads `creative.bills_through_adcp` before sending usage
51
+ records. A false value means billing is out of band and `report_usage`
52
+ is not the billing source of truth.
53
+
54
+ steps:
55
+ - id: get_capabilities
56
+ title: "Read creative billing discriminator"
57
+ task: get_adcp_capabilities
58
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
59
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
60
+ doc_ref: "/protocol/get_adcp_capabilities"
61
+ comply_scenario: capability_discovery
62
+ stateful: false
63
+ expected: |
64
+ Return a creative capability block with `bills_through_adcp`
65
+ declared. The report_usage rejection path below only runs when the
66
+ value is false.
67
+ sample_request:
68
+ context:
69
+ correlation_id: "creative_billing_out_of_band--get_capabilities"
70
+ context_outputs:
71
+ - key: "bills_through_adcp"
72
+ path: "creative.bills_through_adcp"
73
+ validations:
74
+ - check: response_schema
75
+ description: "Response matches get-adcp-capabilities-response.json schema"
76
+ - check: field_present
77
+ path: "creative.bills_through_adcp"
78
+ description: "Creative billing discriminator is declared"
79
+ - check: field_value
80
+ path: "context.correlation_id"
81
+ value: "creative_billing_out_of_band--get_capabilities"
82
+ description: "Context correlation_id returned unchanged"
83
+
84
+ - id: reject_out_of_band_usage
85
+ title: "Reject report_usage for out-of-band billing"
86
+ optional: true
87
+ skip_if: "context.bills_through_adcp != false"
88
+ narrative: |
89
+ The buyer sends a well-formed creative usage record despite the declared
90
+ out-of-band billing mode. The creative agent returns a successful task
91
+ response with zero accepted records and a per-record
92
+ `BILLING_OUT_OF_BAND` error. This is not a transport failure and should
93
+ not use `expect_error: true`.
94
+
95
+ steps:
96
+ - id: report_usage_out_of_band
97
+ title: "Submit creative usage to an out-of-band agent"
98
+ task: report_usage
99
+ schema_ref: "account/report-usage-request.json"
100
+ response_schema_ref: "account/report-usage-response.json"
101
+ doc_ref: "/accounts/tasks/report_usage"
102
+ negative_path: payload_well_formed
103
+ stateful: true
104
+ expected: |
105
+ Return:
106
+ - accepted: 0
107
+ - errors[0].code: BILLING_OUT_OF_BAND
108
+ - errors[0].recovery: terminal
109
+
110
+ The terminal recovery classification is the machine-readable
111
+ no-retry assertion: buyers must not re-issue the same report_usage
112
+ after this response.
113
+ sample_request:
114
+ account:
115
+ brand:
116
+ domain: "acmeoutdoor.example"
117
+ operator: "pinnacle-agency.example"
118
+ idempotency_key: "$generate:uuid_v4#creative_billing_out_of_band_report_usage"
119
+ reporting_period:
120
+ start: "2026-07-01T00:00:00Z"
121
+ end: "2026-07-31T23:59:59Z"
122
+ usage:
123
+ - account:
124
+ account_id: "acct_acme_creative"
125
+ creative_id: "campaign_hero_video"
126
+ pricing_option_id: "po_vast_30s_cpm"
127
+ impressions: 2400000
128
+ vendor_cost: 1200.00
129
+ currency: "USD"
130
+ context:
131
+ correlation_id: "creative_billing_out_of_band--report_usage"
132
+ validations:
133
+ - check: response_schema
134
+ description: "Response matches report-usage-response.json schema"
135
+ - check: field_value
136
+ path: "accepted"
137
+ value: 0
138
+ description: "No out-of-band creative usage records are accepted"
139
+ - check: field_value
140
+ path: "errors[0].code"
141
+ value: "BILLING_OUT_OF_BAND"
142
+ description: "Per-record error code is BILLING_OUT_OF_BAND"
143
+ - check: field_value
144
+ path: "errors[0].recovery"
145
+ value: "terminal"
146
+ description: "Terminal recovery tells buyers not to auto-retry report_usage"
147
+ - check: field_absent
148
+ path: "errors[0].details"
149
+ description: "BILLING_OUT_OF_BAND is discriminator-by-code; no details payload is defined"
150
+ - check: field_value
151
+ path: "context.correlation_id"
152
+ value: "creative_billing_out_of_band--report_usage"
153
+ description: "Context correlation_id returned unchanged"