@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,543 @@
1
+ id: creative/native_in_feed
2
+ version: "1.0.0"
3
+ title: "Native in-feed creative lifecycle"
4
+ category: creative
5
+ summary: "End-to-end native_in_feed conformance: format discovery, full 12-slot asset bundle submission with pixel trackers, per-constraint validation rejection paths, and feed-rendered preview."
6
+ track: creative
7
+ required_tools:
8
+ - sync_creatives
9
+
10
+ narrative: |
11
+ You run a native ad platform or content-recommendation network that accepts buyer-supplied
12
+ native asset bundles. A buyer agent discovers your native format, submits a full asset bundle
13
+ (title, body text, image, CTA, advertiser name, trackers), tests how you reject assets that
14
+ violate declared format constraints, and previews the assembled feed unit.
15
+
16
+ This storyboard exercises the native_in_feed canonical end-to-end, referencing format
17
+ constraints typical of a content-recommendation product (title_max_chars, main_image_sizes,
18
+ cta_values closed enum). Phase 3 isolates each validation failure case to a separate
19
+ sync_creatives call so that per-constraint error codes can be asserted cleanly.
20
+
21
+ agent:
22
+ interaction_model: stateful_push
23
+ capabilities:
24
+ - has_creative_library
25
+ examples:
26
+ - "Content recommendation networks"
27
+ - "Native ad platforms"
28
+ - "In-feed publisher ad servers"
29
+
30
+ caller:
31
+ role: buyer_agent
32
+ example: "Pinnacle Agency (buyer)"
33
+
34
+ prerequisites:
35
+ description: |
36
+ The seller platform supports at least one native_in_feed creative format with declared
37
+ constraints: title_max_chars, body_text_max_chars, main_image_sizes, and a cta_values
38
+ closed enum. The test kit provides sample native assets at standard native dimensions.
39
+ test_kit: "test-kits/acme-outdoor.yaml"
40
+
41
+ phases:
42
+ - id: capability_discovery
43
+ title: "Capability discovery"
44
+ narrative: |
45
+ Confirm the platform supports creative operations before pushing assets.
46
+
47
+ steps:
48
+ - id: get_capabilities
49
+ title: "Check agent capabilities"
50
+ narrative: |
51
+ Verify the agent declares creative support before format discovery.
52
+ task: get_adcp_capabilities
53
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
54
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
55
+ doc_ref: "/protocol/get_adcp_capabilities"
56
+ comply_scenario: capability_discovery
57
+ stateful: false
58
+ expected: |
59
+ Return capabilities including creative in supported_protocols.
60
+ sample_request:
61
+ context:
62
+ correlation_id: "creative_native_in_feed--get_capabilities"
63
+ validations:
64
+ - check: response_schema
65
+ description: "Response matches get-adcp-capabilities-response.json schema"
66
+ - check: field_present
67
+ path: "supported_protocols"
68
+ description: "Agent declares supported protocols"
69
+ - check: field_present
70
+ path: "context"
71
+ description: "Response echoes back the context object"
72
+ - check: field_value
73
+ path: "context.correlation_id"
74
+ value: "creative_native_in_feed--get_capabilities"
75
+ description: "Context correlation_id returned unchanged"
76
+
77
+ - id: discover_native_formats
78
+ title: "Discover native creative formats"
79
+ narrative: |
80
+ The buyer queries for formats that accept text and image assets — the combination
81
+ that characterises native in-feed units. The seller returns its native_in_feed
82
+ format declaration including declared slot constraints.
83
+
84
+ steps:
85
+ - id: list_native_formats
86
+ title: "List formats accepting text and image assets"
87
+ narrative: |
88
+ The buyer calls list_creative_formats filtered to asset_types ["text", "image"].
89
+ There is no format_kind filter in the protocol; the buyer identifies the
90
+ native_in_feed format from the returned format metadata (name, slots, params).
91
+ The test validates that at least one format is returned and that the response
92
+ is schema-valid — sellers surface their native format here so buyers can
93
+ discover slot requirements before submitting creatives.
94
+
95
+ Note: the `format_id` used in later phases (`id: "native_in_feed"`,
96
+ `agent_url: "https://your-platform.example.com"`) is a placeholder the
97
+ implementer substitutes with an actual format_id from this response.
98
+ This follows the established pattern for storyboard format references.
99
+ task: list_creative_formats
100
+ schema_ref: "creative/list-creative-formats-request.json"
101
+ response_schema_ref: "creative/list-creative-formats-response.json"
102
+ doc_ref: "/creative/task-reference/list_creative_formats"
103
+ comply_scenario: creative_lifecycle
104
+ stateful: false
105
+ expected: |
106
+ Return at least one format that accepts text and image assets, with declared
107
+ slot constraints (title_max_chars, main_image_sizes, cta_values) visible in
108
+ the format's parameter block so the buyer can prepare a compliant asset bundle.
109
+ sample_request:
110
+ asset_types:
111
+ - "text"
112
+ - "image"
113
+ context:
114
+ correlation_id: "creative_native_in_feed--list_native_formats"
115
+ validations:
116
+ - check: response_schema
117
+ description: "Response matches list-creative-formats-response.json schema"
118
+ - check: field_present
119
+ path: "formats"
120
+ description: "Response contains formats array"
121
+ - check: field_present
122
+ path: "context"
123
+ description: "Response echoes back the context object"
124
+ - check: field_value
125
+ path: "context.correlation_id"
126
+ value: "creative_native_in_feed--list_native_formats"
127
+ description: "Context correlation_id returned unchanged"
128
+
129
+ - id: sync_native_creative
130
+ title: "Sync a full native asset bundle"
131
+ narrative: |
132
+ The buyer submits a native creative with all 12 slots populated: title, body_text,
133
+ main_image (1200×627), CTA from the declared cta_values enum, advertiser_name,
134
+ sponsored_label, landing_page_url, display_url, rating, and three pixel_tracker
135
+ entries for impression, viewability (MRC 50%), and click. The seller validates the
136
+ bundle against canonical slot requirements and any product narrowing parameters.
137
+
138
+ steps:
139
+ - id: sync_full_bundle
140
+ title: "Submit native creative with all 12 slots and pixel trackers"
141
+ narrative: |
142
+ Full native asset bundle using values compliant with a typical content-recommendation
143
+ format: title within 80 chars, main_image at 1200×627, CTA from a closed enum,
144
+ and pixel_tracker entries for all three standard measurement events. The seller
145
+ must accept all required slots (title, main_image, advertiser_name, landing_page_url)
146
+ and return action: created with a non-rejected status.
147
+ task: sync_creatives
148
+ schema_ref: "creative/sync-creatives-request.json"
149
+ response_schema_ref: "creative/sync-creatives-response.json"
150
+ doc_ref: "/creative/task-reference/sync_creatives"
151
+ comply_scenario: creative_lifecycle
152
+ stateful: true
153
+ expected: |
154
+ Accept the full 12-slot native bundle:
155
+ - action: created
156
+ - status: accepted or pending_review (not rejected)
157
+ - All pixel_tracker assets stored with correct event bindings
158
+ sample_request:
159
+ account:
160
+ brand:
161
+ domain: "acmeoutdoor.example"
162
+ operator: "pinnacle-agency.example"
163
+ creatives:
164
+ - creative_id: "native_trail_pro_full_bundle"
165
+ name: "Trail Pro 3000 — Native Content Recommendation"
166
+ format_id:
167
+ agent_url: "https://your-platform.example.com"
168
+ id: "native_in_feed"
169
+ assets:
170
+ title:
171
+ asset_type: "text"
172
+ content: "Trail Pro 3000 — Built for the Summit"
173
+ body_text:
174
+ asset_type: "text"
175
+ content: "Tested at altitude. Trusted by expedition teams. Built for the summit."
176
+ main_image:
177
+ asset_type: "image"
178
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
179
+ width: 1200
180
+ height: 627
181
+ mime_type: "image/jpeg"
182
+ cta:
183
+ asset_type: "text"
184
+ content: "LEARN_MORE"
185
+ advertiser_name:
186
+ asset_type: "text"
187
+ content: "Acme Outdoor"
188
+ sponsored_label:
189
+ asset_type: "text"
190
+ content: "Sponsored"
191
+ landing_page_url:
192
+ asset_type: "url"
193
+ url: "https://acmeoutdoor.example/trail-pro-3000"
194
+ display_url:
195
+ asset_type: "text"
196
+ content: "acmeoutdoor.example"
197
+ rating:
198
+ asset_type: "text"
199
+ content: "4.8"
200
+ impression_tracker:
201
+ asset_type: "pixel_tracker"
202
+ event: "impression"
203
+ method: "img"
204
+ url: "https://measurement.example.com/imp?cb={CACHEBUSTER}&cid={CREATIVE_ID}"
205
+ viewability_tracker:
206
+ asset_type: "pixel_tracker"
207
+ event: "viewable_mrc_50"
208
+ method: "img"
209
+ url: "https://measurement.example.com/mrc50?cid={CREATIVE_ID}"
210
+ click_tracker:
211
+ asset_type: "pixel_tracker"
212
+ event: "click"
213
+ method: "img"
214
+ url: "https://measurement.example.com/click?cb={CACHEBUSTER}&cid={CREATIVE_ID}"
215
+ idempotency_key: "$generate:uuid_v4#creative_native_in_feed_sync_native_creative_sync_full_bundle"
216
+ context:
217
+ correlation_id: "creative_native_in_feed--sync_full_bundle"
218
+ validations:
219
+ - check: response_schema
220
+ description: "Response matches sync-creatives-response.json schema"
221
+ - check: field_present
222
+ path: "creatives"
223
+ description: "Response contains per-creative results"
224
+ - check: field_present
225
+ path: "creatives[0].action"
226
+ description: "Each creative result has an action"
227
+ - check: field_present
228
+ path: "context"
229
+ description: "Response echoes back the context object"
230
+ - check: field_value
231
+ path: "context.correlation_id"
232
+ value: "creative_native_in_feed--sync_full_bundle"
233
+ description: "Context correlation_id returned unchanged"
234
+
235
+ - id: validation_failures
236
+ title: "Validation rejection paths"
237
+ narrative: |
238
+ Each step submits a single invalid native creative and asserts the seller returns
239
+ the correct error code. Steps are isolated (separate sync_creatives calls, separate
240
+ idempotency keys) so that per-constraint error codes can be checked independently.
241
+ The validation_mode is strict (default); the seller stops on the first violation.
242
+
243
+ Constraint map for a typical content-recommendation format:
244
+ - title must not exceed title_max_chars (e.g., 80)
245
+ - main_image width×height must be a declared pair (e.g., 1200×627 or 1080×1080)
246
+ - cta content must be a value from the declared cta_values closed enum
247
+ - pixel_tracker with event=custom MUST also carry custom_event_name (schema constraint)
248
+
249
+ steps:
250
+ - id: reject_title_too_long
251
+ title: "Reject: title exceeds title_max_chars"
252
+ narrative: |
253
+ Title is 200 characters, far exceeding the typical title_max_chars constraint
254
+ (80 for a content-recommendation format). Seller MUST reject with a validation error.
255
+ Because no dedicated error code exists for char-count overflow, either
256
+ VALIDATION_ERROR or INVALID_REQUEST is conformant.
257
+ task: sync_creatives
258
+ schema_ref: "creative/sync-creatives-request.json"
259
+ response_schema_ref: "creative/sync-creatives-response.json"
260
+ doc_ref: "/creative/task-reference/sync_creatives"
261
+ comply_scenario: creative_lifecycle
262
+ stateful: false
263
+ expect_error: true
264
+ expected: |
265
+ Seller MUST reject because the title exceeds title_max_chars.
266
+ Error code: VALIDATION_ERROR or INVALID_REQUEST.
267
+ sample_request:
268
+ account:
269
+ brand:
270
+ domain: "acmeoutdoor.example"
271
+ operator: "pinnacle-agency.example"
272
+ creatives:
273
+ - creative_id: "native_reject_title_long"
274
+ name: "Reject — title too long"
275
+ format_id:
276
+ agent_url: "https://your-platform.example.com"
277
+ id: "native_in_feed"
278
+ assets:
279
+ title:
280
+ asset_type: "text"
281
+ content: "Trail Pro 3000 — The Ultimate Summit Companion for Serious Mountaineers Who Demand Peak Performance in Every Altitude — Built for the Summit and Beyond by Acme Outdoor"
282
+ main_image:
283
+ asset_type: "image"
284
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
285
+ width: 1200
286
+ height: 627
287
+ mime_type: "image/jpeg"
288
+ advertiser_name:
289
+ asset_type: "text"
290
+ content: "Acme Outdoor"
291
+ landing_page_url:
292
+ asset_type: "url"
293
+ url: "https://acmeoutdoor.example/trail-pro-3000"
294
+ idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_title_too_long"
295
+ context:
296
+ correlation_id: "creative_native_in_feed--reject_title_long"
297
+ validations:
298
+ - check: error_code
299
+ allowed_values:
300
+ - "VALIDATION_ERROR"
301
+ - "INVALID_REQUEST"
302
+ description: "Seller rejects title exceeding title_max_chars"
303
+
304
+ - id: reject_image_wrong_size
305
+ title: "Reject: main_image not in declared main_image_sizes"
306
+ narrative: |
307
+ main_image is 640×480, a size not declared in main_image_sizes for a
308
+ content-recommendation format (typical: 1200×627 and 1080×1080). Seller
309
+ MUST reject. Either VALIDATION_ERROR or INVALID_REQUEST is conformant.
310
+ task: sync_creatives
311
+ schema_ref: "creative/sync-creatives-request.json"
312
+ response_schema_ref: "creative/sync-creatives-response.json"
313
+ doc_ref: "/creative/task-reference/sync_creatives"
314
+ comply_scenario: creative_lifecycle
315
+ stateful: false
316
+ expect_error: true
317
+ expected: |
318
+ Seller MUST reject because 640×480 is not in the declared main_image_sizes.
319
+ Error code: VALIDATION_ERROR or INVALID_REQUEST.
320
+ sample_request:
321
+ account:
322
+ brand:
323
+ domain: "acmeoutdoor.example"
324
+ operator: "pinnacle-agency.example"
325
+ creatives:
326
+ - creative_id: "native_reject_image_size"
327
+ name: "Reject — image wrong size"
328
+ format_id:
329
+ agent_url: "https://your-platform.example.com"
330
+ id: "native_in_feed"
331
+ assets:
332
+ title:
333
+ asset_type: "text"
334
+ content: "Trail Pro 3000 — Built for the Summit"
335
+ main_image:
336
+ asset_type: "image"
337
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-640x480.jpg"
338
+ width: 640
339
+ height: 480
340
+ mime_type: "image/jpeg"
341
+ advertiser_name:
342
+ asset_type: "text"
343
+ content: "Acme Outdoor"
344
+ landing_page_url:
345
+ asset_type: "url"
346
+ url: "https://acmeoutdoor.example/trail-pro-3000"
347
+ idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_image_wrong_size"
348
+ context:
349
+ correlation_id: "creative_native_in_feed--reject_image_size"
350
+ validations:
351
+ - check: error_code
352
+ allowed_values:
353
+ - "VALIDATION_ERROR"
354
+ - "INVALID_REQUEST"
355
+ description: "Seller rejects main_image not in declared main_image_sizes"
356
+
357
+ - id: reject_cta_not_in_enum
358
+ title: "Reject: CTA value not in declared cta_values"
359
+ narrative: |
360
+ The cta slot carries a value not present in the product's declared cta_values
361
+ closed enum. This is a closed-set constraint violation — the seller has published
362
+ the complete list of acceptable CTA values and any value outside that list MUST
363
+ be rejected with CREATIVE_VALUE_NOT_ALLOWED. This code is distinct from
364
+ CREATIVE_REJECTED (generic content-policy failure) because the buyer can resolve
365
+ mechanically by selecting a value from the published list.
366
+ task: sync_creatives
367
+ schema_ref: "creative/sync-creatives-request.json"
368
+ response_schema_ref: "creative/sync-creatives-response.json"
369
+ doc_ref: "/creative/task-reference/sync_creatives"
370
+ comply_scenario: creative_lifecycle
371
+ stateful: false
372
+ expect_error: true
373
+ expected: |
374
+ Seller MUST reject with CREATIVE_VALUE_NOT_ALLOWED because "EXPLORE_MORE" is
375
+ not in the declared cta_values list. The error SHOULD include the field path
376
+ and the list of allowed values so the buyer can re-prompt with constrained sampling.
377
+ sample_request:
378
+ account:
379
+ brand:
380
+ domain: "acmeoutdoor.example"
381
+ operator: "pinnacle-agency.example"
382
+ creatives:
383
+ - creative_id: "native_reject_cta_enum"
384
+ name: "Reject — CTA not in enum"
385
+ format_id:
386
+ agent_url: "https://your-platform.example.com"
387
+ id: "native_in_feed"
388
+ assets:
389
+ title:
390
+ asset_type: "text"
391
+ content: "Trail Pro 3000 — Built for the Summit"
392
+ main_image:
393
+ asset_type: "image"
394
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
395
+ width: 1200
396
+ height: 627
397
+ mime_type: "image/jpeg"
398
+ cta:
399
+ asset_type: "text"
400
+ content: "EXPLORE_MORE"
401
+ advertiser_name:
402
+ asset_type: "text"
403
+ content: "Acme Outdoor"
404
+ landing_page_url:
405
+ asset_type: "url"
406
+ url: "https://acmeoutdoor.example/trail-pro-3000"
407
+ idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_cta_not_in_enum"
408
+ context:
409
+ correlation_id: "creative_native_in_feed--reject_cta_enum"
410
+ validations:
411
+ - check: error_code
412
+ value: "CREATIVE_VALUE_NOT_ALLOWED"
413
+ description: "Seller returns CREATIVE_VALUE_NOT_ALLOWED for CTA outside the declared cta_values closed enum"
414
+
415
+ - id: reject_pixel_tracker_custom_missing_name
416
+ title: "Reject: pixel_tracker event=custom without custom_event_name"
417
+ narrative: |
418
+ pixel-tracker-asset.json requires custom_event_name when event is "custom"
419
+ (allOf conditional — MUST be present). Sending event=custom without
420
+ custom_event_name is a schema constraint violation that sellers MUST reject
421
+ at sync_creatives time.
422
+ task: sync_creatives
423
+ schema_ref: "creative/sync-creatives-request.json"
424
+ response_schema_ref: "creative/sync-creatives-response.json"
425
+ doc_ref: "/creative/task-reference/sync_creatives"
426
+ comply_scenario: creative_lifecycle
427
+ stateful: false
428
+ expect_error: true
429
+ expected: |
430
+ Seller MUST reject because pixel_tracker event=custom requires custom_event_name
431
+ (schema constraint). Error code: INVALID_REQUEST or VALIDATION_ERROR.
432
+ sample_request:
433
+ account:
434
+ brand:
435
+ domain: "acmeoutdoor.example"
436
+ operator: "pinnacle-agency.example"
437
+ creatives:
438
+ - creative_id: "native_reject_custom_tracker"
439
+ name: "Reject — pixel_tracker custom without name"
440
+ format_id:
441
+ agent_url: "https://your-platform.example.com"
442
+ id: "native_in_feed"
443
+ assets:
444
+ title:
445
+ asset_type: "text"
446
+ content: "Trail Pro 3000 — Built for the Summit"
447
+ main_image:
448
+ asset_type: "image"
449
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
450
+ width: 1200
451
+ height: 627
452
+ mime_type: "image/jpeg"
453
+ advertiser_name:
454
+ asset_type: "text"
455
+ content: "Acme Outdoor"
456
+ landing_page_url:
457
+ asset_type: "url"
458
+ url: "https://acmeoutdoor.example/trail-pro-3000"
459
+ impression_tracker:
460
+ asset_type: "pixel_tracker"
461
+ event: "custom"
462
+ method: "img"
463
+ url: "https://measurement.example.com/custom?cid={CREATIVE_ID}"
464
+ idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_pixel_tracker_custom_missing_name"
465
+ context:
466
+ correlation_id: "creative_native_in_feed--reject_custom_tracker"
467
+ validations:
468
+ - check: error_code
469
+ allowed_values:
470
+ - "INVALID_REQUEST"
471
+ - "VALIDATION_ERROR"
472
+ description: "Seller rejects pixel_tracker with event=custom and no custom_event_name"
473
+
474
+ - id: preview_native
475
+ title: "Preview the native creative"
476
+ narrative: |
477
+ The buyer calls preview_creative for the accepted native bundle. The seller's
478
+ renderer composes the native unit — assembling title, image, body, CTA, and
479
+ advertiser attribution into the publisher's feed look-and-feel — and returns a
480
+ preview URL. The buyer can inspect the assembled render before activating.
481
+
482
+ steps:
483
+ - id: preview_native_creative
484
+ title: "Preview assembled native feed unit"
485
+ narrative: |
486
+ The buyer previews the native_trail_pro_full_bundle creative synced in Phase 3.
487
+ The seller composes the full asset bundle into its feed rendering and returns
488
+ a preview URL showing the assembled unit with the publisher's native chrome applied.
489
+ task: preview_creative
490
+ schema_ref: "creative/preview-creative-request.json"
491
+ response_schema_ref: "creative/preview-creative-response.json"
492
+ doc_ref: "/creative/task-reference/preview_creative"
493
+ comply_scenario: creative_flow
494
+ stateful: true
495
+ expected: |
496
+ Return a preview of the assembled native unit:
497
+ - preview_url showing the feed render with native chrome applied
498
+ - The assembled unit uses the synced assets (title, image, CTA, trackers)
499
+ sample_request:
500
+ account:
501
+ brand:
502
+ domain: "acmeoutdoor.example"
503
+ operator: "pinnacle-agency.example"
504
+ request_type: "single"
505
+ creative_manifest:
506
+ creative_id: "native_trail_pro_full_bundle"
507
+ format_id:
508
+ agent_url: "https://your-platform.example.com"
509
+ id: "native_in_feed"
510
+ assets:
511
+ title:
512
+ asset_type: "text"
513
+ content: "Trail Pro 3000 — Built for the Summit"
514
+ body_text:
515
+ asset_type: "text"
516
+ content: "Tested at altitude. Trusted by expedition teams."
517
+ main_image:
518
+ asset_type: "image"
519
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
520
+ width: 1200
521
+ height: 627
522
+ mime_type: "image/jpeg"
523
+ cta:
524
+ asset_type: "text"
525
+ content: "LEARN_MORE"
526
+ advertiser_name:
527
+ asset_type: "text"
528
+ content: "Acme Outdoor"
529
+ landing_page_url:
530
+ asset_type: "url"
531
+ url: "https://acmeoutdoor.example/trail-pro-3000"
532
+ context:
533
+ correlation_id: "creative_native_in_feed--preview_native"
534
+ validations:
535
+ - check: response_schema
536
+ description: "Response matches preview-creative-response.json schema"
537
+ - check: field_present
538
+ path: "context"
539
+ description: "Response echoes back the context object"
540
+ - check: field_value
541
+ path: "context.correlation_id"
542
+ value: "creative_native_in_feed--preview_native"
543
+ description: "Context correlation_id returned unchanged"