@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,221 @@
1
+ id: governance_spend_authority/denied
2
+ version: "1.0.0"
3
+ title: "Campaign governance — denied"
4
+ category: governance_spend_authority
5
+ summary: "Governance agent denies a media buy that exceeds the agent's spending authority. No human escalation — the buy is blocked."
6
+ track: campaign_governance
7
+ required_tools:
8
+ - sync_plans
9
+ - check_governance
10
+
11
+ # Cross-step assertion (adcp#2639): once a plan is denied, no subsequent
12
+ # step in the same run may acquire a resource for that plan. Catches the
13
+ # failure mode where a seller surfaces the denial response but still
14
+ # creates the media buy / activates the signal / syncs the property list
15
+ # anyway. Plan-scoped — unrelated plans proceed normally.
16
+ # Cross-step assertion (adcp#2664): status.monotonic rejects media_buy
17
+ # status transitions observed across steps that aren't on the spec
18
+ # lifecycle graph — e.g. active → pending_creatives.
19
+ invariants:
20
+ - governance.denial_blocks_mutation
21
+ - status.monotonic
22
+
23
+ narrative: |
24
+ The buyer's governance agent registers a plan with strict spending authority. The buyer
25
+ then proposes a media buy that exceeds the agent's per-transaction threshold. The
26
+ governance agent denies the buy outright with a must-severity finding.
27
+
28
+ Unlike the escalation storyboard, there is no human override here. The denial is final.
29
+ The buyer must reduce the buy amount or restructure into smaller transactions that fall
30
+ within the agent's authority. This tests the hard-stop governance path.
31
+
32
+ agent:
33
+ interaction_model: media_buy_seller
34
+ capabilities:
35
+ - sells_media
36
+ - governance_aware
37
+ examples:
38
+ - "Publisher platform with governance support"
39
+ - "Retail media network"
40
+
41
+ caller:
42
+ role: buyer_agent
43
+ example: "Pinnacle Agency (buyer)"
44
+
45
+ prerequisites:
46
+ description: |
47
+ The caller needs a brand identity, operator credentials, and a governance agent URL.
48
+ The governance plan must define a per-transaction threshold below the intended buy amount.
49
+ test_kit: "test-kits/acme-outdoor.yaml"
50
+
51
+ phases:
52
+ - id: capability_discovery
53
+ title: "Capability discovery"
54
+ narrative: |
55
+ The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
56
+
57
+ steps:
58
+ - id: get_capabilities
59
+ title: "Check agent capabilities"
60
+ narrative: |
61
+ Verify that the agent declares the expected protocol support before
62
+ proceeding with domain-specific operations.
63
+ task: get_adcp_capabilities
64
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
65
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
66
+ doc_ref: "/protocol/get_adcp_capabilities"
67
+ comply_scenario: capability_discovery
68
+ stateful: false
69
+ expected: |
70
+ Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
71
+ sample_request:
72
+ context:
73
+ correlation_id: "governance_spend_authority--denied--get_capabilities"
74
+ validations:
75
+ - check: response_schema
76
+ description: "Response matches get-adcp-capabilities-response.json schema"
77
+ - check: field_present
78
+ path: "supported_protocols"
79
+ description: "Agent declares supported protocols"
80
+
81
+ - check: field_present
82
+ path: "context"
83
+ description: "Response echoes back the context object"
84
+ - check: field_value
85
+ path: "context.correlation_id"
86
+ value: "governance_spend_authority--denied--get_capabilities"
87
+ description: "Context correlation_id returned unchanged"
88
+ - id: plan_registration
89
+ title: "Register governance plan"
90
+ narrative: |
91
+ The buyer registers a governance plan with strict spending authority. The plan sets
92
+ an agent_limited authority level with a $10K per-transaction threshold. Any buy above
93
+ this amount is denied without escalation.
94
+
95
+ steps:
96
+ - id: sync_plans
97
+ title: "Register a governance plan with strict authority"
98
+ narrative: |
99
+ The buyer's governance agent registers a plan with a $10K per-transaction limit
100
+ and no escalation path. Buys that exceed this threshold are denied outright.
101
+ task: sync_plans
102
+ schema_ref: "governance/sync-plans-request.json"
103
+ response_schema_ref: "governance/sync-plans-response.json"
104
+ doc_ref: "/governance/campaign/tasks/sync_plans"
105
+ comply_scenario: governance_spend_authority/denied
106
+ stateful: true
107
+ expected: |
108
+ Acknowledge the governance plan:
109
+ - plan_id: identifier for this governance plan
110
+ - budget.total: $10K cap that any single buy above will exceed
111
+
112
+ sample_request:
113
+ idempotency_key: "$generate:uuid_v4#gov-spend-authority-denied-sync"
114
+ plans:
115
+ - plan_id: "gov_acme_strict"
116
+ brand:
117
+ domain: "acmeoutdoor.example"
118
+ objectives: "Acme Outdoor low-budget validation flight"
119
+ budget:
120
+ total: 10000
121
+ currency: "USD"
122
+ reallocation_threshold: 0
123
+ flight:
124
+ start: "2027-01-01T00:00:00Z"
125
+ end: "2027-12-31T23:59:59Z"
126
+ countries: ["US"]
127
+
128
+ context:
129
+ correlation_id: "governance_spend_authority--denied--sync_plans"
130
+ context_outputs:
131
+ - name: plan_id
132
+ path: 'plans[0].plan_id'
133
+ validations:
134
+ - check: response_schema
135
+ description: "Response matches sync-plans-response.json schema"
136
+
137
+ - check: field_present
138
+ path: "context"
139
+ description: "Response echoes back the context object"
140
+ - check: field_value
141
+ path: "context.correlation_id"
142
+ value: "governance_spend_authority--denied--sync_plans"
143
+ description: "Context correlation_id returned unchanged"
144
+ - check: field_present
145
+ path: "plans[0].plan_id"
146
+ description: "Governance agent assigns plan_id — must be echoed in check_governance"
147
+ - id: governance_check
148
+ title: "Governance check — denied"
149
+ narrative: |
150
+ The buyer proposes a $50K media buy against the $10K threshold. The governance agent
151
+ evaluates the binding and returns a denied decision with a must-severity finding
152
+ explaining the spending authority violation. No escalation instructions are provided
153
+ because the plan has no escalation path.
154
+
155
+ steps:
156
+ - id: check_governance_denied
157
+ title: "Pre-buy governance check (denied, no escalation)"
158
+ narrative: |
159
+ The buyer calls check_governance with a $50K media buy binding. The governance
160
+ agent denies the buy because the total exceeds the $10K per-transaction authority.
161
+ The response includes a critical-severity finding with the violation details.
162
+ task: check_governance
163
+ schema_ref: "governance/check-governance-request.json"
164
+ response_schema_ref: "governance/check-governance-response.json"
165
+ doc_ref: "/governance/campaign/tasks/check_governance"
166
+ comply_scenario: governance_spend_authority/denied
167
+ stateful: true
168
+ expected: |
169
+ Return a denied governance decision:
170
+ - decision: denied
171
+ - findings: array with at least one critical-severity finding
172
+ - severity: critical
173
+ - category_id: SPENDING_AUTHORITY_EXCEEDED
174
+ - explanation: explains the threshold and how much the buy exceeds it
175
+ - No escalation instructions (plan has no escalation path)
176
+
177
+ sample_request:
178
+ plan_id: "$context.plan_id"
179
+ caller: "https://pinnacle-agency.example"
180
+ tool: "create_media_buy"
181
+ payload:
182
+ idempotency_key: "$generate:uuid_v4#governance_spend_authority_denied_check_governance_denied_payload"
183
+ account:
184
+ brand:
185
+ domain: "acmeoutdoor.example"
186
+ operator: "pinnacle-agency.example"
187
+ brand:
188
+ domain: "acmeoutdoor.example"
189
+ start_time: "2027-01-01T00:00:00Z"
190
+ end_time: "2027-03-31T23:59:59Z"
191
+ packages:
192
+ - product_id: "sports_ctv_q2"
193
+ budget: 30000
194
+ pricing_option_id: "cpm_standard"
195
+ - product_id: "outdoor_video_q2"
196
+ budget: 20000
197
+ pricing_option_id: "cpm_standard"
198
+
199
+ context:
200
+ correlation_id: "governance_spend_authority--denied--check_governance_denied"
201
+ validations:
202
+ - check: response_schema
203
+ description: "Response matches check-governance-response.json schema"
204
+ - check: field_present
205
+ path: "verdict"
206
+ description: "Response contains a governance verdict"
207
+ - check: field_value
208
+ path: "verdict"
209
+ value: "denied"
210
+ description: "Verdict is denied"
211
+ - check: field_present
212
+ path: "findings"
213
+ description: "Response contains findings explaining the denial"
214
+
215
+ - check: field_present
216
+ path: "context"
217
+ description: "Response echoes back the context object"
218
+ - check: field_value
219
+ path: "context.correlation_id"
220
+ value: "governance_spend_authority--denied--check_governance_denied"
221
+ description: "Context correlation_id returned unchanged"
@@ -0,0 +1,330 @@
1
+ id: governance_spend_authority
2
+ version: "1.0.0"
3
+ title: "Campaign governance — conditional approval"
4
+ protocol: governance
5
+ category: governance_spend_authority
6
+ summary: "Governance agent approves a media buy with conditions. Buyer re-checks after meeting the conditions."
7
+ track: campaign_governance
8
+ required_tools:
9
+ - sync_plans
10
+ - check_governance
11
+
12
+ # Cross-step assertion (adcp#2639): silent on approval runs; fires only
13
+ # if a seller surfaces a denial signal mid-flow and then still mutates
14
+ # the plan's resources. Kept wired here so any future "conditions not
15
+ # met → denied" phase added to this storyboard is automatically gated.
16
+ # Cross-step assertion (adcp#2664): status.monotonic rejects media_buy
17
+ # status transitions observed across steps that aren't on the spec
18
+ # lifecycle graph — e.g. active → pending_creatives.
19
+ invariants:
20
+ - governance.denial_blocks_mutation
21
+ - status.monotonic
22
+
23
+ narrative: |
24
+ The buyer's governance agent evaluates a media buy that falls within spending authority but
25
+ triggers policy conditions — for example, the buy targets a channel that requires weekly
26
+ reporting, or the creative format requires brand safety review.
27
+
28
+ The governance agent returns approved_with_conditions, attaching conditions the buyer must
29
+ honor during the campaign. The buyer can proceed with the media buy by passing the
30
+ governance context, but the conditions are binding.
31
+
32
+ This storyboard tests the middle path between outright approval and denial: the buy is
33
+ allowed, but with strings attached.
34
+
35
+ agent:
36
+ interaction_model: media_buy_seller
37
+ capabilities:
38
+ - sells_media
39
+ - governance_aware
40
+ examples:
41
+ - "Publisher platform with governance support"
42
+ - "SSP that respects governance checks"
43
+
44
+ caller:
45
+ role: buyer_agent
46
+ example: "Pinnacle Agency (buyer)"
47
+
48
+ prerequisites:
49
+ description: |
50
+ The caller needs a brand identity, operator credentials, and a governance agent URL.
51
+ The governance plan defines policy conditions that trigger on specific buy parameters.
52
+ test_kit: "test-kits/acme-outdoor.yaml"
53
+ controller_seeding: true
54
+
55
+ fixtures:
56
+ products:
57
+ - product_id: "sports_ctv_q2"
58
+ delivery_type: "guaranteed"
59
+ channels: ["ctv"]
60
+ format_ids:
61
+ - id: "video_30s"
62
+ - product_id: "lifestyle_display_q2"
63
+ delivery_type: "guaranteed"
64
+ channels: ["display"]
65
+ format_ids:
66
+ - id: "display_300x250"
67
+ pricing_options:
68
+ - product_id: "sports_ctv_q2"
69
+ pricing_option_id: "cpm_guaranteed"
70
+ pricing_model: "cpm"
71
+ currency: "USD"
72
+ fixed_price: 45.0
73
+ - product_id: "lifestyle_display_q2"
74
+ pricing_option_id: "cpm_standard"
75
+ pricing_model: "cpm"
76
+ currency: "USD"
77
+ fixed_price: 8.0
78
+ plans:
79
+ - plan_id: "gov_acme_spend_authority_q2_2027"
80
+ brand:
81
+ domain: "acmeoutdoor.example"
82
+ objectives: "Full spending authority with conditional policies on CTV reporting and UGC brand safety"
83
+ budget:
84
+ total: 100000
85
+ currency: "USD"
86
+ reallocation_unlimited: true
87
+ flight:
88
+ start: "2027-01-01T00:00:00Z"
89
+ end: "2027-12-31T23:59:59Z"
90
+ countries: ["US"]
91
+ custom_policies:
92
+ - policy_id: "ctv_weekly_reporting"
93
+ enforcement: "must"
94
+ policy: "CTV buys require weekly delivery reporting."
95
+ - policy_id: "ugc_brand_safety"
96
+ enforcement: "must"
97
+ policy: "UGC placements require brand safety review before go-live."
98
+
99
+ phases:
100
+ - id: capability_discovery
101
+ title: "Capability discovery"
102
+ narrative: |
103
+ The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
104
+
105
+ steps:
106
+ - id: get_capabilities
107
+ title: "Check agent capabilities"
108
+ narrative: |
109
+ Verify that the agent declares the expected protocol support before
110
+ proceeding with domain-specific operations.
111
+ task: get_adcp_capabilities
112
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
113
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
114
+ doc_ref: "/protocol/get_adcp_capabilities"
115
+ comply_scenario: capability_discovery
116
+ stateful: false
117
+ expected: |
118
+ Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
119
+ sample_request:
120
+ context:
121
+ correlation_id: "governance_spend_authority--get_capabilities"
122
+ validations:
123
+ - check: response_schema
124
+ description: "Response matches get-adcp-capabilities-response.json schema"
125
+ - check: field_present
126
+ path: "supported_protocols"
127
+ description: "Agent declares supported protocols"
128
+
129
+ - check: field_present
130
+ path: "context"
131
+ description: "Response echoes back the context object"
132
+ - check: field_value
133
+ path: "context.correlation_id"
134
+ value: "governance_spend_authority--get_capabilities"
135
+ description: "Context correlation_id returned unchanged"
136
+ - id: plan_registration
137
+ title: "Register governance plan with policy conditions"
138
+ narrative: |
139
+ The buyer registers a governance plan that allows the agent full spending authority
140
+ but attaches policy conditions for specific channels or formats. Buys that trigger
141
+ these policies are approved with conditions rather than denied.
142
+
143
+ steps:
144
+ - id: sync_plans
145
+ title: "Register a governance plan with policy conditions"
146
+ narrative: |
147
+ The buyer's governance agent registers a plan with full spending authority but
148
+ custom policies that require weekly reporting for CTV buys and brand safety
149
+ review for user-generated content placements.
150
+ task: sync_plans
151
+ schema_ref: "governance/sync-plans-request.json"
152
+ response_schema_ref: "governance/sync-plans-response.json"
153
+ doc_ref: "/governance/campaign/tasks/sync_plans"
154
+ comply_scenario: governance_spend_authority
155
+ stateful: true
156
+ expected: |
157
+ Acknowledge the governance plan:
158
+ - plan_id: identifier for this governance plan
159
+ - custom_policies: policy conditions registered
160
+
161
+ sample_request:
162
+ idempotency_key: "$generate:uuid_v4#gov-spend-authority-sync"
163
+ plans:
164
+ - plan_id: "gov_acme_spend_authority_q2_2027"
165
+ brand:
166
+ domain: "acmeoutdoor.example"
167
+ objectives: "Full spending authority with conditional policies on CTV reporting and UGC brand safety"
168
+ budget:
169
+ total: 100000
170
+ currency: "USD"
171
+ reallocation_unlimited: true
172
+ flight:
173
+ start: "2027-01-01T00:00:00Z"
174
+ end: "2027-12-31T23:59:59Z"
175
+ countries: ["US"]
176
+ custom_policies:
177
+ - policy_id: "ctv_weekly_reporting"
178
+ enforcement: "must"
179
+ policy: "CTV buys require weekly delivery reporting."
180
+ - policy_id: "ugc_brand_safety"
181
+ enforcement: "must"
182
+ policy: "UGC placements require brand safety review before go-live."
183
+
184
+ context:
185
+ correlation_id: "governance_spend_authority--sync_plans"
186
+ context_outputs:
187
+ - name: plan_id
188
+ path: 'plans[0].plan_id'
189
+ validations:
190
+ - check: response_schema
191
+ description: "Response matches sync-plans-response.json schema"
192
+
193
+ - check: field_present
194
+ path: "context"
195
+ description: "Response echoes back the context object"
196
+ - check: field_value
197
+ path: "context.correlation_id"
198
+ value: "governance_spend_authority--sync_plans"
199
+ description: "Context correlation_id returned unchanged"
200
+ - check: field_present
201
+ path: "plans[0].plan_id"
202
+ description: "Governance agent assigns plan_id — must be echoed in check_governance"
203
+ - check: field_present
204
+ path: "plans[0].version"
205
+ description: "Plan includes version for concurrency"
206
+ - id: governance_check_conditions
207
+ title: "Governance check — approved with conditions"
208
+ narrative: |
209
+ The buyer proposes a media buy that includes CTV inventory. The governance agent
210
+ approves the buy but attaches the weekly reporting condition from the plan. The
211
+ buyer receives a governance context that encodes these conditions.
212
+
213
+ steps:
214
+ - id: check_governance_conditions
215
+ title: "Pre-buy governance check (approved with conditions)"
216
+ narrative: |
217
+ The buyer calls check_governance with a media buy that includes CTV products.
218
+ The governance agent approves the buy but attaches conditions: weekly delivery
219
+ reporting is required for the CTV line items.
220
+ task: check_governance
221
+ schema_ref: "governance/check-governance-request.json"
222
+ response_schema_ref: "governance/check-governance-response.json"
223
+ doc_ref: "/governance/campaign/tasks/check_governance"
224
+ comply_scenario: governance_spend_authority
225
+ stateful: true
226
+ expected: |
227
+ Return an approved governance decision with conditions:
228
+ - decision: approved
229
+ - conditions: array of requirements the buyer must honor
230
+ - e.g., "Weekly delivery reporting required for CTV line items"
231
+ - governance_context: token the buyer passes to create_media_buy
232
+ - findings: may include warning-severity findings noting the conditions
233
+
234
+ sample_request:
235
+ plan_id: "$context.plan_id"
236
+ caller: "https://pinnacle-agency.example"
237
+ tool: "create_media_buy"
238
+ payload:
239
+ account:
240
+ brand:
241
+ domain: "acmeoutdoor.example"
242
+ operator: "pinnacle-agency.example"
243
+ total_budget: 40000
244
+ packages:
245
+ - product_id: "sports_ctv_q2"
246
+ budget: 25000
247
+ - product_id: "lifestyle_display_q2"
248
+ budget: 15000
249
+
250
+ context:
251
+ correlation_id: "governance_spend_authority--check_governance_conditions"
252
+ validations:
253
+ - check: response_schema
254
+ description: "Response matches check-governance-response.json schema"
255
+ - check: field_present
256
+ path: "verdict"
257
+ description: "Response contains a governance verdict"
258
+ - check: field_present
259
+ path: "conditions"
260
+ description: "Approval includes conditions"
261
+ - check: field_present
262
+ path: "governance_context"
263
+ description: "Response includes governance context for the media buy"
264
+
265
+ - check: field_present
266
+ path: "context"
267
+ description: "Response echoes back the context object"
268
+ - check: field_value
269
+ path: "context.correlation_id"
270
+ value: "governance_spend_authority--check_governance_conditions"
271
+ description: "Context correlation_id returned unchanged"
272
+ - id: create_buy_with_conditions
273
+ title: "Create media buy with governance conditions"
274
+ narrative: |
275
+ The buyer creates the media buy, passing the governance context from the conditional
276
+ approval. The seller validates the governance approval and confirms the buy. The
277
+ conditions from the governance check are now binding for the campaign duration.
278
+
279
+ steps:
280
+ - id: create_media_buy
281
+ title: "Create a media buy with conditional governance approval"
282
+ narrative: |
283
+ The buyer creates the media buy with the governance_context token from the
284
+ conditional approval. The seller confirms the buy. The buyer is now bound by
285
+ the conditions (weekly reporting for CTV line items).
286
+ task: create_media_buy
287
+ schema_ref: "media-buy/create-media-buy-request.json"
288
+ response_schema_ref: "media-buy/create-media-buy-response.json"
289
+ doc_ref: "/media-buy/task-reference/create_media_buy"
290
+ comply_scenario: governance_spend_authority
291
+ stateful: true
292
+ expected: |
293
+ Confirm the media buy with governance approval:
294
+ - media_buy_id: your platform's identifier
295
+ - status: active
296
+ - governance_context: echoed back confirming governance was validated
297
+ - packages: line items
298
+
299
+ sample_request:
300
+ account:
301
+ brand:
302
+ domain: "acmeoutdoor.example"
303
+ operator: "pinnacle-agency.example"
304
+ brand:
305
+ domain: "acmeoutdoor.example"
306
+ governance_context: "gov_ctx_acme_conditional_approved"
307
+ start_time: "2026-04-01T00:00:00Z"
308
+ end_time: "2026-06-30T23:59:59Z"
309
+ packages:
310
+ - product_id: "sports_ctv_q2"
311
+ budget: 25000
312
+ pricing_option_id: "cpm_guaranteed"
313
+ - product_id: "lifestyle_display_q2"
314
+ budget: 15000
315
+ pricing_option_id: "cpm_standard"
316
+
317
+ idempotency_key: "$generate:uuid_v4#governance_spend_authority_create_buy_with_conditions_create_media_buy"
318
+ context:
319
+ correlation_id: "governance_spend_authority--create_media_buy"
320
+ validations:
321
+ - check: response_schema
322
+ description: "Response matches create-media-buy-response.json schema"
323
+
324
+ - check: field_present
325
+ path: "context"
326
+ description: "Response echoes back the context object"
327
+ - check: field_value
328
+ path: "context.correlation_id"
329
+ value: "governance_spend_authority--create_media_buy"
330
+ description: "Context correlation_id returned unchanged"