@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,221 @@
|
|
|
1
|
+
id: governance_spend_authority/denied
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Campaign governance — denied"
|
|
4
|
+
category: governance_spend_authority
|
|
5
|
+
summary: "Governance agent denies a media buy that exceeds the agent's spending authority. No human escalation — the buy is blocked."
|
|
6
|
+
track: campaign_governance
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_plans
|
|
9
|
+
- check_governance
|
|
10
|
+
|
|
11
|
+
# Cross-step assertion (adcp#2639): once a plan is denied, no subsequent
|
|
12
|
+
# step in the same run may acquire a resource for that plan. Catches the
|
|
13
|
+
# failure mode where a seller surfaces the denial response but still
|
|
14
|
+
# creates the media buy / activates the signal / syncs the property list
|
|
15
|
+
# anyway. Plan-scoped — unrelated plans proceed normally.
|
|
16
|
+
# Cross-step assertion (adcp#2664): status.monotonic rejects media_buy
|
|
17
|
+
# status transitions observed across steps that aren't on the spec
|
|
18
|
+
# lifecycle graph — e.g. active → pending_creatives.
|
|
19
|
+
invariants:
|
|
20
|
+
- governance.denial_blocks_mutation
|
|
21
|
+
- status.monotonic
|
|
22
|
+
|
|
23
|
+
narrative: |
|
|
24
|
+
The buyer's governance agent registers a plan with strict spending authority. The buyer
|
|
25
|
+
then proposes a media buy that exceeds the agent's per-transaction threshold. The
|
|
26
|
+
governance agent denies the buy outright with a must-severity finding.
|
|
27
|
+
|
|
28
|
+
Unlike the escalation storyboard, there is no human override here. The denial is final.
|
|
29
|
+
The buyer must reduce the buy amount or restructure into smaller transactions that fall
|
|
30
|
+
within the agent's authority. This tests the hard-stop governance path.
|
|
31
|
+
|
|
32
|
+
agent:
|
|
33
|
+
interaction_model: media_buy_seller
|
|
34
|
+
capabilities:
|
|
35
|
+
- sells_media
|
|
36
|
+
- governance_aware
|
|
37
|
+
examples:
|
|
38
|
+
- "Publisher platform with governance support"
|
|
39
|
+
- "Retail media network"
|
|
40
|
+
|
|
41
|
+
caller:
|
|
42
|
+
role: buyer_agent
|
|
43
|
+
example: "Pinnacle Agency (buyer)"
|
|
44
|
+
|
|
45
|
+
prerequisites:
|
|
46
|
+
description: |
|
|
47
|
+
The caller needs a brand identity, operator credentials, and a governance agent URL.
|
|
48
|
+
The governance plan must define a per-transaction threshold below the intended buy amount.
|
|
49
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
50
|
+
|
|
51
|
+
phases:
|
|
52
|
+
- id: capability_discovery
|
|
53
|
+
title: "Capability discovery"
|
|
54
|
+
narrative: |
|
|
55
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
|
|
56
|
+
|
|
57
|
+
steps:
|
|
58
|
+
- id: get_capabilities
|
|
59
|
+
title: "Check agent capabilities"
|
|
60
|
+
narrative: |
|
|
61
|
+
Verify that the agent declares the expected protocol support before
|
|
62
|
+
proceeding with domain-specific operations.
|
|
63
|
+
task: get_adcp_capabilities
|
|
64
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
65
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
66
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
67
|
+
comply_scenario: capability_discovery
|
|
68
|
+
stateful: false
|
|
69
|
+
expected: |
|
|
70
|
+
Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
|
|
71
|
+
sample_request:
|
|
72
|
+
context:
|
|
73
|
+
correlation_id: "governance_spend_authority--denied--get_capabilities"
|
|
74
|
+
validations:
|
|
75
|
+
- check: response_schema
|
|
76
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
77
|
+
- check: field_present
|
|
78
|
+
path: "supported_protocols"
|
|
79
|
+
description: "Agent declares supported protocols"
|
|
80
|
+
|
|
81
|
+
- check: field_present
|
|
82
|
+
path: "context"
|
|
83
|
+
description: "Response echoes back the context object"
|
|
84
|
+
- check: field_value
|
|
85
|
+
path: "context.correlation_id"
|
|
86
|
+
value: "governance_spend_authority--denied--get_capabilities"
|
|
87
|
+
description: "Context correlation_id returned unchanged"
|
|
88
|
+
- id: plan_registration
|
|
89
|
+
title: "Register governance plan"
|
|
90
|
+
narrative: |
|
|
91
|
+
The buyer registers a governance plan with strict spending authority. The plan sets
|
|
92
|
+
an agent_limited authority level with a $10K per-transaction threshold. Any buy above
|
|
93
|
+
this amount is denied without escalation.
|
|
94
|
+
|
|
95
|
+
steps:
|
|
96
|
+
- id: sync_plans
|
|
97
|
+
title: "Register a governance plan with strict authority"
|
|
98
|
+
narrative: |
|
|
99
|
+
The buyer's governance agent registers a plan with a $10K per-transaction limit
|
|
100
|
+
and no escalation path. Buys that exceed this threshold are denied outright.
|
|
101
|
+
task: sync_plans
|
|
102
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
103
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
104
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
105
|
+
comply_scenario: governance_spend_authority/denied
|
|
106
|
+
stateful: true
|
|
107
|
+
expected: |
|
|
108
|
+
Acknowledge the governance plan:
|
|
109
|
+
- plan_id: identifier for this governance plan
|
|
110
|
+
- budget.total: $10K cap that any single buy above will exceed
|
|
111
|
+
|
|
112
|
+
sample_request:
|
|
113
|
+
idempotency_key: "$generate:uuid_v4#gov-spend-authority-denied-sync"
|
|
114
|
+
plans:
|
|
115
|
+
- plan_id: "gov_acme_strict"
|
|
116
|
+
brand:
|
|
117
|
+
domain: "acmeoutdoor.example"
|
|
118
|
+
objectives: "Acme Outdoor low-budget validation flight"
|
|
119
|
+
budget:
|
|
120
|
+
total: 10000
|
|
121
|
+
currency: "USD"
|
|
122
|
+
reallocation_threshold: 0
|
|
123
|
+
flight:
|
|
124
|
+
start: "2027-01-01T00:00:00Z"
|
|
125
|
+
end: "2027-12-31T23:59:59Z"
|
|
126
|
+
countries: ["US"]
|
|
127
|
+
|
|
128
|
+
context:
|
|
129
|
+
correlation_id: "governance_spend_authority--denied--sync_plans"
|
|
130
|
+
context_outputs:
|
|
131
|
+
- name: plan_id
|
|
132
|
+
path: 'plans[0].plan_id'
|
|
133
|
+
validations:
|
|
134
|
+
- check: response_schema
|
|
135
|
+
description: "Response matches sync-plans-response.json schema"
|
|
136
|
+
|
|
137
|
+
- check: field_present
|
|
138
|
+
path: "context"
|
|
139
|
+
description: "Response echoes back the context object"
|
|
140
|
+
- check: field_value
|
|
141
|
+
path: "context.correlation_id"
|
|
142
|
+
value: "governance_spend_authority--denied--sync_plans"
|
|
143
|
+
description: "Context correlation_id returned unchanged"
|
|
144
|
+
- check: field_present
|
|
145
|
+
path: "plans[0].plan_id"
|
|
146
|
+
description: "Governance agent assigns plan_id — must be echoed in check_governance"
|
|
147
|
+
- id: governance_check
|
|
148
|
+
title: "Governance check — denied"
|
|
149
|
+
narrative: |
|
|
150
|
+
The buyer proposes a $50K media buy against the $10K threshold. The governance agent
|
|
151
|
+
evaluates the binding and returns a denied decision with a must-severity finding
|
|
152
|
+
explaining the spending authority violation. No escalation instructions are provided
|
|
153
|
+
because the plan has no escalation path.
|
|
154
|
+
|
|
155
|
+
steps:
|
|
156
|
+
- id: check_governance_denied
|
|
157
|
+
title: "Pre-buy governance check (denied, no escalation)"
|
|
158
|
+
narrative: |
|
|
159
|
+
The buyer calls check_governance with a $50K media buy binding. The governance
|
|
160
|
+
agent denies the buy because the total exceeds the $10K per-transaction authority.
|
|
161
|
+
The response includes a critical-severity finding with the violation details.
|
|
162
|
+
task: check_governance
|
|
163
|
+
schema_ref: "governance/check-governance-request.json"
|
|
164
|
+
response_schema_ref: "governance/check-governance-response.json"
|
|
165
|
+
doc_ref: "/governance/campaign/tasks/check_governance"
|
|
166
|
+
comply_scenario: governance_spend_authority/denied
|
|
167
|
+
stateful: true
|
|
168
|
+
expected: |
|
|
169
|
+
Return a denied governance decision:
|
|
170
|
+
- decision: denied
|
|
171
|
+
- findings: array with at least one critical-severity finding
|
|
172
|
+
- severity: critical
|
|
173
|
+
- category_id: SPENDING_AUTHORITY_EXCEEDED
|
|
174
|
+
- explanation: explains the threshold and how much the buy exceeds it
|
|
175
|
+
- No escalation instructions (plan has no escalation path)
|
|
176
|
+
|
|
177
|
+
sample_request:
|
|
178
|
+
plan_id: "$context.plan_id"
|
|
179
|
+
caller: "https://pinnacle-agency.example"
|
|
180
|
+
tool: "create_media_buy"
|
|
181
|
+
payload:
|
|
182
|
+
idempotency_key: "$generate:uuid_v4#governance_spend_authority_denied_check_governance_denied_payload"
|
|
183
|
+
account:
|
|
184
|
+
brand:
|
|
185
|
+
domain: "acmeoutdoor.example"
|
|
186
|
+
operator: "pinnacle-agency.example"
|
|
187
|
+
brand:
|
|
188
|
+
domain: "acmeoutdoor.example"
|
|
189
|
+
start_time: "2027-01-01T00:00:00Z"
|
|
190
|
+
end_time: "2027-03-31T23:59:59Z"
|
|
191
|
+
packages:
|
|
192
|
+
- product_id: "sports_ctv_q2"
|
|
193
|
+
budget: 30000
|
|
194
|
+
pricing_option_id: "cpm_standard"
|
|
195
|
+
- product_id: "outdoor_video_q2"
|
|
196
|
+
budget: 20000
|
|
197
|
+
pricing_option_id: "cpm_standard"
|
|
198
|
+
|
|
199
|
+
context:
|
|
200
|
+
correlation_id: "governance_spend_authority--denied--check_governance_denied"
|
|
201
|
+
validations:
|
|
202
|
+
- check: response_schema
|
|
203
|
+
description: "Response matches check-governance-response.json schema"
|
|
204
|
+
- check: field_present
|
|
205
|
+
path: "verdict"
|
|
206
|
+
description: "Response contains a governance verdict"
|
|
207
|
+
- check: field_value
|
|
208
|
+
path: "verdict"
|
|
209
|
+
value: "denied"
|
|
210
|
+
description: "Verdict is denied"
|
|
211
|
+
- check: field_present
|
|
212
|
+
path: "findings"
|
|
213
|
+
description: "Response contains findings explaining the denial"
|
|
214
|
+
|
|
215
|
+
- check: field_present
|
|
216
|
+
path: "context"
|
|
217
|
+
description: "Response echoes back the context object"
|
|
218
|
+
- check: field_value
|
|
219
|
+
path: "context.correlation_id"
|
|
220
|
+
value: "governance_spend_authority--denied--check_governance_denied"
|
|
221
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
id: governance_spend_authority
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Campaign governance — conditional approval"
|
|
4
|
+
protocol: governance
|
|
5
|
+
category: governance_spend_authority
|
|
6
|
+
summary: "Governance agent approves a media buy with conditions. Buyer re-checks after meeting the conditions."
|
|
7
|
+
track: campaign_governance
|
|
8
|
+
required_tools:
|
|
9
|
+
- sync_plans
|
|
10
|
+
- check_governance
|
|
11
|
+
|
|
12
|
+
# Cross-step assertion (adcp#2639): silent on approval runs; fires only
|
|
13
|
+
# if a seller surfaces a denial signal mid-flow and then still mutates
|
|
14
|
+
# the plan's resources. Kept wired here so any future "conditions not
|
|
15
|
+
# met → denied" phase added to this storyboard is automatically gated.
|
|
16
|
+
# Cross-step assertion (adcp#2664): status.monotonic rejects media_buy
|
|
17
|
+
# status transitions observed across steps that aren't on the spec
|
|
18
|
+
# lifecycle graph — e.g. active → pending_creatives.
|
|
19
|
+
invariants:
|
|
20
|
+
- governance.denial_blocks_mutation
|
|
21
|
+
- status.monotonic
|
|
22
|
+
|
|
23
|
+
narrative: |
|
|
24
|
+
The buyer's governance agent evaluates a media buy that falls within spending authority but
|
|
25
|
+
triggers policy conditions — for example, the buy targets a channel that requires weekly
|
|
26
|
+
reporting, or the creative format requires brand safety review.
|
|
27
|
+
|
|
28
|
+
The governance agent returns approved_with_conditions, attaching conditions the buyer must
|
|
29
|
+
honor during the campaign. The buyer can proceed with the media buy by passing the
|
|
30
|
+
governance context, but the conditions are binding.
|
|
31
|
+
|
|
32
|
+
This storyboard tests the middle path between outright approval and denial: the buy is
|
|
33
|
+
allowed, but with strings attached.
|
|
34
|
+
|
|
35
|
+
agent:
|
|
36
|
+
interaction_model: media_buy_seller
|
|
37
|
+
capabilities:
|
|
38
|
+
- sells_media
|
|
39
|
+
- governance_aware
|
|
40
|
+
examples:
|
|
41
|
+
- "Publisher platform with governance support"
|
|
42
|
+
- "SSP that respects governance checks"
|
|
43
|
+
|
|
44
|
+
caller:
|
|
45
|
+
role: buyer_agent
|
|
46
|
+
example: "Pinnacle Agency (buyer)"
|
|
47
|
+
|
|
48
|
+
prerequisites:
|
|
49
|
+
description: |
|
|
50
|
+
The caller needs a brand identity, operator credentials, and a governance agent URL.
|
|
51
|
+
The governance plan defines policy conditions that trigger on specific buy parameters.
|
|
52
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
53
|
+
controller_seeding: true
|
|
54
|
+
|
|
55
|
+
fixtures:
|
|
56
|
+
products:
|
|
57
|
+
- product_id: "sports_ctv_q2"
|
|
58
|
+
delivery_type: "guaranteed"
|
|
59
|
+
channels: ["ctv"]
|
|
60
|
+
format_ids:
|
|
61
|
+
- id: "video_30s"
|
|
62
|
+
- product_id: "lifestyle_display_q2"
|
|
63
|
+
delivery_type: "guaranteed"
|
|
64
|
+
channels: ["display"]
|
|
65
|
+
format_ids:
|
|
66
|
+
- id: "display_300x250"
|
|
67
|
+
pricing_options:
|
|
68
|
+
- product_id: "sports_ctv_q2"
|
|
69
|
+
pricing_option_id: "cpm_guaranteed"
|
|
70
|
+
pricing_model: "cpm"
|
|
71
|
+
currency: "USD"
|
|
72
|
+
fixed_price: 45.0
|
|
73
|
+
- product_id: "lifestyle_display_q2"
|
|
74
|
+
pricing_option_id: "cpm_standard"
|
|
75
|
+
pricing_model: "cpm"
|
|
76
|
+
currency: "USD"
|
|
77
|
+
fixed_price: 8.0
|
|
78
|
+
plans:
|
|
79
|
+
- plan_id: "gov_acme_spend_authority_q2_2027"
|
|
80
|
+
brand:
|
|
81
|
+
domain: "acmeoutdoor.example"
|
|
82
|
+
objectives: "Full spending authority with conditional policies on CTV reporting and UGC brand safety"
|
|
83
|
+
budget:
|
|
84
|
+
total: 100000
|
|
85
|
+
currency: "USD"
|
|
86
|
+
reallocation_unlimited: true
|
|
87
|
+
flight:
|
|
88
|
+
start: "2027-01-01T00:00:00Z"
|
|
89
|
+
end: "2027-12-31T23:59:59Z"
|
|
90
|
+
countries: ["US"]
|
|
91
|
+
custom_policies:
|
|
92
|
+
- policy_id: "ctv_weekly_reporting"
|
|
93
|
+
enforcement: "must"
|
|
94
|
+
policy: "CTV buys require weekly delivery reporting."
|
|
95
|
+
- policy_id: "ugc_brand_safety"
|
|
96
|
+
enforcement: "must"
|
|
97
|
+
policy: "UGC placements require brand safety review before go-live."
|
|
98
|
+
|
|
99
|
+
phases:
|
|
100
|
+
- id: capability_discovery
|
|
101
|
+
title: "Capability discovery"
|
|
102
|
+
narrative: |
|
|
103
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
|
|
104
|
+
|
|
105
|
+
steps:
|
|
106
|
+
- id: get_capabilities
|
|
107
|
+
title: "Check agent capabilities"
|
|
108
|
+
narrative: |
|
|
109
|
+
Verify that the agent declares the expected protocol support before
|
|
110
|
+
proceeding with domain-specific operations.
|
|
111
|
+
task: get_adcp_capabilities
|
|
112
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
113
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
114
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
115
|
+
comply_scenario: capability_discovery
|
|
116
|
+
stateful: false
|
|
117
|
+
expected: |
|
|
118
|
+
Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
|
|
119
|
+
sample_request:
|
|
120
|
+
context:
|
|
121
|
+
correlation_id: "governance_spend_authority--get_capabilities"
|
|
122
|
+
validations:
|
|
123
|
+
- check: response_schema
|
|
124
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
125
|
+
- check: field_present
|
|
126
|
+
path: "supported_protocols"
|
|
127
|
+
description: "Agent declares supported protocols"
|
|
128
|
+
|
|
129
|
+
- check: field_present
|
|
130
|
+
path: "context"
|
|
131
|
+
description: "Response echoes back the context object"
|
|
132
|
+
- check: field_value
|
|
133
|
+
path: "context.correlation_id"
|
|
134
|
+
value: "governance_spend_authority--get_capabilities"
|
|
135
|
+
description: "Context correlation_id returned unchanged"
|
|
136
|
+
- id: plan_registration
|
|
137
|
+
title: "Register governance plan with policy conditions"
|
|
138
|
+
narrative: |
|
|
139
|
+
The buyer registers a governance plan that allows the agent full spending authority
|
|
140
|
+
but attaches policy conditions for specific channels or formats. Buys that trigger
|
|
141
|
+
these policies are approved with conditions rather than denied.
|
|
142
|
+
|
|
143
|
+
steps:
|
|
144
|
+
- id: sync_plans
|
|
145
|
+
title: "Register a governance plan with policy conditions"
|
|
146
|
+
narrative: |
|
|
147
|
+
The buyer's governance agent registers a plan with full spending authority but
|
|
148
|
+
custom policies that require weekly reporting for CTV buys and brand safety
|
|
149
|
+
review for user-generated content placements.
|
|
150
|
+
task: sync_plans
|
|
151
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
152
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
153
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
154
|
+
comply_scenario: governance_spend_authority
|
|
155
|
+
stateful: true
|
|
156
|
+
expected: |
|
|
157
|
+
Acknowledge the governance plan:
|
|
158
|
+
- plan_id: identifier for this governance plan
|
|
159
|
+
- custom_policies: policy conditions registered
|
|
160
|
+
|
|
161
|
+
sample_request:
|
|
162
|
+
idempotency_key: "$generate:uuid_v4#gov-spend-authority-sync"
|
|
163
|
+
plans:
|
|
164
|
+
- plan_id: "gov_acme_spend_authority_q2_2027"
|
|
165
|
+
brand:
|
|
166
|
+
domain: "acmeoutdoor.example"
|
|
167
|
+
objectives: "Full spending authority with conditional policies on CTV reporting and UGC brand safety"
|
|
168
|
+
budget:
|
|
169
|
+
total: 100000
|
|
170
|
+
currency: "USD"
|
|
171
|
+
reallocation_unlimited: true
|
|
172
|
+
flight:
|
|
173
|
+
start: "2027-01-01T00:00:00Z"
|
|
174
|
+
end: "2027-12-31T23:59:59Z"
|
|
175
|
+
countries: ["US"]
|
|
176
|
+
custom_policies:
|
|
177
|
+
- policy_id: "ctv_weekly_reporting"
|
|
178
|
+
enforcement: "must"
|
|
179
|
+
policy: "CTV buys require weekly delivery reporting."
|
|
180
|
+
- policy_id: "ugc_brand_safety"
|
|
181
|
+
enforcement: "must"
|
|
182
|
+
policy: "UGC placements require brand safety review before go-live."
|
|
183
|
+
|
|
184
|
+
context:
|
|
185
|
+
correlation_id: "governance_spend_authority--sync_plans"
|
|
186
|
+
context_outputs:
|
|
187
|
+
- name: plan_id
|
|
188
|
+
path: 'plans[0].plan_id'
|
|
189
|
+
validations:
|
|
190
|
+
- check: response_schema
|
|
191
|
+
description: "Response matches sync-plans-response.json schema"
|
|
192
|
+
|
|
193
|
+
- check: field_present
|
|
194
|
+
path: "context"
|
|
195
|
+
description: "Response echoes back the context object"
|
|
196
|
+
- check: field_value
|
|
197
|
+
path: "context.correlation_id"
|
|
198
|
+
value: "governance_spend_authority--sync_plans"
|
|
199
|
+
description: "Context correlation_id returned unchanged"
|
|
200
|
+
- check: field_present
|
|
201
|
+
path: "plans[0].plan_id"
|
|
202
|
+
description: "Governance agent assigns plan_id — must be echoed in check_governance"
|
|
203
|
+
- check: field_present
|
|
204
|
+
path: "plans[0].version"
|
|
205
|
+
description: "Plan includes version for concurrency"
|
|
206
|
+
- id: governance_check_conditions
|
|
207
|
+
title: "Governance check — approved with conditions"
|
|
208
|
+
narrative: |
|
|
209
|
+
The buyer proposes a media buy that includes CTV inventory. The governance agent
|
|
210
|
+
approves the buy but attaches the weekly reporting condition from the plan. The
|
|
211
|
+
buyer receives a governance context that encodes these conditions.
|
|
212
|
+
|
|
213
|
+
steps:
|
|
214
|
+
- id: check_governance_conditions
|
|
215
|
+
title: "Pre-buy governance check (approved with conditions)"
|
|
216
|
+
narrative: |
|
|
217
|
+
The buyer calls check_governance with a media buy that includes CTV products.
|
|
218
|
+
The governance agent approves the buy but attaches conditions: weekly delivery
|
|
219
|
+
reporting is required for the CTV line items.
|
|
220
|
+
task: check_governance
|
|
221
|
+
schema_ref: "governance/check-governance-request.json"
|
|
222
|
+
response_schema_ref: "governance/check-governance-response.json"
|
|
223
|
+
doc_ref: "/governance/campaign/tasks/check_governance"
|
|
224
|
+
comply_scenario: governance_spend_authority
|
|
225
|
+
stateful: true
|
|
226
|
+
expected: |
|
|
227
|
+
Return an approved governance decision with conditions:
|
|
228
|
+
- decision: approved
|
|
229
|
+
- conditions: array of requirements the buyer must honor
|
|
230
|
+
- e.g., "Weekly delivery reporting required for CTV line items"
|
|
231
|
+
- governance_context: token the buyer passes to create_media_buy
|
|
232
|
+
- findings: may include warning-severity findings noting the conditions
|
|
233
|
+
|
|
234
|
+
sample_request:
|
|
235
|
+
plan_id: "$context.plan_id"
|
|
236
|
+
caller: "https://pinnacle-agency.example"
|
|
237
|
+
tool: "create_media_buy"
|
|
238
|
+
payload:
|
|
239
|
+
account:
|
|
240
|
+
brand:
|
|
241
|
+
domain: "acmeoutdoor.example"
|
|
242
|
+
operator: "pinnacle-agency.example"
|
|
243
|
+
total_budget: 40000
|
|
244
|
+
packages:
|
|
245
|
+
- product_id: "sports_ctv_q2"
|
|
246
|
+
budget: 25000
|
|
247
|
+
- product_id: "lifestyle_display_q2"
|
|
248
|
+
budget: 15000
|
|
249
|
+
|
|
250
|
+
context:
|
|
251
|
+
correlation_id: "governance_spend_authority--check_governance_conditions"
|
|
252
|
+
validations:
|
|
253
|
+
- check: response_schema
|
|
254
|
+
description: "Response matches check-governance-response.json schema"
|
|
255
|
+
- check: field_present
|
|
256
|
+
path: "verdict"
|
|
257
|
+
description: "Response contains a governance verdict"
|
|
258
|
+
- check: field_present
|
|
259
|
+
path: "conditions"
|
|
260
|
+
description: "Approval includes conditions"
|
|
261
|
+
- check: field_present
|
|
262
|
+
path: "governance_context"
|
|
263
|
+
description: "Response includes governance context for the media buy"
|
|
264
|
+
|
|
265
|
+
- check: field_present
|
|
266
|
+
path: "context"
|
|
267
|
+
description: "Response echoes back the context object"
|
|
268
|
+
- check: field_value
|
|
269
|
+
path: "context.correlation_id"
|
|
270
|
+
value: "governance_spend_authority--check_governance_conditions"
|
|
271
|
+
description: "Context correlation_id returned unchanged"
|
|
272
|
+
- id: create_buy_with_conditions
|
|
273
|
+
title: "Create media buy with governance conditions"
|
|
274
|
+
narrative: |
|
|
275
|
+
The buyer creates the media buy, passing the governance context from the conditional
|
|
276
|
+
approval. The seller validates the governance approval and confirms the buy. The
|
|
277
|
+
conditions from the governance check are now binding for the campaign duration.
|
|
278
|
+
|
|
279
|
+
steps:
|
|
280
|
+
- id: create_media_buy
|
|
281
|
+
title: "Create a media buy with conditional governance approval"
|
|
282
|
+
narrative: |
|
|
283
|
+
The buyer creates the media buy with the governance_context token from the
|
|
284
|
+
conditional approval. The seller confirms the buy. The buyer is now bound by
|
|
285
|
+
the conditions (weekly reporting for CTV line items).
|
|
286
|
+
task: create_media_buy
|
|
287
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
288
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
289
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
290
|
+
comply_scenario: governance_spend_authority
|
|
291
|
+
stateful: true
|
|
292
|
+
expected: |
|
|
293
|
+
Confirm the media buy with governance approval:
|
|
294
|
+
- media_buy_id: your platform's identifier
|
|
295
|
+
- status: active
|
|
296
|
+
- governance_context: echoed back confirming governance was validated
|
|
297
|
+
- packages: line items
|
|
298
|
+
|
|
299
|
+
sample_request:
|
|
300
|
+
account:
|
|
301
|
+
brand:
|
|
302
|
+
domain: "acmeoutdoor.example"
|
|
303
|
+
operator: "pinnacle-agency.example"
|
|
304
|
+
brand:
|
|
305
|
+
domain: "acmeoutdoor.example"
|
|
306
|
+
governance_context: "gov_ctx_acme_conditional_approved"
|
|
307
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
308
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
309
|
+
packages:
|
|
310
|
+
- product_id: "sports_ctv_q2"
|
|
311
|
+
budget: 25000
|
|
312
|
+
pricing_option_id: "cpm_guaranteed"
|
|
313
|
+
- product_id: "lifestyle_display_q2"
|
|
314
|
+
budget: 15000
|
|
315
|
+
pricing_option_id: "cpm_standard"
|
|
316
|
+
|
|
317
|
+
idempotency_key: "$generate:uuid_v4#governance_spend_authority_create_buy_with_conditions_create_media_buy"
|
|
318
|
+
context:
|
|
319
|
+
correlation_id: "governance_spend_authority--create_media_buy"
|
|
320
|
+
validations:
|
|
321
|
+
- check: response_schema
|
|
322
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
323
|
+
|
|
324
|
+
- check: field_present
|
|
325
|
+
path: "context"
|
|
326
|
+
description: "Response echoes back the context object"
|
|
327
|
+
- check: field_value
|
|
328
|
+
path: "context.correlation_id"
|
|
329
|
+
value: "governance_spend_authority--create_media_buy"
|
|
330
|
+
description: "Context correlation_id returned unchanged"
|