@adcp/sdk 7.10.2 → 7.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/index.json +356 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
- package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
- package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
- package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
- package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
- package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
- package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
- package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
- package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
- package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
- package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
- package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +9 -5
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +30 -1
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +84 -21
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +21 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/types.d.ts +9 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +6707 -12040
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +1 -1
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/utils/signal-id-builders.d.ts +19 -0
- package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
- package/dist/lib/utils/signal-id-builders.js +30 -0
- package/dist/lib/utils/signal-id-builders.js.map +1 -1
- package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
- package/dist/lib/utils/tool-request-schemas.js +3 -0
- package/dist/lib/utils/tool-request-schemas.js.map +1 -1
- package/dist/lib/v2/projection/constants.d.ts +28 -0
- package/dist/lib/v2/projection/constants.d.ts.map +1 -0
- package/dist/lib/v2/projection/constants.js +31 -0
- package/dist/lib/v2/projection/constants.js.map +1 -0
- package/dist/lib/v2/projection/registry.d.ts.map +1 -1
- package/dist/lib/v2/projection/registry.js +9 -4
- package/dist/lib/v2/projection/registry.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/package.json +1 -1
- package/skills/SHAPE-GOTCHAS.md +5 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
id: media_buy_seller/governance_conditions
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller attaches conditions when governance approves with conditions"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that the seller attaches governance conditions to the buy when governance approves with conditions."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
This is a multi-agent test. The test harness sets up a governance plan on a governance
|
|
14
|
+
agent with custom policies that trigger conditions (e.g., "CTV buys require weekly
|
|
15
|
+
delivery reporting"). The buyer creates a CTV buy within budget but matching a policy.
|
|
16
|
+
|
|
17
|
+
When the seller calls check_governance, the governance agent approves with conditions.
|
|
18
|
+
The seller must create the buy and include the governance conditions and context token
|
|
19
|
+
in its response.
|
|
20
|
+
|
|
21
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
22
|
+
Override by supplying a different `governance_agent_url` in the run's initial context
|
|
23
|
+
(e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
|
|
24
|
+
|
|
25
|
+
context:
|
|
26
|
+
governance_agent_url: "https://test-agent.adcontextprotocol.org"
|
|
27
|
+
|
|
28
|
+
agent:
|
|
29
|
+
interaction_model: media_buy_seller
|
|
30
|
+
capabilities:
|
|
31
|
+
- sells_media
|
|
32
|
+
- governance_aware
|
|
33
|
+
examples:
|
|
34
|
+
- "Any media buy seller with governance support"
|
|
35
|
+
|
|
36
|
+
caller:
|
|
37
|
+
role: buyer_agent
|
|
38
|
+
example: "Pinnacle Agency (buyer)"
|
|
39
|
+
|
|
40
|
+
prerequisites:
|
|
41
|
+
description: |
|
|
42
|
+
A governance agent that supports sync_plans and check_governance.
|
|
43
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
44
|
+
|
|
45
|
+
phases:
|
|
46
|
+
- id: governance_plan_setup
|
|
47
|
+
title: "Set up conditional governance plan"
|
|
48
|
+
narrative: |
|
|
49
|
+
Create a governance plan on the governance agent with custom policies that
|
|
50
|
+
trigger conditions. The plan has sufficient budget but policies that require
|
|
51
|
+
conditions on CTV buys.
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- id: sync_plans
|
|
55
|
+
title: "Create conditional governance plan"
|
|
56
|
+
task: sync_plans
|
|
57
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
58
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
59
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
60
|
+
stateful: true
|
|
61
|
+
expected: |
|
|
62
|
+
The governance agent acknowledges the plan with a plan_id.
|
|
63
|
+
sample_request:
|
|
64
|
+
idempotency_key: "$generate:uuid_v4#governance_conditions_sync_plans"
|
|
65
|
+
plans:
|
|
66
|
+
- plan_id: "comply-gov-conditions-plan"
|
|
67
|
+
brand:
|
|
68
|
+
domain: "acmeoutdoor.example"
|
|
69
|
+
objectives: "Q2 CTV campaign with reporting requirements"
|
|
70
|
+
budget:
|
|
71
|
+
total: 100000
|
|
72
|
+
currency: "USD"
|
|
73
|
+
reallocation_threshold: 100000
|
|
74
|
+
flight:
|
|
75
|
+
start: "2026-04-01T00:00:00Z"
|
|
76
|
+
end: "2026-06-30T23:59:59Z"
|
|
77
|
+
countries: ["US", "CA"]
|
|
78
|
+
custom_policies:
|
|
79
|
+
- policy_id: "ctv_weekly_reporting"
|
|
80
|
+
enforcement: "must"
|
|
81
|
+
policy: "CTV buys require weekly delivery reporting."
|
|
82
|
+
- policy_id: "ugc_brand_safety"
|
|
83
|
+
enforcement: "must"
|
|
84
|
+
policy: "UGC placements require brand safety review before activation."
|
|
85
|
+
validations:
|
|
86
|
+
- check: response_schema
|
|
87
|
+
description: "Response matches sync-plans-response.json schema"
|
|
88
|
+
|
|
89
|
+
- id: seller_setup
|
|
90
|
+
title: "Account and governance registration on seller"
|
|
91
|
+
steps:
|
|
92
|
+
- id: sync_accounts
|
|
93
|
+
title: "Establish account with seller"
|
|
94
|
+
task: sync_accounts
|
|
95
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
96
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
97
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
98
|
+
stateful: true
|
|
99
|
+
expected: |
|
|
100
|
+
Return the account with account_id and status active.
|
|
101
|
+
sample_request:
|
|
102
|
+
accounts:
|
|
103
|
+
- brand:
|
|
104
|
+
domain: "acmeoutdoor.example"
|
|
105
|
+
operator: "pinnacle-agency.example"
|
|
106
|
+
billing: "operator"
|
|
107
|
+
payment_terms: "net_30"
|
|
108
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_accounts"
|
|
109
|
+
validations:
|
|
110
|
+
- check: response_schema
|
|
111
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
112
|
+
- check: field_present
|
|
113
|
+
path: "accounts[0].account_id"
|
|
114
|
+
description: "Account has a platform-assigned ID"
|
|
115
|
+
|
|
116
|
+
- id: sync_governance
|
|
117
|
+
title: "Register governance agent with seller"
|
|
118
|
+
task: sync_governance
|
|
119
|
+
schema_ref: "account/sync-governance-request.json"
|
|
120
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
121
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
122
|
+
stateful: true
|
|
123
|
+
expected: |
|
|
124
|
+
Acknowledge the governance agent registration.
|
|
125
|
+
sample_request:
|
|
126
|
+
accounts:
|
|
127
|
+
- account:
|
|
128
|
+
brand:
|
|
129
|
+
domain: "acmeoutdoor.example"
|
|
130
|
+
operator: "pinnacle-agency.example"
|
|
131
|
+
governance_agents:
|
|
132
|
+
- url: "$context.governance_agent_url"
|
|
133
|
+
authentication:
|
|
134
|
+
schemes: ["Bearer"]
|
|
135
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
136
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_governance"
|
|
137
|
+
validations:
|
|
138
|
+
- check: response_schema
|
|
139
|
+
description: "Response matches sync-governance-response.json schema"
|
|
140
|
+
|
|
141
|
+
- id: buy_with_conditions
|
|
142
|
+
title: "Create CTV buy triggering governance conditions"
|
|
143
|
+
steps:
|
|
144
|
+
- id: get_products_brief
|
|
145
|
+
title: "Discover CTV products"
|
|
146
|
+
task: get_products
|
|
147
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
148
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
149
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
150
|
+
comply_scenario: full_sales_flow
|
|
151
|
+
stateful: false
|
|
152
|
+
expected: |
|
|
153
|
+
Return CTV/video products matching the brief.
|
|
154
|
+
sample_request:
|
|
155
|
+
buying_mode: "brief"
|
|
156
|
+
brief: "CTV and connected TV inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
|
|
157
|
+
account:
|
|
158
|
+
brand:
|
|
159
|
+
domain: "acmeoutdoor.example"
|
|
160
|
+
operator: "pinnacle-agency.example"
|
|
161
|
+
validations:
|
|
162
|
+
- check: response_schema
|
|
163
|
+
description: "Response matches get-products-response.json schema"
|
|
164
|
+
- check: field_present
|
|
165
|
+
path: "products"
|
|
166
|
+
description: "Response contains products"
|
|
167
|
+
|
|
168
|
+
- id: create_media_buy_conditions
|
|
169
|
+
title: "Create CTV buy (governance approves with conditions)"
|
|
170
|
+
task: create_media_buy
|
|
171
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
172
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
173
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
174
|
+
comply_scenario: create_media_buy
|
|
175
|
+
stateful: true
|
|
176
|
+
expected: |
|
|
177
|
+
The buy succeeds with governance conditions attached:
|
|
178
|
+
- media_buy_id: present
|
|
179
|
+
- media_buy_status: active, pending_start, or pending_creatives (deprecated top-level status may mirror this during the 3.1 migration window)
|
|
180
|
+
- governance_context: token from the governance agent
|
|
181
|
+
- conditions visible to the buyer
|
|
182
|
+
sample_request:
|
|
183
|
+
brand:
|
|
184
|
+
domain: "acmeoutdoor.example"
|
|
185
|
+
account:
|
|
186
|
+
brand:
|
|
187
|
+
domain: "acmeoutdoor.example"
|
|
188
|
+
operator: "pinnacle-agency.example"
|
|
189
|
+
sandbox: true
|
|
190
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
191
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
192
|
+
packages:
|
|
193
|
+
- product_id: "outdoor_ctv_q2"
|
|
194
|
+
budget: 25000
|
|
195
|
+
pricing_option_id: "cpm_standard"
|
|
196
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_buy_with_conditions_create_media_buy_conditions"
|
|
197
|
+
validations:
|
|
198
|
+
- check: response_schema
|
|
199
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
id: media_buy_seller/governance_denied
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller rejects buy when governance denies"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that the seller rejects a media buy and propagates the denial when governance denies the transaction."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
This is a multi-agent test. The test harness sets up a governance plan on a governance
|
|
14
|
+
agent with a strict $10K budget, then registers that agent with the seller. The buyer
|
|
15
|
+
attempts a $50K media buy which exceeds the plan's budget.
|
|
16
|
+
|
|
17
|
+
When the seller calls check_governance, the governance agent denies because the
|
|
18
|
+
requested budget exceeds the plan total. The seller must reject the buy and propagate
|
|
19
|
+
the denial back to the buyer.
|
|
20
|
+
|
|
21
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
22
|
+
Override by supplying a different `governance_agent_url` in the run's initial context
|
|
23
|
+
(e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
|
|
24
|
+
|
|
25
|
+
context:
|
|
26
|
+
governance_agent_url: "https://test-agent.adcontextprotocol.org"
|
|
27
|
+
|
|
28
|
+
agent:
|
|
29
|
+
interaction_model: media_buy_seller
|
|
30
|
+
capabilities:
|
|
31
|
+
- sells_media
|
|
32
|
+
- governance_aware
|
|
33
|
+
examples:
|
|
34
|
+
- "Any media buy seller with governance support"
|
|
35
|
+
|
|
36
|
+
caller:
|
|
37
|
+
role: buyer_agent
|
|
38
|
+
example: "Pinnacle Agency (buyer)"
|
|
39
|
+
|
|
40
|
+
prerequisites:
|
|
41
|
+
description: |
|
|
42
|
+
A governance agent that supports sync_plans and check_governance.
|
|
43
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
44
|
+
|
|
45
|
+
phases:
|
|
46
|
+
- id: governance_plan_setup
|
|
47
|
+
title: "Set up strict governance plan"
|
|
48
|
+
narrative: |
|
|
49
|
+
Create a governance plan on the governance agent with a strict $10K budget
|
|
50
|
+
and agent_limited authority. The subsequent $50K buy will exceed the plan
|
|
51
|
+
budget and should be denied.
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- id: sync_plans
|
|
55
|
+
title: "Create strict governance plan"
|
|
56
|
+
task: sync_plans
|
|
57
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
58
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
59
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
60
|
+
stateful: true
|
|
61
|
+
expected: |
|
|
62
|
+
The governance agent acknowledges the plan with a plan_id.
|
|
63
|
+
sample_request:
|
|
64
|
+
idempotency_key: "$generate:uuid_v4#governance_denied_sync_plans"
|
|
65
|
+
plans:
|
|
66
|
+
- plan_id: "comply-gov-denied-plan"
|
|
67
|
+
brand:
|
|
68
|
+
domain: "acmeoutdoor.example"
|
|
69
|
+
objectives: "Small test campaign — limited budget authority"
|
|
70
|
+
budget:
|
|
71
|
+
total: 10000
|
|
72
|
+
currency: "USD"
|
|
73
|
+
reallocation_threshold: 5000
|
|
74
|
+
flight:
|
|
75
|
+
start: "2026-04-01T00:00:00Z"
|
|
76
|
+
end: "2026-06-30T23:59:59Z"
|
|
77
|
+
countries: ["US"]
|
|
78
|
+
validations:
|
|
79
|
+
- check: response_schema
|
|
80
|
+
description: "Response matches sync-plans-response.json schema"
|
|
81
|
+
|
|
82
|
+
- id: seller_setup
|
|
83
|
+
title: "Account and governance registration on seller"
|
|
84
|
+
steps:
|
|
85
|
+
- id: sync_accounts
|
|
86
|
+
title: "Establish account with seller"
|
|
87
|
+
task: sync_accounts
|
|
88
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
89
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
90
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
91
|
+
stateful: true
|
|
92
|
+
expected: |
|
|
93
|
+
Return the account with account_id and status active.
|
|
94
|
+
sample_request:
|
|
95
|
+
accounts:
|
|
96
|
+
- brand:
|
|
97
|
+
domain: "acmeoutdoor.example"
|
|
98
|
+
operator: "pinnacle-agency.example"
|
|
99
|
+
billing: "operator"
|
|
100
|
+
payment_terms: "net_30"
|
|
101
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_seller_setup_sync_accounts"
|
|
102
|
+
validations:
|
|
103
|
+
- check: response_schema
|
|
104
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
105
|
+
- check: field_present
|
|
106
|
+
path: "accounts[0].account_id"
|
|
107
|
+
description: "Account has a platform-assigned ID"
|
|
108
|
+
|
|
109
|
+
- id: sync_governance
|
|
110
|
+
title: "Register governance agent with seller"
|
|
111
|
+
task: sync_governance
|
|
112
|
+
schema_ref: "account/sync-governance-request.json"
|
|
113
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
114
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
115
|
+
stateful: true
|
|
116
|
+
expected: |
|
|
117
|
+
Acknowledge the governance agent registration.
|
|
118
|
+
sample_request:
|
|
119
|
+
accounts:
|
|
120
|
+
- account:
|
|
121
|
+
brand:
|
|
122
|
+
domain: "acmeoutdoor.example"
|
|
123
|
+
operator: "pinnacle-agency.example"
|
|
124
|
+
governance_agents:
|
|
125
|
+
- url: "$context.governance_agent_url"
|
|
126
|
+
authentication:
|
|
127
|
+
schemes: ["Bearer"]
|
|
128
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
129
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_seller_setup_sync_governance"
|
|
130
|
+
validations:
|
|
131
|
+
- check: response_schema
|
|
132
|
+
description: "Response matches sync-governance-response.json schema"
|
|
133
|
+
|
|
134
|
+
- id: buy_denied
|
|
135
|
+
title: "Create buy exceeding governance limits"
|
|
136
|
+
steps:
|
|
137
|
+
- id: get_products_brief
|
|
138
|
+
title: "Discover products"
|
|
139
|
+
task: get_products
|
|
140
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
141
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
142
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
143
|
+
comply_scenario: full_sales_flow
|
|
144
|
+
stateful: false
|
|
145
|
+
expected: |
|
|
146
|
+
Return products matching the brief.
|
|
147
|
+
sample_request:
|
|
148
|
+
buying_mode: "brief"
|
|
149
|
+
brief: "Premium video and display on outdoor lifestyle. Q2 flight, $50K budget. Adults 25-54, US."
|
|
150
|
+
account:
|
|
151
|
+
brand:
|
|
152
|
+
domain: "acmeoutdoor.example"
|
|
153
|
+
operator: "pinnacle-agency.example"
|
|
154
|
+
validations:
|
|
155
|
+
- check: response_schema
|
|
156
|
+
description: "Response matches get-products-response.json schema"
|
|
157
|
+
- check: field_present
|
|
158
|
+
path: "products"
|
|
159
|
+
description: "Response contains products"
|
|
160
|
+
|
|
161
|
+
- id: create_media_buy_denied
|
|
162
|
+
title: "Create buy (governance denies — should fail)"
|
|
163
|
+
task: create_media_buy
|
|
164
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
165
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
166
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
167
|
+
comply_scenario: create_media_buy
|
|
168
|
+
stateful: true
|
|
169
|
+
expect_error: true
|
|
170
|
+
negative_path: payload_well_formed
|
|
171
|
+
expected: |
|
|
172
|
+
The buy is rejected because governance denied — the $50K buy exceeds
|
|
173
|
+
the plan's $10K budget. The seller propagates the denial with findings.
|
|
174
|
+
|
|
175
|
+
Wire placement (Case-2 of the GOVERNANCE_DENIED rule). `create_media_buy`
|
|
176
|
+
has no structured rejection arm (its `oneOf` covers Success / Error /
|
|
177
|
+
Submitted only), so the seller populates `errors[].code: GOVERNANCE_DENIED`
|
|
178
|
+
in the payload AND `adcp_error.code: GOVERNANCE_DENIED` on the envelope per
|
|
179
|
+
the two-layer model, AND flips transport-level failure markers (HTTP 4xx /
|
|
180
|
+
MCP `isError: true` / A2A `failed`). Compare with `brand_rights/governance_denied`,
|
|
181
|
+
which exercises Case-1 (rejection arm is the canonical denial shape; no
|
|
182
|
+
error code on the wire; transport markers stay green).
|
|
183
|
+
sample_request:
|
|
184
|
+
brand:
|
|
185
|
+
domain: "acmeoutdoor.example"
|
|
186
|
+
account:
|
|
187
|
+
brand:
|
|
188
|
+
domain: "acmeoutdoor.example"
|
|
189
|
+
operator: "pinnacle-agency.example"
|
|
190
|
+
sandbox: true
|
|
191
|
+
idempotency_key: "$generate:uuid_v4#governance_denied_create_media_buy"
|
|
192
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
193
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
194
|
+
packages:
|
|
195
|
+
- product_id: "outdoor_display_q2"
|
|
196
|
+
budget: 30000
|
|
197
|
+
pricing_option_id: "cpm_standard"
|
|
198
|
+
- product_id: "outdoor_video_q2"
|
|
199
|
+
budget: 20000
|
|
200
|
+
pricing_option_id: "cpm_standard"
|
|
201
|
+
validations:
|
|
202
|
+
- check: error_code
|
|
203
|
+
value: "GOVERNANCE_DENIED"
|
|
204
|
+
description: "Error code indicates governance denial — Case-2 wire placement: create_media_buy has no rejection arm, so GOVERNANCE_DENIED surfaces via errors[].code or adcp_error.code (per the two-layer model in error-handling.mdx)"
|
package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
id: media_buy_seller/governance_denied_recovery
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller accepts corrected buy after governance denial"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that a buyer can recover from GOVERNANCE_DENIED by shrinking the buy to within plan limits and retrying."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
GOVERNANCE_DENIED is a correctable error, not a dead end. The buyer must be able to
|
|
14
|
+
read the denial findings, adjust the media buy, and retry. This scenario exercises the
|
|
15
|
+
full loop: strict governance plan ($10K), failed $50K buy that is denied, then a
|
|
16
|
+
corrected $8K buy that fits within the plan and is approved.
|
|
17
|
+
|
|
18
|
+
The seller must propagate the governance findings unchanged so the buyer can identify
|
|
19
|
+
exactly which constraint was violated (budget authority, brand policy, etc.) and
|
|
20
|
+
correct it.
|
|
21
|
+
|
|
22
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
23
|
+
Override by supplying a different `governance_agent_url` in the run's initial context
|
|
24
|
+
(e.g., via `--context` on `adcp storyboard run` once the CLI supports it).
|
|
25
|
+
|
|
26
|
+
context:
|
|
27
|
+
governance_agent_url: "https://test-agent.adcontextprotocol.org"
|
|
28
|
+
|
|
29
|
+
agent:
|
|
30
|
+
interaction_model: media_buy_seller
|
|
31
|
+
capabilities:
|
|
32
|
+
- sells_media
|
|
33
|
+
- governance_aware
|
|
34
|
+
examples:
|
|
35
|
+
- "Any media buy seller with governance support"
|
|
36
|
+
|
|
37
|
+
caller:
|
|
38
|
+
role: buyer_agent
|
|
39
|
+
example: "Pinnacle Agency (buyer)"
|
|
40
|
+
|
|
41
|
+
prerequisites:
|
|
42
|
+
description: |
|
|
43
|
+
A governance agent that supports sync_plans and check_governance.
|
|
44
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
45
|
+
|
|
46
|
+
phases:
|
|
47
|
+
- id: governance_plan_setup
|
|
48
|
+
title: "Set up strict governance plan"
|
|
49
|
+
narrative: |
|
|
50
|
+
Create a governance plan with a $10K budget. The initial $50K buy will exceed this
|
|
51
|
+
limit; the retry at $8K will fit.
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- id: sync_plans
|
|
55
|
+
title: "Create strict governance plan"
|
|
56
|
+
task: sync_plans
|
|
57
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
58
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
59
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
60
|
+
stateful: true
|
|
61
|
+
expected: |
|
|
62
|
+
The governance agent acknowledges the plan.
|
|
63
|
+
sample_request:
|
|
64
|
+
idempotency_key: "$generate:uuid_v4#governance_denied_recovery_sync_plans"
|
|
65
|
+
plans:
|
|
66
|
+
- plan_id: "comply-gov-recovery-plan"
|
|
67
|
+
brand:
|
|
68
|
+
domain: "acmeoutdoor.example"
|
|
69
|
+
objectives: "Strict-budget plan for denial + recovery validation"
|
|
70
|
+
budget:
|
|
71
|
+
total: 10000
|
|
72
|
+
currency: "USD"
|
|
73
|
+
reallocation_threshold: 5000
|
|
74
|
+
flight:
|
|
75
|
+
start: "2026-04-01T00:00:00Z"
|
|
76
|
+
end: "2026-06-30T23:59:59Z"
|
|
77
|
+
countries: ["US"]
|
|
78
|
+
validations:
|
|
79
|
+
- check: response_schema
|
|
80
|
+
description: "Response matches sync-plans-response.json schema"
|
|
81
|
+
|
|
82
|
+
- id: seller_setup
|
|
83
|
+
title: "Account and governance registration on seller"
|
|
84
|
+
steps:
|
|
85
|
+
- id: sync_accounts
|
|
86
|
+
title: "Establish account with seller"
|
|
87
|
+
task: sync_accounts
|
|
88
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
89
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
90
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
91
|
+
stateful: true
|
|
92
|
+
expected: |
|
|
93
|
+
Return the account with account_id active.
|
|
94
|
+
sample_request:
|
|
95
|
+
accounts:
|
|
96
|
+
- brand:
|
|
97
|
+
domain: "acmeoutdoor.example"
|
|
98
|
+
operator: "pinnacle-agency.example"
|
|
99
|
+
billing: "operator"
|
|
100
|
+
payment_terms: "net_30"
|
|
101
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_recovery_seller_setup_sync_accounts"
|
|
102
|
+
validations:
|
|
103
|
+
- check: response_schema
|
|
104
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
105
|
+
- check: field_present
|
|
106
|
+
path: "accounts[0].account_id"
|
|
107
|
+
description: "Account has a platform-assigned ID"
|
|
108
|
+
|
|
109
|
+
- id: sync_governance
|
|
110
|
+
title: "Register governance agent with seller"
|
|
111
|
+
task: sync_governance
|
|
112
|
+
schema_ref: "account/sync-governance-request.json"
|
|
113
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
114
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
115
|
+
stateful: true
|
|
116
|
+
expected: |
|
|
117
|
+
Acknowledge the governance agent registration.
|
|
118
|
+
sample_request:
|
|
119
|
+
accounts:
|
|
120
|
+
- account:
|
|
121
|
+
brand:
|
|
122
|
+
domain: "acmeoutdoor.example"
|
|
123
|
+
operator: "pinnacle-agency.example"
|
|
124
|
+
governance_agents:
|
|
125
|
+
- url: "$context.governance_agent_url"
|
|
126
|
+
authentication:
|
|
127
|
+
schemes: ["Bearer"]
|
|
128
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
129
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_recovery_seller_setup_sync_governance"
|
|
130
|
+
validations:
|
|
131
|
+
- check: response_schema
|
|
132
|
+
description: "Response matches sync-governance-response.json schema"
|
|
133
|
+
|
|
134
|
+
- id: buy_denied
|
|
135
|
+
title: "Initial buy exceeds plan — governance denies"
|
|
136
|
+
steps:
|
|
137
|
+
- id: get_products_brief
|
|
138
|
+
title: "Discover products"
|
|
139
|
+
task: get_products
|
|
140
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
141
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
142
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
143
|
+
comply_scenario: full_sales_flow
|
|
144
|
+
stateful: false
|
|
145
|
+
expected: |
|
|
146
|
+
Return products matching the brief.
|
|
147
|
+
sample_request:
|
|
148
|
+
buying_mode: "brief"
|
|
149
|
+
brief: "Display inventory on outdoor lifestyle content. Q2 flight."
|
|
150
|
+
filters:
|
|
151
|
+
is_fixed_price: true
|
|
152
|
+
account:
|
|
153
|
+
brand:
|
|
154
|
+
domain: "acmeoutdoor.example"
|
|
155
|
+
operator: "pinnacle-agency.example"
|
|
156
|
+
context_outputs:
|
|
157
|
+
- path: "products[0].product_id"
|
|
158
|
+
key: "product_id"
|
|
159
|
+
- path: "products[0].pricing_options[0].pricing_option_id"
|
|
160
|
+
key: "pricing_option_id"
|
|
161
|
+
validations:
|
|
162
|
+
- check: response_schema
|
|
163
|
+
description: "Response matches get-products-response.json schema"
|
|
164
|
+
- check: field_present
|
|
165
|
+
path: "products"
|
|
166
|
+
description: "Response contains products"
|
|
167
|
+
- check: field_present
|
|
168
|
+
path: "products[0].pricing_options[0].fixed_price"
|
|
169
|
+
description: "The captured pricing option is fixed-price; fixed-price storyboards do not send bid_price"
|
|
170
|
+
|
|
171
|
+
- id: create_media_buy_denied
|
|
172
|
+
title: "Attempt $50K buy — denied"
|
|
173
|
+
task: create_media_buy
|
|
174
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
175
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
176
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
177
|
+
comply_scenario: create_media_buy
|
|
178
|
+
expect_error: true
|
|
179
|
+
negative_path: payload_well_formed
|
|
180
|
+
stateful: true
|
|
181
|
+
expected: |
|
|
182
|
+
The buy is rejected with GOVERNANCE_DENIED. The response includes findings
|
|
183
|
+
from the governance agent explaining which constraint was exceeded.
|
|
184
|
+
|
|
185
|
+
sample_request:
|
|
186
|
+
brand:
|
|
187
|
+
domain: "acmeoutdoor.example"
|
|
188
|
+
account:
|
|
189
|
+
brand:
|
|
190
|
+
domain: "acmeoutdoor.example"
|
|
191
|
+
operator: "pinnacle-agency.example"
|
|
192
|
+
idempotency_key: "$generate:uuid_v4#governance_denied_recovery_create_media_buy_denied"
|
|
193
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
194
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
195
|
+
packages:
|
|
196
|
+
- product_id: "$context.product_id"
|
|
197
|
+
budget: 50000
|
|
198
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
199
|
+
context:
|
|
200
|
+
correlation_id: "governance_denied_recovery--create_media_buy_denied"
|
|
201
|
+
validations:
|
|
202
|
+
- check: error_code
|
|
203
|
+
value: "GOVERNANCE_DENIED"
|
|
204
|
+
description: "Error code is GOVERNANCE_DENIED"
|
|
205
|
+
- check: field_value
|
|
206
|
+
path: "context.correlation_id"
|
|
207
|
+
value: "governance_denied_recovery--create_media_buy_denied"
|
|
208
|
+
description: "Response echoes context.correlation_id verbatim on error responses (echo contract applies to both success and failure)"
|
|
209
|
+
|
|
210
|
+
- id: buy_retried
|
|
211
|
+
title: "Corrected buy within plan — governance approves"
|
|
212
|
+
narrative: |
|
|
213
|
+
The buyer reads the denial findings, shrinks the budget to $8K (within the $10K
|
|
214
|
+
plan), and retries with a fresh idempotency_key. The seller consults governance
|
|
215
|
+
again, which now approves.
|
|
216
|
+
|
|
217
|
+
steps:
|
|
218
|
+
- id: create_media_buy_retry
|
|
219
|
+
title: "Retry with $8K — approved"
|
|
220
|
+
task: create_media_buy
|
|
221
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
222
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
223
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
224
|
+
comply_scenario: create_media_buy
|
|
225
|
+
stateful: true
|
|
226
|
+
expected: |
|
|
227
|
+
The buy succeeds. Governance approves because $8K fits within the $10K plan
|
|
228
|
+
budget. The seller returns a media_buy_id.
|
|
229
|
+
|
|
230
|
+
sample_request:
|
|
231
|
+
brand:
|
|
232
|
+
domain: "acmeoutdoor.example"
|
|
233
|
+
account:
|
|
234
|
+
brand:
|
|
235
|
+
domain: "acmeoutdoor.example"
|
|
236
|
+
operator: "pinnacle-agency.example"
|
|
237
|
+
idempotency_key: "$generate:uuid_v4#governance_denied_recovery_create_media_buy_retry"
|
|
238
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
239
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
240
|
+
packages:
|
|
241
|
+
- product_id: "$context.product_id"
|
|
242
|
+
budget: 8000
|
|
243
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
244
|
+
context_outputs:
|
|
245
|
+
- name: media_buy_id
|
|
246
|
+
path: "media_buy_id"
|
|
247
|
+
validations:
|
|
248
|
+
- check: response_schema
|
|
249
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
250
|
+
- check: field_present
|
|
251
|
+
path: "media_buy_id"
|
|
252
|
+
description: "Seller returns a media_buy_id after governance approves"
|