@adcp/sdk 7.10.2 → 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 (305) 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/index.d.ts +1 -1
  270. package/dist/lib/index.d.ts.map +1 -1
  271. package/dist/lib/index.js +9 -5
  272. package/dist/lib/index.js.map +1 -1
  273. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  274. package/dist/lib/testing/storyboard/default-invariants.js +30 -1
  275. package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
  276. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  277. package/dist/lib/testing/storyboard/runner.js +84 -21
  278. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  279. package/dist/lib/testing/storyboard/types.d.ts +21 -0
  280. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  281. package/dist/lib/testing/storyboard/types.js.map +1 -1
  282. package/dist/lib/testing/types.d.ts +9 -0
  283. package/dist/lib/testing/types.d.ts.map +1 -1
  284. package/dist/lib/types/schemas.generated.d.ts +6707 -12040
  285. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  286. package/dist/lib/types/schemas.generated.js +1 -1
  287. package/dist/lib/types/schemas.generated.js.map +1 -1
  288. package/dist/lib/utils/signal-id-builders.d.ts +19 -0
  289. package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
  290. package/dist/lib/utils/signal-id-builders.js +30 -0
  291. package/dist/lib/utils/signal-id-builders.js.map +1 -1
  292. package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
  293. package/dist/lib/utils/tool-request-schemas.js +3 -0
  294. package/dist/lib/utils/tool-request-schemas.js.map +1 -1
  295. package/dist/lib/v2/projection/constants.d.ts +28 -0
  296. package/dist/lib/v2/projection/constants.d.ts.map +1 -0
  297. package/dist/lib/v2/projection/constants.js +31 -0
  298. package/dist/lib/v2/projection/constants.js.map +1 -0
  299. package/dist/lib/v2/projection/registry.d.ts.map +1 -1
  300. package/dist/lib/v2/projection/registry.js +9 -4
  301. package/dist/lib/v2/projection/registry.js.map +1 -1
  302. package/dist/lib/version.d.ts +3 -3
  303. package/dist/lib/version.js +3 -3
  304. package/package.json +1 -1
  305. package/skills/SHAPE-GOTCHAS.md +5 -0
@@ -0,0 +1,640 @@
1
+ id: canonical_format_validate_input
2
+ version: "1.0.0"
3
+ title: "Canonical format validate_input"
4
+ category: schema_validation
5
+ summary: "Validates 3.1 canonical-format dry-run semantics: structural pass/fail across canonical slots and unvalidatable_nondeterministic for seeded products."
6
+ track: creative
7
+ introduced_in: "3.1"
8
+ required_tools:
9
+ - validate_input
10
+ - comply_test_controller
11
+
12
+ narrative: |
13
+ AdCP 3.1 adds `validate_input` so buyers can dry-run a v2 creative
14
+ manifest against canonical formats and product-specific format declarations
15
+ before committing to `sync_creatives` or `build_creative`.
16
+
17
+ The result discriminator is the conformance contract. Predictable inputs
18
+ return either `validated_pass` or `validated_fail` with violations. Products
19
+ whose production pipeline declares `synthesis_nondeterministic: true` return
20
+ `unvalidatable_nondeterministic` instead of pretending a pre-flight verdict
21
+ is knowable.
22
+
23
+ agent:
24
+ interaction_model: creative
25
+ capabilities:
26
+ - validates_canonical_formats
27
+ examples:
28
+ - "Creative agents that accept canonical v2 manifests"
29
+ - "Sales agents that pre-flight product-local format_options"
30
+
31
+ caller:
32
+ role: buyer_agent
33
+ example: "Compliance test harness"
34
+
35
+ prerequisites:
36
+ description: |
37
+ The runner seeds a product with a nondeterministic `video_hosted`
38
+ declaration so the product-target branch can verify the third
39
+ `validate_input` result kind.
40
+ test_kit: "test-kits/acme-outdoor.yaml"
41
+ controller_seeding: true
42
+
43
+ fixtures:
44
+ products:
45
+ - product_id: "validate_input_nondeterministic_video"
46
+ name: "Validate Input Nondeterministic Video"
47
+ description: "Seeded product whose generative video pipeline cannot be predictively validated."
48
+ publisher_properties:
49
+ - publisher_domain: "outdoormagazine.example"
50
+ selection_type: "all"
51
+ channels: ["olv"]
52
+ delivery_type: "guaranteed"
53
+ format_options:
54
+ - format_kind: "video_hosted"
55
+ format_option_id: "validate_input_video_brief"
56
+ display_name: "Validate Input Video Brief"
57
+ params:
58
+ synthesis_nondeterministic: true
59
+ asset_source: "agent_synthesized"
60
+ slots:
61
+ - asset_group_id: "creative_brief"
62
+ asset_type: "brief"
63
+ required: true
64
+ pricing_options:
65
+ - pricing_option_id: "validate_input_video_cpm"
66
+ pricing_model: "cpm"
67
+ currency: "USD"
68
+ fixed_price: 18
69
+ reporting_capabilities:
70
+ available_reporting_frequencies: ["daily"]
71
+ expected_delay_minutes: 60
72
+ timezone: "UTC"
73
+ supports_webhooks: false
74
+ available_metrics: ["impressions", "clicks", "spend"]
75
+ date_range_support: "date_range"
76
+
77
+ phases:
78
+ - id: canonical_positive_paths
79
+ title: "Canonical positive paths"
80
+ narrative: |
81
+ Each canonical target receives a minimal manifest satisfying that
82
+ canonical's required slot declarations. Algorithmic composition
83
+ canonicals still return structural `validated_pass`; they are not
84
+ `unvalidatable_nondeterministic` unless synthesis itself is declared
85
+ nondeterministic on a product declaration.
86
+
87
+ steps:
88
+ - id: validate_image
89
+ title: "Validate image manifest"
90
+ task: validate_input
91
+ schema_ref: "creative/validate-input-request.json"
92
+ response_schema_ref: "creative/validate-input-response.json"
93
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
94
+ comply_scenario: canonical_format_validation
95
+ stateful: false
96
+ sample_request:
97
+ adcp_version: "3.1-beta.5"
98
+ brand:
99
+ domain: "acmeoutdoor.example"
100
+ manifest:
101
+ format_kind: "image"
102
+ assets:
103
+ image_main:
104
+ asset_type: "image"
105
+ url: "https://cdn.acme.example/creative/mrec.png"
106
+ width: 300
107
+ height: 250
108
+ targets:
109
+ - kind: "canonical"
110
+ id: "image"
111
+ validations:
112
+ - check: response_schema
113
+ description: "Response matches validate-input-response.json schema"
114
+ - check: field_value
115
+ path: "results[0].result_kind"
116
+ value: "validated_pass"
117
+ description: "Complete image manifest passes structural validation"
118
+
119
+ - id: validate_html5
120
+ title: "Validate HTML5 manifest"
121
+ task: validate_input
122
+ schema_ref: "creative/validate-input-request.json"
123
+ response_schema_ref: "creative/validate-input-response.json"
124
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
125
+ comply_scenario: canonical_format_validation
126
+ stateful: false
127
+ sample_request:
128
+ adcp_version: "3.1-beta.5"
129
+ brand:
130
+ domain: "acmeoutdoor.example"
131
+ manifest:
132
+ format_kind: "html5"
133
+ assets:
134
+ html5_bundle:
135
+ asset_type: "zip"
136
+ url: "https://cdn.acme.example/creative/banner.zip"
137
+ targets:
138
+ - kind: "canonical"
139
+ id: "html5"
140
+ validations:
141
+ - check: field_value
142
+ path: "results[0].result_kind"
143
+ value: "validated_pass"
144
+ description: "Complete HTML5 manifest passes structural validation"
145
+
146
+ - id: validate_display_tag
147
+ title: "Validate display tag manifest"
148
+ task: validate_input
149
+ schema_ref: "creative/validate-input-request.json"
150
+ response_schema_ref: "creative/validate-input-response.json"
151
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
152
+ comply_scenario: canonical_format_validation
153
+ stateful: false
154
+ sample_request:
155
+ adcp_version: "3.1-beta.5"
156
+ brand:
157
+ domain: "acmeoutdoor.example"
158
+ manifest:
159
+ format_kind: "display_tag"
160
+ assets:
161
+ tag_url:
162
+ asset_type: "url"
163
+ url: "https://tags.acme.example/display.js?click={CLICK_URL}"
164
+ targets:
165
+ - kind: "canonical"
166
+ id: "display_tag"
167
+ validations:
168
+ - check: field_value
169
+ path: "results[0].result_kind"
170
+ value: "validated_pass"
171
+ description: "Complete display tag manifest passes structural validation"
172
+
173
+ - id: validate_image_carousel
174
+ title: "Validate image carousel manifest"
175
+ task: validate_input
176
+ schema_ref: "creative/validate-input-request.json"
177
+ response_schema_ref: "creative/validate-input-response.json"
178
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
179
+ comply_scenario: canonical_format_validation
180
+ stateful: false
181
+ sample_request:
182
+ adcp_version: "3.1-beta.5"
183
+ brand:
184
+ domain: "acmeoutdoor.example"
185
+ manifest:
186
+ format_kind: "image_carousel"
187
+ assets:
188
+ cards:
189
+ - asset_type: "card"
190
+ media:
191
+ asset_type: "image"
192
+ url: "https://cdn.acme.example/creative/card-1.png"
193
+ width: 1080
194
+ height: 1080
195
+ headline: "Trail jackets"
196
+ - asset_type: "card"
197
+ media:
198
+ asset_type: "image"
199
+ url: "https://cdn.acme.example/creative/card-2.png"
200
+ width: 1080
201
+ height: 1080
202
+ headline: "Weekend packs"
203
+ targets:
204
+ - kind: "canonical"
205
+ id: "image_carousel"
206
+ validations:
207
+ - check: field_value
208
+ path: "results[0].result_kind"
209
+ value: "validated_pass"
210
+ description: "Carousel manifest with two cards passes structural validation"
211
+
212
+ - id: validate_video_hosted
213
+ title: "Validate hosted video manifest"
214
+ task: validate_input
215
+ schema_ref: "creative/validate-input-request.json"
216
+ response_schema_ref: "creative/validate-input-response.json"
217
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
218
+ comply_scenario: canonical_format_validation
219
+ stateful: false
220
+ sample_request:
221
+ adcp_version: "3.1-beta.5"
222
+ brand:
223
+ domain: "acmeoutdoor.example"
224
+ manifest:
225
+ format_kind: "video_hosted"
226
+ assets:
227
+ video_main:
228
+ asset_type: "video"
229
+ url: "https://cdn.acme.example/creative/spot.mp4"
230
+ width: 1920
231
+ height: 1080
232
+ duration_ms: 30000
233
+ targets:
234
+ - kind: "canonical"
235
+ id: "video_hosted"
236
+ validations:
237
+ - check: field_value
238
+ path: "results[0].result_kind"
239
+ value: "validated_pass"
240
+ description: "Hosted video manifest passes structural validation"
241
+
242
+ - id: validate_video_vast
243
+ title: "Validate VAST manifest"
244
+ task: validate_input
245
+ schema_ref: "creative/validate-input-request.json"
246
+ response_schema_ref: "creative/validate-input-response.json"
247
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
248
+ comply_scenario: canonical_format_validation
249
+ stateful: false
250
+ sample_request:
251
+ adcp_version: "3.1-beta.5"
252
+ brand:
253
+ domain: "acmeoutdoor.example"
254
+ manifest:
255
+ format_kind: "video_vast"
256
+ assets:
257
+ vast_tag:
258
+ asset_type: "vast"
259
+ delivery_type: "url"
260
+ url: "https://vast.acme.example/tag.xml"
261
+ targets:
262
+ - kind: "canonical"
263
+ id: "video_vast"
264
+ validations:
265
+ - check: field_value
266
+ path: "results[0].result_kind"
267
+ value: "validated_pass"
268
+ description: "VAST manifest passes structural validation"
269
+
270
+ - id: validate_audio_hosted
271
+ title: "Validate hosted audio manifest"
272
+ task: validate_input
273
+ schema_ref: "creative/validate-input-request.json"
274
+ response_schema_ref: "creative/validate-input-response.json"
275
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
276
+ comply_scenario: canonical_format_validation
277
+ stateful: false
278
+ sample_request:
279
+ adcp_version: "3.1-beta.5"
280
+ brand:
281
+ domain: "acmeoutdoor.example"
282
+ manifest:
283
+ format_kind: "audio_hosted"
284
+ assets:
285
+ audio_main:
286
+ asset_type: "audio"
287
+ url: "https://cdn.acme.example/creative/audio.mp3"
288
+ duration_ms: 30000
289
+ targets:
290
+ - kind: "canonical"
291
+ id: "audio_hosted"
292
+ validations:
293
+ - check: field_value
294
+ path: "results[0].result_kind"
295
+ value: "validated_pass"
296
+ description: "Hosted audio manifest passes structural validation"
297
+
298
+ - id: validate_audio_daast
299
+ title: "Validate DAAST manifest"
300
+ task: validate_input
301
+ schema_ref: "creative/validate-input-request.json"
302
+ response_schema_ref: "creative/validate-input-response.json"
303
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
304
+ comply_scenario: canonical_format_validation
305
+ stateful: false
306
+ sample_request:
307
+ adcp_version: "3.1-beta.5"
308
+ brand:
309
+ domain: "acmeoutdoor.example"
310
+ manifest:
311
+ format_kind: "audio_daast"
312
+ assets:
313
+ daast_tag:
314
+ asset_type: "daast"
315
+ delivery_type: "url"
316
+ url: "https://daast.acme.example/tag.xml"
317
+ targets:
318
+ - kind: "canonical"
319
+ id: "audio_daast"
320
+ validations:
321
+ - check: field_value
322
+ path: "results[0].result_kind"
323
+ value: "validated_pass"
324
+ description: "DAAST manifest passes structural validation"
325
+
326
+ - id: validate_sponsored_placement
327
+ title: "Validate sponsored placement manifest"
328
+ task: validate_input
329
+ schema_ref: "creative/validate-input-request.json"
330
+ response_schema_ref: "creative/validate-input-response.json"
331
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
332
+ comply_scenario: canonical_format_validation
333
+ stateful: false
334
+ sample_request:
335
+ adcp_version: "3.1-beta.5"
336
+ brand:
337
+ domain: "acmeoutdoor.example"
338
+ manifest:
339
+ format_kind: "sponsored_placement"
340
+ assets:
341
+ source_catalog:
342
+ asset_type: "catalog"
343
+ type: "product"
344
+ items:
345
+ - sku: "ACME-TRAIL-001"
346
+ name: "Trail jacket"
347
+ targets:
348
+ - kind: "canonical"
349
+ id: "sponsored_placement"
350
+ validations:
351
+ - check: field_value
352
+ path: "results[0].result_kind"
353
+ value: "validated_pass"
354
+ description: "Sponsored placement manifest passes structural validation"
355
+
356
+ - id: validate_native_in_feed
357
+ title: "Validate native in-feed manifest"
358
+ task: validate_input
359
+ schema_ref: "creative/validate-input-request.json"
360
+ response_schema_ref: "creative/validate-input-response.json"
361
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
362
+ comply_scenario: canonical_format_validation
363
+ stateful: false
364
+ sample_request:
365
+ adcp_version: "3.1-beta.5"
366
+ brand:
367
+ domain: "acmeoutdoor.example"
368
+ manifest:
369
+ format_kind: "native_in_feed"
370
+ assets:
371
+ title:
372
+ asset_type: "text"
373
+ content: "Gear for every trail"
374
+ advertiser_name:
375
+ asset_type: "text"
376
+ content: "Acme Outdoor"
377
+ landing_page_url:
378
+ asset_type: "url"
379
+ url: "https://acmeoutdoor.example/trails"
380
+ targets:
381
+ - kind: "canonical"
382
+ id: "native_in_feed"
383
+ validations:
384
+ - check: field_value
385
+ path: "results[0].result_kind"
386
+ value: "validated_pass"
387
+ description: "Native in-feed manifest passes structural validation"
388
+
389
+ - id: validate_responsive_creative
390
+ title: "Validate responsive creative manifest"
391
+ task: validate_input
392
+ schema_ref: "creative/validate-input-request.json"
393
+ response_schema_ref: "creative/validate-input-response.json"
394
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
395
+ comply_scenario: canonical_format_validation
396
+ stateful: false
397
+ sample_request:
398
+ adcp_version: "3.1-beta.5"
399
+ brand:
400
+ domain: "acmeoutdoor.example"
401
+ manifest:
402
+ format_kind: "responsive_creative"
403
+ assets:
404
+ headlines:
405
+ - asset_type: "text"
406
+ content: "Trail gear"
407
+ - asset_type: "text"
408
+ content: "Pack light"
409
+ - asset_type: "text"
410
+ content: "Summit-ready"
411
+ descriptions:
412
+ - asset_type: "text"
413
+ content: "Durable equipment for weekend trips."
414
+ - asset_type: "text"
415
+ content: "Shop fictional outdoor essentials."
416
+ logo:
417
+ asset_type: "image"
418
+ url: "https://cdn.acme.example/creative/logo.png"
419
+ width: 512
420
+ height: 512
421
+ landing_page_url:
422
+ asset_type: "url"
423
+ url: "https://acmeoutdoor.example/responsive"
424
+ targets:
425
+ - kind: "canonical"
426
+ id: "responsive_creative"
427
+ validations:
428
+ - check: field_value
429
+ path: "results[0].result_kind"
430
+ value: "validated_pass"
431
+ description: "Algorithmic composition still receives a structural pass/fail verdict"
432
+
433
+ - id: validate_agent_placement
434
+ title: "Validate agent placement manifest"
435
+ task: validate_input
436
+ schema_ref: "creative/validate-input-request.json"
437
+ response_schema_ref: "creative/validate-input-response.json"
438
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
439
+ comply_scenario: canonical_format_validation
440
+ stateful: false
441
+ sample_request:
442
+ adcp_version: "3.1-beta.5"
443
+ brand:
444
+ domain: "acmeoutdoor.example"
445
+ manifest:
446
+ format_kind: "agent_placement"
447
+ brand:
448
+ domain: "acmeoutdoor.example"
449
+ assets:
450
+ landing_page_url:
451
+ asset_type: "url"
452
+ url: "https://acmeoutdoor.example/agent-placement"
453
+ targets:
454
+ - kind: "canonical"
455
+ id: "agent_placement"
456
+ validations:
457
+ - check: field_value
458
+ path: "results[0].result_kind"
459
+ value: "validated_pass"
460
+ description: "Agent placement manifest passes structural validation"
461
+
462
+ - id: canonical_negative_paths
463
+ title: "Canonical negative paths"
464
+ narrative: |
465
+ Predictable canonical targets return `validated_fail` when required
466
+ slots are missing or typed incorrectly. The response carries structured
467
+ `violations[]` so buyers can correct the manifest.
468
+
469
+ steps:
470
+ - id: validate_image_missing_required_slot
471
+ title: "Reject image manifest missing image_main"
472
+ task: validate_input
473
+ schema_ref: "creative/validate-input-request.json"
474
+ response_schema_ref: "creative/validate-input-response.json"
475
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
476
+ comply_scenario: canonical_format_validation
477
+ stateful: false
478
+ sample_request:
479
+ adcp_version: "3.1-beta.5"
480
+ brand:
481
+ domain: "acmeoutdoor.example"
482
+ manifest:
483
+ format_kind: "image"
484
+ assets:
485
+ headline:
486
+ asset_type: "text"
487
+ content: "No image supplied"
488
+ targets:
489
+ - kind: "canonical"
490
+ id: "image"
491
+ validations:
492
+ - check: response_schema
493
+ description: "Failure response still matches validate-input-response.json"
494
+ - check: field_value
495
+ path: "results[0].result_kind"
496
+ value: "validated_fail"
497
+ description: "Predictable canonical validation returns a failing verdict"
498
+ - check: field_value
499
+ path: "results[0].violations[0].rule"
500
+ value: "required_slot"
501
+ description: "Failure explains that the required canonical slot is absent"
502
+ - check: field_value
503
+ path: "results[0].violations[0].field"
504
+ value: "assets.image_main"
505
+ description: "Violation points at the missing manifest slot"
506
+
507
+ - id: validate_responsive_creative_missing_logo
508
+ title: "Reject responsive creative manifest missing logo"
509
+ task: validate_input
510
+ schema_ref: "creative/validate-input-request.json"
511
+ response_schema_ref: "creative/validate-input-response.json"
512
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
513
+ comply_scenario: canonical_format_validation
514
+ stateful: false
515
+ sample_request:
516
+ adcp_version: "3.1-beta.5"
517
+ brand:
518
+ domain: "acmeoutdoor.example"
519
+ manifest:
520
+ format_kind: "responsive_creative"
521
+ assets:
522
+ headlines:
523
+ - asset_type: "text"
524
+ content: "Trail gear"
525
+ - asset_type: "text"
526
+ content: "Pack light"
527
+ - asset_type: "text"
528
+ content: "Summit-ready"
529
+ descriptions:
530
+ - asset_type: "text"
531
+ content: "Durable equipment for weekend trips."
532
+ - asset_type: "text"
533
+ content: "Shop fictional outdoor essentials."
534
+ landing_page_url:
535
+ asset_type: "url"
536
+ url: "https://acmeoutdoor.example/responsive"
537
+ targets:
538
+ - kind: "canonical"
539
+ id: "responsive_creative"
540
+ validations:
541
+ - check: field_value
542
+ path: "results[0].result_kind"
543
+ value: "validated_fail"
544
+ description: "Responsive creative rejects a manifest without the required logo slot"
545
+ - check: field_value
546
+ path: "results[0].violations[0].rule"
547
+ value: "required_slot"
548
+ description: "Failure explains that the required logo slot is absent"
549
+ - check: field_value
550
+ path: "results[0].violations[0].field"
551
+ value: "assets.logo"
552
+ description: "Violation points at the missing logo slot"
553
+
554
+ - id: product_nondeterministic_paths
555
+ title: "Product nondeterministic paths"
556
+ narrative: |
557
+ Product-specific declarations can carry `synthesis_nondeterministic:
558
+ true`. Those are not structural failures; they are unvalidatable before
559
+ the generation pipeline runs.
560
+
561
+ steps:
562
+ - id: validate_seeded_nondeterministic_product_missing_brief
563
+ title: "Reject seeded product manifest missing required brief"
564
+ task: validate_input
565
+ schema_ref: "creative/validate-input-request.json"
566
+ response_schema_ref: "creative/validate-input-response.json"
567
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
568
+ comply_scenario: canonical_format_validation
569
+ stateful: true
570
+ sample_request:
571
+ adcp_version: "3.1-beta.5"
572
+ account:
573
+ brand:
574
+ domain: "acmeoutdoor.example"
575
+ operator: "pinnacle-agency.example"
576
+ sandbox: true
577
+ manifest:
578
+ format_kind: "video_hosted"
579
+ format_option_ref:
580
+ scope: "product"
581
+ format_option_id: "validate_input_video_brief"
582
+ assets: {}
583
+ targets:
584
+ - kind: "product"
585
+ id: "validate_input_nondeterministic_video"
586
+ validations:
587
+ - check: field_value
588
+ path: "results[0].result_kind"
589
+ value: "validated_fail"
590
+ description: "Missing deterministic inputs fail before nondeterminism is reported"
591
+ - check: field_value
592
+ path: "results[0].violations[0].rule"
593
+ value: "required_slot"
594
+ description: "Failure explains that the required product slot is absent"
595
+ - check: field_value
596
+ path: "results[0].violations[0].field"
597
+ value: "assets.creative_brief"
598
+ description: "Violation points at the missing brief slot"
599
+
600
+ - id: validate_seeded_nondeterministic_product
601
+ title: "Return unvalidatable_nondeterministic for seeded product"
602
+ task: validate_input
603
+ schema_ref: "creative/validate-input-request.json"
604
+ response_schema_ref: "creative/validate-input-response.json"
605
+ doc_ref: "/creative/canonical-formats#validation-flow--validate_input"
606
+ comply_scenario: canonical_format_validation
607
+ stateful: true
608
+ sample_request:
609
+ adcp_version: "3.1-beta.5"
610
+ account:
611
+ brand:
612
+ domain: "acmeoutdoor.example"
613
+ operator: "pinnacle-agency.example"
614
+ sandbox: true
615
+ manifest:
616
+ format_kind: "video_hosted"
617
+ format_option_ref:
618
+ scope: "product"
619
+ format_option_id: "validate_input_video_brief"
620
+ assets:
621
+ creative_brief:
622
+ asset_type: "brief"
623
+ name: "Acme Outdoor Launch Video"
624
+ objective: "awareness"
625
+ tone: "Cinematic and energetic"
626
+ audience: "Outdoor enthusiasts planning weekend trips"
627
+ territory: "Trail-ready gear for every forecast"
628
+ messaging:
629
+ headline: "Ready for the next trail"
630
+ cta: "Explore the collection"
631
+ targets:
632
+ - kind: "product"
633
+ id: "validate_input_nondeterministic_video"
634
+ validations:
635
+ - check: response_schema
636
+ description: "Response matches validate-input-response.json schema"
637
+ - check: field_value
638
+ path: "results[0].result_kind"
639
+ value: "unvalidatable_nondeterministic"
640
+ description: "Nondeterministic synthesis is surfaced as its own result kind"