@adcp/sdk 7.11.0 → 7.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
  2. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  3. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
  4. package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
  5. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
  6. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
  7. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  8. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
  9. package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
  10. package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
  11. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  12. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
  13. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  14. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
  15. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  16. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  17. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  18. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  19. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
  20. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
  21. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
  22. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  23. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  24. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  25. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
  26. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
  27. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
  28. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  29. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
  30. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  31. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  32. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
  33. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  34. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  35. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  36. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  37. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  38. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  39. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  40. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
  41. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  42. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  43. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  44. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  45. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  46. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  47. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  48. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
  49. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  50. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  51. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  52. package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
  53. package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
  54. package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
  55. package/compliance/cache/3.1.0-rc.2/index.json +356 -0
  56. package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
  57. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  58. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
  59. package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
  60. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
  61. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
  62. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  63. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
  64. package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
  65. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
  66. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  67. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
  68. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  69. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
  70. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  71. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  72. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  73. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  74. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
  75. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
  76. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
  77. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  78. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  79. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  80. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
  81. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
  82. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
  83. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  84. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
  85. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  86. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  87. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
  88. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  89. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  90. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  91. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  92. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  93. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  94. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  95. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
  96. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  97. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  98. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  99. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  100. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  101. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  102. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  103. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
  104. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  105. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  106. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  107. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
  108. package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
  109. package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
  110. package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
  111. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
  112. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
  113. package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
  114. package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
  115. package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
  116. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
  117. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
  118. package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
  119. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
  120. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
  121. package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
  122. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
  123. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
  124. package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
  125. package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
  126. package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
  127. package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
  128. package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
  129. package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
  130. package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
  131. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
  132. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
  133. package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
  134. package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
  135. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
  136. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
  137. package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
  138. package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
  139. package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
  140. package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
  141. package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
  142. package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
  143. package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
  144. package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
  145. package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
  146. package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
  147. package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
  148. package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
  149. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
  150. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
  151. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
  152. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
  153. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
  154. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
  155. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
  156. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
  157. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
  158. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
  159. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
  160. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
  161. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
  162. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
  163. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
  164. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
  165. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
  166. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
  167. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
  168. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
  169. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
  170. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
  171. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
  172. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
  173. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
  174. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
  175. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
  176. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
  177. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
  178. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
  179. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
  180. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
  181. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
  182. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
  183. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
  184. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
  185. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
  186. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
  187. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
  188. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
  189. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
  190. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
  191. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
  192. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
  193. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
  194. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
  195. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
  196. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
  197. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
  198. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
  199. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
  200. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
  201. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
  202. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
  203. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
  204. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
  205. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
  206. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
  207. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
  208. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
  209. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
  210. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
  211. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
  212. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
  213. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
  214. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
  215. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
  216. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
  217. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
  218. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
  219. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
  220. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
  221. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
  222. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
  223. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
  224. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
  225. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
  226. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
  227. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
  228. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
  229. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
  230. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
  231. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
  232. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
  233. package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
  234. package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
  235. package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
  236. package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
  237. package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
  238. package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
  239. package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
  240. package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
  241. package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
  242. package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
  243. package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
  244. package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
  245. package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
  246. package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
  247. package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
  248. package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
  249. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
  250. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
  251. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
  252. package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
  253. package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
  254. package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
  255. package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
  256. package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
  257. package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
  258. package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
  259. package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
  260. package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
  261. package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
  262. package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
  263. package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
  264. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
  265. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
  266. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
  267. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
  268. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
  269. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  270. package/dist/lib/testing/storyboard/default-invariants.js +23 -0
  271. package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
  272. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  273. package/dist/lib/testing/storyboard/runner.js +84 -21
  274. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  275. package/dist/lib/testing/storyboard/types.d.ts +21 -0
  276. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  277. package/dist/lib/testing/storyboard/types.js.map +1 -1
  278. package/dist/lib/testing/types.d.ts +9 -0
  279. package/dist/lib/testing/types.d.ts.map +1 -1
  280. package/dist/lib/version.d.ts +3 -3
  281. package/dist/lib/version.js +3 -3
  282. package/package.json +1 -1
@@ -0,0 +1,415 @@
1
+ id: brand/distributed_brand_resolution
2
+ version: "1.0.0"
3
+ title: "Distributed brand.json mutual assertion resolves identity and relationship trust"
4
+ category: brand_baseline
5
+ summary: "Consumer-under-test storyboard for AdCP 3.1 distributed brand.json: a house portfolio points at a child Brand Canonical Document, the child points back with house_domain, mutual assertion unlocks relationship trust, one-sided claims do not, identity stays brand-authored, compliance merges strictest-of, managed_by is directory metadata, and typed trademarks validate at the static-file layer."
6
+ track: brand
7
+ required_tools:
8
+ - comply_test_controller
9
+
10
+ narrative: |
11
+ AdCP 3.1 adds the distributed `brand.json` path: a house can keep portfolio
12
+ authority through `brand_refs[]` while a child brand self-publishes its own
13
+ Brand Canonical Document. Consumers have to resolve two separate trust
14
+ questions:
15
+
16
+ 1. Identity trust: the leaf's TLS-served canonical document is authoritative
17
+ for the leaf's own identity fields.
18
+ 2. Relationship trust: the parent/child relationship becomes trust-extending
19
+ only when the leaf's `house_domain` and the house's `brand_refs[]` entry
20
+ reciprocate.
21
+
22
+ This storyboard grades a CONSUMER of distributed `brand.json` resolution, not
23
+ a brand-agent task implementation. The runner hosts fixture static documents
24
+ and dispatches the consumer under test through the opt-in
25
+ `evaluate_distributed_brand_resolution` controller scenario documented in
26
+ `test-kits/distributed-brand-runner.yaml`.
27
+
28
+ The consumer reports its resolution decision to the runner's observation
29
+ endpoint. The runner then applies `upstream_traffic` assertions to prove the
30
+ decision distinguished identity trust from relationship trust, applied the
31
+ strictest-of compliance merge, ignored `managed_by` as a trust edge, and
32
+ rejected schema-invalid typed trademark fixtures. Consumers that do not
33
+ advertise the runner contract grade `not_applicable`; consumers that opt in
34
+ but report a contradictory decision fail.
35
+
36
+ agent:
37
+ interaction_model: brand_resolution_consumer
38
+ capabilities: []
39
+ examples:
40
+ - "AgenticAdvertising.org registry crawler resolving distributed brand.json documents"
41
+ - "Buyer-side DSP or governance platform deciding whether portfolio trust can propagate from a house to a self-published child brand"
42
+ - "Membership or billing system evaluating whether a child brand can inherit house-level governance posture"
43
+
44
+ caller:
45
+ role: compliance_runner
46
+ example: "AdCP Verified runner with distributed brand.json consumer-under-test dispatch capability"
47
+
48
+ prerequisites:
49
+ description: |
50
+ The runner hosts the fixture static `brand.json` documents and result
51
+ observation endpoint documented in `test-kits/distributed-brand-runner.yaml`.
52
+ The consumer under test advertises a comply_test_controller scenario named
53
+ `evaluate_distributed_brand_resolution`. Consumers that do not advertise
54
+ this scenario grade every step `not_applicable`, avoiding false failures
55
+ until the consumer-dispatch primitive is implemented by adopters.
56
+ test_kit: "test-kits/distributed-brand-runner.yaml"
57
+
58
+ phases:
59
+ - id: mutual_assertion_happy_path
60
+ title: "Mutual assertion establishes relationship trust"
61
+ narrative: |
62
+ The fixture house `nova-house.example` publishes `brand_refs[]` pointing
63
+ at `leaf-brand.example`. The leaf publishes a Brand Canonical Document
64
+ whose `house_domain` points back to `nova-house.example`. The consumer
65
+ must fetch both documents, treat identity fields as leaf-authored, and
66
+ upgrade the relationship edge to `mutual`.
67
+
68
+ steps:
69
+ - id: resolve_mutual_assertion
70
+ title: "Resolve reciprocal house and child documents"
71
+ narrative: |
72
+ The runner dispatches the consumer under test with the reciprocal
73
+ fixture pair. A passing consumer fetches both documents, reports
74
+ `relationship.trust_tier: mutual`, uses the leaf document as the
75
+ identity source, merges house and leaf compliance fields
76
+ strictest-of, and keeps `managed_by` out of the trust decision.
77
+ task: comply_test_controller
78
+ schema_ref: "compliance/comply-test-controller-request.json"
79
+ response_schema_ref: "compliance/comply-test-controller-response.json"
80
+ doc_ref: "/building/implementation/comply-test-controller"
81
+ requires_contract: distributed_brand_runner
82
+ sample_request_skip_schema: true
83
+ stateful: true
84
+ expected: |
85
+ The consumer resolves a mutual assertion and reports a decision
86
+ showing relationship trust, leaf-authored identity, strictest-of
87
+ compliance merge, and non-trust treatment for managed_by.
88
+ sample_request:
89
+ scenario: evaluate_distributed_brand_resolution
90
+ account:
91
+ sandbox: true
92
+ params:
93
+ variant: mutual_assertion
94
+ house_domain: "nova-house.example"
95
+ house_brand_json_url: "https://nova-house.example/.well-known/brand.json"
96
+ leaf_domain: "leaf-brand.example"
97
+ leaf_brand_json_url: "https://leaf-brand.example/.well-known/brand.json"
98
+ brand_id: "leaf_brand"
99
+ result_endpoint: "https://runner.example/distributed-brand-resolution/result"
100
+ context:
101
+ correlation_id: "brand--distributed_brand--mutual--dispatch"
102
+ validations:
103
+ - check: upstream_traffic
104
+ description: "Consumer fetched the house portfolio document"
105
+ endpoint_pattern: "GET *nova-house.example/.well-known/brand.json"
106
+ min_count: 1
107
+ identifier_paths:
108
+ - "params.house_domain"
109
+ - check: upstream_traffic
110
+ description: "Consumer fetched the leaf Brand Canonical Document"
111
+ endpoint_pattern: "GET *leaf-brand.example/.well-known/brand.json"
112
+ min_count: 1
113
+ identifier_paths:
114
+ - "params.leaf_domain"
115
+ - check: upstream_traffic
116
+ description: "Consumer reported mutual relationship trust and leaf-authored identity"
117
+ endpoint_pattern: "POST */distributed-brand-resolution/result"
118
+ min_count: 1
119
+ attestation_mode_required: "raw"
120
+ payload_must_contain:
121
+ - path: "variant"
122
+ match: equals
123
+ value: "mutual_assertion"
124
+ - path: "relationship.trust_tier"
125
+ match: equals
126
+ value: "mutual"
127
+ - path: "relationship.trust_extending"
128
+ match: equals
129
+ value: true
130
+ - path: "identity.source_domain"
131
+ match: equals
132
+ value: "leaf-brand.example"
133
+ - path: "identity.brand_id"
134
+ match: equals
135
+ value: "leaf_brand"
136
+ - path: "identity.tagline"
137
+ match: equals
138
+ value: "Built by Leaf Brand"
139
+ - path: "relationship.managed_by_trust_edge"
140
+ match: equals
141
+ value: false
142
+ identifier_paths:
143
+ - "params.house_domain"
144
+ - "params.leaf_domain"
145
+ - "params.brand_id"
146
+ - check: upstream_traffic
147
+ description: "Consumer reported strictest-of compliance union from both house and leaf"
148
+ endpoint_pattern: "POST */distributed-brand-resolution/result"
149
+ min_count: 1
150
+ attestation_mode_required: "raw"
151
+ payload_must_contain:
152
+ - path: "compliance.policy_ids[*]"
153
+ match: equals
154
+ value: "house_art22_review"
155
+ - path: "compliance.policy_ids[*]"
156
+ match: equals
157
+ value: "leaf_no_sensitive_segments"
158
+ - path: "compliance.data_subject_contestation_contacts[*].domain"
159
+ match: equals
160
+ value: "nova-house.example"
161
+ - path: "compliance.data_subject_contestation_contacts[*].domain"
162
+ match: equals
163
+ value: "leaf-brand.example"
164
+ - check: upstream_traffic
165
+ description: "Consumer accepted valid typed brand-level trademark values"
166
+ endpoint_pattern: "POST */distributed-brand-resolution/result"
167
+ min_count: 1
168
+ attestation_mode_required: "raw"
169
+ payload_must_contain:
170
+ - path: "trademark_validation.valid_fixture_schema"
171
+ match: equals
172
+ value: true
173
+ - path: "trademarks[*].mark"
174
+ match: equals
175
+ value: "LEAF BRAND"
176
+ - path: "trademarks[*].status"
177
+ match: equals
178
+ value: "active"
179
+ - path: "trademarks[*].countries[*]"
180
+ match: equals
181
+ value: "US"
182
+ - path: "trademarks[*].nice_classes[*]"
183
+ match: equals
184
+ value: 35
185
+
186
+ - id: one_sided_assertions
187
+ title: "One-sided assertions keep identity trust but block relationship trust"
188
+ narrative: |
189
+ Distributed brand resolution is intentionally asymmetric. The leaf can
190
+ prove its own identity by serving a Brand Canonical Document over TLS,
191
+ but it cannot cause the house relationship to become trust-extending
192
+ unless the house reciprocates. Likewise, a house-side `brand_refs[]`
193
+ entry or `managed_by` directory metadata cannot substitute for the leaf's
194
+ `house_domain`.
195
+
196
+ steps:
197
+ - id: resolve_leaf_only_assertion
198
+ title: "Reject relationship trust when the house is silent"
199
+ narrative: |
200
+ The leaf fixture claims `house_domain: nova-house.example`, but the
201
+ house fixture omits the leaf from `brand_refs[]`. The consumer must
202
+ preserve identity trust for the leaf's own fields and block
203
+ governance or billing trust propagation.
204
+ task: comply_test_controller
205
+ schema_ref: "compliance/comply-test-controller-request.json"
206
+ response_schema_ref: "compliance/comply-test-controller-response.json"
207
+ doc_ref: "/building/implementation/comply-test-controller"
208
+ requires_contract: distributed_brand_runner
209
+ sample_request_skip_schema: true
210
+ stateful: true
211
+ expected: |
212
+ The consumer reports identity_trusted: true but relationship trust
213
+ unverified, and no trust-extension side effects fire.
214
+ sample_request:
215
+ scenario: evaluate_distributed_brand_resolution
216
+ account:
217
+ sandbox: true
218
+ params:
219
+ variant: leaf_only
220
+ house_domain: "nova-house.example"
221
+ house_brand_json_url: "https://nova-house.example/.well-known/brand.json"
222
+ leaf_domain: "leaf-only-brand.example"
223
+ leaf_brand_json_url: "https://leaf-only-brand.example/.well-known/brand.json"
224
+ brand_id: "leaf_only_brand"
225
+ result_endpoint: "https://runner.example/distributed-brand-resolution/result"
226
+ context:
227
+ correlation_id: "brand--distributed_brand--leaf_only--dispatch"
228
+ validations:
229
+ - check: upstream_traffic
230
+ description: "Consumer fetched the leaf document before rejecting relationship trust"
231
+ endpoint_pattern: "GET *leaf-only-brand.example/.well-known/brand.json"
232
+ min_count: 1
233
+ identifier_paths:
234
+ - "params.leaf_domain"
235
+ - check: upstream_traffic
236
+ description: "Consumer fetched the house portfolio document before rejecting relationship trust"
237
+ endpoint_pattern: "GET *nova-house.example/.well-known/brand.json"
238
+ min_count: 1
239
+ identifier_paths:
240
+ - "params.house_domain"
241
+ - check: upstream_traffic
242
+ description: "Consumer reported trusted identity but unverified relationship"
243
+ endpoint_pattern: "POST */distributed-brand-resolution/result"
244
+ min_count: 1
245
+ attestation_mode_required: "raw"
246
+ payload_must_contain:
247
+ - path: "variant"
248
+ match: equals
249
+ value: "leaf_only"
250
+ - path: "identity.trusted"
251
+ match: equals
252
+ value: true
253
+ - path: "identity.source_domain"
254
+ match: equals
255
+ value: "leaf-only-brand.example"
256
+ - path: "relationship.trust_tier"
257
+ match: equals
258
+ value: "leaf_only"
259
+ - path: "relationship.trust_extending"
260
+ match: equals
261
+ value: false
262
+ - check: upstream_traffic
263
+ description: "Consumer did not extend governance trust for leaf-only assertion"
264
+ endpoint_pattern: "POST */governance/contexts"
265
+ min_count: 0
266
+ - check: upstream_traffic
267
+ description: "Consumer did not auto-add the leaf to billable house scope"
268
+ endpoint_pattern: "POST */billing/seats/auto-add"
269
+ min_count: 0
270
+
271
+ - id: resolve_managed_by_only_assertion
272
+ title: "Do not treat managed_by as a trust edge"
273
+ narrative: |
274
+ The house fixture lists `managed_by: aurora-agency.example` on a
275
+ `brand_refs[]` entry while the leaf fixture has no reciprocal
276
+ `house_domain`. The consumer may expose the manager as directory
277
+ metadata, but relationship trust remains blocked.
278
+ task: comply_test_controller
279
+ schema_ref: "compliance/comply-test-controller-request.json"
280
+ response_schema_ref: "compliance/comply-test-controller-response.json"
281
+ doc_ref: "/building/implementation/comply-test-controller"
282
+ requires_contract: distributed_brand_runner
283
+ sample_request_skip_schema: true
284
+ stateful: true
285
+ expected: |
286
+ The consumer reports managed_by as directory metadata only and does
287
+ not use the manager domain to complete relationship trust.
288
+ sample_request:
289
+ scenario: evaluate_distributed_brand_resolution
290
+ account:
291
+ sandbox: true
292
+ params:
293
+ variant: managed_by_only
294
+ house_domain: "nova-house.example"
295
+ house_brand_json_url: "https://nova-house.example/.well-known/brand.json"
296
+ leaf_domain: "managed-leaf.example"
297
+ leaf_brand_json_url: "https://managed-leaf.example/.well-known/brand.json"
298
+ brand_id: "managed_leaf"
299
+ manager_domain: "aurora-agency.example"
300
+ result_endpoint: "https://runner.example/distributed-brand-resolution/result"
301
+ context:
302
+ correlation_id: "brand--distributed_brand--managed_by--dispatch"
303
+ validations:
304
+ - check: upstream_traffic
305
+ description: "Consumer fetched the house-side managed_by directory entry"
306
+ endpoint_pattern: "GET *nova-house.example/.well-known/brand.json"
307
+ min_count: 1
308
+ identifier_paths:
309
+ - "params.house_domain"
310
+ - check: upstream_traffic
311
+ description: "Consumer fetched the leaf document to confirm no reciprocal house_domain"
312
+ endpoint_pattern: "GET *managed-leaf.example/.well-known/brand.json"
313
+ min_count: 1
314
+ identifier_paths:
315
+ - "params.leaf_domain"
316
+ - check: upstream_traffic
317
+ description: "Consumer reported managed_by without upgrading trust"
318
+ endpoint_pattern: "POST */distributed-brand-resolution/result"
319
+ min_count: 1
320
+ attestation_mode_required: "raw"
321
+ payload_must_contain:
322
+ - path: "variant"
323
+ match: equals
324
+ value: "managed_by_only"
325
+ - path: "directory.managed_by"
326
+ match: equals
327
+ value: "aurora-agency.example"
328
+ - path: "relationship.trust_tier"
329
+ match: equals
330
+ value: "house_only"
331
+ - path: "relationship.trust_extending"
332
+ match: equals
333
+ value: false
334
+ - path: "relationship.managed_by_trust_edge"
335
+ match: equals
336
+ value: false
337
+ identifier_paths:
338
+ - "params.manager_domain"
339
+ - check: upstream_traffic
340
+ description: "Consumer did not treat the manager as a governance-trust authority"
341
+ endpoint_pattern: "POST */governance/auto-provision"
342
+ min_count: 0
343
+
344
+ - id: typed_trademark_rejection
345
+ title: "Invalid typed trademarks are rejected"
346
+ narrative: |
347
+ Brand-level `trademarks[]` now have typed enum and range constraints. A
348
+ consumer that accepts the valid fixture must also reject invalid enum,
349
+ country, and Nice Classification values instead of silently promoting
350
+ them into the resolved brand graph.
351
+
352
+ steps:
353
+ - id: reject_invalid_trademark_fixture
354
+ title: "Reject schema-invalid trademark values"
355
+ narrative: |
356
+ The invalid fixture uses a non-enum `status`, a non-ISO
357
+ `countries[]` entry, and an out-of-range `nice_classes[]` value.
358
+ The consumer reports these as static-file schema failures and does
359
+ not extend relationship trust from the invalid document.
360
+ task: comply_test_controller
361
+ schema_ref: "compliance/comply-test-controller-request.json"
362
+ response_schema_ref: "compliance/comply-test-controller-response.json"
363
+ doc_ref: "/building/implementation/comply-test-controller"
364
+ requires_contract: distributed_brand_runner
365
+ sample_request_skip_schema: true
366
+ stateful: true
367
+ expected: |
368
+ The consumer reports trademark validation failure paths and does not
369
+ treat the invalid leaf document as a trust-extending relationship
370
+ edge.
371
+ sample_request:
372
+ scenario: evaluate_distributed_brand_resolution
373
+ account:
374
+ sandbox: true
375
+ params:
376
+ variant: invalid_trademark
377
+ house_domain: "nova-house.example"
378
+ house_brand_json_url: "https://nova-house.example/.well-known/brand.json"
379
+ leaf_domain: "invalid-mark-brand.example"
380
+ leaf_brand_json_url: "https://invalid-mark-brand.example/.well-known/brand.json"
381
+ brand_id: "invalid_mark_brand"
382
+ result_endpoint: "https://runner.example/distributed-brand-resolution/result"
383
+ context:
384
+ correlation_id: "brand--distributed_brand--invalid_trademark--dispatch"
385
+ validations:
386
+ - check: upstream_traffic
387
+ description: "Consumer fetched the invalid trademark fixture"
388
+ endpoint_pattern: "GET *invalid-mark-brand.example/.well-known/brand.json"
389
+ min_count: 1
390
+ identifier_paths:
391
+ - "params.leaf_domain"
392
+ - check: upstream_traffic
393
+ description: "Consumer reported schema failures for typed trademark fields"
394
+ endpoint_pattern: "POST */distributed-brand-resolution/result"
395
+ min_count: 1
396
+ attestation_mode_required: "raw"
397
+ payload_must_contain:
398
+ - path: "variant"
399
+ match: equals
400
+ value: "invalid_trademark"
401
+ - path: "trademark_validation.valid_fixture_schema"
402
+ match: equals
403
+ value: false
404
+ - path: "trademark_validation.error_paths[*]"
405
+ match: equals
406
+ value: "trademarks[0].status"
407
+ - path: "trademark_validation.error_paths[*]"
408
+ match: equals
409
+ value: "trademarks[0].countries[0]"
410
+ - path: "trademark_validation.error_paths[*]"
411
+ match: equals
412
+ value: "trademarks[0].nice_classes[0]"
413
+ - path: "relationship.trust_extending"
414
+ match: equals
415
+ value: false