@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,226 @@
|
|
|
1
|
+
id: brand_rights/governance_denied
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Brand agent rejects rights acquisition when governance denies"
|
|
4
|
+
category: brand_rights
|
|
5
|
+
summary: "Verifies that a brand agent propagates GOVERNANCE_DENIED when the buyer's governance plan denies a rights license."
|
|
6
|
+
track: brand
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_rights
|
|
10
|
+
- acquire_rights
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
Acquiring rights is a spending event. The brand agent must consult the buyer's
|
|
14
|
+
governance agent before issuing a license and deny the acquisition when governance
|
|
15
|
+
returns denied. This keeps licensing authority consistent with media buy spending
|
|
16
|
+
authority — a buyer cannot commit to a generative campaign budget that exceeds the
|
|
17
|
+
plan even when the spending flows to a brand agent instead of a seller.
|
|
18
|
+
|
|
19
|
+
This scenario sets up a strict $50 governance plan, registers governance with the
|
|
20
|
+
brand agent via sync_governance, then attempts to acquire rights whose pricing
|
|
21
|
+
exceeds the plan. The brand agent must return the canonical denial shape — the
|
|
22
|
+
`AcquireRightsRejected` arm of the response (`rights_status: "rejected"` + `reason`)
|
|
23
|
+
— propagating the governance agent's findings in `reason`. Per the wire-placement
|
|
24
|
+
rule on `GOVERNANCE_DENIED`, when a task response defines a structured rejection arm,
|
|
25
|
+
the arm IS the canonical denial shape: sellers do NOT additionally emit
|
|
26
|
+
`GOVERNANCE_DENIED` in `errors[]` or `adcp_error`, and transport-level success
|
|
27
|
+
markers stay flipped to success. The schema enforces this — `AcquireRightsRejected`
|
|
28
|
+
declares `not: { required: [errors] }`, so dual-emission is already a schema violation.
|
|
29
|
+
|
|
30
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
31
|
+
Override by supplying a different `governance_agent_url` in the run's initial context
|
|
32
|
+
(e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
|
|
33
|
+
|
|
34
|
+
context:
|
|
35
|
+
governance_agent_url: "https://test-agent.adcontextprotocol.org"
|
|
36
|
+
|
|
37
|
+
agent:
|
|
38
|
+
interaction_model: brand_rights_holder
|
|
39
|
+
capabilities:
|
|
40
|
+
- rights_licensing
|
|
41
|
+
- governance_aware
|
|
42
|
+
examples:
|
|
43
|
+
- "Any brand rights agent that honors governance before licensing"
|
|
44
|
+
|
|
45
|
+
caller:
|
|
46
|
+
role: buyer_agent
|
|
47
|
+
example: "Pinnacle Agency (buyer)"
|
|
48
|
+
|
|
49
|
+
prerequisites:
|
|
50
|
+
description: |
|
|
51
|
+
A governance agent that supports sync_plans and check_governance, and a brand
|
|
52
|
+
agent that supports sync_governance + acquire_rights.
|
|
53
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
54
|
+
|
|
55
|
+
phases:
|
|
56
|
+
- id: governance_plan_setup
|
|
57
|
+
title: "Set up strict governance plan"
|
|
58
|
+
steps:
|
|
59
|
+
- id: sync_plans
|
|
60
|
+
title: "Create strict governance plan"
|
|
61
|
+
task: sync_plans
|
|
62
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
63
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
64
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
65
|
+
stateful: true
|
|
66
|
+
expected: |
|
|
67
|
+
The governance agent acknowledges the plan.
|
|
68
|
+
sample_request:
|
|
69
|
+
plans:
|
|
70
|
+
- plan_id: "comply-rights-gov-denied"
|
|
71
|
+
brand:
|
|
72
|
+
domain: "acmeoutdoor.example"
|
|
73
|
+
objectives: "Restricted plan — rights licensing test"
|
|
74
|
+
budget:
|
|
75
|
+
total: 50
|
|
76
|
+
currency: "USD"
|
|
77
|
+
reallocation_threshold: 25
|
|
78
|
+
flight:
|
|
79
|
+
start: "2026-04-01T00:00:00Z"
|
|
80
|
+
end: "2026-06-30T23:59:59Z"
|
|
81
|
+
countries: ["US"]
|
|
82
|
+
idempotency_key: "$generate:uuid_v4#brand_rights_governance_denied_governance_plan_setup_sync_plans"
|
|
83
|
+
validations:
|
|
84
|
+
- check: response_schema
|
|
85
|
+
description: "Response matches sync-plans-response.json schema"
|
|
86
|
+
|
|
87
|
+
- id: brand_agent_setup
|
|
88
|
+
title: "Register account and governance with the brand agent"
|
|
89
|
+
steps:
|
|
90
|
+
- id: sync_accounts
|
|
91
|
+
title: "Establish account with brand agent"
|
|
92
|
+
task: sync_accounts
|
|
93
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
94
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
95
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
96
|
+
stateful: true
|
|
97
|
+
expected: |
|
|
98
|
+
Brand agent returns the account with account_id active.
|
|
99
|
+
sample_request:
|
|
100
|
+
accounts:
|
|
101
|
+
- brand:
|
|
102
|
+
domain: "acmeoutdoor.example"
|
|
103
|
+
operator: "pinnacle-agency.example"
|
|
104
|
+
billing: "operator"
|
|
105
|
+
payment_terms: "net_30"
|
|
106
|
+
idempotency_key: "$generate:uuid_v4#brand_rights_governance_denied_brand_agent_setup_sync_accounts"
|
|
107
|
+
validations:
|
|
108
|
+
- check: response_schema
|
|
109
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
110
|
+
- check: field_present
|
|
111
|
+
path: "accounts[0].account_id"
|
|
112
|
+
description: "Account has a platform-assigned ID"
|
|
113
|
+
|
|
114
|
+
- id: sync_governance
|
|
115
|
+
title: "Register governance agent with brand agent"
|
|
116
|
+
task: sync_governance
|
|
117
|
+
schema_ref: "account/sync-governance-request.json"
|
|
118
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
119
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
120
|
+
stateful: true
|
|
121
|
+
expected: |
|
|
122
|
+
Brand agent acknowledges governance registration.
|
|
123
|
+
sample_request:
|
|
124
|
+
accounts:
|
|
125
|
+
- account:
|
|
126
|
+
brand:
|
|
127
|
+
domain: "acmeoutdoor.example"
|
|
128
|
+
operator: "pinnacle-agency.example"
|
|
129
|
+
governance_agents:
|
|
130
|
+
- url: "$context.governance_agent_url"
|
|
131
|
+
authentication:
|
|
132
|
+
schemes: ["Bearer"]
|
|
133
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
134
|
+
idempotency_key: "$generate:uuid_v4#brand_rights_governance_denied_brand_agent_setup_sync_governance"
|
|
135
|
+
validations:
|
|
136
|
+
- check: response_schema
|
|
137
|
+
description: "Response matches sync-governance-response.json schema"
|
|
138
|
+
|
|
139
|
+
- id: rights_denied
|
|
140
|
+
title: "Attempt rights acquisition — governance denies"
|
|
141
|
+
steps:
|
|
142
|
+
- id: get_rights_catalog
|
|
143
|
+
title: "Discover rights to license"
|
|
144
|
+
task: get_rights
|
|
145
|
+
schema_ref: "brand/get-rights-request.json"
|
|
146
|
+
response_schema_ref: "brand/get-rights-response.json"
|
|
147
|
+
doc_ref: "/brand-protocol/tasks/get_rights"
|
|
148
|
+
stateful: false
|
|
149
|
+
expected: |
|
|
150
|
+
Return rights available for licensing, each with pricing_options.
|
|
151
|
+
sample_request:
|
|
152
|
+
buyer:
|
|
153
|
+
domain: "pinnacle-agency.example"
|
|
154
|
+
query: "licensed commercial rights for a regional outdoor retail campaign"
|
|
155
|
+
uses:
|
|
156
|
+
- "commercial"
|
|
157
|
+
- "endorsement"
|
|
158
|
+
context_outputs:
|
|
159
|
+
- path: "rights[0].rights_id"
|
|
160
|
+
key: "rights_id"
|
|
161
|
+
- path: "rights[0].pricing_options[0].pricing_option_id"
|
|
162
|
+
key: "pricing_option_id"
|
|
163
|
+
validations:
|
|
164
|
+
- check: response_schema
|
|
165
|
+
description: "Response matches get-rights-response.json schema"
|
|
166
|
+
|
|
167
|
+
- id: acquire_rights_denied
|
|
168
|
+
title: "acquire_rights — governance denies via rejection arm"
|
|
169
|
+
task: acquire_rights
|
|
170
|
+
schema_ref: "brand/acquire-rights-request.json"
|
|
171
|
+
response_schema_ref: "brand/acquire-rights-response.json"
|
|
172
|
+
doc_ref: "/brand-protocol/tasks/acquire_rights"
|
|
173
|
+
expected_arm: "rejected"
|
|
174
|
+
stateful: true
|
|
175
|
+
expected: |
|
|
176
|
+
Brand agent returns the canonical denial shape for a task with a structured rejection arm:
|
|
177
|
+
AcquireRightsRejected (`rights_status: "rejected"` + `reason`, with `suggestions` optional). Per the
|
|
178
|
+
wire-placement rule on `GOVERNANCE_DENIED`, the spec-correct denial response carries no error
|
|
179
|
+
code on the wire — the rejection arm enforces `not: { required: [errors] }` at the schema layer,
|
|
180
|
+
so emitting `errors[]` alongside the rejection arm is already a schema violation. Transport-level
|
|
181
|
+
success markers MUST NOT be flipped (HTTP 200, MCP `isError: false`, A2A `succeeded`) — the task
|
|
182
|
+
ran successfully and produced a structured response.
|
|
183
|
+
|
|
184
|
+
sample_request:
|
|
185
|
+
account:
|
|
186
|
+
brand:
|
|
187
|
+
domain: "acmeoutdoor.example"
|
|
188
|
+
operator: "pinnacle-agency.example"
|
|
189
|
+
rights_id: "$context.rights_id"
|
|
190
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
191
|
+
buyer:
|
|
192
|
+
domain: "pinnacle-agency.example"
|
|
193
|
+
campaign:
|
|
194
|
+
description: "Governance-denied rights acquisition probe"
|
|
195
|
+
uses:
|
|
196
|
+
- "likeness"
|
|
197
|
+
- "commercial"
|
|
198
|
+
start_date: "2026-04-01"
|
|
199
|
+
end_date: "2026-06-30"
|
|
200
|
+
revocation_webhook:
|
|
201
|
+
url: "https://pinnacle-agency.example/webhooks/revocation"
|
|
202
|
+
authentication:
|
|
203
|
+
schemes:
|
|
204
|
+
- "Bearer"
|
|
205
|
+
credentials: "pinnacle-revocation-webhook-secret-token"
|
|
206
|
+
idempotency_key: "$generate:uuid_v4#brand_rights_governance_denied_acquire_rights_denied"
|
|
207
|
+
|
|
208
|
+
context:
|
|
209
|
+
correlation_id: "brand_rights--governance_denied--acquire"
|
|
210
|
+
validations:
|
|
211
|
+
- check: response_schema
|
|
212
|
+
description: "Response matches acquire-rights-response.json (rejection arm validates against AcquireRightsRejected; the schema's `not: { required: [errors] }` rule rejects dual-emission)"
|
|
213
|
+
- check: field_value
|
|
214
|
+
path: "rights_status"
|
|
215
|
+
value: "rejected"
|
|
216
|
+
description: "Discriminator on the rejection arm — rights_status must be 'rejected'"
|
|
217
|
+
- check: field_present
|
|
218
|
+
path: "reason"
|
|
219
|
+
description: "Rejection arm carries the operator-readable reason (governance findings propagated verbatim per wire-placement guidance)"
|
|
220
|
+
- check: field_present
|
|
221
|
+
path: "context"
|
|
222
|
+
description: "Response echoes back the context object on the rejection arm"
|
|
223
|
+
- check: field_value
|
|
224
|
+
path: "context.correlation_id"
|
|
225
|
+
value: "brand_rights--governance_denied--acquire"
|
|
226
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
id: collection_lists
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Collection lists"
|
|
4
|
+
protocol: governance
|
|
5
|
+
category: collection_lists
|
|
6
|
+
summary: "Curated collection lists for program-level brand safety and content targeting — create, query, update, and delete lists of content programs (shows, series, podcasts)."
|
|
7
|
+
track: governance
|
|
8
|
+
required_tools:
|
|
9
|
+
- create_collection_list
|
|
10
|
+
|
|
11
|
+
# Cross-step assertion (adcp#2664). status.monotonic rejects resource
|
|
12
|
+
# status transitions observed across steps that aren't on the spec
|
|
13
|
+
# lifecycle graph. Silent on collection-list-only runs (no tracked
|
|
14
|
+
# lifecycle resource), but wired so phases that touch media_buy /
|
|
15
|
+
# account status are automatically gated.
|
|
16
|
+
invariants:
|
|
17
|
+
- status.monotonic
|
|
18
|
+
|
|
19
|
+
narrative: |
|
|
20
|
+
You run a governance agent that manages collection lists for brand safety. Unlike
|
|
21
|
+
property lists which operate on technical surfaces (domains, apps), collection lists
|
|
22
|
+
operate on content programs (shows, series, podcasts) identified by platform-independent
|
|
23
|
+
IDs like IMDb, Gracenote, or EIDR.
|
|
24
|
+
|
|
25
|
+
Buyers create inclusion and exclusion lists that define which programs their ads can
|
|
26
|
+
and cannot appear against. Your agent resolves the base collections and filters into a
|
|
27
|
+
concrete list of program identifiers that sellers can cache and enforce at bid time.
|
|
28
|
+
|
|
29
|
+
Collection lists are setup-time resources: the governance agent resolves them once and
|
|
30
|
+
sellers cache the result. Unlike property lists, there is no post-delivery validation
|
|
31
|
+
task yet — enforcement happens at serve time via the cached list, not via after-the-fact
|
|
32
|
+
compliance checks. This storyboard therefore exercises the full CRUD lifecycle (create,
|
|
33
|
+
query, update, delete) but does not test delivery validation.
|
|
34
|
+
|
|
35
|
+
agent:
|
|
36
|
+
interaction_model: governance_agent
|
|
37
|
+
capabilities:
|
|
38
|
+
- collection_lists
|
|
39
|
+
- brand_safety
|
|
40
|
+
examples:
|
|
41
|
+
- "IAS"
|
|
42
|
+
- "DoubleVerify"
|
|
43
|
+
- "GARM-aligned platforms"
|
|
44
|
+
- "Brand safety services"
|
|
45
|
+
|
|
46
|
+
caller:
|
|
47
|
+
role: buyer_agent
|
|
48
|
+
example: "Nova Motors (buyer)"
|
|
49
|
+
|
|
50
|
+
prerequisites:
|
|
51
|
+
description: |
|
|
52
|
+
The caller needs a brand identity and content-program knowledge (distribution IDs,
|
|
53
|
+
publisher identifiers, or genre taxonomies). The test kit provides a sample brand
|
|
54
|
+
with campaign context.
|
|
55
|
+
test_kit: "test-kits/nova-motors.yaml"
|
|
56
|
+
|
|
57
|
+
phases:
|
|
58
|
+
- id: capability_discovery
|
|
59
|
+
title: "Capability discovery"
|
|
60
|
+
narrative: |
|
|
61
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports governance
|
|
62
|
+
before creating or fetching collection lists.
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- id: get_capabilities
|
|
66
|
+
title: "Check agent capabilities"
|
|
67
|
+
narrative: |
|
|
68
|
+
Verify that the agent declares the expected protocol support before
|
|
69
|
+
proceeding with domain-specific operations.
|
|
70
|
+
task: get_adcp_capabilities
|
|
71
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
72
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
73
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
74
|
+
comply_scenario: capability_discovery
|
|
75
|
+
stateful: false
|
|
76
|
+
expected: |
|
|
77
|
+
Return capabilities declaring governance in supported_protocols, confirming
|
|
78
|
+
the agent provides governance services.
|
|
79
|
+
sample_request:
|
|
80
|
+
context:
|
|
81
|
+
correlation_id: "collection_lists--get_capabilities"
|
|
82
|
+
validations:
|
|
83
|
+
- check: response_schema
|
|
84
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
85
|
+
- check: field_present
|
|
86
|
+
path: "supported_protocols"
|
|
87
|
+
description: "Agent declares supported protocols"
|
|
88
|
+
- check: field_present
|
|
89
|
+
path: "context"
|
|
90
|
+
description: "Response echoes back the context object"
|
|
91
|
+
- check: field_value
|
|
92
|
+
path: "context.correlation_id"
|
|
93
|
+
value: "collection_lists--get_capabilities"
|
|
94
|
+
description: "Context correlation_id returned unchanged"
|
|
95
|
+
|
|
96
|
+
- id: create_list
|
|
97
|
+
title: "Create collection lists"
|
|
98
|
+
narrative: |
|
|
99
|
+
The buyer creates an inclusion collection list for the campaign. The list defines
|
|
100
|
+
which content programs the brand is willing to advertise against, selected by
|
|
101
|
+
platform-independent distribution identifiers.
|
|
102
|
+
|
|
103
|
+
steps:
|
|
104
|
+
- id: create_inclusion_list
|
|
105
|
+
title: "Create an inclusion collection list"
|
|
106
|
+
narrative: |
|
|
107
|
+
The buyer creates an inclusion list of programs the brand considers safe to
|
|
108
|
+
advertise against, referenced by distribution IDs (e.g. IMDb) so the selection
|
|
109
|
+
is portable across publishers.
|
|
110
|
+
task: create_collection_list
|
|
111
|
+
schema_ref: "collection/create-collection-list-request.json"
|
|
112
|
+
response_schema_ref: "collection/create-collection-list-response.json"
|
|
113
|
+
doc_ref: "/governance/collection/tasks/collection_lists"
|
|
114
|
+
comply_scenario: governance_collection_lists
|
|
115
|
+
stateful: true
|
|
116
|
+
expected: |
|
|
117
|
+
Return the created collection list:
|
|
118
|
+
- list_id: platform-assigned identifier
|
|
119
|
+
- collection_count reflecting the resolved programs
|
|
120
|
+
- auth_token issued for sellers to fetch the list
|
|
121
|
+
- Timestamps populated
|
|
122
|
+
|
|
123
|
+
sample_request:
|
|
124
|
+
account:
|
|
125
|
+
brand:
|
|
126
|
+
domain: "novamotors.example"
|
|
127
|
+
operator: "pinnacle-agency.example"
|
|
128
|
+
brand:
|
|
129
|
+
domain: "novamotors.example"
|
|
130
|
+
name: "Nova Motors approved programs"
|
|
131
|
+
base_collections:
|
|
132
|
+
- selection_type: "distribution_ids"
|
|
133
|
+
identifiers:
|
|
134
|
+
- type: "imdb_id"
|
|
135
|
+
value: "tt9999901"
|
|
136
|
+
- type: "imdb_id"
|
|
137
|
+
value: "tt9999902"
|
|
138
|
+
- type: "imdb_id"
|
|
139
|
+
value: "tt9999903"
|
|
140
|
+
filters:
|
|
141
|
+
kinds: ["series"]
|
|
142
|
+
|
|
143
|
+
idempotency_key: "$generate:uuid_v4#collection_lists_create_list_create_inclusion_list"
|
|
144
|
+
context:
|
|
145
|
+
correlation_id: "collection_lists--create_inclusion_list"
|
|
146
|
+
context_outputs:
|
|
147
|
+
- path: "list.list_id"
|
|
148
|
+
key: "collection_list_id"
|
|
149
|
+
|
|
150
|
+
validations:
|
|
151
|
+
- check: response_schema
|
|
152
|
+
description: "Response matches create-collection-list-response.json schema"
|
|
153
|
+
- check: field_present
|
|
154
|
+
path: "list.list_id"
|
|
155
|
+
description: "Governance agent assigns list_id — must be echoed in get/update/delete"
|
|
156
|
+
- check: field_present
|
|
157
|
+
path: "auth_token"
|
|
158
|
+
description: "Agent issues an auth_token at creation time for seller fetches"
|
|
159
|
+
- check: field_present
|
|
160
|
+
path: "context"
|
|
161
|
+
description: "Response echoes back the context object"
|
|
162
|
+
- check: field_value
|
|
163
|
+
path: "context.correlation_id"
|
|
164
|
+
value: "collection_lists--create_inclusion_list"
|
|
165
|
+
description: "Context correlation_id returned unchanged"
|
|
166
|
+
|
|
167
|
+
- id: list_and_get
|
|
168
|
+
title: "Query collection lists"
|
|
169
|
+
narrative: |
|
|
170
|
+
The buyer lists all collection lists for the brand and retrieves a specific list
|
|
171
|
+
with resolved collections.
|
|
172
|
+
|
|
173
|
+
steps:
|
|
174
|
+
- id: list_collection_lists
|
|
175
|
+
title: "List all collection lists"
|
|
176
|
+
narrative: |
|
|
177
|
+
The buyer lists all collection lists for the brand. The response includes
|
|
178
|
+
list metadata without full resolved collection details.
|
|
179
|
+
task: list_collection_lists
|
|
180
|
+
schema_ref: "collection/list-collection-lists-request.json"
|
|
181
|
+
response_schema_ref: "collection/list-collection-lists-response.json"
|
|
182
|
+
doc_ref: "/governance/collection/tasks/collection_lists"
|
|
183
|
+
comply_scenario: governance_collection_lists
|
|
184
|
+
stateful: true
|
|
185
|
+
expected: |
|
|
186
|
+
Return collection list summaries:
|
|
187
|
+
- Array of lists with list_id, name, collection_count
|
|
188
|
+
- Includes the list created in the prior phase
|
|
189
|
+
|
|
190
|
+
sample_request:
|
|
191
|
+
account:
|
|
192
|
+
brand:
|
|
193
|
+
domain: "novamotors.example"
|
|
194
|
+
operator: "pinnacle-agency.example"
|
|
195
|
+
name_contains: "Nova Motors"
|
|
196
|
+
|
|
197
|
+
context:
|
|
198
|
+
correlation_id: "collection_lists--list_collection_lists"
|
|
199
|
+
validations:
|
|
200
|
+
- check: response_schema
|
|
201
|
+
description: "Response matches list-collection-lists-response.json schema"
|
|
202
|
+
- check: field_present
|
|
203
|
+
path: "context"
|
|
204
|
+
description: "Response echoes back the context object"
|
|
205
|
+
- check: field_value
|
|
206
|
+
path: "context.correlation_id"
|
|
207
|
+
value: "collection_lists--list_collection_lists"
|
|
208
|
+
description: "Context correlation_id returned unchanged"
|
|
209
|
+
|
|
210
|
+
- id: get_collection_list
|
|
211
|
+
title: "Get a specific collection list with resolved collections"
|
|
212
|
+
narrative: |
|
|
213
|
+
The buyer retrieves a specific collection list with resolve:true to confirm
|
|
214
|
+
the agent can materialize the programs the list references.
|
|
215
|
+
task: get_collection_list
|
|
216
|
+
schema_ref: "collection/get-collection-list-request.json"
|
|
217
|
+
response_schema_ref: "collection/get-collection-list-response.json"
|
|
218
|
+
doc_ref: "/governance/collection/tasks/collection_lists"
|
|
219
|
+
comply_scenario: governance_collection_lists
|
|
220
|
+
stateful: true
|
|
221
|
+
expected: |
|
|
222
|
+
Return the full collection list:
|
|
223
|
+
- list_id, name, collection_count
|
|
224
|
+
- Resolved collections with distribution_ids, content_rating, genre
|
|
225
|
+
- cache_valid_until timestamp for seller caching
|
|
226
|
+
|
|
227
|
+
sample_request:
|
|
228
|
+
list_id: "$context.collection_list_id"
|
|
229
|
+
resolve: true
|
|
230
|
+
account:
|
|
231
|
+
brand:
|
|
232
|
+
domain: "novamotors.example"
|
|
233
|
+
operator: "pinnacle-agency.example"
|
|
234
|
+
|
|
235
|
+
context:
|
|
236
|
+
correlation_id: "collection_lists--get_collection_list"
|
|
237
|
+
validations:
|
|
238
|
+
- check: response_schema
|
|
239
|
+
description: "Response matches get-collection-list-response.json schema"
|
|
240
|
+
- check: field_present
|
|
241
|
+
path: "list.list_id"
|
|
242
|
+
description: "List id returned"
|
|
243
|
+
- check: field_present
|
|
244
|
+
path: "collections"
|
|
245
|
+
description: "Resolved collections returned when resolve:true"
|
|
246
|
+
- check: field_present
|
|
247
|
+
path: "context"
|
|
248
|
+
description: "Response echoes back the context object"
|
|
249
|
+
- check: field_value
|
|
250
|
+
path: "context.correlation_id"
|
|
251
|
+
value: "collection_lists--get_collection_list"
|
|
252
|
+
description: "Context correlation_id returned unchanged"
|
|
253
|
+
|
|
254
|
+
- id: update_list
|
|
255
|
+
title: "Update collection lists"
|
|
256
|
+
narrative: |
|
|
257
|
+
The buyer modifies an existing collection list — replacing the base collections
|
|
258
|
+
as the campaign's content preferences evolve.
|
|
259
|
+
|
|
260
|
+
steps:
|
|
261
|
+
- id: update_collection_list
|
|
262
|
+
title: "Update a collection list"
|
|
263
|
+
narrative: |
|
|
264
|
+
The buyer replaces the base collections on an existing list with a new set
|
|
265
|
+
of distribution identifiers.
|
|
266
|
+
task: update_collection_list
|
|
267
|
+
schema_ref: "collection/update-collection-list-request.json"
|
|
268
|
+
response_schema_ref: "collection/update-collection-list-response.json"
|
|
269
|
+
doc_ref: "/governance/collection/tasks/collection_lists"
|
|
270
|
+
comply_scenario: governance_collection_lists
|
|
271
|
+
stateful: true
|
|
272
|
+
expected: |
|
|
273
|
+
Return the updated collection list:
|
|
274
|
+
- Same list_id
|
|
275
|
+
- Updated collection_count reflecting the replaced base collections
|
|
276
|
+
- Updated updated_at timestamp
|
|
277
|
+
|
|
278
|
+
sample_request:
|
|
279
|
+
list_id: "$context.collection_list_id"
|
|
280
|
+
account:
|
|
281
|
+
brand:
|
|
282
|
+
domain: "novamotors.example"
|
|
283
|
+
operator: "pinnacle-agency.example"
|
|
284
|
+
base_collections:
|
|
285
|
+
- selection_type: "distribution_ids"
|
|
286
|
+
identifiers:
|
|
287
|
+
- type: "imdb_id"
|
|
288
|
+
value: "tt9999901"
|
|
289
|
+
- type: "imdb_id"
|
|
290
|
+
value: "tt9999904"
|
|
291
|
+
- type: "imdb_id"
|
|
292
|
+
value: "tt9999905"
|
|
293
|
+
- type: "imdb_id"
|
|
294
|
+
value: "tt9999906"
|
|
295
|
+
|
|
296
|
+
idempotency_key: "$generate:uuid_v4#collection_lists_update_list_update_collection_list"
|
|
297
|
+
context:
|
|
298
|
+
correlation_id: "collection_lists--update_collection_list"
|
|
299
|
+
validations:
|
|
300
|
+
- check: response_schema
|
|
301
|
+
description: "Response matches update-collection-list-response.json schema"
|
|
302
|
+
- check: field_present
|
|
303
|
+
path: "list.list_id"
|
|
304
|
+
description: "Updated list retains its list_id"
|
|
305
|
+
- check: field_present
|
|
306
|
+
path: "context"
|
|
307
|
+
description: "Response echoes back the context object"
|
|
308
|
+
- check: field_value
|
|
309
|
+
path: "context.correlation_id"
|
|
310
|
+
value: "collection_lists--update_collection_list"
|
|
311
|
+
description: "Context correlation_id returned unchanged"
|
|
312
|
+
|
|
313
|
+
- id: delete_list
|
|
314
|
+
title: "Delete a collection list"
|
|
315
|
+
narrative: |
|
|
316
|
+
The buyer removes a collection list that is no longer needed. Deleting a list
|
|
317
|
+
revokes the associated auth_token.
|
|
318
|
+
|
|
319
|
+
steps:
|
|
320
|
+
- id: delete_collection_list
|
|
321
|
+
title: "Delete a collection list"
|
|
322
|
+
narrative: |
|
|
323
|
+
The buyer deletes a collection list. The governance agent removes the list
|
|
324
|
+
and returns confirmation.
|
|
325
|
+
task: delete_collection_list
|
|
326
|
+
schema_ref: "collection/delete-collection-list-request.json"
|
|
327
|
+
response_schema_ref: "collection/delete-collection-list-response.json"
|
|
328
|
+
doc_ref: "/governance/collection/tasks/collection_lists"
|
|
329
|
+
comply_scenario: governance_collection_lists
|
|
330
|
+
stateful: true
|
|
331
|
+
expected: |
|
|
332
|
+
Confirm deletion:
|
|
333
|
+
- deleted: true
|
|
334
|
+
- list_id: the deleted list
|
|
335
|
+
|
|
336
|
+
sample_request:
|
|
337
|
+
list_id: "$context.collection_list_id"
|
|
338
|
+
account:
|
|
339
|
+
brand:
|
|
340
|
+
domain: "novamotors.example"
|
|
341
|
+
operator: "pinnacle-agency.example"
|
|
342
|
+
|
|
343
|
+
idempotency_key: "$generate:uuid_v4#collection_lists_delete_list_delete_collection_list"
|
|
344
|
+
context:
|
|
345
|
+
correlation_id: "collection_lists--delete_collection_list"
|
|
346
|
+
validations:
|
|
347
|
+
- check: response_schema
|
|
348
|
+
description: "Response matches delete-collection-list-response.json schema"
|
|
349
|
+
- check: field_value
|
|
350
|
+
path: "deleted"
|
|
351
|
+
value: true
|
|
352
|
+
description: "Delete returns deleted: true"
|
|
353
|
+
- check: field_present
|
|
354
|
+
path: "context"
|
|
355
|
+
description: "Response echoes back the context object"
|
|
356
|
+
- check: field_value
|
|
357
|
+
path: "context.correlation_id"
|
|
358
|
+
value: "collection_lists--delete_collection_list"
|
|
359
|
+
description: "Context correlation_id returned unchanged"
|