@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,454 @@
1
+ id: brand/single_side_trust_extension
2
+ version: "1.0.0"
3
+ title: "Partners MUST NOT extend trust on a single signed verify_brand_claim response"
4
+ category: brand_baseline
5
+ summary: "Red conformance test for the asymmetric trust model on verify_brand_claim. A partner that auto-provisions, propagates governance, or otherwise extends relationship trust on the strength of one signed `owned` response fails — assertion direction requires reciprocation."
6
+ track: brand
7
+ required_tools:
8
+ - verify_brand_claim
9
+
10
+ narrative: |
11
+ `verify_brand_claim` ships with a direction-asymmetric trust model. Per
12
+ [`/brand-protocol/tasks/verify_brand_claim`](/brand-protocol/tasks/verify_brand_claim)
13
+ §"The trust rule — two calls, not one":
14
+
15
+ - **Rejection direction** (`disputed` / `not_ours`) is authoritative on a
16
+ single signed response. A brand has standing to refuse association
17
+ unilaterally.
18
+ - **Assertion direction** (`owned` / `pending_review` / `transferring` /
19
+ `licensed_*`) is informative but NOT trust-extending alone. The
20
+ reciprocating side must still confirm before relationship trust extends.
21
+
22
+ The load-bearing risk is partner-side, not agent-side: a partner that
23
+ signature-verifies one `owned` response and treats it as trust-conferring
24
+ would let a malicious or mistaken house claim subsidiaries, properties, or
25
+ licensed marks it does not legitimately have, and have consumers extend
26
+ governance trust on the strength of the signature alone. See
27
+ [`brand.json` § Agent-augmented verification](/brand-protocol/brand-json#agent-augmented-verification)
28
+ for the full normative trust table and the malicious-house walkthrough.
29
+
30
+ ## What this scenario grades
31
+
32
+ The subject under test is a CONSUMER of `verify_brand_claim` — a partner
33
+ that may extend governance trust (auto-provision a member account,
34
+ propagate governance posture, include the brand in a billable seat
35
+ computation) based on what the verify response returns. The scenario drives
36
+ three variants of the malicious-house walkthrough — subsidiary, property,
37
+ and trademark `licensed_in` — and asserts the partner:
38
+
39
+ 1. DID call leaf-side reciprocation (a static crawl of the leaf's
40
+ `brand.json`, or a leaf-side `verify_brand_claim` with the mirror claim
41
+ type when one is advertised).
42
+ 2. Did NOT extend governance trust on the strength of the malicious house's
43
+ signed `owned` response alone.
44
+
45
+ ## Framework extension
46
+
47
+ This scenario is a partner-conformance red test. Every storyboard in the
48
+ corpus today grades an agent serving a task; this scenario grades a
49
+ consumer of a task. The dispatch surface required is a partner-side
50
+ comply_test_controller scenario (`evaluate_verify_brand_claim_trust_extension`)
51
+ documented in `test-kits/single-side-trust-runner.yaml`. Until adcp-client
52
+ ships consumer-under-test dispatch and a partner adopter advertises the
53
+ controller scenario, every graded step in this file declares
54
+ `requires_contract: single_side_trust_runner` and grades `not_applicable`.
55
+ Authoring the scenario now gives partners a stable target to register
56
+ against and gives the runner a stable contract to implement against.
57
+
58
+ ## Variants
59
+
60
+ - **`subsidiary`** — Malicious house signs `owned` for a subsidiary claim
61
+ on `independent-leaf.example`. The leaf's static `brand.json` does NOT
62
+ declare `house_domain: malicious-house.example`. Pass = the partner
63
+ crawls the leaf and concludes no relationship; trust is not extended.
64
+ - **`property`** — Malicious house signs `owned` for a property
65
+ (`real-property-owner.example`) it does not actually own. The property's
66
+ real owner publishes a `brand.json` listing the property in its own
67
+ `properties[]`. Pass = the partner cross-checks the property's
68
+ real owner; trust is not extended.
69
+ - **`trademark` `licensed_in`** — Malicious house signs `licensed_in` for a
70
+ mark, naming `non-reciprocating-licensor.example` as the licensor. The
71
+ licensor's static `brand.json` does NOT publish a matching `licensed_out`
72
+ entry for the mark. Pass = the partner crawls the licensor and concludes
73
+ the licensing relationship is unverified; trust is not extended.
74
+
75
+ Each variant fires independently and grades independently. A partner that
76
+ passes one variant and fails another is reported per-variant — partial
77
+ conformance is informative for implementors.
78
+
79
+ agent:
80
+ interaction_model: brand_rights_holder
81
+ capabilities: []
82
+ examples:
83
+ - "Any partner that consumes verify_brand_claim and may extend governance trust on the result — AAO members provisioning brand accounts, agencies inheriting brand relationships, governance platforms propagating spending-authority scope."
84
+
85
+ caller:
86
+ role: compliance_runner
87
+ example: "AdCP Verified runner with consumer-under-test dispatch capability"
88
+
89
+ prerequisites:
90
+ description: |
91
+ The runner hosts the fixture brand-agents and static `brand.json` files
92
+ documented in `test-kits/single-side-trust-runner.yaml`. The partner
93
+ under test advertises a comply_test_controller scenario named
94
+ `evaluate_verify_brand_claim_trust_extension` (see the runner contract
95
+ for the request shape). Partners that do not advertise this scenario
96
+ grade every step `not_applicable` (the red test is opt-in by partner
97
+ capability, matching the upstream_traffic convention from
98
+ `storyboard-schema.yaml`). Partners that DO advertise it but produce
99
+ traffic patterns inconsistent with the conformance criteria below grade
100
+ `failed` — silent passing on an empty traffic record is the façade
101
+ signal this scenario exists to catch.
102
+ test_kit: "test-kits/single-side-trust-runner.yaml"
103
+
104
+ phases:
105
+ - id: subsidiary_variant
106
+ title: "Subsidiary — malicious house claims a non-reciprocating leaf"
107
+ narrative: |
108
+ The runner dispatches the partner under test with a verify_brand_claim
109
+ target on `malicious-house.example`'s brand-agent, asking the
110
+ subsidiary question for `independent-leaf.example`. The malicious
111
+ house signs `owned`. The partner is then observed via
112
+ `query_upstream_traffic`. The partner MUST have fetched the leaf's
113
+ static `brand.json` (no leaf-side brand-agent advertised) and MUST
114
+ NOT have triggered any trust-extension side effect.
115
+
116
+ steps:
117
+ - id: dispatch_subsidiary_red_test
118
+ title: "Drive partner through verify_brand_claim subsidiary walkthrough"
119
+ narrative: |
120
+ The runner calls the partner's comply_test_controller with
121
+ scenario `evaluate_verify_brand_claim_trust_extension`,
122
+ variant `subsidiary`. The controller scenario instructs the
123
+ partner to invoke verify_brand_claim against
124
+ `malicious-house.example`'s brand-agent, evaluate the signed
125
+ response, and decide whether to extend trust to the leaf. The
126
+ runner returns from the controller call and proceeds to the
127
+ observability assertions below.
128
+ task: comply_test_controller
129
+ schema_ref: "extensions/test/comply-test-controller-request.json"
130
+ response_schema_ref: "extensions/test/comply-test-controller-response.json"
131
+ doc_ref: "/building/implementation/comply-test-controller"
132
+ requires_contract: single_side_trust_runner
133
+ stateful: true
134
+ expected: |
135
+ The controller scenario completes (any terminal status). The
136
+ partner's trust-extension decision is asserted by the
137
+ upstream_traffic checks on the following step, not by the
138
+ controller's return shape.
139
+ sample_request:
140
+ scenario: evaluate_verify_brand_claim_trust_extension
141
+ params:
142
+ variant: subsidiary
143
+ brand_agent_url: "https://malicious-house.example/agents/brand"
144
+ claim:
145
+ claim_type: subsidiary
146
+ claim:
147
+ subsidiary_domain: "independent-leaf.example"
148
+ subsidiary_brand_id: "independent_leaf"
149
+ observed_at: "2026-05-16T00:00:00Z"
150
+ context:
151
+ correlation_id: "brand--single_side_trust--subsidiary--dispatch"
152
+
153
+ - id: assert_subsidiary_reciprocation_observed
154
+ title: "Partner DID call leaf-side reciprocation"
155
+ narrative: |
156
+ The runner queries the partner's comply_test_controller
157
+ `query_upstream_traffic` (window scoped to this step's
158
+ dispatch). The partner MUST have fetched
159
+ `https://independent-leaf.example/.well-known/brand.json` to
160
+ check for a reciprocating `house_domain` claim. A partner that
161
+ extended trust without performing this fetch is the bug the red
162
+ test exists to surface.
163
+ task: verify_brand_claim
164
+ schema_ref: "brand/verify-brand-claim-request.json"
165
+ response_schema_ref: "brand/verify-brand-claim-response.json"
166
+ doc_ref: "/brand-protocol/tasks/verify_brand_claim"
167
+ requires_contract: single_side_trust_runner
168
+ stateful: false
169
+ expected: |
170
+ Recorded upstream traffic includes at least one GET against the
171
+ leaf's `.well-known/brand.json` endpoint, carrying the leaf
172
+ domain as a load-bearing identifier echo (anti-façade).
173
+ sample_request:
174
+ claim_type: subsidiary
175
+ claim:
176
+ subsidiary_domain: "independent-leaf.example"
177
+ context:
178
+ correlation_id: "brand--single_side_trust--subsidiary--reciprocation"
179
+ validations:
180
+ - check: upstream_traffic
181
+ description: "Partner fetched the leaf's brand.json for reciprocation"
182
+ endpoint_pattern: "GET *independent-leaf.example/.well-known/brand.json"
183
+ min_count: 1
184
+ identifier_paths:
185
+ - "claim.subsidiary_domain"
186
+
187
+ - id: assert_subsidiary_trust_not_extended
188
+ title: "Partner did NOT extend trust on the signed `owned` alone"
189
+ narrative: |
190
+ The runner asserts the partner produced ZERO trust-extension
191
+ side effects in response to the malicious house's signed
192
+ `owned`. Trust-extension side effects are the partner-side
193
+ actions a spec-conformant consumer MUST gate on reciprocation:
194
+ member auto-provisioning, governance-context creation, billable
195
+ seat inclusion. The runner's candidate endpoint patterns cover
196
+ the closed set documented in the runner contract. A partner
197
+ whose trust-extension surface is not represented in the closed
198
+ set declares its endpoint patterns out of band when registering
199
+ for this red test; runners merge them into the negative
200
+ assertion.
201
+ task: verify_brand_claim
202
+ schema_ref: "brand/verify-brand-claim-request.json"
203
+ response_schema_ref: "brand/verify-brand-claim-response.json"
204
+ doc_ref: "/brand-protocol/tasks/verify_brand_claim"
205
+ requires_contract: single_side_trust_runner
206
+ stateful: false
207
+ expected: |
208
+ Zero recorded calls match any of the trust-extension endpoint
209
+ patterns. The partner's evaluation of the signed `owned`
210
+ response did not propagate into governance trust.
211
+ sample_request:
212
+ claim_type: subsidiary
213
+ claim:
214
+ subsidiary_domain: "independent-leaf.example"
215
+ context:
216
+ correlation_id: "brand--single_side_trust--subsidiary--no_trust"
217
+ validations:
218
+ - check: upstream_traffic
219
+ description: "No trust-extension side effects fired on the malicious house's owned response"
220
+ endpoint_pattern: "POST */governance/auto-provision"
221
+ min_count: 0
222
+ - check: upstream_traffic
223
+ description: "No member-auto-creation side effects fired"
224
+ endpoint_pattern: "POST */accounts/auto-create-member"
225
+ min_count: 0
226
+ - check: upstream_traffic
227
+ description: "No governance-context creation fired"
228
+ endpoint_pattern: "POST */governance/contexts"
229
+ min_count: 0
230
+ - check: upstream_traffic
231
+ description: "No billable seat auto-inclusion fired"
232
+ endpoint_pattern: "POST */billing/seats/auto-add"
233
+ min_count: 0
234
+
235
+ - id: property_variant
236
+ title: "Property — malicious house claims a property it does not own"
237
+ narrative: |
238
+ The runner dispatches the partner under test with a property claim
239
+ against `real-property-owner.example`. The malicious house signs
240
+ `owned`. The property's real owner publishes a `brand.json` listing
241
+ the property in its own `properties[]`. The partner MUST cross-check
242
+ the property against the real owner's `brand.json` before extending
243
+ trust.
244
+
245
+ steps:
246
+ - id: dispatch_property_red_test
247
+ title: "Drive partner through verify_brand_claim property walkthrough"
248
+ narrative: |
249
+ The runner dispatches the partner with variant `property`. The
250
+ controller scenario asks the partner to verify the property
251
+ claim against the malicious house and decide whether to extend
252
+ trust to the property as owned by that house.
253
+ task: comply_test_controller
254
+ schema_ref: "extensions/test/comply-test-controller-request.json"
255
+ response_schema_ref: "extensions/test/comply-test-controller-response.json"
256
+ doc_ref: "/building/implementation/comply-test-controller"
257
+ requires_contract: single_side_trust_runner
258
+ stateful: true
259
+ expected: |
260
+ The controller scenario completes. The partner's trust-extension
261
+ decision is asserted by the upstream_traffic checks below.
262
+ sample_request:
263
+ scenario: evaluate_verify_brand_claim_trust_extension
264
+ params:
265
+ variant: property
266
+ brand_agent_url: "https://malicious-house.example/agents/brand"
267
+ claim:
268
+ claim_type: property
269
+ claim:
270
+ property:
271
+ type: "website"
272
+ identifier: "real-property-owner.example"
273
+ use_case: "advertising"
274
+ context:
275
+ correlation_id: "brand--single_side_trust--property--dispatch"
276
+
277
+ - id: assert_property_cross_check_observed
278
+ title: "Partner DID cross-check the property's real owner"
279
+ narrative: |
280
+ The partner MUST have fetched
281
+ `https://real-property-owner.example/.well-known/brand.json` to
282
+ verify whether the property is in fact owned by the real
283
+ owner. Without this cross-check, a partner could let any house
284
+ claim any property by signing a forged `owned`.
285
+ task: verify_brand_claim
286
+ schema_ref: "brand/verify-brand-claim-request.json"
287
+ response_schema_ref: "brand/verify-brand-claim-response.json"
288
+ doc_ref: "/brand-protocol/tasks/verify_brand_claim"
289
+ requires_contract: single_side_trust_runner
290
+ stateful: false
291
+ expected: |
292
+ Recorded upstream traffic includes at least one GET against
293
+ the property's real-owner brand.json.
294
+ sample_request:
295
+ claim_type: property
296
+ claim:
297
+ property:
298
+ type: "website"
299
+ identifier: "real-property-owner.example"
300
+ context:
301
+ correlation_id: "brand--single_side_trust--property--cross_check"
302
+ validations:
303
+ - check: upstream_traffic
304
+ description: "Partner fetched the property's real-owner brand.json"
305
+ endpoint_pattern: "GET *real-property-owner.example/.well-known/brand.json"
306
+ min_count: 1
307
+ identifier_paths:
308
+ - "claim.property.identifier"
309
+
310
+ - id: assert_property_trust_not_extended
311
+ title: "Partner did NOT accept the malicious property claim"
312
+ narrative: |
313
+ Zero trust-extension side effects fire when the malicious
314
+ house's signed `owned` for a property is the only positive
315
+ evidence the partner has seen.
316
+ task: verify_brand_claim
317
+ schema_ref: "brand/verify-brand-claim-request.json"
318
+ response_schema_ref: "brand/verify-brand-claim-response.json"
319
+ doc_ref: "/brand-protocol/tasks/verify_brand_claim"
320
+ requires_contract: single_side_trust_runner
321
+ stateful: false
322
+ expected: |
323
+ Zero recorded calls match the trust-extension endpoint
324
+ patterns.
325
+ sample_request:
326
+ claim_type: property
327
+ claim:
328
+ property:
329
+ type: "website"
330
+ identifier: "real-property-owner.example"
331
+ context:
332
+ correlation_id: "brand--single_side_trust--property--no_trust"
333
+ validations:
334
+ - check: upstream_traffic
335
+ description: "No property-trust auto-binding fired on the malicious house's owned response"
336
+ endpoint_pattern: "POST */governance/auto-provision"
337
+ min_count: 0
338
+ - check: upstream_traffic
339
+ description: "No inventory/property auto-acceptance fired"
340
+ endpoint_pattern: "POST */inventory/auto-accept"
341
+ min_count: 0
342
+ - check: upstream_traffic
343
+ description: "No creative-clearance auto-approval fired"
344
+ endpoint_pattern: "POST */creative/auto-clearance"
345
+ min_count: 0
346
+
347
+ - id: trademark_licensed_in_variant
348
+ title: "Trademark licensed_in — licensor does not reciprocate licensed_out"
349
+ narrative: |
350
+ The runner dispatches the partner under test with a trademark
351
+ `licensed_in` claim. The malicious house signs `licensed_in` and
352
+ names `non-reciprocating-licensor.example` as the licensor. The
353
+ licensor's static `brand.json` does NOT publish a matching
354
+ `licensed_out` for the mark. Per the task spec's `licensed_in`
355
+ reciprocation rule, partners SHOULD treat `licensed_in` as
356
+ unverified until the named `licensor_domain` reciprocates
357
+ `licensed_out` for the same mark.
358
+
359
+ steps:
360
+ - id: dispatch_trademark_red_test
361
+ title: "Drive partner through verify_brand_claim trademark walkthrough"
362
+ narrative: |
363
+ The runner dispatches the partner with variant
364
+ `trademark_licensed_in`. The controller scenario asks the
365
+ partner to evaluate the licensee posture and decide whether to
366
+ extend trust (e.g., creative-clearance auto-approval).
367
+ task: comply_test_controller
368
+ schema_ref: "extensions/test/comply-test-controller-request.json"
369
+ response_schema_ref: "extensions/test/comply-test-controller-response.json"
370
+ doc_ref: "/building/implementation/comply-test-controller"
371
+ requires_contract: single_side_trust_runner
372
+ stateful: true
373
+ expected: |
374
+ The controller scenario completes. The partner's licensee-trust
375
+ decision is asserted by the upstream_traffic checks below.
376
+ sample_request:
377
+ scenario: evaluate_verify_brand_claim_trust_extension
378
+ params:
379
+ variant: trademark_licensed_in
380
+ brand_agent_url: "https://malicious-house.example/agents/brand"
381
+ claim:
382
+ claim_type: trademark
383
+ claim:
384
+ mark: "FABRICATED MARK"
385
+ use_case: "advertising"
386
+ context:
387
+ correlation_id: "brand--single_side_trust--trademark--dispatch"
388
+
389
+ - id: assert_licensor_reciprocation_observed
390
+ title: "Partner DID check the licensor for reciprocating licensed_out"
391
+ narrative: |
392
+ The partner MUST have fetched
393
+ `https://non-reciprocating-licensor.example/.well-known/brand.json`
394
+ (or called the licensor's brand-agent if one were advertised —
395
+ this fixture intentionally publishes none) to verify the
396
+ licensor recognizes the licensing relationship.
397
+ task: verify_brand_claim
398
+ schema_ref: "brand/verify-brand-claim-request.json"
399
+ response_schema_ref: "brand/verify-brand-claim-response.json"
400
+ doc_ref: "/brand-protocol/tasks/verify_brand_claim"
401
+ requires_contract: single_side_trust_runner
402
+ stateful: false
403
+ expected: |
404
+ Recorded upstream traffic includes at least one GET against
405
+ the licensor's brand.json.
406
+ sample_request:
407
+ claim_type: trademark
408
+ claim:
409
+ mark: "FABRICATED MARK"
410
+ context:
411
+ correlation_id: "brand--single_side_trust--trademark--reciprocation"
412
+ validations:
413
+ - check: upstream_traffic
414
+ description: "Partner fetched the licensor's brand.json for licensed_out reciprocation"
415
+ endpoint_pattern: "GET *non-reciprocating-licensor.example/.well-known/brand.json"
416
+ min_count: 1
417
+ identifier_paths:
418
+ - "claim.mark"
419
+
420
+ - id: assert_trademark_trust_not_extended
421
+ title: "Partner did NOT accept the unverified licensee posture"
422
+ narrative: |
423
+ With no reciprocating `licensed_out` from the licensor, the
424
+ partner MUST NOT have propagated licensee posture into
425
+ downstream surfaces (creative-clearance auto-approval, mark
426
+ auto-binding, etc.).
427
+ task: verify_brand_claim
428
+ schema_ref: "brand/verify-brand-claim-request.json"
429
+ response_schema_ref: "brand/verify-brand-claim-response.json"
430
+ doc_ref: "/brand-protocol/tasks/verify_brand_claim"
431
+ requires_contract: single_side_trust_runner
432
+ stateful: false
433
+ expected: |
434
+ Zero recorded calls match the licensee-trust-extension
435
+ endpoint patterns.
436
+ sample_request:
437
+ claim_type: trademark
438
+ claim:
439
+ mark: "FABRICATED MARK"
440
+ context:
441
+ correlation_id: "brand--single_side_trust--trademark--no_trust"
442
+ validations:
443
+ - check: upstream_traffic
444
+ description: "No creative-clearance auto-approval fired on the unverified licensee posture"
445
+ endpoint_pattern: "POST */creative/auto-clearance"
446
+ min_count: 0
447
+ - check: upstream_traffic
448
+ description: "No trademark auto-binding fired"
449
+ endpoint_pattern: "POST */trademarks/auto-bind"
450
+ min_count: 0
451
+ - check: upstream_traffic
452
+ description: "No governance/licensing auto-extension fired"
453
+ endpoint_pattern: "POST */governance/licensing/auto-extend"
454
+ min_count: 0