@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,682 @@
1
+ id: media_buy_governance_escalation
2
+ version: "1.0.0"
3
+ title: "Governance denial and human escalation"
4
+ category: media_buy_governance_escalation
5
+ summary: "Buyer's governance agent denies a media buy that exceeds spending authority, escalates to a human who approves with conditions."
6
+ track: campaign_governance
7
+ required_tools:
8
+ - sync_plans
9
+ - check_governance
10
+
11
+ narrative: |
12
+ The buyer's governance agent denies a media buy because it exceeds the agent's spending
13
+ authority. The governance check escalates to a human reviewer who approves with conditions.
14
+
15
+ This storyboard shows the full governance loop: plan registration with spending authority
16
+ limits, product discovery, pre-buy governance check that gets denied, human escalation
17
+ that results in conditional approval, media buy creation with the approved governance
18
+ context, outcome reporting, and a complete audit trail.
19
+
20
+ Governance exists to ensure that automated agents operate within defined boundaries. When
21
+ those boundaries are exceeded, the system escalates to humans rather than blocking
22
+ entirely. The audit trail provides accountability for every decision in the chain.
23
+
24
+ agent:
25
+ interaction_model: media_buy_seller
26
+ capabilities:
27
+ - sells_media
28
+ - governance_aware
29
+ examples:
30
+ - "Publisher platform integrated with buyer governance"
31
+ - "SSP that respects governance checks"
32
+ - "Retail media network with governance support"
33
+
34
+ caller:
35
+ role: buyer_agent
36
+ example: "Pinnacle Agency (buyer)"
37
+
38
+ prerequisites:
39
+ description: |
40
+ The caller needs a brand identity, operator credentials, and a governance agent
41
+ URL. The test kit provides a sample brand (Acme Outdoor) with campaign parameters
42
+ and a governance configuration with spending authority limits.
43
+ test_kit: "test-kits/acme-outdoor.yaml"
44
+ controller_seeding: true
45
+
46
+ fixtures:
47
+ products:
48
+ - product_id: "sports_ctv_q2"
49
+ delivery_type: "guaranteed"
50
+ channels: ["ctv"]
51
+ format_ids:
52
+ - id: "video_30s"
53
+ - product_id: "outdoor_video_q2"
54
+ delivery_type: "guaranteed"
55
+ channels: ["video"]
56
+ format_ids:
57
+ - id: "video_15s"
58
+ pricing_options:
59
+ - product_id: "sports_ctv_q2"
60
+ pricing_option_id: "cpm_guaranteed"
61
+ pricing_model: "cpm"
62
+ currency: "USD"
63
+ fixed_price: 45.0
64
+ - product_id: "outdoor_video_q2"
65
+ pricing_option_id: "cpm_standard"
66
+ pricing_model: "cpm"
67
+ currency: "USD"
68
+ fixed_price: 12.0
69
+ plans:
70
+ - plan_id: "gov_acme_q2_2027"
71
+ brand:
72
+ domain: "acmeoutdoor.example"
73
+ objectives: "Q2 outdoor lifestyle campaign — display and video, Adults 25-54, US"
74
+ budget:
75
+ total: 50000
76
+ currency: "USD"
77
+ reallocation_threshold: 20000
78
+ flight:
79
+ start: "2027-04-01T00:00:00Z"
80
+ end: "2027-06-30T23:59:59Z"
81
+ countries: ["US"]
82
+ custom_policies:
83
+ - policy_id: "weekly_reporting_over_10k"
84
+ enforcement: "must"
85
+ policy: "Weekly reporting required for buys over $10K."
86
+ - policy_id: "seller_concentration_cap"
87
+ enforcement: "must"
88
+ policy: "No single-seller concentration above 60% of total budget."
89
+
90
+ phases:
91
+ - id: capability_discovery
92
+ title: "Capability discovery"
93
+ narrative: |
94
+ The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
95
+
96
+ steps:
97
+ - id: get_capabilities
98
+ title: "Check agent capabilities"
99
+ narrative: |
100
+ Verify that the agent declares the expected protocol support before
101
+ proceeding with domain-specific operations.
102
+ task: get_adcp_capabilities
103
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
104
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
105
+ doc_ref: "/protocol/get_adcp_capabilities"
106
+ comply_scenario: capability_discovery
107
+ stateful: false
108
+ expected: |
109
+ Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
110
+ sample_request:
111
+ context:
112
+ correlation_id: "media_buy_governance_escalation--get_capabilities"
113
+ validations:
114
+ - check: response_schema
115
+ description: "Response matches get-adcp-capabilities-response.json schema"
116
+ - check: field_present
117
+ path: "supported_protocols"
118
+ description: "Agent declares supported protocols"
119
+
120
+ - check: field_present
121
+ path: "context"
122
+ description: "Response echoes back the context object"
123
+ - check: field_value
124
+ path: "context.correlation_id"
125
+ value: "media_buy_governance_escalation--get_capabilities"
126
+ description: "Context correlation_id returned unchanged"
127
+ - id: account_setup
128
+ title: "Account and governance setup"
129
+ narrative: |
130
+ The buyer establishes an account and registers their governance agent with the
131
+ seller. The governance agent will be called before media buys are confirmed to
132
+ validate spending authority, brand safety, and compliance.
133
+
134
+ steps:
135
+ - id: sync_accounts
136
+ title: "Establish account relationship"
137
+ narrative: |
138
+ The buyer registers their brand and operator with your platform.
139
+ task: sync_accounts
140
+ schema_ref: "account/sync-accounts-request.json"
141
+ response_schema_ref: "account/sync-accounts-response.json"
142
+ doc_ref: "/accounts/tasks/sync_accounts"
143
+ stateful: true
144
+ expected: |
145
+ Return the account with:
146
+ - account_id: your platform's identifier
147
+ - action: created or updated
148
+ - status: active or pending_approval
149
+
150
+ sample_request:
151
+ accounts:
152
+ - brand:
153
+ domain: "acmeoutdoor.example"
154
+ operator: "pinnacle-agency.example"
155
+ billing: "operator"
156
+ payment_terms: "net_30"
157
+
158
+ idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_account_setup_sync_accounts"
159
+ context:
160
+ correlation_id: "media_buy_governance_escalation--sync_accounts"
161
+ validations:
162
+ - check: response_schema
163
+ description: "Response matches sync-accounts-response.json schema"
164
+ - check: field_present
165
+ path: "accounts[0].account_id"
166
+ description: "Account has a platform-assigned ID"
167
+
168
+ - check: field_present
169
+ path: "context"
170
+ description: "Response echoes back the context object"
171
+ - check: field_value
172
+ path: "context.correlation_id"
173
+ value: "media_buy_governance_escalation--sync_accounts"
174
+ description: "Context correlation_id returned unchanged"
175
+ - id: sync_governance
176
+ title: "Register governance agent"
177
+ narrative: |
178
+ The buyer tells your platform: "Before you confirm any media buy for this
179
+ account, call this governance agent to validate it." Your platform stores
180
+ the governance agent URL and will call it during create_media_buy.
181
+ task: sync_governance
182
+ schema_ref: "account/sync-governance-request.json"
183
+ response_schema_ref: "account/sync-governance-response.json"
184
+ doc_ref: "/accounts/tasks/sync_governance"
185
+ stateful: true
186
+ expected: |
187
+ Acknowledge the governance agents. Your platform should:
188
+ - Store the governance agent URLs for the specified accounts
189
+ - Return confirmation that agents were registered
190
+ - Use these agents during create_media_buy validation
191
+
192
+ sample_request:
193
+ accounts:
194
+ - account:
195
+ brand:
196
+ domain: "acmeoutdoor.example"
197
+ operator: "pinnacle-agency.example"
198
+ governance_agents:
199
+ - url: "https://governance.pinnacle-agency.example"
200
+ authentication:
201
+ schemes: ["Bearer"]
202
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
203
+
204
+ idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_account_setup_sync_governance"
205
+ context:
206
+ correlation_id: "media_buy_governance_escalation--sync_governance"
207
+ ext:
208
+ test_platform:
209
+ test_run: true
210
+ validations:
211
+ - check: response_schema
212
+ description: "Response matches sync-governance-response.json schema"
213
+
214
+ - check: field_present
215
+ path: "context"
216
+ description: "Response echoes back the context object"
217
+ - check: field_value
218
+ path: "context.correlation_id"
219
+ value: "media_buy_governance_escalation--sync_governance"
220
+ description: "Context correlation_id returned unchanged"
221
+ - id: register_plan
222
+ title: "Register governance plan with spending limits"
223
+ narrative: |
224
+ The buyer registers a governance plan that defines the agent's spending authority.
225
+ The plan sets a per-transaction threshold below the intended media buy amount.
226
+ This ensures the governance check will trigger an escalation when the buy exceeds
227
+ the agent's authority.
228
+
229
+ steps:
230
+ - id: sync_plans
231
+ title: "Register a governance plan with agent-limited authority"
232
+ narrative: |
233
+ The buyer's governance agent registers a plan with spending authority limits.
234
+ The plan sets a per-transaction threshold of $20K via reallocation_threshold
235
+ on the budget. Any media buy above this amount requires human approval.
236
+ task: sync_plans
237
+ schema_ref: "governance/sync-plans-request.json"
238
+ response_schema_ref: "governance/sync-plans-response.json"
239
+ doc_ref: "/governance/campaign/tasks/sync_plans"
240
+ comply_scenario: campaign_governance
241
+ stateful: true
242
+ expected: |
243
+ Acknowledge the governance plan:
244
+ - plan_id: identifier for this governance plan
245
+ - budget.reallocation_threshold: spending limit before re-evaluation
246
+ - human_review_required: set when the plan mandates escalation
247
+
248
+ sample_request:
249
+ idempotency_key: "$generate:uuid_v4#gov-escalation-sync"
250
+ plans:
251
+ - plan_id: "gov_acme_q2_2027"
252
+ brand:
253
+ domain: "acmeoutdoor.example"
254
+ objectives: "Q2 outdoor lifestyle campaign — display and video, Adults 25-54, US"
255
+ budget:
256
+ total: 50000
257
+ currency: "USD"
258
+ reallocation_threshold: 20000
259
+ flight:
260
+ start: "2027-04-01T00:00:00Z"
261
+ end: "2027-06-30T23:59:59Z"
262
+ countries: ["US"]
263
+ custom_policies:
264
+ - policy_id: "weekly_reporting_over_10k"
265
+ enforcement: "must"
266
+ policy: "Weekly reporting required for buys over $10K."
267
+ - policy_id: "seller_concentration_cap"
268
+ enforcement: "must"
269
+ policy: "No single-seller concentration above 60% of total budget."
270
+
271
+ context:
272
+ correlation_id: "media_buy_governance_escalation--sync_plans"
273
+ context_outputs:
274
+ - name: plan_id
275
+ path: 'plans[0].plan_id'
276
+ validations:
277
+ - check: response_schema
278
+ description: "Response matches sync-plans-response.json schema"
279
+
280
+ - check: field_present
281
+ path: "context"
282
+ description: "Response echoes back the context object"
283
+ - check: field_value
284
+ path: "context.correlation_id"
285
+ value: "media_buy_governance_escalation--sync_plans"
286
+ description: "Context correlation_id returned unchanged"
287
+ - check: field_present
288
+ path: "plans[0].plan_id"
289
+ description: "Governance agent assigns plan_id — must be echoed in check_governance"
290
+ - id: discover_products
291
+ title: "Product discovery"
292
+ narrative: |
293
+ The buyer sends a brief to discover products. The products returned will exceed
294
+ the governance agent's spending authority when assembled into a media buy.
295
+
296
+ steps:
297
+ - id: get_products_brief
298
+ title: "Send a brief"
299
+ narrative: |
300
+ The buyer describes what they want. Your platform returns products with
301
+ pricing that, when combined, will exceed the $20K per-transaction threshold
302
+ set in the governance plan.
303
+ task: get_products
304
+ schema_ref: "media-buy/get-products-request.json"
305
+ response_schema_ref: "media-buy/get-products-response.json"
306
+ doc_ref: "/media-buy/task-reference/get_products"
307
+ comply_scenario: full_sales_flow
308
+ stateful: false
309
+ expected: |
310
+ Return products matching the brief with pricing that totals above $20K:
311
+ - product_id, name, description
312
+ - delivery_type: guaranteed or non_guaranteed
313
+ - pricing_models with CPM and budget recommendations
314
+ - forecast: estimated delivery
315
+
316
+ sample_request:
317
+ buying_mode: "brief"
318
+ brief: "Premium CTV and video on sports publishers. Q2 flight, $50K budget. Adults 25-54, US."
319
+ brand:
320
+ domain: "acmeoutdoor.example"
321
+ account:
322
+ brand:
323
+ domain: "acmeoutdoor.example"
324
+ operator: "pinnacle-agency.example"
325
+
326
+ context:
327
+ correlation_id: "media_buy_governance_escalation--get_products_brief"
328
+ validations:
329
+ - check: response_schema
330
+ description: "Response matches get-products-response.json schema"
331
+ - check: field_present
332
+ path: "products"
333
+ description: "Response contains a products array"
334
+
335
+ - check: field_present
336
+ path: "context"
337
+ description: "Response echoes back the context object"
338
+ - check: field_value
339
+ path: "context.correlation_id"
340
+ value: "media_buy_governance_escalation--get_products_brief"
341
+ description: "Context correlation_id returned unchanged"
342
+ - check: field_present
343
+ path: "products[0].format_ids"
344
+ description: "Products include format_ids for creative requirements"
345
+ - check: field_present
346
+ path: "products[0].format_ids[0].agent_url"
347
+ description: "Format IDs include agent_url — must match this agent's URL"
348
+ - check: field_present
349
+ path: "products[0].format_ids[0].id"
350
+ description: "Format IDs include id — must be accepted back in sync_creatives"
351
+ - id: governance_check_denied
352
+ title: "Governance check — denied"
353
+ narrative: |
354
+ Before creating the media buy, the buyer's governance agent runs a pre-buy check.
355
+ The proposed buy totals $50K, which exceeds the agent's $20K per-transaction
356
+ authority. The governance agent denies the buy with a must-severity finding and
357
+ returns escalation instructions for human review.
358
+
359
+ steps:
360
+ - id: check_governance_denied
361
+ title: "Pre-buy governance check (denied)"
362
+ narrative: |
363
+ The buyer calls check_governance with the proposed media buy binding. The
364
+ governance agent evaluates the buy against the registered plan and finds that
365
+ the total exceeds the agent's spending authority. The check returns denied
366
+ with a must-severity finding and instructions for escalating to a human.
367
+ task: check_governance
368
+ schema_ref: "governance/check-governance-request.json"
369
+ response_schema_ref: "governance/check-governance-response.json"
370
+ doc_ref: "/governance/campaign/tasks/check_governance"
371
+ comply_scenario: governance_spend_authority/denied
372
+ stateful: true
373
+ expected: |
374
+ Return a denied governance decision:
375
+ - decision: denied
376
+ - findings: array with at least one must-severity finding
377
+ - severity: must
378
+ - code: SPENDING_AUTHORITY_EXCEEDED
379
+ - message: explains the agent's authority limit and how much the buy exceeds it
380
+ - escalation: instructions for human review
381
+ - governance_context: token/ID the buyer passes to the next check after escalation
382
+ - plan_id: the governance plan that triggered the denial
383
+
384
+ sample_request:
385
+ plan_id: "$context.plan_id"
386
+ caller: "https://pinnacle-agency.example"
387
+ tool: "create_media_buy"
388
+ payload:
389
+ idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_check_governance_denied_payload"
390
+ account:
391
+ brand:
392
+ domain: "acmeoutdoor.example"
393
+ operator: "pinnacle-agency.example"
394
+ brand:
395
+ domain: "acmeoutdoor.example"
396
+ start_time: "2027-01-01T00:00:00Z"
397
+ end_time: "2027-03-31T23:59:59Z"
398
+ packages:
399
+ - product_id: "sports_ctv_q2"
400
+ budget: 30000
401
+ pricing_option_id: "cpm_standard"
402
+ - product_id: "outdoor_video_q2"
403
+ budget: 20000
404
+ pricing_option_id: "cpm_standard"
405
+
406
+ context:
407
+ correlation_id: "media_buy_governance_escalation--check_governance_denied"
408
+ validations:
409
+ - check: response_schema
410
+ description: "Response matches check-governance-response.json schema"
411
+ - check: field_present
412
+ path: "verdict"
413
+ description: "Response contains a governance verdict"
414
+ - check: field_present
415
+ path: "findings"
416
+ description: "Response contains findings explaining the denial"
417
+
418
+ - check: field_present
419
+ path: "context"
420
+ description: "Response echoes back the context object"
421
+ - check: field_value
422
+ path: "context.correlation_id"
423
+ value: "media_buy_governance_escalation--check_governance_denied"
424
+ description: "Context correlation_id returned unchanged"
425
+ - id: human_escalation
426
+ title: "Human escalation — conditional approval"
427
+ narrative: |
428
+ The governance denial triggers human escalation. A human reviewer at the agency
429
+ reviews the proposed buy, the denial reason, and the governance plan. The human
430
+ approves the buy with conditions — for example, requiring weekly reporting. The
431
+ buyer calls check_governance again with the human's approval, and this time
432
+ the check returns approved with conditions.
433
+
434
+ steps:
435
+ - id: check_governance_approved
436
+ title: "Re-check governance after human approval (approved with conditions)"
437
+ narrative: |
438
+ After the human reviewer approves the buy, the buyer calls check_governance
439
+ again with the governance_context from the prior denial and the human's
440
+ approval. The governance agent returns approved with conditions that the
441
+ buyer must honor during the campaign.
442
+ task: check_governance
443
+ schema_ref: "governance/check-governance-request.json"
444
+ response_schema_ref: "governance/check-governance-response.json"
445
+ doc_ref: "/governance/campaign/tasks/check_governance"
446
+ comply_scenario: governance_spend_authority
447
+ stateful: true
448
+ expected: |
449
+ Return an approved governance decision with conditions:
450
+ - decision: approved
451
+ - conditions: array of requirements the buyer must honor
452
+ - e.g., "Weekly delivery reporting required"
453
+ - e.g., "Human review required for any budget increase"
454
+ - governance_context: updated token the buyer passes to create_media_buy
455
+ - approved_by: identifier of the human who approved
456
+ - approved_at: timestamp of approval
457
+
458
+ sample_request:
459
+ plan_id: "$context.plan_id"
460
+ caller: "https://pinnacle-agency.example"
461
+ governance_context: "gov_ctx_acme_q2_escalated"
462
+ tool: "create_media_buy"
463
+ payload:
464
+ idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_check_governance_approved_payload"
465
+ account:
466
+ brand:
467
+ domain: "acmeoutdoor.example"
468
+ operator: "pinnacle-agency.example"
469
+ brand:
470
+ domain: "acmeoutdoor.example"
471
+ start_time: "2027-01-01T00:00:00Z"
472
+ end_time: "2027-03-31T23:59:59Z"
473
+ packages:
474
+ - product_id: "sports_ctv_q2"
475
+ budget: 30000
476
+ pricing_option_id: "cpm_standard"
477
+ - product_id: "outdoor_video_q2"
478
+ budget: 20000
479
+ pricing_option_id: "cpm_standard"
480
+
481
+ context:
482
+ correlation_id: "media_buy_governance_escalation--check_governance_approved"
483
+ context_outputs:
484
+ - name: check_id
485
+ path: 'check_id'
486
+ validations:
487
+ - check: response_schema
488
+ description: "Response matches check-governance-response.json schema"
489
+ - check: field_present
490
+ path: "verdict"
491
+ description: "Response contains an approved governance verdict"
492
+ - check: field_present
493
+ path: "conditions"
494
+ description: "Approval includes conditions"
495
+
496
+ - check: field_present
497
+ path: "context"
498
+ description: "Response echoes back the context object"
499
+ - check: field_value
500
+ path: "context.correlation_id"
501
+ value: "media_buy_governance_escalation--check_governance_approved"
502
+ description: "Context correlation_id returned unchanged"
503
+ - check: field_present
504
+ path: "check_id"
505
+ description: "Check ID for audit trail — must be echoed in report_plan_outcome"
506
+ - id: create_buy_with_governance
507
+ title: "Create media buy with governance context"
508
+ narrative: |
509
+ The buyer creates the media buy, passing the governance_context from the approved
510
+ governance check. The seller's platform verifies the governance approval before
511
+ confirming the buy.
512
+
513
+ steps:
514
+ - id: create_media_buy
515
+ title: "Create a media buy with governance approval"
516
+ narrative: |
517
+ The buyer creates the media buy with the governance_context token from the
518
+ approved check. The seller's platform validates the governance approval and
519
+ confirms the buy. Without a valid governance_context, the platform would
520
+ reject the buy because the governance agent is registered for this account.
521
+ task: create_media_buy
522
+ schema_ref: "media-buy/create-media-buy-request.json"
523
+ response_schema_ref: "media-buy/create-media-buy-response.json"
524
+ doc_ref: "/media-buy/task-reference/create_media_buy"
525
+ comply_scenario: create_media_buy
526
+ stateful: true
527
+ expected: |
528
+ Confirm the media buy with governance approval:
529
+ - media_buy_id: your platform's identifier
530
+ - status: active
531
+ - confirmed_at: timestamp
532
+ - governance_context: echoed back confirming governance was validated
533
+ - packages: confirmed line items
534
+ - valid_actions: creative sync, get_delivery, etc.
535
+
536
+ sample_request:
537
+ account:
538
+ brand:
539
+ domain: "acmeoutdoor.example"
540
+ operator: "pinnacle-agency.example"
541
+ brand:
542
+ domain: "acmeoutdoor.example"
543
+ governance_context: "gov_ctx_acme_q2_approved"
544
+ start_time: "2026-04-01T00:00:00Z"
545
+ end_time: "2026-06-30T23:59:59Z"
546
+ packages:
547
+ - product_id: "sports_ctv_q2"
548
+ budget: 30000
549
+ pricing_option_id: "cpm_guaranteed"
550
+ creative_assignments:
551
+ - creative_id: "video_30s_trail_pro"
552
+ - product_id: "outdoor_video_q2"
553
+ budget: 20000
554
+ pricing_option_id: "cpm_standard"
555
+ creative_assignments:
556
+ - creative_id: "video_15s_trail_pro"
557
+
558
+ idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_create_buy_with_governance_create_media_buy"
559
+ context:
560
+ correlation_id: "media_buy_governance_escalation--create_media_buy"
561
+ context_outputs:
562
+ - name: media_buy_id
563
+ path: "media_buy_id"
564
+ validations:
565
+ - check: response_schema
566
+ description: "Response matches create-media-buy-response.json schema"
567
+
568
+ - check: field_present
569
+ path: "context"
570
+ description: "Response echoes back the context object"
571
+ - check: field_value
572
+ path: "context.correlation_id"
573
+ value: "media_buy_governance_escalation--create_media_buy"
574
+ description: "Context correlation_id returned unchanged"
575
+ - id: report_outcome
576
+ title: "Report governance outcome"
577
+ narrative: |
578
+ After the media buy is created, the buyer reports the outcome back to the
579
+ governance agent. This closes the governance loop by linking the actual media
580
+ buy to the governance check that authorized it.
581
+
582
+ steps:
583
+ - id: report_plan_outcome
584
+ title: "Report media buy outcome to governance"
585
+ narrative: |
586
+ The buyer reports the media buy creation back to the governance agent,
587
+ linking the media_buy_id to the governance check. This enables the governance
588
+ agent to track what was actually purchased against what was approved.
589
+ task: report_plan_outcome
590
+ schema_ref: "governance/report-plan-outcome-request.json"
591
+ response_schema_ref: "governance/report-plan-outcome-response.json"
592
+ doc_ref: "/governance/campaign/tasks/report_plan_outcome"
593
+ comply_scenario: campaign_governance
594
+ stateful: true
595
+ expected: |
596
+ Acknowledge the outcome report:
597
+ - outcome_id: identifier for this outcome record
598
+ - plan_id: the governance plan
599
+ - media_buy_id: the buy that was created
600
+ - governance_context: the approval that authorized it
601
+ - outcome_state: accepted
602
+
603
+ sample_request:
604
+ plan_id: "$context.plan_id"
605
+ governance_context: "gov_ctx_acme_q2_approved"
606
+ outcome: "completed"
607
+ seller_response:
608
+ seller_reference: "$context.media_buy_id"
609
+ committed_budget: 50000
610
+ packages:
611
+ - package_id: "pkg_sports_ctv_q2"
612
+ committed_budget: 30000
613
+ - package_id: "pkg_outdoor_video_q2"
614
+ committed_budget: 20000
615
+
616
+ idempotency_key: "$generate:uuid_v4#media_buy_governance_escalation_report_outcome_report_plan_outcome"
617
+ context:
618
+ correlation_id: "media_buy_governance_escalation--report_plan_outcome"
619
+ validations:
620
+ - check: response_schema
621
+ description: "Response matches report-plan-outcome-response.json schema"
622
+
623
+ - check: field_present
624
+ path: "context"
625
+ description: "Response echoes back the context object"
626
+ - check: field_value
627
+ path: "context.correlation_id"
628
+ value: "media_buy_governance_escalation--report_plan_outcome"
629
+ description: "Context correlation_id returned unchanged"
630
+ - id: audit_trail
631
+ title: "Governance audit trail"
632
+ narrative: |
633
+ The buyer (or an auditor) retrieves the full audit trail for the governance
634
+ plan. This shows every decision in the chain: the initial denial, the human
635
+ escalation, the conditional approval, the media buy creation, and the outcome
636
+ report. The audit trail provides accountability for automated spending decisions.
637
+
638
+ steps:
639
+ - id: get_plan_audit_logs
640
+ title: "Retrieve the full governance audit trail"
641
+ narrative: |
642
+ The buyer requests the audit log for the governance plan. The log shows
643
+ every governance event: check requests, denials, escalations, approvals,
644
+ and outcome reports. Each entry has a timestamp, actor, and decision.
645
+ task: get_plan_audit_logs
646
+ schema_ref: "governance/get-plan-audit-logs-request.json"
647
+ response_schema_ref: "governance/get-plan-audit-logs-response.json"
648
+ doc_ref: "/governance/campaign/tasks/get_plan_audit_logs"
649
+ comply_scenario: campaign_governance
650
+ stateful: false
651
+ expected: |
652
+ Return the complete audit trail for the governance plan:
653
+ - plan_id: the governance plan
654
+ - entries: ordered list of governance events, including:
655
+ 1. Plan registered with $20K per-transaction threshold
656
+ 2. Governance check denied — spending authority exceeded ($50K > $20K)
657
+ 3. Human escalation initiated
658
+ 4. Human approved with conditions (weekly reporting, budget increase review)
659
+ 5. Media buy created with governance approval
660
+ 6. Outcome reported linking media_buy_id to governance context
661
+ - Each entry includes: timestamp, event_type, actor, decision, details
662
+
663
+ sample_request:
664
+ plan_ids:
665
+ - "$context.plan_id"
666
+
667
+ context:
668
+ correlation_id: "media_buy_governance_escalation--get_plan_audit_logs"
669
+ validations:
670
+ - check: response_schema
671
+ description: "Response matches get-plan-audit-logs-response.json schema"
672
+ - check: field_present
673
+ path: "plans"
674
+ description: "Response contains audit log entries"
675
+
676
+ - check: field_present
677
+ path: "context"
678
+ description: "Response echoes back the context object"
679
+ - check: field_value
680
+ path: "context.correlation_id"
681
+ value: "media_buy_governance_escalation--get_plan_audit_logs"
682
+ description: "Context correlation_id returned unchanged"