@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/distributed_brand_resolution.yaml
ADDED
|
@@ -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
|