@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.
- package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/index.json +356 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
- package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
- package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
- package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
- package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
- package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
- package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
- package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
- package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
- package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
- package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
- package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +9 -5
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +30 -1
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +84 -21
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +21 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/types.d.ts +9 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +6707 -12040
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +1 -1
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/utils/signal-id-builders.d.ts +19 -0
- package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
- package/dist/lib/utils/signal-id-builders.js +30 -0
- package/dist/lib/utils/signal-id-builders.js.map +1 -1
- package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
- package/dist/lib/utils/tool-request-schemas.js +3 -0
- package/dist/lib/utils/tool-request-schemas.js.map +1 -1
- package/dist/lib/v2/projection/constants.d.ts +28 -0
- package/dist/lib/v2/projection/constants.d.ts.map +1 -0
- package/dist/lib/v2/projection/constants.js +31 -0
- package/dist/lib/v2/projection/constants.js.map +1 -0
- package/dist/lib/v2/projection/registry.d.ts.map +1 -1
- package/dist/lib/v2/projection/registry.js +9 -4
- package/dist/lib/v2/projection/registry.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/package.json +1 -1
- package/skills/SHAPE-GOTCHAS.md +5 -0
package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml
ADDED
|
@@ -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
|