@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,510 @@
|
|
|
1
|
+
id: creative_template
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Creative template and transformation agent"
|
|
4
|
+
protocol: creative
|
|
5
|
+
category: creative_template
|
|
6
|
+
summary: "Stateless creative agent that takes assets in, applies templates, and produces tags or rendered output."
|
|
7
|
+
track: creative
|
|
8
|
+
required_tools:
|
|
9
|
+
- build_creative
|
|
10
|
+
|
|
11
|
+
# Cross-step assertion (adcp#2664). status.monotonic rejects resource
|
|
12
|
+
# status transitions observed across steps that aren't on the spec
|
|
13
|
+
# lifecycle graph — e.g. approved → processing on a creative asset.
|
|
14
|
+
#
|
|
15
|
+
# Cross-resource assertion (adcp#2859). impairment.coherence verifies that
|
|
16
|
+
# creative.rejected transitions propagate to any non-terminal media buy
|
|
17
|
+
# that references the creative — the buy's impairments[] MUST list an
|
|
18
|
+
# entry for the rejected creative, and `health` MUST track impairments[]
|
|
19
|
+
# non-empty (impaired) ↔ empty (ok). See snapshot-and-log Rule 1 and
|
|
20
|
+
# lifecycle.mdx Compliance for the full forward + inverse rule. Grades
|
|
21
|
+
# not_applicable until #2860 wires the cross-resource exercise.
|
|
22
|
+
invariants:
|
|
23
|
+
- status.monotonic
|
|
24
|
+
- impairment.coherence
|
|
25
|
+
|
|
26
|
+
narrative: |
|
|
27
|
+
You build a creative management or rich media platform — think Celtra, a format
|
|
28
|
+
conversion service, or any tool that defines ad templates and transforms input assets
|
|
29
|
+
into finished creatives. Your agent is stateless: every call is self-contained. The
|
|
30
|
+
caller passes assets inline with each request, and you return the result. There is no
|
|
31
|
+
creative library to sync to and no persistent state between calls.
|
|
32
|
+
|
|
33
|
+
A buyer agent connects to discover your templates, preview them with real brand assets,
|
|
34
|
+
and request fully built creatives for trafficking. This storyboard walks through that
|
|
35
|
+
flow step by step.
|
|
36
|
+
|
|
37
|
+
agent:
|
|
38
|
+
interaction_model: stateless_transform
|
|
39
|
+
capabilities:
|
|
40
|
+
- supports_transformation
|
|
41
|
+
examples:
|
|
42
|
+
- "Celtra"
|
|
43
|
+
- "Format conversion services"
|
|
44
|
+
- "Rich media template platforms"
|
|
45
|
+
|
|
46
|
+
caller:
|
|
47
|
+
role: buyer_agent
|
|
48
|
+
example: "Scope3 (DSP)"
|
|
49
|
+
|
|
50
|
+
prerequisites:
|
|
51
|
+
description: |
|
|
52
|
+
The caller needs a brand identity (brand.json with colors, fonts, logos) and creative
|
|
53
|
+
assets that match the format's requirements (images at the right dimensions, text at
|
|
54
|
+
the right lengths). The test kit provides these ingredients so you can test without
|
|
55
|
+
assembling them yourself.
|
|
56
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
57
|
+
|
|
58
|
+
phases:
|
|
59
|
+
- id: capability_discovery
|
|
60
|
+
title: "Capability discovery"
|
|
61
|
+
narrative: |
|
|
62
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports creative operations before browsing or building creatives.
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- id: get_capabilities
|
|
66
|
+
title: "Check agent capabilities"
|
|
67
|
+
narrative: |
|
|
68
|
+
Verify that the agent declares the expected protocol support before
|
|
69
|
+
proceeding with domain-specific operations.
|
|
70
|
+
task: get_adcp_capabilities
|
|
71
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
72
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
73
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
74
|
+
comply_scenario: capability_discovery
|
|
75
|
+
stateful: false
|
|
76
|
+
expected: |
|
|
77
|
+
Return capabilities declaring creative in supported_protocols, confirming the agent handles creative operations.
|
|
78
|
+
sample_request:
|
|
79
|
+
context:
|
|
80
|
+
correlation_id: "creative_template--get_capabilities"
|
|
81
|
+
validations:
|
|
82
|
+
- check: response_schema
|
|
83
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
84
|
+
- check: field_present
|
|
85
|
+
path: "supported_protocols"
|
|
86
|
+
description: "Agent declares supported protocols"
|
|
87
|
+
|
|
88
|
+
- check: field_present
|
|
89
|
+
path: "context"
|
|
90
|
+
description: "Response echoes back the context object"
|
|
91
|
+
- check: field_value
|
|
92
|
+
path: "context.correlation_id"
|
|
93
|
+
value: "creative_template--get_capabilities"
|
|
94
|
+
description: "Context correlation_id returned unchanged"
|
|
95
|
+
- id: format_exposure
|
|
96
|
+
title: "Format discovery"
|
|
97
|
+
narrative: |
|
|
98
|
+
The buyer's first question is: what can your platform do? They call
|
|
99
|
+
list_creative_formats to discover your templates — the available ad formats,
|
|
100
|
+
what assets each one requires, what dimensions they render at, and what
|
|
101
|
+
variables (dynamic fields) they support.
|
|
102
|
+
|
|
103
|
+
For a Celtra-like platform, this is where your publisher templates (Yahoo
|
|
104
|
+
Lighthouse, custom slider units) and standard templates (300x250 banners,
|
|
105
|
+
responsive display) get exposed as AdCP-compliant format definitions.
|
|
106
|
+
|
|
107
|
+
steps:
|
|
108
|
+
- id: discover_formats
|
|
109
|
+
title: "Discover available formats"
|
|
110
|
+
narrative: |
|
|
111
|
+
A buyer agent asks: "What creative formats do you support?" This is
|
|
112
|
+
the entry point for any interaction with your agent. The response tells
|
|
113
|
+
the buyer what templates are available, what assets each one needs, and
|
|
114
|
+
what the output dimensions will be.
|
|
115
|
+
task: list_creative_formats
|
|
116
|
+
schema_ref: "creative/list-creative-formats-request.json"
|
|
117
|
+
response_schema_ref: "creative/list-creative-formats-response.json"
|
|
118
|
+
doc_ref: "/creative/task-reference/list_creative_formats"
|
|
119
|
+
comply_scenario: creative_sync
|
|
120
|
+
stateful: false
|
|
121
|
+
expected: |
|
|
122
|
+
Return your supported formats. Each format must include:
|
|
123
|
+
- format_id with your agent_url and a unique id
|
|
124
|
+
- Human-readable name and description
|
|
125
|
+
- Asset slots with types, roles, and requirements (dimensions, file sizes, mime types)
|
|
126
|
+
- Render dimensions (width/height per render)
|
|
127
|
+
- Variables array if the format supports dynamic fields (text, colors, images)
|
|
128
|
+
|
|
129
|
+
sample_request:
|
|
130
|
+
context:
|
|
131
|
+
correlation_id: "creative_template--discover_formats"
|
|
132
|
+
|
|
133
|
+
validations:
|
|
134
|
+
- check: response_schema
|
|
135
|
+
description: "Response matches list-creative-formats-response.json schema"
|
|
136
|
+
- check: field_present
|
|
137
|
+
path: "formats"
|
|
138
|
+
description: "Response contains a formats array"
|
|
139
|
+
- check: field_present
|
|
140
|
+
path: "formats[0].format_id.agent_url"
|
|
141
|
+
description: "Each format has a format_id with agent_url"
|
|
142
|
+
- check: field_present
|
|
143
|
+
path: "formats[0].assets"
|
|
144
|
+
description: "Each format defines its asset requirements"
|
|
145
|
+
- check: field_present
|
|
146
|
+
path: "formats[0].renders"
|
|
147
|
+
description: "Each format defines its render dimensions"
|
|
148
|
+
|
|
149
|
+
- check: field_present
|
|
150
|
+
path: "context"
|
|
151
|
+
description: "Response echoes back the context object"
|
|
152
|
+
- check: field_value
|
|
153
|
+
path: "context.correlation_id"
|
|
154
|
+
value: "creative_template--discover_formats"
|
|
155
|
+
description: "Context correlation_id returned unchanged"
|
|
156
|
+
- id: filter_by_type
|
|
157
|
+
title: "Filter formats by type"
|
|
158
|
+
narrative: |
|
|
159
|
+
The buyer narrows the search. Maybe they only want display formats, or
|
|
160
|
+
they need formats that accept image assets at specific dimensions. This
|
|
161
|
+
tests that your agent handles filter parameters correctly.
|
|
162
|
+
task: list_creative_formats
|
|
163
|
+
schema_ref: "creative/list-creative-formats-request.json"
|
|
164
|
+
response_schema_ref: "creative/list-creative-formats-response.json"
|
|
165
|
+
doc_ref: "/creative/task-reference/list_creative_formats"
|
|
166
|
+
comply_scenario: creative_sync
|
|
167
|
+
stateful: false
|
|
168
|
+
expected: |
|
|
169
|
+
Return only formats matching the filter criteria. If no formats match,
|
|
170
|
+
return an empty formats array — not an error.
|
|
171
|
+
|
|
172
|
+
sample_request:
|
|
173
|
+
type: "display"
|
|
174
|
+
max_width: 728
|
|
175
|
+
max_height: 90
|
|
176
|
+
|
|
177
|
+
context:
|
|
178
|
+
correlation_id: "creative_template--filter_by_type"
|
|
179
|
+
validations:
|
|
180
|
+
- check: response_schema
|
|
181
|
+
description: "Response matches schema"
|
|
182
|
+
|
|
183
|
+
- check: field_present
|
|
184
|
+
path: "context"
|
|
185
|
+
description: "Response echoes back the context object"
|
|
186
|
+
- check: field_value
|
|
187
|
+
path: "context.correlation_id"
|
|
188
|
+
value: "creative_template--filter_by_type"
|
|
189
|
+
description: "Context correlation_id returned unchanged"
|
|
190
|
+
- check: field_present
|
|
191
|
+
path: "formats[0].format_id.agent_url"
|
|
192
|
+
description: "Format IDs include agent_url"
|
|
193
|
+
- check: field_present
|
|
194
|
+
path: "formats[0].format_id.id"
|
|
195
|
+
description: "Format IDs include id — must match those in get_products"
|
|
196
|
+
- id: preview
|
|
197
|
+
title: "Preview with real assets"
|
|
198
|
+
narrative: |
|
|
199
|
+
The buyer wants to see what the template looks like with actual content.
|
|
200
|
+
They pass a complete creative manifest inline — brand identity, assets,
|
|
201
|
+
and format reference — and your agent renders a preview.
|
|
202
|
+
|
|
203
|
+
This is where the stateless nature matters: the buyer doesn't sync assets
|
|
204
|
+
to your library first. Everything needed is in the request.
|
|
205
|
+
|
|
206
|
+
To test this, you need compatible "ingredients" — a brand.json and assets
|
|
207
|
+
that match your format's requirements. The test kit provides these.
|
|
208
|
+
|
|
209
|
+
steps:
|
|
210
|
+
- id: preview_creative
|
|
211
|
+
title: "Preview a creative"
|
|
212
|
+
narrative: |
|
|
213
|
+
The buyer has chosen a format from Phase 1 and assembled a manifest with
|
|
214
|
+
brand assets. They call preview_creative with the full manifest inline to
|
|
215
|
+
see how the template renders with real content.
|
|
216
|
+
|
|
217
|
+
For a Celtra-like platform, this is where the template gets populated with
|
|
218
|
+
the advertiser's images, copy, and brand colors, and a preview URL or HTML
|
|
219
|
+
snippet is returned.
|
|
220
|
+
task: preview_creative
|
|
221
|
+
schema_ref: "creative/preview-creative-request.json"
|
|
222
|
+
response_schema_ref: "creative/preview-creative-response.json"
|
|
223
|
+
doc_ref: "/creative/task-reference/preview_creative"
|
|
224
|
+
comply_scenario: creative_flow
|
|
225
|
+
stateful: false
|
|
226
|
+
expected: |
|
|
227
|
+
Return a preview render. The response should include:
|
|
228
|
+
- A preview URL (iframe-embeddable) and/or inline HTML
|
|
229
|
+
- Render dimensions matching the format spec
|
|
230
|
+
- An expiration timestamp (previews are ephemeral)
|
|
231
|
+
|
|
232
|
+
The preview should show the template populated with the provided assets —
|
|
233
|
+
not a placeholder or empty template.
|
|
234
|
+
|
|
235
|
+
sample_request:
|
|
236
|
+
account:
|
|
237
|
+
brand:
|
|
238
|
+
domain: "acmeoutdoor.example"
|
|
239
|
+
operator: "pinnacle-agency.example"
|
|
240
|
+
request_type: "single"
|
|
241
|
+
creative_manifest:
|
|
242
|
+
format_id:
|
|
243
|
+
agent_url: "https://your-agent.example.com"
|
|
244
|
+
id: "display_300x250"
|
|
245
|
+
assets:
|
|
246
|
+
image:
|
|
247
|
+
asset_type: "image"
|
|
248
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-300x250.jpg"
|
|
249
|
+
width: 300
|
|
250
|
+
height: 250
|
|
251
|
+
click_url:
|
|
252
|
+
asset_type: "url"
|
|
253
|
+
url: "https://acmeoutdoor.example/summer-sale"
|
|
254
|
+
headline:
|
|
255
|
+
asset_type: "text"
|
|
256
|
+
content: "Summer Sale — 40% Off All Gear"
|
|
257
|
+
output_format: "url"
|
|
258
|
+
quality: "draft"
|
|
259
|
+
|
|
260
|
+
context:
|
|
261
|
+
correlation_id: "creative_template--preview_creative"
|
|
262
|
+
validations:
|
|
263
|
+
- check: response_schema
|
|
264
|
+
description: "Response matches preview-creative-response.json schema"
|
|
265
|
+
- check: field_present
|
|
266
|
+
path: "previews[0].renders[0].preview_url"
|
|
267
|
+
description: "Preview includes a renderable URL"
|
|
268
|
+
|
|
269
|
+
- check: field_present
|
|
270
|
+
path: "context"
|
|
271
|
+
description: "Response echoes back the context object"
|
|
272
|
+
- check: field_value
|
|
273
|
+
path: "context.correlation_id"
|
|
274
|
+
value: "creative_template--preview_creative"
|
|
275
|
+
description: "Context correlation_id returned unchanged"
|
|
276
|
+
- id: build
|
|
277
|
+
title: "Full build (transformation)"
|
|
278
|
+
narrative: |
|
|
279
|
+
Now the buyer needs a finished creative — a serving tag or rendered output they
|
|
280
|
+
can traffic in a media buy. They call build_creative with the same inline manifest
|
|
281
|
+
and a target format. Your agent applies the template and returns the output.
|
|
282
|
+
|
|
283
|
+
This is where the three tag generation models come in:
|
|
284
|
+
- Universal tags: a single tag that adapts to any environment
|
|
285
|
+
- Single-placement tags: scoped to specific dimensions
|
|
286
|
+
- Multi-placement tags: covering multiple sizes in one tag
|
|
287
|
+
|
|
288
|
+
The output is a creative manifest with the serving code in an HTML, JavaScript,
|
|
289
|
+
or VAST asset — ready for the buyer to traffic.
|
|
290
|
+
|
|
291
|
+
steps:
|
|
292
|
+
- id: build_creative
|
|
293
|
+
title: "Build a creative from assets"
|
|
294
|
+
narrative: |
|
|
295
|
+
The buyer passes assets inline along with a target format and asks your agent
|
|
296
|
+
to produce a finished creative. This is the core transformation: raw assets in,
|
|
297
|
+
serving tag out.
|
|
298
|
+
|
|
299
|
+
For a Celtra-like platform, this means applying the template, assembling the
|
|
300
|
+
rich media unit, and returning an ad tag the buyer can traffic.
|
|
301
|
+
task: build_creative
|
|
302
|
+
schema_ref: "media-buy/build-creative-request.json"
|
|
303
|
+
response_schema_ref: "media-buy/build-creative-response.json"
|
|
304
|
+
doc_ref: "/creative/task-reference/build_creative"
|
|
305
|
+
comply_scenario: creative_flow
|
|
306
|
+
stateful: false
|
|
307
|
+
expected: |
|
|
308
|
+
Return a creative manifest with the output creative. The response should include:
|
|
309
|
+
- A creative manifest with serving code (html, javascript, or vast asset)
|
|
310
|
+
- The format_id matching the target format
|
|
311
|
+
- Assets array with the generated output
|
|
312
|
+
|
|
313
|
+
The output should be a valid, traffickable creative — not a preview or placeholder.
|
|
314
|
+
|
|
315
|
+
sample_request:
|
|
316
|
+
creative_manifest:
|
|
317
|
+
format_id:
|
|
318
|
+
agent_url: "https://your-agent.example.com"
|
|
319
|
+
id: "display_300x250"
|
|
320
|
+
assets:
|
|
321
|
+
image:
|
|
322
|
+
asset_type: "image"
|
|
323
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-300x250.jpg"
|
|
324
|
+
width: 300
|
|
325
|
+
height: 250
|
|
326
|
+
click_url:
|
|
327
|
+
asset_type: "url"
|
|
328
|
+
url: "https://acmeoutdoor.example/summer-sale"
|
|
329
|
+
headline:
|
|
330
|
+
asset_type: "text"
|
|
331
|
+
content: "Summer Sale — 40% Off All Gear"
|
|
332
|
+
target_format_id:
|
|
333
|
+
agent_url: "https://your-agent.example.com"
|
|
334
|
+
id: "display_300x250"
|
|
335
|
+
account:
|
|
336
|
+
brand:
|
|
337
|
+
domain: "acmeoutdoor.example"
|
|
338
|
+
operator: "pinnacle-agency.example"
|
|
339
|
+
|
|
340
|
+
idempotency_key: "$generate:uuid_v4#creative_template_build_build_creative"
|
|
341
|
+
context:
|
|
342
|
+
correlation_id: "creative_template--build_creative"
|
|
343
|
+
validations:
|
|
344
|
+
- check: response_schema
|
|
345
|
+
description: "Response matches build-creative-response.json schema"
|
|
346
|
+
- check: field_present
|
|
347
|
+
path: "creative_manifest.assets"
|
|
348
|
+
description: "Output manifest includes assets"
|
|
349
|
+
- check: field_present
|
|
350
|
+
path: "creative_manifest.format_id"
|
|
351
|
+
description: "Output manifest includes format_id"
|
|
352
|
+
|
|
353
|
+
- check: field_present
|
|
354
|
+
path: "context"
|
|
355
|
+
description: "Response echoes back the context object"
|
|
356
|
+
- check: field_value
|
|
357
|
+
path: "context.correlation_id"
|
|
358
|
+
value: "creative_template--build_creative"
|
|
359
|
+
description: "Context correlation_id returned unchanged"
|
|
360
|
+
- id: build_multi_format
|
|
361
|
+
title: "Build for multiple formats"
|
|
362
|
+
narrative: |
|
|
363
|
+
The buyer needs the same creative adapted to several sizes — 300x250, 728x90,
|
|
364
|
+
and 320x50. Instead of making three separate calls, they pass target_format_ids
|
|
365
|
+
(plural) and your agent returns manifests for each.
|
|
366
|
+
|
|
367
|
+
This tests the multi-format generation capability that makes template agents
|
|
368
|
+
valuable — build once, get all sizes.
|
|
369
|
+
task: build_creative
|
|
370
|
+
schema_ref: "media-buy/build-creative-request.json"
|
|
371
|
+
response_schema_ref: "media-buy/build-creative-response.json"
|
|
372
|
+
doc_ref: "/creative/task-reference/build_creative"
|
|
373
|
+
comply_scenario: creative_flow
|
|
374
|
+
stateful: false
|
|
375
|
+
expected: |
|
|
376
|
+
Return creative manifests for each requested format. If a format cannot be
|
|
377
|
+
produced, include it in the response with an error — don't fail the entire
|
|
378
|
+
request.
|
|
379
|
+
|
|
380
|
+
sample_request:
|
|
381
|
+
creative_manifest:
|
|
382
|
+
format_id:
|
|
383
|
+
agent_url: "https://your-agent.example.com"
|
|
384
|
+
id: "source_master"
|
|
385
|
+
assets:
|
|
386
|
+
image:
|
|
387
|
+
asset_type: "image"
|
|
388
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg"
|
|
389
|
+
width: 1200
|
|
390
|
+
height: 628
|
|
391
|
+
click_url:
|
|
392
|
+
asset_type: "url"
|
|
393
|
+
url: "https://acmeoutdoor.example/summer-sale"
|
|
394
|
+
headline:
|
|
395
|
+
asset_type: "text"
|
|
396
|
+
content: "Summer Sale — 40% Off All Gear"
|
|
397
|
+
target_format_ids:
|
|
398
|
+
- agent_url: "https://your-agent.example.com"
|
|
399
|
+
id: "display_300x250"
|
|
400
|
+
- agent_url: "https://your-agent.example.com"
|
|
401
|
+
id: "display_728x90"
|
|
402
|
+
- agent_url: "https://your-agent.example.com"
|
|
403
|
+
id: "display_320x50"
|
|
404
|
+
account:
|
|
405
|
+
brand:
|
|
406
|
+
domain: "acmeoutdoor.example"
|
|
407
|
+
operator: "pinnacle-agency.example"
|
|
408
|
+
|
|
409
|
+
idempotency_key: "$generate:uuid_v4#creative_template_build_build_multi_format"
|
|
410
|
+
context:
|
|
411
|
+
correlation_id: "creative_template--build_multi_format"
|
|
412
|
+
validations:
|
|
413
|
+
- check: response_schema
|
|
414
|
+
description: "Response matches schema"
|
|
415
|
+
|
|
416
|
+
- check: field_present
|
|
417
|
+
path: "context"
|
|
418
|
+
description: "Response echoes back the context object"
|
|
419
|
+
- check: field_value
|
|
420
|
+
path: "context.correlation_id"
|
|
421
|
+
value: "creative_template--build_multi_format"
|
|
422
|
+
description: "Context correlation_id returned unchanged"
|
|
423
|
+
- id: audio_build
|
|
424
|
+
title: "Audio creative build (optional)"
|
|
425
|
+
# Optional phase: runner grades this not_applicable for agents that do not declare
|
|
426
|
+
# any audio format in list_creative_formats. To enable, set supports_audio_formats:
|
|
427
|
+
# true in the test kit (acme-outdoor.yaml) and ensure the agent returns at least one
|
|
428
|
+
# audio format from list_creative_formats before this phase runs.
|
|
429
|
+
optional: true
|
|
430
|
+
skip_if: "!test_kit.supports_audio_formats"
|
|
431
|
+
narrative: |
|
|
432
|
+
Audio-creative platforms — TTS services, voice generation agents, audio mix/master
|
|
433
|
+
pipelines — produce audio assets rather than display tags. They cannot pass the
|
|
434
|
+
existing build phase, which sends image inputs and expects HTML/VAST output.
|
|
435
|
+
|
|
436
|
+
This optional phase exercises build_creative with audio inputs (a script and a voice
|
|
437
|
+
descriptor) and validates that the output carries a servable audio asset.
|
|
438
|
+
|
|
439
|
+
The phase accepts both sync returns (small platforms render fast) and task-envelope
|
|
440
|
+
async returns (TTS pipelines may run for minutes). The comply_scenario: creative_flow
|
|
441
|
+
gate covers both paths.
|
|
442
|
+
|
|
443
|
+
steps:
|
|
444
|
+
- id: build_audio_creative
|
|
445
|
+
title: "Build an audio creative from assets"
|
|
446
|
+
narrative: |
|
|
447
|
+
The buyer passes audio inputs — a script and a voice descriptor — alongside a
|
|
448
|
+
target audio format and asks the agent to produce a finished audio creative.
|
|
449
|
+
The output must carry an audio asset with a resolvable URL.
|
|
450
|
+
|
|
451
|
+
Audio platforms that render synchronously may return the creative_manifest
|
|
452
|
+
immediately. TTS pipelines that take minutes may return a task envelope
|
|
453
|
+
(submitted → working → completed). Both are valid under comply_scenario:
|
|
454
|
+
creative_flow.
|
|
455
|
+
task: build_creative
|
|
456
|
+
schema_ref: "media-buy/build-creative-request.json"
|
|
457
|
+
response_schema_ref: "media-buy/build-creative-response.json"
|
|
458
|
+
doc_ref: "/creative/task-reference/build_creative"
|
|
459
|
+
comply_scenario: creative_flow
|
|
460
|
+
stateful: false
|
|
461
|
+
expected: |
|
|
462
|
+
Return a creative manifest with an audio output asset. The response should include:
|
|
463
|
+
- A creative manifest with an audio asset (asset_type: audio) and a resolvable URL
|
|
464
|
+
- The format_id matching the target audio format
|
|
465
|
+
|
|
466
|
+
Both sync (immediate creative_manifest) and task-envelope async returns are accepted.
|
|
467
|
+
|
|
468
|
+
sample_request:
|
|
469
|
+
creative_manifest:
|
|
470
|
+
format_id:
|
|
471
|
+
agent_url: "https://your-agent.example.com"
|
|
472
|
+
id: "audio_30s"
|
|
473
|
+
assets:
|
|
474
|
+
script:
|
|
475
|
+
asset_type: "text"
|
|
476
|
+
content: "Built for the trail. Acme Outdoor — premium gear for every adventure."
|
|
477
|
+
voice:
|
|
478
|
+
asset_type: "text"
|
|
479
|
+
content: "narrator-warm"
|
|
480
|
+
click_url:
|
|
481
|
+
asset_type: "url"
|
|
482
|
+
url: "https://acmeoutdoor.example/summer-sale"
|
|
483
|
+
target_format_id:
|
|
484
|
+
agent_url: "https://your-agent.example.com"
|
|
485
|
+
id: "audio_30s"
|
|
486
|
+
account:
|
|
487
|
+
brand:
|
|
488
|
+
domain: "acmeoutdoor.example"
|
|
489
|
+
operator: "pinnacle-agency.example"
|
|
490
|
+
|
|
491
|
+
idempotency_key: "$generate:uuid_v4#creative_template_audio_build_build_audio_creative"
|
|
492
|
+
context:
|
|
493
|
+
correlation_id: "creative_template--build_audio_creative"
|
|
494
|
+
validations:
|
|
495
|
+
- check: response_schema
|
|
496
|
+
description: "Response matches build-creative-response.json schema"
|
|
497
|
+
- check: field_present
|
|
498
|
+
path: "creative_manifest.assets"
|
|
499
|
+
description: "Output manifest includes assets"
|
|
500
|
+
- check: field_present
|
|
501
|
+
path: "creative_manifest.format_id"
|
|
502
|
+
description: "Output manifest includes format_id"
|
|
503
|
+
|
|
504
|
+
- check: field_present
|
|
505
|
+
path: "context"
|
|
506
|
+
description: "Response echoes back the context object"
|
|
507
|
+
- check: field_value
|
|
508
|
+
path: "context.correlation_id"
|
|
509
|
+
value: "creative_template--build_audio_creative"
|
|
510
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
id: governance_aware_seller
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Governance-aware seller"
|
|
4
|
+
protocol: media-buy
|
|
5
|
+
category: governance_aware_seller
|
|
6
|
+
summary: "Seller agent that composes with a campaign-governance agent on the buyer side after baseline sync_governance registration — calls check_governance before confirming spend, and propagates governance approvals, conditions, and denials unchanged. Optional claim for the full governance-check loop."
|
|
7
|
+
track: media_buy
|
|
8
|
+
required_tools:
|
|
9
|
+
- sync_governance
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
# Cross-step assertion (adcp#2639): governance-aware sellers are exactly
|
|
13
|
+
# the surface this assertion protects. If a seller propagates a denial
|
|
14
|
+
# response from its governance agent but then creates the media buy
|
|
15
|
+
# anyway, no per-step validation notices — this assertion does.
|
|
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 — catches an approved-with-conditions buy jumping
|
|
19
|
+
# from pending_creatives back to pending_start, or active → pending_creatives.
|
|
20
|
+
invariants:
|
|
21
|
+
- governance.denial_blocks_mutation
|
|
22
|
+
- status.monotonic
|
|
23
|
+
requires_scenarios:
|
|
24
|
+
- media_buy_seller/governance_approved
|
|
25
|
+
- media_buy_seller/governance_conditions
|
|
26
|
+
- media_buy_seller/governance_denied
|
|
27
|
+
- media_buy_seller/governance_denied_recovery
|
|
28
|
+
- governance_aware_seller/governance_multi_agent_rejected
|
|
29
|
+
|
|
30
|
+
narrative: |
|
|
31
|
+
Baseline `sync_governance` registration is exercised by the money-moving
|
|
32
|
+
sales specialisms. This specialism covers the full governance composition
|
|
33
|
+
loop after registration: `check_governance` consultation before confirming
|
|
34
|
+
spend, plus `GOVERNANCE_DENIED` and governance-condition propagation.
|
|
35
|
+
|
|
36
|
+
Registration and consultation are deliberately separate layers. Baseline
|
|
37
|
+
sellers register exactly one buyer governance agent per account so the
|
|
38
|
+
account has an auditable governance endpoint on file before spend moves.
|
|
39
|
+
That registration is useful even when the seller does not actively consult
|
|
40
|
+
the agent on every mutation: it establishes the account binding, lets buyers
|
|
41
|
+
rotate governance endpoints through a single task, and gives graders one
|
|
42
|
+
place to enforce the `governance_agents.maxItems: 1` invariant. Sellers only
|
|
43
|
+
claim this specialism when they also promise to call `check_governance` and
|
|
44
|
+
propagate governance results during spend-committing flows.
|
|
45
|
+
|
|
46
|
+
Sellers that want to advertise "I honor the buyer's governance plan" claim
|
|
47
|
+
this specialism. The grading exercises the four scenarios that require the
|
|
48
|
+
governance handshake:
|
|
49
|
+
- `governance_approved` — seller accepts a buy that governance approved and
|
|
50
|
+
echoes the `governance_context` token back,
|
|
51
|
+
- `governance_conditions` — seller accepts a buy with conditions attached by
|
|
52
|
+
governance and propagates them through to the response,
|
|
53
|
+
- `governance_denied` — seller refuses a buy that governance denied and
|
|
54
|
+
returns `GOVERNANCE_DENIED` with the governance findings,
|
|
55
|
+
- `governance_denied_recovery` — seller accepts the corrected retry that
|
|
56
|
+
falls within the plan limits after the buyer reads the denial findings.
|
|
57
|
+
|
|
58
|
+
Sellers that do not claim this specialism are graded `not_applicable` on
|
|
59
|
+
the `check_governance` scenarios rather than failed. This mirrors the
|
|
60
|
+
pattern used by the other governance-* specialisms
|
|
61
|
+
(`governance-spend-authority`, `governance-delivery-monitor`) and by
|
|
62
|
+
`measurement-verification` — cross-cutting behaviors beyond registration
|
|
63
|
+
are gated behind explicit specialism claims instead of being force-included
|
|
64
|
+
under every sales-* specialism. (`signed-requests` was previously listed
|
|
65
|
+
here; it was reclassified in 3.1 to a universal capability-gated storyboard.)
|
|
66
|
+
|
|
67
|
+
Composition means the seller:
|
|
68
|
+
- uses the account's registered single governance agent (one agent per
|
|
69
|
+
account; internal specialist review composes inside the agent, not at
|
|
70
|
+
registration — see #3010 / #3015),
|
|
71
|
+
- calls `check_governance` on that registered agent before confirming a
|
|
72
|
+
spend-committing request,
|
|
73
|
+
- returns `GOVERNANCE_DENIED` with the governance findings propagated
|
|
74
|
+
unchanged when the check denies,
|
|
75
|
+
- echoes the `governance_context` token from approvals and surfaces
|
|
76
|
+
governance conditions to the buyer,
|
|
77
|
+
- does not silently downgrade the denial to a seller-scoped error
|
|
78
|
+
(`VALIDATION_ERROR` etc.) — the buyer needs to know the denial came from
|
|
79
|
+
its own governance agent to correct and retry.
|
|
80
|
+
|
|
81
|
+
agent:
|
|
82
|
+
interaction_model: media_buy_seller
|
|
83
|
+
capabilities:
|
|
84
|
+
- sells_media
|
|
85
|
+
- governance_aware
|
|
86
|
+
examples:
|
|
87
|
+
- "Publisher seller that integrates check_governance before confirming spend"
|
|
88
|
+
- "SSP that honors buyer-side governance plans before confirming bids"
|
|
89
|
+
- "Retail media network that refuses buys when the buyer's governance denies"
|
|
90
|
+
|
|
91
|
+
caller:
|
|
92
|
+
role: buyer_agent
|
|
93
|
+
example: "Pinnacle Agency (buyer) with a registered governance agent"
|
|
94
|
+
|
|
95
|
+
prerequisites:
|
|
96
|
+
description: |
|
|
97
|
+
A governance agent that supports `sync_plans` and `check_governance`, and
|
|
98
|
+
a seller agent that supports `sync_governance` and propagates governance
|
|
99
|
+
approvals, conditions, and denials unchanged.
|
|
100
|
+
|
|
101
|
+
By default, the grading runner uses the training governance agent at
|
|
102
|
+
`test-agent.adcontextprotocol.org`. Override with `--governance-agent-url`
|
|
103
|
+
to use a custom governance agent that satisfies the campaign-governance
|
|
104
|
+
protocol.
|
|
105
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
106
|
+
|
|
107
|
+
phases:
|
|
108
|
+
- id: capability_discovery
|
|
109
|
+
title: "Capability discovery"
|
|
110
|
+
narrative: |
|
|
111
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
|
|
112
|
+
|
|
113
|
+
steps:
|
|
114
|
+
- id: get_capabilities
|
|
115
|
+
title: "Check agent capabilities"
|
|
116
|
+
narrative: |
|
|
117
|
+
Verify that the agent declares the expected protocol support before
|
|
118
|
+
proceeding with domain-specific operations.
|
|
119
|
+
task: get_adcp_capabilities
|
|
120
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
121
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
122
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
123
|
+
comply_scenario: capability_discovery
|
|
124
|
+
stateful: false
|
|
125
|
+
expected: |
|
|
126
|
+
Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
|
|
127
|
+
sample_request:
|
|
128
|
+
context:
|
|
129
|
+
correlation_id: "governance_aware_seller--get_capabilities"
|
|
130
|
+
validations:
|
|
131
|
+
- check: response_schema
|
|
132
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
133
|
+
- check: field_present
|
|
134
|
+
path: "supported_protocols"
|
|
135
|
+
description: "Agent declares supported protocols"
|
|
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_aware_seller--get_capabilities"
|
|
143
|
+
description: "Context correlation_id returned unchanged"
|