@adcp/sdk 7.11.0 → 7.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +23 -0
- 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/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Billing-Gate Runner — Harness Contract Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Applies to: universal/billing-gate-dispatch.yaml.
|
|
4
|
+
#
|
|
5
|
+
# The billing-gate-dispatch storyboard validates the two-gate dispatch on
|
|
6
|
+
# `sync_accounts.billing` rejection — seller-wide capability gate
|
|
7
|
+
# (BILLING_NOT_SUPPORTED) vs per-buyer-agent commercial-relationship gate
|
|
8
|
+
# (BILLING_NOT_PERMITTED_FOR_AGENT). Two of the four phases depend on
|
|
9
|
+
# preconditions the runner cannot establish via the protocol:
|
|
10
|
+
#
|
|
11
|
+
# capability_gate — runner needs a `billing` value the seller does
|
|
12
|
+
# NOT support, so it can probe a rejection. Skipped
|
|
13
|
+
# if the seller supports all three values
|
|
14
|
+
# ("operator", "agent", "advertiser") at the
|
|
15
|
+
# capability level.
|
|
16
|
+
# per_agent_gate_reject — runner needs the calling buyer agent to be
|
|
17
|
+
# registered with the seller as passthrough-only
|
|
18
|
+
# (no payments relationship). The seller's
|
|
19
|
+
# onboarding system records the commercial state
|
|
20
|
+
# offline; the protocol has no surface for
|
|
21
|
+
# toggling it from outside.
|
|
22
|
+
#
|
|
23
|
+
# This kit is the coordination contract between the runner and a seller-under-
|
|
24
|
+
# test that wants the per-agent-gate phases graded. Sellers that do not ship
|
|
25
|
+
# a passthrough-only test caller leave `commercial_relationship` unset and
|
|
26
|
+
# the per-agent phases grade `not_applicable`.
|
|
27
|
+
|
|
28
|
+
id: billing_gate_runner
|
|
29
|
+
applies_to:
|
|
30
|
+
universal_storyboard: billing-gate-dispatch
|
|
31
|
+
|
|
32
|
+
description: |
|
|
33
|
+
Coordination contract between the billing-gate-dispatch runner and a seller
|
|
34
|
+
agent under test.
|
|
35
|
+
|
|
36
|
+
The runner reads two precondition fields from this kit:
|
|
37
|
+
|
|
38
|
+
account.unsupported_billing_probe — (optional) the value the runner will
|
|
39
|
+
submit on the capability-gate phase. MUST be a value the seller's
|
|
40
|
+
`account.supported_billing` does NOT include, so the seller rejects
|
|
41
|
+
with BILLING_NOT_SUPPORTED. Sellers whose `supported_billing` is the
|
|
42
|
+
full set of three values omit this field; the capability-gate phase
|
|
43
|
+
grades `not_applicable` in that case.
|
|
44
|
+
|
|
45
|
+
commercial_relationship — (optional) declares the calling buyer agent's
|
|
46
|
+
onboarded commercial state with the seller. When set to
|
|
47
|
+
"passthrough_only", the runner submits `billing: "agent"` on the
|
|
48
|
+
per-agent-gate-reject phase and asserts BILLING_NOT_PERMITTED_FOR_AGENT
|
|
49
|
+
with the clamped error.details shape. When unset, both per-agent
|
|
50
|
+
phases grade `not_applicable`.
|
|
51
|
+
|
|
52
|
+
Establishing the commercial relationship is offline (the same posture as
|
|
53
|
+
operator account creation): the seller-under-test records the test
|
|
54
|
+
caller's commercial state in its onboarding system before the storyboard
|
|
55
|
+
runs. A future extension (`comply_test_controller` `seed_buyer_agent`)
|
|
56
|
+
MAY let runners establish the precondition programmatically; until then
|
|
57
|
+
the test kit declares it.
|
|
58
|
+
|
|
59
|
+
endpoint_scope: sandbox
|
|
60
|
+
# The per_agent_gate_recover phase provisions a real account on the seller's
|
|
61
|
+
# books once `BILLING_NOT_PERMITTED_FOR_AGENT` recovers via the seller's
|
|
62
|
+
# `error.details.suggested_billing` value. Run against a sandbox endpoint or
|
|
63
|
+
# a designated test caller whose account creations the seller cleans up
|
|
64
|
+
# post-grading.
|
|
65
|
+
|
|
66
|
+
harness_mode: black_box
|
|
67
|
+
|
|
68
|
+
# Authentication fixture. Validated end-to-end against the training-agent
|
|
69
|
+
# reference implementation (#3851), which recognizes the
|
|
70
|
+
# `demo-billing-passthrough-*` family as the spoofable test principal
|
|
71
|
+
# mapping to `commercial_relationship: passthrough_only` — see
|
|
72
|
+
# server/src/training-agent/commercial-relationships.ts. Sellers running
|
|
73
|
+
# their own conformance harness substitute their own bearer convention
|
|
74
|
+
# for the same precondition.
|
|
75
|
+
#
|
|
76
|
+
# IMPORTANT — runner invocation: today's storyboard runner does not
|
|
77
|
+
# auto-extract `auth.api_key` from the test kit. Pass it explicitly:
|
|
78
|
+
#
|
|
79
|
+
# npx adcp storyboard run <agent-url> \
|
|
80
|
+
# --auth demo-billing-passthrough-v1 \
|
|
81
|
+
# --file static/compliance/source/universal/billing-gate-dispatch.yaml
|
|
82
|
+
#
|
|
83
|
+
# The kit declares the bearer the seller's harness expects to be
|
|
84
|
+
# authenticated under; the CLI carries the bearer onto the wire.
|
|
85
|
+
auth:
|
|
86
|
+
api_key: "demo-billing-passthrough-v1"
|
|
87
|
+
probe_task: list_accounts
|
|
88
|
+
|
|
89
|
+
# Brand identity for the storyboard's sample_request payloads. Reuses the Acme
|
|
90
|
+
# Outdoor sandbox brand so the brand-resolution path is the same as for
|
|
91
|
+
# adjacent universal storyboards (acmeoutdoor.example resolves via AAO sandbox
|
|
92
|
+
# brand resolution).
|
|
93
|
+
brand:
|
|
94
|
+
house:
|
|
95
|
+
domain: "acmeoutdoor.example"
|
|
96
|
+
name: "Acme Outdoor"
|
|
97
|
+
brand_id: "acme_outdoor"
|
|
98
|
+
|
|
99
|
+
# Account-shape preconditions for the capability-gate phase. Sellers whose
|
|
100
|
+
# `account.supported_billing` is a strict subset of ["operator", "agent",
|
|
101
|
+
# "advertiser"] declare the unsupported value here. Sellers whose capability
|
|
102
|
+
# is the full set leave this commented out and the capability-gate phase
|
|
103
|
+
# grades not_applicable.
|
|
104
|
+
account:
|
|
105
|
+
# unsupported_billing_probe: "advertiser" # uncomment + set for capability-gate
|
|
106
|
+
|
|
107
|
+
# Per-buyer-agent commercial-relationship precondition for the per-agent
|
|
108
|
+
# gate phases. When set to "passthrough_only", the runner exercises the
|
|
109
|
+
# per-agent gate. Other values reserved for future commercial-state shapes
|
|
110
|
+
# (e.g., "agent_billable", "advertiser_billable_only").
|
|
111
|
+
#
|
|
112
|
+
# Sellers that ship a passthrough-only test caller declare it here.
|
|
113
|
+
# Sellers that don't, comment this out and the per-agent phases grade
|
|
114
|
+
# not_applicable.
|
|
115
|
+
commercial_relationship: "passthrough_only"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Bistro Oranje — Hospitality Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[bistro_oranje]
|
|
4
|
+
#
|
|
5
|
+
# Dutch restaurant chain used in rights licensing scenarios.
|
|
6
|
+
#
|
|
7
|
+
# This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
|
|
8
|
+
# Agents resolve bistro-oranje.example via the standard AAO brand resolution path.
|
|
9
|
+
# AAO returns the brand.json below but excludes sandbox brands from production
|
|
10
|
+
# brand discovery results.
|
|
11
|
+
|
|
12
|
+
id: bistro_oranje
|
|
13
|
+
name: "Bistro Oranje"
|
|
14
|
+
description: "Dutch restaurant chain for rights licensing storyboard testing"
|
|
15
|
+
sandbox: true
|
|
16
|
+
|
|
17
|
+
# security_baseline auth fixture — see acme-outdoor.yaml for semantics.
|
|
18
|
+
auth:
|
|
19
|
+
api_key: "demo-bistro-oranje-v1"
|
|
20
|
+
probe_task: list_creatives
|
|
21
|
+
|
|
22
|
+
brand:
|
|
23
|
+
house:
|
|
24
|
+
domain: "bistro-oranje.example"
|
|
25
|
+
name: "Bistro Oranje"
|
|
26
|
+
brand_id: "bistro_oranje"
|
|
27
|
+
names:
|
|
28
|
+
- en: "Bistro Oranje"
|
|
29
|
+
- nl: "Bistro Oranje"
|
|
30
|
+
description: "Modern Dutch dining — seasonal menus inspired by the Netherlands, served with warmth."
|
|
31
|
+
industry: "hospitality"
|
|
32
|
+
keller_type: "master"
|
|
33
|
+
logos:
|
|
34
|
+
- url: "https://test-assets.adcontextprotocol.org/bistro-oranje/logo-primary.png"
|
|
35
|
+
orientation: "horizontal"
|
|
36
|
+
background: "light-bg"
|
|
37
|
+
variant: "primary"
|
|
38
|
+
width: 400
|
|
39
|
+
height: 100
|
|
40
|
+
- url: "https://test-assets.adcontextprotocol.org/bistro-oranje/logo-icon.png"
|
|
41
|
+
orientation: "square"
|
|
42
|
+
background: "transparent-bg"
|
|
43
|
+
variant: "icon"
|
|
44
|
+
width: 200
|
|
45
|
+
height: 200
|
|
46
|
+
colors:
|
|
47
|
+
primary: "#E65100"
|
|
48
|
+
secondary: "#1B5E20"
|
|
49
|
+
accent: "#FFC107"
|
|
50
|
+
background: "#FFF8E1"
|
|
51
|
+
text: "#212121"
|
|
52
|
+
fonts:
|
|
53
|
+
heading:
|
|
54
|
+
family: "Playfair Display"
|
|
55
|
+
weight: 700
|
|
56
|
+
url: "https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700"
|
|
57
|
+
body:
|
|
58
|
+
family: "Source Sans Pro"
|
|
59
|
+
weight: 400
|
|
60
|
+
url: "https://fonts.googleapis.com/css2?family=Source+Sans+Pro"
|
|
61
|
+
tone:
|
|
62
|
+
voice: "Warm and inviting, with understated confidence. We let the food speak — no excess, no pretension."
|
|
63
|
+
attributes:
|
|
64
|
+
- "welcoming"
|
|
65
|
+
- "seasonal"
|
|
66
|
+
- "unpretentious"
|
|
67
|
+
dos:
|
|
68
|
+
- "Mention seasonal ingredients by name"
|
|
69
|
+
- "Reference Dutch culinary traditions"
|
|
70
|
+
- "Keep descriptions sensory and specific"
|
|
71
|
+
donts:
|
|
72
|
+
- "Use fine-dining jargon"
|
|
73
|
+
- "Overuse superlatives"
|
|
74
|
+
- "Promise exclusivity — Bistro Oranje is for everyone"
|
|
75
|
+
|
|
76
|
+
assets:
|
|
77
|
+
images:
|
|
78
|
+
- id: "hero_300x250"
|
|
79
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-300x250.jpg"
|
|
80
|
+
width: 300
|
|
81
|
+
height: 250
|
|
82
|
+
mime_type: "image/jpeg"
|
|
83
|
+
description: "Medium rectangle hero — seasonal dish on rustic table"
|
|
84
|
+
|
|
85
|
+
- id: "hero_728x90"
|
|
86
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-728x90.jpg"
|
|
87
|
+
width: 728
|
|
88
|
+
height: 90
|
|
89
|
+
mime_type: "image/jpeg"
|
|
90
|
+
description: "Leaderboard hero — bistro exterior with canal backdrop"
|
|
91
|
+
|
|
92
|
+
- id: "hero_320x50"
|
|
93
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-320x50.jpg"
|
|
94
|
+
width: 320
|
|
95
|
+
height: 50
|
|
96
|
+
mime_type: "image/jpeg"
|
|
97
|
+
description: "Mobile banner hero — close-up of signature stamppot"
|
|
98
|
+
|
|
99
|
+
- id: "hero_160x600"
|
|
100
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-160x600.jpg"
|
|
101
|
+
width: 160
|
|
102
|
+
height: 600
|
|
103
|
+
mime_type: "image/jpeg"
|
|
104
|
+
description: "Wide skyscraper hero — vertical dining room scene"
|
|
105
|
+
|
|
106
|
+
- id: "hero_master"
|
|
107
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-master.jpg"
|
|
108
|
+
width: 1200
|
|
109
|
+
height: 628
|
|
110
|
+
mime_type: "image/jpeg"
|
|
111
|
+
description: "Master hero image — high-res chef plating seasonal dish"
|
|
112
|
+
|
|
113
|
+
text:
|
|
114
|
+
headlines:
|
|
115
|
+
- "Taste the Season at Bistro Oranje"
|
|
116
|
+
- "Dutch Comfort, Modern Kitchen"
|
|
117
|
+
- "Reserve Your Table Tonight"
|
|
118
|
+
descriptions:
|
|
119
|
+
- "Seasonal menus inspired by Dutch tradition, made with ingredients sourced within 50km. Bistro Oranje — Amsterdam, Rotterdam, Utrecht."
|
|
120
|
+
- "From stamppot to stroopwafel, every dish tells a story. Book your table at Bistro Oranje."
|
|
121
|
+
cta:
|
|
122
|
+
- "Reserve a Table"
|
|
123
|
+
- "View the Menu"
|
|
124
|
+
- "Find a Location"
|
|
125
|
+
|
|
126
|
+
click_url: "https://bistro-oranje.example/reservations"
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Distributed Brand Runner — Harness Contract Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Applies to:
|
|
4
|
+
# - protocols/brand/scenarios/distributed_brand_resolution.yaml
|
|
5
|
+
#
|
|
6
|
+
# The distributed-brand scenario is a consumer-conformance test. It grades a
|
|
7
|
+
# crawler, registry, buyer-side DSP, governance platform, or membership system
|
|
8
|
+
# that reads static `brand.json` documents and decides whether relationship
|
|
9
|
+
# trust can propagate from a house to a child brand.
|
|
10
|
+
#
|
|
11
|
+
# Runner-side implementation is pending. Until adcp-client lands a general
|
|
12
|
+
# consumer-under-test dispatch primitive, scenario steps declare
|
|
13
|
+
# `requires_contract: distributed_brand_runner` and grade `not_applicable`
|
|
14
|
+
# unless the consumer advertises the controller scenario below.
|
|
15
|
+
|
|
16
|
+
id: distributed_brand_runner
|
|
17
|
+
applies_to:
|
|
18
|
+
protocol_scenarios:
|
|
19
|
+
- distributed_brand_resolution
|
|
20
|
+
|
|
21
|
+
description: |
|
|
22
|
+
Coordination contract between a black-box runner and a consumer under test
|
|
23
|
+
for distributed `brand.json` resolution. The runner hosts fixture static
|
|
24
|
+
documents, dispatches the consumer through comply_test_controller scenario
|
|
25
|
+
`evaluate_distributed_brand_resolution`, and records the consumer's outbound
|
|
26
|
+
fetches and result report through `query_upstream_traffic`.
|
|
27
|
+
|
|
28
|
+
endpoint_scope: sandbox
|
|
29
|
+
harness_mode: black_box
|
|
30
|
+
|
|
31
|
+
fixtures:
|
|
32
|
+
result_observation_endpoint:
|
|
33
|
+
url: "https://runner.example/distributed-brand-resolution/result"
|
|
34
|
+
method: POST
|
|
35
|
+
description: |
|
|
36
|
+
The consumer posts one JSON result per dispatch. This is a harness
|
|
37
|
+
observation surface, not a production protocol endpoint. The runner
|
|
38
|
+
records the call and applies storyboard `upstream_traffic`
|
|
39
|
+
`payload_must_contain` assertions against it.
|
|
40
|
+
|
|
41
|
+
mutual_assertion:
|
|
42
|
+
house:
|
|
43
|
+
domain: "nova-house.example"
|
|
44
|
+
brand_json_url: "https://nova-house.example/.well-known/brand.json"
|
|
45
|
+
brand_json_shape:
|
|
46
|
+
house:
|
|
47
|
+
domain: "nova-house.example"
|
|
48
|
+
name: "Nova House"
|
|
49
|
+
contact:
|
|
50
|
+
email: "brand-ops@nova-house.example"
|
|
51
|
+
data_subject_contestation:
|
|
52
|
+
contact:
|
|
53
|
+
email: "privacy@nova-house.example"
|
|
54
|
+
domain: "nova-house.example"
|
|
55
|
+
compliance_policies:
|
|
56
|
+
- policy_id: "house_art22_review"
|
|
57
|
+
enforcement: "must"
|
|
58
|
+
policy: "Human review is required for automated eligibility or opportunity decisions."
|
|
59
|
+
policy_categories:
|
|
60
|
+
- "regulated_decisioning"
|
|
61
|
+
brand_refs:
|
|
62
|
+
- domain: "leaf-brand.example"
|
|
63
|
+
brand_id: "leaf_brand"
|
|
64
|
+
managed_by: "aurora-agency.example"
|
|
65
|
+
effective_at: "2026-05-01T00:00:00Z"
|
|
66
|
+
trademarks:
|
|
67
|
+
- registry: "USPTO"
|
|
68
|
+
number: "90000001"
|
|
69
|
+
mark: "NOVA HOUSE"
|
|
70
|
+
status: "active"
|
|
71
|
+
license_type: "owned"
|
|
72
|
+
countries: ["US"]
|
|
73
|
+
nice_classes: [35]
|
|
74
|
+
leaf:
|
|
75
|
+
domain: "leaf-brand.example"
|
|
76
|
+
brand_json_url: "https://leaf-brand.example/.well-known/brand.json"
|
|
77
|
+
brand_json_shape:
|
|
78
|
+
id: "leaf_brand"
|
|
79
|
+
names:
|
|
80
|
+
- en: "Leaf Brand"
|
|
81
|
+
tagline: "Built by Leaf Brand"
|
|
82
|
+
description: "Self-published child brand identity for distributed brand.json testing."
|
|
83
|
+
house_domain: "nova-house.example"
|
|
84
|
+
keller_type: "endorsed"
|
|
85
|
+
colors:
|
|
86
|
+
primary: "#176B87"
|
|
87
|
+
secondary: "#E9C46A"
|
|
88
|
+
tone:
|
|
89
|
+
voice: "Clear, exact, and practical."
|
|
90
|
+
attributes:
|
|
91
|
+
- "clear"
|
|
92
|
+
- "practical"
|
|
93
|
+
data_subject_contestation:
|
|
94
|
+
contact:
|
|
95
|
+
email: "privacy@leaf-brand.example"
|
|
96
|
+
domain: "leaf-brand.example"
|
|
97
|
+
compliance_policies:
|
|
98
|
+
- policy_id: "leaf_no_sensitive_segments"
|
|
99
|
+
enforcement: "must"
|
|
100
|
+
policy: "Do not target sensitive health, finance, or employment inference segments."
|
|
101
|
+
policy_categories:
|
|
102
|
+
- "brand_suitability"
|
|
103
|
+
trademarks:
|
|
104
|
+
- registry: "USPTO"
|
|
105
|
+
number: "90000002"
|
|
106
|
+
mark: "LEAF BRAND"
|
|
107
|
+
status: "active"
|
|
108
|
+
license_type: "owned"
|
|
109
|
+
countries: ["US"]
|
|
110
|
+
nice_classes: [35]
|
|
111
|
+
|
|
112
|
+
leaf_only:
|
|
113
|
+
description: |
|
|
114
|
+
Leaf claims `house_domain: nova-house.example`, but the house document
|
|
115
|
+
served for this variant omits the leaf from `brand_refs[]`. Identity is
|
|
116
|
+
still trusted from the leaf's TLS document; relationship trust is not.
|
|
117
|
+
house:
|
|
118
|
+
domain: "nova-house.example"
|
|
119
|
+
brand_json_url: "https://nova-house.example/.well-known/brand.json"
|
|
120
|
+
brand_json_shape:
|
|
121
|
+
house:
|
|
122
|
+
domain: "nova-house.example"
|
|
123
|
+
name: "Nova House"
|
|
124
|
+
contact:
|
|
125
|
+
email: "brand-ops@nova-house.example"
|
|
126
|
+
data_subject_contestation:
|
|
127
|
+
contact:
|
|
128
|
+
email: "privacy@nova-house.example"
|
|
129
|
+
domain: "nova-house.example"
|
|
130
|
+
compliance_policies:
|
|
131
|
+
- policy_id: "house_art22_review"
|
|
132
|
+
enforcement: "must"
|
|
133
|
+
policy: "Human review is required for automated eligibility or opportunity decisions."
|
|
134
|
+
brand_refs: []
|
|
135
|
+
leaf:
|
|
136
|
+
domain: "leaf-only-brand.example"
|
|
137
|
+
brand_json_url: "https://leaf-only-brand.example/.well-known/brand.json"
|
|
138
|
+
brand_json_shape:
|
|
139
|
+
id: "leaf_only_brand"
|
|
140
|
+
names:
|
|
141
|
+
- en: "Leaf Only Brand"
|
|
142
|
+
tagline: "Leaf identity remains authoritative"
|
|
143
|
+
house_domain: "nova-house.example"
|
|
144
|
+
keller_type: "independent"
|
|
145
|
+
trademarks:
|
|
146
|
+
- registry: "USPTO"
|
|
147
|
+
number: "90000003"
|
|
148
|
+
mark: "LEAF ONLY BRAND"
|
|
149
|
+
status: "pending"
|
|
150
|
+
countries: ["US"]
|
|
151
|
+
nice_classes: [35]
|
|
152
|
+
|
|
153
|
+
managed_by_only:
|
|
154
|
+
description: |
|
|
155
|
+
House declares a pointer child with `managed_by`, but the leaf omits
|
|
156
|
+
`house_domain`. Consumers may surface the manager in directory views,
|
|
157
|
+
but MUST NOT use it as a trust edge.
|
|
158
|
+
house:
|
|
159
|
+
domain: "nova-house.example"
|
|
160
|
+
brand_json_url: "https://nova-house.example/.well-known/brand.json"
|
|
161
|
+
brand_json_shape:
|
|
162
|
+
house:
|
|
163
|
+
domain: "nova-house.example"
|
|
164
|
+
name: "Nova House"
|
|
165
|
+
contact:
|
|
166
|
+
email: "brand-ops@nova-house.example"
|
|
167
|
+
brand_refs:
|
|
168
|
+
- domain: "managed-leaf.example"
|
|
169
|
+
brand_id: "managed_leaf"
|
|
170
|
+
managed_by: "aurora-agency.example"
|
|
171
|
+
effective_at: "2026-05-01T00:00:00Z"
|
|
172
|
+
leaf:
|
|
173
|
+
domain: "managed-leaf.example"
|
|
174
|
+
brand_json_url: "https://managed-leaf.example/.well-known/brand.json"
|
|
175
|
+
brand_json_shape:
|
|
176
|
+
id: "managed_leaf"
|
|
177
|
+
names:
|
|
178
|
+
- en: "Managed Leaf"
|
|
179
|
+
tagline: "Managed operationally, not trust delegated"
|
|
180
|
+
keller_type: "independent"
|
|
181
|
+
trademarks:
|
|
182
|
+
- registry: "USPTO"
|
|
183
|
+
number: "90000004"
|
|
184
|
+
mark: "MANAGED LEAF"
|
|
185
|
+
status: "active"
|
|
186
|
+
countries: ["US"]
|
|
187
|
+
nice_classes: [35]
|
|
188
|
+
|
|
189
|
+
invalid_trademark:
|
|
190
|
+
description: |
|
|
191
|
+
Static document used only for schema-rejection validation. The runner
|
|
192
|
+
intentionally serves invalid typed trademark values so the consumer can
|
|
193
|
+
prove it rejects them before promoting the document into a resolved graph.
|
|
194
|
+
leaf:
|
|
195
|
+
domain: "invalid-mark-brand.example"
|
|
196
|
+
brand_json_url: "https://invalid-mark-brand.example/.well-known/brand.json"
|
|
197
|
+
invalid_fields:
|
|
198
|
+
- "trademarks[0].status"
|
|
199
|
+
- "trademarks[0].countries[0]"
|
|
200
|
+
- "trademarks[0].nice_classes[0]"
|
|
201
|
+
brand_json_shape:
|
|
202
|
+
id: "invalid_mark_brand"
|
|
203
|
+
names:
|
|
204
|
+
- en: "Invalid Mark Brand"
|
|
205
|
+
tagline: "Invalid marks should not promote"
|
|
206
|
+
house_domain: "nova-house.example"
|
|
207
|
+
keller_type: "endorsed"
|
|
208
|
+
trademarks:
|
|
209
|
+
- registry: "USPTO"
|
|
210
|
+
number: "90000005"
|
|
211
|
+
mark: "INVALID MARK BRAND"
|
|
212
|
+
status: "registered"
|
|
213
|
+
countries: ["USA"]
|
|
214
|
+
nice_classes: [99]
|
|
215
|
+
|
|
216
|
+
consumer_test_controller_scenario:
|
|
217
|
+
name: evaluate_distributed_brand_resolution
|
|
218
|
+
request_shape:
|
|
219
|
+
scenario: evaluate_distributed_brand_resolution
|
|
220
|
+
params:
|
|
221
|
+
variant: mutual_assertion | leaf_only | managed_by_only | invalid_trademark
|
|
222
|
+
house_domain: "<runner-supplied house domain>"
|
|
223
|
+
house_brand_json_url: "<runner-supplied URL>"
|
|
224
|
+
leaf_domain: "<runner-supplied leaf domain>"
|
|
225
|
+
leaf_brand_json_url: "<runner-supplied URL>"
|
|
226
|
+
brand_id: "<runner-supplied brand_id>"
|
|
227
|
+
manager_domain: "<runner-supplied manager domain, when variant=managed_by_only>"
|
|
228
|
+
result_endpoint: "https://runner.example/distributed-brand-resolution/result"
|
|
229
|
+
|
|
230
|
+
expected_consumer_behavior:
|
|
231
|
+
- Fetch the leaf Brand Canonical Document.
|
|
232
|
+
- Fetch the named house document when evaluating a schema-valid parent relationship claim.
|
|
233
|
+
- Fetch the house document first when the dispatch variant starts from a house-side `brand_refs[]` claim.
|
|
234
|
+
- Stop before relationship promotion when the leaf document fails brand.json schema validation.
|
|
235
|
+
- Compare `leaf.house_domain` with `house.brand_refs[]` by domain and brand_id.
|
|
236
|
+
- Report leaf identity as trusted whenever the leaf document is schema-valid and TLS-served.
|
|
237
|
+
- Report relationship trust as `mutual` only when both sides reciprocate.
|
|
238
|
+
- Merge governance and compliance fields strictest-of when returning a resolved graph.
|
|
239
|
+
- Treat `managed_by` as directory metadata only.
|
|
240
|
+
- Validate typed `trademarks[]` fields against the 3.1 brand.json schema before promoting them.
|
|
241
|
+
|
|
242
|
+
result_report_contract:
|
|
243
|
+
content_type: "application/json"
|
|
244
|
+
required_fields:
|
|
245
|
+
variant: "mutual_assertion | leaf_only | managed_by_only | invalid_trademark"
|
|
246
|
+
identity:
|
|
247
|
+
trusted: boolean
|
|
248
|
+
source_domain: string
|
|
249
|
+
brand_id: string
|
|
250
|
+
tagline: string
|
|
251
|
+
relationship:
|
|
252
|
+
trust_tier: "mutual | leaf_only | house_only | standalone | invalid"
|
|
253
|
+
trust_extending: boolean
|
|
254
|
+
managed_by_trust_edge: false
|
|
255
|
+
compliance:
|
|
256
|
+
policy_ids: "array of resolved policy_id values after strictest-of merge"
|
|
257
|
+
data_subject_contestation_contacts: "array of { domain, email } contacts retained from both house and leaf when present"
|
|
258
|
+
directory:
|
|
259
|
+
managed_by: "manager domain when present on house brand_refs[]"
|
|
260
|
+
trademark_validation:
|
|
261
|
+
valid_fixture_schema: boolean
|
|
262
|
+
error_paths: "array of field paths when valid_fixture_schema is false"
|
|
263
|
+
trademarks: "array of accepted brand-level trademark records when valid_fixture_schema is true"
|
|
264
|
+
|
|
265
|
+
upstream_traffic_contract:
|
|
266
|
+
required_fetches:
|
|
267
|
+
mutual_assertion:
|
|
268
|
+
- "GET *://nova-house.example/.well-known/brand.json"
|
|
269
|
+
- "GET *://leaf-brand.example/.well-known/brand.json"
|
|
270
|
+
leaf_only:
|
|
271
|
+
- "GET *://nova-house.example/.well-known/brand.json"
|
|
272
|
+
- "GET *://leaf-only-brand.example/.well-known/brand.json"
|
|
273
|
+
managed_by_only:
|
|
274
|
+
- "GET *://nova-house.example/.well-known/brand.json"
|
|
275
|
+
- "GET *://managed-leaf.example/.well-known/brand.json"
|
|
276
|
+
invalid_trademark:
|
|
277
|
+
- "GET *://invalid-mark-brand.example/.well-known/brand.json"
|
|
278
|
+
forbidden_trust_extension_patterns:
|
|
279
|
+
- "POST */governance/auto-provision"
|
|
280
|
+
- "POST */governance/contexts"
|
|
281
|
+
- "POST */billing/seats/auto-add"
|