@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,317 @@
1
+ id: signal_owned
2
+ version: "1.0.0"
3
+ title: "Owned signal agent"
4
+ protocol: signals
5
+ category: signal_owned
6
+ summary: "Signal agent serving first-party or proprietary audience data without external catalog verification."
7
+ track: signals
8
+ required_tools:
9
+ - get_signals
10
+
11
+ narrative: |
12
+ You operate a first-party data platform — a retailer CDP, publisher contextual data
13
+ provider, or proprietary audience platform. Your signals are agent-native: they come
14
+ from your own data, not from third-party catalogs.
15
+
16
+ Buyers trust your agent directly. There's no external adagents.json to verify against —
17
+ provenance is the agent itself. This simplifies the flow: discovery and activation,
18
+ without the verification step that marketplace agents require.
19
+
20
+ Owned signal agents often have richer signal types. A retailer might expose purchase
21
+ frequency as a numeric signal (0-30 visits/month) or loyalty tier as categorical
22
+ (platinum/gold/silver/bronze). A publisher might expose content category, subscriber
23
+ tenure, or engagement scores.
24
+
25
+ This storyboard walks through discovery and both activation patterns.
26
+
27
+ Pricing is hard-required here for the same reason as signal marketplaces: signals
28
+ are rate-carded goods. Buyers cannot activate without a pricing_option_id to anchor
29
+ billing. Agents distributing first-party signals without commercial terms belong on
30
+ a different specialism, not this one — the v2 `list_authorized_properties`
31
+ task is retired; portfolio advertising now lives on `get_adcp_capabilities`.
32
+
33
+ agent:
34
+ interaction_model: owned_signals
35
+ capabilities: []
36
+ examples:
37
+ - "Retailer CDPs (e.g., loyalty and purchase data)"
38
+ - "Publisher contextual platforms (e.g., content category, subscriber data)"
39
+ - "First-party audience platforms (e.g., CRM-derived segments)"
40
+
41
+ caller:
42
+ role: buyer_agent
43
+ example: "Scope3 (DSP)"
44
+
45
+ prerequisites:
46
+ description: |
47
+ The buyer has a campaign brief with targeting objectives. The test kit provides
48
+ sample owned signal definitions with various value types (binary, categorical,
49
+ numeric) and pricing models.
50
+ test_kit: "test-kits/nova-motors.yaml"
51
+
52
+ phases:
53
+ - id: capability_discovery
54
+ title: "Capability discovery"
55
+ narrative: |
56
+ The buyer calls get_adcp_capabilities to confirm the agent supports signals before discovering or activating audience data.
57
+
58
+ steps:
59
+ - id: get_capabilities
60
+ title: "Check agent capabilities"
61
+ narrative: |
62
+ Verify that the agent declares the expected protocol support before
63
+ proceeding with domain-specific operations.
64
+ task: get_adcp_capabilities
65
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
66
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
67
+ doc_ref: "/protocol/get_adcp_capabilities"
68
+ comply_scenario: capability_discovery
69
+ stateful: false
70
+ expected: |
71
+ Return capabilities declaring signals in supported_protocols, confirming the agent serves audience signals.
72
+ sample_request:
73
+ context:
74
+ correlation_id: "signal_owned--get_capabilities"
75
+ validations:
76
+ - check: response_schema
77
+ description: "Response matches get-adcp-capabilities-response.json schema"
78
+ - check: field_present
79
+ path: "supported_protocols"
80
+ description: "Agent declares supported protocols"
81
+
82
+ - check: field_present
83
+ path: "context"
84
+ description: "Response echoes back the context object"
85
+ - check: field_value
86
+ path: "context.correlation_id"
87
+ value: "signal_owned--get_capabilities"
88
+ description: "Context correlation_id returned unchanged"
89
+ - id: discovery
90
+ title: "Signal discovery"
91
+ narrative: |
92
+ The buyer describes targeting objectives and your agent returns matching signals
93
+ from your proprietary data. Unlike marketplace agents, these signals have
94
+ signal_type "owned" — provenance is the agent itself.
95
+
96
+ Owned signals often include richer value types. A retailer can expose loyalty
97
+ tiers as categorical signals and purchase frequency as numeric signals, giving
98
+ buyers more precise targeting than binary include/exclude.
99
+
100
+ steps:
101
+ - id: search_owned_signals
102
+ title: "Discover owned signals"
103
+ narrative: |
104
+ The buyer searches for audience segments using a natural language description.
105
+ Your agent returns signals from your proprietary data — loyalty tiers, purchase
106
+ history, engagement scores, contextual categories.
107
+ task: get_signals
108
+ schema_ref: "signals/get-signals-request.json"
109
+ response_schema_ref: "signals/get-signals-response.json"
110
+ doc_ref: "/signals/tasks/get_signals"
111
+ comply_scenario: signals_flow
112
+ stateful: false
113
+ expected: |
114
+ Return matching signals from your proprietary data. Each signal must include:
115
+ - signal_agent_segment_id for activation
116
+ - signal_id with source: "agent_native"
117
+ - name, description, and value_type
118
+ - coverage_forecast when detailed availability is disclosed; deprecated coverage_percentage may be present as a legacy scalar fallback
119
+ - pricing_options
120
+ - signal_type: "owned"
121
+
122
+ For categorical signals, include the allowed_values.
123
+ For numeric signals, include the range (min/max).
124
+
125
+ sample_request:
126
+ account:
127
+ brand:
128
+ domain: "novamotors.example"
129
+ operator: "pinnacle-agency.example"
130
+ signal_spec: "High-value customers likely to purchase electronics, with loyalty program data"
131
+
132
+ context:
133
+ correlation_id: "signal_owned--search_owned_signals"
134
+ validations:
135
+ - check: response_schema
136
+ description: "Response matches get-signals-response.json schema"
137
+ - check: field_present
138
+ path: "signals[0].signal_agent_segment_id"
139
+ description: "Each signal has a signal_agent_segment_id"
140
+ - check: field_present
141
+ path: "signals[0].pricing_options"
142
+ description: "Each signal has pricing options"
143
+
144
+ - check: field_present
145
+ path: "context"
146
+ description: "Response echoes back the context object"
147
+ - check: field_value
148
+ path: "context.correlation_id"
149
+ value: "signal_owned--search_owned_signals"
150
+ description: "Context correlation_id returned unchanged"
151
+ - check: field_present
152
+ path: "signals[0].signal_id.source"
153
+ description: "Signal ID includes source discriminator"
154
+ - id: filter_by_criteria
155
+ title: "Filter signals by criteria"
156
+ narrative: |
157
+ The buyer narrows the search using filters — maximum CPM, specific signal
158
+ types, or coverage thresholds. This tests that your agent handles filter
159
+ parameters correctly and returns only matching signals.
160
+ task: get_signals
161
+ schema_ref: "signals/get-signals-request.json"
162
+ response_schema_ref: "signals/get-signals-response.json"
163
+ doc_ref: "/signals/tasks/get_signals"
164
+ comply_scenario: signals_flow
165
+ stateful: false
166
+ expected: |
167
+ Return only signals matching the filter criteria. If no signals match,
168
+ return an empty signals array — not an error.
169
+
170
+ sample_request:
171
+ account:
172
+ brand:
173
+ domain: "novamotors.example"
174
+ operator: "pinnacle-agency.example"
175
+ signal_spec: "Purchase behavior signals"
176
+ filters:
177
+ max_cpm: 5.00
178
+
179
+ context:
180
+ correlation_id: "signal_owned--filter_by_criteria"
181
+ validations:
182
+ - check: response_schema
183
+ description: "Response matches schema"
184
+ - check: field_present
185
+ path: "signals"
186
+ description: "Response contains a signals array"
187
+
188
+ - check: field_present
189
+ path: "context"
190
+ description: "Response echoes back the context object"
191
+ - check: field_value
192
+ path: "context.correlation_id"
193
+ value: "signal_owned--filter_by_criteria"
194
+ description: "Context correlation_id returned unchanged"
195
+ - id: platform_activation
196
+ title: "Activate on a DSP"
197
+ narrative: |
198
+ The buyer activates a signal directly on a DSP. Your agent pushes the segment
199
+ to the platform and returns a segment_id the buyer uses for campaign targeting.
200
+
201
+ Use platform destinations when the buyer manages DSP campaigns directly.
202
+
203
+ steps:
204
+ - id: activate_on_platform
205
+ title: "Activate owned signal on a DSP"
206
+ narrative: |
207
+ The buyer selects a signal and activates it on a DSP. For owned signals,
208
+ this means your platform pushes first-party segment data to the DSP. The
209
+ buyer gets back a segment_id for targeting.
210
+ task: activate_signal
211
+ schema_ref: "signals/activate-signal-request.json"
212
+ response_schema_ref: "signals/activate-signal-response.json"
213
+ doc_ref: "/signals/tasks/activate_signal"
214
+ comply_scenario: signals_flow
215
+ stateful: true
216
+ expected: |
217
+ Return a deployment with:
218
+ - type: "platform"
219
+ - is_live status (may be async)
220
+ - activation_key with type: "segment_id" when live
221
+ - estimated_activation_duration_minutes if not immediately live
222
+
223
+ sample_request:
224
+ account:
225
+ brand:
226
+ domain: "novamotors.example"
227
+ operator: "pinnacle-agency.example"
228
+ signal_agent_segment_id: "prism_high_ltv"
229
+ pricing_option_id: "po_prism_flat_monthly"
230
+ destinations:
231
+ - type: "platform"
232
+ platform: "the-trade-desk"
233
+ account: "agency-123-ttd"
234
+ idempotency_key: "$generate:uuid_v4#signal_owned_activate_platform"
235
+ context:
236
+ correlation_id: "signal_owned--activate_on_platform"
237
+ ext:
238
+ test_platform:
239
+ test_run: true
240
+ validations:
241
+ - check: response_schema
242
+ description: "Response matches activate-signal-response.json schema"
243
+ - check: field_present
244
+ path: "deployments[0].type"
245
+ description: "Deployment includes type"
246
+
247
+ - check: field_present
248
+ path: "context"
249
+ description: "Response echoes back the context object"
250
+ - check: field_value
251
+ path: "context.correlation_id"
252
+ value: "signal_owned--activate_on_platform"
253
+ description: "Context correlation_id returned unchanged"
254
+ - id: agent_activation
255
+ title: "Activate on a sales agent"
256
+ narrative: |
257
+ The buyer activates a signal on a sales agent. The SA records the activation
258
+ and handles downstream DSP coordination — the buyer doesn't need to know which
259
+ platform the SA uses.
260
+
261
+ This is the right pattern when buying media through a sales agent.
262
+
263
+ steps:
264
+ - id: activate_on_agent
265
+ title: "Activate owned signal on a sales agent"
266
+ narrative: |
267
+ The buyer activates a signal with the SA's URL as the destination. The
268
+ activation is typically synchronous. The SA records it internally and
269
+ applies the targeting when the buyer later calls create_media_buy.
270
+ task: activate_signal
271
+ schema_ref: "signals/activate-signal-request.json"
272
+ response_schema_ref: "signals/activate-signal-response.json"
273
+ doc_ref: "/signals/tasks/activate_signal"
274
+ comply_scenario: signals_flow
275
+ stateful: true
276
+ expected: |
277
+ Return a deployment with:
278
+ - type: "agent"
279
+ - agent_url matching the SA
280
+ - is_live: true (sync activation)
281
+ - activation_key with type: "key_value"
282
+ - deployed_at timestamp
283
+
284
+ sample_request:
285
+ account:
286
+ brand:
287
+ domain: "novamotors.example"
288
+ operator: "pinnacle-agency.example"
289
+ signal_agent_segment_id: "prism_cart_abandoner"
290
+ pricing_option_id: "po_prism_abandoner_cpm"
291
+ destinations:
292
+ - type: "agent"
293
+ agent_url: "https://wonderstruck.salesagents.example"
294
+ idempotency_key: "$generate:uuid_v4#signal_owned_activate_agent"
295
+ context:
296
+ correlation_id: "signal_owned--activate_on_agent"
297
+ ext:
298
+ test_platform:
299
+ test_run: true
300
+ validations:
301
+ - check: response_schema
302
+ description: "Response matches activate-signal-response.json schema"
303
+ - check: field_present
304
+ path: "deployments[0].activation_key"
305
+ description: "Deployment includes activation key"
306
+ - check: field_value
307
+ path: "deployments[0].type"
308
+ value: "agent"
309
+ description: "Deployment type is 'agent'"
310
+
311
+ - check: field_present
312
+ path: "context"
313
+ description: "Response echoes back the context object"
314
+ - check: field_value
315
+ path: "context.correlation_id"
316
+ value: "signal_owned--activate_on_agent"
317
+ description: "Context correlation_id returned unchanged"
@@ -0,0 +1,59 @@
1
+ id: sponsored_intelligence
2
+ version: "0.1.0"
3
+ title: "Sponsored intelligence"
4
+ protocol: sponsored-intelligence
5
+ status: preview
6
+ category: sponsored_intelligence
7
+ summary: "Specialism claim for agents that expose conversational sponsored experiences via the SI session lifecycle. Preview while the underlying SI tools remain `x-status: experimental`; SDK dispatch parity with other specialism IDs."
8
+ track: si
9
+
10
+ narrative: |
11
+ Sponsored intelligence (SI) is the conversational ad surface inside AI assistants,
12
+ AI search, and generative experiences. An SI agent exposes four lifecycle tools —
13
+ `si_get_offering`, `si_initiate_session`, `si_send_message`, `si_terminate_session` —
14
+ that together drive a single sponsored conversation from discovery to handoff.
15
+
16
+ This specialism is the wire-level claim adopters make so SDKs can dispatch on a
17
+ specialism ID with parity to every other agent shape (`signal-marketplace`,
18
+ `creative-template`, `governance-spend-authority`, etc.). Without it, SI agents have
19
+ to be wired through escape-hatch handler bags rather than first-class platform
20
+ interfaces — purely because there was no enum value to key dispatch off of.
21
+
22
+ The storyboard for this specialism is a placeholder while the underlying SI tools
23
+ remain `x-status: experimental`. Conformance for SI agents is currently exercised by
24
+ the `sponsored-intelligence` protocol baseline (which already covers the full session
25
+ lifecycle); claiming this specialism today is graded as `{ status: "preview",
26
+ passed: null }` per the preview-status contract in
27
+ /docs/building/verification/compliance-catalog.
28
+
29
+ This specialism promotes to `stable` (with required_tools and a graded storyboard)
30
+ when the SI tools graduate from experimental. Sub-specialism splits may emerge as
31
+ the SI surface stabilizes — likely along axes like identity model (anonymous vs.
32
+ authenticated host-user), commerce capability (conversation-only vs. UI-component
33
+ vs. transactional handoff), or host surface (assistant vs. AI search vs. embedded).
34
+ The shape isn't committed; this narrative anticipates differentiation, it doesn't
35
+ specify it.
36
+
37
+ agent:
38
+ interaction_model: si_platform
39
+ capabilities:
40
+ - sponsored_intelligence
41
+ examples:
42
+ - "AI assistants with ad support"
43
+ - "AI search products with sponsored experiences"
44
+ - "Conversational commerce agents reachable via SI handoff"
45
+
46
+ caller:
47
+ role: buyer_agent
48
+ example: "Nova Motors (advertiser)"
49
+
50
+ prerequisites:
51
+ description: |
52
+ No specialism-specific prerequisites today. The protocol baseline at
53
+ /compliance/{version}/protocols/sponsored-intelligence/ exercises the full
54
+ discover → initiate → message → terminate flow against the shared Nova Motors
55
+ test kit; preview claims of this specialism inherit those scenarios for
56
+ runner discoverability without producing a graded verdict.
57
+ test_kit: "test-kits/nova-motors.yaml"
58
+
59
+ phases: []
@@ -0,0 +1,78 @@
1
+ # Acme Outdoor — Live-Mode Principal Test Kit
2
+ #
3
+ # Entity definition: fictional-entities.yaml → advertisers[acme_outdoor]
4
+ #
5
+ # Live-mode counterpart to acme-outdoor.yaml. Used exclusively by the
6
+ # comply-controller-mode-gate storyboard to supply a non-sandbox principal:
7
+ # the seller's gate must resolve the calling account, detect mode: live, and
8
+ # return ControllerError.error: FORBIDDEN before dispatching any scenario.
9
+ #
10
+ # IMPORTANT: sandbox: false here signals that this principal represents a
11
+ # live/production account for the purpose of controller gating tests. It does
12
+ # NOT mean this kit is used in production grading — the kit is only loaded by
13
+ # the comply_controller_mode_gate storyboard, which requires: [controller]
14
+ # and is dev/staging-only by design.
15
+
16
+ id: acme_outdoor_live
17
+ name: "Acme Outdoor (Live Mode)"
18
+ description: "Fictional outdoor gear brand — live-mode principal for comply_test_controller denial storyboard"
19
+ sandbox: false
20
+
21
+ # Authentication fixture for the comply-controller-mode-gate storyboard.
22
+ # The api_key here represents a live-mode (non-sandbox) credential. When the
23
+ # runner sends requests using this key, a conformant seller resolves the
24
+ # account, determines mode: live, and refuses comply_test_controller dispatch
25
+ # with FORBIDDEN.
26
+ #
27
+ # The demo-acme-outdoor-live- prefix signals this is a test harness key whose
28
+ # account resolves as live-mode on conformant implementations.
29
+ auth:
30
+ api_key: "demo-acme-outdoor-live-v1"
31
+ probe_task: list_creatives
32
+
33
+ brand:
34
+ house:
35
+ domain: "acmeoutdoor.example"
36
+ name: "Acme Outdoor"
37
+ brand_id: "acme_outdoor"
38
+ names:
39
+ - en: "Acme Outdoor"
40
+ description: "Premium outdoor gear for every adventure. From trail to summit, we make gear that performs."
41
+ industry: "retail"
42
+ keller_type: "master"
43
+ logos:
44
+ - url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-primary.png"
45
+ orientation: "horizontal"
46
+ background: "light-bg"
47
+ variant: "primary"
48
+ width: 400
49
+ height: 100
50
+ colors:
51
+ primary: "#1B5E20"
52
+ secondary: "#FF6F00"
53
+ accent: "#FDD835"
54
+ background: "#FAFAFA"
55
+ text: "#212121"
56
+ fonts:
57
+ heading:
58
+ family: "Montserrat"
59
+ weight: 700
60
+ url: "https://fonts.googleapis.com/css2?family=Montserrat:wght@700"
61
+ body:
62
+ family: "Open Sans"
63
+ weight: 400
64
+ url: "https://fonts.googleapis.com/css2?family=Open+Sans"
65
+ tone:
66
+ voice: "Confident and adventurous, but never pretentious. We talk to people who do things, not people who buy things."
67
+ attributes:
68
+ - "active"
69
+ - "direct"
70
+ - "warm"
71
+ dos:
72
+ - "Use action verbs"
73
+ - "Reference real outdoor activities"
74
+ - "Keep it short"
75
+ donts:
76
+ - "Use superlatives without evidence"
77
+ - "Talk down to the reader"
78
+ - "Use corporate jargon"
@@ -0,0 +1,223 @@
1
+ # Acme Outdoor — Sample Advertiser Test Kit
2
+ #
3
+ # Entity definition: fictional-entities.yaml → advertisers[acme_outdoor]
4
+ #
5
+ # Provides the "ingredients" needed to test creative agent storyboards:
6
+ # a brand identity, sample assets at common dimensions, and sample text.
7
+ #
8
+ # This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
9
+ # Agents resolve acmeoutdoor.example via the standard AAO brand resolution path.
10
+ # AAO returns the brand.json below but excludes sandbox brands from production
11
+ # brand discovery results.
12
+
13
+ id: acme_outdoor
14
+ name: "Acme Outdoor"
15
+ description: "Fictional outdoor gear brand for storyboard testing"
16
+ sandbox: true
17
+
18
+ # Set to true when the agent under test declares at least one audio format in
19
+ # list_creative_formats. Enables the audio_build phase in the creative_template
20
+ # storyboard. Leave false for display-only template agents.
21
+ supports_audio_formats: false
22
+
23
+ # Authentication fixture for the universal security_baseline storyboard
24
+ # (universal/security.yaml). Declares:
25
+ # - api_key: the demo Bearer the runner sends on the positive api-key
26
+ # probe. The conformance handle is the `demo-<kit>-` prefix — agents
27
+ # SHOULD accept any Bearer matching that prefix (not this literal
28
+ # value) so the suffix can rotate across spec versions without
29
+ # breaking previously-conformant agents.
30
+ # - probe_task: the protected, auth-required read the runner calls under
31
+ # `auth: none` and with a random-invalid key. Default is list_creatives;
32
+ # declare explicitly so the api_key phase runs instead of being skipped
33
+ # via `skip_if: "!test_kit.auth.api_key"`.
34
+ auth:
35
+ api_key: "demo-acme-outdoor-v1"
36
+ probe_task: list_creatives
37
+
38
+ brand:
39
+ house:
40
+ domain: "acmeoutdoor.example"
41
+ name: "Acme Outdoor"
42
+ brand_id: "acme_outdoor"
43
+ names:
44
+ - en: "Acme Outdoor"
45
+ description: "Premium outdoor gear for every adventure. From trail to summit, we make gear that performs."
46
+ industry: "retail"
47
+ keller_type: "master"
48
+ logos:
49
+ - url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-primary.png"
50
+ orientation: "horizontal"
51
+ background: "light-bg"
52
+ variant: "primary"
53
+ width: 400
54
+ height: 100
55
+ - url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-icon.png"
56
+ orientation: "square"
57
+ background: "transparent-bg"
58
+ variant: "icon"
59
+ width: 200
60
+ height: 200
61
+ colors:
62
+ primary: "#1B5E20"
63
+ secondary: "#FF6F00"
64
+ accent: "#FDD835"
65
+ background: "#FAFAFA"
66
+ text: "#212121"
67
+ fonts:
68
+ heading:
69
+ family: "Montserrat"
70
+ weight: 700
71
+ url: "https://fonts.googleapis.com/css2?family=Montserrat:wght@700"
72
+ body:
73
+ family: "Open Sans"
74
+ weight: 400
75
+ url: "https://fonts.googleapis.com/css2?family=Open+Sans"
76
+ tone:
77
+ voice: "Confident and adventurous, but never pretentious. We talk to people who do things, not people who buy things."
78
+ attributes:
79
+ - "active"
80
+ - "direct"
81
+ - "warm"
82
+ dos:
83
+ - "Use action verbs"
84
+ - "Reference real outdoor activities"
85
+ - "Keep it short"
86
+ donts:
87
+ - "Use superlatives without evidence"
88
+ - "Talk down to the reader"
89
+ - "Use corporate jargon"
90
+
91
+ # Sample assets at common ad dimensions.
92
+ # These are placeholder URLs — in production, these would point to actual hosted test images.
93
+ assets:
94
+ images:
95
+ - id: "hero_300x250"
96
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-300x250.jpg"
97
+ width: 300
98
+ height: 250
99
+ mime_type: "image/jpeg"
100
+ description: "Medium rectangle hero — hiker on mountain trail"
101
+
102
+ - id: "hero_728x90"
103
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-728x90.jpg"
104
+ width: 728
105
+ height: 90
106
+ mime_type: "image/jpeg"
107
+ description: "Leaderboard hero — panoramic mountain vista"
108
+
109
+ - id: "hero_320x50"
110
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-320x50.jpg"
111
+ width: 320
112
+ height: 50
113
+ mime_type: "image/jpeg"
114
+ description: "Mobile banner hero — trail gear close-up"
115
+
116
+ - id: "hero_160x600"
117
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-160x600.jpg"
118
+ width: 160
119
+ height: 600
120
+ mime_type: "image/jpeg"
121
+ description: "Wide skyscraper hero — vertical trail scene"
122
+
123
+ - id: "hero_master"
124
+ url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg"
125
+ width: 1200
126
+ height: 628
127
+ mime_type: "image/jpeg"
128
+ description: "Master hero image — high-res source for any size"
129
+
130
+ text:
131
+ headlines:
132
+ - "Summer Sale — 40% Off All Gear"
133
+ - "Built for the Trail"
134
+ - "Adventure Starts Here"
135
+ descriptions:
136
+ - "Premium outdoor gear tested on the world's toughest trails. Shop the summer collection."
137
+ - "From daypacks to expedition tents, gear that performs when it matters."
138
+ cta:
139
+ - "Shop Now"
140
+ - "Explore the Collection"
141
+ - "Find Your Gear"
142
+
143
+ # Reference content for the creative_template audio_build phase.
144
+ # These values are hardcoded in the storyboard sample_request; this block
145
+ # documents the canonical Acme Outdoor audio creative inputs for adopters
146
+ # authoring audio format specs or runner integrations.
147
+ audio:
148
+ script: "Built for the trail. Acme Outdoor — premium gear for every adventure."
149
+ voice_hint: "narrator-warm"
150
+
151
+ click_url: "https://acmeoutdoor.example/summer-sale"
152
+
153
+ # Inventory list fixtures for property_list / collection_list targeting tests.
154
+ #
155
+ # These reference lists a fictional governance/inventory agent would publish.
156
+ # They let storyboards exercise the full PropertyListReference / CollectionListReference
157
+ # contract without needing a live list server: scenarios point at list_id values
158
+ # and the seller's test engine returns canned contents.
159
+ #
160
+ # Both matching and non-matching sets are provided so a single test fixture
161
+ # covers targeting (buy should include listed inventory) and no-match behaviour
162
+ # (buy references a list that resolves to zero matches in this seller's catalog).
163
+ inventory_targets:
164
+ # --- Matching sets (Acme Outdoor's intended audience) ---
165
+ matching_properties:
166
+ agent_url: "https://governance.pinnacle-agency.example"
167
+ list_id: "acme_outdoor_allowlist_v1"
168
+ description: "Outdoor lifestyle properties relevant to Acme Outdoor campaigns."
169
+ # Expected contents when the list is fetched via get_property_list.
170
+ expected_identifiers:
171
+ - type: domain
172
+ value: "outdoormagazine.example"
173
+ - type: domain
174
+ value: "hikingtrails.example"
175
+ - type: domain
176
+ value: "campinggear.example"
177
+ - type: domain
178
+ value: "mountaineering.example"
179
+
180
+ matching_collections:
181
+ agent_url: "https://governance.pinnacle-agency.example"
182
+ list_id: "acme_outdoor_collections_v1"
183
+ description: "Outdoor programming the buyer wants to run alongside."
184
+ # Expected collection entries when fetched via get_collection_list.
185
+ expected_collections:
186
+ - collection_rid: "rid:outdoor:trail_life"
187
+ name: "Trail Life"
188
+ kind: "series"
189
+ genre: "outdoor"
190
+ distribution_ids:
191
+ - type: imdb_id
192
+ value: "tt9100001"
193
+ - collection_rid: "rid:outdoor:summit_stories"
194
+ name: "Summit Stories"
195
+ kind: "series"
196
+ genre: "outdoor"
197
+ distribution_ids:
198
+ - type: imdb_id
199
+ value: "tt9100002"
200
+
201
+ # --- No-match sets (nothing in this seller's catalog matches) ---
202
+ no_match_properties:
203
+ agent_url: "https://governance.pinnacle-agency.example"
204
+ list_id: "acme_outdoor_no_match_v1"
205
+ description: "Properties outside this seller's inventory — should yield zero matches."
206
+ expected_identifiers:
207
+ - type: domain
208
+ value: "never-sold-here.example"
209
+ - type: domain
210
+ value: "also-not-indexed.example"
211
+
212
+ no_match_collections:
213
+ agent_url: "https://governance.pinnacle-agency.example"
214
+ list_id: "acme_outdoor_no_match_collections_v1"
215
+ description: "Collections not carried by this seller — should yield zero matches."
216
+ expected_collections:
217
+ - collection_rid: "rid:food:bistro_kitchen"
218
+ name: "Bistro Kitchen"
219
+ kind: "series"
220
+ genre: "food"
221
+ distribution_ids:
222
+ - type: imdb_id
223
+ value: "tt9200001"